Example #1
0
        private void ProcessDistribucionPorGps(ViajeDistribucion distribucion)
        {
            var entregas = distribucion.Detalles;

            var mensajes = new List <string> {
                MessageCode.EstadoLogisticoCumplidoManual.GetMessageCode(),
                MessageCode.EstadoLogisticoCumplidoManualNoRealizado.GetMessageCode(),
                MessageCode.EstadoLogisticoCumplidoManualRealizado.GetMessageCode()
            };
            var confirmaciones = DaoFactory.MensajeDAO.GetMensajesDeConfirmacion(new[] { distribucion.Empresa.Id }, new int[] { }).Select(m => m.Codigo);
            var rechazos       = DaoFactory.MensajeDAO.GetMensajesDeRechazo(new[] { distribucion.Empresa.Id }, new int[] { }).Select(m => m.Codigo);

            mensajes.AddRange(confirmaciones);
            mensajes.AddRange(rechazos);

            EntregaDistribucion anterior = null;

            if (distribucion.Tipo == ViajeDistribucion.Tipos.Desordenado)
            {
                entregas = distribucion.GetEntregasPorOrdenReal();
            }

            var orden = 0;

            foreach (var entrega in entregas)
            {
                var te = new TimeElapsed();
                var tiempoRecorrido = new TimeSpan(0);
                var kms             = 0.0;
                if (anterior != null &&
                    (entrega.Estado.Equals(EntregaDistribucion.Estados.Completado) ||
                     entrega.Estado.Equals(EntregaDistribucion.Estados.Visitado)))
                {
                    if (entrega.EntradaOManualExclusiva.HasValue && anterior.SalidaOManualExclusiva.HasValue)
                    {
                        tiempoRecorrido = entrega.EntradaOManualExclusiva.Value.Subtract(anterior.SalidaOManualExclusiva.Value);
                        if (tiempoRecorrido.TotalMinutes < 0)
                        {
                            tiempoRecorrido = new TimeSpan(0);
                        }
                    }

                    if (entrega.Viaje.Vehiculo != null && anterior.FechaMin < entrega.FechaMin && entrega.FechaMin < DateTime.MaxValue)
                    {
                        var dm = DaoFactory.DatamartDAO.GetMobilesKilometers(anterior.FechaMin, entrega.FechaMin, new List <int> {
                            entrega.Viaje.Vehiculo.Id
                        }).FirstOrDefault();
                        kms = dm != null ? dm.Kilometers : 0.0;
                        //kms = DaoFactory.CocheDAO.GetDistance(entrega.Viaje.Vehiculo.Id, anterior.FechaMin, entrega.FechaMin);
                    }
                }

                var tiempoEntrega = entrega.Salida.HasValue && entrega.Entrada.HasValue
                                        ? entrega.Salida.Value.Subtract(entrega.Entrada.Value)
                                        : new TimeSpan();
                var desvio = entrega.Entrada.HasValue
                                ? entrega.Entrada.Value.Subtract(entrega.Programado)
                                : new TimeSpan();

                var eventos   = entrega.EventosDistri.Where(e => mensajes.Contains(e.LogMensaje.Mensaje.Codigo));
                var evento    = eventos.Any() ? eventos.OrderBy(e => e.Fecha).FirstOrDefault() : null;
                var distancia = evento != null?Distancias.Loxodromica(evento.LogMensaje.Latitud, evento.LogMensaje.Longitud, entrega.ReferenciaGeografica.Latitude, entrega.ReferenciaGeografica.Longitude) : (double?)null;

                var registro = new DatamartDistribucion
                {
                    Empresa        = entrega.Viaje.Empresa,
                    Linea          = entrega.Linea,
                    Vehiculo       = entrega.Viaje.Vehiculo,
                    CentroDeCostos = entrega.Viaje.CentroDeCostos,
                    Viaje          = entrega.Viaje,
                    Detalle        = entrega,
                    Fecha          = entrega.Viaje.Inicio,
                    Ruta           = entrega.Viaje.Codigo.Trim(),
                    Entrega        = entrega.Descripcion.Trim().Length > 50 ? entrega.Descripcion.Trim().Substring(0, 50) : entrega.Descripcion.Trim(),
                    IdEstado       = entrega.Estado,
                    Estado         = CultureManager.GetLabel(EntregaDistribucion.Estados.GetLabelVariableName(entrega.Estado)),
                    Km             = kms,
                    Recorrido      = tiempoRecorrido.TotalMinutes,
                    TiempoEntrega  = tiempoEntrega.TotalSeconds > 0 ? tiempoEntrega.TotalMinutes : 0.0,
                    Entrada        = entrega.Entrada,
                    Salida         = entrega.Salida,
                    Manual         = entrega.Manual,
                    Programado     = entrega.Programado,
                    Desvio         = desvio.TotalMinutes,
                    Orden          = orden,
                    Importe        = 0.0f,
                    PuntoEntrega   = entrega.PuntoEntrega,
                    Confirmacion   = entrega.MensajeConfirmacion != null
                                                        ? entrega.MensajeConfirmacion.Mensaje.Descripcion
                                                        : string.Empty,
                    Cliente = entrega.PuntoEntrega != null && entrega.PuntoEntrega.Cliente != null
                                                    ? entrega.PuntoEntrega.Cliente.Descripcion : string.Empty,
                    Distancia = distancia
                };

                DaoFactory.DatamartDistribucionDAO.Save(registro);

                orden++;

                if (entrega.Estado.Equals(EntregaDistribucion.Estados.Completado) ||
                    entrega.Estado.Equals(EntregaDistribucion.Estados.Visitado))
                {
                    anterior = entrega;
                }
            }
        }
