private void BindGrid(int currentPage) { DataSet ds = new DataSet(); // Tengo que mostrarlos de forma resumida. Configuro la grilla a mostrar SisPackController.AdministrarGrillas.Configurar(this.hgCabecera, "AgenciaID", 20); // Cargo los filtros IReporteTrazabilidad reporte = this.SetFiltros(); DsReporteTrazabilidad dsGuiasRT = new DsReporteTrazabilidad(); // Reviso si los datos ya estan en memoria o tengo que cargarlos if (Session["dsGuiasRT"] == null) { // Tengo que cargarlos. Los busco y los cargo en memoria dsGuiasRT = reporte.GetGuiasReporteTrazabilidad(this.chkRendEmitidasNoRecAControlar.Checked, this.chkRendEmitidasRecAControlarNoControladas.Checked, this.chkRendConformadasNoRecAControlar.Checked, this.chkRendConformadasRecAControlarNoControladas.Checked, this.chkRendConformadasControladasNoDig.Checked, this.ddlAgrupadoPor.SelectedIndex); Session["dsGuiasRT"] = dsGuiasRT; } else { // Los datos estan en memoria. Los cargo en el objeto dsGuiasTDE dsGuiasRT = (DsReporteTrazabilidad)Session["dsGuiasRT"]; } // Clono la estructura de la tabla ds.Tables.Add(dsGuiasRT.Datos.Clone()); ds.Tables[0].TableName = "GuiasEmitidas"; ds.Tables.Add(dsGuiasRT.Datos.Clone()); ds.Tables[1].TableName = "GuiasConformadas"; string agenciasEmitidas = ""; string agenciasConformadas = ""; string agencias = ""; agenciasEmitidas = ","; agenciasConformadas = ","; agencias = ","; foreach (DsReporteTrazabilidad.DatosRow row in dsGuiasRT.Datos.Rows) { if (row.TipoResultado.Equals("RE")) { ds.Tables["GuiasEmitidas"].ImportRow(row); } else { ds.Tables["GuiasConformadas"].ImportRow(row); } switch (this.ddlAgrupadoPor.SelectedValue) { case "Agencia": /* Visualiza emitidas y conformadas */ if (row.TipoResultado.Equals("RE")) { if (agenciasEmitidas.IndexOf("," + row["AgenciaOrigenID"] + ",") == -1) { agenciasEmitidas += row["AgenciaOrigenID"] + ","; } if (agencias.IndexOf("," + row["AgenciaOrigenID"] + ",") == -1) { agencias += row["AgenciaOrigenID"] + ","; } } else { if (agenciasConformadas.IndexOf("," + row["AgenciaDestinoID"] + ",") == -1) { agenciasConformadas += row["AgenciaDestinoID"] + ","; } if (agencias.IndexOf("," + row["AgenciaDestinoID"] + ",") == -1) { agencias += row["AgenciaDestinoID"] + ","; } } break; case "AgenciaOrigen": /* Visualiza sólo emitidas */ if (row.TipoResultado.Equals("RE")) { if (agencias.IndexOf("," + row["AgenciaOrigenID"] + ",") == -1) { agencias += row["AgenciaOrigenID"] + ","; agenciasEmitidas += row["AgenciaOrigenID"] + ","; } } break; case "AgenciaDestino": /* Visualiza sólo conformadas */ if (row.TipoResultado.Equals("RC")) { if (agencias.IndexOf("," + row["AgenciaDestinoID"] + ",") == -1) { agencias += row["AgenciaDestinoID"] + ","; agenciasConformadas += row["AgenciaDestinoID"] + ","; } } break; } } if (agenciasEmitidas.Length > 1) { agenciasEmitidas = agenciasEmitidas.Substring(1); } else { agenciasEmitidas = ""; } if (agenciasConformadas.Length > 1) { agenciasConformadas = agenciasConformadas.Substring(1); } else { agenciasConformadas = ""; } if (agencias.Length > 1) { agencias = agencias.Substring(1); } else { agencias = ""; } // Creo en el DataSet ds una tabla para las agencias IAgencia agencia = AgenciaFactory.GetAgencia(); DsAgencias dsAgencias = new DsAgencias(); DsAgencias dsAgenciasEmitidas = new DsAgencias(); DsAgencias dsAgenciasConformadas = new DsAgencias(); // Reviso si las agencias a mostrar estan cargadas en memoria if (Session["dsAgencias"] == null) { // No estan cargadas en memoria. Las busco dsAgenciasEmitidas = agencia.GetAgenciasByIdsDataSet(agenciasEmitidas); dsAgenciasConformadas = agencia.GetAgenciasByIdsDataSet(agenciasConformadas); dsAgencias = agencia.GetAgenciasByIdsDataSet(agencias); // Le agrego al dataset dsAgencias las columnas Promedio Ponderado y CantidadGuias dsAgenciasEmitidas.Datos.Columns.Add("ImporteTotalGuiasContado", System.Type.GetType("System.Double")); dsAgenciasEmitidas.Datos.Columns.Add("CumpRendicion", System.Type.GetType("System.Double")); dsAgenciasEmitidas.Datos.Columns.Add("CumpControl", System.Type.GetType("System.Double")); dsAgenciasEmitidas.Datos.Columns.Add("CantidadGuias", System.Type.GetType("System.Int32")); // Le agrego al dataset dsAgencias las columnas Promedio Ponderado y CantidadGuias dsAgenciasConformadas.Datos.Columns.Add("CumpRendicion", System.Type.GetType("System.Double")); dsAgenciasConformadas.Datos.Columns.Add("CumpControl", System.Type.GetType("System.Double")); dsAgenciasConformadas.Datos.Columns.Add("CumpDigitalizacion", System.Type.GetType("System.Double")); dsAgenciasConformadas.Datos.Columns.Add("CantidadGuias", System.Type.GetType("System.Int32")); dsAgencias.Datos.Columns.Add("CumpRendicion", System.Type.GetType("System.Double")); dsAgencias.Datos.Columns.Add("CumpControl", System.Type.GetType("System.Double")); dsAgencias.Datos.Columns.Add("CantidadGuias", System.Type.GetType("System.Int32")); // Guardo en memoria las agencias cargadas Session["dsAgenciasEmitidas"] = dsAgenciasEmitidas; Session["dsAgenciasConformadas"] = dsAgenciasConformadas; Session["dsAgencias"] = dsAgencias; } else { // Las agencias ya estan cargadas en memoria. Las cargo dsAgenciasEmitidas = (DsAgencias)Session["dsAgenciasEmitidas"]; dsAgenciasConformadas = (DsAgencias)Session["dsAgenciasConformadas"]; dsAgencias = (DsAgencias)Session["dsAgencias"]; } ds.Tables.Add(dsAgenciasEmitidas.Datos.Clone()); ds.Tables[2].TableName = "CabeceraEmitidas"; ds.Tables.Add(dsAgenciasConformadas.Datos.Clone()); ds.Tables[3].TableName = "CabeceraConformadas"; ds.Tables.Add(dsAgencias.Datos.Clone()); ds.Tables[4].TableName = "Cabecera"; double totalGuiasPromedioFinal = 0; #region Guias emitidas foreach (System.Data.DataRow row in dsAgenciasEmitidas.Datos.Rows) { // Totales cabecera guías emitidas double importeTotalGuiasContado = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsGuiasRT.Datos.Compute("Sum(ImporteTotal)", "TipoResultado='RE' And EsContado = 1 And AgenciaOrigenID = " + row["AgenciaID"].ToString()))); /*Calculo del Cumplimiento de Rendicion y Control para guias emitidas*/ //double totalGuiasEmitidasCumplidaRecepcion = Utiles.Validaciones.obtieneEntero(Convert.ToString(dsGuiasRT.Datos.Compute("SUM(CumpRendicion)", "TipoResultado='RE' And FechaRecepcionPlla is not null and FechaRecepcionPlla <> '1900-01-01 00:00:00.000' And AgenciaOrigenID = " + row["AgenciaID"].ToString()))); double totalGuiasEmitidasCumplidaRecepcion = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsGuiasRT.Datos.Compute("SUM(CumpRendicion)", "TipoResultado='RE' And AgenciaOrigenID = " + row["AgenciaID"].ToString()))); //double totalGuiasEmitidasCumplidoControl = Utiles.Validaciones.obtieneEntero(Convert.ToString(dsGuiasRT.Datos.Compute("SUM(CumpControl)", "TipoResultado='RE' And FechaControlPlla is not null and FechaControlPlla <> '1900-01-01 00:00:00.000' And AgenciaOrigenID = " + row["AgenciaID"].ToString()))); double totalGuiasEmitidasCumplidoControl = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsGuiasRT.Datos.Compute("SUM(CumpControl)", "TipoResultado='RE' And AgenciaOrigenID = " + row["AgenciaID"].ToString()))); double totalGuiasEmitidas = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsGuiasRT.Datos.Compute("Count(GuiaID)", "TipoResultado='RE' And AgenciaOrigenID = " + row["AgenciaID"].ToString()))); // Cargo los calculos if (totalGuiasEmitidas > 0) { /* Cargar cálculos cabecera guías emitidas */ row["ImporteTotalGuiasContado"] = importeTotalGuiasContado; row["CumpRendicion"] = (totalGuiasEmitidasCumplidaRecepcion / totalGuiasEmitidas); row["CumpControl"] = (totalGuiasEmitidasCumplidoControl / totalGuiasEmitidas); row["CantidadGuias"] = totalGuiasEmitidas; } else { row["ImporteTotalGuiasContado"] = 0; row["CumpRendicion"] = 0; row["CumpControl"] = 0; row["CantidadGuias"] = 0; } totalGuiasPromedioFinal += totalGuiasEmitidas; // Agrego la fila al listado de agencias en el DataSet ds ds.Tables["CabeceraEmitidas"].ImportRow(row); } #endregion #region Guías conformadas foreach (System.Data.DataRow row in dsAgenciasConformadas.Datos.Rows) { // Totales cabecera guías conformadas /*Calculo del Cumplimiento de Rendicion, Control y Digitalizacion para guias conformadas*/ //double totalGuiasConformCumplidaRecepcion = Utiles.Validaciones.obtieneEntero(Convert.ToString(dsGuiasRT.Datos.Compute("SUM(CumpRendicion)", "TipoResultado='RC' And FechaRecepcionPlla is not null and FechaRecepcionPlla <> '1900-01-01 00:00:00.000' And AgenciaDestinoID = " + row["AgenciaID"].ToString()))); double totalGuiasConformCumplidaRecepcion = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsGuiasRT.Datos.Compute("SUM(CumpRendicion)", "TipoResultado='RC' And AgenciaDestinoID = " + row["AgenciaID"].ToString()))); //double totalGuiasConformCumplidoControl = Utiles.Validaciones.obtieneEntero(Convert.ToString(dsGuiasRT.Datos.Compute("SUM(CumpControl)", "TipoResultado='RC' And FechaControlPlla is not null and FechaControlPlla <> '1900-01-01 00:00:00.000' And AgenciaDestinoID = " + row["AgenciaID"].ToString()))); double totalGuiasConformCumplidoControl = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsGuiasRT.Datos.Compute("SUM(CumpControl)", "TipoResultado='RC' And AgenciaDestinoID = " + row["AgenciaID"].ToString()))); //double totalGuiasConformCumplidaDigit = Utiles.Validaciones.obtieneEntero(Convert.ToString(dsGuiasRT.Datos.Compute("SUM(CumpDigitalizacion)", "TipoResultado='RC' And FechaDigitalizacion is not null and FechaDigitalizacion <> '1900-01-01 00:00:00.000' And AgenciaDestinoID = " + row["AgenciaID"].ToString()))); double totalGuiasConformCumplidaDigit = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsGuiasRT.Datos.Compute("SUM(CumpDigitalizacion)", "TipoResultado='RC' And AgenciaDestinoID = " + row["AgenciaID"].ToString()))); double totalGuiasConform = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsGuiasRT.Datos.Compute("Count(GuiaID)", "TipoResultado='RC' And AgenciaDestinoID = " + row["AgenciaID"].ToString()))); // Cargo los calculos if (totalGuiasConform > 0) { /* Cargar cálculos cabecera guías conformadas */ row["CumpRendicion"] = (totalGuiasConformCumplidaRecepcion / totalGuiasConform); row["CumpControl"] = (totalGuiasConformCumplidoControl / totalGuiasConform); row["CumpDigitalizacion"] = (totalGuiasConformCumplidaDigit / totalGuiasConform); row["CantidadGuias"] = totalGuiasConform; } else { row["CumpRendicion"] = 0; row["CumpControl"] = 0; row["CumpDigitalizacion"] = 0; row["CantidadGuias"] = 0; } totalGuiasPromedioFinal += totalGuiasConform; // Agrego la fila al listado de agencias en el DataSet ds ds.Tables["CabeceraConformadas"].ImportRow(row); } #endregion double promedioCumplimientoRendicion = 0; double promedioCumplimientoControl = 0; int totalCantidadGuiasFinal = 0; #region Promedios por agencia // Cargo los datos de la agencia, junto con los datos calculados en el DataSet ds foreach (System.Data.DataRow row in dsAgencias.Datos.Rows) { double cumpRendicionEmitidas = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsAgenciasEmitidas.Datos.Compute("Sum(CumpRendicion)", "AgenciaID = " + row["AgenciaID"].ToString()))); double cumpRendicionConformadas = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsAgenciasConformadas.Datos.Compute("Sum(CumpRendicion)", "AgenciaID = " + row["AgenciaID"].ToString()))); //double totalCumpRendicion = (cumpRendicionEmitidas == 0 || cumpRendicionConformadas == 0) ?(cumpRendicionEmitidas + cumpRendicionConformadas):((cumpRendicionEmitidas + cumpRendicionConformadas)/ 2); double cumpControlEmitidas = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsAgenciasEmitidas.Datos.Compute("Sum(CumpControl)", "AgenciaID = " + row["AgenciaID"].ToString()))); double cumpControlConformadas = Utiles.Validaciones.obtieneDouble(Convert.ToString(dsAgenciasConformadas.Datos.Compute("Sum(CumpControl)", "AgenciaID = " + row["AgenciaID"].ToString()))); //double totalCumpControl = (cumpControlEmitidas == 0 || cumpControlConformadas == 0) ?(cumpControlEmitidas + cumpControlConformadas):((cumpControlEmitidas + cumpControlConformadas)/ 2); int totalCantidadGuias = Utiles.Validaciones.obtieneEntero(Convert.ToString(dsAgenciasEmitidas.Datos.Compute("Sum(CantidadGuias)", "AgenciaID = " + row["AgenciaID"].ToString()))) + Utiles.Validaciones.obtieneEntero(Convert.ToString(dsAgenciasConformadas.Datos.Compute("Sum(CantidadGuias)", "AgenciaID = " + row["AgenciaID"].ToString()))); totalCantidadGuiasFinal = totalCantidadGuiasFinal + totalCantidadGuias; /*SFE: */ double totalCantidadGuiasEmitidas = Utiles.Validaciones.obtieneEntero(Convert.ToString(dsAgenciasEmitidas.Datos.Compute("Sum(CantidadGuias)", "AgenciaID = " + row["AgenciaID"].ToString()))); double totalCantidadGuiasConformadas = Utiles.Validaciones.obtieneEntero(Convert.ToString(dsAgenciasConformadas.Datos.Compute("Sum(CantidadGuias)", "AgenciaID = " + row["AgenciaID"].ToString()))); promedioCumplimientoRendicion = ((totalCantidadGuiasEmitidas * cumpRendicionEmitidas) / (totalCantidadGuiasEmitidas + totalCantidadGuiasConformadas)) + ((totalCantidadGuiasConformadas * cumpRendicionConformadas) / (totalCantidadGuiasEmitidas + totalCantidadGuiasConformadas)); promedioCumplimientoControl = ((totalCantidadGuiasEmitidas * cumpControlEmitidas) / (totalCantidadGuiasEmitidas + totalCantidadGuiasConformadas)) + ((totalCantidadGuiasConformadas * cumpControlConformadas) / (totalCantidadGuiasEmitidas + totalCantidadGuiasConformadas)); // Cargo los calculos if (totalCantidadGuias > 0) { /* Cargar cálculos totales */ /* Cumpl Rendicion Ponderado de cada Agencia*/ row["CumpRendicion"] = (promedioCumplimientoRendicion); /* Cumpl Control Ponderado de cada Agencia*/ row["CumpControl"] = (promedioCumplimientoControl); row["CantidadGuias"] = totalCantidadGuias; promedioCumplimientoRendicionTotal += Utiles.Validaciones.obtieneDouble(row["CumpRendicion"].ToString()); promedioCumplimientoControlTotal += Utiles.Validaciones.obtieneDouble(row["CumpControl"].ToString()); } else { row["CumpRendicion"] = 0; row["CumpControl"] = 0; row["CantidadGuias"] = 0; } // Agrego la fila al listado de agencias en el DataSet ds ds.Tables["Cabecera"].ImportRow(row); } #endregion // Realizo la relación entre las tablas Agencias y Guias DataColumn dcAgOrigen = ds.Tables[2].Columns["AgenciaID"]; DataColumn dcAgDestino = ds.Tables[3].Columns["AgenciaID"]; DataColumn dcAgencias = ds.Tables[4].Columns["AgenciaID"]; DataRelation dr0 = new DataRelation("Agencia_CabeceraOri", dcAgencias, dcAgOrigen, false); DataRelation dr1 = new DataRelation("Agencia_CabeceraDes", dcAgencias, dcAgDestino, false); ds.Relations.Add(dr0); ds.Relations.Add(dr1); if (!this.chkResumido.Checked) { DataColumn dcGuiasOri = ds.Tables[0].Columns["AgenciaOrigenID"]; DataColumn dcGuiasDes = ds.Tables[1].Columns["AgenciaDestinoID"]; DataRelation dr2 = new DataRelation("Agencia_GuiasOri", dcAgOrigen, dcGuiasOri, false); DataRelation dr3 = new DataRelation("Agencia_GuiasDes", dcAgDestino, dcGuiasDes, false); ds.Relations.Add(dr2); ds.Relations.Add(dr3); } /*VSA - SFE: : Agregar Totalizador ponderado final.*/ if (dsAgencias.Datos.Rows.Count > 0) { DataRow drTotal = ds.Tables[4].NewRow(); drTotal["AgenciaID"] = -1; drTotal["RazonSocial"] = "Promedios totales:"; drTotal["CumpRendicion"] = promedioCumplimientoRendicionTotal / dsAgencias.Datos.Rows.Count; drTotal["CumpControl"] = promedioCumplimientoControlTotal / dsAgencias.Datos.Rows.Count; drTotal["CantidadGuias"] = totalCantidadGuiasFinal; ds.Tables[4].Rows.Add(drTotal); } Session["dsGuiasRTExcel"] = ds; // Cargo los datos en el dataGrid this.hgCabecera.DataSource = ds; this.hgCabecera.DataMember = "Cabecera"; this.hgCabecera.CurrentPageIndex = currentPage; this.hgCabecera.DataBind(); }