示例#1
0
        /* TODO: agregar controles y manejar exceptions */

        /* Busca el cliente con el numero de documento del usuario, si lo encuentra, recibe parametros para crear envio de paquetes,
         * y lo agrega a la lista de envios. Y por ultimo, ese cliente agrega ese envio a su propia lista de envios */
        public int AltaEnvioPaquete(string pCliente, string pNomDestinatario, string pCalleDestino, string pNroPtaDestino,
                                    string pCPDestino, string pCiudDestino, string pPaisDestino, DateTime pFechaIngreso,
                                    int pNroOficinaIngreso, float pAlto, float pAncho, float pLargo,
                                    decimal pValorDecl, bool pSeguro, float pPesoKg, string pDescr)
        {
            Usuario cli         = this.BuscarCliente(pCliente);
            int     numeroEnvio = 0;

            if (cli != null)
            {
                Direccion     dirDestino     = new Direccion(pCalleDestino, pNroPtaDestino, pCPDestino, pCiudDestino, pPaisDestino);
                OficinaPostal oficinaIngreso = this.BuscarOficinaXID(pNroOficinaIngreso);

                EnvioPaquete env = new EnvioPaquete(pNomDestinatario, dirDestino, pFechaIngreso, oficinaIngreso,
                                                    pAlto, pAncho, pLargo, pValorDecl, pSeguro, pPesoKg, pDescr);

                if (this.listaEnvios == null)
                {
                    this.listaEnvios = new List <Envio>();
                }
                this.listaEnvios.Add(env);
                cli.AgregarEnvio(env);
                numeroEnvio = env.NroEnvio;
            }
            return(numeroEnvio);
        }
示例#2
0
        /* TODO: agregar controles y manejar exceptions */

        /* Busca el cliente con el numero de documento del usuario, si lo encuentra, recibe parametros para crear envio de documento,
         * y lo agrega a la lista de envios. Y por ultimo, ese cliente agrega ese envio a su propia lista de envios */
        public int AltaEnvioDocumento(string pCliente, string pCalleOrigen, string pNroPtaOrigen, string pCPorigen, string pCiudOrigen,
                                      string pPaisOrigen, string pNomDestinatario, string pCalleDestino, string pNroPtaDestino,
                                      string pCPDestino, string pCiudDestino, string pPaisDestino, DateTime pFechaIngreso,
                                      int pNroOficinaIngreso, float pPesoKilos, bool pLegal)
        {
            Usuario cli         = this.BuscarCliente(pCliente);
            int     numeroEnvio = 0;

            if (cli != null)
            {
                Direccion dirOrigen  = new Direccion(pCalleOrigen, pNroPtaOrigen, pCPorigen, pCiudOrigen, pPaisOrigen);
                Direccion dirDestino = new Direccion(pCalleDestino, pNroPtaDestino, pCPDestino, pCiudDestino, pPaisDestino);

                OficinaPostal oficinaIngreso = this.BuscarOficinaXID(pNroOficinaIngreso);

                EnvioDocumento env = new EnvioDocumento(dirOrigen, pNomDestinatario, dirDestino,
                                                        pFechaIngreso, oficinaIngreso, pPesoKilos, pLegal);

                if (this.listaEnvios == null)
                {
                    this.listaEnvios = new List <Envio>();
                }
                this.listaEnvios.Add(env);

                cli.AgregarEnvio(env);
                numeroEnvio = env.NroEnvio;
            }
            return(numeroEnvio);
        }
示例#3
0
        public EnvioDocumento(Usuario pRemitente, Direccion pDirOrigen, string pNomDestinatario,
                              Direccion pDirDestino, DateTime pFechaIngreso, OficinaPostal pOficinaIngreso, float pPesoKilos, bool pLegal)
            : base(pRemitente, pNomDestinatario, pDirDestino, pFechaIngreso, pOficinaIngreso)

        {
            if (base.dirDestinatario != pDirOrigen)
            {
                this.dirOrigen   = pDirOrigen;
                base.peso        = pPesoKilos;
                this.esDocLegal  = pLegal;
                base.precioFinal = CalcularPrecioFinal();
            }
        }
示例#4
0
        public EnvioDocumento(Direccion pDirOrigen, string pNomDestinatario,
                              Direccion pDirDestino, DateTime pFechaIngreso, OficinaPostal pOficinaIngreso, float pPesoKilos, bool pLegal)
            : base(pNomDestinatario, pDirDestino, pFechaIngreso, pOficinaIngreso)

        {
            if (base.dirDestinatario != pDirOrigen)
            {
                this.DirOrigen   = pDirOrigen;
                base.Peso        = TransformarPesoAGramos(pPesoKilos);
                this.EsDocLegal  = pLegal;
                base.PrecioFinal = CalcularPrecioFinal();
            }
        }
