Beispiel #1
0
        public IEnumerable <OperatorRanking> GetOperatorsRanking(DateTime desde, DateTime hasta, List <int> choferes)
        {
            OperatorRanking or = null;

            DetachedCriteria dc = GetDatamartDetachedCriteria().FilterBeginBetween(desde, hasta);

            if (choferes.Count <= SQLParameterLimit)
            {
                dc.Add(Restrictions.In(Projections.Property <Datamart>(p => p.Employee.Id), choferes));
            }

            ProjectionList pl = Projections.ProjectionList();

            pl.Add(Projections.Sum <Datamart>(dm => dm.Kilometers).WithAlias(() => or.Kilometros));
            pl.Add(Projections.Sum <Datamart>(dm => dm.MovementHours).WithAlias(() => or.Hours));
            pl.Add(Projections.Group <Datamart>(dm => dm.Employee.Id).WithAlias(() => or.IdOperador));

            ICriteria crit = GetDatamartCriteria(0, dc, pl, null, typeof(OperatorRanking));
            IList <OperatorRanking> results = crit.List <OperatorRanking>();

            var empleadoDAO = new EmpleadoDAO();

            foreach (OperatorRanking r in results)
            {
                Empleado empleado = empleadoDAO.FindById(r.IdOperador);
                r.Operador = empleado.Entidad.Apellido;
                r.Legajo   = empleado.Legajo;
            }
            IEnumerable <OperatorRanking> result = (choferes.Count > SQLParameterLimit ? results.Where(c => choferes.Contains(c.IdOperador)) : results);

            return(result);
        }
Beispiel #2
0
        public OperatorRankingVo(OperatorRanking infractionDetail)
        {
            IdOperador = infractionDetail.IdOperador;
            Operador   = infractionDetail.Operador;

            var dao    = new DAOFactory();
            var chofer = dao.EmpleadoDAO.FindById(IdOperador);

            CentroCosto = chofer != null && chofer.CentroDeCostos != null
                              ? chofer.CentroDeCostos.Descripcion
                              : string.Empty;
            Departamento = chofer != null && chofer.Departamento != null
                               ? chofer.Departamento.Descripcion
                               : string.Empty;
            Legajo              = infractionDetail.Legajo;
            Kilometros          = infractionDetail.Kilometros;
            HorasMovimiento     = infractionDetail.HorasMovimiento;
            Puntaje             = infractionDetail.Puntaje;
            InfraccionesLeves   = infractionDetail.InfraccionesLeves;
            InfraccionesMedias  = infractionDetail.InfraccionesMedias;
            InfraccionesGraves  = infractionDetail.InfraccionesGraves;
            InfraccionesTotales = infractionDetail.InfraccionesTotales;
        }
Beispiel #3
0
        /// <summary>
        /// Gets the operators ranking data filtered by the givenn parameter values.
        /// </summary>
        /// <param name="tipos"></param>
        /// <param name="from"></param>
        /// <param name="to"></param>
        /// <param name="distritos"></param>
        /// <param name="bases"></param>
        /// <param name="transportistas"></param>
        /// <returns></returns>
        public List <OperatorRanking> GetRanking(List <Int32> distritos, List <Int32> bases, List <Int32> transportistas, List <Int32> tipos, List <Int32> centros, List <Int32> departamentos, DateTime from, DateTime to)
        {
            var ranking = new List <OperatorRanking>();

            //var operatorsActivites = GetDriversActivity(distritos, bases, transportistas, tipos, from, to);

            var allEmployees = DAOFactory.EmpleadoDAO.GetList(distritos, bases, tipos, transportistas, centros, departamentos);

            var operatorsActivites = GetDriversActivity(from, to, allEmployees.Select(e => e.Id).ToList());

            var employees = operatorsActivites.Select(activity => activity.IdOperador).ToList();

            //var operatorsMessages = DAOFactory.LogMensajeDAO.GetInfractions(employees, from, to);
            //var conInfraccion = operatorsMessages.Select(m => m.Chofer).Distinct();
            var infracciones = DAOFactory.InfraccionDAO.GetByEmpleados(employees, from, to);

            foreach (var chofer in allEmployees)
            {
                var driver        = chofer.Id;
                var choferRanking = operatorsActivites.FirstOrDefault(a => a.IdOperador == driver);
                var hasInfo       = choferRanking != null;

                if (!hasInfo)
                {
                    choferRanking = new OperatorRanking
                    {
                        IdOperador = driver,
                        Legajo     = chofer.Legajo
                    }
                }
                ;
                choferRanking.Operador = chofer.Entidad.Descripcion;

                var messages = hasInfo
                                   ? infracciones.Where(message => message.Empleado.Id.Equals(driver)).ToList()
                                   : new List <Infraccion>(0);

                foreach (var infraction in messages)
                {
                    var gravedad = GetGravedadInfraccion(infraction);

                    if (gravedad.Equals(0))
                    {
                        continue;
                    }

                    if (gravedad.Equals(1))
                    {
                        choferRanking.InfraccionesLeves++;
                    }
                    else if (gravedad.Equals(2))
                    {
                        choferRanking.InfraccionesMedias++;
                    }
                    else
                    {
                        choferRanking.InfraccionesGraves++;
                    }

                    choferRanking.Puntaje += GetPonderacionInfraccion(infraction);
                }

                ranking.Add(choferRanking);
            }

            return(ranking);
        }
