Пример #1
0
        public ActionResult GetUbicaciones(int?idAgente, long?fecha, bool incluirClientes, bool incluirRecorrido, bool incluirGestion)
        {
            RecorridoAgenteResult result = new RecorridoAgenteResult();

            result.IdAgente  = idAgente;
            result.Clientes  = new List <ClienteAgendaUbicacion>();
            result.Recorrido = new List <Ubicacion>();

            result.RadioDistancia   = 100;
            result.Fecha            = new DateTime(fecha ?? 0);
            result.IncluirGestion   = incluirGestion;
            result.IncluirClientes  = incluirClientes;
            result.IncluirRecorrido = incluirRecorrido;

            if (idAgente != null && fecha != null)
            {
                DateTime fechaConsulta = new DateTime(fecha ?? 0);

                try
                {
                    List <Ubicacion> model = new List <Ubicacion>();

                    DateTime fechaFin    = fechaConsulta.AddDays(1).Date.AddSeconds(-1);
                    DateTime fechaInicio = fechaConsulta.Date;

                    if (incluirRecorrido)
                    {
                        var agenteUbicaciones = DataBase.AgenteUbicaciones.Get(p =>
                                                                               p.Fecha >= fechaInicio && p.Fecha <= fechaFin &&
                                                                               p.IdAgente == idAgente).OrderBy(p => p.Fecha).ToList();

                        DataBase.ParametroHelper.Load();

                        result.RadioDistancia = DataBase.ParametroHelper.VisitDistance;

                        model = Ubicacion.Recorrido(agenteUbicaciones, DataBase.ParametroHelper.RoutedDistance);

                        result.Recorrido.AddRange(model);
                    }

                    if (incluirClientes || incluirGestion)
                    {
                        var agente = DataBase.Agentes.GetByID(idAgente);

                        if (agente != null && agente.IdRuta != null)
                        {
                            var agendas = DataBase.Agendas.Get(p => p.IdRuta == agente.IdRuta &&
                                                               p.FechaInicio >= fechaInicio && p.FechaInicio <= fechaFin &&
                                                               p.EstadoAgenda != Models.Constantes.EstadoAgenda.Eliminado, includeProperties:
                                                               "ClienteDireccion.Cliente,EstadoAgendaGeneralValue,ClienteContacto");


                            foreach (var item in agendas)
                            {
                                ClienteAgendaUbicacion app = new ClienteAgendaUbicacion()
                                {
                                    Latitud            = item.ClienteDireccion.Latitud,
                                    Longitud           = item.ClienteDireccion.Longitud,
                                    MarkerIndex        = 0,
                                    Estado             = item.EstadoAgendaGeneralValue.Content,
                                    ColorEstado        = item.EstadoAgendaGeneralValue.Reference01,
                                    Direccion          = item.ClienteDireccion.DescriptionName,
                                    Fecha              = item.FechaInicio.Value,
                                    FechaInicioGestion = item.FechaInicioGestion,
                                    FechaFinGestion    = item.FechaFinGestion,
                                    IdAgenda           = item.IdAgenda,
                                    IdRuta             = item.IdRuta,
                                    LongitudGestion    = item.Longitud,
                                    LatitudGestion     = item.Latitud
                                };

                                if (item.EstadoAgenda == Models.Constantes.EstadoAgenda.NoVisitado)
                                {
                                    app.Advertencia = true;
                                }

                                if (item.EstadoAgenda == Models.Constantes.EstadoAgenda.Visitada)
                                {
                                    app.Realizada = true;
                                }

                                if (app.LongitudGestion.HasValue && app.LatitudGestion.HasValue && app.Latitud.HasValue && app.Longitud.HasValue && app.LongitudGestion != 0 && app.LatitudGestion != 0)
                                {
                                    app.DistanciaGestion = Ubicacion.Distance(app.LongitudGestion.Value, app.LatitudGestion.Value, app.Longitud.Value, app.Latitud.Value) * 1000;//Transformar a metros
                                }
                                if (app.DistanciaGestion.HasValue && app.DistanciaGestion > 0 && app.DistanciaGestion > result.RadioDistancia)
                                {
                                    app.Advertencia = true;
                                }

                                if (app.Realizada && (app.LongitudGestion.HasValue || app.LongitudGestion == 0))
                                {
                                    app.Advertencia = true;
                                }

                                if (item.ClienteContacto != null)
                                {
                                    app.Titulo = item.ClienteContacto.NombresCompletos;
                                }
                                else
                                {
                                    app.Titulo = item.ClienteDireccion.Cliente.NombresCompletos;
                                }

                                if (item.ClienteContacto != null && !string.IsNullOrEmpty(item.ClienteContacto.FotoMin))
                                {
                                    app.FotoPath = item.ClienteContacto.FotoMin;
                                }
                                else if (!string.IsNullOrEmpty(item.ClienteDireccion.Cliente.FotoMin))
                                {
                                    app.FotoPath = item.ClienteDireccion.Cliente.FotoMin;
                                }


                                result.Clientes.Add(app);
                            }
                        }
                    }

                    return(PartialView("_Map", result));
                }
                catch
                {
                    this.AddDefaultErrorMessage();
                }
            }

            return(PartialView("_Map", result));
        }