コード例 #1
0
        public async Task <IPedido> GerarPedido(ICarrinhoLivro CarrinhoLivro, Livros Livros, Pessoa Cliente)
        {
            if (CarrinhoLivro is null)
            {
                throw new ArgumentNullException(nameof(CarrinhoLivro));
            }


            if (Livros is null || Livros.Count <= 0)
            {
                throw new ArgumentNullException(nameof(Livros));
            }


            if (Cliente is null)
            {
                throw new ArgumentNullException(nameof(Cliente));
            }

            Pedido fPedido = new Pedido(Cliente, Livros, DateTime.Now);

            IPedido pedido = CarrinhoLivro.EfetivarPedidoCarinho(this._CarrinhoFactory, fPedido);

            await this._CarrinhoRepository.AddPedido(CarrinhoLivro, pedido).ConfigureAwait(false);

            return(pedido);
        }
コード例 #2
0
        public override string FormatearMensaje(IPedido pedido)
        {
            string resultado = string.Empty;

            if (ValidarTransporte(pedido.TipoTransporte))
            {
                if (pedido.Tiempo.Equals(TipoEvento.Pasado) && pedido.Duracion > 1)
                {
                    Console.ForegroundColor = ConsoleColor.Green;

                    resultado = string.Format(FormatoMensajeCorrecto,
                                              "salió", pedido.Origen,
                                              "llegó", pedido.Destino,
                                              "hace", pedido.Duracion, pedido.EscalaTiempo.ToString().ToLower() + "s",
                                              "tuvo", pedido.Costo,
                                              pedido.Empresa);
                }
                else if (_formateadorMensaje == null)
                {
                    Console.ForegroundColor = ConsoleColor.Red;

                    resultado = string.Format(FormatoMensajeInCorrectoEmpresa, pedido.Empresa);
                }
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;

                resultado = string.Format(FormatoMensajeInCorrectoTransporte, pedido.Empresa, pedido.NombreTransporte);
            }

            return(resultado);
        }
コード例 #3
0
        private void BuildOutput(IPedido pedido)
        {
            Pedido Pedido = (Pedido)pedido;
            var    output = new GerarPedidoSaida(Pedido);

            this._GerarPedidoSaidaPort.Standard(output);
        }
コード例 #4
0
        public override string FormatearMensaje(IPedido pedido)
        {
            string resultado = string.Empty;

            if (ValidarTransporte(pedido.TipoTransporte))
            {
                if (pedido.Tiempo.Equals(TipoEvento.Futuro) && pedido.Duracion == 1)
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;

                    resultado = string.Format(FormatoMensajeCorrecto,
                                              "ha salido", pedido.Origen,
                                              "llegará", pedido.Destino,
                                              "dentro de", pedido.Duracion, pedido.EscalaTiempo.ToString().ToLower(),
                                              "tendrá", pedido.Costo,
                                              pedido.Empresa);
                }
                else if (_formateadorMensaje != null)
                {
                    resultado = _formateadorMensaje.FormatearMensaje(pedido);
                }
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                resultado = string.Format(FormatoMensajeInCorrectoTransporte, pedido.Empresa, pedido.NombreTransporte);
            }

            return(resultado);
        }
コード例 #5
0
        private Pedido PatchPedido(Pedido pedido, IPedido pedidoNovo)
        {
            pedido.NumeroPedido = pedidoNovo.NumeroPedido;

            if (pedidoNovo.ClienteId > 0)
            {
                pedido.ClienteId = pedidoNovo.ClienteId;
            }

            if (pedidoNovo.DataPedido > DateTime.MinValue)
            {
                pedido.DataPedido = pedidoNovo.DataPedido;
            }

            if (pedidoNovo.ItensPedido != null && pedidoNovo.ItensPedido.Any())
            {
                pedido.ItensPedido = pedidoNovo.ItensPedido.Select(f => (ProdutoPedido)f).ToList();
            }

            if (pedidoNovo.ValorFrete > 0)
            {
                pedido.ValorFrete = pedidoNovo.ValorFrete;
            }

            return(pedido);
        }
コード例 #6
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);
        }
コード例 #7
0
 public void RePoblarPedido(IPedido pedido, DateTime fechaActual, int margenUtilidad, ITransporte transporte)
 {
     pedido.EscalaTiempo = _obtenedorEscala.ObtenerEscalaTiempo(fechaActual, pedido.FechaHora);
     pedido.Tiempo       = _obtenedorTipoEvento.ObtenerTipoEvento(fechaActual, pedido.FechaHora);
     pedido.Duracion     = _obtenedorDuracion.ObtenerDuracion(fechaActual, pedido.FechaHora, pedido.EscalaTiempo);
     pedido.Costo        = _calculador.CalcularCosto(transporte.CostoKm, pedido.Distancia, margenUtilidad);
     pedido.FechaEntrega = _calculador.CalcularFechaEntrega(pedido.FechaHora, pedido.Duracion, pedido.EscalaTiempo);
 }
コード例 #8
0
		public OpçõesImpressão(IPedido pedido)
		{
			InitializeComponent();
			this.pedido = pedido;

			// TODO: tornar assincrono
			ObterDados();
		}