Beispiel #4
0
        ///// <summary>
        ///// Gets operator ranking information for the current tmespan.
        ///// </summary>
        ///// <param name="desde"></param>
        ///// <param name="hasta"></param>
        ///// <param name="tipos"></param>
        ///// <param name="transportistas"></param>
        ///// <param name="bases"></param>
        ///// <param name="distritos"></param>
        ///// <returns></returns>
        //public IEnumerable<OperatorRanking> GetOperatorsRanking(DateTime desde, DateTime hasta, List<Int32> tipos, List<Int32> transportistas, List<Int32> bases, List<Int32> distritos)
        //{
        //    return Session.Query<Datamart>()
        //        .Where(data => data.Employee != null && ((data.Employee.TipoEmpleado == null && tipos.Contains(-2)) || (data.Employee.TipoEmpleado != null && tipos.Contains(data.Employee.TipoEmpleado.Id)))
        //            && ((data.Employee.Transportista == null && transportistas.Contains(-2)) || (data.Employee.Transportista != null && transportistas.Contains(data.Employee.Transportista.Id)))
        //            && (data.Employee.Linea == null || bases.Contains(data.Employee.Linea.Id)) && (data.Employee.Empresa == null || distritos.Contains(data.Employee.Empresa.Id))
        //            && data.Begin >= desde && data.Begin <= hasta)
        //        .GroupBy(data => new { data.Employee.Id, data.Employee.Entidad.Descripcion, data.Employee.Legajo })
        //        .Select(data => new OperatorRanking
        //            {
        //                Kilometros = data.Sum(datamart => datamart.Kilometers),
        //                Hours = data.Sum(datamart => datamart.MovementHours),
        //                IdOperador = data.Key.Id,
        //                Operador = data.Key.Descripcion,
        //                Legajo = data.Key.Legajo
        //            })
        //        .ToList();
        //}

        /// <summary>
        /// Gets operator ranking information for the current tmespan.
        /// </summary>
        /// <param name="desde"></param>
        /// <param name="hasta"></param>
        /// <param name="tipos"></param>
        /// <param name="transportistas"></param>
        /// <param name="bases"></param>
        /// <param name="distritos"></param>
        /// <returns></returns>
        public IEnumerable <OperatorRanking> GetOperatorsRanking(
            DateTime desde, DateTime hasta, List <Int32> tipos, List <Int32> transportistas, List <Int32> bases, List <Int32> distritos)
        {
            OperatorRanking or = null;
            Empleado        ch = null;

            DetachedCriteria dc =
                GetDatamartDetachedCriteria()
                .FilterBeginBetween(desde, hasta)
                .CreateAlias("Employee", "ch", JoinType.InnerJoin)
                .CreateAlias("Employee.Entidad", "en", JoinType.InnerJoin);


            // Tipo de Empleado
            bool tipoNone  = tipos.Contains(-2);
            bool tipoOther = tipos.Any(t => t > 0);
            bool tipoAll   = tipos.Contains(-1);

            if (!tipoAll)
            {
                if (tipoNone && tipoOther)
                {
                    dc.Add(Restrictions.Or(Restrictions.IsNull(Projections.Property <Empleado>(p => ch.TipoEmpleado)),
                                           Restrictions.In(Projections.Property <Empleado>(p => ch.TipoEmpleado.Id), tipos)));
                }
                else
                {
                    if (tipoNone)
                    {
                        dc.Add(Restrictions.IsNull(Projections.Property <Empleado>(p => ch.TipoEmpleado)));
                    }
                    if (tipoOther)
                    {
                        dc.Add(Restrictions.In(Projections.Property <Empleado>(p => ch.TipoEmpleado.Id), tipos));
                    }
                }
            }

            // Transportista
            bool transNone  = transportistas.Contains(-2);
            bool transOther = transportistas.Any(t => t > 0);
            bool transAll   = transportistas.Contains(-1);

            if (!transAll)
            {
                if (transNone && transOther)
                {
                    dc.Add(Restrictions.Or(Restrictions.IsNull(Projections.Property <Empleado>(p => ch.Transportista)),
                                           Restrictions.In(Projections.Property <Empleado>(p => ch.Transportista.Id), transportistas)));
                }
                else
                {
                    if (tipoNone)
                    {
                        dc.Add(Restrictions.IsNull(Projections.Property <Empleado>(p => ch.Transportista)));
                    }
                    if (tipoOther)
                    {
                        dc.Add(Restrictions.InG(Projections.Property <Empleado>(p => ch.Transportista.Id), transportistas));
                    }
                }
            }

            if (!bases.Contains(-1))
            {
                dc.Add(Restrictions.Or(Restrictions.IsNull(Projections.Property <Empleado>(p => ch.Linea)),
                                       Restrictions.In(Projections.Property <Empleado>(p => ch.Linea.Id), bases)));
            }

            if (!distritos.Contains(-1))
            {
                dc.Add(Restrictions.Or(Restrictions.IsNull(Projections.Property <Empleado>(p => ch.Empresa)),
                                       Restrictions.In(Projections.Property <Empleado>(p => ch.Empresa.Id), distritos)));
            }


            ProjectionList pl = Projections.ProjectionList();

            pl.Add(Projections.Sum <Datamart>(dm => dm.Kilometers).WithAlias(() => or.Kilometros));
            pl.Add(Projections.Sum <Datamart>(dm => dm.MovementHours).WithAlias(() => or.Hours));
            pl.Add(Projections.Group <Datamart>(dm => dm.Employee.Id).WithAlias(() => or.IdOperador));
            pl.Add(Projections.Group <Datamart>(dm => dm.Employee.Legajo).WithAlias(() => or.Legajo));
            pl.Add(Projections.Group <Datamart>(dm => dm.Employee.Entidad.Apellido).WithAlias(() => or.Operador));

            ICriteria crit = GetDatamartCriteria(0, dc, pl, null, typeof(OperatorRanking));

            IList <OperatorRanking> results = crit.List <OperatorRanking>();

            return(results);
        }