public Task <List <SubItemCampoEventoLogistico> > SeleccionarSubItemsPorCamposEvento(int?idItem, bool consultaLocal = true)
        {
            Task <List <SubItemCampoEventoLogistico> > subItemsCampo;

            if (consultaLocal)
            {
                EventoLogisticoDAO dao = new EventoLogisticoDAO();
                subItemsCampo = Task.FromResult(dao.SeleccionarSubItemsPorCamposEvento(idItem));
            }
            else
            {
                DataService.AppDataService ds = new DataService.AppDataService(ParametrosSistema.TokenUsuarioActual);
                string url = "Evento/SeleccionarSubItemsPorItem";
                if (idItem.HasValue)
                {
                    url += "?idItem=" + idItem.Value.ToString();
                }
                else
                {
                    url += "?idItem=";
                }
                subItemsCampo = ds.RealizarPeticionApi <List <SubItemCampoEventoLogistico> >(url, DataService.TipoPeticionApi.Get);
            }
            return(subItemsCampo);
        }
Example #2
0
        public List <Entrega> SeleccionarEntregasPorTransporteSinEventoLogistico(long numeroManifiesto, int idTipoEvento)
        {
            List <Entrega> entregas = new List <Entrega>();

            entregas = this.SeleccionarEntregasPorTransporte(numeroManifiesto);

            if (entregas != null)
            {
                EventoLogisticoDAO eventoDAO = new EventoLogisticoDAO();
                //Se consultan los eventos registrados
                List <EventoLogistico> eventos = new List <EventoLogistico>();
                eventos = eventoDAO.SeleccionarEventosLogisticos(numeroManifiesto);

                //se tiene en cuenta únicamente los eventos del tipo indicado
                var eventosPreviosRegistrados = (from e in eventos
                                                 where e.IdTipoEvento == idTipoEvento &&
                                                 e.Estado == "S"
                                                 select e).DefaultIfEmpty().ToList();

                if (eventosPreviosRegistrados != null && eventosPreviosRegistrados[0] != null)
                {
                    var codigosEntregas = (from e in eventosPreviosRegistrados
                                           select e.campo1).ToList();

                    //se consulta las entregas a las que les la falta registrar el tipo de evento
                    entregas = (from e in entregas
                                where !codigosEntregas.Contains(e.NumeroEntrega.ToString())
                                select e).ToList();
                }
            }


            return(entregas);
        }
        public List <EventoLogistico> SeleccionarEventosLogisticos(long?numeroManifiesto, string estado = "S", int?codigoTipoEvento = null, bool consultaLocal = true)
        {
            EventoLogisticoDAO dao = new EventoLogisticoDAO();

            return(dao.SeleccionarEventosLogisticos(numeroManifiesto, estado, codigoTipoEvento).
                   Where(d => d.NombreTipoEvento != null).ToList());
        }
        public Task <List <ItemCampoEventoLogistico> > SeleccionarItemsPorCamposEvento(int?codigoEvento, string campoEvento, bool consultaLocal = true)
        {
            Task <List <ItemCampoEventoLogistico> > itemsCampo;

            if (consultaLocal)
            {
                EventoLogisticoDAO dao = new EventoLogisticoDAO();
                itemsCampo = Task.FromResult(dao.SeleccionarItemsPorCamposEvento(codigoEvento, campoEvento));
            }
            else
            {
                DataService.AppDataService ds = new DataService.AppDataService(ParametrosSistema.TokenUsuarioActual);
                string url = "Evento/SeleccionarItemsPorCamposEvento";
                if (codigoEvento.HasValue && !String.IsNullOrEmpty(campoEvento))
                {
                    url += "?tipoEvento=" + codigoEvento.Value.ToString() + "&campoEvento=" + campoEvento;
                }
                else
                {
                    url += "?tipoEvento=&campoEvento=";
                }
                itemsCampo = ds.RealizarPeticionApi <List <ItemCampoEventoLogistico> >(url, DataService.TipoPeticionApi.Get);
            }
            return(itemsCampo);
        }
        public EventoLogistico SeleccionarEventosLogisticoporID(Int64 idEvento)
        {
            EventoLogisticoDAO     eventoDAO = new EventoLogisticoDAO();
            List <EventoLogistico> eventos   = eventoDAO.SeleccionarEventosLogisticoporID(idEvento);
            EventoLogistico        evento    = new EventoLogistico();

            if (eventos != null && eventos.Count > 0)
            {
                evento = eventos[0];
            }

            return(evento);
        }
        public Task <List <CampoEventoLogistico> > SeleccionarCamposPorEvento(int?codigoEvento, bool consultaLocal = true)
        {
            Task <List <CampoEventoLogistico> > campos;

            if (consultaLocal)
            {
                EventoLogisticoDAO dao = new EventoLogisticoDAO();
                campos = Task.FromResult(dao.SeleccionarCamposPorEvento(codigoEvento));
            }
            else
            {
                DataService.AppDataService ds = new DataService.AppDataService(ParametrosSistema.TokenUsuarioActual);
                string url = "Evento/SeleccionarCamposporEvento";
                if (codigoEvento.HasValue)
                {
                    url += "?TipoEvento=" + codigoEvento.Value.ToString();
                }
                campos = ds.RealizarPeticionApi <List <CampoEventoLogistico> >(url, DataService.TipoPeticionApi.Get);//.ConfigureAwait(false);
            }
            return(campos);
        }
        public Task <List <JerarquiaTipoEventoLogistico> > SeleccionarJerarquiaTipoEventosLogisticos(bool consultaLocal = true, bool?aplicaTerceros = null)
        {
            Task <List <JerarquiaTipoEventoLogistico> > jerarquia;

            if (consultaLocal)
            {
                EventoLogisticoDAO dao = new EventoLogisticoDAO();
                jerarquia = Task.FromResult(dao.SeleccionarJerarquiaTipoEventosLogisticos());
            }
            else
            {
                DataService.AppDataService ds = new DataService.AppDataService(ParametrosSistema.TokenUsuarioActual);

                string url = "Evento/SeleccionarJerarquiaTipoEventosLogisticos";
                if (aplicaTerceros.HasValue && aplicaTerceros.Value)
                {
                    url = "Evento/SeleccionarJerarquiaTipoEventosLogisticos?aplicaTerceros=" + aplicaTerceros.Value;
                }

                jerarquia = ds.RealizarPeticionApi <List <JerarquiaTipoEventoLogistico> >(url, DataService.TipoPeticionApi.Get);
            }
            return(jerarquia);
        }
        public Task <List <TipoEventoLogistico> > SeleccionarEventosTipoOtros(Int64 numeromanifiesto, bool consultaLocal = true, bool?aplicaTerceros = null)
        {
            Task <List <TipoEventoLogistico> > tipoeventos;

            if (consultaLocal)
            {
                EventoLogisticoDAO dao = new EventoLogisticoDAO();
                tipoeventos = Task.FromResult(dao.SeleccionarEventosTipoOtros(numeromanifiesto, aplicaTerceros));
            }
            else
            {
                DataService.AppDataService ds = new DataService.AppDataService(ParametrosSistema.TokenUsuarioActual);

                string url = "Evento/SeleccionarEventoTipoOtros?numeroTransporte=" + numeromanifiesto.ToString();

                if (aplicaTerceros.HasValue && aplicaTerceros.Value)
                {
                    url = url + "&aplicaTerceros=" + aplicaTerceros.Value;
                }

                tipoeventos = ds.RealizarPeticionApi <List <TipoEventoLogistico> >(url, DataService.TipoPeticionApi.Get);
            }
            return(tipoeventos);
        }
        public Task <List <TipoEventoLogistico> > SeleccionarTiposEventoLogistico(bool consultaLocal = true, bool?aplicaTerceros = null)
        {
            Task <List <TipoEventoLogistico> > tiposEvento = null;

            if (consultaLocal)
            {
                EventoLogisticoDAO dao = new EventoLogisticoDAO();
                tiposEvento = Task.FromResult(dao.SeleccionarTiposEventoLogistico(aplicaTerceros));
            }
            else
            {
                DataService.AppDataService ds = new DataService.AppDataService(ParametrosSistema.TokenUsuarioActual);
                if (aplicaTerceros.HasValue && aplicaTerceros.Value)
                {
                    tiposEvento = ds.RealizarPeticionApi <List <TipoEventoLogistico> >("Evento/SeleccionarTiposEventosLogisticos?aplicaTerceros=" + aplicaTerceros, DataService.TipoPeticionApi.Get);
                }
                else
                {
                    tiposEvento = ds.RealizarPeticionApi <List <TipoEventoLogistico> >("Evento/SeleccionarTiposEventosLogisticos", DataService.TipoPeticionApi.Get);
                }
                return(tiposEvento);
            }
            return(tiposEvento);
        }
        public void EliminarEventoLogisticoLocalPorManifiesto(long numeroManifiesto)
        {
            EventoLogisticoDAO dao = new EventoLogisticoDAO();

            dao.EliminarEventoLogisticoLocalPorManifiesto(numeroManifiesto);
        }
        public int EliminarEventoLogisticoLocal(int idApp)
        {
            EventoLogisticoDAO dao = new EventoLogisticoDAO();

            return(dao.EliminarEventoLogistico(idApp));
        }
        public List <EventoLogistico> SeleccionarEventosPendientesSincronizar()
        {
            EventoLogisticoDAO dao = new EventoLogisticoDAO();

            return(dao.SeleccionarEventosPendientesSincronizar());
        }
        public async Task <RespuestaProcesoEventoLogistico> GuardarEventoLogistico(EventoLogistico evento)
        {
            RespuestaProcesoEventoLogistico respuesta = new RespuestaProcesoEventoLogistico();



            if (await ParametrosSistema.isOnline)
            {
                DataService.AppDataService ds = new DataService.AppDataService(ParametrosSistema.TokenUsuarioActual);
                respuesta = await ds.RealizarPeticionApi <RespuestaProcesoEventoLogistico>("Evento/GuardarEventoLogistico", DataService.TipoPeticionApi.Post, evento);

                evento.ID                  = respuesta.IdEvento;
                evento.Sincronizado        = true;
                evento.FechaSincronizacion = DateTime.Now;
                if (respuesta.ProcesadoCorrectamente == false)
                {
                    evento.Estado = "E";
                    evento.ErrorSincronizacion = respuesta.Respuesta;
                }
                else
                {
                    evento.Estado = "S";
                }
            }
            else
            {
                evento.Sincronizado = false;
                respuesta.ProcesadoCorrectamente = true;
                respuesta.Respuesta = "Se ha guardado el evento en la memoria interna del teléfono.";
            }

            //Se determina si se debe guardar el evento en la base de datos local
            EventoLogisticoDAO eventoDAO = new EventoLogisticoDAO();

            eventoDAO.GuardarEventoLogistico(evento);

            //Si es un evento de activación se debe registrar el manifiesto en el historial de activaciones
            if (evento.IdTipoEvento == (int)TipoEventoLogisticoEnum.ActivarViaje)
            {
                if (respuesta.ProcesadoCorrectamente == true)
                {
                    Transporte transporte = new Transporte();
                    HistorialActivacionManifiesto historial = new HistorialActivacionManifiesto();

                    historial.Sincronizado        = true;
                    historial.FechaSincronizacion = DateTime.Now;
                    historial.Activo            = true;
                    historial.FechaActivacion   = evento.FechaEvento;
                    historial.UsuarioActivacion = ParametrosSistema.UsuarioActual;
                    TransporteBLL transporteBLL = new TransporteBLL();
                    transporte = await transporteBLL.SeleccionarTransporte(evento.NumeroManifiesto);

                    //if (await ParametrosSistema.isOnline)
                    //{
                    //    historial.Sincronizado = true;
                    //    historial.FechaSincronizacion = DateTime.Now;

                    //    TransporteBLL transporteBLL = new TransporteBLL();
                    //    transporte = await transporteBLL.SeleccionarTransporte(evento.NumeroManifiesto);

                    //}
                    //else
                    //{
                    //    historial.Sincronizado = false;
                    //    transporte.NumeroDocConductor = Convert.ToInt32(ParametrosSistema.NumeroIdentificacionUsuarioActual);
                    //    transporte.NumeroTransporte = evento.NumeroManifiesto;
                    //}


                    //se guarda un registro en historial activación viaje
                    if (transporte != null)
                    {
                        historial.Placa = transporte.Placa;
                        historial.NumeroDocConductor = transporte.NumeroDocConductor.ToString();
                        historial.NombreRuta         = transporte.NombreRuta;
                        historial.NumeroManifiesto   = transporte.NumeroTransporte;
                        historial.ClaseTransporte    = transporte.ClaseTransporte;
                    }
                    else
                    {
                        historial.NumeroDocConductor = historial.UsuarioActivacion;
                    }
                    HistorialActivacionManifiestoDAO historialActivacionDAO = new HistorialActivacionManifiestoDAO();

                    //si en la bd local el conductor aun tiene un viaje activo, se elimina
                    HistorialActivacionManifiesto historialAnterior = historialActivacionDAO.SeleccionarHistorialManifiestoActivoPorConductor(evento.NumeroDocumentoConductor);
                    if (historialAnterior != null)
                    {
                        historialActivacionDAO.EliminarHistorialActivacionManifiesto(historialAnterior.NumeroManifiesto);
                    }

                    //se fuarda el registro de activacion viaje
                    historialActivacionDAO.GuardarHistorialActivacionManifiesto(historial);

                    //Se guardan las entregas del transporte
                    if (transporte != null && transporte.Entregas != null && transporte.Entregas.Count > 0)
                    {
                        EntregaBLL entregaBLL = new EntregaBLL();
                        foreach (Entrega entrega in transporte.Entregas)
                        {
                            entregaBLL.GuardarEntrega(entrega);
                        }
                    }
                }
                else if (evento.Sincronizado == true && evento.Estado == "E")
                {
                    //Si el evento se sincronizó pero devolvió error, se elimina el manifiesto del historial de activacion
                    HistorialActivacionManifiestoDAO historialActivacionDAO = new HistorialActivacionManifiestoDAO();
                    historialActivacionDAO.EliminarHistorialActivacionManifiesto(evento.NumeroManifiesto);
                }
            }
            else if (evento.IdTipoEvento == (int)TipoEventoLogisticoEnum.SuspenderViaje)
            {
                HistorialActivacionManifiestoBLL historialBLL = new HistorialActivacionManifiestoBLL();
                historialBLL.EliminarHistorialActivacionManifiesto(evento.NumeroManifiesto);
            }
            else if (evento.IdTipoEvento == (int)TipoEventoLogisticoEnum.ReanudarViaje)
            {
                Transporte transporte = new Transporte();
                HistorialActivacionManifiesto historial = new HistorialActivacionManifiesto();

                historial.Sincronizado        = true;
                historial.FechaSincronizacion = DateTime.Now;
                historial.Activo            = true;
                historial.FechaActivacion   = evento.FechaEvento;
                historial.UsuarioActivacion = ParametrosSistema.UsuarioActual;
                TransporteBLL transporteBLL = new TransporteBLL();
                transporte = await transporteBLL.SeleccionarTransporte(evento.NumeroManifiesto);

                if (transporte != null)
                {
                    historial.Placa = transporte.Placa;
                    historial.NumeroDocConductor = transporte.NumeroDocConductor.ToString();
                    historial.NombreRuta         = transporte.NombreRuta;
                    historial.NumeroManifiesto   = transporte.NumeroTransporte;
                    historial.ClaseTransporte    = transporte.ClaseTransporte;
                }
                else
                {
                    historial.NumeroDocConductor = historial.UsuarioActivacion;
                }
                HistorialActivacionManifiestoDAO historialActivacionDAO = new HistorialActivacionManifiestoDAO();

                //si en la bd local el conductor aun tiene un viaje activo, se elimina
                HistorialActivacionManifiesto historialAnterior = historialActivacionDAO.SeleccionarHistorialManifiestoActivoPorConductor(evento.NumeroDocumentoConductor);
                if (historialAnterior != null)
                {
                    historialActivacionDAO.EliminarHistorialActivacionManifiesto(historialAnterior.NumeroManifiesto);
                }

                //se guarda el registro de reanudación viaje
                historialActivacionDAO.GuardarHistorialActivacionManifiesto(historial);
            }
            else if (evento.IdTipoEvento == (int)TipoEventoLogisticoEnum.FinViaje)
            {
                HistorialActivacionManifiestoDAO historialActivacionDAO = new HistorialActivacionManifiestoDAO();
                var historialActivacion = historialActivacionDAO.SeleccionarHistorialActivacionManifiesto(evento.NumeroManifiesto);
                if (historialActivacion != null)
                {
                    if (evento.Sincronizado == false || respuesta.ProcesadoCorrectamente == true)
                    {
                        //Se debe marcar como finalizado el viaje
                        historialActivacion.Activo              = false;
                        historialActivacion.FechaInactivacion   = evento.FechaEvento;
                        historialActivacion.UsuarioInactivacion = evento.NumeroDocumentoConductor;
                        historialActivacionDAO.GuardarHistorialActivacionManifiesto(historialActivacion);
                    }
                    else if (evento.Sincronizado == true && evento.Estado == "E")
                    {
                        //Si el evento se sincronizó pero devolvió error, se elimina el manifiesto del historial de activacion
                        historialActivacion.Activo              = true;
                        historialActivacion.FechaInactivacion   = null;
                        historialActivacion.UsuarioInactivacion = null;
                        historialActivacionDAO.GuardarHistorialActivacionManifiesto(historialActivacion);
                    }
                }
            }
            return(respuesta);
        }
        public Task <List <Transporte> > SeleccionarTransporteHabilitadoRegistroEventos(bool consultaLocal = true, bool?tercero = null)
        {
            Task <List <Transporte> > transportesTask = null;

            if (consultaLocal)
            {
                List <Transporte>  transportes = new List <Transporte>();
                EventoLogisticoDAO dao         = new EventoLogisticoDAO();

                var eventosActivacionViaje = dao.SeleccionarEventosLogisticos(null, estado: null, codigoTipoEvento: (int)TipoEventoLogisticoEnum.ActivarViaje);
                var eventosInicioViaje     = dao.SeleccionarEventosLogisticos(null, estado: null, codigoTipoEvento: (int)TipoEventoLogisticoEnum.IniciaViaje);
                var eventosFinViaje        = dao.SeleccionarEventosLogisticos(null, estado: null, codigoTipoEvento: (int)TipoEventoLogisticoEnum.FinViaje);

                if (tercero.HasValue && tercero.Value)
                {
                    if (eventosInicioViaje != null && eventosInicioViaje.Count > 0)
                    {
                        //Si existen eventos de inicio viaje
                        eventosInicioViaje = eventosInicioViaje.OrderByDescending(e => e.FechaEvento).ToList();
                        if (eventosFinViaje == null || eventosFinViaje.Count <= 0)
                        {
                            //Si no existen eventos de fin viaje
                            Transporte transporte = new Transporte()
                            {
                                NumeroTransporte = eventosInicioViaje.First().NumeroManifiesto, NumeroDocConductor = Convert.ToInt32(eventosInicioViaje.First().NumeroDocumentoConductor), Placa = eventosInicioViaje.First().Placa
                            };
                            transportes.Add(transporte);
                        }
                        else
                        {
                            //SI existen eventos de fin viaje
                            eventosFinViaje = eventosFinViaje.OrderByDescending(e => e.FechaEvento).ToList();
                            if (eventosInicioViaje.First().FechaEvento > eventosFinViaje.First().FechaEvento)
                            {
                                Transporte transporte = new Transporte()
                                {
                                    NumeroTransporte = eventosInicioViaje.First().NumeroManifiesto, NumeroDocConductor = Convert.ToInt32(eventosInicioViaje.First().NumeroDocumentoConductor), Placa = eventosInicioViaje.First().Placa
                                };
                                transportes.Add(transporte);
                            }
                        }
                    }
                }
                else
                {
                    if (eventosActivacionViaje != null && eventosActivacionViaje.Count > 0)
                    {
                        //Si existen eventos de activación viaje
                        eventosActivacionViaje = eventosActivacionViaje.OrderByDescending(e => e.FechaEvento).ToList();
                        if (eventosFinViaje == null || eventosFinViaje.Count <= 0)
                        {
                            //Si no existen eventos de fin viaje
                            Transporte transporte = new Transporte()
                            {
                                NumeroTransporte = eventosActivacionViaje.First().NumeroManifiesto
                            };
                            transportes.Add(transporte);
                        }
                        else
                        {
                            //SI existen eventos de fin viaje
                            eventosFinViaje = eventosFinViaje.OrderByDescending(e => e.FechaEvento).ToList();
                            if (eventosActivacionViaje.First().FechaEvento > eventosFinViaje.First().FechaEvento)
                            {
                                Transporte transporte = new Transporte()
                                {
                                    NumeroTransporte = eventosActivacionViaje.First().NumeroManifiesto, Placa = eventosActivacionViaje.First().Placa
                                };
                                transportes.Add(transporte);
                            }
                        }
                    }
                }

                transportesTask = Task.FromResult(transportes);
            }
            else
            {
                DataService.AppDataService ds = new DataService.AppDataService(ParametrosSistema.TokenUsuarioActual);
                if (tercero.HasValue && tercero.Value)
                {
                    transportesTask = ds.RealizarPeticionApi <List <Transporte> >("Evento/SeleccionarTransportesHabilitadosRegistroEventos?tercero=" + tercero.Value, DataService.TipoPeticionApi.Get);
                }
                else
                {
                    transportesTask = ds.RealizarPeticionApi <List <Transporte> >("Evento/SeleccionarTransportesHabilitadosRegistroEventos", DataService.TipoPeticionApi.Get);
                }
            }
            return(transportesTask);
        }
        public async Task <List <TipoEventoLogistico> > SeleccionarSiguienteEventoporManifiesto(Int64 numeroManifiesto, bool consultaLocal = false)
        {
            List <TipoEventoLogistico> eventosSucesores = new List <TipoEventoLogistico>();
            Util util = new Util();
            bool?usuarioTipoTercero = null;

            if (util.UsuarioTienePermiso("eventoslogisticosterceros"))
            {
                usuarioTipoTercero = true;
            }

            if (consultaLocal)
            {
                string numeroIdentificacionConductor          = string.Empty;
                List <TipoEventoLogistico> tipoEventos        = new List <TipoEventoLogistico>();
                List <EventoLogistico>     eventosRegistrados = new List <EventoLogistico>();

                EventoLogisticoDAO dao = new EventoLogisticoDAO();
                List <JerarquiaTipoEventoLogistico> jerarquiaTipoEventos = new List <JerarquiaTipoEventoLogistico>();

                EventoLogistico     ultimoEventoRegistrado = null;
                TipoEventoLogistico ultimoTipoEvento       = new TipoEventoLogistico();
                tipoEventos = await this.SeleccionarTiposEventoLogistico(consultaLocal : true, aplicaTerceros : usuarioTipoTercero);

                if ((usuarioTipoTercero.HasValue && !usuarioTipoTercero.Value) || !usuarioTipoTercero.HasValue)
                {
                    //Se consulta si tiene jornada laboral activa
                    var             eventosInicioJornada = dao.SeleccionarEventosLogisticos(numeroManifiesto: null, estado: null, codigoTipoEvento: (int)TipoEventoLogisticoEnum.InicioJornada);
                    var             eventosFinJornada    = dao.SeleccionarEventosLogisticos(numeroManifiesto: null, estado: null, codigoTipoEvento: (int)TipoEventoLogisticoEnum.FinJornada);
                    EventoLogistico ultimoInicioJornada  = null;
                    EventoLogistico ultimoFinJornada     = null;
                    if (eventosInicioJornada != null && eventosInicioJornada.Count > 0)
                    {
                        eventosInicioJornada = eventosInicioJornada.OrderByDescending(e => e.FechaEvento).ToList();
                        ultimoInicioJornada  = eventosInicioJornada.DefaultIfEmpty(null).Where(e => String.IsNullOrEmpty(e.Estado) || e.Estado != "E").FirstOrDefault();
                    }
                    if (eventosFinJornada != null && eventosFinJornada.Count > 0)
                    {
                        eventosFinJornada = eventosFinJornada.OrderByDescending(e => e.FechaEvento).ToList();
                        ultimoFinJornada  = eventosFinJornada.DefaultIfEmpty(null).Where(e => String.IsNullOrEmpty(e.Estado) || e.Estado != "E").FirstOrDefault();
                    }
                    bool existeJornadaLaboral = false;
                    if (ultimoInicioJornada != null)
                    {
                        if (ultimoFinJornada == null)
                        {
                            existeJornadaLaboral = true;
                        }
                        else
                        {
                            //SI existe algún evento de fin jornada registrado, se debe validar que sea anterior al ultimo inicio de jornada
                            if (ultimoFinJornada.FechaEvento < ultimoInicioJornada.FechaEvento)
                            {
                                existeJornadaLaboral = true;
                            }
                        }
                    }

                    if (existeJornadaLaboral == false)
                    {
                        //Si no tiene jornada laboral activa se le muestra únicamente el evento de inicio jornada
                        eventosSucesores = tipoEventos.Where(t => t.CodigoEvento == (int)TipoEventoLogisticoEnum.InicioJornada ||
                                                             t.CodigoEvento == (int)TipoEventoLogisticoEnum.Otro).ToList();
                        return(eventosSucesores);
                    }
                }
                if (numeroManifiesto == 0)
                {
                    eventosSucesores = dao.SeleccionarEventosSucesores(0);
                    if (eventosSucesores != null)
                    {
                        eventosSucesores = eventosSucesores.Where(e => e.TransporteObligatorio == false).ToList();
                    }
                }
                else
                {
                    eventosRegistrados = SeleccionarEventosLogisticos(numeroManifiesto, consultaLocal: true, estado: null);


                    jerarquiaTipoEventos = await SeleccionarJerarquiaTipoEventosLogisticos(consultaLocal : true);

                    if (eventosRegistrados != null && eventosRegistrados.Count > 0)
                    {
                        //Se excluyen los eventos con error
                        eventosRegistrados = eventosRegistrados.Where(e => String.IsNullOrEmpty(e.Estado) || e.Estado != "E").OrderByDescending(e => e.FechaEvento).ToList();

                        ultimoEventoRegistrado = (from e in eventosRegistrados
                                                  select e).FirstOrDefault();
                    }
                    if (ultimoEventoRegistrado != null)
                    {
                        eventosSucesores = ValidarEventosLogisticosSucesoresPorUltimoEvento(ultimoEventoRegistrado, eventosRegistrados, tipoEventos, numeroManifiesto);

                        if (eventosSucesores != null && eventosSucesores.Count > 0)
                        {
                            return(eventosSucesores);
                        }

                        ultimoTipoEvento = (from t in tipoEventos
                                            where t.CodigoEvento == ultimoEventoRegistrado.IdTipoEvento
                                            select t).FirstOrDefault();

                        if (ultimoTipoEvento.EventoTipoOtros && eventosRegistrados.Count == 1)
                        {
                            //Solo se ha registrado un evento y es de tipo "Otros"
                            eventosSucesores = dao.SeleccionarEventosSucesores(0);
                        }
                        else if (ultimoTipoEvento.EventoTipoOtros && eventosRegistrados.Count > 1)
                        {
                            List <EventoLogistico> eventosRegistradosTipoOtros = new List <EventoLogistico>();
                            //Se valida si el anterior evento registrado es de tipo otros con restriccion
                            //7,14,19: Parada, Entrada Taller, Inicio jornada respectivamente
                            eventosRegistradosTipoOtros = (from e in eventosRegistrados
                                                           join t in tipoEventos on e.IdTipoEvento equals t.CodigoEvento
                                                           where t.EventoTipoOtros && ParametrosSistema.EventoTipoOtroconRestriccion.Contains(t.CodigoEvento)
                                                           orderby e.FechaEvento descending
                                                           select e).ToList();
                            if (eventosRegistradosTipoOtros != null && eventosRegistradosTipoOtros.Count > 0)
                            {
                                var grupoEventosRegistradosTipoOtros = eventosRegistradosTipoOtros.GroupBy(e => e.IdTipoEvento);

                                foreach (IGrouping <int, EventoLogistico> grupo in grupoEventosRegistradosTipoOtros)
                                {
                                    int cantidad = grupo.Count();
                                    var eventoTipoRestriccion = (from j in jerarquiaTipoEventos
                                                                 where j.CodigoEventoPredecesor == grupo.Key
                                                                 select j).FirstOrDefault();
                                    if (eventoTipoRestriccion != null)
                                    {
                                        int cantidadeventoTipoRestriccion = (from e in eventosRegistrados
                                                                             where e.IdTipoEvento == eventoTipoRestriccion.CodigoEvento
                                                                             select e).Count();
                                        if (cantidad > cantidadeventoTipoRestriccion)
                                        {
                                            eventosSucesores = dao.SeleccionarEventosSucesores(grupo.Key);
                                        }
                                    }
                                }

                                if (eventosSucesores.Count() == 0)
                                {
                                    //eventosRegistrados = eventosRegistrados.OrderByDescending(x => x.FechaEvento).OrderByDescending(x => x.ID).ToList();
                                    eventosRegistrados     = eventosRegistrados.OrderByDescending(x => x.FechaEvento).ToList();
                                    ultimoEventoRegistrado = null;
                                    ultimoEventoRegistrado = (from e in eventosRegistrados
                                                              join t in tipoEventos on e.IdTipoEvento equals t.CodigoEvento
                                                              where !t.EventoTipoOtros
                                                              select e).FirstOrDefault();
                                    if (ultimoEventoRegistrado != null)
                                    {
                                        eventosSucesores = ValidarEventosLogisticosSucesoresPorUltimoEvento(ultimoEventoRegistrado, eventosRegistrados, tipoEventos, numeroManifiesto);

                                        if (eventosSucesores == null || eventosSucesores.Count == 0)
                                        {
                                            eventosSucesores = dao.SeleccionarEventosSucesores(ultimoEventoRegistrado.IdTipoEvento);
                                        }
                                    }
                                    else
                                    {
                                        eventosSucesores = dao.SeleccionarEventosSucesores(0);
                                    }
                                }
                            }
                            else
                            {
                                eventosRegistrados = eventosRegistrados.OrderByDescending(x => x.FechaEvento).OrderByDescending(x => x.ID).ToList();
                                //Se busca el ultimo evento registrado que no sea de tipo otros
                                ultimoEventoRegistrado = (from e in eventosRegistrados
                                                          join t in tipoEventos on e.IdTipoEvento equals t.CodigoEvento
                                                          where !t.EventoTipoOtros
                                                          select e).FirstOrDefault();
                                if (ultimoEventoRegistrado != null)
                                {
                                    eventosSucesores = ValidarEventosLogisticosSucesoresPorUltimoEvento(ultimoEventoRegistrado, eventosRegistrados, tipoEventos, numeroManifiesto);

                                    if (eventosSucesores == null || eventosSucesores.Count == 0)
                                    {
                                        eventosSucesores = dao.SeleccionarEventosSucesores(ultimoEventoRegistrado.IdTipoEvento);
                                    }
                                }
                                else
                                {
                                    eventosSucesores = dao.SeleccionarEventosSucesores(0);
                                }
                            }
                        }
                        else
                        {
                            //se consulta los eventos sucesores del ultimo evento registrado
                            eventosSucesores = ValidarEventosLogisticosSucesoresPorUltimoEvento(ultimoEventoRegistrado, eventosRegistrados, tipoEventos, numeroManifiesto);

                            if (eventosSucesores == null || eventosSucesores.Count == 0)
                            {
                                eventosSucesores = dao.SeleccionarEventosSucesores(ultimoEventoRegistrado.IdTipoEvento);
                            }
                        }
                    }
                    else
                    {
                        //No se ha registrado ningun evento al viaje
                        eventosSucesores = dao.SeleccionarEventosSucesores(0);
                    }
                }

                if (eventosSucesores != null)
                {
                    eventosSucesores = eventosSucesores.OrderBy(t => t.NombreEvento).ToList();
                }
                return(eventosSucesores);
            }

            else
            {
                DataService.AppDataService ds = new DataService.AppDataService(ParametrosSistema.TokenUsuarioActual);
                eventosSucesores = await ds.RealizarPeticionApi <List <TipoEventoLogistico> >("Evento/SeleccionarSiguienteEventoporManifiesto?numeromanifiesto=" + numeroManifiesto.ToString() + "&aplicaTerceros=" + usuarioTipoTercero, DataService.TipoPeticionApi.Get);//.ConfigureAwait(false);
            }
            return(eventosSucesores);
        }