コード例 #1
0
        public void CrearMensajePaqueteria(IPedido pedido, IPaqueteria paqueteria)
        {
            IMedioTransporte medioTransporte = paqueteria.MediosTransportes.FirstOrDefault(x => x.Nombre.ToLowerInvariant() == pedido.MedioTransporte.ToLowerInvariant());

            if (medioTransporte == null)
            {
                throw new ArgumentException($"{paqueteria.NombreEmpresa} no ofrece el servicio de transporte por {pedido.MedioTransporte}, te recomendamos cotizar en otra empresa.");
            }
            IDetallesPedido detallesPedido = _creardorDetallesPedido.CrearDetallesPedido(pedido, medioTransporte, paqueteria.MargenUtilidad);


            string rangoTiempo             = _manejadorRangoTiempo.ObtenerRangoTiempo(detallesPedido.FechaEntrega, DateTime.Now);
            bool   fechaEntregaMenorActual = _validadorFecha.ValidarFechaActual(detallesPedido.FechaEntrega);

            _constructorRespuestaPedido.Reset();
            _constructorRespuestaPedido.ConstruirExpresion1(fechaEntregaMenorActual);
            _constructorRespuestaPedido.ConstruirOrigen(pedido.Origen);
            _constructorRespuestaPedido.ConstruirExpresion2(fechaEntregaMenorActual);
            _constructorRespuestaPedido.ConstruirExpresion3(fechaEntregaMenorActual);
            _constructorRespuestaPedido.AsignarRangoTiempo(rangoTiempo);
            _constructorRespuestaPedido.ConstruirExpresion4(fechaEntregaMenorActual);
            _constructorRespuestaPedido.ConstuirCostoEnvio(detallesPedido.CostoEnvio.ToString());
            _constructorRespuestaPedido.AsignarColorMensaje(fechaEntregaMenorActual);
            _constructorRespuestaPedido.ConstuirDestino(pedido.Destino);
            _constructorRespuestaPedido.AgregarOpcionEconomica(detallesPedido.Cotizacion);
            _constructorRespuestaPedido.ConstruirFinal(pedido.Paqueteria);
        }
コード例 #2
0
        public IMedioTransporte ClientCodeMedioTransporte(Pedido pedido)
        {
            IFabricaMedioTransporte fabrica;
            IMedioTransporte        medio = null;

            switch (pedido.Medio)
            {
            case "Barco":
                fabrica = new FabricaBarco();
                break;

            case "Tren":
                fabrica = new FabricaTren();
                break;

            case "Avion":
                fabrica = new FabricaAvion();
                break;

            default:
                fabrica = null;
                break;
            }

            if (fabrica != null)
            {
                medio = fabrica.CrearMedioTransporte();
            }

            return(medio);
        }
コード例 #3
0
        /// <summary>
        /// Método que permite asignar nuevos datos al paquete
        /// </summary>
        /// <param name="_dtoPaqueteria">DTO con los datos del paquete.</param>
        /// <returns>DTO con los datos del paquete actualizado.</returns>
        public PaqueteriaDTO AsignarNuevosDatos(ref PaqueteriaDTO _dtoPaqueteria)
        {
            PaqueteriaDTO dtoPaqueteria = _dtoPaqueteria;

            this.IMedioTransporte          = lstMediosTransportes.Where(e => e.cNombreMedioTransporte == dtoPaqueteria.cNombreMedioTransporte).FirstOrDefault();
            dtoPaqueteria.dCostoEnvio      = ObtenerCostoEnvio(dtoPaqueteria.dDistancia);
            dtoPaqueteria.tsTiempoTraslado = ObtenerTiempoTraslado(dtoPaqueteria.dDistancia);
            dtoPaqueteria.dtEntrega        = ObtenerFechaEntrega(dtoPaqueteria.dtPedido, dtoPaqueteria.tsTiempoTraslado);
            return(dtoPaqueteria);
        }
コード例 #4
0
        public void CrearMedioTransporte_EnviarTipoDeTransporteValido_CreaInstanciaTipoBarco()
        {
            // Arrange
            IFabricaMedioTransporte DOC = new FabricaBarco();

            // Act
            IMedioTransporte act = DOC.CrearMedioTransporte();

            // Assert
            Assert.IsInstanceOfType(act, typeof(Barco));
        }
