Exemple #1
0
        /// <summary>
        /// Finds the message with the givenn code for the specified location and base.
        /// </summary>
        /// <param name="codigo"></param>
        /// <param name="device"></param>
        /// <returns></returns>
        public MensajeVO GetByCodigo(String codigo, int device)
        {
            if (device == 0)
            {
                return(null);
            }
            if (String.IsNullOrEmpty(codigo))
            {
                return(null);
            }

            var vehicle = new CocheDAO().FindMobileByDevice(device);
            var emp     = vehicle.Empresa != null ? vehicle.Empresa.Id : vehicle.Linea != null ? vehicle.Linea.Empresa != null ? vehicle.Linea.Empresa.Id : -1 : -1;
            var lin     = vehicle.Linea != null ? vehicle.Linea.Id : -1;

            var key = String.Format("message:{0}:{1}:{2}", emp, lin, codigo);

            if (!LogicCache.KeyExists(typeof(MensajeVO), key))
            {
                var result = FindByEmpresaYLineaAndUser(vehicle.Empresa, vehicle.Linea, null).FirstOrDefault(m => Convert.ToInt32(m.Codigo) == Convert.ToInt32(codigo));

                var mensajeVo = result != null ? new MensajeVO(result) : null;

                LogicCache.Store(typeof(MensajeVO), key, mensajeVo);

                return(mensajeVo);
            }

            return(LogicCache.Retrieve <MensajeVO>(typeof(MensajeVO), key));
        }
Exemple #2
0
        /// <summary>
        /// Gets aggregate activity for each specified transport company.
        /// </summary>
        /// <param name="desde"></param>
        /// <param name="hasta"></param>
        /// <param name="ids"></param>
        /// <returns></returns>
        public IEnumerable <TransportActivity> GetTransportActivities(DateTime desde, DateTime hasta, List <int> ids)
        {
            TransportActivity ta = null;

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

            ProjectionList pl = Projections.ProjectionList();

            pl.Add(Projections.Sum <Datamart>(dm => dm.MovementHours).WithAlias(() => ta.HsActivos));
            pl.Add(Projections.Sum <Datamart>(dm => dm.StoppedHours).WithAlias(() => ta.HsInactivos));
            pl.Add(Projections.Sum <Datamart>(dm => dm.InfractionMinutes).WithAlias(() => ta.HsInfraccion));
            pl.Add(Projections.Sum <Datamart>(dm => dm.Infractions).WithAlias(() => ta.Infracciones));
            pl.Add(Projections.Sum <Datamart>(dm => dm.Kilometers).WithAlias(() => ta.Recorrido));
            pl.Add(Projections.Max <Datamart>(dm => dm.MaxSpeed).WithAlias(() => ta.VelocidadMaxima));
            pl.Add(Projections.Avg <Datamart>(dm => dm.AverageSpeed).WithAlias(() => ta.VelocidadPromedio));
            pl.Add(Projections.Group <Datamart>(dm => dm.Vehicle.Id).WithAlias(() => ta.IdVehiculo));

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

            var cocheDAO = new CocheDAO();

            foreach (TransportActivity r in results)
            {
                Coche coche = cocheDAO.FindById(r.Id);
                r.HsInfraccion  /= 60;
                r.Transport      = coche.Transportista.Descripcion;
                r.CentroDeCostos = coche.CentroDeCostos != null ? coche.CentroDeCostos.Descripcion : null;
                r.TipoVehiculo   = coche.TipoCoche != null ? coche.TipoCoche.Descripcion : null;
            }
            return(results);
        }
        public List <MobilePoi> GetVehiculosCercanos(IEnumerable <int> empresas, IEnumerable <int> lineas, int referencia)
        {
            var posDao   = new LogPosicionDAO();
            var cocheDao = new CocheDAO();

            var r = FindById(referencia);

            var lat = r.Direccion != null ? r.Direccion.Latitud : r.Poligono.Centro.Y;
            var lon = r.Direccion != null ? r.Direccion.Longitud : r.Poligono.Centro.X;

            var coches = cocheDao.GetList(empresas, lineas);

            if (!coches.Any())
            {
                return(new List <MobilePoi>());
            }

            return(posDao.GetLastVehiclesPositions(coches).Values
                   .Where(position => position != null)
                   .Select(lup => new MobilePoi
            {
                IdVehiculo = lup.IdCoche,
                PuntoDeInteres = r.Descripcion,
                Distancia = Distancias.Loxodromica(lup.Latitud, lup.Longitud, lat, lon),
                Interno = lup.Coche,
                Latitud = lup.Latitud,
                Longitud = lup.Longitud,
                TipoVehiculo = lup.TipoCoche,
                Velocidad = lup.Velocidad
            })
                   .OrderBy(mp => mp.Distancia)
                   .ToList());
        }
