AsientoPredefinidoEjecutado.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using sage.ew.enumerations;
6 using sage.ew.interficies;
7 
8 namespace sage.ew.contabilidad
9 {
13  internal class AsientoPredefinidoEjecutado
14  {
15  #region Variables
16 
17  private readonly AsientosPredefinidosGenerador generadorPredefinidos;
18  private readonly IEnumerable<AsientoPredefinido.LineaAsientoPredefinido> lineasPredefinido;
19  private readonly IAsientos asientoGenerado;
20  private eTipoAsientoPredefinidoPrevisto tipoAsientoPrevisto = eTipoAsientoPredefinidoPrevisto.Indetermiando;
21 
22  #endregion Variables
23 
24  #region Constructores
25 
29  private AsientoPredefinidoEjecutado() { }
30 
37  public AsientoPredefinidoEjecutado(AsientosPredefinidosGenerador toGenerador, IEnumerable<AsientoPredefinido.LineaAsientoPredefinido> toLineas, IAsientos toAsiento)
38  {
39  lineasPredefinido = toLineas;
40  asientoGenerado = toAsiento;
41  generadorPredefinidos = toGenerador;
42 
43  evaluarTipoAsiento();
44  }
45 
46  #endregion Constructores
47 
48  #region Métodos públicos
49 
50  #region Getters
51 
56  public AsientosPredefinidosGenerador GetGenerador()
57  {
58  return generadorPredefinidos;
59  }
60 
65  public IAsientos GetAsiento()
66  {
67  return asientoGenerado;
68  }
69 
74  public IEnumerable<AsientoPredefinido.LineaAsientoPredefinido> GetLineas()
75  {
76  return lineasPredefinido;
77  }
78 
83  public eTipoAsientoPredefinidoPrevisto GetTipoAsientoPrevisto()
84  {
85  return tipoAsientoPrevisto;
86  }
87 
88  #endregion Getters
89 
94  public bool EsFactura()
95  {
96  return generadorPredefinidos._DebeContenerInformacionDeFactura(lineasPredefinido);
97  }
98 
103  public bool EsFacturaDeVenta()
104  {
105  return generadorPredefinidos._EsFacturaVenta(lineasPredefinido);
106  }
107 
112  public bool EsFacturaDeCompra()
113  {
114  return generadorPredefinidos._EsFacturaCompra(lineasPredefinido);
115  }
116 
121  public bool EsUnCobro()
122  {
123  return tipoAsientoPrevisto == eTipoAsientoPredefinidoPrevisto.Cobro;
124  }
125 
130  public bool EsUnPago()
131  {
132  return tipoAsientoPrevisto == eTipoAsientoPredefinidoPrevisto.Pago;
133  }
134 
139  public bool EsUnCobroConRelaciones()
140  {
141  bool cobro = tipoAsientoPrevisto == eTipoAsientoPredefinidoPrevisto.Cobro;
142  bool relaciones = ContieneRelaciones();
143  return (cobro && relaciones);
144  }
145 
150  public bool EsUnPagoConRelaciones()
151  {
152  bool pago = tipoAsientoPrevisto == eTipoAsientoPredefinidoPrevisto.Pago;
153  bool relaciones = ContieneRelaciones();
154  return (pago && relaciones);
155  }
156 
161  public bool ContieneBancos()
162  {
163  var lineasDeBancos = lineasPredefinido.Where(lolinea => CONTABILIDAD._EsBanco(lolinea._Cuenta)).ToList();
164  return lineasDeBancos.Any();
165  }
166 
171  public bool ContieneTesoreria()
172  {
173  var lineasDeCajas = lineasPredefinido.Where(lolinea => CONTABILIDAD._EsTesoreria(lolinea._Cuenta)).ToList();
174  return lineasDeCajas.Any();
175  }
176 
181  public bool ContieneClientes()
182  {
183  var lineasDeClientes = lineasPredefinido.Where(lolinea => CONTABILIDAD._EsCliente(lolinea._Cuenta)).ToList();
184  return lineasDeClientes.Any();
185  }
186 
191  public bool ContieneProveedores()
192  {
193  var lineasDeProveedores = lineasPredefinido.Where(lolinea => CONTABILIDAD._EsProveedor(lolinea._Cuenta)).ToList();
194  return lineasDeProveedores.Any();
195  }
196 
201  public bool ContieneTrabajadores()
202  {
203  var lineasDeTrabajadores = lineasPredefinido.Where(lolinea => CONTABILIDAD._EsTrabajador(lolinea._Cuenta)).ToList();
204  return lineasDeTrabajadores.Any();
205  }
206 
211  public bool ContieneRelaciones()
212  {
213  return lineasPredefinido.Any(lolinea => !String.IsNullOrWhiteSpace(lolinea._Relacion));
214  }
215 
220  public IEnumerable<string> ObtenerRelaciones()
221  {
222  List<string> lisRelaciones = new List<string>();
223  var lineasConRelaciones = lineasPredefinido.Where(lolinea => !String.IsNullOrWhiteSpace(lolinea._Relacion)).ToList();
224  lineasConRelaciones.ForEach(loLinea => lisRelaciones.Add(loLinea._Relacion));
225  return lisRelaciones;
226  }
227 
228  #endregion Métodos públicos
229 
230  #region Métodos privados
231 
235  private void evaluarTipoAsiento()
236  {
237  if (asientoGenerado == null)
238  tipoAsientoPrevisto = eTipoAsientoPredefinidoPrevisto.Ninguno;
239  else
240  {
241  if (generadorPredefinidos._DebeContenerInformacionDeFactura(lineasPredefinido)) //Determino si es una factura
242  {
243  evaluarTipoAsiento_Facturas();
244  }
245  else //No es una factura, trato de determinar si es un cobro-pago
246  {
247  if (ContieneTesoreria())
248  {
249  evaluarTipoAsiento_CobrosPagos();
250  }
251  else //No se que es...
252  tipoAsientoPrevisto = eTipoAsientoPredefinidoPrevisto.Indetermiando;
253  }
254  }
255 
256  }
257 
261  private void evaluarTipoAsiento_Facturas()
262  {
263  bool esFacturaVenta = EsFacturaDeVenta();
264  bool esFacturaCompra = EsFacturaDeCompra();
265 
266  if (esFacturaVenta && esFacturaCompra)
267  {
268  tipoAsientoPrevisto = eTipoAsientoPredefinidoPrevisto.Indetermiando; //Caso no contemplado => posible error
269  }
270  else
271  {
272  if (esFacturaVenta)
273  tipoAsientoPrevisto = eTipoAsientoPredefinidoPrevisto.FacturaVenta;
274 
275  if (esFacturaCompra)
276  tipoAsientoPrevisto = eTipoAsientoPredefinidoPrevisto.FacturaCompra;
277  }
278  }
279 
283  private void evaluarTipoAsiento_CobrosPagos()
284  {
285  bool tieneClientes = ContieneClientes();
286  bool tieneProveedores = ContieneProveedores() || ContieneTrabajadores(); //Los trabajadores son de alguna forma 'proveedores de servicios'
287 
288  if (tieneClientes && tieneProveedores)
289  {
290  tipoAsientoPrevisto = eTipoAsientoPredefinidoPrevisto.Indetermiando; //Caso no contemplado => posible error
291  }
292  else
293  {
294  if (tieneClientes)
295  tipoAsientoPrevisto = eTipoAsientoPredefinidoPrevisto.Cobro;
296 
297  if (tieneProveedores)
298  tipoAsientoPrevisto = eTipoAsientoPredefinidoPrevisto.Pago;
299  }
300  }
301 
302  #endregion Métodos privados
303  }
304 }
Interficie Asientos
Definition: IAsientos.cs:17
eTipoAsientoPredefinidoPrevisto
Tipos de asiento que se puede generar