コード例 #5
0
        public IDetallesPedido CrearDetallesPedido(IPedido pedido, IMedioTransporte medioTransporte, double margenUtilidad)
        {
            DetallesPedido detallesPedido = new DetallesPedido();

            detallesPedido.TiempoTraslado = _manejadorPaqueteria.CalcularTiempoTraslado(pedido.Distancia, medioTransporte.VelocidadEntrega);
            detallesPedido.FechaEntrega   = _manejadorPaqueteria.CalcularFechaEntrega(pedido.FechaPedido, detallesPedido.TiempoTraslado);
            detallesPedido.CostoEnvio     = _manejadorPaqueteria.CalcularCostoEnvio(medioTransporte.CostoKilometro, pedido.Distancia, margenUtilidad);
            detallesPedido.Cotizacion     = _verificadorPrecios.CotizadorPrecios(detallesPedido.CostoEnvio, pedido);


            return(detallesPedido);
        }
コード例 #6
0
        public void CrearMedioTransporte_EnviarTipoDeTransporteValido_CreaInstanciaTipoAvion()
        {
            // Arrange
            IFabricaMedioTransporte DOC = new FabricaAvion();
            var expected = typeof(Avion);

            // Act
            IMedioTransporte act = DOC.CrearMedioTransporte();

            // Assert
            Assert.IsInstanceOfType(act, expected);
        }
コード例 #7
0
        public IEmpresa CrearEmpresa(List <IFabricaMedioTransporte> fabricas, IMedioTransporte medio)
        {
            IEmpresa empresa = new Fedex();

            foreach (var item in fabricas)
            {
                medio = item.CrearMedioTransporte();
                empresa.MediosTransporte.Add(medio);
            }

            return(empresa);
        }
コード例 #8
0
        public IMedioTransporte ObtenerMedioDeTransporte(string tipoTransporte)
        {
            IMedioTransporte transporte = MediosTransporte.FirstOrDefault(x => x.Tipo == tipoTransporte);

            if (transporte == null)
            {
                string mensajeError = string.Format("{0} no ofrece el servicio de transporte {1}, te recomendamos cotizar en otra empresa.", Nombre, tipoTransporte);
                throw new ArgumentException(mensajeError);
            }

            return(transporte);
        }
コード例 #9
0
        public void CrearMedioTransporte_ValidarCostoXKilometroAvion_CostoPorKilometroIgualADiez()
        {
            // Arrange
            IFabricaMedioTransporte DOC = new FabricaAvion();
            var expected = 10;

            // Act
            IMedioTransporte SUT = DOC.CrearMedioTransporte();
            var act = SUT.CostroPorKilometro;

            // Assert
            Assert.AreEqual(expected, act);
        }
コード例 #10
0
        public void CrearMedioTransporte_ValidarNombreMedioTransporteAvion_NombreMedioTransporteDebeSerAvion()
        {
            // Arrange
            IFabricaMedioTransporte DOC = new FabricaAvion();
            var expected = "Avión";

            // Act
            IMedioTransporte SUT = DOC.CrearMedioTransporte();
            var act = SUT.Nombre;

            // Assert
            Assert.AreEqual(expected, act);
        }
コード例 #11
0
        public void CrearMedioTransporte_ValidarVelocidadEntregaAvion_VelocidadEntregaIgualA600()
        {
            // Arrange
            IFabricaMedioTransporte DOC = new FabricaAvion();
            var expected = 600;

            // Act
            IMedioTransporte SUT = DOC.CrearMedioTransporte();
            var act = SUT.VelocidadEntrega;

            // Assert
            Assert.AreEqual(expected, act);
        }
コード例 #12
0
ファイル: Context.cs プロジェクト: jpech/ProyectoFinal
        public IEmpresa EjecutarEstrategia(List <IFabricaMedioTransporte> fabricas, IMedioTransporte medio)
        {
            if (fabricas == null)
            {
                throw new ArgumentNullException(nameof(fabricas));
            }

            if (medio == null)
            {
                throw new ArgumentNullException(nameof(medio));
            }

            return(_estrategy.CrearEmpresa(fabricas, medio));
        }