Exemple #4
0
        /// <summary>
        /// Gets mobile maintenance aggregat data for the specified vehicles.
        /// </summary>
        /// <param name="desde"></param>
        /// <param name="hasta"></param>
        /// <param name="vehiculos"></param>
        /// <returns></returns>
        public IEnumerable <MobileMaintenance> GetMobileMaintenanceData(DateTime desde, DateTime hasta, IEnumerable <Coche> vehiculos)
        {
            MobileMaintenance mm = null;

            int[] ids = vehiculos.Select(c => c.Id).ToArray();

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

            ProjectionList pl = Projections.ProjectionList();

            pl.Add(Projections.Sum <Datamart>(dm => dm.MovementHours).WithAlias(() => mm.HsMarcha));
            pl.Add(Projections.Sum <Datamart>(dm => dm.Kilometers).WithAlias(() => mm.Kilometros));
            pl.Add(Projections.Group <Datamart>(dm => dm.Vehicle.Id).WithAlias(() => mm.IdVehiculo));

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

            var cocheDAO = new CocheDAO();

            foreach (MobileMaintenance r in results)
            {
                Coche coche = cocheDAO.FindById(r.IdVehiculo);
                r.Interno      = coche.Interno;
                r.TipoVehiculo = coche.TipoCoche != null ? coche.TipoCoche.Descripcion : null;
                r.Patente      = coche.Patente;
                r.Referencia   = coche.Referencia;
            }
            return(results);
        }
Exemple #5
0
        public List <MobileTour> GetMobileTour(IEnumerable <int> vehiculos, string codigoInicio, string codigoFin, DateTime inicio, DateTime fin, int radio, bool ocultarHuerfanos)
        {
            var results = GetTourEvents(vehiculos, codigoInicio, codigoFin, inicio, fin);

            var list = new List <MobileTour>(results.Count / 2);

            var        cocheDao = new CocheDAO();
            MobileTour tour     = null;

            foreach (var result in results)
            {
                var distancia = tour != null?Distancias.Loxodromica(tour.LatitudInicio, tour.LongitudInicio, result.Latitud, result.Longitud) : 0;

                var dentro = distancia <= radio;
                if (tour == null || tour.IdMovil != result.Coche.Id || !dentro)
                {
                    if (result.Mensaje.Codigo == codigoInicio)
                    {
                        tour = new MobileTour
                        {
                            Entrada        = result.Fecha.ToDisplayDateTime(),
                            IdMovil        = result.Coche.Id,
                            Interno        = cocheDao.FindById(result.Coche.Id).Interno,
                            LatitudInicio  = result.Latitud,
                            LongitudInicio = result.Longitud
                        };
                        list.Add(tour);
                    }
                    else if (result.Mensaje.Codigo == codigoFin)
                    {
                        tour = new MobileTour
                        {
                            Salida      = result.Fecha.ToDisplayDateTime(),
                            IdMovil     = result.Coche.Id,
                            Interno     = cocheDao.FindById(result.Coche.Id).Interno,
                            LatitudFin  = result.Latitud,
                            LongitudFin = result.Longitud
                        };
                        list.Add(tour);
                    }
                }
                else if (result.Mensaje.Codigo == codigoFin && (tour.IdMovil == result.Coche.Id))
                {
                    tour.Salida      = result.Fecha.ToDisplayDateTime();
                    tour.LatitudFin  = result.Latitud;
                    tour.LongitudFin = result.Longitud;
                }
            }

            if (ocultarHuerfanos)
            {
                list = list.Where(t => t.Entrada != DateTime.MinValue && t.Salida != DateTime.MinValue).ToList();
            }

            return(list);
        }
