Ejemplo n.º 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);
        }