2 using System.Collections.Generic;
8 namespace sage.ew.contabilidad
17 readonly AsientosPredefinidosGenerador generadorDePredefinidos;
22 private readonly
bool _trabajaConSeriesDeFactura = Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_serfact"));
31 private AsientoPredefinidoGestorDeVariablesImpl() { }
37 public AsientoPredefinidoGestorDeVariablesImpl(AsientosPredefinidosGenerador toGenerador)
39 generadorDePredefinidos = toGenerador;
42 #endregion Constructores 44 #region Métodos públicos 46 #region Nombres de variables 52 public IEnumerable<string> _ObtenerNombresDeVariablesTodos()
54 return obtenerNombresDeVariableFiltradasPor(TipoFiltroVariables.Todas);
61 public IEnumerable<string> _ObtenerNombresDeVariablesColumnaCuenta()
63 return obtenerNombresDeVariableFiltradasPor(TipoFiltroVariables.SoloPropiedadCuenta);
70 public IEnumerable<string> _ObtenerNombresDeVariablesColumnaRelacion()
72 return obtenerNombresDeVariableFiltradasPor(TipoFiltroVariables.SoloPropiedadRelacion);
79 public IEnumerable<string> _ObtenerNombresDeVariablesColumnaCuentaAsignacion()
81 return obtenerNombresDeVariableFiltradasPor(TipoFiltroVariables.SoloPropiedadCtaAsignacion);
88 public IEnumerable<string> _ObtenerNombresDeVariablesDeTipoCuenta()
90 return obtenerNombresDeVariableFiltradasPor(TipoFiltroVariables.SoloCuentas);
97 public IEnumerable<string> _ObtenerNombresDeVariablesDeTipoVariable()
99 return obtenerNombresDeVariableFiltradasPor(TipoFiltroVariables.SoloVariables);
106 public IEnumerable<string> _ObtenerNombresDeVariablesDebeHaber()
108 return obtenerNombresDeVariableFiltradasPor(TipoFiltroVariables.SoloVariables);
111 #endregion Nombres de variables 113 #region IVaribleAsientoPredefinido 119 public IEnumerable<IAsientoPredefinidoVarible> _ObtenerVariablesDeTipoCuenta()
121 return obtenerVariablesFiltradasPor(TipoFiltroVariables.SoloCuentas);
128 public IEnumerable<IAsientoPredefinidoVarible> _ObtenerVariablesDeTipoVariable()
130 return obtenerVariablesFiltradasPor(TipoFiltroVariables.SoloVariables);
137 public IEnumerable<IAsientoPredefinidoVarible> _ObtenerVariablesColumnaRelacion()
139 return obtenerVariablesFiltradasPor(TipoFiltroVariables.SoloPropiedadRelacion);
146 public IEnumerable<IAsientoPredefinidoVarible> _ObtenerVariablesColumnaCuentaAsignacion()
148 return obtenerVariablesFiltradasPor(TipoFiltroVariables.SoloPropiedadCtaAsignacion);
156 public IEnumerable<IAsientoPredefinidoVarible> _ObtenerVariablesColumnaDebeHaber()
158 return obtenerVariablesFiltradasPor(TipoFiltroVariables.SoloDebeHaber);
161 #endregion IVaribleAsientoPredefinido 167 public void _EstablecerVariables(Dictionary<string, string> tdicValores)
169 foreach (var lineaAsientoPredef
in generadorDePredefinidos._LineasAsientoPredefinido)
171 lineaAsientoPredef._EstablecerVariables(tdicValores);
179 public void _EstablecerVariablesDebeHaber(Dictionary<string, string> tdicValores)
181 foreach (var lineaAsientoPredef
in generadorDePredefinidos._LineasAsientoPredefinido)
183 lineaAsientoPredef._EstablecerVariablesDebeHaber(tdicValores);
191 public void _EstablecerVariables(IEnumerable<IAsientoPredefinidoVarible> tlisValores)
194 Dictionary<string, string> dicValores =
new Dictionary<string, string>();
196 tlisValores.ToList().ForEach(variable => dicValores.Add(variable._Clave, variable._Valor));
198 _EstablecerVariables(dicValores);
207 claseInicializada =
false;
208 contadorAutomatico = 1;
209 dicValoresPorDefecto.Clear();
210 lisNombresVariablesFraInicializados.Clear();
213 bool tengoVariablesFactura = _ObtenerNombresDeVariablesColumnaRelacion().Count() > 0;
214 if (tengoVariablesFactura)
216 inicilizarValoresFactura();
219 claseInicializada =
true;
222 private void inicilizarValoresFactura()
225 var numerosDeAsientos = generadorDePredefinidos._LineasAsientoPredefinido.Select(linea => linea._Asiento).Distinct().ToList();
228 var lineasOrdenadas = generadorDePredefinidos._LineasAsientoPredefinido.OrderBy(loEle => loEle._Asiento).ThenBy(loEle => loEle._Orden).ToList();
230 foreach (var numeroDeAsiento
in numerosDeAsientos)
232 var lineasDelAsiento = lineasOrdenadas.Where(lolinea => lolinea._Asiento == numeroDeAsiento).ToList();
233 inicializarValoresFacturaPorAsientoDeLasLineas(lineasDelAsiento);
235 lisNombresVariablesFraInicializados = _ObtenerNombresDeVariablesColumnaRelacion().ToList();
238 private void inicializarValoresFacturaPorAsientoDeLasLineas(List<AsientoPredefinido.LineaAsientoPredefinido> lineasDelAsiento)
240 if (lineasDelAsiento.Any() && contieneVariablesDeFactura(lineasDelAsiento))
242 var nombresVariablesDeFactura = obtenerNombresDeVariableFiltradasPor(TipoFiltroVariables.SoloPropiedadRelacion, lineasDelAsiento).ToList();
243 if (nombresVariablesDeFactura.Count() == 1)
245 string nombre = nombresVariablesDeFactura.First();
246 bool necesitaFactura = generadorDePredefinidos._DebeContenerInformacionDeFactura(lineasDelAsiento);
249 bool esDeCompras = generadorDePredefinidos._ModoCompras(lineasDelAsiento);
252 if (Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_factucom")))
254 insertarValorDefectoFactura(nombre, obtenerLiteralNumeradoFra());
257 insertarValorDefectoFactura(nombre,
"");
262 insertarValorDefectoFactura(nombre, obtenerLiteralNumeradoFra());
266 insertarValorDefectoFacturaSiFalta(nombre,
"");
270 nombresVariablesDeFactura.ForEach(nombre => insertarValorDefectoFacturaSiFalta(nombre,
""));
275 private bool todasLasFacturasConValorDefecto()
277 var variablesFacturaActual = _ObtenerNombresDeVariablesColumnaRelacion().ToList();
278 return (variablesFacturaActual.All(loVar => lisNombresVariablesFraInicializados.Contains(loVar)));
281 private string obtenerLiteralNumeradoFra()
283 string literal =
"<<NúmeroAutomático" + contadorAutomatico +
">>";
284 contadorAutomatico += 1;
288 private void insertarValorDefectoFacturaSiFalta(
string tcClave,
string tcValor)
290 if (!dicValoresPorDefecto.ContainsKey(tcClave))
291 dicValoresPorDefecto.Add(tcClave, tcValor);
294 private void insertarValorDefectoFactura(
string tcClave,
string tcValor)
296 if (dicValoresPorDefecto.ContainsKey(tcClave))
298 if (
String.IsNullOrWhiteSpace(dicValoresPorDefecto[tcClave]))
299 dicValoresPorDefecto[tcClave] = tcValor;
302 dicValoresPorDefecto.Add(tcClave, tcValor);
305 private bool contieneVariablesDeFactura(IEnumerable<AsientoPredefinido.LineaAsientoPredefinido> source)
307 return obtenerNombresDeVariableFiltradasPor(TipoFiltroVariables.SoloPropiedadRelacion, source).Count() > 0;
315 public string ObtenerValorPorDefectoDe(
string tcNombreVariable)
317 if (
String.IsNullOrWhiteSpace(tcNombreVariable))
320 if (!claseInicializada)
324 if (!todasLasFacturasConValorDefecto())
325 inicilizarValoresFactura();
328 tcNombreVariable = tcNombreVariable.TrimEnd();
331 if (dicValoresPorDefecto.ContainsKey(tcNombreVariable))
332 return dicValoresPorDefecto[tcNombreVariable];
337 #endregion Métodos públicos 339 private int contadorAutomatico = 1;
340 private Dictionary<string, string> dicValoresPorDefecto =
new Dictionary<string, string>();
341 private bool claseInicializada =
false;
342 private List<string> lisNombresVariablesFraInicializados =
new List<string>();
344 private enum TipoFiltroVariables
361 SoloPropiedadCuenta = 3,
365 SoloPropiedadCtaAsignacion = 4,
369 SoloPropiedadRelacion = 5,
386 private IEnumerable<string> obtenerNombresDeVariableFiltradasPor(TipoFiltroVariables teTipoFiltrado, IEnumerable<AsientoPredefinido.LineaAsientoPredefinido> source = null)
389 List<string> llisVariables =
new List<string>();
390 List<string> llisVariablesTemp =
new List<string>();
394 source = generadorDePredefinidos._LineasAsientoPredefinido;
396 foreach (var lineaAsientoPredef
in source)
398 switch (teTipoFiltrado)
401 case TipoFiltroVariables.SoloCuentas:
402 llisVariablesTemp = lineaAsientoPredef._ObtenerVariablesPropiedadesDeTipoCuenta();
406 case TipoFiltroVariables.SoloVariables:
407 llisVariablesTemp = lineaAsientoPredef._ObtenerVariablesPropiedadesExceptoDeTipoCuenta();
411 case TipoFiltroVariables.SoloPropiedadCuenta:
412 llisVariablesTemp = lineaAsientoPredef._ObtenerVariablesPropiedadCuenta();
416 case TipoFiltroVariables.SoloPropiedadCtaAsignacion:
417 llisVariablesTemp = lineaAsientoPredef._ObtenerVariablesPropiedadCtaAsig();
420 case TipoFiltroVariables.SoloPropiedadRelacion:
421 llisVariablesTemp = lineaAsientoPredef._ObtenerVariablesPropiedadRelacion();
424 case TipoFiltroVariables.SoloDebeHaber:
425 llisVariablesTemp = lineaAsientoPredef._ObtenerVariablesPropiedadesDebeHaber();
428 case TipoFiltroVariables.Todas:
430 llisVariablesTemp = lineaAsientoPredef._ObtenerVariables();
434 llisVariables.AddRange(llisVariablesTemp);
437 return llisVariables.Distinct().ToList().OrderBy(loEle => loEle);
446 private IEnumerable<IAsientoPredefinidoVarible> obtenerVariablesFiltradasPor(TipoFiltroVariables teTipoFiltrado, IEnumerable<AsientoPredefinido.LineaAsientoPredefinido> source = null)
448 List<IAsientoPredefinidoVarible> listaVariables =
new List<IAsientoPredefinidoVarible>();
452 source = generadorDePredefinidos._LineasAsientoPredefinido;
455 var nombresDeVariables = obtenerNombresDeVariableFiltradasPor(teTipoFiltrado, source);
456 if (nombresDeVariables.Any())
459 var nombresDeVariablesDeFactura = obtenerNombresDeVariableFiltradasPor(TipoFiltroVariables.SoloPropiedadRelacion, source);
460 if (nombresDeVariablesDeFactura.Any())
463 var variablesCoincidentes = nombresDeVariables.Intersect(nombresDeVariablesDeFactura).ToList();
464 if (variablesCoincidentes.Any())
466 variablesCoincidentes.ForEach(nombreDeVariable => listaVariables.Add(generarVariable(nombreDeVariable, source)));
467 nombresDeVariables = nombresDeVariables.Except(variablesCoincidentes).ToList();
472 foreach (var nombreDeVariable
in nombresDeVariables)
474 listaVariables.Add(
new VariableDeSusticionEnAsientoPredefinido(nombreDeVariable));
478 return listaVariables;
487 private IAsientoPredefinidoVarible generarVariable(
string tcNombreVariable, IEnumerable<AsientoPredefinido.LineaAsientoPredefinido> source)
491 string varible =
"[" + tcNombreVariable +
"]";
493 var lineasConLaVariable = source.Where(loLinea => loLinea._Relacion.Contains(varible)).ToList();
494 var numerosDeAsiento = lineasConLaVariable.Select(lolinea => lolinea._Asiento).ToList();
495 foreach (var numAsiento
in numerosDeAsiento)
497 var lineasDelAsiento = source.Where(lolinea => lolinea._Asiento == numAsiento).ToList();
498 if (generadorDePredefinidos._EsFacturaCompra(lineasDelAsiento) ||
499 generadorDePredefinidos._EsFacturaNominas(lineasDelAsiento) ||
500 lineasDelAsiento.Any(l => l._IvaNoSujeto && CONTABILIDAD._EsProveedor(l._Cuenta)))
502 nuevaVariable =
new VariableDeFacturaCompraEnAsientoPredefinido(tcNombreVariable, ObtenerValorPorDefectoDe(tcNombreVariable));
507 if(generadorDePredefinidos._EsFacturaVenta(lineasDelAsiento) ||
508 lineasDelAsiento.Any(l => l._IvaNoSujeto && CONTABILIDAD._EsCliente(l._Cuenta)))
512 var serieFactura = (_trabajaConSeriesDeFactura ? generadorDePredefinidos._SerieFactura :
"");
513 nuevaVariable =
new VariableDeFacturaVentaEnAsientoPredefinido(tcNombreVariable, ObtenerValorPorDefectoDe(tcNombreVariable), serieFactura);
519 if(nuevaVariable == null)
522 Trace.WriteLineIf(Debugger.IsAttached,
"Tipo de variable de factura no inicializado.");
523 nuevaVariable =
new VariableDeSusticionEnAsientoPredefinido(tcNombreVariable);
526 return nuevaVariable;
Interficie que a parte de heredar las operaciones con variables incluye las de gestión ...
Interficie para las variables de asientos predefinidos