Exemple #6
0
        public static IQueryable <Coche> GetVehiculos(ISession session, IEnumerable <int> empresas, IEnumerable <int> lineas, IEnumerable <int> transportistas, IEnumerable <int> departamentos, IEnumerable <int> centrosDeCostos, IEnumerable <int> tipos, IEnumerable <int> vehiculos)
        {
            var sessionUser = WebSecurity.AuthenticatedUser;
            var user        = sessionUser != null ? new UsuarioDAO().FindById(sessionUser.Id) : null;

            var cocheDao = new CocheDAO();

            if (empresas == null && lineas == null && departamentos == null && tipos == null && transportistas == null && centrosDeCostos == null && (user == null || !user.PorCoche) && IncludesAll(vehiculos))
            {
                return(null);
            }

            if (vehiculos == null)
            {
                vehiculos = new[] { -1 }
            }
            ;

            var empresasU        = GetEmpresas(session, empresas);
            var lineasU          = GetLineas(session, empresas, lineas);
            var tiposU           = GetTipoVehiculo(session, empresas, lineas, tipos);
            var transportistasU  = GetTransportistas(session, empresas, lineas, transportistas).ToList();
            var departamentosU   = GetDepartamentos(session, empresas, lineas, departamentos);
            var centrosDeCostosU = GetCentrosDeCosto(session, empresasU, lineasU, departamentosU, centrosDeCostos);

            var vehiculosQ = (user != null && user.PorCoche
                                       ? user.Coches.AsQueryable().FilterEmpresa(empresasU).FilterLinea(lineasU).FilterTipoVehiculo(tiposU)
                                       : cocheDao.FindList(empresas, lineas, tipos)
                              );

            if (transportistasU != null)
            {
                var includesNone = IncludesNone(transportistas);
                var includesAll  = IncludesAll(transportistas);

                vehiculosQ = vehiculosQ.FilterTransportista(transportistasU, includesAll, includesNone, user);
            }
            if (centrosDeCostosU != null)
            {
                var includesNone = IncludesNone(centrosDeCostos);
                var includesAll  = IncludesAll(centrosDeCostos);

                vehiculosQ = vehiculosQ.FilterCentroDeCostos(centrosDeCostosU, includesAll, includesNone, user);
            }

            var vehiculosU = vehiculosQ;

            if (!IncludesAll(vehiculos))
            {
                vehiculosU = vehiculosU.Where(l => vehiculos.Contains(l.Id));
            }

            return(vehiculosU);
        }
Exemple #7
0
//        public ConsumoCabeceraDAO(ISession session) : base(session) { }

        #region Find Methods

        public ConsumoCabecera FindByNroFactura(IEnumerable <int> empresas, IEnumerable <int> lineas, string nroFactura)
        {
            var vehiculos = new CocheDAO().GetList(empresas, lineas);

            return(Query.Where(c => c.NumeroFactura == nroFactura)
                   .Where(c => c.Estado != ConsumoCabecera.Estados.Eliminado)
                   .Cacheable()
                   .ToList()
                   .FilterVehiculo(vehiculos, true, null)
                   .SafeFirstOrDefault());
        }
Exemple #8
0
        public List <Dispositivo> GetList(IEnumerable <int> empresas, IEnumerable <int> lineas, IEnumerable <int> tiposDispositivo, bool onlyUnassigned)
        {
            var list = GetList(empresas, lineas, tiposDispositivo);

            if (onlyUnassigned)
            {
                var cocheDao = new CocheDAO();
                list = list.Where(d => cocheDao.FindMobileByDevice(d.Id) == null).ToList();
            }
            return(list);
        }
Exemple #9
0
        public double GetDistance(int id)
        {
            var consumo         = FindById(id);
            var consumoAnterior = FindPrevious(consumo);

            if (consumoAnterior == null)
            {
                return(0);
            }

            var cocheDao = new CocheDAO();

            return(cocheDao.GetDistance(consumo.Vehiculo.Id, consumoAnterior.Fecha, consumo.Fecha));
        }
Exemple #10
0
        public List <Dispositivo> GetUnassigned(IEnumerable <int> empresas, IEnumerable <int> lineas, IEnumerable <int> tiposDispositivo, string padre)
        {
            var list = GetList(empresas, lineas, tiposDispositivo);

            if (padre != "Sensor" && padre != "Entidad") //alguna cosa 'Luquística' (?)
            {
                var aCoches    = new CocheDAO().FindAllAssigned().Select(c => c.Dispositivo.Id);
                var aEntidades = new EntidadDAO().FindAllAssigned().Select(e => e.Dispositivo.Id);

                list = list.Where(d => !aCoches.Contains(d.Id) && !aEntidades.Contains(d.Id)).ToList();
            }

            return(list);
        }
