Ejemplo n.º 1
0
        public void ValidaMedioTransporte_Terrestre_true()
        {
            //Arrange
            ParametrosPaqueteriaDTO param = new ParametrosPaqueteriaDTO()
            {
                FechaPedido = new DateTime(2020, 2, 22), Distancia = 1200, NombreMedioTransporte = "Maritimo"
            };
            var DOCcalculaCostoTransporteTerrestre = new Mock <IMedioTransporte>();

            DOCcalculaCostoTransporteTerrestre.Setup(doc => doc.Nombre).Returns("Terrestre");
            var DOCcalculaCostoTransporteMaritimo = new Mock <IMedioTransporte>();

            DOCcalculaCostoTransporteMaritimo.Setup(doc => doc.Nombre).Returns("Maritimo");

            IMedioTransporte[] mediosTransporteFedex = { DOCcalculaCostoTransporteTerrestre.Object, DOCcalculaCostoTransporteMaritimo.Object };

            var DOCmargenUtilidad = new Mock <IMargenUtilidad>();

            DOCmargenUtilidad.Setup(doc => doc.ObtenerMargenUtilidad(param.FechaPedido)).Returns(1.5m);

            var SUT = new Estafeta(mediosTransporteFedex, DOCmargenUtilidad.Object);
            //ACT
            var valida = SUT.ValidaMedioTransporte("Terrestre");

            //Assert
            Assert.AreEqual(true, valida);
        }
Ejemplo n.º 2
0
        public void ObtenerFechaEntrega_22Febrero1200Maritimo_FechaPedidoMas57punto2hrs()
        {
            //Arrange
            ParametrosPaqueteriaDTO param = new ParametrosPaqueteriaDTO()
            {
                FechaPedido = new DateTime(2020, 2, 22), Distancia = 1200, NombreMedioTransporte = "Maritimo"
            };

            var DOCcalculaCostoTransporte = new Mock <IMedioTransporte>();

            DOCcalculaCostoTransporte.Setup(doc => doc.Nombre).Returns("Maritimo");
            DOCcalculaCostoTransporte.Setup(doc => doc.ObtieneTiempoTransporte(It.IsAny <ParametroCalculoMedioTransporteDTO>())).Returns(37.2m);
            IMedioTransporte[] mediosTransporteFedex = { DOCcalculaCostoTransporte.Object };

            var DOCmargenUtilidad = new Mock <IMargenUtilidad>();

            DOCmargenUtilidad.Setup(doc => doc.ObtenerMargenUtilidad(param.FechaPedido)).Returns(1.5m);

            var SUT = new Estafeta(mediosTransporteFedex, DOCmargenUtilidad.Object);
            //ACT
            var fechaEntrega = SUT.ObtenerFechaEntrega(param);

            //Assert
            Assert.AreEqual(param.FechaPedido.AddHours(37.28), fechaEntrega);
        }
Ejemplo n.º 3
0
        public void ObtenerCostoServicio_22Febrero1200Maritimo_664punto2()//Invierno
        {
            //Arrange
            ParametrosPaqueteriaDTO param = new ParametrosPaqueteriaDTO()
            {
                FechaPedido = new DateTime(2020, 2, 22), Distancia = 1200, NombreMedioTransporte = "Maritimo"
            };

            var DOCcalculaCostoTransporte = new Mock <IMedioTransporte>();

            DOCcalculaCostoTransporte.Setup(doc => doc.Nombre).Returns("Maritimo");
            DOCcalculaCostoTransporte.Setup(doc => doc.ObtieneCostoTransporte(It.IsAny <ParametroCalculoMedioTransporteDTO>())).Returns(442.80m);
            IMedioTransporte[] mediosTransporteFedex = { DOCcalculaCostoTransporte.Object };

            var DOCmargenUtilidad = new Mock <IMargenUtilidad>();

            DOCmargenUtilidad.Setup(doc => doc.ObtenerMargenUtilidad(param.FechaPedido)).Returns(1.45m);

            var SUT = new Estafeta(mediosTransporteFedex, DOCmargenUtilidad.Object);
            //ACT
            var costo = SUT.ObtenerCostoServicio(param);

            //Assert
            Assert.AreEqual(642.06m, costo);
        }
