Пример #1
0
        public List <Entrega> SeleccionarEntregasPorTransporte(long numeroManifiesto)
        {
            EntregaDAO entregaDAO = new EntregaDAO();


            List <Entrega> entregas = new List <Entrega>();

            entregas = entregaDAO.SeleccionarEntregasPorTransporte(numeroManifiesto);
            return(entregas);
        }
        private List <TipoEventoLogistico> ValidarEventosLogisticosSucesoresPorUltimoEvento(EventoLogistico ultimoEventoRegistrado, List <EventoLogistico> eventosRegistrados, List <TipoEventoLogistico> tipoEventos, long numeroManifiesto)
        {
            List <TipoEventoLogistico> eventosSucesores = new List <TipoEventoLogistico>();

            //Si el ultimo evento registrado fue activación, valida si es un vacio para mostrar el evento inicio de viaje
            if (ultimoEventoRegistrado.IdTipoEvento == (int)TipoEventoLogisticoEnum.ActivarViaje)
            {
                HistorialActivacionManifiestoDAO historialActivacionDAO = new HistorialActivacionManifiestoDAO();
                HistorialActivacionManifiesto    transporte             = historialActivacionDAO.SeleccionarHistorialActivacionManifiesto(ultimoEventoRegistrado.NumeroManifiesto);
                if (transporte != null)
                {
                    if (transporte.ClaseTransporte == "ZT17" || transporte.ClaseTransporte == "ZT18")
                    {
                        eventosSucesores = tipoEventos.Where(t => t.CodigoEvento == (int)TipoEventoLogisticoEnum.IniciaViaje ||
                                                             t.CodigoEvento == (int)TipoEventoLogisticoEnum.Otro).ToList();
                        return(eventosSucesores);
                    }
                }
            }

            //si tiene inicios de cargue sin fin cargue, muestra solo fin cargue
            if (ultimoEventoRegistrado.IdTipoEvento == (int)TipoEventoLogisticoEnum.IniciaCargue)
            {
                eventosSucesores = tipoEventos.Where(t => t.CodigoEvento == (int)TipoEventoLogisticoEnum.FinCargue ||
                                                     t.CodigoEvento == (int)TipoEventoLogisticoEnum.Otro).ToList();
                return(eventosSucesores);
            }

            //si valida tiene mas entregas pendientes por registrarle datos de cargue
            EntregaDAO     entregaDAO         = new EntregaDAO();
            List <Entrega> entregasManifiesto = entregaDAO.SeleccionarEntregasPorTransporte(numeroManifiesto);

            if (ultimoEventoRegistrado.IdTipoEvento == (int)TipoEventoLogisticoEnum.FinCargue)
            {
                int entregasCargadas = 0;
                foreach (Entrega entrega in entregasManifiesto)
                {
                    var llegadaCargue = (from e in eventosRegistrados
                                         where e.IdTipoEvento == (int)TipoEventoLogisticoEnum.LlegadaCargue
                                         where e.campo1 == entrega.NumeroEntrega.ToString()
                                         select e).ToList();
                    var finCargue = (from e in eventosRegistrados
                                     where e.IdTipoEvento == (int)TipoEventoLogisticoEnum.FinCargue
                                     where e.campo1 == entrega.NumeroEntrega.ToString()
                                     select e).ToList();
                    if (llegadaCargue != null && finCargue != null)
                    {
                        entregasCargadas += 1;
                    }
                }
                if (entregasCargadas < entregasManifiesto.Count)
                {
                    eventosSucesores = tipoEventos.Where(t => t.CodigoEvento == (int)TipoEventoLogisticoEnum.LlegadaCargue ||
                                                         t.CodigoEvento == (int)TipoEventoLogisticoEnum.Otro).ToList();
                    return(eventosSucesores);
                }
            }
            //si tiene inicios de descargue sin fin descargue, muestra solo fin descargue
            if (ultimoEventoRegistrado.IdTipoEvento == (int)TipoEventoLogisticoEnum.IniciaDescargue)
            {
                eventosSucesores = tipoEventos.Where(t => t.CodigoEvento == (int)TipoEventoLogisticoEnum.FinDescargue ||
                                                     t.CodigoEvento == (int)TipoEventoLogisticoEnum.Otro).ToList();
                return(eventosSucesores);
            }
            //si valida tiene mas entregas pendientes por registrarle datos de descargue
            if (ultimoEventoRegistrado.IdTipoEvento == (int)TipoEventoLogisticoEnum.FinDescargue)
            {
                bool existenEntregasSinDescargar = false;


                int entregasDescargadasoDesegachadas = 0;

                foreach (Entrega entrega in entregasManifiesto)
                {
                    var llegadaDescargue = (from e in eventosRegistrados
                                            where e.IdTipoEvento == (int)TipoEventoLogisticoEnum.LlegadaDestino
                                            where e.campo1 == entrega.NumeroEntrega.ToString()
                                            select e).FirstOrDefault();
                    var finDescargue = (from e in eventosRegistrados
                                        where e.IdTipoEvento == (int)TipoEventoLogisticoEnum.FinDescargue
                                        where e.campo1 == entrega.NumeroEntrega.ToString()
                                        select e).FirstOrDefault();

                    if (llegadaDescargue != null && finDescargue != null)
                    {
                        entregasDescargadasoDesegachadas = entregasDescargadasoDesegachadas + 1;
                    }
                    else
                    {
                        var desenganche = (from e in eventosRegistrados
                                           where e.IdTipoEvento == (int)TipoEventoLogisticoEnum.Desenganche
                                           select e).FirstOrDefault();

                        if (desenganche != null)
                        {
                            int remesesasDesengachadas = 0;
                            if (int.TryParse(desenganche.campo1, out remesesasDesengachadas))
                            {
                                entregasDescargadasoDesegachadas = entregasDescargadasoDesegachadas + remesesasDesengachadas;
                            }
                        }
                    }
                }
                if (entregasDescargadasoDesegachadas < entregasManifiesto.Count())
                {
                    existenEntregasSinDescargar = true;
                }

                if (existenEntregasSinDescargar)
                {
                    eventosSucesores = tipoEventos.Where(t => t.CodigoEvento == (int)TipoEventoLogisticoEnum.LlegadaDestino ||
                                                         t.CodigoEvento == (int)TipoEventoLogisticoEnum.Otro).ToList();
                    return(eventosSucesores);
                }
            }
            //si tiene inicios de paradas sin continuacion viaje, muestra solo eventos que puede registrar en esta parado
            if (ultimoEventoRegistrado.IdTipoEvento == (int)TipoEventoLogisticoEnum.ParadaCamino)
            {
                eventosSucesores = tipoEventos.Where(t => t.CodigoEvento == (int)TipoEventoLogisticoEnum.ContinuacionViaje ||
                                                     t.CodigoEvento == (int)TipoEventoLogisticoEnum.Otro).ToList();
                return(eventosSucesores);
            }

            return(eventosSucesores);
        }