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;
    }
Exemplo n.º 2
0
    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());
        }
    }