2 using System.Collections.Generic;
10 namespace sage.ew.contabilidad
15 internal class AsientoPredefinidoGestorDeEjecuciones
20 private readonly AsientosPredefinidosGenerador generadorPredefinidos;
25 private List<AsientoPredefinidoEjecutado> generacionesEjecutadas =
new List<AsientoPredefinidoEjecutado>();
27 private Dictionary<string, string> dicFacturasAutomaticas =
new Dictionary<string, string>();
34 AsientoPredefinidoGestorDeEjecuciones() { }
40 public AsientoPredefinidoGestorDeEjecuciones(AsientosPredefinidosGenerador toGenerador) : this()
42 generadorPredefinidos = toGenerador;
45 #endregion Constructores 52 public void AddOperacionEjecutada(IEnumerable<AsientoPredefinido.LineaAsientoPredefinido> toLineas,
IAsientos toAsientoGenerado)
54 generacionesEjecutadas.Add(
new AsientoPredefinidoEjecutado(generadorPredefinidos, toLineas, toAsientoGenerado));
62 generacionesEjecutadas.Clear();
63 dicFacturasAutomaticas.Clear();
69 public void Execute(Dictionary<string, string> tdicNumFraAutomatico)
71 dicFacturasAutomaticas = tdicNumFraAutomatico;
74 CorreccionDeDefinicionesEnAsientoGenerado();
77 if (TieneRelacionesInformadas())
80 var ejecucionesDePagos = generacionesEjecutadas.Where(loExec => loExec.EsUnPagoConRelaciones()).ToList();
81 ejecucionesDePagos.ForEach(loEjecucion => MatarPrevisonesDePago(loEjecucion));
83 var ejecucionesDeCobros = generacionesEjecutadas.Where(loExec => loExec.EsUnCobroConRelaciones()).ToList();
84 ejecucionesDeCobros.ForEach(loEjecucion => MatarPrevisonesDeCobro(loEjecucion));
88 if (generadorPredefinidos.TienePredefinidoConcatenado())
90 string codigoPredefinidoConcatenado = generadorPredefinidos.GetPredefinidoConcatenado();
91 Trace.WriteLineIf(Debugger.IsAttached,
"Invocar predefinido concatenado " + codigoPredefinidoConcatenado,
"AsientosPredefinidos");
93 if(generacionesEjecutadas.Any() && generacionesEjecutadas.First().GetAsiento() != null)
96 var fechaDeAsientoGenerado = generacionesEjecutadas.First().GetAsiento()._Fecha;
97 AsientosPredefinidosGenerador._CargarPredefinidoEnAsiento(codigoPredefinidoConcatenado, fechaDeAsientoGenerado);
100 AsientosPredefinidosGenerador._CargarPredefinidoEnAsiento(codigoPredefinidoConcatenado);
107 private void CorreccionDeDefinicionesEnAsientoGenerado()
110 dicFacturasAutomaticas.ToList().ForEach(kvp => SustituirLiteralesAutomaticosEnNombre(kvp.Key,
"[" + kvp.Value +
"]"));
113 generacionesEjecutadas.ForEach(ejecucion => CorregirDefiniciones(ejecucion));
116 private void CorregirDefiniciones(AsientoPredefinidoEjecutado ejecucion)
119 if (ejecucion.GetAsiento() == null)
122 var lineasPredefinido = ejecucion.GetLineas().ToList();
123 var asiento = ejecucion.GetAsiento();
126 AsientosPredefinidosGenerador.RestablecerDefinicionesLineas(lineasPredefinido, asiento, dicFacturasAutomaticas);
134 private void SustituirLiteralesAutomaticosEnNombre(
string tcLiteral,
string tcValor)
137 generacionesEjecutadas.ForEach(ejecucion =>
139 var lineas = ejecucion.GetLineas().ToList();
140 lineas.ForEach(linea => linea._Definicion = linea._Definicion.Replace(tcLiteral, tcValor));
148 private void MatarPrevisonesDePago(AsientoPredefinidoEjecutado loEjecucion)
153 string banco = loEjecucion.GetLineas().Where(lolinea => CONTABILIDAD._EsTesoreria(lolinea._Cuenta)).FirstOrDefault()._Cuenta;
154 string proveedor = loEjecucion.GetLineas().Where(lolinea => CONTABILIDAD._EsProveedor(lolinea._Cuenta)).FirstOrDefault()._Cuenta;
155 decimal importe = loEjecucion.GetAsiento()._TotalDebe;
156 DateTime fecha = loEjecucion.GetAsiento()._Fecha;
157 string empresa = loEjecucion.GetAsiento()._Empresa;
158 string asi = loEjecucion.GetAsiento()._Lineas.First()._Asi;
161 string factura = loEjecucion.ObtenerRelaciones().FirstOrDefault();
162 if (dicFacturasAutomaticas.Keys.Contains(factura))
163 factura = dicFacturasAutomaticas[factura];
170 loPrevision.
_Ejercicio = Convert.ToInt32(EW_GLOBAL._GetVariable(
"wc_any"));
172 decimal totalPendiente = 0.0M;
173 lisPrevisiones.ForEach(prevision => totalPendiente = totalPendiente + prevision._Importe);
174 decimal diferencia = Math.Abs(totalPendiente - importe);
177 if (diferencia.CompareTo(0.011M) <= 0)
179 lisPrevisiones.ForEach(prevision => prevision._Contbilizar_VincularPrevisionConAsiento(fecha, asi, banco));
189 private void MatarPrevisonesDeCobro(AsientoPredefinidoEjecutado loEjecucion)
194 string banco = loEjecucion.GetLineas().Where(lolinea => CONTABILIDAD._EsTesoreria(lolinea._Cuenta)).FirstOrDefault()._Cuenta;
195 string cliente = loEjecucion.GetLineas().Where(lolinea => CONTABILIDAD._EsCliente(lolinea._Cuenta)).FirstOrDefault()._Cuenta;
196 decimal importe = loEjecucion.GetAsiento()._TotalDebe;
197 DateTime fecha = loEjecucion.GetAsiento()._Fecha;
198 string empresa = loEjecucion.GetAsiento()._Empresa;
199 string asi = loEjecucion.GetAsiento()._Lineas.First()._Asi;
201 string factura = loEjecucion.ObtenerRelaciones().FirstOrDefault();
202 if (dicFacturasAutomaticas.Keys.Contains(factura))
203 factura = dicFacturasAutomaticas[factura];
209 loPrevision.
_Ejercicio = Convert.ToInt32(EW_GLOBAL._GetVariable(
"wc_any"));
212 decimal totalPendiente = 0.0M;
213 lisPrevisiones.ForEach(prevision => totalPendiente = totalPendiente + prevision._Importe);
214 decimal diferencia = Math.Abs(totalPendiente - importe);
217 if (diferencia.CompareTo(0.011M) <= 0)
219 lisPrevisiones.ForEach(prevision => prevision._Contbilizar_VincularPrevisionConAsiento(fecha, asi, banco));
223 private bool TieneRelacionesInformadas()
225 return generacionesEjecutadas.Any(ejecucion => ejecucion.ContieneRelaciones());
Clase para las previsiones de cobro
new int _Ejercicio
Ejercicio
string _Empresa
Código de empresa.
string _Proveedor
Código de proveedor Contable
List< PrevisionPago > _Lista_Previsiones(EstadoPrevisiones tcEstadoPrevision=EstadoPrevisiones.Todas)
Ens retorna les previsions relacionades amb una factura.
EstadoPrevisiones
Estado de las previsiones
string _Cliente
Código de cliente Contable
EstadoPrevisiones
Estado de las previsiones
Clase para las previsiones de pago de proveedores
List< PrevisionCobro > _Lista_Previsiones(EstadoPrevisiones tcEstadoPrevision=EstadoPrevisiones.Todas)
Ens retorna les previsions relacionades amb una factura.
string _Factura
Número de factura
string _Factura
Número de factura
new int _Ejercicio
Ejercicio
string _Empresa
Código de empresa.