コード例 #1
0
        public List <ProformaDetalle> CalculaDetalleProforma(Int64 idCenCos, int mesInicio, Int64 idEmpresa,
                                                             Int64 idModeloNeg, Int64 idProyecto, int anio, Int64 idTipoCaptura, Int64 idTipoProforma)
        {
            ///obtener las variables
            ProformaDetalleDataAccessLayer detalleAccesLayer = new ProformaDetalleDataAccessLayer();

            // Obtiene lista de montos consolidados para ejercicio
            log.Info("Calculando proforma ....");
            List <ProformaDetalle> detallesCalculados = detalleAccesLayer.GetProformaCalculada(idCenCos, mesInicio, idEmpresa,
                                                                                               idModeloNeg, idProyecto, anio, idTipoCaptura);
            //en ocasiones no hay montos para ciertos rubros, eso nos obliga a llenar con 0 el detalle de ese rubro
            List <ProformaDetalle> detallesFromModel = _profHelper.buildProformaFromTemplate(
                _profHelper.GetRubrosFromModeloId(idModeloNeg, false), idCenCos, anio, idTipoProforma, idTipoCaptura);
            List <ProformaDetalle> mergeDetalle = mergeDetallesMontosVsDetallesModelo(detallesFromModel, detallesCalculados);


            // Obtiene lista de sumatorias para el acumulado
            List <ProformaDetalle> detallesAniosAnteriores = detalleAccesLayer.GetAcumuladoAnteriores(idCenCos, idEmpresa, idModeloNeg,
                                                                                                      idProyecto, anio, idTipoCaptura);
            // Obtiene montos para anios posteriores
            List <ProformaDetalle> detalleAniosPosteriores =
                detalleAccesLayer.GetEjercicioPosterior(anio, idCenCos, idModeloNeg, idTipoCaptura, idTipoProforma);

            //--> se colocan los anios anteriores
            _profHelper.manageAniosAnteriores(mergeDetalle, detallesAniosAnteriores);

            // Genera una lista para almacenar la informacion consultada
            foreach (ProformaDetalle detalleCalculado in mergeDetalle)
            {
                foreach (ProformaDetalle detalleAnioPost in detalleAniosPosteriores)
                {
                    if (detalleCalculado.rubro_id == detalleAnioPost.rubro_id)
                    {
                        // Si coincide el rubro se guardan los acumulados de anios posteriores
                        detalleCalculado.anios_posteriores_resultado = detalleAnioPost.anios_posteriores_resultado;
                    }
                }
            }

            return(mergeDetalle);
        }
コード例 #2
0
        // Calculo del ejercicio anterior
        public List <ProformaDetalle> GetAcumuladoAnteriores(Int64 idCenCos, Int64 idEmpresa, Int64 idModeloNegocio,
                                                             Int64 idProyecto, int anio, Int64 idTipoCaptura)
        {
            string queryLastproformaAAnt =
                "  select pf.id" +
                "     from proforma pf" +
                " join tipo_proforma tp on pf.tipo_proforma_id = tp.id" +
                " where pf.activo = true" +
                " and pf.anio = @anio" +
                " and pf.empresa_id = @idEmpresa" +
                " and pf.modelo_negocio_id = @idModeloNegocio" +
                " and pf.centro_costo_id = @idCenCos" +
                " and pf.tipo_captura_id = @idTipoCaptura" +
                " order by tp.mes_inicio desc" +
                " limit 1";
            String queryProformaAAnt =
                " select" +
                " total_resultado as acumulado_resultado," +
                " rub.id as rubro_id," +
                " rub.nombre as nombre_rubro," +
                " rub.es_total_ingresos" +
                "     from proforma pf" +
                " join proforma_detalle pd on pd.id_proforma = pf.id" +
                " join rubro rub on rub.id = pd.rubro_id" +
                " join tipo_proforma tp on pf.tipo_proforma_id = tp.id" +
                " where pf.activo = true" +
                " and pf.anio = @anio" +
                " and pf.empresa_id = @idEmpresa" +
                " and pf.modelo_negocio_id = @idModeloNegocio" +
                " and pf.centro_costo_id = @idCenCos" +
                " and pf.tipo_captura_id = @idTipoCaptura" +
                " and pf.id in (" + queryLastproformaAAnt + ")";

            string queryFromMontosAAnt =
                " select  " +
                "	 coalesce ( "+
                "	 sum(cns.enero_total_resultado) + "+
                "	 sum(cns.febrero_total_resultado) + "+
                "	 sum(cns.marzo_total_resultado) + "+
                "	 sum(cns.abril_total_resultado) + "+
                "	 sum(cns.mayo_total_resultado) + "+
                "	 sum(cns.junio_total_resultado) + "+
                "	 sum(cns.julio_total_resultado) + "+
                "	 sum(cns.agosto_total_resultado) + "+
                "	 sum(cns.septiembre_total_resultado) + "+
                "	 sum(cns.octubre_total_resultado) + "+
                "	 sum(cns.noviembre_total_resultado) + "+
                "	 sum(cns.diciembre_total_resultado) "+
                "	 , 0) as acumulado_resultado, cns.rubro_id as rubro_id, rub.nombre as nombre_rubro, rub.es_total_ingresos "+
                "	 from montos_consolidados cns "+
                "	 inner join rubro rub on cns.rubro_id = rub.id "+
                "    where  cns.anio < @anio" +
                "    AND  cns.empresa_id=@idEmpresa" +
                "    AND  cns.modelo_negocio_id=@idModeloNegocio" +
                "    AND  cns.proyecto_id=@idProyecto" +
                "    AND  cns.centro_costo_id=@idCenCos" +
                "    AND  cns.tipo_captura_id=@idTipoCaptura" +
                "    AND  cns.activo=true" +
                "	 group by cns.rubro_id, rub.nombre, rub.es_total_ingresos "+
                "	 order by cns.rubro_id ";


            var res = _queryExecuter.ExecuteQueryUniqueresult(queryLastproformaAAnt,
                                                              new NpgsqlParameter("@anio", anio - 1),
                                                              new NpgsqlParameter("@idEmpresa", idEmpresa),
                                                              new NpgsqlParameter("@idModeloNegocio", idModeloNegocio),
                                                              new NpgsqlParameter("@idCenCos", idCenCos),
                                                              new NpgsqlParameter("@idTipoCaptura", idTipoCaptura));

            if (res != null)
            {
                List <ProformaDetalle> proformaDetalles =
                    new ProformaDetalleDataAccessLayer().GetProformaDetalle(ToInt64(res["id"]));
                new ProformaCalc().recalculateAll(proformaDetalles, true);
                log.Info("Termino proceso");
                new ProformaDataAccessLayer().ActualizaProforma(proformaDetalles);
            }

            DataTable dataTable = _queryExecuter.ExecuteQuery(queryProformaAAnt.Trim(),
                                                              new NpgsqlParameter("@anio", anio - 1),
                                                              new NpgsqlParameter("@idEmpresa", idEmpresa),
                                                              new NpgsqlParameter("@idModeloNegocio", idModeloNegocio),
                                                              new NpgsqlParameter("@idCenCos", idCenCos),
                                                              new NpgsqlParameter("@idTipoCaptura", idTipoCaptura));

            if (dataTable.Rows.Count == 0)
            {
                dataTable = _queryExecuter.ExecuteQuery(queryFromMontosAAnt.Trim(),
                                                        new NpgsqlParameter("@anio", anio),
                                                        new NpgsqlParameter("@idEmpresa", idEmpresa),
                                                        new NpgsqlParameter("@idModeloNegocio", idModeloNegocio),
                                                        new NpgsqlParameter("@idProyecto", idProyecto),
                                                        new NpgsqlParameter("@idCenCos", idCenCos),
                                                        new NpgsqlParameter("@idTipoCaptura", idTipoCaptura)
                                                        );
            }

            List <ProformaDetalle> detallesAAnteriores = new List <ProformaDetalle>();

            foreach (DataRow rdr in dataTable.Rows)
            {
                ProformaDetalle detalle = new ProformaDetalle();
                detalle.acumulado_resultado = ToDouble(rdr["acumulado_resultado"]);
                detalle.rubro_id            = ToInt64(rdr["rubro_id"]);
                detalle.nombre_rubro        = rdr["nombre_rubro"].ToString();
                detalle.es_total_ingresos   = ToBoolean(rdr["es_total_ingresos"]);
                detallesAAnteriores.Add(detalle);
            }

            return(detallesAAnteriores);
        }