Ejemplo n.º 4
0
        public decimal ObtenerCostoServicio(ParametrosPaqueteriaDTO _param)
        {
            var MedioTransporte = ObtenerMedioTransporte(_param.NombreMedioTransporte);
            var CostoTransporte = MedioTransporte.ObtieneCostoTransporte(new ParametroCalculoMedioTransporteDTO()
            {
                Distancia = _param.Distancia, FechaCompra = _param.FechaPedido
            });
            decimal PorcentajeUtilidad = MargenUtilidad.ObtenerMargenUtilidad(_param.FechaPedido);

            return(Math.Round(CostoTransporte * PorcentajeUtilidad, 2));
        }
Ejemplo n.º 5
0
        public DateTime ObtenerFechaEntrega(ParametrosPaqueteriaDTO _param)
        {
            var MedioTransporte  = ObtenerMedioTransporte(_param.NombreMedioTransporte);
            var TiempoTransporte = MedioTransporte.ObtieneTiempoTransporte(new ParametroCalculoMedioTransporteDTO()
            {
                Distancia = _param.Distancia, FechaCompra = _param.FechaPedido
            });
            var TiempoEntrega = TiempoReparto[_param.NombreMedioTransporte.ToUpper()];
            var TiempoTotal   = TiempoTransporte + TiempoEntrega;

            return(_param.FechaPedido.AddHours(decimal.ToDouble(TiempoTotal)));
        }
        public void ValidaMedioTransporte_22Febrero1200MaritimoBicicleta_false()
        {
            //Arrange
            ParametrosPaqueteriaDTO param = new ParametrosPaqueteriaDTO()
            {
                FechaPedido = new DateTime(2020, 2, 22), Distancia = 1200, NombreMedioTransporte = "Maritimo"
            };
            var DOCpaqueteria = new Mock <IPaqueteria>();

            DOCpaqueteria.Setup(doc => doc.Nombre).Returns("Fedex");
            DOCpaqueteria.Setup(doc => doc.ObtenerFechaEntrega(param)).Returns(param.FechaPedido.AddHours(58.2));
            var SUT = new PaqueteriaStrategy(new IPaqueteria[] { DOCpaqueteria.Object });
            //ACT
            var valida = SUT.ValidaMedioTransporte("Fedex", "Bicicleta");

            //Assert
            Assert.AreEqual(false, valida);
        }
        public void ObtenerCostoServicio_22Febrero1200Maritimo_442punto8()
        {
            //Arrange
            ParametrosPaqueteriaDTO param = new ParametrosPaqueteriaDTO()
            {
                FechaPedido = new DateTime(2020, 2, 22), Distancia = 1200, NombreMedioTransporte = "Maritimo"
            };
            var DOCpaqueteria = new Mock <IPaqueteria>();

            DOCpaqueteria.Setup(doc => doc.Nombre).Returns("Fedex");
            DOCpaqueteria.Setup(doc => doc.ObtenerCostoServicio(param)).Returns(442.80m);
            var SUT = new PaqueteriaStrategy(new IPaqueteria[] { DOCpaqueteria.Object });
            //ACT
            var costo = SUT.ObtenerCostoServicio("Fedex", param);

            //Assert
            Assert.AreEqual(442.8m, costo);
        }
Ejemplo n.º 8
0
        public DateTime ObtenerFechaEntrega(string _nombrePaqueteria, ParametrosPaqueteriaDTO _param)
        {
            var paqueteria = ObtenerPaqueteria(_nombrePaqueteria);

            return(paqueteria.ObtenerFechaEntrega(_param));
        }
Ejemplo n.º 9
0
        public decimal ObtenerCostoServicio(string _nombrePaqueteria, ParametrosPaqueteriaDTO _param)
        {
            var paqueteria = ObtenerPaqueteria(_nombrePaqueteria);

            return(paqueteria.ObtenerCostoServicio(_param));
        }
