Пример #1
0
 public ProductBalanceDTO(ProductBalance pb)
 {
     Id             = pb.Id;
     Name           = pb.Medicament.Name;
     Price          = pb.Medicament.CalculatePriceReimbursed();
     Amount         = pb.Amount;
     ExpirationDate = pb.ExpirationDate.Date.ToString("O");
 }
Пример #2
0
 public ProductBalanceDTO(ProductBalance pb)
 {
     Id       = pb.Id;
     Name     = pb.Medicament.Name;
     Price    = pb.Price;
     Quantity = pb.Quantity;
     InSale   = pb.InSale;
 }
Пример #3
0
        public async Task <IActionResult> PlaceOrder(int id, IList <OrderRequestDTO> requestedProducts)
        {
            if (!IsValidApiRequest())
            {
                return(ApiBadRequest("Invalid Headers!"));
            }
            if (!AreProductsValid(id, requestedProducts))
            {
                return(ApiBadRequest("Invalid product requested!"));
            }

            var user = await GetCurrentUser();

            var warehouse = await Context.Warehouse
                            .Where(w => w.Id == id)
                            .Include(w => w.Products)
                            .FirstAsync();

            var order         = new Order(warehouse, user.Pharmacy.Address, user);
            var orderProducts = new List <ProductBalance>();

            foreach (var requestedProduct in requestedProducts)
            {
                var product          = GetProductInfoFromDto(requestedProduct);
                var warehouseBalance = await Context.ProductBalances
                                       .Where(pb => pb.Id == product.Id)
                                       .Include(pb => pb.Medicament)
                                       .Include(pb => pb.Provider)
                                       .FirstAsync();

                var newBalance = new ProductBalance(
                    warehouseBalance,
                    requestedProduct.Quantity,
                    warehouse, user.Pharmacy
                    );
                orderProducts.Add(newBalance);
            }

            order.Products = orderProducts;
            await Context.ProductBalances.AddRangeAsync(orderProducts);

            await Context.Order.AddAsync(order);

            await Context.SaveChangesAsync();

            return(StatusCode(201));
        }
Пример #4
0
        private async Task Restock(Pharmacy pharmacy, RequiredMedicamentAmount requiredAmount,
                                   ProductBalance productInPharmacy)
        {
            var orderDto = await CreateOrderDTO(requiredAmount, productInPharmacy);

            try
            {
                await _ordersManager.TryCreateOrder(orderDto, pharmacy.Id);
            }
            catch (DuplicateObjectException ex)
            {
                var order = await Context.Orders
                            .Where(o => o.Id == ex.Id)
                            .Include(o => o.OrderProductBalances)
                            .ThenInclude(opb => opb.ProductBalance)
                            .FirstOrDefaultAsync();

                order.UpdateFromDTO(await _ordersManager.CreateProductBalanceList(orderDto.Products));
                await Context.SaveChangesAsync();
            }
        }
Пример #5
0
        public async Task <ActionResult <GetDataDTO <OrderRequestDTO> > > OrderToWarehouse(int id,
                                                                                           IList <OrderRequestDTO> model)
        {
            if (!IsValidApiRequest())
            {
                return(ApiBadRequest("Invalid Headers!"));
            }
            if (!AreProductsValid(id, model))
            {
                return(ApiBadRequest("Invalid product requested!"));
            }

            var user = await GetCurrentUser();

            await Context.Entry(user.Warehouse).Collection(w => w.Products).LoadAsync();

            foreach (var requestProduct in model)
            {
                var product = GetProductInfoFromDto(requestProduct);

                if (AppendBalance(user.Warehouse.Products, product, requestProduct.Quantity))
                {
                    continue;
                }

                var providerBalance = await Context.ProductBalances
                                      .Where(pb => pb.Id == product.Id)
                                      .Include(pb => pb.Medicament)
                                      .Include(pb => pb.Provider)
                                      .FirstAsync();

                var newBalance = new ProductBalance(providerBalance, requestProduct.Quantity, user.Warehouse);
                await Context.ProductBalances.AddAsync(newBalance);
            }

            await Context.SaveChangesAsync();

            return(Ok());
        }
Пример #6
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);
        }
Пример #7
0
 private static bool IsRestockRequired(RequiredMedicamentAmount requiredAmount, ProductBalance productInPharmacy)
 {
     return(requiredAmount != null && requiredAmount.Amount > productInPharmacy.Amount);
 }
Пример #8
0
 public ProductInfo(ProductBalance pb)
 {
     Id           = pb.Id;
     MedicamentId = pb.Medicament.Id;
     Quantity     = pb.Quantity;
 }
Пример #9
0
        private void ShowProductBalance_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            ProductBalance pb = new ProductBalance();

            pb.Show();
        }
Пример #10
0
 public OrderProductBalance(Order order, ProductBalance pb)
 {
     Order          = order;
     ProductBalance = pb;
 }