// variante de método base AgregarEtapa, que corrobora que si el documento es legal tiene que ser recibido (pNomRecibio) por el
        // propio destinatario (base.NombreDestinatario), y devuelve un bool para éxito o fracaso.
        public override bool AgregarEtapa(DateTime pFechaIngreso, EtapaEnvio.Etapas pEtapa, OficinaPostal pUbicacion,
                                          string pFirmaRecibio, string pNombreRecibio, out string pMensajeError)
        {
            bool seHace = true;
            bool exito  = false;

            if (this.esDocLegal)
            {
                if (pEtapa == EtapaEnvio.Etapas.Entregado)
                {
                    if (pNombreRecibio != base.NombreDestinatario)
                    {
                        seHace = false;
                    }
                }
            }

            if (seHace)
            {
                exito = base.AgregarEtapa(pFechaIngreso, pEtapa, pUbicacion, pFirmaRecibio, pNombreRecibio, out pMensajeError);
            }
            else
            {
                pMensajeError = "El nombre de destinatario asociado a este envio no coincide con el nombre de quien lo recibe";
            }
            return(exito);
        }
Exemple #2
0
        //Metodo que me compara envios por fechas de manera descendente
        //No es lógico ordenar por fecha de entregado si el envío puede no haberse entregado aún
        //(si está para entregar en la oficina final). Por lo tanto, ordénenlos por fecha de ENVIADO de forma ascendente.
        int IComparable <Envio> .CompareTo(Envio env)
        {
            int retorno = 0;

            Envio otro = env as Envio;

            if (otro != null)
            {
                // obtengo la etapa actual de los envios porque no se si el envio esta
                // "ParaEntregar" o "Entregado", ya que me sirven ambos. En el primer caso, tomo la ultima etapaDeEnvio, y en el 2do caso
                // tomo la penultima etapa.

                EtapaEnvio.Etapas etapaEnv1     = env.ObtenerEtapaActual().Etapa;
                EtapaEnvio.Etapas etapaOtroEnv2 = env.ObtenerEtapaActual().Etapa;
                int intRestarDeEnv1;
                int intRestarDeOtroEnv2;

                if (etapaEnv1 == EtapaEnvio.Etapas.ParaEntregar)
                {
                    intRestarDeEnv1 = 1;
                }
                else
                {
                    intRestarDeEnv1 = 2;
                }

                if (etapaOtroEnv2 == EtapaEnvio.Etapas.ParaEntregar)
                {
                    intRestarDeOtroEnv2 = 1;
                }
                else
                {
                    intRestarDeOtroEnv2 = 2;
                }

                // busco la ultima etapa del envio ("[XX.Count-1]") y busco la fecha de esa etapa, para compararla con la del otro envio
                retorno = this.EtapasDelEnvio[this.EtapasDelEnvio.Count - intRestarDeEnv1].FechaIngreso.
                          CompareTo(env.EtapasDelEnvio[env.EtapasDelEnvio.Count - intRestarDeOtroEnv2].FechaIngreso);
            }

            return(retorno);
        }
