diff --git a/WinForms/OrderBusinessLogic/OrderBusinessLogic.csproj b/WinForms/OrderBusinessLogic/OrderBusinessLogic.csproj new file mode 100644 index 0000000..97da806 --- /dev/null +++ b/WinForms/OrderBusinessLogic/OrderBusinessLogic.csproj @@ -0,0 +1,14 @@ + + + + net6.0-windows + enable + true + enable + + + + + + + diff --git a/WinForms/OrderBusinessLogic/OrderLogic.cs b/WinForms/OrderBusinessLogic/OrderLogic.cs new file mode 100644 index 0000000..09ed56b --- /dev/null +++ b/WinForms/OrderBusinessLogic/OrderLogic.cs @@ -0,0 +1,67 @@ +using OrdersContracts.BindingModels; +using OrdersContracts.BusinessLogicContracts; +using OrdersContracts.StorageContracts; +using OrdersContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrderBusinessLogic +{ + public class OrderLogic : IOrderLogic + { + private readonly IOrderStorage _orderStorage; + public OrderLogic(IOrderStorage orderStorage) + { + _orderStorage = orderStorage; + } + public void CreateOrUpdate(OrderBindingModel model) + { + var element = _orderStorage.GetElement( + new OrderBindingModel + { + Info = model.Info, + Name = model.Name, + Status = model.Status, + Amount = model.Amount + }); + if (element != null && element.Id != model.Id) + { + throw new Exception("Такой заказ уже существует"); + } + if (model.Id.HasValue) + { + _orderStorage.Update(model); + } + else + { + _orderStorage.Insert(model); + } + } + + public void Delete(OrderBindingModel model) + { + var element = _orderStorage.GetElement(new OrderBindingModel { Id = model.Id }); + if (element == null) + { + throw new Exception("Заказ не найден"); + } + _orderStorage.Delete(model); + } + + public List Read(OrderBindingModel model) + { + if (model == null) + { + return _orderStorage.GetFullList(); + } + if (model.Id.HasValue) + { + return new List { _orderStorage.GetElement(model) }; + } + return _orderStorage.GetFilteredList(model); + } + } +} diff --git a/WinForms/OrderBusinessLogic/StatusLogic.cs b/WinForms/OrderBusinessLogic/StatusLogic.cs new file mode 100644 index 0000000..38cea2d --- /dev/null +++ b/WinForms/OrderBusinessLogic/StatusLogic.cs @@ -0,0 +1,60 @@ +using OrdersContracts.BindingModels; +using OrdersContracts.BusinessLogicContracts; +using OrdersContracts.StorageContracts; +using OrdersContracts.ViewModels; + +namespace OrderBusinessLogic +{ + public class StatusLogic : IStatusLogic + { + private readonly IStatusStorage _statusStorage; + public StatusLogic(IStatusStorage statusStorage) + { + _statusStorage = statusStorage; + } + + public void CreateOrUpdate(StatusBindingModel model) + { + var element = _statusStorage.GetElement( + new StatusBindingModel + { + Name = model.Name + }); + if (element != null && element.Id != model.Id) + { + throw new Exception("Такой статус уже существует"); + } + if (model.Id.HasValue) + { + _statusStorage.Update(model); + } + else + { + _statusStorage.Insert(model); + } + } + + public void Delete(StatusBindingModel model) + { + var element = _statusStorage.GetElement(new StatusBindingModel { Id = model.Id }); + if (element == null) + { + throw new Exception("Статус не найден"); + } + _statusStorage.Delete(model); + } + + public List Read(StatusBindingModel model) + { + if (model == null) + { + return _statusStorage.GetFullList(); + } + if (model.Id.HasValue) + { + return new List { _statusStorage.GetElement(model) }; + } + return _statusStorage.GetFilteredList(model); + } + } +} \ No newline at end of file diff --git a/WinForms/OrdersContracts/BindingModels/OrderBindingModel.cs b/WinForms/OrdersContracts/BindingModels/OrderBindingModel.cs new file mode 100644 index 0000000..c537c95 --- /dev/null +++ b/WinForms/OrdersContracts/BindingModels/OrderBindingModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrdersContracts.BindingModels +{ + public class OrderBindingModel + { + public int? Id { get; set; } + public string Name { get; set; } + public string Info { get; set; } + public string Status { get; set; } + public int? Amount { get; set; } + } +} diff --git a/WinForms/OrdersContracts/BindingModels/StatusBindingModel.cs b/WinForms/OrdersContracts/BindingModels/StatusBindingModel.cs new file mode 100644 index 0000000..f25d567 --- /dev/null +++ b/WinForms/OrdersContracts/BindingModels/StatusBindingModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrdersContracts.BindingModels +{ + public class StatusBindingModel + { + public int? Id { get; set; } + + public string Name { get; set; } + } +} diff --git a/WinForms/OrdersContracts/BusinessLogicContracts/IOrderLogic.cs b/WinForms/OrdersContracts/BusinessLogicContracts/IOrderLogic.cs new file mode 100644 index 0000000..57ef99a --- /dev/null +++ b/WinForms/OrdersContracts/BusinessLogicContracts/IOrderLogic.cs @@ -0,0 +1,17 @@ +using OrdersContracts.BindingModels; +using OrdersContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrdersContracts.BusinessLogicContracts +{ + public interface IOrderLogic + { + List Read(OrderBindingModel model); + void CreateOrUpdate(OrderBindingModel model); + void Delete(OrderBindingModel model); + } +} diff --git a/WinForms/OrdersContracts/BusinessLogicContracts/IStatusLogic.cs b/WinForms/OrdersContracts/BusinessLogicContracts/IStatusLogic.cs new file mode 100644 index 0000000..e2fe706 --- /dev/null +++ b/WinForms/OrdersContracts/BusinessLogicContracts/IStatusLogic.cs @@ -0,0 +1,17 @@ +using OrdersContracts.BindingModels; +using OrdersContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrdersContracts.BusinessLogicContracts +{ + public interface IStatusLogic + { + List Read(StatusBindingModel model); + void CreateOrUpdate(StatusBindingModel model); + void Delete(StatusBindingModel model); + } +} diff --git a/WinForms/OrdersContracts/OrdersContracts.csproj b/WinForms/OrdersContracts/OrdersContracts.csproj new file mode 100644 index 0000000..060aa1c --- /dev/null +++ b/WinForms/OrdersContracts/OrdersContracts.csproj @@ -0,0 +1,10 @@ + + + + net6.0-windows + enable + true + enable + + + diff --git a/WinForms/OrdersContracts/StorageContracts/IOrderStorage.cs b/WinForms/OrdersContracts/StorageContracts/IOrderStorage.cs new file mode 100644 index 0000000..9ed5019 --- /dev/null +++ b/WinForms/OrdersContracts/StorageContracts/IOrderStorage.cs @@ -0,0 +1,20 @@ +using OrdersContracts.BindingModels; +using OrdersContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrdersContracts.StorageContracts +{ + public interface IOrderStorage + { + List GetFullList(); + List GetFilteredList(OrderBindingModel model); + OrderViewModel GetElement(OrderBindingModel model); + void Insert(OrderBindingModel model); + void Update(OrderBindingModel model); + void Delete(OrderBindingModel model); + } +} diff --git a/WinForms/OrdersContracts/StorageContracts/IStatusStorage.cs b/WinForms/OrdersContracts/StorageContracts/IStatusStorage.cs new file mode 100644 index 0000000..2722a39 --- /dev/null +++ b/WinForms/OrdersContracts/StorageContracts/IStatusStorage.cs @@ -0,0 +1,21 @@ +using OrdersContracts.BindingModels; +using OrdersContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrdersContracts.StorageContracts +{ + public interface IStatusStorage + { + List GetFullList(); + List GetFilteredList(StatusBindingModel model); + StatusViewModel GetElement(StatusBindingModel model); + + void Insert(StatusBindingModel model); + void Update(StatusBindingModel model); + void Delete(StatusBindingModel model); + } +} diff --git a/WinForms/OrdersContracts/ViewModels/OrderViewModel.cs b/WinForms/OrdersContracts/ViewModels/OrderViewModel.cs new file mode 100644 index 0000000..b997377 --- /dev/null +++ b/WinForms/OrdersContracts/ViewModels/OrderViewModel.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrdersContracts.ViewModels +{ + public class OrderViewModel + { + public int? Id { get; set; } + + [DisplayName("ФИО")] + public string Name { get; set; } + + [DisplayName("Описание")] + public string Info { get; set; } + [DisplayName("Статус")] + public string Status { get; set; } + [DisplayName("Сумма заказа")] + public string Amount { get; set; } + } +} diff --git a/WinForms/OrdersContracts/ViewModels/StatusViewModel.cs b/WinForms/OrdersContracts/ViewModels/StatusViewModel.cs new file mode 100644 index 0000000..851c162 --- /dev/null +++ b/WinForms/OrdersContracts/ViewModels/StatusViewModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrdersContracts.ViewModels +{ + public class StatusViewModel + { + public int? Id { get; set; } + public string Name { get; set; } + } +} diff --git a/WinForms/VisualComponentsLib/IStatusStorage.cs b/WinForms/VisualComponentsLib/IStatusStorage.cs new file mode 100644 index 0000000..2722a39 --- /dev/null +++ b/WinForms/VisualComponentsLib/IStatusStorage.cs @@ -0,0 +1,21 @@ +using OrdersContracts.BindingModels; +using OrdersContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OrdersContracts.StorageContracts +{ + public interface IStatusStorage + { + List GetFullList(); + List GetFilteredList(StatusBindingModel model); + StatusViewModel GetElement(StatusBindingModel model); + + void Insert(StatusBindingModel model); + void Update(StatusBindingModel model); + void Delete(StatusBindingModel model); + } +} diff --git a/WinForms/WinForms.sln b/WinForms/WinForms.sln index 748d0d8..1394055 100644 --- a/WinForms/WinForms.sln +++ b/WinForms/WinForms.sln @@ -5,7 +5,11 @@ VisualStudioVersion = 17.3.32901.215 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinForms", "WinForms\WinForms.csproj", "{10D1B0BE-6B52-41E6-8B57-4AFC49A26F17}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualComponentsLib", "VisualComponentsLib\VisualComponentsLib.csproj", "{EF8D5392-CB3C-429E-BB8F-A7353F56E1D8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisualComponentsLib", "VisualComponentsLib\VisualComponentsLib.csproj", "{EF8D5392-CB3C-429E-BB8F-A7353F56E1D8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrdersContracts", "OrdersContracts\OrdersContracts.csproj", "{82FC5A5D-EA93-49E2-BC93-8AE514148FA0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrderBusinessLogic", "OrderBusinessLogic\OrderBusinessLogic.csproj", "{071BD445-8513-4B12-A60C-2531F2B795F5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -21,6 +25,14 @@ Global {EF8D5392-CB3C-429E-BB8F-A7353F56E1D8}.Debug|Any CPU.Build.0 = Debug|Any CPU {EF8D5392-CB3C-429E-BB8F-A7353F56E1D8}.Release|Any CPU.ActiveCfg = Release|Any CPU {EF8D5392-CB3C-429E-BB8F-A7353F56E1D8}.Release|Any CPU.Build.0 = Release|Any CPU + {82FC5A5D-EA93-49E2-BC93-8AE514148FA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82FC5A5D-EA93-49E2-BC93-8AE514148FA0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82FC5A5D-EA93-49E2-BC93-8AE514148FA0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82FC5A5D-EA93-49E2-BC93-8AE514148FA0}.Release|Any CPU.Build.0 = Release|Any CPU + {071BD445-8513-4B12-A60C-2531F2B795F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {071BD445-8513-4B12-A60C-2531F2B795F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {071BD445-8513-4B12-A60C-2531F2B795F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {071BD445-8513-4B12-A60C-2531F2B795F5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE