public static Tuple <List <EstadoResultadoComparativoViewModel>, List <decimal>, List <decimal>, List <decimal>, List <string>, List <string>, List <DateTime> > GetEstadoResultadoComparativo(ClientesContablesModel objCliente, int Mes, int Anio, int MesesAMostrar = 3) { List <EstadoResultadoComparativoViewModel> EstadoResultadoComp = new List <EstadoResultadoComparativoViewModel>(); List <VoucherModel> ListaVoucher = objCliente.ListVoucher.Where(x => x.DadoDeBaja == false).ToList(); List <CuentaContableModel> ListaCuentasContables = objCliente.CtaContable.Where(x => x.Clasificacion == ClasificacionCtaContable.RESULTADOGANANCIA || x.Clasificacion == ClasificacionCtaContable.RESULTADOPERDIDA).ToList(); int Dia = 1; List <int> MesesConsultados = new List <int>(); List <DetalleVoucherModel> lstDetalle = new List <DetalleVoucherModel>(); List <string> lstSubClasificaciones = new List <string>(); List <string> lstSubSubClasificaciones = new List <string>(); foreach (CuentaContableModel Cuenta in ListaCuentasContables) { EstadoResultadoComparativoViewModel ObjARellenar = new EstadoResultadoComparativoViewModel(); List <decimal> lstSaldo = new List <decimal>(); decimal SaldoFinalLinea = 0; for (int i = 1; i <= MesesAMostrar; i++) { lstDetalle = ListaVoucher.SelectMany(x => x.ListaDetalleVoucher) .Where(x => x.ObjCuentaContable.CuentaContableModelID == Cuenta.CuentaContableModelID && x.FechaDoc.Month == Mes && x.FechaDoc.Year == Anio) .OrderBy(x => x.ObjCuentaContable.Clasificacion).ToList(); decimal SumasHaber = lstDetalle.Sum(x => x.MontoHaber); decimal SumasDebe = lstDetalle.Sum(x => x.MontoDebe); decimal Saldo = Math.Abs(SumasHaber) - Math.Abs(SumasDebe); if (SaldoFinalLinea == MesesAMostrar) { SaldoFinalLinea = 0; } lstSaldo.Add(Math.Abs(Saldo)); if (i <= MesesAMostrar && MesesConsultados.Count < MesesAMostrar && i > 0 && Mes > 0) { MesesConsultados.Add(Mes); } if (Mes > 0) { Mes--; } if (i == MesesAMostrar) { Mes = DateTime.Now.Month; } } if (lstSaldo.All(x => x == 0)) { continue; } string SubClasificacionCod = Cuenta.SubClasificacion.CodigoInterno; string SubSubClasificacionCod = Cuenta.SubSubClasificacion.CodigoInterno; string SubClasificacionNombre = Cuenta.SubClasificacion.NombreInterno; string SubSubClasificacionNombre = Cuenta.SubSubClasificacion.NombreInterno; int SinRepetidosSubClasificacion = EstadoResultadoComp.Where(x => x.SubClasCodigo == SubClasificacionCod).Select(x => x.SubClasCodigo).Count(); int SinRepetidosSubSubClasificicacion = EstadoResultadoComp.Where(x => x.SubSubClasCodigo == SubSubClasificacionCod).Select(x => x.SubSubClasCodigo).Count(); if (SinRepetidosSubClasificacion == 0) { ObjARellenar.SubClasCodigo = SubClasificacionCod; lstSubClasificaciones.Add(SubClasificacionCod + " " + SubClasificacionNombre); } if (SinRepetidosSubSubClasificicacion == 0) { ObjARellenar.SubSubClasCodigo = SubSubClasificacionCod; lstSubSubClasificaciones.Add(SubSubClasificacionCod + " " + SubSubClasificacionNombre); } ObjARellenar.CodigoSubClasiMarca = SubClasificacionCod + " " + SubClasificacionNombre; ObjARellenar.CodigoSubSubClasiMarca = SubSubClasificacionCod + " " + SubSubClasificacionNombre; ObjARellenar.CodigoCta = Cuenta.CodInterno; ObjARellenar.NombreCtaContable = Cuenta.nombre; SaldoFinalLinea = lstSaldo.Sum(x => x); lstSaldo.Add(SaldoFinalLinea); ObjARellenar.Saldo = lstSaldo; EstadoResultadoComp.Add(ObjARellenar); } List <DateTime> FechasConsultadas = new List <DateTime>(); foreach (int itemMes in MesesConsultados) { DateTime FechaCreada = new DateTime(Anio, itemMes, Dia); FechasConsultadas.Add(FechaCreada); } List <List <decimal> > lstSaldos = new List <List <decimal> >(); lstSaldos.AddRange(EstadoResultadoComp.Select(x => x.Saldo)); List <decimal> TotalesGlobales = new List <decimal>(); int CantidadColumnas = 0; if (lstSaldos.Count() > 0) { CantidadColumnas = lstSaldos.First().Count(); } for (int i = 0; i < CantidadColumnas; i++) { TotalesGlobales.Add(lstSaldos.Sum(x => x[i])); } List <List <decimal> > lstSaldosGanancias = new List <List <decimal> >(); lstSaldosGanancias.AddRange(EstadoResultadoComp.Where(x => x.CodigoSubClasiMarca.StartsWith("5")).Select(x => x.Saldo)); List <decimal> TotalesGanancias = new List <decimal>(); for (int i = 0; i < CantidadColumnas; i++) { TotalesGanancias.Add(lstSaldosGanancias.Sum(x => x[i])); } List <List <decimal> > lstSaldosPerdidas = new List <List <decimal> >(); lstSaldosPerdidas.AddRange(EstadoResultadoComp.Where(x => x.CodigoSubClasiMarca.StartsWith("4")).Select(x => x.Saldo)); List <decimal> TotalesPerdidas = new List <decimal>(); for (int i = 0; i < CantidadColumnas; i++) { TotalesPerdidas.Add(lstSaldosPerdidas.Sum(x => x[i])); } return(Tuple.Create(EstadoResultadoComp, TotalesGanancias, TotalesPerdidas, TotalesGlobales, lstSubClasificaciones, lstSubSubClasificaciones, FechasConsultadas)); }
public static Tuple <List <EstadoResultadoComparativoViewModel>, List <decimal>, List <decimal>, List <decimal>, List <string>, List <string>, List <DateTime> > EstadoResultadoComparativoConFiltros(ClientesContablesModel objCliente, List <string> Meses, int Anio, int AnioDesde, int AnioHasta, int CentroCostoID) { List <string> ListaSinErroresMeses = new List <string>(); ListaSinErroresMeses = Meses; List <EstadoResultadoComparativoViewModel> EstadoResultadoComp = new List <EstadoResultadoComparativoViewModel>(); List <VoucherModel> ListaVoucher = objCliente.ListVoucher.Where(x => x.DadoDeBaja == false).ToList(); List <CuentaContableModel> ListaCuentasContables = objCliente.CtaContable.Where(x => x.Clasificacion == ClasificacionCtaContable.RESULTADOGANANCIA || x.Clasificacion == ClasificacionCtaContable.RESULTADOPERDIDA).ToList(); List <int> AniosConsultados = new List <int>(); if (AnioDesde > 0 && AnioHasta > 0) { for (int i = AnioDesde; i <= AnioHasta; i++) { AniosConsultados.Add(AnioDesde++); } } int CantidadDeMeses = 0; if (ListaSinErroresMeses != null) { CantidadDeMeses = Meses.Count(); } int Dia = 1; List <int> MesesConsultados = new List <int>(); List <DetalleVoucherModel> lstDetalle = new List <DetalleVoucherModel>(); List <string> lstSubClasificaciones = new List <string>(); List <string> lstSubSubClasificaciones = new List <string>(); foreach (CuentaContableModel Cuenta in ListaCuentasContables) { EstadoResultadoComparativoViewModel ObjARellenar = new EstadoResultadoComparativoViewModel(); List <decimal> lstSaldo = new List <decimal>(); decimal SaldoFinalLinea = 0; if (CantidadDeMeses > 0) { foreach (string Mes in Meses) { int ConvertMes = Convert.ToInt32(Mes); if (CentroCostoID > 0) { lstDetalle = ListaVoucher.SelectMany(x => x.ListaDetalleVoucher) .Where(x => x.ObjCuentaContable.CuentaContableModelID == Cuenta.CuentaContableModelID && x.CentroCostoID == CentroCostoID && x.FechaDoc.Month == ConvertMes && x.FechaDoc.Year == Anio) .OrderBy(x => x.ObjCuentaContable.Clasificacion).ToList(); } else { lstDetalle = ListaVoucher.SelectMany(x => x.ListaDetalleVoucher) .Where(x => x.ObjCuentaContable.CuentaContableModelID == Cuenta.CuentaContableModelID && x.FechaDoc.Month == ConvertMes && x.FechaDoc.Year == Anio) .OrderBy(x => x.ObjCuentaContable.Clasificacion).ToList(); } decimal SumasHaber = lstDetalle.Sum(x => x.MontoHaber); decimal SumasDebe = lstDetalle.Sum(x => x.MontoDebe); decimal Saldo = Math.Abs(SumasHaber) - Math.Abs(SumasDebe); lstSaldo.Add(Saldo); } } else if (AniosConsultados.Count() > 0) { foreach (int itemAnio in AniosConsultados) { if (CentroCostoID > 0) { lstDetalle = ListaVoucher.SelectMany(x => x.ListaDetalleVoucher) .Where(x => x.ObjCuentaContable.CuentaContableModelID == Cuenta.CuentaContableModelID && x.CentroCostoID == CentroCostoID && x.FechaDoc.Year == itemAnio) .OrderBy(x => x.ObjCuentaContable.Clasificacion).ToList(); } else { lstDetalle = ListaVoucher.SelectMany(x => x.ListaDetalleVoucher) .Where(x => x.ObjCuentaContable.CuentaContableModelID == Cuenta.CuentaContableModelID && x.FechaDoc.Year == itemAnio) .OrderBy(x => x.ObjCuentaContable.Clasificacion).ToList(); } decimal SumasHaber = lstDetalle.Sum(x => x.MontoHaber); decimal SumasDebe = lstDetalle.Sum(x => x.MontoDebe); decimal Saldo = Math.Abs(SumasHaber) - Math.Abs(SumasDebe); lstSaldo.Add(Saldo); } } if (lstSaldo.All(x => x == 0)) { continue; } string SubClasificacionCod = Cuenta.SubClasificacion.CodigoInterno; string SubSubClasificacionCod = Cuenta.SubSubClasificacion.CodigoInterno; string SubClasificacionNombre = Cuenta.SubClasificacion.NombreInterno; string SubSubClasificacionNombre = Cuenta.SubSubClasificacion.NombreInterno; int SinRepetidosSubClasificacion = EstadoResultadoComp.Where(x => x.SubClasCodigo == SubClasificacionCod).Select(x => x.SubClasCodigo).Count(); int SinRepetidosSubSubClasificicacion = EstadoResultadoComp.Where(x => x.SubSubClasCodigo == SubSubClasificacionCod).Select(x => x.SubSubClasCodigo).Count(); if (SinRepetidosSubClasificacion == 0) { ObjARellenar.SubClasCodigo = SubClasificacionCod; lstSubClasificaciones.Add(SubClasificacionCod + " " + SubClasificacionNombre); } if (SinRepetidosSubSubClasificicacion == 0) { ObjARellenar.SubSubClasCodigo = SubSubClasificacionCod; lstSubSubClasificaciones.Add(SubSubClasificacionCod + " " + SubSubClasificacionNombre); } ObjARellenar.CodigoSubClasiMarca = SubClasificacionCod + " " + SubClasificacionNombre; ObjARellenar.CodigoSubSubClasiMarca = SubSubClasificacionCod + " " + SubSubClasificacionNombre; ObjARellenar.CodigoCta = Cuenta.CodInterno; ObjARellenar.NombreCtaContable = Cuenta.nombre; SaldoFinalLinea = lstSaldo.Sum(x => x); lstSaldo.Add(SaldoFinalLinea); ObjARellenar.Saldo = lstSaldo; EstadoResultadoComp.Add(ObjARellenar); } List <DateTime> FechasConsultadas = new List <DateTime>(); if (CantidadDeMeses > 0) { foreach (string itemMes in Meses) { int MesConvert = Convert.ToInt32(itemMes); DateTime FechaCreada = new DateTime(Anio, MesConvert, Dia); FechasConsultadas.Add(FechaCreada); } } if (AniosConsultados.Count() > 0) { int Mes = 1; foreach (int itemAnio in AniosConsultados) { DateTime FechaOnlyYear = new DateTime(itemAnio, Mes, Dia); FechasConsultadas.Add(FechaOnlyYear); } } var ComprobarSiHayElementos = EstadoResultadoComp.Select(x => x.Saldo).ToList(); int CantidadDeColumnasSaldo = 0; if (ComprobarSiHayElementos.Count() > 0) { CantidadDeColumnasSaldo = EstadoResultadoComp.Select(x => x.Saldo).First().Count(); } List <List <decimal> > lstSaldosGanancias = new List <List <decimal> >(); lstSaldosGanancias.AddRange(EstadoResultadoComp.Where(x => x.CodigoSubClasiMarca.StartsWith("5")).Select(x => x.Saldo)); List <decimal> TotalesGanancias = new List <decimal>(); for (int i = 0; i < CantidadDeColumnasSaldo; i++) { TotalesGanancias.Add(lstSaldosGanancias.Sum(x => x[i])); } List <List <decimal> > lstSaldosPerdidas = new List <List <decimal> >(); lstSaldosPerdidas.AddRange(EstadoResultadoComp.Where(x => x.CodigoSubClasiMarca.StartsWith("4")).Select(x => x.Saldo)); List <decimal> TotalesPerdidas = new List <decimal>(); for (int i = 0; i < CantidadDeColumnasSaldo; i++) { TotalesPerdidas.Add(lstSaldosPerdidas.Sum(x => x[i])); } List <decimal> TotalesGlobales = new List <decimal>(); for (int i = 0; i < CantidadDeColumnasSaldo; i++) { TotalesGlobales.Add(Math.Abs(TotalesGanancias[i]) - Math.Abs(TotalesPerdidas[i])); } return(Tuple.Create(EstadoResultadoComp, TotalesGanancias, TotalesPerdidas, TotalesGlobales, lstSubClasificaciones, lstSubSubClasificaciones, FechasConsultadas)); }