diff --git a/LawFirm/AbstractLawFirmBusinessLogic/BusinessLogic/OrderLogic.cs b/LawFirm/AbstractLawFirmBusinessLogic/BusinessLogic/OrderLogic.cs index 4b58926..581b132 100644 --- a/LawFirm/AbstractLawFirmBusinessLogic/BusinessLogic/OrderLogic.cs +++ b/LawFirm/AbstractLawFirmBusinessLogic/BusinessLogic/OrderLogic.cs @@ -18,17 +18,18 @@ namespace AbstractLawFirmBusinessLogic.BusinessLogic { private readonly ILogger _logger; private readonly IOrderStorage _orderStorage; - private readonly IShopStorage _shopStorage; - private readonly IShopLogic _shopLogic; - private readonly IDocumentStorage _documentStorage; - public OrderLogic(ILogger logger, IOrderStorage orderStorage, IShopLogic shopLogic, IDocumentStorage documentStorage, IShopStorage shopStorage) + private readonly IShopStorage _shopStorage; + private readonly IShopLogic _shopLogic; + private readonly IDocumentStorage _documentStorage; + + public OrderLogic(ILogger logger, IOrderStorage orderStorage, IShopLogic shopLogic, IDocumentStorage documentStorage, IShopStorage shopStorage) { _logger = logger; _orderStorage = orderStorage; - _shopLogic = shopLogic; - _documentStorage = documentStorage; - _shopStorage = shopStorage; - } + _shopLogic = shopLogic; + _documentStorage = documentStorage; + _shopStorage = shopStorage; + } public List? ReadList(OrderSearchModel? model) { @@ -51,8 +52,8 @@ namespace AbstractLawFirmBusinessLogic.BusinessLogic model.Status = OrderStatus.Принят; if (_orderStorage.Insert(model) == null) { - model.Status = OrderStatus.Неизвестен; - _logger.LogWarning("Insert operation failed"); + model.Status = OrderStatus.Неизвестен; + _logger.LogWarning("Insert operation failed"); return false; } return true; @@ -60,8 +61,8 @@ namespace AbstractLawFirmBusinessLogic.BusinessLogic public bool ChangeStatus(OrderBindingModel model, OrderStatus status) { - CheckModel(model, false); - var element = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id }); + CheckModel(model, false); + var element = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id }); if (element == null) { _logger.LogWarning("Read operation failed"); @@ -72,31 +73,32 @@ namespace AbstractLawFirmBusinessLogic.BusinessLogic _logger.LogWarning("Status change operation failed"); throw new InvalidOperationException("Текущий статус заказа не может быть переведен в выбранный"); } - if (status == OrderStatus.Готов) - { - var document = _documentStorage.GetElement(new DocumentSearchModel() { Id = model.DocumentId }); - if (document == null) - { - _logger.LogWarning("Status change operation failed. Car not found."); - return false; - } + if (status == OrderStatus.Готов) + { + var document = _documentStorage.GetElement(new DocumentSearchModel() { Id = model.DocumentId }); + if (document == null) + { + _logger.LogWarning("Status change operation failed. Car not found."); + return false; + } - if (!CheckThenSupplyMany(document, model.Count)) - { - _logger.LogWarning("Status change operation failed. Shop supply error."); - return false; - } - } - model.Status = status; + if (!CheckThenSupplyMany(document, model.Count)) + { + _logger.LogWarning("Status change operation failed. Shop supply error."); + return false; + } + } + + model.Status = status; if (model.Status == OrderStatus.Выдан) model.DateImplement = DateTime.Now; _orderStorage.Update(model); - if (_orderStorage.Update(model) == null) - { - model.Status--; - _logger.LogWarning("Update operation failed"); - return false; - } - return true; + if (_orderStorage.Update(model) == null) + { + model.Status--; + _logger.LogWarning("Update operation failed"); + return false; + } + return true; } public bool TakeOrderInWork(OrderBindingModel model) @@ -125,11 +127,11 @@ true) { return; } - if (model.DocumentId < 0) - { - throw new ArgumentNullException("Некорректный идентификатор документа", nameof(model.DocumentId)); - } - if (model.Sum <= 0) + if (model.DocumentId < 0) + { + throw new ArgumentNullException("Некорректный идентификатор документа", nameof(model.DocumentId)); + } + if (model.Sum <= 0) { throw new ArgumentNullException("Цена заказа должна быть больше 0", nameof(model.Sum)); } @@ -138,67 +140,68 @@ true) throw new ArgumentNullException("Количество элементов в заказе должно быть больше 0", nameof(model.Count)); } _logger.LogInformation("Order. Sum:{ Cost}. Id: { Id}", model.Sum, model.Id); - public bool CheckThenSupplyMany(IDocumentModel document, int count) - { - if (count <= 0) - { - _logger.LogWarning("Check then supply operation error. Car count < 0."); - return false; - } + } + public bool CheckThenSupplyMany(IDocumentModel document, int count) + { + if (count <= 0) + { + _logger.LogWarning("Check then supply operation error. Car count < 0."); + return false; + } - int freeSpace = 0; - foreach (var shop in _shopStorage.GetFullList()) - { - freeSpace += shop.MaxCountDocuments; - foreach (var c in shop.ShopDocuments) - { - freeSpace -= c.Value.Item2; - } - } + int freeSpace = 0; + foreach (var shop in _shopStorage.GetFullList()) + { + freeSpace += shop.MaxCountDocuments; + foreach (var c in shop.ShopDocuments) + { + freeSpace -= c.Value.Item2; + } + } - if (freeSpace < count) - { - _logger.LogWarning("Check then supply operation error. There's no place for new cars in shops."); - return false; - } + if (freeSpace < count) + { + _logger.LogWarning("Check then supply operation error. There's no place for new cars in shops."); + return false; + } - foreach (var shop in _shopStorage.GetFullList()) - { - freeSpace = shop.MaxCountDocuments; + foreach (var shop in _shopStorage.GetFullList()) + { + freeSpace = shop.MaxCountDocuments; - foreach (var c in shop.ShopDocuments) - freeSpace -= c.Value.Item2; + foreach (var c in shop.ShopDocuments) + freeSpace -= c.Value.Item2; - if (freeSpace <= 0) - continue; + if (freeSpace <= 0) + continue; + + if (freeSpace >= count) + { + if (_shopLogic.SupplyDocuments(new ShopSearchModel() { Id = shop.Id }, document, count)) + count = 0; + else + { + _logger.LogWarning("Supply error"); + return false; + } + } + if (freeSpace < count) + { + if (_shopLogic.SupplyDocuments(new ShopSearchModel() { Id = shop.Id }, document, freeSpace)) + count -= freeSpace; + else + { + _logger.LogWarning("Supply error"); + return false; + } + } + if (count <= 0) + { + return true; + } + } + return false; + } - if (freeSpace >= count) - { - if (_shopLogic.SupplyDocuments(new ShopSearchModel() { Id = shop.Id }, document, count)) - count = 0; - else - { - _logger.LogWarning("Supply error"); - return false; - } - } - if (freeSpace < count) - { - if (_shopLogic.SupplyDocuments(new ShopSearchModel() { Id = shop.Id }, document, freeSpace)) - count -= freeSpace; - else - { - _logger.LogWarning("Supply error"); - return false; - } - } - if (count <= 0) - { - return true; - } - } - return false; - } - } } -} +} \ No newline at end of file