/// <summary> /// Evento que se ejecuta cuando se hace la suma del porcentaje de utilización por modelo /// </summary> /// <param name="sender">Objeto que genero el evento</param> /// <param name="e">Argumentos asociados al evento</param> private void xrtCellSumDiasPorcentajeUtilizacion_SummaryRowChanged(object sender, EventArgs e) { ConsultarDetalladoRDSucursalDS.ModeloRow source = (this.GetCurrentRow() as DataRowView).Row as ConsultarDetalladoRDSucursalDS.ModeloRow; this.Sumatorias["TotalPorcentajeUtilizacion_DiasRenta"] += this.CountFromModelo(EEstatusHistorial.Rentado); this.Sumatorias["TotalPorcentajeUtilizacion_DiasObjetivo"] += this._totalesDiasObjetivo[source.Nombre]; }
/// <summary> /// Obtiene el total de dias objetivos por modelo /// </summary> /// <param name="source">Fuente de datos del Modelo</param> /// <returns>Cantidad de Dias objetivos por modelo</returns> private int CountDiasObjetivo(ConsultarDetalladoRDSucursalDS.ModeloRow source) { int result = 0; int limit2 = this.GetDaysInMonth(); if (source == null) { source = (this.GetCurrentRow() as DataRowView).Row as ConsultarDetalladoRDSucursalDS.ModeloRow; if (source == null) { throw new Exception(String.Format("La fila de datos actual no corresponde a una fila de tipo {0}", typeof(ConsultarDetalladoRDSucursalDS.ModeloRow))); } } ConsultarDetalladoRDSucursalDS.ConsultarDetalladoRDSucursalRow[] detallesRow = source.GetConsultarDetalladoRDSucursalRows(); foreach (ConsultarDetalladoRDSucursalDS.ConsultarDetalladoRDSucursalRow detalleRow in detallesRow) { if (EnFlota(detalleRow)) { result += limit2 - this.CountFromHistorial(detalleRow, EEstatusHistorial.FueraFlota, null); } else { result += (this.CountFromHistorial(detalleRow, EEstatusHistorial.Rentado, null) + this.CountFromHistorial(detalleRow, EEstatusHistorial.Disponible, null)); } } return(result); }
/// <summary> /// Evento que se ejecuta cuando se obtiene el porcentaje de utilización de un equipo /// </summary> /// <param name="sender">Objeto que genero el evento</param> /// <param name="e">Argumentos asociados al evento</param> public void PorcentajeUtilizacion_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) { ConsultarDetalladoRDSucursalDS.ModeloRow source = (e.Row as DataRowView).Row as ConsultarDetalladoRDSucursalDS.ModeloRow; double diasRentado = this.CountFromModelo(EEstatusHistorial.Rentado); double diasObjetivo = source != null ? this._totalesDiasObjetivo != null ? this._totalesDiasObjetivo[source.Nombre] : 0 : 0; e.Value = diasObjetivo > 0 ? Math.Round((diasRentado / diasObjetivo) * 100.00) : 0.0; }
/// <summary> /// Realiza un conteo de unidades por modelo tomando como base el estatus de historial de una unidad /// </summary> /// <param name="source">Fila de datos a evaluar</param> /// <param name="estatusToCompare">Estatus de Historial a comparar, si se omiten se cuentan todas las unidades</param> /// <param name="dayOfMonth">Día del mes a procesar, si se omite se procesa todo el mes</param> /// <returns>Conteo de unidades por modelo tomando como base su estatus de historial</returns> private int CountFromModelo(ConsultarDetalladoRDSucursalDS.ModeloRow source, EEstatusHistorial?estatusToCompare, int?dayOfMonth) { int result = 0; int limit1 = 0; int limit2 = 0; if (dayOfMonth.HasValue) { limit1 = dayOfMonth.Value; limit2 = dayOfMonth.Value; } else { limit1 = 1; limit2 = this.GetDaysInMonth(); } if (source == null) { source = (this.GetCurrentRow() as DataRowView).Row as ConsultarDetalladoRDSucursalDS.ModeloRow; if (source == null) { throw new Exception(String.Format("La fila de datos actual no corresponde a una fila de tipo {0}", typeof(ConsultarDetalladoRDSucursalDS.ModeloRow))); } } ConsultarDetalladoRDSucursalDS.ConsultarDetalladoRDSucursalRow[] detallesRow = source.GetConsultarDetalladoRDSucursalRows(); foreach (ConsultarDetalladoRDSucursalDS.ConsultarDetalladoRDSucursalRow detalleRow in detallesRow) { for (int i = limit1; i <= limit2; i++) { String rowIndex = String.Format("EstatusHistorial_{0}", i); if (detalleRow.IsNull(rowIndex)) { continue; } EEstatusHistorial?estatusHistorial = (EEstatusHistorial)Enum.ToObject(typeof(EEstatusHistorial), detalleRow[rowIndex]); if (estatusToCompare.HasValue) { if (estatusHistorial == estatusToCompare) { result++; } } else { if (estatusHistorial != EEstatusHistorial.FueraFlota) { result++; } } } } return(result); }
/// <summary> /// Obtiene el acumlado de número de veces que una unidad fue rentada /// </summary> /// <param name="sender">Objeto que genero el evento</param> /// <param name="e">Argumentos asociados al evento</param> public void TotalRentados_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) { CalculatedField calculatedField = sender as CalculatedField; String sDayOfMonth = calculatedField.Name.Split('_')[1]; int dayOfMonth = Convert.ToInt32(sDayOfMonth); ConsultarDetalladoRDSucursalDS.ModeloRow modeloRow = (e.Row as DataRowView).Row as ConsultarDetalladoRDSucursalDS.ModeloRow; e.Value = this.CountFromModelo(modeloRow, EEstatusHistorial.Rentado, dayOfMonth); }
/// <summary> /// Prepara una celda que representa una sumatoria para un estatus de un historial de un día del mes /// </summary> /// <param name="cell">Celda a inicializar</param> /// <param name="weight">Tamaño de la celda</param> /// <param name="dayOfMonth">Día del mes</param> /// <param name="month">Mes en curso</param> /// <param name="year">Año en curso</param> /// <param name="monthDays">Total de días del mes</param> /// <param name="estatus">Estatus usado para filtrar la sumatoria</param> /// <param name="level">Número para diferenciar una sumatoria de otra, cuando estas se repiten</param> private void InitializeTotalStatusCell(XRTableCell cell, double weight, int dayOfMonth, int month, int year, int monthDays, EEstatusHistorial?estatus, int level) { String estatusTxt = estatus.HasValue ? Enum.GetName(typeof(EEstatusHistorial), estatus.Value) : "All"; cell.Name = String.Format("xrtTotal{0}Cell{1}{2}", estatusTxt, level, dayOfMonth); cell.WidthF = (float)weight; if (new DateTime(year, month, dayOfMonth).DayOfWeek == DayOfWeek.Sunday && (cell.BackColor == Color.Transparent && cell.Parent.BackColor == Color.Transparent)) { cell.BackColor = Color.LightGray; } cell.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] { new DevExpress.XtraReports.UI.XRBinding("Text", null, "Modelo.ModeloID") }); XRSummary summary = new XRSummary(); summary.Func = SummaryFunc.Custom; summary.Running = SummaryRunning.Report; cell.Summary = summary; String index = String.Format("{0}_{1}_{2}", estatusTxt, level, dayOfMonth); cell.SummaryReset += (object sender, EventArgs e) => { this.Sumatorias[index] = 0; }; cell.SummaryRowChanged += (object sender, EventArgs e) => { ConsultarDetalladoRDSucursalDS.ModeloRow modeloRow = (this.GetCurrentRow() as DataRowView).Row as ConsultarDetalladoRDSucursalDS.ModeloRow; this.Sumatorias[index] += this.CountFromModelo(modeloRow, estatus, dayOfMonth); }; cell.SummaryGetResult += (object sender, SummaryGetResultEventArgs e) => { e.Result = this.Sumatorias[index]; e.Handled = true; }; }
/// <summary> /// Evento que se ejecuta cuando se obtiene el número de días objetivo de un equipo /// </summary> /// <param name="sender">Objeto que genero el evento</param> /// <param name="e">Argumentos asociados al evento</param> public void DiasObjetivo_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) { ConsultarDetalladoRDSucursalDS.ModeloRow source = (e.Row as DataRowView).Row as ConsultarDetalladoRDSucursalDS.ModeloRow; if (source == null) { source = (this.GetCurrentRow() as DataRowView).Row as ConsultarDetalladoRDSucursalDS.ModeloRow; if (source == null) { throw new Exception(String.Format("La fila de datos actual no corresponde a una fila de tipo {0}", typeof(ConsultarDetalladoRDSucursalDS.ModeloRow))); } } ConsultarDetalladoRDSucursalDS.ConsultarDetalladoRDSucursalRow[] detallesRow = source.GetConsultarDetalladoRDSucursalRows(); List <String> numeroChasis = new List <String>(); foreach (var row in detallesRow) { if (!numeroChasis.Any(x => x.ToUpper() == row.Serie.ToUpper())) { numeroChasis.Add(row.Serie); } } if (this._totalesDiasObjetivo == null) { this._totalesDiasObjetivo = new Dictionary <String, int>(); } Int32 totalDiasObjetivo = CountDiasObjetivo(source); if (!this._totalesDiasObjetivo.Any(x => x.Key == source.Nombre)) { this._totalesDiasObjetivo.Add(source.Nombre, totalDiasObjetivo); } e.Value = totalDiasObjetivo; }
/// <summary> /// Evento que se ejecuta cuando se hace la suma para los días objetivo de cada modelo /// </summary> /// <param name="sender">Objeto que genero el evento</param> /// <param name="e">Argumentos asociados al evento</param> private void xrtCellSumDiasObjeto_SummaryRowChanged(object sender, EventArgs e) { ConsultarDetalladoRDSucursalDS.ModeloRow source = (this.GetCurrentRow() as DataRowView).Row as ConsultarDetalladoRDSucursalDS.ModeloRow; this.Sumatorias["TotalDiasObjetivo"] += this._totalesDiasObjetivo[source.Nombre]; }