コード例 #9
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);
        }
コード例 #10
0
ファイル: Program.cs プロジェクト: JuanHau/RastreoPaquetes
        public static void Main(string[] args)
        {
            LectorArchivo     lectorArchivo     = new LectorArchivo();
            SeparadorColumnas separadorColumnas = new SeparadorColumnas();
            ValidadorLinea    validadorLinea    = new ValidadorLinea();

            ValidadorFecha      validadorFecha      = new ValidadorFecha();
            ValidadorTransporte validadorTransporte = new ValidadorTransporte();
            Calculador          calculador          = new Calculador();
            ObtenedorEscala     obtenedorEscala     = new ObtenedorEscala();
            ObtenedorDuracion   obtenedorDuracion   = new ObtenedorDuracion();
            ObtenedorTipoEvento obtenedorTipoEvento = new ObtenedorTipoEvento();

            FormateadorFuturoMensajeSingular formateadorFuturoMensajeSingular = new FormateadorFuturoMensajeSingular();
            FormateadorFuturoMensajePlural   formateadorFuturoMensajePlural   = new FormateadorFuturoMensajePlural();
            FormateadorPasadoMensajeSingular formateadorPasadoMensajeSingular = new FormateadorPasadoMensajeSingular();
            FormateadorPasadoMensajePlural   formateadorPasadoMensajePlural   = new FormateadorPasadoMensajePlural();

            formateadorFuturoMensajeSingular.SiguienteFormateador(formateadorFuturoMensajePlural);
            formateadorFuturoMensajePlural.SiguienteFormateador(formateadorPasadoMensajeSingular);
            formateadorPasadoMensajeSingular.SiguienteFormateador(formateadorPasadoMensajePlural);

            PobladorPedido pobladorPedido = new PobladorPedido(
                validadorFecha,
                validadorTransporte,
                calculador,
                obtenedorEscala,
                obtenedorDuracion,
                obtenedorTipoEvento);

            ImprimidorPantalla imprimidorPantalla = new ImprimidorPantalla();

            FactoryEjecutor servicioEjecutor = new FactoryEjecutor(validadorTransporte, pobladorPedido);

            List <string> lineas = lectorArchivo.LeerArchivo(Path.GetFullPath("paquetes.txt"));

            foreach (string linea in lineas)
            {
                string[] columnas = separadorColumnas.SepararPorCaracter(linea, ',');
                if (validadorLinea.ValidarFormato(columnas, 6))
                {
                    IPedido pedido = pobladorPedido.PoblarPedido(columnas);

                    servicioEjecutor.RealizarEnvios(pedido, new DateTime(2020, 01, 01));

                    string resultado = formateadorFuturoMensajeSingular.FormatearMensaje(pedido);

                    imprimidorPantalla.ImprimirConsola(resultado);
                }
            }

            Console.ReadLine();
        }
コード例 #11
0
        public async Task <int> AtualizarPedido(IPedido pedido, CancellationToken cancellationToken = default)
        {
            var pedidoLocal = await this.contexto.Pedido.FindAsync(new object[] { pedido.NumeroPedido }, cancellationToken);

            if (pedidoLocal == null)
            {
                throw new ArgumentNullException("O Pedido não foi encontrado");
            }

            this.contexto.Pedido.Update(PatchPedido(pedidoLocal, pedido));

            return(await this.contexto.SaveChangesAsync(cancellationToken));
        }
コード例 #12
0
        public EntidadManager(DataSetFacturacionTableAdapters.clienteTableAdapter ClienteTB, DataSetFacturacion ds, DataSetFacturacionTableAdapters.pedidoTableAdapter PedidoTB, DataSetFacturacionTableAdapters.pedidos_costosTableAdapter CostosTB, DataSetFacturacionTableAdapters.ficha_costosTableAdapter FichaCostosTB)
        {
            this.ClienteTB     = ClienteTB;
            this.PedidoTB      = PedidoTB;
            this.CostosTB      = CostosTB;
            this.FichaCostosTB = FichaCostosTB;

            this.ds = ds;

            ientidad  = new EntidadAccess();
            icliente  = new ClienteAccess(ClienteTB, ds, PedidoTB, CostosTB, FichaCostosTB);
            iservicio = new ServicioAccess(ClienteTB, ds, PedidoTB, CostosTB, FichaCostosTB);
            ipedido   = new PedidoAccess(ClienteTB, ds, PedidoTB, CostosTB, FichaCostosTB);
        }
コード例 #13
0
        public EntidadManager(DataSetFacturacionTableAdapters.clienteTableAdapter ClienteTB, DataSetFacturacion ds, DataSetFacturacionTableAdapters.pedidoTableAdapter PedidoTB, DataSetFacturacionTableAdapters.pedidos_costosTableAdapter CostosTB, DataSetFacturacionTableAdapters.ficha_costosTableAdapter FichaCostosTB)
        {
            this.ClienteTB = ClienteTB;
            this.PedidoTB = PedidoTB;
            this.CostosTB = CostosTB;
            this.FichaCostosTB = FichaCostosTB;

            this.ds = ds;

            ientidad = new EntidadAccess();
            icliente = new ClienteAccess(ClienteTB,ds, PedidoTB,CostosTB,FichaCostosTB);
            iservicio = new ServicioAccess(ClienteTB, ds, PedidoTB, CostosTB, FichaCostosTB);
            ipedido = new PedidoAccess(ClienteTB, ds, PedidoTB, CostosTB, FichaCostosTB);
        }