コード例 #13
0
ファイル: SistemaGlobalPedidos.cs プロジェクト: rabi12/examen
 private decimal obtenerTiempoTraslado(Pedido pedido)
 {
     foreach (IPaqueteria paqueteria in this.paqueterias)
     {
         if (paqueteria.getNombre().Equals(pedido.paqueteria))
         {
             IMedioTransporte medio = paqueteria.getMedioTransporte(pedido.medioTransporte);
             if (medio != null)
             {
                 return(medio.getTiempoTraslado(pedido.distancia));
             }
             else
             {
                 break;
             }
         }
     }
     return(0.0M);
 }
コード例 #14
0
        public string CrearMensajeEntregado(PeticionPedido peticionPedido, bool paqueteEntregado)
        {
            StringBuilder    mensajeResultante = new StringBuilder();
            IMedioTransporte medioTransporte   = empresaPaqueteria.ObtenerMedioDeTransporte(peticionPedido.TransporteCadena.ToLower());
            ICostoDistancia  costoDistancia    = medioTransporte.CostoDistancia;

            ReclamacionPaqueteria reclamacionPaqueteria = new ReclamacionPaqueteria(mensajeResultante, peticionPedido.PaqueteriaCadena);
            CostoDeEntrega        costoDeEntrega        = new CostoDeEntrega(mensajeResultante, paqueteEntregado, costoDistancia, reclamacionPaqueteria);
            NexoY           nexoY2          = new NexoY(mensajeResultante, costoDeEntrega);
            TiempoDeEntrega tiempoDeEntrega = new TiempoDeEntrega(mensajeResultante, paqueteEntregado, formatoTiempo, nexoY2);
            EstadoDeEntrega estadoDeEntrega = new EstadoDeEntrega(mensajeResultante, paqueteEntregado, peticionPedido.Destino, tiempoDeEntrega);
            NexoY           nexoY           = new NexoY(mensajeResultante, estadoDeEntrega);
            EstadoDeSalida  estadoDeSalida  = new EstadoDeSalida(mensajeResultante, paqueteEntregado, peticionPedido.Origen, nexoY);
            InicioMensaje   inicioMensaje   = new InicioMensaje(mensajeResultante, estadoDeSalida);

            inicioMensaje.AgregarMensaje();

            return(mensajeResultante.ToString());
        }
コード例 #15
0
        public string CotizadorPrecios(double costoOriginal, IPedido pedido)
        {
            string             mensaje     = string.Empty;
            List <IPaqueteria> paqueterias = _paqueteriaService.ObtenerPaqueterias();

            foreach (IPaqueteria paqueteria in paqueterias.Where(x => x.NombreEmpresa.ToLowerInvariant() != pedido.Paqueteria.ToLowerInvariant()))
            {
                IMedioTransporte transporte = paqueteria.MediosTransportes
                                              .FirstOrDefault(x => x.Nombre.ToLowerInvariant() == pedido.MedioTransporte.ToLowerInvariant());

                if (transporte != null)
                {
                    double cotizacion = _manejadorPaqueteria.CalcularCostoEnvio(transporte.CostoKilometro, pedido.Distancia, paqueteria.MargenUtilidad);
                    if (costoOriginal > cotizacion)
                    {
                        mensaje = $"Si hubieras pedido en {paqueteria.NombreEmpresa} te hubiera costado (${cotizacion}).";
                    }
                }
            }

            return(mensaje);
        }
コード例 #16
0
ファイル: SistemaGlobalPedidos.cs プロジェクト: rabi12/examen
        /*(Costo por km del [Medio de Transporte] * [Distancia]) * (1 + Margen de utilidad de la [Paquetería]/100)*/
        public decimal getCostoEnvio(Pedido pedido)
        {
            foreach (IPaqueteria paqueteria in this.paqueterias)
            {
                if (paqueteria.getNombre().Equals(pedido.paqueteria))
                {
                    IMedioTransporte medio = paqueteria.getMedioTransporte(pedido.medioTransporte);
                    if (medio != null)
                    {
                        return((medio.getCostoPorKilometro() * pedido.distancia) * (1 + (paqueteria.getUtilidad() / 100)));
                    }
                    else
                    {
                        throw new Exception(paqueteria.getNombre() + " no ofrece el servicio de transporte " + pedido.medioTransporte + ", te recomendamos cotizar en otra empresa.");
                    }
                }
            }

            throw new Exception("La Paquetería: " + pedido.paqueteria + " no se encuentra registrada en nuestra red de distribución.");

            return(0);
        }
