Ejemplo n.º 1
0
        private static List <InformeTrazabilidad> TrazabilidadMarcacionesProcess(ContextService db, bool insert = false, int?IdAgente = null, DateTime?FechaInicio = null, DateTime?FechaFin = null, bool?totalizar = false)
        {
            long index = InformeTrazabilidad.Max();
            List <InformeTrazabilidad> model = new List <InformeTrazabilidad>();

            var listAgenda = db.Marcacions.Get(p =>
                                               p.Fecha >= FechaInicio && p.Fecha <= FechaFin &&
                                               (IdAgente == null || p.IdAgente == IdAgente)).OrderBy(p => p.Fecha).ToList();

            var listAgente = listAgenda.Select(p => p.IdAgente).Distinct();

            foreach (var currentIdAgente in listAgente)
            {
                var list = listAgenda.Where(p => p.IdAgente == currentIdAgente).ToList();

                list.ForEach(p => p.Ubicacion = String.Format("{0}|{1}|{2}", p.HoraInicio.HasValue ? p.HoraInicio.Value.ToString("HH:mm") : p.HoraFin.HasValue ? p.HoraFin.Value.ToString("HH:mm") : p.Fecha.ToString("HH:mm"), p.Latitud, p.Longitud));


                list.ForEach(p => p.Reportes = 1);

                foreach (var item in list)
                {
                    model.Add(new InformeTrazabilidad()
                    {
                        IdInformeTrazabilidad = index,
                        IdAgente     = currentIdAgente,
                        Fecha        = item.Fecha.Date,
                        HoraEntrada  = item.HoraInicio.HasValue ? item.HoraInicio.Value.ToString("HH:mm") : item.HoraFin.HasValue ? item.HoraFin.Value.ToString("HH:mm") : string.Empty,
                        Tiempo       = "0 min.",
                        HoraSalida   = item.HoraFin.HasValue ? item.HoraFin.Value.ToString("HH:mm") : item.HoraInicio.HasValue ? item.HoraInicio.Value.ToString("HH:mm") : string.Empty,
                        Distancia    = 0.00D,
                        EsMovimiento = false,
                        Minutos      = 0.00D,
                        Ubicacion    = item.Ubicacion.Replace(',', '.'),
                        Latitud      = item.Latitud ?? 0,
                        Longitud     = item.Longitud ?? 0,
                        TipoTabla    = Constantes.TipoEntradaTrazabilidad.Tabla,
                        Tipo         = item.Tipo,
                        IdMarcacion  = item.IdMarcacion
                    });

                    index++;
                }
            }
            if (totalizar.HasValue && !totalizar.Value)
            {
                foreach (var item in model.Where(p => !p.EsMovimiento))
                {
                    item.Direccion = Process.RutaOptima.GetAddress(item.Latitud, item.Longitud);
                }
            }

            if (insert)
            {
                model.ForEach(p => db.InformeTrazabilidads.Insert(p));
                db.Save();
            }

            return(model);
        }