Example #2
0
        public ReporteDistribucionVo(DatamartDistribucion dm, bool verConfirmacion)
        {
            Id            = dm.Viaje.Id;
            Descripcion   = dm.Entrega;
            IdDispositivo = dm.Viaje.Vehiculo != null && dm.Viaje.Vehiculo.Dispositivo != null
                                ? dm.Viaje.Vehiculo.Dispositivo.Id
                                : 0;
            Ruta         = dm.Ruta;
            TipoVehiculo = dm.Viaje.Vehiculo != null && dm.Viaje.Vehiculo.TipoCoche != null
                               ? dm.Viaje.Vehiculo.TipoCoche.Descripcion
                               : string.Empty;
            Vehiculo = dm.Vehiculo != null ? dm.Vehiculo.Interno : string.Empty;
            Empleado = dm.Viaje.Empleado != null && dm.Viaje.Empleado.Entidad != null
                           ? dm.Viaje.Empleado.Entidad.Descripcion
                           : string.Empty;
            Fecha        = dm.Fecha.ToDisplayDateTime().ToString("dd/MM/yyyy");
            Orden        = dm.Detalle.Orden;
            OrdenReal    = dm.Orden;
            PuntoEntrega = dm.PuntoEntrega != null
                               ? dm.PuntoEntrega.Descripcion
                               : dm.Detalle.ReferenciaGeografica != null
                                     ? dm.Detalle.ReferenciaGeografica.Descripcion
                                     : string.Empty;
            Manual = dm.Manual.HasValue
                         ? dm.Manual.Value.ToDisplayDateTime().ToString("HH:mm")
                         : string.Empty;
            Entrada = dm.Entrada.HasValue
                          ? dm.Entrada.Value.ToDisplayDateTime().ToString("HH:mm")
                          : string.Empty;
            Salida = dm.Salida.HasValue
                         ? dm.Salida.Value.ToDisplayDateTime().ToString("HH:mm")
                         : string.Empty;
            var diferencia = dm.Manual.HasValue && dm.Salida.HasValue
                   ? dm.Salida.Value.Subtract(dm.Manual.Value)
                   : new TimeSpan(0);

            if (diferencia.Ticks != 0)
            {
                if (diferencia.TotalSeconds > 0)
                {
                    Diferencia = diferencia.Hours.ToString("00") + ":" + diferencia.Minutes.ToString("00") + ":" + diferencia.Seconds.ToString("00");
                }
                else
                {
                    diferencia = new TimeSpan(-diferencia.Ticks);
                    Diferencia = "- " + diferencia.Hours.ToString("00") + ":" + diferencia.Minutes.ToString("00") + ":" + diferencia.Seconds.ToString("00");
                }
            }
            var duracion = new TimeSpan(0, 0, (int)dm.TiempoEntrega * 60);

            Duracion = dm.TiempoEntrega > 0
                           ? duracion.Hours.ToString("00") + ":" + duracion.Minutes.ToString("00") + ":" + duracion.Seconds.ToString("00")
                           : string.Empty;
            Estado         = dm.Estado;
            Km             = dm.Km;
            UnreadInactive = dm.Detalle.GarminUnreadInactiveAt.HasValue
                                ? dm.Detalle.GarminUnreadInactiveAt.Value.ToDisplayDateTime().ToString("HH:mm")
                                : string.Empty;
            ReadInactive = dm.Detalle.GarminReadInactiveAt.HasValue
                                ? dm.Detalle.GarminReadInactiveAt.Value.ToDisplayDateTime().ToString("HH:mm")
                                : string.Empty;

            if (verConfirmacion && dm.Vehiculo != null)
            {
                Confirmacion = dm.Confirmacion;
                Horario      = dm.Detalle.RecepcionConfirmacion.HasValue
                              ? dm.Detalle.RecepcionConfirmacion.Value.ToDisplayDateTime()
                              : (DateTime?)null;
                Distancia = dm.Distancia;
                if (dm.PuntoEntrega != null && dm.PuntoEntrega.ReferenciaGeografica != null &&
                    dm.PuntoEntrega.ReferenciaGeografica.Poligono != null)
                {
                    Radio = dm.PuntoEntrega.ReferenciaGeografica.Poligono.Radio;
                }
            }
        }