コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }