diff --git a/FurnitureAssembly/FurnitureAssembly/FormMain.cs b/FurnitureAssembly/FurnitureAssembly/FormMain.cs index f052f6f..75a4e3c 100644 --- a/FurnitureAssembly/FurnitureAssembly/FormMain.cs +++ b/FurnitureAssembly/FurnitureAssembly/FormMain.cs @@ -1,5 +1,6 @@ using FurnitureAssemblyContracts.BindingModels; using FurnitureAssemblyContracts.BusinessLogicsContarcts; +using FurnitureAssemblyDataModels.Enums; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; @@ -83,7 +84,7 @@ namespace FurnitureAssembly _logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id); try { - var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel { Id = id }); + var operationResult = _orderLogic.TakeOrderInWork(GetOrderBindingModel()); if (!operationResult) { throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); @@ -107,10 +108,8 @@ namespace FurnitureAssembly _logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id); try - { - var operationResult = _orderLogic.FinishOrder(new - OrderBindingModel - { Id = id }); + { + var operationResult = _orderLogic.FinishOrder(GetOrderBindingModel()); if (!operationResult) { throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); @@ -134,10 +133,8 @@ namespace FurnitureAssembly _logger.LogInformation("Заказ №{id}. Меняется статус на 'Выдан'", id); try - { - var operationResult = _orderLogic.DeliveryOrder(new - OrderBindingModel - { Id = id }); + { + var operationResult = _orderLogic.DeliveryOrder(GetOrderBindingModel()); if (!operationResult) { throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); @@ -157,5 +154,19 @@ namespace FurnitureAssembly { LoadData(); } + + private OrderBindingModel GetOrderBindingModel() + { + return new OrderBindingModel + { + Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value), + FurnitureId = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["FurnitureId"].Value), + FurnitureName = dataGridView.SelectedRows[0].Cells["FurnitureName"].Value.ToString(), + Status = Enum.Parse<OrderStatus>(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()), + Count = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Count"].Value), + Sum = double.Parse(dataGridView.SelectedRows[0].Cells["Sum"].Value.ToString()), + DateCreate = DateTime.Parse(dataGridView.SelectedRows[0].Cells["DateCreate"].Value.ToString()) + }; + } } } diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OrderLogic.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OrderLogic.cs index f0f4238..a4bb14f 100644 --- a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OrderLogic.cs +++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/OrderLogic.cs @@ -24,39 +24,70 @@ namespace FurnitureAssemblyBusinessLogic _orderStorage = orderStorage; } + private bool ChangeStatus(OrderBindingModel model, OrderStatus orderStatus) + { + if (model.Status + 1 != orderStatus) + { + return false; + } + model.Status = orderStatus; + return true; + } + public bool CreateOrder(OrderBindingModel model) { CheckModel(model); + + if (!ChangeStatus(model, OrderStatus.Принят)) + { + _logger.LogWarning("Order's status is wrong"); + return false; + } + if (_orderStorage.Insert(model) == null) { _logger.LogWarning("Insert operation failed"); return false; } - model.Status = OrderStatus.Принят; + return true; } - public bool DeliveryOrder(OrderBindingModel model) + public bool TakeOrderInWork(OrderBindingModel model) { - if (model.Status.Equals(OrderStatus.Готов)) + if (!ChangeStatus(model, OrderStatus.Выполняется)) { - model.Status = OrderStatus.Выдан; - model.DateImplement = DateTime.Now; - return true; + _logger.LogWarning("Order's status is wrong"); + return false; } - return false; + _orderStorage.Update(model); + return true; } public bool FinishOrder(OrderBindingModel model) { - if (model.Status.Equals(OrderStatus.Выполняется)) + if (!ChangeStatus(model, OrderStatus.Готов)) { - model.Status = OrderStatus.Готов; - return true; + _logger.LogWarning("Order's status is wrong"); + return false; } - return false; + _orderStorage.Update(model); + return true; } + public bool DeliveryOrder(OrderBindingModel model) + { + if (!ChangeStatus(model, OrderStatus.Выдан)) + { + _logger.LogWarning("Order's status is wrong"); + return false; + } + model.DateImplement = DateTime.Now; + _orderStorage.Update(model); + return true; + } + + public List<OrderViewModel>? ReadList(OrderSearchModel? model) { _logger.LogInformation("ReadList. Id:{ Id}", model?.Id); @@ -70,16 +101,7 @@ namespace FurnitureAssemblyBusinessLogic return list; } - public bool TakeOrderInWork(OrderBindingModel model) - { - if (model.Status.Equals(OrderStatus.Принят)) - { - model.Status = OrderStatus.Выполняется; - return true; - } - return false; - } - + private void CheckModel(OrderBindingModel model, bool withParams = true) { if (model == null) @@ -92,7 +114,7 @@ namespace FurnitureAssemblyBusinessLogic } if (model.FurnitureId <= 0) { - throw new ArgumentNullException("Идентификатор изделия должен быть больше 0", nameof(model.FurnitureId)); + throw new ArgumentNullException("Неверный идентификатор изделия", nameof(model.FurnitureId)); } if (model.Count <= 0) { @@ -102,7 +124,9 @@ namespace FurnitureAssemblyBusinessLogic { throw new ArgumentNullException("Стоимость заказа должна быть больше 0", nameof(model.Sum)); } - _logger.LogInformation("Order. FurnitureId:{FurnitureId}. Count:{ Count}. Sum:{ Sum}. OrderStatus: {OrderStatus} DateCreate: {DateCreate}. Id: { Id}", model.FurnitureId, model.Count, model.Sum, model.Status, model.DateCreate, model.Id); + _logger.LogInformation("Order. OrderId: { Id}. OrderStatus: {OrderStatus} DateCreate: {DateCreate} " + + "FurnitureId:{FurnitureId}. FurnitureName:{FurnitureName}. Count:{ Count}. Sum:{ Sum}. ", + model.Id, model.Status, model.DateCreate, model.FurnitureId, model.FurnitureName, model.Count, model.Sum); } } }