Example #1
0
        // Calculo de la proforma a partir de los montos consolidados
        // El parametro mesInicio define el calculo de la proforma
        //      0 = 0+12 - Cero reales, doce proformados
        //      3 =  3+9 - Tres reales, 9 proformados
        //      6 =  6+6 - Seis reales, 6 proformados
        //      9 =  9+3 - Nueve reales, 3 proformados
        // Los reales se calculan desde los montos consolidados
        // Los proformados se capturan en pantalla
        // El parametreo idTipoCaptura indica si la proforma es:
        //      1 - Contable
        //      2 - Flujo
        //
        public List <ProformaDetalle> GetProformaCalculada(Int64 idCenCos, int mesInicio, Int64 idEmpresa,
                                                           Int64 idModeloNegocio, Int64 idProyecto, int anio, Int64 idTipoCaptura)
        {
            try
            {
                DateTime fechaCarga = _profHelper.getLastFechaMontosConsol(anio, idEmpresa, idModeloNegocio, idProyecto,
                                                                           idCenCos, idTipoCaptura);
                string consulta = "";
                consulta += " select ";
                consulta += "	 mon.id, anio, mes, empresa_id, modelo_negocio_id, ";
                consulta += "	 mon.centro_costo_id, mon.activo, ";
                consulta +=
                    "	 proyecto_id, rub.id as rubro_id, rub.nombre as nombre_rubro, rub.hijos as hijos, rub.es_total_ingresos ,";

                consulta += BuildMontosFieldsQuery(mesInicio);
                consulta += BuildEjercicioFieldQuery(mesInicio);

                consulta += "	 coalesce(valor_tipo_cambio_resultado, 0) as valor_tipo_cambio_resultado ";
                consulta += "	 from montos_consolidados mon ";
                consulta += "	 inner join rubro rub on mon.rubro_id = rub.id ";
                consulta += "	 where date_trunc('SECOND', fecha) = '"+ fechaCarga.ToString("yyyy-MM-dd HH:mm:ss") +
                            "'::timestamp ";
                consulta += "	 and anio = "+ anio;
                consulta += "	 and empresa_id = "+ idEmpresa;
                consulta += "	 and modelo_negocio_id = "+ idModeloNegocio;
                consulta += "	 and proyecto_id = "+ idProyecto;
                consulta += "	 and centro_costo_id = "+ idCenCos;
                consulta += "	 and tipo_captura_id = "+ idTipoCaptura;
                consulta += "	 and mon.activo = 'true' ";
                consulta += "	 order by rub.id ";

                log.Info("ejecutando query:'{0}'", consulta);


                DataTable dataTable = _queryExecuter.ExecuteQuery(consulta.Trim());
                List <ProformaDetalle> lstProformaDetalle = new List <ProformaDetalle>();
                foreach (DataRow rdr in dataTable.Rows)
                {
                    ProformaDetalle proforma_detalle = new ProformaDetalle();
                    proforma_detalle.mes_inicio        = mesInicio;
                    proforma_detalle.id_proforma       = ToInt64(rdr["id"]);
                    proforma_detalle.anio              = ToInt32(rdr["anio"]);
                    proforma_detalle.modelo_negocio_id = ToInt64(rdr["modelo_negocio_id"]);
                    proforma_detalle.empresa_id        = ToInt64(rdr["empresa_id"]);
                    proforma_detalle.centro_costo_id   = ToInt64(rdr["centro_costo_id"]);
                    proforma_detalle.activo            = ToBoolean(rdr["activo"]);
                    proforma_detalle.rubro_id          = ToInt64(rdr["rubro_id"]);
                    proforma_detalle.nombre_rubro      = (rdr["nombre_rubro"]).ToString().Trim();
                    proforma_detalle.hijos             = (rdr["hijos"]).ToString().Trim();

                    foreach (var entry in ProformaHelper.getPonderacionMeses())
                    {
                        string nombreCampo = entry.Value;
                        proforma_detalle[nombreCampo] = ToDouble(rdr[nombreCampo]);
                    }

                    proforma_detalle.ejercicio_resultado = ToDouble(rdr["ejercicio_resultado"]);

                    lstProformaDetalle.Add(proforma_detalle);
                }

                return(lstProformaDetalle);
            }
            catch (ApplicationException e)
            {
                log.Warn(e, "Parece que no hay datos de montos");
                return(new List <ProformaDetalle>());
            }
        }