Exemple #11
0
        /// <summary>
        /// Gets sumarized information about the activity of the specified vehicles within the givenn timespan.
        /// </summary>
        /// <param name="desde"></param>
        /// <param name="hasta"></param>
        /// <param name="empresa"></param>
        /// <param name="linea"></param>
        /// <param name="ids"></param>
        /// <param name="km"></param>
        /// <returns></returns>
        public List <MobileActivity> GetMobileActivities(DateTime desde, DateTime hasta, Int32 empresa, Int32 linea, List <Int32> ids, Int32 km)
        {
            MobileActivity   ma  = null;
            DetachedCriteria vdc = GetVehiclesDetachedCriteria(ids.Count <= SQLParameterLimit ? ids.ToArray() : new int[] {}, new[] { empresa },
                                                               (linea != 0 ? new[] { 0, linea } : new int[] {}));
            DetachedCriteria dc = GetDatamartDetachedCriteria(false, vdc).FilterBeginEndBetween(desde, hasta);

            ProjectionList pl = Projections.ProjectionList();

            pl.Add(Projections.Sum <Datamart>(dm => dm.MovementHours).WithAlias(() => ma.HsActivos));
            pl.Add(Projections.Sum <Datamart>(dm => dm.StoppedHours).WithAlias(() => ma.HsInactivos));
            pl.Add(Projections.Sum <Datamart>(dm => dm.InfractionMinutes).WithAlias(() => ma.HsInfraccion));
            pl.Add(Projections.Sum <Datamart>(dm => dm.NoReportHours).WithAlias(() => ma.HsSinReportar));
            pl.Add(Projections.Sum <Datamart>(dm => dm.Infractions).WithAlias(() => ma.Infracciones));
            IProjection recorridoProjection = Projections.Sum <Datamart>(dm => dm.Kilometers).WithAlias(() => ma.Recorrido);

            pl.Add(recorridoProjection);
            pl.Add(Projections.Max <Datamart>(dm => dm.MaxSpeed).WithAlias(() => ma.VelocidadMaxima));
            pl.Add(Projections.Group <Datamart>(dm => dm.Vehicle.Id).WithAlias(() => ma.Id));

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

            var cocheDAO = new CocheDAO();

            foreach (MobileActivity r in results)
            {
                Coche coche = cocheDAO.FindById(r.Id);
                r.VelocidadPromedio = r.HsActivos > 0 ? Convert.ToInt32(r.Recorrido / r.HsActivos) : 0;
                r.HsInfraccion     /= 60;
                r.CentroDeCostos    = coche.CentroDeCostos != null ? coche.CentroDeCostos.Descripcion : null;
                r.TipoVehiculo      = coche.TipoCoche != null ? coche.TipoCoche.Descripcion : null;
                r.Movil             = coche.Interno;
                r.Patente           = coche.Patente;
            }

            List <MobileActivity> result = (ids.Count > SQLParameterLimit ? results.Where(x => ids.Contains(x.Id)) : results).OrderBy(r => r.Movil).ToList();

            return(result);
        }
Exemple #12
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="device"></param>
        /// <param name="revision"></param>
        /// <returns></returns>
        public List <Mensaje> GetResponsesMessagesTable(int device, int revision)
        {
            var vehicle = new CocheDAO().FindMobileByDevice(device);

            if (vehicle == null)
            {
                return(null);
            }


            var emp = vehicle.Empresa != null ? vehicle.Empresa.Id : -1;
            var lin = vehicle.Linea != null ? vehicle.Linea.Id : -1;

            try
            {
                var res = Query
                          .FilterEmpresa(Session, new[] { emp })
                          .FilterLinea(Session, new[] { emp }, new[] { lin })
                          .Where(m => (!m.EsBaja) && m.Revision > revision && (m.TipoMensaje.DeConfirmacion || m.TipoMensaje.DeRechazo))
                          .Cacheable()
                          .ToList()
                          .Select(m => new { Value = (m.Empresa != null ? 1 : 0) + (m.Linea != null ? 2 : 0), Mensaje = m })
                          .GroupBy(m => m.Mensaje.Codigo, n => n)
                          .Select(m => m.FirstOrDefault(j => j.Value == m.Max(h => h.Value)).Mensaje)
                          .ToList();

                foreach (var r in res)
                {
                    Session.Refresh(r);
                }

                return(res);
            }
            catch (ArgumentNullException)
            {
                return(null);
            }
        }
