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); } }
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); }