Ejemplo n.º 2
0
        private static List <InformeTrazabilidad> TrazabilidadAgendasProcess(ContextService db, bool insert = false, int?IdAgente = null, DateTime?FechaInicio = null, DateTime?FechaFin = null)
        {
            long index = InformeTrazabilidad.Max();
            List <InformeTrazabilidad> model = new List <InformeTrazabilidad>();

            var listAgenda = db.Agendas.Get(p =>
                                            p.FechaInicioGestion.HasValue &&
                                            p.FechaInicioGestion >= FechaInicio && p.FechaInicioGestion <= FechaFin &&
                                            p.EstadoAgenda == "V" &&
                                            (IdAgente == null || p.IdAgente == IdAgente)).OrderBy(p => p.FechaInicioGestion).ToList();

            var listAgente = listAgenda.Select(p => p.IdAgente).Distinct();

            foreach (var currentIdAgente in listAgente)
            {
                var list = listAgenda.Where(p => p.IdAgente == currentIdAgente).ToList();

                list.ForEach(p => p.Ubicacion = String.Format("{0}|{1}|{2}", p.FechaInicioGestion.Value.ToString("HH:mm"), p.Latitud, p.Longitud));

                list.ForEach(p => p.Reportes = 1);

                foreach (var item in list)
                {
                    string titulo = String.Empty;
                    string tiempo = String.Empty;

                    double TotalMinutes = 0;

                    if (item.FechaFinGestion == null || item.FechaInicioGestion.Value.ToString("HH:mm") == item.FechaFinGestion.Value.ToString("HH:mm"))
                    {
                        titulo = item.FechaInicioGestion.Value.ToString("HH:mm");
                    }
                    else
                    {
                        titulo = String.Format("{0} - {1}", item.FechaInicioGestion.Value.ToString("HH:mm"), item.FechaFinGestion.Value.ToString("HH:mm"));

                        var dif = item.FechaFinGestion.Value - item.FechaInicioGestion.Value;

                        TotalMinutes = dif.TotalMinutes;

                        if (dif.Hours > 0)
                        {
                            tiempo = String.Format("{0} H.", dif.Hours);
                        }

                        if (dif.Minutes > 0)
                        {
                            if (!String.IsNullOrEmpty(tiempo))
                            {
                                tiempo += ", ";
                            }

                            tiempo += String.Format("{0} Min.", dif.Minutes);
                        }

                        if (!String.IsNullOrEmpty(tiempo))
                        {
                            titulo = String.Format("{0} ({1})", titulo, tiempo);
                        }
                    }
                    model.Add(new InformeTrazabilidad()
                    {
                        IdInformeTrazabilidad = index,
                        IdAgente     = currentIdAgente,
                        Fecha        = item.FechaInicioGestion.Value.Date,
                        HoraEntrada  = item.FechaInicioGestion.Value.ToString("HH:mm"),
                        Tiempo       = !String.IsNullOrEmpty(tiempo) ? tiempo : "0 min.",
                        HoraSalida   = item.FechaFinGestion.HasValue ? item.FechaFinGestion.Value.ToString("HH:mm") : string.Empty,
                        Distancia    = 0.00D,
                        EsMovimiento = false,
                        Minutos      = TotalMinutes,
                        Ubicacion    = item.Ubicacion.Replace(',', '.'),
                        Direccion    = item.DireccionTrazabilidad,
                        Latitud      = item.Latitud ?? 0,
                        Longitud     = item.Longitud ?? 0,
                        TipoTabla    = Constantes.TipoEntradaTrazabilidad.Tabla,
                        Tipo         = Constantes.TipoEntradaTrazabilidad.Gestion,
                        IdRuta       = item.IdRuta,
                        IdAgenda     = item.IdAgenda
                    });

                    index++;
                }
            }
            if (insert)
            {
                model.ForEach(p => db.InformeTrazabilidads.Insert(p));
                db.Save();
            }

            return(model);
        }
