Exemple #1
0
        public void SetUp()
        {
            #region BaseProductos

            _bandejaDeMaduro = new ProductoParaVenderConEnvoltorio().
                               SetNombre("Bandeja de maduro").SetCantidad(25).SetCostoUnitario(2500);
            _bandejaDeMaduro.Id = 1;

            _envueltoDeMaduro = new ProductoParaVenderConEnvoltorio().
                                SetNombre("Embuelto de Maduro").SetCantidad(10).SetCostoUnitario(3000);
            _envueltoDeMaduro.Id = 2;

            _bandejaDeLeche = new ProductoParaVenderConEnvoltorio().
                              SetNombre("Bandeja de Leche").SetCantidad(13).SetCostoUnitario(2700);
            _bandejaDeLeche.Id = 3;

            _leche = new ProductoMateriaPrima().SetNombre("Leche").
                     SetCantidad(15).SetCostoUnitario(1500);
            _leche.Id = 4;

            _dulceDeLeche = new ProductoParaFabricarDuro().SetNombre("Dulce de leche").
                            SetCantidad(35).SetCostoUnitario(1500);
            _dulceDeLeche.Id = 5;

            _unidadesMedianasDeMaduro = new ProductoParaVenderSinEnvoltorio().
                                        SetNombre("Unidades medianas de maduro").SetCantidad(50).
                                        SetCostoUnitario(300);
            #endregion
            #region BaseTercero
            _duvan = new Tercero.TerceroBuilder("1065840833", "Duvan").Build();

            #endregion
            #region BaseCliente


            _clienteDuvan = new TerceroCliente.
                            TerceroClienteBuilder(_duvan).Build();
            _clienteDuvan.Id = 1;

            TerceroClientePrecioProducto precioProducto3 = new TerceroClientePrecioProducto.
                                                           TerceroClientePrecioProductoBuilder(_clienteDuvan, _bandejaDeMaduro).
                                                           SetPrecio(3600).Build();
            _clienteDuvan.AddPrecio(precioProducto3);

            TerceroClientePrecioProducto precioProducto4 = new TerceroClientePrecioProducto.
                                                           TerceroClientePrecioProductoBuilder(_clienteDuvan, _bandejaDeLeche).
                                                           SetPrecio(3900).Build();
            _clienteDuvan.AddPrecio(precioProducto4);

            TerceroClientePrecioProducto precioProducto5 = new TerceroClientePrecioProducto.
                                                           TerceroClientePrecioProductoBuilder(_clienteDuvan, _envueltoDeMaduro).
                                                           SetPrecio(4300).Build();
            _clienteDuvan.AddPrecio(precioProducto5);
            #endregion
            #region BaseUsuario
            _usuarioDuvan = new TerceroUsuario.TerceroUsuarioBuilder(_duvan).
                            SetUsuario("duvaninho").SetPassword("1234").Build();
            _usuarioDuvan.Id = 1;
            #endregion
        }
        public void ClienteAgregarPrecioProductoNoEsParaVender()
        {
            TerceroClientePrecioProducto precioProducto3 = new TerceroClientePrecioProducto.
                                                           TerceroClientePrecioProductoBuilder(clienteDuvan, _bandejaDeMaduro).
                                                           SetPrecio(3600).Build();

            clienteDuvan.AddPrecio(precioProducto3);

            InvalidOperationException ex = Assert.Throws <InvalidOperationException>(() =>
            {
                TerceroClientePrecioProducto precioProducto1 = new TerceroClientePrecioProducto.
                                                               TerceroClientePrecioProductoBuilder(clienteDuvan, _leche).
                                                               SetPrecio(1500).Build();
                clienteDuvan.AddPrecio(precioProducto1);
            });

            Assert.AreEqual("El producto " +
                            $"Leche no se puede vender", ex.Message);
        }
        public void ClienteAgregarPrecioMenorAlPermitido()
        {
            TerceroClientePrecioProducto precioProducto2 = new TerceroClientePrecioProducto.
                                                           TerceroClientePrecioProductoBuilder(clienteDuvan, _bandejaDeMaduro).
                                                           SetPrecio(3600).Build();

            clienteDuvan.AddPrecio(precioProducto2);
            InvalidOperationException ex = Assert.Throws <InvalidOperationException>(() =>
            {
                TerceroClientePrecioProducto precioProducto1 = new TerceroClientePrecioProducto.
                                                               TerceroClientePrecioProductoBuilder(clienteDuvan, _bandejaDeLeche).
                                                               SetPrecio(1500).Build();
                clienteDuvan.AddPrecio(precioProducto1);
            });

            Assert.AreEqual("El precio del " +
                            $"producto Bandeja de Leche no puede ser menor al" +
                            $" precio sugerido de 3857,14", ex.Message);
        }
        public void ClienteAgregarPreciosValidos()
        {
            TerceroClientePrecioProducto precioProducto3 = new TerceroClientePrecioProducto.
                                                           TerceroClientePrecioProductoBuilder(clienteDuvan, _bandejaDeMaduro).
                                                           SetPrecio(3600).Build();

            clienteDuvan.AddPrecio(precioProducto3);

            TerceroClientePrecioProducto precioProducto4 = new TerceroClientePrecioProducto.
                                                           TerceroClientePrecioProductoBuilder(clienteDuvan, _bandejaDeLeche).
                                                           SetPrecio(3900).Build();

            clienteDuvan.AddPrecio(precioProducto4);

            TerceroClientePrecioProducto precioProducto5 = new TerceroClientePrecioProducto.
                                                           TerceroClientePrecioProductoBuilder(clienteDuvan, _envueltoDeMaduro).
                                                           SetPrecio(4300).Build();

            clienteDuvan.AddPrecio(precioProducto5);

            Assert.AreEqual(3, clienteDuvan.ListaDePrecios.Count);
        }
        public Response Crear(TerceroClienteRequest request)
        {
            TerceroCliente cliente1 = this._unitOfWork.TerceroClienteRepository.
                                      FindBy(cliente => cliente.Tercero.Nit == request.NitTercero,
                                             includeProperties: "Tercero").FirstOrDefault();

            if (cliente1 != null)
            {
                return(new Response
                {
                    Mensaje = $"No se pudo registrar el cliente porque ya esta en el sistema"
                });
            }
            Tercero tercero = this._unitOfWork.TerceroRepository.
                              FindFirstOrDefault(tercero => tercero.Nit == request.NitTercero);

            if (tercero == null)
            {
                tercero = request.Tercero.UnMap();
            }
            TerceroCliente cliente = new TerceroCliente.TerceroClienteBuilder(tercero)
                                     .Build();

            List <Producto> productos            = this._unitOfWork.ProductoRepository.GetAll().ToList();
            List <Producto> productosEncontrados = productos.
                                                   Where(producto => request.Precios.Select(p => p.ProductoId).Contains(producto.Id)).
                                                   ToList();

            if (productosEncontrados.Count != request.Precios.Count)
            {
                var productosNoEncontrados = request.Precios.Where(precio => !productosEncontrados.
                                                                   Select(p => p.Id).Contains(precio.ProductoId)).
                                             Select(p => $"{p.NombreProducto} con Id {p.ProductoId}").ToList();
                return(new Response
                {
                    Mensaje = "Los siguientes productos no fueron encontrados en el sistema\n" +
                              string.Join("\n",
                                          productosNoEncontrados)
                });
            }

            cliente = new TerceroCliente.TerceroClienteBuilder(tercero).Build();
            try
            {
                IEnumerator <Producto> enumerator = productosEncontrados.GetEnumerator();
                request.Precios.ForEach((precio) =>
                {
                    enumerator.MoveNext();

                    TerceroClientePrecioProducto precioProducto = new TerceroClientePrecioProducto.
                                                                  TerceroClientePrecioProductoBuilder(cliente, enumerator.Current).
                                                                  SetPrecio(precio.Precio).Build();

                    cliente.AddPrecio(precioProducto);
                });
            }
            catch (InvalidOperationException e)
            {
                return(new Response {
                    Mensaje = e.Message
                });
            }

            this._unitOfWork.TerceroClienteRepository.Add(cliente);
            this._unitOfWork.Commit();
            return(new Response
            {
                Mensaje = "Cliente registrado con éxito",
                Data = new TerceroClienteRequest().Map(cliente)
            });
        }