コード例 #17
0
ファイル: SistemaGlobalPedidos.cs プロジェクト: rabi12/examen
        private string investigarMejorPrecio(Pedido pedido)
        {
            string mensaje = "";

            foreach (IPaqueteria paqueteria in this.paqueterias)
            {
                if (!paqueteria.getNombre().Equals(pedido.paqueteria))
                {
                    IMedioTransporte medio = paqueteria.getMedioTransporte(pedido.medioTransporte);
                    if (medio != null)
                    {
                        decimal precio = (medio.getCostoPorKilometro() * pedido.distancia) * (1 + (paqueteria.getUtilidad() / 100));
                        if (pedido.costoEnvio > precio)
                        {
                            mensaje = "\n" + "Si hubieras pedido en " + paqueteria.getNombre() + " te hubiera costado $" + (pedido.costoEnvio - precio) + " más barato.";
                        }
                    }
                }
            }

            return(mensaje);
        }
コード例 #18
0
 public void AgregarTransporte(IMedioTransporte medioTransporte)
 {
     _mediosTransportes.Add(medioTransporte);
 }
コード例 #19
0
        public void ValidarOtrasPaqueterias(double costoInicial, string mejorPaqueteria, double distancia, IImpresorMensajes impresor, IMedioTransporte trasporte)
        {
            iManejadorCadenaResponsabilidad manejador1 = new CalculadorCosto(new Fedex());
            iManejadorCadenaResponsabilidad manejador2 = new CalculadorCosto(new Estafeta());
            iManejadorCadenaResponsabilidad manejador3 = new CalculadorCosto(new DHL());

            manejador1.setNext(manejador2);
            manejador2.setNext(manejador3);

            manejador1.hacer(costoInicial, costoInicial, mejorPaqueteria, distancia, impresor, trasporte);
        }
コード例 #20
0
 private static void AddUnsupportedMedio(List <Package> packages, string origen, string destino, double distancia, DateTime fechaPedido, IMedioTransporte unsupportedMedio, IEnvioFactory envioFactory)
 {
     packages.Add(new Package()
     {
         Origen          = origen, Destino = destino, Distancia = distancia, Empresa = envioFactory.DeliveryCompany,
         MedioTransporte = unsupportedMedio, IsSupported = false, FechaRecepcion = fechaPedido
     });
 }
コード例 #21
0
 public bool ValidaContieneTrasporte(IMedioTransporte trasporte)
 {
     return(lstMediosTrasporte.Exists(x => x.cNombre == trasporte.cNombre));
 }
コード例 #22
0
 public Trasportador(IMedioTransporte _trasporte, IPaqueterias _paqueteria)
 {
     trasporte  = _trasporte;
     paqueteria = _paqueteria;
 }
コード例 #23
0
        public void hacer(double costoInicial, double mejorCosto, string mejorPaqueteria, double distancia, IImpresorMensajes impresor, IMedioTransporte trasporte)
        {
            double        costoNuevo   = 0;
            ITrasportador trasportador = null;

            if (paqueteria.ValidaContieneTrasporte(trasporte))
            {
                trasportador = new Trasportador(trasporte, paqueteria);
                costoNuevo   = trasportador.CalcularCostoTrasporte(distancia);
                if (costoNuevo < mejorCosto)
                {
                    mejorCosto      = costoNuevo;
                    mejorPaqueteria = paqueteria.cNombre;
                }
            }

            if (siguiente != null)
            {
                siguiente.hacer(costoInicial, mejorCosto, mejorPaqueteria, distancia, impresor, trasporte);
            }
            else
            {
                if (costoInicial != mejorCosto)
                {
                    impresor.mostrarMensaje(string.Format("Si hubieras pedido en {0} te hubiera costado ${1} más barato.",
                                                          mejorPaqueteria, costoInicial - mejorCosto));
                }
            }
        }