public Response HacerCompraService(CompraRequest request) { TerceroProveedor proveedor = this._unitOfWork.TerceroProvedorRepository. FindBy(provedor => provedor.Tercero.Nit == request.NitProveedor, includeProperties: "Tercero").FirstOrDefault(); if (proveedor == null) { return(new Response { Mensaje = $"El provedor con identificación {request.NitProveedor}" + $" no fue encontrado en el sistema, agréguelo antes" }); } TerceroUsuario usuario = this._unitOfWork.TerceroUsuarioRepository. FindFirstOrDefault(usuario => usuario.Id == request.UsuarioId); if (usuario == null) { return(new Response { Mensaje = $"El usuario con id {request.UsuarioId}" + $" no fue encontrado en el sistema, agréguelo antes" }); } var errores = PuedeRegistrarDetalles(request.Detalles); if (errores.Any()) { return(new Response { Mensaje = string.Join(", ", errores) }); } Compra compra = new Compra.CompraBuilder(proveedor, usuario).Build(); request.Detalles.ForEach((detalle) => { Producto producto = this._unitOfWork.ProductoRepository. FindBy(producto => producto.Id == detalle.ProductoId, includeProperties: "DetallesCompra.Compra").FirstOrDefault(); CompraDetalle compraDetalle = new CompraDetalle.CompraDetalleBuilder(producto, compra). SetCantidad(detalle.Cantidad).SetCostoUnitario(detalle.Valor).Build(); compra.AddDetalle(compraDetalle); producto.AddCompraDetalle(compraDetalle); }); this._unitOfWork.CompraRepository.Add(compra); this._unitOfWork.TransaccionRepository.Add(new Transaccion(TipoDeTransaccion.Egreso, Concepto.CompraDeMateriasPrimas, compra.Total)); this._unitOfWork.Commit(); return(new Response { Mensaje = "Compra registrada con éxito", Data = new CompraRequest().Map(compra) }); }
public void ProbarCompra() { Compra compra = new Compra.CompraBuilder(provedorMartin, usuarioDuvan).Build(); CompraDetalle detalle1 = new CompraDetalle.CompraDetalleBuilder(azucar, compra). SetCantidad(15).SetCostoUnitario(1800).Build(); CompraDetalle detalle2 = new CompraDetalle.CompraDetalleBuilder(leche, compra). SetCantidad(30).SetCostoUnitario(1500).Build(); compra.AddDetalle(detalle1); compra.AddDetalle(detalle2); leche.AddCompraDetalle(detalle2); azucar.AddCompraDetalle(detalle1); Assert.AreEqual(72000, compra.Total); Assert.AreEqual(75, leche.Cantidad); Assert.AreEqual(30, azucar.Cantidad); }