示例#1
0
        public VentaResponse Add(VentaRequest request)
        {
            Vendedor vendedor = _unitOfWork.VendedorRepository.FindFirstOrDefault(x => x.Persona.Documento.Numero == request.DocumentoVendedor);

            if (vendedor == null)
            {
                return(new VentaResponse($"Vendedor con documento {request.DocumentoVendedor} no encontrado"));
            }
            if (ExisteFactura(request.NumeroFactura))
            {
                return(new VentaResponse($"La factura {request.NumeroFactura} ya está registrada"));
            }

            VentaBuilder ventaBuilder = new VentaBuilder(request.NumeroFactura);

            foreach (var item in request.Detalles)
            {
                ProductoBodega producto = _productoService.ProductoEnBodega(item.CodigoProducto, item.CodigoBodega);
                if (producto == null)
                {
                    return(new VentaResponse($"Producto {item.CodigoProducto} no está disponible en bodega {item.CodigoBodega}"));
                }
                if (_productoService.Disponible(item.CodigoProducto, item.CodigoBodega, item.Cantidad) == false)
                {
                    return(new VentaResponse
                           (
                               mensaje: $"El producto {item.CodigoProducto} no está disponible para esa cantidad."
                           ));
                }
                ventaBuilder = ventaBuilder.AgregarDetalle(producto, item.Cantidad, item.Precio, item.Descuento);
            }

            if (ventaBuilder.IsOk().Any())
            {
                return(new VentaResponse(string.Join(',', ventaBuilder.IsOk())));
            }

            Venta venta = ventaBuilder.Build(request.Abonado, request.Impuesto);

            vendedor.Vender(venta);

            _unitOfWork.VendedorRepository.Edit(vendedor);

            if (_unitOfWork.Commit() > 0)
            {
                return(new VentaResponse
                       (
                           mensaje: "Venta registrada correctamente",
                           entidad: venta
                       ));
            }

            return(new VentaResponse("No se pudo registrar la venta"));
        }
示例#2
0
        public void ConstruirVenta()
        {
            VentaBuilder ventaBuilder = new VentaBuilder("12345");

            ventaBuilder = ventaBuilder.AgregarDetalle(new ProductoBodega(), 2, 10000, 1200);
            ventaBuilder = ventaBuilder.AgregarDetalle(new ProductoBodega(), 4, 10500, 1200);
            ventaBuilder = ventaBuilder.AgregarDetalle(new ProductoBodega(), 1, 35000, 1500);
            ventaBuilder = ventaBuilder.AgregarDetalle(new ProductoBodega(), 5, 10000, 100);
            ventaBuilder = ventaBuilder.AgregarDetalle(new ProductoBodega(), 1, 10000, 0);
            ventaBuilder = ventaBuilder.AgregarDetalle(new ProductoBodega(), 1, 10000, 0);
            venta        = ventaBuilder.Build(100000, 10000);

            Assert.NotNull(venta.VentaDetalles);
            Assert.AreEqual(6, venta.VentaDetalles.Count);
        }
示例#3
0
        public void Setup()
        {
            VentaBuilder ventaBuilder = new VentaBuilder("KL-V-001");
            var          bodega       = new Bodega {
                Codigo = "001", Descripcion = "Principal", Tipo = BodegaTipo.Principal
            };

            leche = new Producto {
                Codigo = "LAC-001", Descripcion = "Leche de 1L", Nombre = "Leche Klarens 900ml", Precio = 2100, Estado = ProductoEstado.Activo
            };
            yogurt = new Producto {
                Codigo = "LAC-027", Descripcion = "Yogurt sencillo", Nombre = "Yogurt Klarens", Precio = 1200, Estado = ProductoEstado.Activo
            };

            var lecheBodega  = bodega.AgregarProducto(leche, 10);
            var yogurtBodega = bodega.AgregarProducto(yogurt, 20);

            ventaBuilder = ventaBuilder
                           .AgregarDetalle(lecheBodega, 2, 2100, 500)
                           .AgregarDetalle(yogurtBodega, 5, 1200, 0);

            venta = ventaBuilder.Build(100000, 10000);
        }