示例#5
0
 // constructor convencional
 public EnvioPaquete(Usuario pRemitente, string pNomDestinatario, Direccion pDirDestino, DateTime pFechaIngreso,
                     OficinaPostal pOficinaIngreso, float pAlto, float pAncho, float pLargo, decimal pValorDeclarado,
                     bool pSeguro, float pPesoKilos, string pDescripcion)
     : base(pRemitente, pNomDestinatario, pDirDestino, pFechaIngreso, pOficinaIngreso)
 {
     this.alto           = pAlto;
     this.ancho          = pAncho;
     this.largo          = pLargo;
     this.valorDeclarado = pValorDeclarado;
     this.tieneSeguro    = pSeguro;
     base.peso           = pPesoKilos;
     this.descripcion    = pDescripcion;
     base.precioFinal    = CalcularPrecioFinal();
 }
示例#6
0
        // Crea una oficina postal luego de revisar si existe una oficina con los mismos datos,
        // y la suma a la lista de oficinas postales del sistema. No devuelve nada.
        public void AltaOficina(string pCiudad, string pCalle, string pCP, string pPais, string pNro)
        {
            OficinaPostal encontro = BuscarOficinaXDatos(pCiudad, pCalle, pCP, pPais, pNro);
            OficinaPostal ofi      = null;

            if (encontro == null)
            {
                ofi = new OficinaPostal(pPais, pNro, pCalle, pCiudad, pCP);
                if (this.listaOficinasPostales == null)
                {
                    this.listaOficinasPostales = new List <OficinaPostal>();
                }
                this.listaOficinasPostales.Add(ofi);
            }
        }
示例#7
0
        // Busca la oficina postal por NumeroOficina, devuelve la oficina encontrada o null si no existe
        public OficinaPostal BuscarOficinaXID(int pNroOficina)
        {
            OficinaPostal ofi = null;

            if (this.listaOficinasPostales != null)
            {
                foreach (OficinaPostal item in this.listaOficinasPostales)
                {
                    if (item.NroOficina == pNroOficina)
                    {
                        ofi = item;
                    }
                }
            }
            return(ofi);
        }
示例#8
0
 // constructor convencional
 public EnvioPaquete(string pNomDestinatario, Direccion pDirDestino, DateTime pFechaIngreso,
                     OficinaPostal pOficinaIngreso, float pAlto, float pAncho, float pLargo, decimal pValorDeclarado,
                     bool pSeguro, float pPesoKilos, string pDescripcion)
     : base(pNomDestinatario, pDirDestino, pFechaIngreso, pOficinaIngreso)
 {
     // alto, largo y ancho tienen que ser en cm!!!
     this.Alto           = pAlto;
     this.Ancho          = pAncho;
     this.Largo          = pLargo;
     this.ValorDeclarado = pValorDeclarado;
     this.TieneSeguro    = pSeguro;
     base.Peso           = pPesoKilos;
     // El atributo peso se encuentra común en la clase base Envio, para ambos tipos de envíos. En el caso de
     // los paquetes, no hay ninguna transformación porque se guarda en KG.
     this.Descripcion = pDescripcion;
     base.PrecioFinal = CalcularPrecioFinal();
 }
示例#9
0
        // Busca la oficina postal por la identidad de todos sus atributos, porque lo que no queremos es que se repitan oficinas al dar
        // altas, ya que el identificador de las oficinas es un autonumerado y eso no lo podemos controlar en la creación.
        // Devuelve la oficina encontrada o NULL
        public OficinaPostal BuscarOficinaXDatos(string pCiudad, string pCalle, string pCP, string pPais, string pNroCalle)
        {
            OficinaPostal ofi = null;

            if (this.listaOficinasPostales != null)
            {
                foreach (OficinaPostal item in this.listaOficinasPostales)
                {
                    if (item.DireccionOfiPostal.Ciudad.ToLower() == pCiudad.ToLower() &&
                        item.DireccionOfiPostal.Calle.ToLower() == pCalle.ToLower() &&
                        item.DireccionOfiPostal.CodPostal.ToLower() == pCP.ToLower() &&
                        item.DireccionOfiPostal.Pais.ToLower() == pPais.ToLower() && item.DireccionOfiPostal.Numero == pNroCalle)
                    {
                        ofi = item;
                    }
                }
            }
            return(ofi);
        }
示例#10
0
 public EtapaEnvio(DateTime pFechaIng, Etapas pEtp, OficinaPostal pUbicacion)
 {
     this.etapa        = pEtp;
     this.FechaIngreso = pFechaIng;
     this.Ubicacion    = pUbicacion;
 }
示例#11
0
        // 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);
        }
示例#12
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);
        }
示例#13
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;
        }