Ejemplo n.º 1
0
        public void Validar(List <IEmpresa> empresas, List <Pedido> pedidos)
        {
            var countQuery = new Dictionary <string, string>();
            var mensaje    = string.Empty;

            foreach (var pedido in pedidos)
            {
                var lEmpresa = empresas.Where(s => s.Nombre == pedido.Empresa).Any();
                var lMedio   = empresas.Where(w => w.Nombre == pedido.Empresa).SelectMany(s1 => s1.MediosTransporte.Where(w1 => w1.Nombre == pedido.Medio)).Any();

                if (!lEmpresa)
                {
                    mensaje = _armarMensajes.ArmarMensajePaqueteriaNoExistente(pedido);
                    _presentador.ImprimirDatos(mensaje, "Red");
                }

                if (lEmpresa && !lMedio)
                {
                    mensaje = _armarMensajes.ArmarMensajeMedioTransorteIncorrecto(pedido);
                    _presentador.ImprimirDatos(mensaje, "Red");
                }

                if (lEmpresa && lMedio)
                {
                    var empresa        = empresas.Where(s => s.Nombre == pedido.Empresa).FirstOrDefault();
                    var tiempoTraslado = _procesarDatos.ProcesarTiempoTraslado(pedido.Distancia, empresa.MediosTransporte.Where(w => w.Nombre == pedido.Medio).Select(s => s.VelocidadEntrega).FirstOrDefault());
                    var costoXKm       = empresa.MediosTransporte.Where(w => w.Nombre == pedido.Medio).Select(s => s.CostroPorKilometro).FirstOrDefault();
                    var margenUtilidad = empresa.MargenUtilidad;
                    var fechaEntrega   = pedido.FechaHoraPedido.AddHours(tiempoTraslado);
                    var costoEnvio     = (costoXKm * pedido.Distancia) * (1 + margenUtilidad / 100);

                    pedido.TiempoTraslado = tiempoTraslado;
                    pedido.FechaEntrega   = fechaEntrega;
                    pedido.CostoEnvio     = costoEnvio;

                    var minutos = new MinutosHandler();
                    var horas   = new HorasHandler();
                    var dias    = new DiasHandler();
                    var meses   = new MesesHandler();
                    minutos.SetNext(horas).SetNext(dias).SetNext(meses);
                    Cliente.ClientCodeRangoTiempo(minutos, pedido);

                    if (pedido.FechaEntrega < DateTime.Now)
                    {
                        mensaje = _armarMensajes.ArmarMensajeValido(pedido);
                        _presentador.ImprimirDatos(mensaje, "Green");
                    }
                    else
                    {
                        mensaje = _armarMensajes.ArmarMensajeValido(pedido);
                        _presentador.ImprimirDatos(mensaje, "Yellow");
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void Handle_EnviarObjetoTipoPedidoVacio_DevuelveNulo()
        {
            // Arrange
            var pedido = new Pedido();

            // Act
            var SUT = new MinutosHandler();
            var act = SUT.Handle(pedido);

            // Assert
            Assert.IsNull(act);
        }
Ejemplo n.º 3
0
        public void Handle_EnviarObjetoTipoPedidoVacioAsignando_DevuelveNulo()
        {
            // Arrange
            var pedido = new Pedido
            {
                FechaEntrega = new DateTime(2020, 01, 28, 17, 15, 00)
            };

            // Act
            var SUT      = new MinutosHandler();
            var act      = ((Pedido)SUT.Handle(pedido)).RangoTiempo;
            var expected = $"{Math.Abs((pedido.FechaEntrega - DateTime.Now).TotalMinutes)} Minutos";

            // Assert
            Assert.AreEqual(expected, act);
        }