public List <ProformaDetalle> GetProformaDetalle(Int64 idProforma) { string consulta = ""; consulta += " select "; consulta += " det.id, det.id_proforma, det.rubro_id, rub.nombre as nombre_rubro,rub.hijos,rub.aritmetica, rub.clave,rub.es_total_ingresos,"; consulta += " coalesce(ejercicio_resultado, 0) as ejercicio_resultado, "; consulta += " coalesce(enero_monto_resultado, 0) as enero_monto_resultado, "; consulta += " coalesce(febrero_monto_resultado, 0) as febrero_monto_resultado, "; consulta += " coalesce(marzo_monto_resultado, 0) as marzo_monto_resultado, "; consulta += " coalesce(abril_monto_resultado, 0) as abril_monto_resultado, "; consulta += " coalesce(mayo_monto_resultado, 0) as mayo_monto_resultado, "; consulta += " coalesce(junio_monto_resultado, 0) as junio_monto_resultado, "; consulta += " coalesce(julio_monto_resultado, 0) as julio_monto_resultado, "; consulta += " coalesce(agosto_monto_resultado, 0) as agosto_monto_resultado, "; consulta += " coalesce(septiembre_monto_resultado, 0) as septiembre_monto_resultado, "; consulta += " coalesce(octubre_monto_resultado, 0) as octubre_monto_resultado, "; consulta += " coalesce(noviembre_monto_resultado, 0) as noviembre_monto_resultado, "; consulta += " coalesce(diciembre_monto_resultado, 0) as diciembre_monto_resultado, "; consulta += " coalesce(total_resultado, 0) as total_resultado, "; consulta += " coalesce(acumulado_resultado, 0) as acumulado_resultado, "; consulta += " coalesce(valor_tipo_cambio_resultado, 0) as valor_tipo_cambio_resultado "; consulta += " from proforma_detalle det "; consulta += " inner join rubro rub on det.rubro_id = rub.id "; consulta += " where id_proforma = " + idProforma; consulta += " and det.activo = 'true' "; List <ProformaDetalle> lstProformaDetalle = new List <ProformaDetalle>(); DataTable dataTable = _queryExecuter.ExecuteQuery(consulta.Trim()); foreach (DataRow rdr in dataTable.Rows) { ProformaDetalle proforma_detalle = new ProformaDetalle(); proforma_detalle.id = ToInt64(rdr["id"]); proforma_detalle.id_proforma = ToInt64(rdr["id_proforma"]); proforma_detalle.rubro_id = ToInt64(rdr["rubro_id"]); proforma_detalle.nombre_rubro = Convert.ToString(rdr["nombre_rubro"]); proforma_detalle.aritmetica = Convert.ToString(rdr["aritmetica"]); proforma_detalle.es_total_ingresos = ToBoolean(rdr["es_total_ingresos"]); proforma_detalle.ejercicio_resultado = ToDouble(rdr["ejercicio_resultado"]); proforma_detalle.enero_monto_resultado = ToDouble(rdr["enero_monto_resultado"]); proforma_detalle.febrero_monto_resultado = ToDouble(rdr["febrero_monto_resultado"]); proforma_detalle.marzo_monto_resultado = ToDouble(rdr["marzo_monto_resultado"]); proforma_detalle.abril_monto_resultado = ToDouble(rdr["abril_monto_resultado"]); proforma_detalle.mayo_monto_resultado = ToDouble(rdr["mayo_monto_resultado"]); proforma_detalle.junio_monto_resultado = ToDouble(rdr["junio_monto_resultado"]); proforma_detalle.julio_monto_resultado = ToDouble(rdr["julio_monto_resultado"]); proforma_detalle.agosto_monto_resultado = ToDouble(rdr["agosto_monto_resultado"]); proforma_detalle.septiembre_monto_resultado = ToDouble(rdr["septiembre_monto_resultado"]); proforma_detalle.octubre_monto_resultado = ToDouble(rdr["octubre_monto_resultado"]); proforma_detalle.noviembre_monto_resultado = ToDouble(rdr["noviembre_monto_resultado"]); proforma_detalle.diciembre_monto_resultado = ToDouble(rdr["diciembre_monto_resultado"]); proforma_detalle.total_resultado = ToDouble(rdr["total_resultado"]); proforma_detalle.acumulado_resultado = ToDouble(rdr["acumulado_resultado"]); proforma_detalle.valor_tipo_cambio_resultado = ToDouble(rdr["valor_tipo_cambio_resultado"]); //proforma_detalle.activo = ToBoolean(rdr["activo"]); proforma_detalle.hijos = rdr["hijos"].ToString(); proforma_detalle.clave_rubro = rdr["clave"].ToString(); lstProformaDetalle.Add(proforma_detalle); } Proforma pro = _proformaDataAccessLayer.GetProforma(idProforma); Boolean hayPeriodoActivo = _profHelper.existePeridodoActivo(pro.anio, pro.tipo_proforma_id, pro.tipo_captura_id); Int64 idEmpresa = ToInt64(_queryExecuter.ExecuteQueryUniqueresult( "select empresa_id from centro_costo where id =" + pro.centro_costo_id)["empresa_id"]); List <ProformaDetalle> detallesAniosPosteriores = GetEjercicioPosterior(pro.anio, pro.centro_costo_id, pro.modelo_negocio_id, pro.tipo_captura_id, pro.tipo_proforma_id); lstProformaDetalle.ForEach(detalle => { detalle.editable = hayPeriodoActivo; detalle.mes_inicio = _profHelper.getMesInicio(pro.tipo_proforma_id); detalle.modelo_negocio_id = pro.modelo_negocio_id; detalle.anio = pro.anio; detalle.centro_costo_id = pro.centro_costo_id; detalle.tipo_proforma_id = pro.tipo_proforma_id; detalle.tipo_captura_id = pro.tipo_captura_id; detalle.empresa_id = idEmpresa; detalle.unidad_id = pro.unidad_id; detallesAniosPosteriores.ForEach(posterior => { if (detalle.rubro_id == posterior.rubro_id) { detalle.anios_posteriores_resultado = posterior.anios_posteriores_resultado; } }); }); return(_profHelper.reorderConceptos(lstProformaDetalle)); }
// 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); }