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); }