Exemplo n.º 1
0
    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));
    }
Exemplo n.º 2
0
    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));
    }