/// <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)
        {
            ConsultarDetalladoPSLSucursalDS.ModeloRow source = (this.GetCurrentRow() as DataRowView).Row as ConsultarDetalladoPSLSucursalDS.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(ConsultarDetalladoPSLSucursalDS.ModeloRow source)
        {
            int result = 0;
            int limit2 = this.GetDaysInMonth();

            if (source == null)
            {
                source = (this.GetCurrentRow() as DataRowView).Row as ConsultarDetalladoPSLSucursalDS.ModeloRow;
                if (source == null)
                {
                    throw new Exception(String.Format("La fila de datos actual no corresponde a una fila de tipo {0}", typeof(ConsultarDetalladoPSLSucursalDS.ModeloRow)));
                }
            }

            ConsultarDetalladoPSLSucursalDS.ConsultarDetalladoPSLSucursalRow[] detallesRow = source.GetConsultarDetalladoPSLSucursalRows();
            foreach (ConsultarDetalladoPSLSucursalDS.ConsultarDetalladoPSLSucursalRow 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)
        {
            ConsultarDetalladoPSLSucursalDS.ModeloRow source = (e.Row as DataRowView).Row as ConsultarDetalladoPSLSucursalDS.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(ConsultarDetalladoPSLSucursalDS.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 ConsultarDetalladoPSLSucursalDS.ModeloRow;
                if (source == null)
                {
                    throw new Exception(String.Format("La fila de datos actual no corresponde a una fila de tipo {0}", typeof(ConsultarDetalladoPSLSucursalDS.ModeloRow)));
                }
            }

            ConsultarDetalladoPSLSucursalDS.ConsultarDetalladoPSLSucursalRow[] detallesRow = source.GetConsultarDetalladoPSLSucursalRows();
            foreach (ConsultarDetalladoPSLSucursalDS.ConsultarDetalladoPSLSucursalRow 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);

            ConsultarDetalladoPSLSucursalDS.ModeloRow modeloRow = (e.Row as DataRowView).Row as ConsultarDetalladoPSLSucursalDS.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) =>
            {
                ConsultarDetalladoPSLSucursalDS.ModeloRow modeloRow = (this.GetCurrentRow() as DataRowView).Row as ConsultarDetalladoPSLSucursalDS.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)
        {
            ConsultarDetalladoPSLSucursalDS.ModeloRow source = (e.Row as DataRowView).Row as ConsultarDetalladoPSLSucursalDS.ModeloRow;
            if (source == null)
            {
                source = (this.GetCurrentRow() as DataRowView).Row as ConsultarDetalladoPSLSucursalDS.ModeloRow;
                if (source == null)
                {
                    throw new Exception(String.Format("La fila de datos actual no corresponde a una fila de tipo {0}", typeof(ConsultarDetalladoPSLSucursalDS.ModeloRow)));
                }
            }

            ConsultarDetalladoPSLSucursalDS.ConsultarDetalladoPSLSucursalRow[] detallesRow = source.GetConsultarDetalladoPSLSucursalRows();
            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)
 {
     ConsultarDetalladoPSLSucursalDS.ModeloRow source = (this.GetCurrentRow() as DataRowView).Row as ConsultarDetalladoPSLSucursalDS.ModeloRow;
     this.Sumatorias["TotalDiasObjetivo"] += this._totalesDiasObjetivo[source.Nombre];
 }