Ejemplo n.º 1
0
        // devuelve la etapaEnvio que tiene el enum EnOrigen
        public EtapaEnvio DevolverEtapaEnOrigen()
        {
            EtapaEnvio enOrigen = null;

            foreach (EtapaEnvio etapa in this.etapasDelEnvio)
            {
                if (etapa.Etapa == EtapaEnvio.Etapas.EnOrigen)
                {
                    enOrigen = etapa;
                }
            }
            return(enOrigen);
        }
Ejemplo n.º 2
0
        // para el envio actual, determina el precioFinal del mismo, sólo si es un envio que fue entregado y la fecha de ingreso
        // se encuentra entre las fechas provistas. De forma contraria, el total es igual a 0
        public decimal TotalFacturado(DateTime pFechaInicio, DateTime pFechaFinal)
        {
            decimal total = 0M;

            EtapaEnvio etapaActual = this.ObtenerEtapaActual();

            if (etapaActual.Etapa == EtapaEnvio.Etapas.Entregado &&
                etapaActual.FechaIngreso >= pFechaInicio && etapaActual.FechaIngreso <= pFechaFinal)
            {
                total = this.PrecioFinal;
            }

            return(total);
        }
Ejemplo n.º 3
0
        // constructor convencional
        public Envio(string pNomDestinatario, Direccion pDirDestino, DateTime pFechaIngreso, OficinaPostal pOficinaIngreso) // <-- firmaRecibio: imagen!
        {
            this.NroEnvio           = Envio.ultNroEnvio;
            Envio.ultNroEnvio      += 1; // si pongo una propiedad en el atributo, cambiar aca <---
            this.NombreDestinatario = pNomDestinatario;
            this.DirDestinatario    = pDirDestino;
            this.EtapasDelEnvio     = new List <EtapaEnvio>();

            // si se crea un envio nuevo, en el constructor, de forma automática, se crea la primer
            // etapa del envio, por eso este constructor toma como parametros tambien la fecha de ingreso
            // y la oficina en la que ingresó:
            EtapaEnvio unaEtapa = new EtapaEnvio(pFechaIngreso, EtapaEnvio.Etapas.EnOrigen, pOficinaIngreso);

            // agrego esa etapa en la lista de etapas recorridas de este envío
            this.EtapasDelEnvio.Add(unaEtapa);
            this.FechaIngreso = this.etapasDelEnvio[0].FechaIngreso;
        }
Ejemplo n.º 4
0
        // revisa las fechas de ingreso de cada etapaDeEnvio, para quedarse con la etapa que tiene la fecha más cercana al
        // día actual (la ultima fecha encontrada), y devolver el enum de Etapas en que se encuentra esa Etapa, que es el estado
        // actual del envio <----
        public EtapaEnvio ObtenerEtapaActual()
        {
            DateTime   ultimaFecha = DateTime.MinValue;
            EtapaEnvio etapaActual = null;

            if (this.etapasDelEnvio != null && this.etapasDelEnvio.Count > 0)
            {
                foreach (EtapaEnvio etp in this.etapasDelEnvio)
                {
                    if (etp.FechaIngreso >= ultimaFecha)
                    {
                        etapaActual = etp;
                        ultimaFecha = etapaActual.FechaIngreso;
                    }
                }
            }

            return(etapaActual);
        }
Ejemplo n.º 5
0
        /*Devuelve el total facturado de ese cliente dado un intervalo*/
        public decimal TotalFacturadoEnIntervalo(DateTime pFechaInicio, DateTime pFechaFinal)
        {
            decimal total = 0M;

            if (enviosCliente != null && enviosCliente.Count > 0)
            {
                foreach (Envio env in enviosCliente)
                {
                    EtapaEnvio etapaActual = env.ObtenerEtapaActual();
                    if (etapaActual.Etapa == EtapaEnvio.Etapas.Entregado &&
                        etapaActual.FechaIngreso >= pFechaInicio && etapaActual.FechaIngreso <= pFechaFinal)

                    {
                        total = total + env.PrecioFinal;
                    }
                }
            }
            return(total);
        }
Ejemplo n.º 6
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);
        }