Exemple #3
0
        // agregar etapas de rastreo al envío. Es polimórfico para EnvioDocumento, porque Documento necesita corroborar quien
        // recibe el envio para agregarla (ver metodo en EnvioDocumento)
        public virtual bool AgregarEtapa(DateTime pFechaIngreso, EtapaEnvio.Etapas pEtapa, OficinaPostal pUbicacion,
                                         string pFirmaRecibio, string pNombreRecibio, out string pMensajeError)
        {
            string     mensajeError   = "";
            bool       sePuedeAgregar = false;
            EtapaEnvio etapaActual    = this.ObtenerEtapaActual();

            if (pFechaIngreso >= etapaActual.FechaIngreso)
            {
                // como EnOrigen se crea automaticamente con la creación del envío, no se puede utilizar nunca
                if (pEtapa != EtapaEnvio.Etapas.EnOrigen)
                {
                    // revisa secuencialidad
                    if (pEtapa >= etapaActual.Etapa)
                    {
                        // revisa si la etapa actual es igual que la anterior, porque solo voy a permitir esto para la etapa enTransito
                        if (etapaActual.Etapa == pEtapa)
                        {
                            // si la etapa actual es enTransito, se va a poder solo si estan en != oficinas
                            if (pEtapa == EtapaEnvio.Etapas.EnTransito)
                            {
                                // si la oficina es la misma que la anterior no deja ingresar la etapa (esto es para todos menos pEtapa = Entregado)
                                if (etapaActual.Ubicacion != pUbicacion)
                                {
                                    sePuedeAgregar = true;
                                }
                                else
                                {
                                    mensajeError = "La oficina postal no puede ser igual a la etapa anterior excepto para Entregado";
                                }
                            }
                            else
                            {
                                mensajeError = "La etapa de envío no puede ser igual a la anterior a menos que el envío esté en tránsito";
                            }
                        }
                        // si la anterior y la que se pretende ingresar no son iguales (o sea, la nueva es mayor que la actual)
                        else
                        {
                            // si la etapa actual es Origen o Transito y es != de la nueva
                            if (etapaActual.Etapa == EtapaEnvio.Etapas.EnOrigen || etapaActual.Etapa == EtapaEnvio.Etapas.EnTransito)
                            {
                                // no pasar a Entregado desde una etapa diferente que no sea ParaEntregar
                                if (pEtapa == EtapaEnvio.Etapas.Entregado)
                                {
                                    mensajeError = "Aún no se puede entregar este envío porque se encuentra enOrigen/enTránsito";
                                }
                                // si quiero pasar a ParaEntregar, tengo que checkear que la direccion de la oficina final sea
                                // distinta que donde entró el emvio inicialmente
                                else if (pEtapa == EtapaEnvio.Etapas.ParaEntregar)
                                {
                                    if (pUbicacion != this.DevolverEtapaEnOrigen().Ubicacion)
                                    {
                                        sePuedeAgregar = true;
                                    }
                                    else
                                    {
                                        mensajeError = "No se puede entregar un envío en la misma oficina que la de origen";
                                    }
                                }
                                else
                                {
                                    if (pUbicacion != etapaActual.Ubicacion)
                                    {
                                        sePuedeAgregar = true;
                                    }
                                    else
                                    {
                                        mensajeError = "La oficina postal no puede ser igual a la etapa anterior excepto para Entregado";
                                    }
                                }
                            }
                            // si voy a agregar etapa Entregado (estando en ParaEntregar), tiene que ser en la misma oficina
                            else if (etapaActual.Etapa == EtapaEnvio.Etapas.ParaEntregar)
                            {
                                if (etapaActual.Ubicacion == pUbicacion)
                                {
                                    sePuedeAgregar = true;
                                }
                                else
                                {
                                    mensajeError = "El envío se debe entregar en la misma oficina donde se categorizó Para Entregar";
                                }
                            }
                        }
                    }
                    else
                    {
                        mensajeError = "La etapa seleccionada ya no se puede ingresar para este envio";
                    }
                }
                else
                {
                    mensajeError = "La etapa seleccionada ya no se puede ingresar para este envio";
                }
            }
            else
            {
                mensajeError = "La fecha ingresada tiene que ser igual o posterior a la ingresada en la etapa previa";
            }

            if (sePuedeAgregar)
            {
                EtapaEnvio etp = new EtapaEnvio(pFechaIngreso, pEtapa, pUbicacion);
                if (pEtapa == EtapaEnvio.Etapas.Entregado)
                {
                    this.nombreRecibio = pNombreRecibio;
                    this.firmaRecibio  = pFirmaRecibio;
                }

                if (pEtapa == EtapaEnvio.Etapas.ParaEntregar)
                {
                    this.fechaIngresoParaEntregar = pFechaIngreso.ToString();
                }

                this.EtapasDelEnvio.Add(etp);
                mensajeError = "Se ha agregado la nueva etapa exitosamente!!";
            }

            pMensajeError = mensajeError;
            return(sePuedeAgregar);
        }