private async Task TryAddProduct(Pharmacy pharmacy, TransactionProductDTO dto, Transaction transaction) { var productInPharmacy = pharmacy.Products.FirstOrDefault(pb => pb.Id == dto.ProductBalanceId); if (productInPharmacy == null) { throw new ResourceNotFoundException("productBalance"); } if (productInPharmacy.Amount < dto.Amount) { throw new ArgumentException("amount"); } productInPharmacy.Amount -= dto.Amount; var requiredAmount = pharmacy.RequiredMedicamentAmounts .FirstOrDefault(rma => rma.MedicamentId == productInPharmacy.MedicamentId); if (IsRestockRequired(requiredAmount, productInPharmacy)) { await Restock(pharmacy, requiredAmount, productInPharmacy); } transaction.AddProduct(productInPharmacy, dto.Amount); }
private async Task <ProductBalance> CreateProductBalance(TransactionProductDTO product) { var productBalance = await _context.ProductBalances .Where(pb => pb.Id == product.ProductBalanceId) .Include(pb => pb.Medicament) .FirstOrDefaultAsync(); if (productBalance == null) { throw new NullReferenceException(); } return(new ProductBalance(productBalance, product.Amount)); }
private async Task <CreateOrderDTO> CreateOrderDTO(RequiredMedicamentAmount requiredAmount, ProductBalance productInPharmacy) { var warehouse = await Context.Warehouses .Where(w => w.Id == 1) .Include(w => w.Products) .FirstOrDefaultAsync(); var productsToOrder = new TransactionProductDTO { Amount = requiredAmount.Amount - productInPharmacy.Amount, ProductBalanceId = warehouse.GetProductId(productInPharmacy.MedicamentId) }; var orderDto = new CreateOrderDTO { WarehouseId = warehouse.Id, Products = new List <TransactionProductDTO> { productsToOrder } }; return(orderDto); }