Exemple #13
0
        public List <MobileTour> GetMobileTour(IEnumerable <int> vehiculos, string codigoInicio, string codigoFin, DateTime inicio, DateTime fin, TimeSpan duracion)
        {
            var results = GetTourEvents(vehiculos, codigoInicio, codigoFin, inicio, fin);

            var list = new List <MobileTour>(results.Count / 2);

            var        cocheDao = new CocheDAO();
            MobileTour tour     = null;

            foreach (var result in results)
            {
                if (result.Mensaje.Codigo == codigoInicio && (tour == null || tour.IdMovil != result.Coche.Id))
                {
                    tour = new MobileTour
                    {
                        Entrada        = result.Fecha,
                        IdMovil        = result.Coche.Id,
                        Interno        = cocheDao.FindById(result.Coche.Id).Interno,
                        LatitudInicio  = result.Latitud,
                        LongitudInicio = result.Longitud
                    };
                }
                else if (result.Mensaje.Codigo == codigoFin && (tour != null && tour.IdMovil == result.Coche.Id))
                {
                    tour.Salida      = result.Fecha;
                    tour.LatitudFin  = result.Latitud;
                    tour.LongitudFin = result.Longitud;
                    if (tour.Duracion >= duracion)
                    {
                        list.Add(tour);
                    }
                    tour = null;
                }
            }

            return(list);
        }
Exemple #14
0
        public IList FindParteReport(int aseguradora, int locacion, int linea, int movil, int equipo, DateTime inicio, DateTime fin, int estado, int usuario)
        {
            var empresaDAO = new EmpresaDAO();
            var lineaDAO   = new LineaDAO();
            var cocheDAO   = new CocheDAO();

            var lin = linea > 0 ? lineaDAO.FindById(linea) : null;
            var emp = lin != null ? lin.Empresa : locacion > 0 ? empresaDAO.FindById(locacion) : null;

            IEnumerable <string> coches;

            if (movil > 0)
            {
                coches = new List <string>(new[] { movil.ToString("#0") });
            }
            else
            {
                coches = cocheDAO.GetList(new[] { emp != null ? emp.Id : -1 }, new[] { lin != null ? lin.Id : -1 })
                         .Select(c => c.Id.ToString("#0"))
                         .ToList();
            }

            var script =
                @"from Documento d 
                    where d.Fecha >= :ini
                    and d.Fecha <= :fin    
                    and d.Estado != -1
                    and d.Id in 
                        (select v.Documento.Id from DocumentoValor v 
                        where v.Parametro.TipoDato like 'Aseguradora'  and v.Valor = :ase)       
                ";

            if (equipo > 0)
            {
                script +=
                    @" and d.Id in 
                        (select v.Documento.Id from DocumentoValor v 
                        where v.Parametro.Nombre like 'Equipo'  and v.Valor = :equ) ";
            }

            if (estado >= 0)
            {
                script +=
                    @" and ((:est = '0' and d.Id not in 
                        (select v.Documento.Id from DocumentoValor v 
                            where v.Parametro.Nombre like 'Estado Control' and v.Valor <> :est)
                        ) or (:est <> '0' and d.Id in (select v.Documento.Id from DocumentoValor v 
                            where v.Parametro.Nombre like 'Estado Control' and v.Valor = :est))) ";
            }

            script += " order by d.Fecha";

            var q = Session.CreateQuery(script)
                    .SetParameter("ini", inicio)
                    .SetParameter("fin", fin)
                    .SetParameter("ase", aseguradora.ToString("#0"));

            if (equipo > 0)
            {
                q.SetParameter("equ", equipo.ToString("#0"));
            }

            if (estado >= 0)
            {
                q.SetParameter("est", estado.ToString("#0"));
            }

            return(q.List().Cast <Documento>().Where(documento => documento.Parametros.OfType <DocumentoValor>().Any(v => v.Parametro.TipoDato.ToLower().Equals("coche") && coches.Contains(v.Valor))).ToList());
        }