Ejemplo n.º 10
0
        public List <EstadoPedidoDTO> ObtenerEstatusPedidos(DateTime fechaHoy)
        {
            decimal                      costoServicio = 0;
            DateTime                     fechaEntrega;
            TextoFormateadorEnum         tipoDiferenciaFecha;
            ITextoFormateador            textoFormateador;
            List <OpcionMasEconomicaDTO> lstCostosOtrasPaqueterias = new List <OpcionMasEconomicaDTO>();
            List <EstadoPedidoDTO>       lstEstadosPedidos         = new List <EstadoPedidoDTO>();
            int numeroLinea = 1;

            foreach (var pedido in LstPedidos)
            {
                var param = new ParametrosPaqueteriaDTO()
                {
                    NombreMedioTransporte = pedido.MedioTransporte,
                    FechaPedido           = pedido.FechaPedido,
                    Distancia             = pedido.Distancia
                };
                try
                {
                    costoServicio             = EstrategiaPaqueteria.ObtenerCostoServicio(pedido.Paqueteria, param);
                    fechaEntrega              = EstrategiaPaqueteria.ObtenerFechaEntrega(pedido.Paqueteria, param);
                    tipoDiferenciaFecha       = ObtenerTipoDiferenciaFecha(fechaHoy, fechaEntrega);
                    lstCostosOtrasPaqueterias = CalcularOtrasOpcionesEnvio(pedido.Paqueteria, param);
                    textoFormateador          = TextoFormateadorFactory.Create(tipoDiferenciaFecha);
                    lstEstadosPedidos.AddRange(textoFormateador.Formatear(new DatoSalidaDTO()
                    {
                        Linea              = numeroLinea,
                        CiudadOrigen       = pedido.CiudadOrigen,
                        CiudadDestino      = pedido.CiudadDestino,
                        CostoServicio      = costoServicio,
                        FechaEntrega       = fechaEntrega,
                        FechaHoy           = fechaHoy,
                        NombrePaqueteria   = pedido.Paqueteria,
                        PaisDestino        = pedido.PaisDestino,
                        PaisOrigen         = pedido.PaisOrigen,
                        OpcionMasEconomica = ObtenerOpcionDeEnvioMasEconomica(costoServicio, lstCostosOtrasPaqueterias)
                    }));
                }
                catch (PaqueteriaException ex) {
                    lstEstadosPedidos.Add(new EstadoPedidoDTO()
                    {
                        Estado     = "Error",
                        Paqueteria = pedido.Paqueteria,
                        Linea      = numeroLinea,
                        Mensaje    = ex.Message,
                        Color      = "Red"
                    });
                }
                catch (MedioTransporteException mex)
                {
                    lstEstadosPedidos.Add(new EstadoPedidoDTO()
                    {
                        Estado     = "Error",
                        Paqueteria = pedido.Paqueteria,
                        Linea      = numeroLinea,
                        Mensaje    = mex.Message,
                        Color      = "Red"
                    });
                }
                numeroLinea++;
            }
            return(lstEstadosPedidos);
        }
Ejemplo n.º 11
0
        private List <OpcionMasEconomicaDTO> CalcularOtrasOpcionesEnvio(string _nombrePaqueteriaOmitir, ParametrosPaqueteriaDTO _param)
        {
            List <OpcionMasEconomicaDTO> opciones = new List <OpcionMasEconomicaDTO>();
            var lstOtrasPaqueterias = LstPaqueterias.Where(n => n.Nombre != _nombrePaqueteriaOmitir);

            foreach (var paqueteria in lstOtrasPaqueterias)
            {
                if (paqueteria.ValidaMedioTransporte(_param.NombreMedioTransporte))
                {
                    var calculoCosto = paqueteria.ObtenerCostoServicio(_param);
                    opciones.Add(new OpcionMasEconomicaDTO()
                    {
                        NombrePaqueteria = paqueteria.Nombre,
                        CostoEnvio       = calculoCosto
                    });
                }
            }
            return(opciones);
        }