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