Beispiel #1
0
        // Metodo a invocar para crear la proforma (cambiar por lista)
        // Parametros de entrada: centro de costos, anio y tipo de proforma
        private List <ProformaDetalle> GeneraProforma(Int64 idCC, int anio, Int64 idTipoProforma, Int64 idTipoCaptura)
        {
            // Del centro de costos se obtienen empresa y proyecto
            CentroCostos cc = ObtenerDatosCC(idCC);

            if (anio > DateTime.Now.Year)
            {
                return(_profHelper.BuildProformaFromModeloAsTemplate(cc, anio, getIdTipoProformaByClave(ClaveProforma012), idTipoCaptura));
            }


            if (cc == null)
            {
                throw new InvalidDataException("No hay informacion del centro de costos " + idCC);
            }


            // Del tipo de proforma obtiene mes de inicio
            int mesInicio = _profHelper.getMesInicio(idTipoProforma);

            if (mesInicio < 0)
            {
                throw new InvalidDataException("Error en el mes de inicio de la proforma ");
            }

            Int64 idModeloNeg = idTipoCaptura == TipoCapturaContable
                ? cc.modelo_negocio_id
                : cc.modelo_negocio_flujo_id;
            // Obtiene detalle de la proforma calculada con montos, ejercicio y acuumulado
            List <ProformaDetalle> listDetProformaCalc = CalculaDetalleProforma(idCC, mesInicio,
                                                                                cc.empresa_id, idModeloNeg,
                                                                                cc.proyecto_id, anio, idTipoCaptura, idTipoProforma);

            if (listDetProformaCalc.Count == 0)
            {
                DateTime fechaProf         = DateTime.Today;
                string   nombreTipoCaptura = idTipoCaptura == TipoCapturaContable ? "contable" : "de flujo";
                throw new InvalidDataException("No existe informacion con fecha '" + fechaProf + "' para proforma " +
                                               nombreTipoCaptura + " de la empresa '" + cc.empresa_id +
                                               "' y modelo de negocio '" + idModeloNeg + "'");
            }

            // se contruyen los rubros totales
            List <ProformaDetalle> lstProformaCompleta =
                _profHelper.CompletaDetalles(listDetProformaCalc, cc, idModeloNeg);

            lstProformaCompleta.ForEach(detalle =>
            {
                detalle.centro_costo_id   = idCC;
                detalle.anio              = anio;
                detalle.empresa_id        = cc.empresa_id;
                detalle.tipo_proforma_id  = idTipoProforma;
                detalle.tipo_captura_id   = idTipoCaptura;
                detalle.modelo_negocio_id = idModeloNeg;
            });
            listDetProformaCalc.ForEach(detalle => { detalle.mes_inicio = mesInicio; });
            if (idTipoCaptura == TipoCapturaContable)
            {
                ProformaCalc.roundMontosInDetalles(lstProformaCompleta);
            }
            return(lstProformaCompleta);
        }