/// <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)); }
/// <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()); }
/// <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); }
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); }
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); }
// 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()); }
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); }
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)); }
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); }
/// <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); }
/// <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); } }
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); }
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()); }