コード例 #14
0
        public void RealizarEnvios(IPedido pedido, DateTime fechaActual)
        {
            string nombreEmpresa = pedido.Empresa;

            ConsolidarEmpresas(nombreEmpresa);

            if (_creadorEmpresa != null)
            {
                _creadorEmpresa.NuevaEmpresa();
                IEmpresa empresa = _creadorEmpresa.GetEmpresa();

                if (_validadorTransporte.DisponibilidadTransporte(pedido.TipoTransporte, empresa.Transportes.Keys.ToList()))
                {
                    _pobladorPedido.RePoblarPedido(pedido, fechaActual, empresa.MargenUtilidad, empresa.Transportes[pedido.TipoTransporte]);
                }
            }
        }
コード例 #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
        public async Task Executar(GerarPedidoEntrada entrada)
        {
            if (entrada is null)
            {
                this._GerarPedidoSaidaPort.WriteError("Entrada não pode ser nula");
                return;
            }

            ICarrinhoLivro CarrinhoLivro = await this._CarrinhoRepository.GetCarrinhoLivro().ConfigureAwait(false);

            if (CarrinhoLivro is null)
            {
                this._GerarPedidoSaidaPort.WriteError("Carrinho não existe.");
                return;
            }

            IPedido pedido = await this._CarrinhoService.GerarPedido(CarrinhoLivro, entrada.livros, entrada.Cliente);


            await this._unitOfWork.Save().ConfigureAwait(false);

            this.BuildOutput(pedido);
        }
コード例 #17
0
        public void PoblarPedido_ColumnasCompletas_DevolverEntidadPedido()
        {
            //Arrange
            _validadorTransporte.Setup(x => x.EsMedioDeTransporte(It.IsAny <string>())).Returns(TipoTransporte.Tren);
            _validadorFecha.Setup(x => x.ValidarFechaString(It.IsAny <string>())).Returns(new DateTime(2020, 1, 1, 0, 1, 0));
            string[] campos = new string[6];
            campos[0] = "Tizimín";
            campos[1] = "Mérida";
            campos[2] = "147";
            campos[3] = "DHL";
            campos[4] = "Tren";
            campos[5] = "01/01/2020 00:01:00";

            //Act
            IPedido pedido = _pobladorPedido.PoblarPedido(campos);

            //Assert
            Assert.AreEqual("Tizimín", pedido.Origen);
            Assert.AreEqual("Mérida", pedido.Destino);
            Assert.AreEqual(147, pedido.Distancia);
            Assert.AreEqual("DHL", pedido.Empresa);
            Assert.AreEqual(TipoTransporte.Tren, pedido.TipoTransporte);
            Assert.AreEqual(new DateTime(2020, 01, 01, 0, 1, 0), pedido.FechaHora);
        }
コード例 #18
0
ファイル: Barco.cs プロジェクト: JuanHau/RastreoPaquetes
 public void RealizarEntrega(IPedido pedido, int margenUtilidad)
 {
     throw new NotImplementedException();
 }
コード例 #19
0
 public abstract string FormatearMensaje(IPedido pedido);
コード例 #20
0
 public void EnviarPedido(IPedido pedido)
 {
     this.Facturacion.EnviarPedido(pedido);
 }
コード例 #21
0
 public PedidoController(IPedido pedido)
 {
     this._pedido = pedido;
 }
コード例 #22
0
 public PedidoController(IPedido pedido, DataCarritoCompras carritoCompras)
 {
     this.pedidoRepositorio    = pedido;
     carritoComprasRepositorio = carritoCompras;
 }
コード例 #23
0
 public PedidoController(IPedido pedido)
 {
     _pedido = pedido;
 }
コード例 #24
0
 public PedidoController(IPedido IPedido, IItemPedido IItemPedido)
 {
     _IPedido     = IPedido;
     _IItemPedido = IItemPedido;
 }
コード例 #25
0
 public void EnviarPedido(IPedido pedido)
 {
     throw new NotImplementedException();
 }
コード例 #26
0
 public PromocaoBusiness(IItemPedido IItemPedido, IPedido IPedido)
 {
     _IItemPedido = IItemPedido;
     _IPedido     = IPedido;
 }
コード例 #27
0
        public async Task CadastrarPedido(IPedido pedido, CancellationToken cancellationToken = default)
        {
            await this.contexto.Pedido.AddAsync((Pedido)pedido, cancellationToken);

            await this.contexto.SaveChangesAsync(cancellationToken);
        }
コード例 #28
0
 public PedidoController()
 {
     _pedidoRepository = new PedidoRepository();
 }
コード例 #29
0
 public PedidoController(IPedido pedidoBll)
 {
     _pedidoBll = pedidoBll;
 }