PageRenderTime 56ms CodeModel.GetById 20ms app.highlight 27ms RepoModel.GetById 3ms app.codeStats 0ms

/Docs/07-Implementacion/Source/trunk/EDUAR_Regular/EDUAR/EDUAR_UI/Private/Reports/ReportCalificacionesAlumnoPeriodo.aspx.cs

http://blpm.googlecode.com/
C# | 851 lines | 646 code | 77 blank | 128 comment | 68 complexity | 25e013076c2ae9db97bbf576b23c6dc8 MD5 | raw file
  1using System;
  2using System.Collections.Generic;
  3using System.Data;
  4using System.Globalization;
  5using System.Linq;
  6using System.Text;
  7using System.Web.UI;
  8using System.Web.UI.WebControls;
  9using EDUAR_BusinessLogic.Common;
 10using EDUAR_BusinessLogic.Reports;
 11using EDUAR_Entities;
 12using EDUAR_Entities.Reports;
 13using EDUAR_UI.Shared;
 14using EDUAR_UI.Utilidades;
 15using EDUAR_Utility.Constantes;
 16using EDUAR_Utility.Enumeraciones;
 17using iTextSharp.text;
 18
 19namespace EDUAR_UI
 20{
 21	public partial class ReportCalificacionesAlumnoPeriodo : EDUARBasePage
 22	{
 23		#region --[Propiedades]--
 24		/// <summary>
 25		/// Gets or sets the filtro calificaciones.
 26		/// </summary>
 27		/// <value>
 28		/// The filtro calificaciones.
 29		/// </value>
 30		public FilCalificacionesAlumnoPeriodo filtroReporte
 31		{
 32			get
 33			{
 34				if (ViewState["filtroCalificaciones"] == null)
 35					filtroReporte = new FilCalificacionesAlumnoPeriodo();
 36				return (FilCalificacionesAlumnoPeriodo)ViewState["filtroCalificaciones"];
 37			}
 38			set
 39			{
 40				ViewState["filtroCalificaciones"] = value;
 41			}
 42		}
 43
 44		/// <summary>
 45		/// Gets or sets the lista calificaciones.
 46		/// </summary>
 47		/// <value>
 48		/// The lista calificaciones.
 49		/// </value>
 50		public List<RptCalificacionesAlumnoPeriodo> listaReporte
 51		{
 52			get
 53			{
 54				if (Session["listaCalificaciones"] == null)
 55					listaReporte = new List<RptCalificacionesAlumnoPeriodo>();
 56				return (List<RptCalificacionesAlumnoPeriodo>)Session["listaCalificaciones"];
 57			}
 58			set
 59			{
 60				Session["listaCalificaciones"] = value;
 61			}
 62		}
 63
 64		/// <summary>
 65		/// Gets or sets the filtros aplica2.
 66		/// </summary>
 67		/// <value>
 68		/// The filtros aplica2.
 69		/// </value>
 70		public string filtrosAplicados
 71		{
 72			get
 73			{
 74				if (Session["filtrosAplicados"] == null)
 75					filtrosAplicados = string.Empty;
 76				return Session["filtrosAplicados"].ToString();
 77			}
 78			set
 79			{
 80				Session["filtrosAplicados"] = value;
 81			}
 82		}
 83
 84		/// <summary>
 85		/// Gets or sets the lista asignaturas.
 86		/// </summary>
 87		/// <value>
 88		/// The lista sanciones.
 89		/// </value>
 90		public List<Asignatura> listaAsignatura
 91		{
 92			get
 93			{
 94				if (ViewState["listaAsignatura"] == null)
 95					listaAsignatura = new List<Asignatura>();
 96				return (List<Asignatura>)ViewState["listaAsignatura"];
 97			}
 98			set
 99			{
100				ViewState["listaAsignatura"] = value;
101			}
102		}
103
104		/// <summary>
105		/// Gets or sets the lista ciclo lectivo.
106		/// </summary>
107		/// <value>
108		/// The lista ciclo lectivo.
109		/// </value>
110		public List<CicloLectivo> listaCicloLectivo
111		{
112			get
113			{
114				if (ViewState["listaCicloLectivo"] == null)
115				{
116					listaCicloLectivo = new List<CicloLectivo>();
117					BLCicloLectivo objBLCicloLectivo = new BLCicloLectivo();
118					listaCicloLectivo = objBLCicloLectivo.GetCicloLectivos(null);
119				}
120				return (List<CicloLectivo>)ViewState["listaCicloLectivo"];
121			}
122			set
123			{
124				ViewState["listaCicloLectivo"] = value;
125			}
126		}
127		#endregion
128
129		#region --[Eventos]--
130		/// <summary>
131		/// Método que se ejecuta al dibujar los controles de la página.
132		/// Se utiliza para gestionar las excepciones del método Page_Load().
133		/// </summary>
134		/// <param name="e"></param>
135		protected override void OnPreRender(EventArgs e)
136		{
137			base.OnPreRender(e);
138			if (AvisoMostrar)
139			{
140				AvisoMostrar = false;
141
142				try
143				{
144					Master.ManageExceptions(AvisoExcepcion);
145				}
146				catch (Exception ex) { Master.ManageExceptions(ex); }
147			}
148		}
149
150		/// <summary>
151		/// Handles the Load event of the Page control.
152		/// </summary>
153		/// <param name="sender">The source of the event.</param>
154		/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
155		protected void Page_Load(object sender, EventArgs e)
156		{
157			try
158			{
159				rptCalificaciones.ExportarPDFClick += (ExportarPDF);
160				rptCalificaciones.VolverClick += (VolverReporte);
161				rptCalificaciones.PaginarGrilla += (PaginarGrilla);
162				Master.BotonAvisoAceptar += (VentanaAceptar);
163				rptCalificaciones.GraficarClick += (btnGraficar);
164
165				if (!Page.IsPostBack)
166				{
167					TablaGrafico = null;
168					CargarPresentacion();
169					divFiltros.Visible = true;
170					divReporte.Visible = false;
171				}
172				if (listaReporte != null)
173					rptCalificaciones.CargarReporte<RptCalificacionesAlumnoPeriodo>(listaReporte);
174			}
175			catch (Exception ex)
176			{
177				AvisoMostrar = true;
178				AvisoExcepcion = ex;
179			}
180		}
181
182		/// <summary>
183		/// Ventanas the aceptar.
184		/// </summary>
185		/// <param name="sender">The sender.</param>
186		/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
187		protected void VentanaAceptar(object sender, EventArgs e)
188		{
189			AccionPagina = enumAcciones.Limpiar;
190			//divFiltros.Visible = true;
191			//divReporte.Visible = false;
192		}
193
194		/// <summary>
195		/// Handles the Click event of the btnBuscar control.
196		/// </summary>
197		/// <param name="sender">The source of the event.</param>
198		/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
199		protected void btnBuscar_Click(object sender, EventArgs e)
200		{
201			try
202			{
203				fechas.ValidarRangoDesdeHasta(false);
204				string mensaje = ValidarPagina();
205				if (mensaje == string.Empty)
206				{
207					AccionPagina = enumAcciones.Buscar;
208					if (BuscarCalificaciones())
209					{
210						AccionPagina = enumAcciones.Limpiar;
211						divFiltros.Visible = false;
212						divReporte.Visible = true;
213					}
214					else
215					{ Master.MostrarMensaje("Faltan Datos", UIConstantesGenerales.MensajeDatosRequeridos, EDUAR_Utility.Enumeraciones.enumTipoVentanaInformacion.Advertencia); }
216				}
217				else
218				{ Master.MostrarMensaje("Faltan Datos", UIConstantesGenerales.MensajeDatosFaltantes + mensaje, EDUAR_Utility.Enumeraciones.enumTipoVentanaInformacion.Advertencia); }
219			}
220			catch (Exception ex)
221			{ Master.ManageExceptions(ex); }
222		}
223
224		/// <summary>
225		/// Exportars the PDF.
226		/// </summary>
227		/// <param name="sender">The sender.</param>
228		/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
229		protected void ExportarPDF(object sender, EventArgs e)
230		{
231			try
232			{
233				AccionPagina = enumAcciones.Limpiar;
234				string nombreGrafico = string.Empty;
235				if (rptCalificaciones.verGrafico)
236					nombreGrafico = nombrePNG;
237				ExportPDF.ExportarPDF(Page.Title, rptCalificaciones.dtReporte, ObjSessionDataUI.ObjDTUsuario.Nombre, filtrosAplicados, nombreGrafico);
238			}
239			catch (Exception ex)
240			{ Master.ManageExceptions(ex); }
241		}
242
243		/// <summary>
244		/// Volvers the reporte.
245		/// </summary>
246		/// <param name="sender">The sender.</param>
247		/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
248		protected void VolverReporte(object sender, EventArgs e)
249		{
250			try
251			{
252				AccionPagina = enumAcciones.Limpiar;
253				rptCalificaciones.verGrafico = false;
254				divFiltros.Visible = true;
255				divReporte.Visible = false;
256			}
257			catch (Exception ex)
258			{ Master.ManageExceptions(ex); }
259		}
260
261		/// <summary>
262		/// BTNs the graficar.
263		/// </summary>
264		/// <param name="sender">The sender.</param>
265		/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
266		private void btnGraficar(object sender, EventArgs e)
267		{
268			try
269			{
270				//GenerarDatosGrafico();
271				AccionPagina = enumAcciones.Limpiar;
272				float sumaNotas = 0;
273				rptCalificaciones.graficoReporte.LimpiarSeries();
274				string alumno = string.Empty;
275				if (Convert.ToInt32(ddlAlumno.SelectedValue) > 0)
276					alumno = "\n" + ddlAlumno.SelectedItem.Text + "\n";
277
278				if (ddlAsignatura.SelectedIndex > 0)
279				{ // so reporte   distribucion de calificaciones por asignatura 
280					foreach (System.Web.UI.WebControls.ListItem asignatura in ddlAsignatura.Items)
281					{
282						if (asignatura.Selected)
283						{
284							var serie = new List<RptCalificacionesAlumnoPeriodo>();
285							for (int i = 1; i < 11; i++)
286							{
287								var listaParcial = listaReporte.FindAll(p => p.calificacion == i.ToString() && p.asignatura == asignatura.Text);
288								if (listaParcial.Count > 0)
289								{
290									serie.Add(new RptCalificacionesAlumnoPeriodo
291									{
292										calificacion = listaParcial.Count.ToString(),
293										asignatura = i.ToString()
294									});
295								}
296
297							}
298							if (serie != null && serie.Count > 0)
299							{
300								DataTable dt = UIUtilidades.BuildDataTable<RptCalificacionesAlumnoPeriodo>(serie);
301								// En alumno envio la nota y en calificación la cantidad de esa nota que se produjo
302								rptCalificaciones.graficoReporte.AgregarSerie(asignatura.Text, dt, "asignatura", "calificacion");
303							}
304						}
305					}
306
307					rptCalificaciones.graficoReporte.Titulo = "Distribución de Calificaciones \n" + alumno;
308				}
309				else
310				{ // promedio de calificaciones por curso en un determinado periodo
311					var serie = new List<RptCalificacionesAlumnoPeriodo>();
312					foreach (var item in listaAsignatura)
313					{
314						sumaNotas = 0;
315						var listaParcial = listaReporte.FindAll(p => p.asignatura == item.nombre);
316						if (listaParcial.Count > 0)
317						{
318							foreach (var nota in listaParcial)
319							{
320								sumaNotas += Convert.ToInt16(nota.calificacion);
321							}
322
323							serie.Add(new RptCalificacionesAlumnoPeriodo
324							{
325								calificacion = Math.Round(sumaNotas / listaParcial.Count, 2).ToString(CultureInfo.InvariantCulture),
326								asignatura = item.nombre
327							});
328						}
329					}
330
331					DataTable dt = UIUtilidades.BuildDataTable<RptCalificacionesAlumnoPeriodo>(serie);
332					rptCalificaciones.graficoReporte.AgregarSerie("Promedio", dt, "asignatura", "calificacion");
333
334					BLValoresEscalaCalificacion objBLNivelAprobacion = new BLValoresEscalaCalificacion();
335					ValoresEscalaCalificacion escala = new ValoresEscalaCalificacion();
336					escala = objBLNivelAprobacion.GetNivelProbacion();
337
338					List<ValoresEscalaCalificacion> listaEscala = new List<ValoresEscalaCalificacion>();
339					foreach (RptCalificacionesAlumnoPeriodo item in serie)
340					{
341						listaEscala.Add(new ValoresEscalaCalificacion
342						{
343							valor = escala.valor,
344							nombre = item.asignatura
345						});
346					}
347					DataTable dtEscala = UIUtilidades.BuildDataTable<ValoresEscalaCalificacion>(listaEscala);
348					rptCalificaciones.graficoReporte.AgregarSerie("Nivel de Aprobación (" + escala.nombre + ")", dtEscala, "nombre", "valor", true);
349
350					rptCalificaciones.graficoReporte.Titulo = "Promedio Por Asignatura \n" + ddlCurso.SelectedItem.Text + " - " + ddlCicloLectivo.SelectedItem.Text + alumno;
351				}
352
353				GenerarDatosGrafico();
354				rptCalificaciones.graficoReporte.GraficarBarra();
355				rptCalificaciones.CargarReporte<RptCalificacionesAlumnoPeriodo>(listaReporte);
356			}
357			catch (Exception ex)
358			{ Master.ManageExceptions(ex); }
359		}
360
361		/// <summary>
362		/// Paginars the grilla.
363		/// </summary>
364		/// <param name="sender">The sender.</param>
365		/// <param name="e">The <see cref="System.Web.UI.WebControls.GridViewPageEventArgs"/> instance containing the event data.</param>
366		protected void PaginarGrilla(object sender, GridViewPageEventArgs e)
367		{
368			try
369			{
370				int pagina = e.NewPageIndex;
371
372				if (rptCalificaciones.GrillaReporte.PageCount > pagina)
373				{
374					rptCalificaciones.GrillaReporte.PageIndex = pagina;
375
376					rptCalificaciones.CargarReporte<RptCalificacionesAlumnoPeriodo>(listaReporte);
377				}
378			}
379			catch (Exception ex)
380			{
381				Master.ManageExceptions(ex);
382			}
383		}
384
385		/// <summary>
386		/// Handles the SelectedIndexChanged event of the ddlCicloLectivo control.
387		/// </summary>
388		/// <param name="sender">The source of the event.</param>
389		/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
390		protected void ddlCicloLectivo_SelectedIndexChanged(object sender, EventArgs e)
391		{
392			try
393			{
394				AccionPagina = enumAcciones.Limpiar;
395				int idCicloLectivo = Convert.ToInt32(ddlCicloLectivo.SelectedValue);
396				if (idCicloLectivo > 0)
397				{
398					fechas.startDate = listaCicloLectivo.Find(p => p.idCicloLectivo == idCicloLectivo).fechaInicio;
399					fechas.endDate = listaCicloLectivo.Find(p => p.idCicloLectivo == idCicloLectivo).fechaFin;
400					CargarComboCursos(idCicloLectivo, ddlCurso);
401				}
402				else
403				{
404					if (ddlCurso.Items.Count > 0)
405					{
406						ddlCurso.Items.Clear();
407						ddlCurso.Enabled = false;
408					}
409				}
410				ddlAsignatura.Items.Clear();
411				ddlAlumno.Items.Clear();
412			}
413			catch (Exception ex)
414			{
415				Master.ManageExceptions(ex);
416			}
417		}
418
419		/// <summary>
420		/// Handles the SelectedIndexChanged event of the ddlCurso control.
421		/// </summary>
422		/// <param name="sender">The source of the event.</param>
423		/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
424		protected void ddlCurso_SelectedIndexChanged(object sender, EventArgs e)
425		{
426			try
427			{
428				AccionPagina = enumAcciones.Limpiar;
429				CargarAlumnos(Convert.ToInt32(ddlCurso.SelectedValue));
430				ddlAlumno.Enabled = true;
431				ddlAsignatura.Items.Clear();
432				CargarComboAsignatura();
433			}
434			catch (Exception ex)
435			{
436				Master.ManageExceptions(ex);
437			}
438		}
439		#endregion
440
441		#region --[Métodos Privados]--
442		/// <summary>
443		/// Cargars the presentacion.
444		/// </summary>
445		private void CargarPresentacion()
446		{
447			CargarCombos();
448			btnBuscar.Visible = true;
449		}
450
451		/// <summary>
452		/// Buscars the calificaciones.
453		/// </summary>
454		private bool BuscarCalificaciones()
455		{
456			if (AccionPagina == enumAcciones.Buscar)
457			{
458				filtroReporte = new FilCalificacionesAlumnoPeriodo();
459				StringBuilder filtros = new StringBuilder();
460				if (Convert.ToInt32(ddlCicloLectivo.SelectedValue) > 0 && Convert.ToInt32(ddlCurso.SelectedValue) > 0 /*&& Convert.ToInt32(ddlAsignatura.SelectedValue) > 0*/)
461				{
462					filtros.AppendLine("- " + ddlCicloLectivo.SelectedItem.Text + " - Curso: " + ddlCurso.SelectedItem.Text);
463
464					List<Asignatura> listaAsignatura = new List<Asignatura>();
465					foreach (System.Web.UI.WebControls.ListItem item in ddlAsignatura.Items)
466					{
467						if (item.Selected)
468						{
469							if (!filtros.ToString().Contains("- Asignatura"))
470								filtros.AppendLine("- Asignatura");
471							filtros.AppendLine(" * " + item.Text);
472							listaAsignatura.Add(new Asignatura() { idAsignatura = Convert.ToInt16(item.Value) });
473						}
474					}
475					filtroReporte.listaAsignaturas = listaAsignatura;
476
477					if (fechas.ValorFechaDesde != null)
478					{
479						filtros.AppendLine("- Fecha Desde: " + ((DateTime)fechas.ValorFechaDesde).ToShortDateString());
480						filtroReporte.fechaDesde = (DateTime)fechas.ValorFechaDesde;
481					}
482					if (fechas.ValorFechaHasta != null)
483					{
484						filtros.AppendLine("- Fecha Hasta: " + ((DateTime)fechas.ValorFechaHasta).ToShortDateString());
485						filtroReporte.fechaHasta = (DateTime)fechas.ValorFechaHasta;
486					}
487					filtroReporte.idCurso = Convert.ToInt32(ddlCurso.SelectedValue);
488					filtroReporte.idCicloLectivo = Convert.ToInt32(ddlCicloLectivo.SelectedValue);
489
490					if (Convert.ToInt32(ddlAlumno.SelectedValue) > 0)
491					{
492						filtroReporte.idAlumno = Convert.ToInt32(ddlAlumno.SelectedValue);
493						filtros.AppendLine("- Alumno: " + ddlAlumno.SelectedItem.Text);
494					}
495
496					if (Context.User.IsInRole(enumRoles.Docente.ToString()))
497						filtroReporte.username = ObjSessionDataUI.ObjDTUsuario.Nombre;
498
499					BLRptCalificacionesAlumnoPeriodo objBLReporte = new BLRptCalificacionesAlumnoPeriodo();
500					listaReporte = objBLReporte.GetRptCalificacionesAlumnoPeriodo(filtroReporte);
501					filtrosAplicados = filtros.ToString();
502
503					rptCalificaciones.CargarReporte<RptCalificacionesAlumnoPeriodo>(listaReporte);
504					//udpReporte.Update();
505					return true;
506				}
507				return false;
508			}
509			else
510				return false;
511		}
512
513		/// <summary>
514		/// Validars the pagina.
515		/// </summary>
516		/// <returns></returns>
517		private string ValidarPagina()
518		{
519			string mensaje = string.Empty;
520
521			if (string.IsNullOrEmpty(ddlCicloLectivo.SelectedValue) || Convert.ToInt32(ddlCicloLectivo.SelectedValue) <= 0)
522				mensaje = "- Ciclo Lectivo<br />";
523			if (string.IsNullOrEmpty(ddlCurso.SelectedValue) || Convert.ToInt32(ddlCurso.SelectedValue) <= 0)
524				mensaje += "- Curso<br />";
525			return mensaje;
526		}
527
528		/// <summary>
529		/// Cargars the combos.
530		/// </summary>
531		private void CargarCombos()
532		{
533			List<Curso> listaCurso = new List<Curso>();
534			List<Alumno> listaAlumno = new List<Alumno>();
535			UIUtilidades.BindCombo<CicloLectivo>(ddlCicloLectivo, listaCicloLectivo, "idCicloLectivo", "nombre", true);
536			UIUtilidades.BindCombo<Curso>(ddlCurso, listaCurso, "idCurso", "nombre", true);
537
538			if (ddlCicloLectivo.Items.Count > 0)
539			{
540				ddlCicloLectivo.SelectedIndex = ddlCicloLectivo.Items.Count - 1;
541				fechas.startDate = listaCicloLectivo.Find(p => p.idCicloLectivo == Convert.ToInt16(ddlCicloLectivo.SelectedValue)).fechaInicio;
542				fechas.endDate = listaCicloLectivo.Find(p => p.idCicloLectivo == Convert.ToInt16(ddlCicloLectivo.SelectedValue)).fechaFin;
543				CargarComboCursos(Convert.ToInt16(ddlCicloLectivo.SelectedValue), ddlCurso);
544				ddlCurso.Enabled = true;
545				ddlCurso.SelectedIndex = -1;
546			}
547
548			ddlAsignatura.Disabled = true;
549			ddlAlumno.Enabled = false;
550		}
551
552		/// <summary>
553		/// Cargars the combo cursos.
554		/// </summary>
555		/// <param name="idCicloLectivo">The id ciclo lectivo.</param>
556		/// <param name="ddlCurso">The DDL curso.</param>
557		private void CargarComboCursos(int idCicloLectivo, DropDownList ddlCurso)
558		{
559			if (idCicloLectivo > 0)
560			{
561				List<Curso> listaCurso = new List<Curso>();
562				BLCicloLectivo objBLCicloLectivo = new BLCicloLectivo();
563				Asignatura objAsignatura = new Asignatura();
564				objAsignatura.curso.cicloLectivo.idCicloLectivo = idCicloLectivo;
565
566				if (User.IsInRole(enumRoles.Docente.ToString()))
567					objAsignatura.docente.username = ObjSessionDataUI.ObjDTUsuario.Nombre;
568
569				listaCurso = objBLCicloLectivo.GetCursosByAsignatura(objAsignatura);
570				UIUtilidades.BindCombo<Curso>(ddlCurso, listaCurso, "idCurso", "nombre", true);
571				ddlCurso.Enabled = true;
572			}
573			else
574			{
575				ddlCurso.Enabled = false;
576			}
577		}
578
579		/// <summary>
580		/// Cargars the combo asignatura.
581		/// </summary>
582		private void CargarComboAsignatura()
583		{
584			BLAsignatura objBLAsignatura = new BLAsignatura();
585			Asignatura materia = new Asignatura();
586			materia.cursoCicloLectivo.idCursoCicloLectivo = Convert.ToInt32(ddlCurso.SelectedValue);
587			if (User.IsInRole(enumRoles.Docente.ToString()))
588				materia.docente.username = ObjSessionDataUI.ObjDTUsuario.Nombre;
589			listaAsignatura = objBLAsignatura.GetAsignaturasCurso(materia);
590            ddlAsignatura.Items.Clear();
591
592			listaAsignatura.Sort((p, q) => string.Compare(p.nombre, q.nombre));
593
594			foreach (Asignatura asignatura in listaAsignatura)
595			{
596				ddlAsignatura.Items.Add(new System.Web.UI.WebControls.ListItem(asignatura.nombre, asignatura.idAsignatura.ToString()));
597			}
598
599			if (ddlAsignatura.Items.Count > 0)
600				ddlAsignatura.Disabled = false;
601		}
602
603		/// <summary>
604		/// Cargars the alumnos.
605		/// </summary>
606		/// <param name="idCurso">The id curso.</param>
607		private void CargarAlumnos(int idCurso)
608		{
609			BLAlumno objBLAlumno = new BLAlumno();
610			UIUtilidades.BindCombo<Alumno>(ddlAlumno, objBLAlumno.GetAlumnos(new AlumnoCurso(idCurso)), "idAlumno", "apellido", "nombre", true);
611			ddlAlumno.Enabled = true;
612		}
613
614		/// <summary>
615		/// Generars the datos grafico.
616		/// </summary>
617		private void GenerarDatosGrafico()
618		{
619			TablaGrafico = new List<TablaGrafico>();
620			TablaGrafico tabla3 = new TablaGrafico();
621			tabla3.listaCuerpo = new List<List<string>>();
622			List<string> encabezado3 = new List<string>();
623			List<string> fila3 = new List<string>();
624
625			var fechaMin =
626			   from p in listaReporte
627			   group p by p.alumno into g
628			   select new { Alumno = g.Key, Fecha = g.Min(p => p.fecha) };
629
630			var fechaMax =
631			   from p in listaReporte
632			   group p by p.alumno into g
633			   select new { Alumno = g.Key, Fecha = g.Max(p => p.fecha) };
634			//TablaGrafico.Add("- Periodo de notas: " + fechaMin.First().Fecha.ToShortDateString() + " - " + fechaMax.First().Fecha.ToShortDateString());
635
636			tabla3.titulo = "Periodo Analizado " + fechaMin.First().Fecha.ToShortDateString() + " - " + fechaMax.First().Fecha.ToShortDateString();
637
638			var cantAlumnos =
639				from p in listaReporte
640				group p by p.alumno into g
641				select new { Alumno = g.Key, Cantidad = g.Count() };
642
643			//TablaGrafico.Add("- Cantidad de Alumnos analiza2: " + cantAlumnos.Count().ToString());
644			encabezado3.Add("Cantidad de Alumnos");
645			fila3.Add(cantAlumnos.Count().ToString());
646
647			//TablaGrafico.Add("- Cantidad de Calificaciones: " + listaReporte.Count.ToString());
648			encabezado3.Add("Cantidad de Calificaciones");
649			fila3.Add(listaReporte.Count().ToString());
650
651			tabla3.listaEncabezados = encabezado3;
652			tabla3.listaCuerpo.Add(fila3);
653			TablaGrafico.Add(tabla3);
654
655			TablaGrafico tabla2 = new TablaGrafico();
656			tabla2.listaCuerpo = new List<List<string>>();
657			List<string> encabezado2 = new List<string>();
658			List<List<string>> filasTabla2 = new List<List<string>>();
659			List<string> fila2 = new List<string>();
660
661			//TablaGrafico.Add("- Desviacion Estandar por materia: ");
662			tabla2.titulo = "Desviación Estandar por Asignatura";
663			encabezado2.Add("Asignatura");
664			encabezado2.Add("Promedio");
665			encabezado2.Add("Desviación Estándar");
666
667			double sumaNotas, promedio, desvStd, dif, cociente, sumaDifCuad = 0;
668
669			var serie = new List<RptCalificacionesAlumnoPeriodo>();
670			foreach (var item in listaAsignatura)
671			{
672				promedio = 0;
673				cociente = 0;
674				desvStd = 0;
675				sumaNotas = 0;
676				dif = 0;
677				sumaDifCuad = 0;
678
679				var listaParcial = listaReporte.FindAll(p => p.asignatura == item.nombre);
680				if (listaParcial.Count > 0)
681				{
682					foreach (var nota in listaParcial)
683					{
684						sumaNotas += Convert.ToInt16(nota.calificacion);
685					}
686					promedio = sumaNotas / listaParcial.Count;
687					foreach (var nota in listaParcial)
688					{
689						dif = (Convert.ToInt32(nota.calificacion) - promedio);
690						sumaDifCuad += Math.Pow(dif, 2);
691					}
692					// Revisar la formula de desviacion standard
693					//cociente = (sumaDifCuad / (listaParcial.Count-1));
694					cociente = (sumaDifCuad / (listaParcial.Count));
695					desvStd = Math.Sqrt(cociente);
696					//TablaGrafico.Add(item.nombre + " Promedio: " + promedio.ToString("#.##") + " , Desviacion Standard: " + desvStd.ToString("#.##"));
697					fila2 = new List<string>();
698					fila2.Add(item.nombre);
699					fila2.Add(promedio.ToString("#.##"));
700					fila2.Add(desvStd.ToString("#.##"));
701					filasTabla2.Add(fila2);
702				}
703			}
704			tabla2.listaEncabezados = encabezado2;
705			tabla2.listaCuerpo = filasTabla2;
706			TablaGrafico.Add(tabla2);
707
708			TablaGrafico tabla4 = new TablaGrafico();
709			tabla4.listaCuerpo = new List<List<string>>();
710			List<string> encabezado4 = new List<string>();
711			List<List<string>> filasTabla4 = new List<List<string>>();
712			List<string> fila4 = new List<string>();
713
714			if (Convert.ToInt32(ddlAsignatura.SelectedIndex) < 0)
715			{
716				var topPromedio =
717				   (from p in listaReporte
718					group p by p.asignatura into g
719					orderby g.Average(p => Convert.ToInt32(p.calificacion)) descending
720					select new { Asignatura = g.Key, Promedio = g.Average(p => Convert.ToInt32(p.calificacion)), Cantidad = g.Count() }).Distinct().Take(3);
721
722                if (topPromedio.Count() > 1)
723                {
724                    //TablaGrafico.Add("- Top 3 Materias con mejor desempeńo:");
725                    tabla4.titulo = "Top Asignaturas con mejor desempeńo";
726                    encabezado4.Add("Asignatura");
727                    encabezado4.Add("Promedio");
728                    encabezado4.Add("Cantidad de Evaluaciones");
729
730                    tabla4.listaEncabezados = encabezado4;
731
732                    foreach (var item in topPromedio)
733                    {
734                        //TablaGrafico.Add(item.Asignatura + " - Promedio: " + item.Promedio.ToString("#.##") + " - Cantidad de Evaluaciones: " + item.Cantidad.ToString());
735                        fila4 = new List<string>();
736                        fila4.Add(item.Asignatura);
737                        fila4.Add(item.Promedio.ToString("#.##"));
738                        fila4.Add(item.Cantidad.ToString());
739                        filasTabla4.Add(fila4);
740                    }
741                    tabla4.listaEncabezados = encabezado4;
742                    tabla4.listaCuerpo = filasTabla4;
743                    TablaGrafico.Add(tabla4);
744                }
745
746				var worstPromedio =
747				   (from p in listaReporte
748					group p by p.asignatura into g
749					orderby g.Average(p => Convert.ToInt32(p.calificacion)) ascending
750					select new { Asignatura = g.Key, Promedio = g.Average(p => Convert.ToInt32(p.calificacion)), Cantidad = g.Count() }).Distinct().Take(3);
751
752                if (worstPromedio.Count() > 1)
753                {
754                    TablaGrafico tabla5 = new TablaGrafico();
755                    tabla5.listaCuerpo = new List<List<string>>();
756                    List<string> encabezado5 = new List<string>();
757                    List<List<string>> filasTabla5 = new List<List<string>>();
758                    List<string> fila5 = new List<string>();
759
760                    tabla5.titulo = "Top Asignaturas con bajo desempeńo";
761                    encabezado5.Add("Asignatura");
762                    encabezado5.Add("Promedio");
763                    encabezado5.Add("Cantidad de Evaluaciones");
764                    //TablaGrafico.Add("- Top 3 Materias con bajo desempeńo:");
765                    foreach (var item in worstPromedio)
766                    {
767                        //TablaGrafico.Add(item.Asignatura + " - Promedio: " + item.Promedio.ToString("#.##") + " - Cantidad de Evaluaciones: " + item.Cantidad.ToString());
768                        fila5 = new List<string>();
769                        fila5.Add(item.Asignatura);
770                        fila5.Add(item.Promedio.ToString("#.##"));
771                        fila5.Add(item.Cantidad.ToString());
772                        filasTabla5.Add(fila5);
773                    }
774                    tabla5.listaEncabezados = encabezado5;
775                    tabla5.listaCuerpo = filasTabla5;
776                    TablaGrafico.Add(tabla5);
777                }
778			}
779
780			if (Convert.ToInt32(ddlAlumno.SelectedValue) < 0)
781			{
782				var worstAlumnos =
783				   (from p in listaReporte
784					group p by p.alumno into g
785					orderby g.Average(p => Convert.ToInt32(p.calificacion)) ascending
786					select new { Alumno = g.Key, Promedio = g.Average(p => Convert.ToInt32(p.calificacion)) }).Distinct().Take(3);
787
788                if (worstAlumnos.Count() > 1)
789                {
790                    TablaGrafico tabla6 = new TablaGrafico();
791                    tabla6.listaCuerpo = new List<List<string>>();
792                    List<string> encabezado6 = new List<string>();
793                    List<List<string>> filasTabla6 = new List<List<string>>();
794                    List<string> fila6 = new List<string>();
795
796                    tabla6.titulo = "Top Alumnos a observar";
797                    encabezado6.Add("Alumno");
798                    encabezado6.Add("Promedio General");
799                    //TablaGrafico.Add("- Top 3 de Alumnos a observar:");
800                    foreach (var item in worstAlumnos)
801                    {
802                        //TablaGrafico.Add(item.Alumno + " - Promedio General: " + item.Promedio.ToString("#.##"));
803                        fila6 = new List<string>();
804                        fila6.Add(item.Alumno);
805                        fila6.Add(item.Promedio.ToString("#.##"));
806                        filasTabla6.Add(fila6);
807                    }
808                    tabla6.listaEncabezados = encabezado6;
809                    tabla6.listaCuerpo = filasTabla6;
810                    TablaGrafico.Add(tabla6);
811                }
812			}
813
814			if (Convert.ToInt32(ddlAlumno.SelectedValue) < 0)
815			{
816				var worstAlumnos =
817				   (from p in listaReporte
818					group p by p.alumno into g
819					orderby g.Average(p => Convert.ToInt32(p.calificacion)) descending
820					select new { Alumno = g.Key, Promedio = g.Average(p => Convert.ToInt32(p.calificacion)) }).Distinct().Take(3);
821
822                if (worstAlumnos.Count() > 1)
823                {
824                    TablaGrafico tabla7 = new TablaGrafico();
825                    tabla7.listaCuerpo = new List<List<string>>();
826                    List<string> encabezado7 = new List<string>();
827                    List<List<string>> filasTabla7 = new List<List<string>>();
828                    List<string> fila7 = new List<string>();
829
830                    tabla7.titulo = "Top Alumnos con mejores Promedios";
831                    encabezado7.Add("Alumno");
832                    encabezado7.Add("Promedio General");
833
834                    //TablaGrafico.Add("- Top 3 de Alumnos con mejores notas:");
835                    foreach (var item in worstAlumnos)
836                    {
837                        //TablaGrafico.Add(item.Alumno + " - Promedio General: " + item.Promedio.ToString("#.##"));
838                        fila7 = new List<string>();
839                        fila7.Add(item.Alumno);
840                        fila7.Add(item.Promedio.ToString("#.##"));
841                        filasTabla7.Add(fila7);
842                    }
843                    tabla7.listaEncabezados = encabezado7;
844                    tabla7.listaCuerpo = filasTabla7;
845                    TablaGrafico.Add(tabla7);
846                }
847			}
848		}
849		#endregion
850	}
851}