Ejemplo n.º 3
0
        private static List <InformeTrazabilidad> TrazabilidadUbicacionesProcess(ContextService db, bool insert = false, int?IdAgente = null, DateTime?FechaInicio = null, DateTime?FechaFin = null, bool?totalizar = false)
        {
            long index = InformeTrazabilidad.Max();

            List <InformeTrazabilidad> model = new List <InformeTrazabilidad>();

            var listUbicacion = db.AgenteUbicaciones.Get(p =>
                                                         p.Fecha >= FechaInicio && p.Fecha <= FechaFin &&
                                                         (IdAgente == null || p.IdAgente == IdAgente)).OrderBy(p => p.Fecha).ToList();

            var listAgente = listUbicacion.Select(p => p.IdAgente).Distinct();

            db.ParametroHelper.Load();

            foreach (var currentIdAgente in listAgente)
            {
                var list = listUbicacion.Where(p => p.IdAgente == currentIdAgente).ToList();

                foreach (var item in list)
                {
                    item.Ubicacion = String.Format("{0}|{1}|{2}", item.Fecha.ToString("HH:mm"), item.Latitud, item.Longitud);
                }


                foreach (var item in list)
                {
                    item.Reportes = 1;
                }

                for (int i = list.Count - 1; i > 0; i--)
                {
                    var actual   = list[i];
                    var anterior = list[i - 1];

                    if (actual.Latitud == anterior.Latitud && actual.Longitud == anterior.Longitud)
                    {
                        if (actual.FechaHasta == null)
                        {
                            anterior.FechaHasta = actual.Fecha;
                        }
                        else
                        {
                            anterior.FechaHasta = actual.FechaHasta;
                        }

                        anterior.Reportes += actual.Reportes;

                        list.Remove(actual);
                    }
                    else
                    {
                        var distance = Ubicacion.Distance(actual.Longitud ?? 0, actual.Latitud ?? 0, anterior.Longitud ?? 0, anterior.Latitud ?? 0);

                        anterior.Distancia += distance;

                        if (distance < db.ParametroHelper.RoutedDistance)//0.050)
                        {
                            if (actual.FechaHasta == null)
                            {
                                anterior.FechaHasta = actual.Fecha;
                            }
                            else
                            {
                                anterior.FechaHasta = actual.FechaHasta;
                            }

                            anterior.Reportes += actual.Reportes;

                            list.Remove(actual);
                        }
                    }
                }

                foreach (var item in list)
                {
                    if (item.FechaHasta != null && item.Fecha.ToString("yyyy-MM-dd HH:mm") == item.FechaHasta.Value.ToString("yyyy-MM-dd HH:mm"))
                    {
                        item.FechaHasta = item.Fecha;
                    }

                    if (item.Reportes == 1 || item.FechaHasta == null || item.Fecha == item.FechaHasta ||
                        (item.FechaHasta.Value - item.Fecha).TotalMinutes < db.ParametroHelper.MinutosIntervaloTrackingPosition)
                    {
                        item.EsMovimiento = true;
                    }
                }

                for (int i = list.Count - 1; i > 0; i--)
                {
                    var actual   = list[i];
                    var anterior = list[i - 1];

                    if (actual.EsMovimiento && anterior.EsMovimiento)//if (actual.Reportes == 1 && anterior.Reportes == 1)
                    {
                        if (actual.FechaHasta == null)
                        {
                            anterior.FechaHasta = actual.Fecha;
                        }
                        else
                        {
                            anterior.FechaHasta = actual.FechaHasta;
                        }

                        anterior.Distancia += actual.Distancia;
                        //anterior.Reportes += actual.Reportes;

                        anterior.Ubicacion = String.Format("{0}~{1}", anterior.Ubicacion, actual.Ubicacion);

                        list.Remove(actual);
                    }
                }

                for (int i = 0; i < list.Count; i++)
                {
                    AgenteUbicacion anterior  = null;
                    AgenteUbicacion siguiente = null;

                    AgenteUbicacion actual = list[i];

                    if (actual.EsMovimiento)
                    {
                        if (i - 1 >= 0)
                        {
                            anterior = list[i - 1];
                        }

                        if (i + 1 < list.Count)
                        {
                            siguiente = list[i + 1];
                        }

                        if (anterior != null)
                        {
                            actual.Fecha = anterior.FechaHasta ?? anterior.Fecha;
                            //actual.Ubicacion = String.Format("{0}~{1}", anterior.Ubicacion, actual.Ubicacion);

                            var array = anterior.Ubicacion.Split('~');

                            actual.Ubicacion = String.Format("{0}~{1}", array[array.Count() - 1], actual.Ubicacion);
                        }

                        if (siguiente != null)
                        {
                            var array = siguiente.Ubicacion.Split('~');

                            actual.FechaHasta = siguiente.Fecha;
                            //actual.Ubicacion = String.Format("{0}~{1}", actual.Ubicacion, siguiente.Ubicacion);
                            actual.Ubicacion = String.Format("{0}~{1}", actual.Ubicacion, array[0]);
                        }
                    }
                }

                for (int i = 0; i < list.Count; i++)
                {
                    AgenteUbicacion siguiente = null;
                    AgenteUbicacion actual    = list[i];

                    if (!actual.EsMovimiento)
                    {
                        if (i + 1 < list.Count)
                        {
                            siguiente = list[i + 1];
                        }

                        if (siguiente != null && !siguiente.EsMovimiento)
                        {
                            var distance = Ubicacion.Distance(actual.Longitud ?? 0, actual.Latitud ?? 0, siguiente.Longitud ?? 0, siguiente.Latitud ?? 0);

                            var movimiento = new AgenteUbicacion()
                            {
                                IdAgente   = actual.IdAgente,
                                Fecha      = actual.FechaHasta ?? actual.Fecha,
                                FechaHasta = siguiente.Fecha,
                                Distancia  = distance,
                                Latitud    = actual.Latitud,
                                Longitud   = actual.Longitud,
                                Ubicacion  = String.Format("{0}|{1}|{2}~{3}|{4}|{5}",
                                                           actual.Fecha.ToString("HH:mm"), actual.Latitud, actual.Longitud,
                                                           siguiente.Fecha.ToString("HH:mm"), siguiente.Latitud, siguiente.Longitud),
                                EsMovimiento = true
                            };

                            list.Insert(i + 1, movimiento);
                        }
                    }
                }

                foreach (var item in list)
                {
                    string titulo = String.Empty;
                    string tiempo = String.Empty;

                    double TotalMinutes = 0;

                    if (item.FechaHasta == null || item.Fecha.ToString("HH:mm") == item.FechaHasta.Value.ToString("HH:mm"))
                    {
                        titulo = item.Fecha.ToString("HH:mm");
                    }
                    else
                    {
                        titulo = String.Format("{0} - {1}", item.Fecha.ToString("HH:mm"), item.FechaHasta.Value.ToString("HH:mm"));

                        var dif = item.FechaHasta.Value - item.Fecha;

                        TotalMinutes = dif.TotalMinutes;

                        if (dif.Hours > 0)
                        {
                            tiempo = String.Format("{0} H.", dif.Hours);
                        }

                        if (dif.Minutes > 0)
                        {
                            if (!String.IsNullOrEmpty(tiempo))
                            {
                                tiempo += ", ";
                            }

                            tiempo += String.Format("{0} Min.", dif.Minutes);
                        }

                        if (!String.IsNullOrEmpty(tiempo))
                        {
                            titulo = String.Format("{0} ({1})", titulo, tiempo);
                        }
                    }

                    model.Add(new InformeTrazabilidad()
                    {
                        IdInformeTrazabilidad = index,
                        IdAgente     = currentIdAgente,
                        Fecha        = item.Fecha.Date,
                        HoraEntrada  = item.Fecha.ToString("HH:mm"),
                        Tiempo       = !String.IsNullOrEmpty(tiempo) ? tiempo : "0 min.",
                        HoraSalida   = item.FechaHasta != null ? item.FechaHasta.Value.ToString("HH:mm") : item.Fecha.ToString("HH:mm"),
                        Distancia    = item.Distancia,
                        EsMovimiento = item.EsMovimiento,
                        Minutos      = TotalMinutes,
                        Ubicacion    = item.Ubicacion.Replace(',', '.'),
                        Latitud      = item.Latitud ?? 0,
                        Longitud     = item.Longitud ?? 0,
                        TipoTabla    = Constantes.TipoEntradaTrazabilidad.Tabla,
                        Tipo         = item.EsMovimiento ? Constantes.TipoEntradaTrazabilidad.EnMovimiento : Constantes.TipoEntradaTrazabilidad.Detenido
                    });

                    index++;
                }
            }

            if (totalizar.HasValue && !totalizar.Value)
            {
                foreach (var item in model.Where(p => !p.EsMovimiento))
                {
                    item.Direccion = Process.RutaOptima.GetAddress(item.Latitud, item.Longitud);
                }
            }

            if (insert)
            {
                db.AgenteUbicaciones.DeleteInformeTrazabilidad(FechaInicio.Value, FechaFin.Value);

                foreach (var item in model)
                {
                    db.InformeTrazabilidads.Insert(item);
                }

                db.Save();
            }

            return(model);
        }