diff --git a/AutoWorkshopBusinessLogic/BusinessLogics/OrderLogic.cs b/AutoWorkshopBusinessLogic/BusinessLogics/OrderLogic.cs index 246c491..77a26f8 100644 --- a/AutoWorkshopBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/AutoWorkshopBusinessLogic/BusinessLogics/OrderLogic.cs @@ -13,11 +13,14 @@ namespace AutoWorkshopBusinessLogic.BusinessLogics private readonly ILogger _logger; private readonly IOrderStorage _orderStorage; + private readonly IShopStorage _shopStorage; - public OrderLogic(ILogger Logger, IOrderStorage OrderStorage) + public OrderLogic(ILogger Logger, IOrderStorage OrderStorage, IShopStorage ShopStorage) { _logger = Logger; + _orderStorage = OrderStorage; + _shopStorage = ShopStorage; } public List? ReadList(OrderSearchModel? Model) @@ -107,6 +110,23 @@ namespace AutoWorkshopBusinessLogic.BusinessLogics public bool DeliveryOrder(OrderBindingModel Model) { + var Order = _orderStorage.GetElement(new OrderSearchModel + { + Id = Model.Id + }); + + if (Order is null) + throw new ArgumentNullException(nameof(Order)); + + if (!_shopStorage.RestockingShops(new SupplyBindingModel + { + RepairId = Order.RepairId, + Count = Order.Count + })) + { + throw new ArgumentException("Недостаточно места"); + } + return ChangeOrderStatus(Model, OrderStatus.Delivered); } diff --git a/AutoWorkshopBusinessLogic/BusinessLogics/ShopLogic.cs b/AutoWorkshopBusinessLogic/BusinessLogics/ShopLogic.cs index 632228d..c28c2cb 100644 --- a/AutoWorkshopBusinessLogic/BusinessLogics/ShopLogic.cs +++ b/AutoWorkshopBusinessLogic/BusinessLogics/ShopLogic.cs @@ -158,5 +158,22 @@ namespace AutoWorkshopBusinessLogic.BusinessLogics throw new InvalidOperationException("Магазин с таким названием уже есть"); } } + + public bool Sale(SupplySearchModel Model) + { + if (!Model.PizzaId.HasValue || !Model.Count.HasValue) + return false; + + _logger.LogInformation("Проверка ремонтов во всех магазинах"); + + if (_shopStorage.Sale(Model)) + { + _logger.LogInformation("Продажа выполнена успешно"); + return true; + } + + _logger.LogInformation("Продажа не выполнена"); + return false; + } } } diff --git a/AutoWorkshopContracts/BindingModels/ShopBindingModel.cs b/AutoWorkshopContracts/BindingModels/ShopBindingModel.cs index 60e6480..119f369 100644 --- a/AutoWorkshopContracts/BindingModels/ShopBindingModel.cs +++ b/AutoWorkshopContracts/BindingModels/ShopBindingModel.cs @@ -13,5 +13,7 @@ namespace AutoWorkshopContracts.BindingModels public DateTime OpeningDate { get; set; } = DateTime.Now; public Dictionary ShopRepairs { get; set; } = new(); + + public int RepairsMaxCount { get; set; } } } diff --git a/AutoWorkshopContracts/BusinessLogicContracts/IShopLogic.cs b/AutoWorkshopContracts/BusinessLogicContracts/IShopLogic.cs index 6a0ee7f..5bf41b7 100644 --- a/AutoWorkshopContracts/BusinessLogicContracts/IShopLogic.cs +++ b/AutoWorkshopContracts/BusinessLogicContracts/IShopLogic.cs @@ -17,5 +17,7 @@ namespace AutoWorkshopContracts.BusinessLogicsContracts bool Delete(ShopBindingModel Model); bool MakeSupply(SupplyBindingModel Model); + + bool Sale(SupplySearchModel Model); } } diff --git a/AutoWorkshopContracts/SearchModels/SupplySearchModel.cs b/AutoWorkshopContracts/SearchModels/SupplySearchModel.cs new file mode 100644 index 0000000..16c6319 --- /dev/null +++ b/AutoWorkshopContracts/SearchModels/SupplySearchModel.cs @@ -0,0 +1,8 @@ +namespace PizzeriaContracts.SearchModels +{ + public class SupplySearchModel + { + public int? RepairId { get; set; } + public int? Count { get; set; } + } +} diff --git a/AutoWorkshopContracts/StoragesContracts/IShopStorage.cs b/AutoWorkshopContracts/StoragesContracts/IShopStorage.cs index dcaee83..d98fc21 100644 --- a/AutoWorkshopContracts/StoragesContracts/IShopStorage.cs +++ b/AutoWorkshopContracts/StoragesContracts/IShopStorage.cs @@ -1,6 +1,7 @@ using AutoWorkshopContracts.BindingModels; using AutoWorkshopContracts.SearchModels; using AutoWorkshopContracts.ViewModels; +using PizzeriaContracts.SearchModels; namespace AutoWorkshopContracts.StoragesContracts { @@ -17,5 +18,9 @@ namespace AutoWorkshopContracts.StoragesContracts ShopViewModel? Update(ShopBindingModel Model); ShopViewModel? Delete(ShopBindingModel Model); + + bool Sale(SupplySearchModel Model); + + bool RestockingShops(SupplyBindingModel Model); } } diff --git a/AutoWorkshopContracts/ViewModels/ShopViewModel.cs b/AutoWorkshopContracts/ViewModels/ShopViewModel.cs index b449a11..2538f00 100644 --- a/AutoWorkshopContracts/ViewModels/ShopViewModel.cs +++ b/AutoWorkshopContracts/ViewModels/ShopViewModel.cs @@ -17,5 +17,8 @@ namespace AutoWorkshopContracts.ViewModels public DateTime OpeningDate { get; set; } public Dictionary ShopRepairs { get; set; } = new(); + + [DisplayName("Вместимость")] + public int RepairsMaxCount { get; set; } } } diff --git a/AutoWorkshopDataModels/Models/IShopModel.cs b/AutoWorkshopDataModels/Models/IShopModel.cs index 0211aa8..83f1f3d 100644 --- a/AutoWorkshopDataModels/Models/IShopModel.cs +++ b/AutoWorkshopDataModels/Models/IShopModel.cs @@ -9,5 +9,7 @@ DateTime OpeningDate { get; } Dictionary ShopRepairs { get; } + + int RepairsMaxCount { get; } } }