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")); }
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); }
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); }