protected void btnBuscar_Click(object sender, EventArgs eventarg) { EntidadesConosud dc = new EntidadesConosud(); List <InformeMapaHojasRutaTemp> datos = new List <InformeMapaHojasRutaTemp>(); long idContrato = long.Parse(cboContratos.SelectedValue); List <Entidades.CabeceraHojasDeRuta> cabs = null; if (cboPeriodos.SelectedValue == "") { cabs = (from C in dc.CabeceraHojasDeRuta .Include("HojasDeRuta").Include("HojasDeRuta.Plantilla").Include("HojasDeRuta.Plantilla.CategoriasItems").Include("ContratoEmpresas").Include("ContratoEmpresas.Contrato") .Include("ContratoEmpresas.Empresa").Include("Estado") .Include("ContratoEmpresas.CabeceraHojasDeRuta") where (C.ContratoEmpresas.Contrato.IdContrato == idContrato) && ((C.Periodo.Month < DateTime.Now.Month && C.Periodo.Year == DateTime.Now.Year) || (C.Periodo.Year < DateTime.Now.Year)) orderby C.Periodo ascending select C).ToList <Entidades.CabeceraHojasDeRuta>(); } else { int año = int.Parse(cboPeriodos.Text.Substring(3, 4)); int mes = int.Parse(cboPeriodos.Text.Substring(0, 2)); cabs = (from C in dc.CabeceraHojasDeRuta .Include("HojasDeRuta").Include("HojasDeRuta.Plantilla").Include("HojasDeRuta.Plantilla.CategoriasItems").Include("ContratoEmpresas").Include("ContratoEmpresas.Contrato") .Include("ContratoEmpresas.Empresa").Include("Estado") .Include("ContratoEmpresas.CabeceraHojasDeRuta") where C.ContratoEmpresas.Contrato.IdContrato == idContrato && C.Periodo.Month == mes && C.Periodo.Year == año orderby C.Periodo ascending select C).ToList <Entidades.CabeceraHojasDeRuta>(); } foreach (var item in cabs) { InformeMapaHojasRutaTemp reg = new InformeMapaHojasRutaTemp(); reg.IdCabecera = item.IdCabeceraHojasDeRuta.ToString(); reg.Estado = item.Aprobada; reg.Empresa = item.ContratoEmpresas.Empresa.RazonSocial; reg.Periodo = string.Format("{0:MM/yyyy}", item.Periodo); if (reg.Estado == "Aprobada") { reg.EstadoValor = 0; } else { reg.EstadoValor = 1; } if (item.ContratoEmpresas.EsContratista.Value) { reg.OrdenEmpresas = 0; } else { reg.OrdenEmpresas = 1; } datos.Add(reg); } InformeMapaHojaDeRuta rep = new InformeMapaHojaDeRuta(); rep.InitReport(datos.OrderBy(w => w.OrdenEmpresas).ToList()); this.ReportViewer1.Report = rep; (ReportViewer1.FindControl("ReportToolbar").FindControl("ExportGr").Controls[0].Controls[0] as DropDownList).ClearSelection(); (ReportViewer1.FindControl("ReportToolbar").FindControl("ExportGr").Controls[0].Controls[0] as DropDownList).Items.FindByText("Excel").Selected = true; trReporte.Visible = true; trResultadoVacio.Visible = false; }
public static string GetData(long IdContrato, string Periodo) { using (EntidadesConosud dc = new EntidadesConosud()) { Dictionary <string, object> resultado = new Dictionary <string, object>(); List <InformeMapaHojasRutaTemp> datos = new List <InformeMapaHojasRutaTemp>(); List <Entidades.CabeceraHojasDeRuta> cabs = null; if (Periodo == "") { cabs = (from C in dc.CabeceraHojasDeRuta .Include("ContratoEmpresas.Empresa") .Include("ContratoEmpresas") .Include("HojasDeRuta") where (C.ContratoEmpresas.Contrato.IdContrato == IdContrato) && ((C.Periodo.Month < DateTime.Now.Month && C.Periodo.Year == DateTime.Now.Year) || (C.Periodo.Year < DateTime.Now.Year)) orderby C.Periodo ascending select C).ToList <Entidades.CabeceraHojasDeRuta>(); } else { int año = int.Parse(Periodo.Substring(3, 4)); int mes = int.Parse(Periodo.Substring(0, 2)); cabs = (from C in dc.CabeceraHojasDeRuta .Include("ContratoEmpresas.Empresa") .Include("ContratoEmpresas") .Include("HojasDeRuta") where C.ContratoEmpresas.Contrato.IdContrato == IdContrato && C.Periodo.Month == mes && C.Periodo.Year == año orderby C.Periodo ascending select C).ToList <Entidades.CabeceraHojasDeRuta>(); } foreach (var item in cabs) { InformeMapaHojasRutaTemp reg = new InformeMapaHojasRutaTemp(); reg.IdCabecera = item.IdCabeceraHojasDeRuta.ToString(); reg.Estado = item.Aprobada; reg.Empresa = item.ContratoEmpresas.Empresa.RazonSocial; reg.Periodo = string.Format("{0:MM/yyyy}", item.Periodo); if (reg.Estado == "Aprobada") { reg.EstadoValor = 0; } else { reg.EstadoValor = 1; } if (item.ContratoEmpresas.EsContratista.Value) { reg.OrdenEmpresas = 0; } else { reg.OrdenEmpresas = 1; } datos.Add(reg); string EstadoAdicional = ""; if (item.FechaAprobacion == null) { int SinDoc = (from H in item.HojasDeRuta where H.DocComentario != null && H.DocComentario.Trim() != "" select H).Count(); if (SinDoc == 0) { /// Si no tiene comentarios de pendientes y no tiene todos los items aprobados, /// entonces no se ha aprobado porque alguna de las sub contratistas /// no esta aprobada y por lo tanto no puede aprobarce esta hoja. int ItemsAprobados = item.HojasDeRuta.Where(w => w.HojaFechaAprobacion.HasValue).Count(); if (ItemsAprobados == 0) { EstadoAdicional = " (No Presentó Documentación)"; } else { List <CabeceraHojasDeRuta> cabsPeriodo = cabs.Where(w => w.Periodo == item.Periodo).ToList(); if (cabsPeriodo.Any(c => c.HojasDeRuta.Any(w => w.HojaComentario != null && w.HojaComentario.Trim() != ""))) { EstadoAdicional = " (Por pendientes de Subcontratista)"; } else { EstadoAdicional = ""; } } } else { if (item.ContratoEmpresas.EsContratista.Value) { List <CabeceraHojasDeRuta> cabsPeriodo = cabs.Where(w => w.Periodo == item.Periodo).ToList(); if (cabsPeriodo.Any(c => c.IdCabeceraHojasDeRuta != item.IdCabeceraHojasDeRuta && c.HojasDeRuta.Any(w => w.HojaComentario != null && w.HojaComentario.Trim() != ""))) { EstadoAdicional = " (Por pendientes de Subcontratista)"; } else if (cabsPeriodo.Any(c => c.IdCabeceraHojasDeRuta != item.IdCabeceraHojasDeRuta && c.HojasDeRuta.Any(w => !w.HojaFechaAprobacion.HasValue))) { EstadoAdicional = " (Por Subcontratista)"; } } } int CantComentarios = (from H in item.HojasDeRuta where H.HojaComentario != null && H.HojaComentario.Trim() != "" select H).Count(); if (CantComentarios > 0) { EstadoAdicional = " (Con Pendientes)"; } } reg.Estado += EstadoAdicional; } var ratingTypes = datos.Select(i => new { i.OrdenEmpresas, i.Empresa }).Distinct().OrderBy(i => i.OrdenEmpresas).Select(w => w.Empresa).ToArray(); var datosAgrupado = datos.GroupBy(i => i.Periodo) .Select(g => new { Periodo = g.Key, Estados = ratingTypes.GroupJoin(g, o => o, i => i.Empresa, (o, i) => i.Select(x => new { x.Estado, x.IdCabecera }).FirstOrDefault()).ToArray() }) .ToArray(); List <string> columnNames = new List <string>(); columnNames.Add("Periodo"); columnNames.AddRange(ratingTypes.ToArray()); columnNames.Add("Reporte"); HtmlTable tabla = new HtmlTable(); tabla.Attributes.Add("class", "TSunset"); tabla.Attributes.Add("cellpadding", "0"); tabla.Attributes.Add("cellspacing", "0"); tabla.Attributes.Add("width", "100%"); HtmlTableRow rowHeader = new HtmlTableRow(); // Header HtmlTableCell cellHeader = new HtmlTableCell(); //cellHeader.InnerText = "Periodo"; //rowHeader.Cells.Add(cellHeader); foreach (var item in columnNames) { cellHeader = new HtmlTableCell(); cellHeader.InnerText = item; cellHeader.Attributes.Add("class", "Theader"); rowHeader.Cells.Add(cellHeader); } tabla.Rows.Add(rowHeader); /// body foreach (var item in datosAgrupado) { rowHeader = new HtmlTableRow(); /// Columna de Periodo cellHeader = new HtmlTableCell(); cellHeader.InnerText = item.Periodo; cellHeader.Attributes.Add("class", "tdSimple"); rowHeader.Cells.Add(cellHeader); // Columnas de Empresas string idCabPrincipal = ""; for (int i = 0; i < ratingTypes.Count(); i++) { string estado = " "; string idCab = ""; if (item.Estados.Skip(i).Take(1).FirstOrDefault() != null) { estado = item.Estados.Skip(i).Take(1).FirstOrDefault().Estado; idCab = item.Estados.Skip(i).Take(1).FirstOrDefault().IdCabecera; if (i == 0) { idCabPrincipal = idCab; } } HtmlAnchor a = new HtmlAnchor(); a.InnerText = estado; a.HRef = "GestionHojadeRuta.aspx?IdCabecera=" + idCab; a.Target = "_blank"; //HttpContext.Current.Request.ApplicationPath + cellHeader = new HtmlTableCell(); cellHeader.Controls.Add(a); cellHeader.Attributes.Add("class", "tdSimple"); rowHeader.Cells.Add(cellHeader); } // Columna de Reporte Historico HtmlAnchor linkReporteMensual = new HtmlAnchor(); linkReporteMensual.InnerText = "Reporte Mensual"; linkReporteMensual.HRef = "ReporteViewerPeriodoHistorico.aspx?Id=" + idCabPrincipal + "&EsHistorico=false"; linkReporteMensual.Target = "_blank"; cellHeader = new HtmlTableCell(); cellHeader.Controls.Add(linkReporteMensual); cellHeader.Attributes.Add("class", "tdSimple"); rowHeader.Cells.Add(cellHeader); tabla.Rows.Add(rowHeader); } StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); tabla.RenderControl(htw); return(htw.InnerWriter.ToString()); } }