Esempio n. 1
0
 private void LLenaDatos(int idInformacion, int idTipoFecha, string fechaInicio, string fechafin)
 {
     try
     {
         ReporteInformacionConsulta reporte = _servicioInformacionConsulta.ObtenerReporteInformacionConsulta(idInformacion, Metodos.ManejoFechas.ObtenerFechas(idTipoFecha, fechaInicio, fechafin), idTipoFecha);
         lblTitulo.Text = reporte.Titulo;
         GeneraGraficaStackedColumn(rhcLikeBarra, reporte.GraficoBarras);
         GeneraGraficaPie(rhcLikePie, reporte.GraficoPie);
     }
     catch (Exception e)
     {
         throw new Exception(e.Message);
     }
 }
Esempio n. 2
0
        public ReporteInformacionConsulta ObtenerReporteInformacionConsulta(int idInformacionConsulta, Dictionary <string, DateTime> fechas, int tipoFecha)
        {
            ReporteInformacionConsulta result = null;
            DataBaseModelContext       db     = new DataBaseModelContext();
            int conteo = 1;

            try
            {
                bool restaMes = false;
                db.ContextOptions.ProxyCreationEnabled = _proxy;

                result = new ReporteInformacionConsulta {
                    IdInformacionConsulta = idInformacionConsulta
                };
                string titulo = db.InformacionConsulta.Single(s => s.Id == idInformacionConsulta).Descripcion;

                string   rango = string.Empty;
                DateTime fechaInicio;
                DateTime fechaFin;

                var qry = from icr in db.InformacionConsultaRate
                          join iic in db.InventarioInfConsulta on icr.IdInformacionConsulta equals iic.IdInfConsulta
                          join iaa in db.InventarioArbolAcceso on iic.IdInventario equals iaa.Id
                          join aa in db.ArbolAcceso on iaa.IdArbolAcceso equals aa.Id
                          where icr.IdInformacionConsulta == idInformacionConsulta &&
                          aa.Evaluacion
                          select icr;

                DataTable dtBarras = new DataTable("dt");
                dtBarras.Columns.Add("Descripcion", typeof(string));
                dtBarras.Columns.Add("Color", typeof(string));

                dtBarras.Rows.Add("Like", ConfigurationManager.AppSettings["ColorLike"]);
                dtBarras.Rows.Add("Dont Like", ConfigurationManager.AppSettings["ColorDontLike"]);

                if (fechas != null)
                {
                    restaMes    = true;
                    fechaInicio = fechas.Single(s => s.Key == "inicio").Value;
                    fechaFin    = fechas.Single(s => s.Key == "fin").Value.AddDays(1);
                    if (fechaInicio > fechaFin)
                    {
                        throw new Exception("Fechas incorrectas");
                    }

                    DateTime tmpFecha = (DateTime)fechaInicio;
                    bool     continua = true;
                    while (continua)
                    {
                        switch (tipoFecha)
                        {
                        case 1:
                            if (tmpFecha < fechaFin)
                            {
                                dtBarras.Columns.Add(new DataColumn(tmpFecha.ToString("dd/MM/yyyy"), typeof(int)));
                                tmpFecha = tmpFecha.AddDays(1);
                            }
                            else
                            {
                                continua = false;
                            }
                            rango = "Diario";
                            break;

                        case 2:
                            if (tmpFecha < fechaFin)
                            {
                                if (!dtBarras.Columns.Contains(BusinessCadenas.Fechas.ObtenerFechaInicioSemana(tmpFecha.Year, CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(tmpFecha, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)).ToString("dd/MM/yyyy")))
                                {
                                    dtBarras.Columns.Add(new DataColumn(BusinessCadenas.Fechas.ObtenerFechaInicioSemana(tmpFecha.Year, CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(tmpFecha, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)).ToString("dd/MM/yyyy"), typeof(int)));
                                }
                                tmpFecha = tmpFecha.AddDays(7);
                            }
                            else
                            {
                                continua = false;
                            }
                            rango = "Semanal";
                            break;

                        case 3:
                            if (tmpFecha < fechaFin)
                            {
                                var firstDayOfMonth = new DateTime(tmpFecha.Year, tmpFecha.Month, 1);
                                if (!dtBarras.Columns.Contains(firstDayOfMonth.ToString("dd/MM/yyyy")))
                                {
                                    dtBarras.Columns.Add(firstDayOfMonth.ToString("dd/MM/yyyy"));
                                }
                                tmpFecha = tmpFecha.AddMonths(1);
                            }
                            else
                            {
                                continua = false;
                            }
                            rango = "Mensual";
                            break;

                        case 4:
                            if (tmpFecha < fechaFin)
                            {
                                if (!dtBarras.Columns.Contains(tmpFecha.ToString("dd/MM/yyyy")))
                                {
                                    dtBarras.Columns.Add(tmpFecha.ToString("dd/MM/yyyy"));
                                }
                                tmpFecha = tmpFecha.AddYears(1);
                            }
                            else
                            {
                                continua = false;
                            }
                            rango = "Anual";
                            break;
                        }
                    }

                    qry = from icr in db.InformacionConsultaRate
                          where icr.IdInformacionConsulta == idInformacionConsulta &&
                          icr.FechaModificacion >= fechaInicio &&
                          icr.FechaModificacion <= fechaFin
                          select icr;
                    var rate = qry.Distinct().ToList();

                    switch (tipoFecha)
                    {
                    case 1:
                        foreach (DataColumn column in dtBarras.Columns)
                        {
                            if (column.ColumnName != "Descripcion" && column.ColumnName != "Color")
                            {
                                dtBarras.Rows[0][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.FechaModificacion.ToString("dd/MM/yyyy") == column.ColumnName && w.MeGusta);
                                dtBarras.Rows[1][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.FechaModificacion.ToString("dd/MM/yyyy") == column.ColumnName && w.NoMeGusta);
                            }
                        }
                        break;

                    case 2:
                        foreach (DataColumn column in dtBarras.Columns)
                        {
                            if (column.ColumnName != "Descripcion" && column.ColumnName != "Color")
                            {
                                dtBarras.Rows[0][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.MeGusta &&
                                                                                 DateTime.ParseExact(w.FechaModificacion.ToString("dd/MM/yyyy"), "dd/MM/yyyy", null) >= DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null) &&
                                                                                 DateTime.ParseExact(w.FechaModificacion.ToString("dd/MM/yyyy"), "dd/MM/yyyy", null) < DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).AddDays(7));
                                dtBarras.Rows[1][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.NoMeGusta &&
                                                                                 DateTime.ParseExact(w.FechaModificacion.ToString("dd/MM/yyyy"), "dd/MM/yyyy", null) >= DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null) &&
                                                                                 DateTime.ParseExact(w.FechaModificacion.ToString("dd/MM/yyyy"), "dd/MM/yyyy", null) < DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).AddDays(7));
                            }
                        }
                        break;

                    case 3:
                        foreach (DataColumn column in dtBarras.Columns)
                        {
                            if (column.ColumnName != "Descripcion" && column.ColumnName != "Color")
                            {
                                dtBarras.Rows[0][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.MeGusta &&
                                                                                 w.FechaModificacion.ToString("MM") == DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).ToString("MM"));
                                dtBarras.Rows[1][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.NoMeGusta &&
                                                                                 w.FechaModificacion.ToString("MM") == DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).ToString("MM"));
                            }
                        }
                        break;

                    case 4:
                        foreach (DataColumn column in dtBarras.Columns)
                        {
                            if (column.ColumnName != "Descripcion" && column.ColumnName != "Color")
                            {
                                dtBarras.Rows[0][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.MeGusta &&
                                                                                 w.FechaModificacion.ToString("yyyy") == DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).ToString("yyyy"));
                                dtBarras.Rows[1][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.NoMeGusta &&
                                                                                 w.FechaModificacion.ToString("yyyy") == DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).ToString("yyyy"));
                            }
                        }
                        break;
                    }
                }
                else
                {
                    restaMes = false;
                    var           rate      = qry.Distinct().ToList();
                    List <string> lstFechas = rate.OrderBy(o => o.FechaModificacion).Distinct().ToList().Select(s => s.FechaModificacion.ToString("dd/MM/yyyy")).Distinct().ToList();
                    fechaInicio = DateTime.ParseExact(lstFechas.First(), "dd/MM/yyyy", null);
                    fechaFin    = DateTime.ParseExact(lstFechas.Last(), "dd/MM/yyyy", null);
                    switch (tipoFecha)
                    {
                    case 1:
                        foreach (string fecha in lstFechas)
                        {
                            dtBarras.Columns.Add(fecha, typeof(int));
                        }
                        break;

                    case 2:
                        foreach (string fecha in lstFechas)
                        {
                            if (!dtBarras.Columns.Contains(BusinessCadenas.Fechas.ObtenerFechaInicioSemana(DateTime.ParseExact(fecha, "dd/MM/yyyy", null).Year, CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(DateTime.ParseExact(fecha, "dd/MM/yyyy", null), CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)).ToString("dd/MM/yyyy")))
                            {
                                dtBarras.Columns.Add(BusinessCadenas.Fechas.ObtenerFechaInicioSemana(DateTime.ParseExact(fecha, "dd/MM/yyyy", null).Year, CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(DateTime.ParseExact(fecha, "dd/MM/yyyy", null), CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)).ToString("dd/MM/yyyy"));
                            }
                            conteo++;
                        }
                        break;

                    case 3:
                        foreach (string fecha in lstFechas)
                        {
                            var firstDayOfMonth = new DateTime(DateTime.ParseExact(fecha, "dd/MM/yyyy", null).Year, DateTime.ParseExact(fecha, "dd/MM/yyyy", null).Month, 1);

                            if (!dtBarras.Columns.Contains(firstDayOfMonth.ToString("dd/MM/yyyy")))
                            {
                                dtBarras.Columns.Add(firstDayOfMonth.ToString("dd/MM/yyyy"));
                            }
                        }
                        break;

                    case 4:
                        foreach (string fecha in lstFechas)
                        {
                            DateTime firstDay = new DateTime(DateTime.ParseExact(fecha, "dd/MM/yyyy", null).Year, 1, 1);
                            if (!dtBarras.Columns.Contains(firstDay.ToString("dd/MM/yyyy")))
                            {
                                dtBarras.Columns.Add(firstDay.ToString("dd/MM/yyyy"));
                            }
                        }
                        break;
                    }
                    foreach (DataColumn column in dtBarras.Columns)
                    {
                        if (column.ColumnName != "Descripcion" && column.ColumnName != "Color")
                        {
                            switch (tipoFecha)
                            {
                            case 1:
                                dtBarras.Rows[0][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.FechaModificacion.ToString("dd/MM/yyyy") == column.ColumnName && w.MeGusta);
                                dtBarras.Rows[1][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.FechaModificacion.ToString("dd/MM/yyyy") == column.ColumnName && w.NoMeGusta);
                                break;

                            case 2:
                                dtBarras.Rows[0][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.MeGusta &&
                                                                                 DateTime.ParseExact(w.FechaModificacion.ToString("dd/MM/yyyy"), "dd/MM/yyyy", null) >= DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null) &&
                                                                                 DateTime.ParseExact(w.FechaModificacion.ToString("dd/MM/yyyy"), "dd/MM/yyyy", null) < DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).AddDays(7));
                                dtBarras.Rows[1][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.NoMeGusta &&
                                                                                 DateTime.ParseExact(w.FechaModificacion.ToString("dd/MM/yyyy"), "dd/MM/yyyy", null) >= DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null) &&
                                                                                 DateTime.ParseExact(w.FechaModificacion.ToString("dd/MM/yyyy"), "dd/MM/yyyy", null) < DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).AddDays(7));
                                break;

                            case 3:
                                dtBarras.Rows[0][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.FechaModificacion.ToString("MM") == DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).ToString("MM") && w.MeGusta);
                                dtBarras.Rows[1][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.FechaModificacion.ToString("MM") == DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).ToString("MM") && w.NoMeGusta);
                                break;

                            case 4:
                                dtBarras.Rows[0][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.FechaModificacion.ToString("yyyy") == DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).ToString("yyyy") && w.MeGusta);
                                dtBarras.Rows[1][column.ColumnName] = rate.Count(w => w.IdInformacionConsulta == idInformacionConsulta && w.FechaModificacion.ToString("yyyy") == DateTime.ParseExact(column.ColumnName, "dd/MM/yyyy", null).ToString("yyyy") && w.NoMeGusta);
                                break;
                            }
                        }
                    }
                }
                switch (tipoFecha)
                {
                case 1:
                    for (int i = 2; i < dtBarras.Columns.Count; i++)
                    {
                        dtBarras.Columns[i].ColumnName = DateTime.ParseExact(dtBarras.Columns[i].ColumnName, "dd/MM/yyyy", null).ToString("dd MMM yy").Replace(".", string.Empty);
                    }
                    break;

                case 2:
                    for (int i = 2; i < dtBarras.Columns.Count; i++)
                    {
                        dtBarras.Columns[i].ColumnName = DateTime.ParseExact(dtBarras.Columns[i].ColumnName, "dd/MM/yyyy", null).ToString("dd MMM yy").Replace(".", string.Empty);
                    }
                    break;

                case 3:
                    for (int i = 2; i < dtBarras.Columns.Count; i++)
                    {
                        dtBarras.Columns[i].ColumnName = DateTime.ParseExact(dtBarras.Columns[i].ColumnName, "dd/MM/yyyy", null).ToString("dd MMM yy").Replace(".", string.Empty);
                    }
                    break;

                case 4:
                    for (int i = 2; i < dtBarras.Columns.Count; i++)
                    {
                        dtBarras.Columns[i].ColumnName = DateTime.ParseExact(dtBarras.Columns[i].ColumnName, "dd/MM/yyyy", null).ToString("dd MMM yy").Replace(".", string.Empty);
                    }
                    break;
                }

                result.GraficoBarras = dtBarras;

                DataTable dtPie = new DataTable("dtPie");
                dtPie.Columns.Add("Descripcion", typeof(string));
                dtPie.Columns.Add("Color", typeof(string));
                dtPie.Columns.Add("Total", typeof(int));

                dtPie.Rows.Add("Like", ConfigurationManager.AppSettings["ColorLike"]);
                dtPie.Rows.Add("Dont Like", ConfigurationManager.AppSettings["ColorDontLike"]);
                int totalLike     = 0;
                int totaldontLike = 0;
                foreach (DataColumn column in dtBarras.Columns)
                {
                    if (column.ColumnName != "Descripcion" && column.ColumnName != "Color")
                    {
                        totalLike     += int.Parse(dtBarras.Rows[0][column.ColumnName].ToString());
                        totaldontLike += int.Parse(dtBarras.Rows[1][column.ColumnName].ToString());
                    }
                }

                dtPie.Rows[0][2]  = totalLike;
                dtPie.Rows[1][2]  = totaldontLike;
                result.GraficoPie = dtPie;
                switch (tipoFecha)
                {
                case 1:
                    titulo += string.Format(" {0} {1} - {2}", rango, fechaInicio.ToString("dd/MM/yyyy", cultureInfo), fechaFin.ToString("dd/MM/yyyy", cultureInfo));
                    break;

                case 2:
                    titulo += string.Format(" {0} {1} - {2}", rango, fechaInicio.ToString("dd/MM/yyyy", cultureInfo), fechaFin.ToString("dd/MM/yyyy", cultureInfo));
                    break;

                case 3:
                    titulo += string.Format(" {0} {1} - {2}", rango, fechaInicio.ToString("MMM", cultureInfo), restaMes ? fechaFin.AddDays(-1).ToString("MMM", cultureInfo) : fechaFin.ToString("MMM", cultureInfo));
                    break;

                case 4:
                    titulo += string.Format(" {0} {1} - {2}", rango, fechaInicio.ToString("yyyy", cultureInfo), restaMes ? fechaFin.AddDays(-1).ToString("yyyy", cultureInfo) : fechaFin.ToString("yyyy", cultureInfo));
                    break;
                }


                result.Titulo = titulo;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                db.Dispose();
            }
            return(result);
        }