From 6cd3d8dd1da7ee6eeec11a4ad7059078278726ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D0=B8=D0=BD=D0=B0=20=D0=A7=D1=83=D0=B1?= =?UTF-8?q?=D1=8B=D0=BA=D0=B8=D0=BD=D0=B0?= Date: Sun, 19 May 2024 19:03:16 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=B0=208=20=D0=B3=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=D0=B0=20=D0=BD=D0=B5=20=D0=B7=D0=BD=D0=B0?= =?UTF-8?q?=D1=8E=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82=20?= =?UTF-8?q?=D0=B8=D0=BB=D0=B8=20=D0=BD=D0=B5=D1=82=20=D0=BD=D0=BE=20=D1=83?= =?UTF-8?q?=20=D0=BC=D0=B5=D0=BD=D1=8F=20=D0=BD=D0=BE=D1=83=D1=82=20=D1=81?= =?UTF-8?q?=D0=B4=D0=BE=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Attributes/ColumnAttribute.cs | 2 +- .../ViewModels/OrderViewModel.cs | 33 +++++++--- .../ViewModels/PastryViewModel.cs | 1 + .../BusinessLogics/ClientLogic.cs | 3 +- .../ConfectioneryDatabase.cs | 2 +- .../ConfectioneryDatabaseImplement.csproj | 4 ++ ... 20240519124411_InitialCreate.Designer.cs} | 2 +- ...ate.cs => 20240519124411_InitialCreate.cs} | 0 .../ConfectioneryFileImplement.csproj | 4 ++ ...sion.cs => FileImplementationExtension.cs} | 0 .../Models/Client.cs | 6 ++ .../Models/Component.cs | 5 ++ .../Models/Implementer.cs | 7 ++ .../Models/MessageInfo.cs | 14 ++-- .../Models/Order.cs | 11 ++++ .../Models/Pastry.cs | 5 ++ .../ConfectioneryListImplement.csproj | 4 ++ .../ConfectioneryRestApi/appsettings.json | 2 +- Confectionery/ConfectioneryView/App.config | 2 +- .../ConfectioneryView/FormComponents.cs | 23 +++---- .../ConfectioneryView/FormImplementers.cs | 21 +++--- .../ConfectioneryView/FormPastries.cs | 21 +++--- Confectionery/ConfectioneryView/FormPastry.cs | 60 ++++++++---------- .../ConfectioneryContracts.dll | Bin 0 -> 32256 bytes .../ConfectioneryDataModels.dll | Bin 0 -> 6656 bytes .../ConfectioneryDatabaseImplement.dll | Bin 0 -> 77312 bytes .../ConfectioneryFileImplement.dll | Bin 0 -> 40960 bytes .../ConfectioneryListImplement.dll | Bin 0 -> 26624 bytes 28 files changed, 135 insertions(+), 97 deletions(-) rename Confectionery/ConfectioneryDatabaseImplement/Migrations/{20240518134247_InitialCreate.Designer.cs => 20240519124411_InitialCreate.Designer.cs} (99%) rename Confectionery/ConfectioneryDatabaseImplement/Migrations/{20240518134247_InitialCreate.cs => 20240519124411_InitialCreate.cs} (100%) rename Confectionery/ConfectioneryFileImplement/{FileImplementExtension.cs => FileImplementationExtension.cs} (100%) create mode 100644 Confectionery/ImplementationExtensions/ConfectioneryContracts.dll create mode 100644 Confectionery/ImplementationExtensions/ConfectioneryDataModels.dll create mode 100644 Confectionery/ImplementationExtensions/ConfectioneryDatabaseImplement.dll create mode 100644 Confectionery/ImplementationExtensions/ConfectioneryFileImplement.dll create mode 100644 Confectionery/ImplementationExtensions/ConfectioneryListImplement.dll diff --git a/Confectionery/ConfectionaryContracts/Attributes/ColumnAttribute.cs b/Confectionery/ConfectionaryContracts/Attributes/ColumnAttribute.cs index d9b6220..fae2b4c 100644 --- a/Confectionery/ConfectionaryContracts/Attributes/ColumnAttribute.cs +++ b/Confectionery/ConfectionaryContracts/Attributes/ColumnAttribute.cs @@ -22,5 +22,5 @@ namespace ConfectioneryContracts.Attributes public int Width { get; private set; } public GridViewAutoSize GridViewAutoSize { get; private set; } public bool IsUseAutoSize { get; private set; } - }s + } } diff --git a/Confectionery/ConfectionaryContracts/ViewModels/OrderViewModel.cs b/Confectionery/ConfectionaryContracts/ViewModels/OrderViewModel.cs index a21727a..0cfe13c 100644 --- a/Confectionery/ConfectionaryContracts/ViewModels/OrderViewModel.cs +++ b/Confectionery/ConfectionaryContracts/ViewModels/OrderViewModel.cs @@ -6,34 +6,49 @@ using System.Threading.Tasks; using ConfectioneryDataModels.Models; using System.ComponentModel; using ConfectioneryDataModels.Enums; +using ConfectioneryContracts.Attributes; namespace ConfectioneryContracts.ViewModels { public class OrderViewModel : IOrderModel { - [DisplayName("Номер")] + [Column(title: "Номер", width: 100)] public int Id { get; set; } + + [Column(visible: false)] public int PastryId { get; set; } - [DisplayName("Выпечка")] + + [Column(title: "Выпечка", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string PastryName { get; set; } = string.Empty; + + [Column(visible: false)] public int ClientId { get; set; } - [DisplayName("ФИО клиента")] + [Column(title: "ФИО клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string ClientFIO { get; set; } = string.Empty; + + [Column(visible: false)] public string ClientEmail { get; set; } = string.Empty; + + [Column(visible: false)] public int? ImplementerId { get; set; } - [DisplayName("ФИО исполнителя")] + [Column(title: "ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string ImplementerFIO { get; set; } = string.Empty; - [DisplayName("Количество")] + + [Column(title: "Количество", width: 100)] public int Count { get; set; } - [DisplayName("Сумма")] + + [Column(title: "Сумма", width: 120)] public double Sum { get; set; } - [DisplayName("Статус")] + + [Column(title: "Статус", width: 100)] public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; - [DisplayName("Дата создания")] + + [Column(title: "Дата создания", width: 120)] public DateTime DateCreate { get; set; } = DateTime.Now; - [DisplayName("Дата выполнения")] + + [Column(title: "Дата выполнения", width: 120)] public DateTime? DateImplement { get; set; } } } diff --git a/Confectionery/ConfectionaryContracts/ViewModels/PastryViewModel.cs b/Confectionery/ConfectionaryContracts/ViewModels/PastryViewModel.cs index fdf7ca8..dae3f1d 100644 --- a/Confectionery/ConfectionaryContracts/ViewModels/PastryViewModel.cs +++ b/Confectionery/ConfectionaryContracts/ViewModels/PastryViewModel.cs @@ -17,6 +17,7 @@ namespace ConfectioneryContracts.ViewModels public string PastryName { get; set; } = string.Empty; [Column(title: "Цена", width: 150)] public double Price { get; set; } + [Column(visible: false)] public Dictionary PastryComponents { get; diff --git a/Confectionery/ConfectioneryBusinessLogic/BusinessLogics/ClientLogic.cs b/Confectionery/ConfectioneryBusinessLogic/BusinessLogics/ClientLogic.cs index cbe2602..614cedb 100644 --- a/Confectionery/ConfectioneryBusinessLogic/BusinessLogics/ClientLogic.cs +++ b/Confectionery/ConfectioneryBusinessLogic/BusinessLogics/ClientLogic.cs @@ -106,8 +106,7 @@ namespace ConfectioneryBusinessLogic.BusinessLogics { throw new ArgumentNullException("Некорректно введен пароль клиента", nameof(model.Password)); } - _logger.LogInformation("Client. Id: {id}, FIO: {fio}, email: {email}, password: {password}", model.Id, model.ClientFIO, model.Email, - model.Password); + _logger.LogInformation("Client. Id: {id}, FIO: {fio}, email: {email}, password: {password}", model.Id, model.ClientFIO, model.Email, model.Password); var element = _clientStorage.GetElement(new ClientSearchModel { Email = model.Email diff --git a/Confectionery/ConfectioneryDatabaseImplement/ConfectioneryDatabase.cs b/Confectionery/ConfectioneryDatabaseImplement/ConfectioneryDatabase.cs index d27a9d6..a228df6 100644 --- a/Confectionery/ConfectioneryDatabaseImplement/ConfectioneryDatabase.cs +++ b/Confectionery/ConfectioneryDatabaseImplement/ConfectioneryDatabase.cs @@ -14,7 +14,7 @@ namespace ConfectioneryDatabaseImplement { if (optionsBuilder.IsConfigured == false) { - optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-0CI5KVE\SQLEXPRESS;Initial Catalog=ConfectioneryDatabase4;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True"); + optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-0CI5KVE\SQLEXPRESS;Initial Catalog=ConfectioneryDatabase5;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True"); } base.OnConfiguring(optionsBuilder); } diff --git a/Confectionery/ConfectioneryDatabaseImplement/ConfectioneryDatabaseImplement.csproj b/Confectionery/ConfectioneryDatabaseImplement/ConfectioneryDatabaseImplement.csproj index 854a6f5..02a0cf0 100644 --- a/Confectionery/ConfectioneryDatabaseImplement/ConfectioneryDatabaseImplement.csproj +++ b/Confectionery/ConfectioneryDatabaseImplement/ConfectioneryDatabaseImplement.csproj @@ -20,4 +20,8 @@ + + + + diff --git a/Confectionery/ConfectioneryDatabaseImplement/Migrations/20240518134247_InitialCreate.Designer.cs b/Confectionery/ConfectioneryDatabaseImplement/Migrations/20240519124411_InitialCreate.Designer.cs similarity index 99% rename from Confectionery/ConfectioneryDatabaseImplement/Migrations/20240518134247_InitialCreate.Designer.cs rename to Confectionery/ConfectioneryDatabaseImplement/Migrations/20240519124411_InitialCreate.Designer.cs index f16f796..1ca697a 100644 --- a/Confectionery/ConfectioneryDatabaseImplement/Migrations/20240518134247_InitialCreate.Designer.cs +++ b/Confectionery/ConfectioneryDatabaseImplement/Migrations/20240519124411_InitialCreate.Designer.cs @@ -12,7 +12,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace ConfectioneryDatabaseImplement.Migrations { [DbContext(typeof(ConfectioneryDatabase))] - [Migration("20240518134247_InitialCreate")] + [Migration("20240519124411_InitialCreate")] partial class InitialCreate { /// diff --git a/Confectionery/ConfectioneryDatabaseImplement/Migrations/20240518134247_InitialCreate.cs b/Confectionery/ConfectioneryDatabaseImplement/Migrations/20240519124411_InitialCreate.cs similarity index 100% rename from Confectionery/ConfectioneryDatabaseImplement/Migrations/20240518134247_InitialCreate.cs rename to Confectionery/ConfectioneryDatabaseImplement/Migrations/20240519124411_InitialCreate.cs diff --git a/Confectionery/ConfectioneryFileImplement/ConfectioneryFileImplement.csproj b/Confectionery/ConfectioneryFileImplement/ConfectioneryFileImplement.csproj index 54e27de..cbc2355 100644 --- a/Confectionery/ConfectioneryFileImplement/ConfectioneryFileImplement.csproj +++ b/Confectionery/ConfectioneryFileImplement/ConfectioneryFileImplement.csproj @@ -11,4 +11,8 @@ + + + + diff --git a/Confectionery/ConfectioneryFileImplement/FileImplementExtension.cs b/Confectionery/ConfectioneryFileImplement/FileImplementationExtension.cs similarity index 100% rename from Confectionery/ConfectioneryFileImplement/FileImplementExtension.cs rename to Confectionery/ConfectioneryFileImplement/FileImplementationExtension.cs diff --git a/Confectionery/ConfectioneryFileImplement/Models/Client.cs b/Confectionery/ConfectioneryFileImplement/Models/Client.cs index 4afe205..436e427 100644 --- a/Confectionery/ConfectioneryFileImplement/Models/Client.cs +++ b/Confectionery/ConfectioneryFileImplement/Models/Client.cs @@ -7,17 +7,23 @@ using ConfectioneryContracts.BindingModels; using ConfectioneryContracts.ViewModels; using ConfectioneryDataModels.Models; using System.Xml.Linq; +using System.Runtime.Serialization; namespace ConfectioneryFileImplement.Models { + [DataContract] public class Client : IClientModel { + [DataMember] public int Id { get; private set; } + [DataMember] public string ClientFIO { get; private set; } = string.Empty; + [DataMember] public string Email { get; private set; } = string.Empty; + [DataMember] public string Password { get; private set; } = string.Empty; public static Client? Create(ClientBindingModel model) diff --git a/Confectionery/ConfectioneryFileImplement/Models/Component.cs b/Confectionery/ConfectioneryFileImplement/Models/Component.cs index 3abe6ea..8f7c19b 100644 --- a/Confectionery/ConfectioneryFileImplement/Models/Component.cs +++ b/Confectionery/ConfectioneryFileImplement/Models/Component.cs @@ -1,14 +1,19 @@ using ConfectioneryContracts.BindingModels; using ConfectioneryContracts.ViewModels; using ConfectioneryDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace ConfectioneryFileImplement.Models { + [DataContract] public class Component : IComponentModel { + [DataMember] public int Id { get; private set; } + [DataMember] public string ComponentName { get; private set; } = string.Empty; + [DataMember] public double Cost { get; set; } public static Component? Create(ComponentBindingModel model) diff --git a/Confectionery/ConfectioneryFileImplement/Models/Implementer.cs b/Confectionery/ConfectioneryFileImplement/Models/Implementer.cs index 17c887e..141862e 100644 --- a/Confectionery/ConfectioneryFileImplement/Models/Implementer.cs +++ b/Confectionery/ConfectioneryFileImplement/Models/Implementer.cs @@ -4,18 +4,25 @@ using ConfectioneryDataModels.Models; using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace ConfectioneryFileImplement.Models { + [DataContract] public class Implementer : IImplementerModel { + [DataMember] public int Id { get; set; } + [DataMember] public string ImplementerFIO { get; set; } = string.Empty; + [DataMember] public string Password { get; set; } = string.Empty; + [DataMember] public int WorkExperience { get; set; } + [DataMember] public int Qualification { get; set; } public static Implementer? Create(ImplementerBindingModel? model) diff --git a/Confectionery/ConfectioneryFileImplement/Models/MessageInfo.cs b/Confectionery/ConfectioneryFileImplement/Models/MessageInfo.cs index 3812a18..b07ec96 100644 --- a/Confectionery/ConfectioneryFileImplement/Models/MessageInfo.cs +++ b/Confectionery/ConfectioneryFileImplement/Models/MessageInfo.cs @@ -4,25 +4,29 @@ using ConfectioneryDataModels.Models; using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace ConfectioneryFileImplement.Models { + [DataContract] public class MessageInfo : IMessageInfoModel { + [DataMember] public int Id { get; private set; } + [DataMember] public string MessageId { get; private set; } = string.Empty; - + [DataMember] public int? ClientId { get; private set; } - + [DataMember] public string SenderName { get; private set; } = string.Empty; - + [DataMember] public DateTime DateDelivery { get; private set; } = DateTime.Now; - + [DataMember] public string Subject { get; private set; } = string.Empty; - + [DataMember] public string Body { get; private set; } = string.Empty; public static MessageInfo? Create(MessageInfoBindingModel model) diff --git a/Confectionery/ConfectioneryFileImplement/Models/Order.cs b/Confectionery/ConfectioneryFileImplement/Models/Order.cs index d580898..a709459 100644 --- a/Confectionery/ConfectioneryFileImplement/Models/Order.cs +++ b/Confectionery/ConfectioneryFileImplement/Models/Order.cs @@ -2,28 +2,39 @@ using ConfectioneryContracts.ViewModels; using ConfectioneryDataModels.Enums; using ConfectioneryDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace ConfectioneryFileImplement.Models { + [DataContract] public class Order : IOrderModel { + [DataMember] public int Id { get; private set; } + [DataMember] public int PastryId { get; private set; } + [DataMember] public int ClientId { get; private set; } + [DataMember] public int? ImplementerId { get; private set; } + [DataMember] public int Count { get; private set; } + [DataMember] public double Sum { get; private set; } + [DataMember] public OrderStatus Status { get; private set; } + [DataMember] public DateTime DateCreate { get; private set; } + [DataMember] public DateTime? DateImplement { get; private set; } public static Order? Create(OrderBindingModel? model) diff --git a/Confectionery/ConfectioneryFileImplement/Models/Pastry.cs b/Confectionery/ConfectioneryFileImplement/Models/Pastry.cs index 9929761..fddd6fe 100644 --- a/Confectionery/ConfectioneryFileImplement/Models/Pastry.cs +++ b/Confectionery/ConfectioneryFileImplement/Models/Pastry.cs @@ -7,13 +7,18 @@ using ConfectioneryContracts.BindingModels; using ConfectioneryContracts.ViewModels; using ConfectioneryDataModels.Models; using System.Xml.Linq; +using System.Runtime.Serialization; namespace ConfectioneryFileImplement.Models { + [DataContract] internal class Pastry : IPastryModel { + [DataMember] public int Id { get; private set; } + [DataMember] public string PastryName { get; private set; } = string.Empty; + [DataMember] public double Price { get; private set; } public Dictionary Components { get; private set; } = new(); private Dictionary? _pastryComponents = null; diff --git a/Confectionery/ConfectioneryListImplement/ConfectioneryListImplement.csproj b/Confectionery/ConfectioneryListImplement/ConfectioneryListImplement.csproj index 9fd6be9..b57cd4b 100644 --- a/Confectionery/ConfectioneryListImplement/ConfectioneryListImplement.csproj +++ b/Confectionery/ConfectioneryListImplement/ConfectioneryListImplement.csproj @@ -16,4 +16,8 @@ + + + + diff --git a/Confectionery/ConfectioneryRestApi/appsettings.json b/Confectionery/ConfectioneryRestApi/appsettings.json index b78ea97..7d7448a 100644 --- a/Confectionery/ConfectioneryRestApi/appsettings.json +++ b/Confectionery/ConfectioneryRestApi/appsettings.json @@ -11,6 +11,6 @@ "SmtpClientPort": "587", "PopHost": "pop.gmail.com", "PopPort": "995", - "MailLogin": "@gmail.com", + "MailLogin": "tsutsumonn@gmail.com", "MailPassword": "ndbp ruep dfbl dnbg" } diff --git a/Confectionery/ConfectioneryView/App.config b/Confectionery/ConfectioneryView/App.config index dba371c..2ca5738 100644 --- a/Confectionery/ConfectioneryView/App.config +++ b/Confectionery/ConfectioneryView/App.config @@ -5,7 +5,7 @@ - + \ No newline at end of file diff --git a/Confectionery/ConfectioneryView/FormComponents.cs b/Confectionery/ConfectioneryView/FormComponents.cs index e9313e5..43e4cd1 100644 --- a/Confectionery/ConfectioneryView/FormComponents.cs +++ b/Confectionery/ConfectioneryView/FormComponents.cs @@ -1,5 +1,6 @@ using ConfectioneryContracts.BindingModels; using ConfectioneryContracts.BusinessLogicsContracts; +using ConfectioneryContracts.DI; using Microsoft.Extensions.Logging; using Microsoft.VisualBasic.Logging; using System; @@ -46,13 +47,10 @@ namespace ConfectioneryView private void ButtonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormComponent)); - if (service is FormComponent form) + var form = DependencyManager.Instance.Resolve(); + if (form.ShowDialog() == DialogResult.OK) { - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } @@ -60,16 +58,11 @@ namespace ConfectioneryView { if (dataGridView.SelectedRows.Count == 1) { - var service = - Program.ServiceProvider?.GetService(typeof(FormComponent)); - if (service is FormComponent form) + var form = DependencyManager.Instance.Resolve(); + form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + if (form.ShowDialog() == DialogResult.OK) { - form.Id = - Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } } diff --git a/Confectionery/ConfectioneryView/FormImplementers.cs b/Confectionery/ConfectioneryView/FormImplementers.cs index 3f103ec..c595f8a 100644 --- a/Confectionery/ConfectioneryView/FormImplementers.cs +++ b/Confectionery/ConfectioneryView/FormImplementers.cs @@ -1,5 +1,6 @@ using ConfectioneryContracts.BindingModels; using ConfectioneryContracts.BusinessLogicsContracts; +using ConfectioneryContracts.DI; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; @@ -45,13 +46,10 @@ namespace ConfectioneryView private void ButtonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); - if (service is FormImplementer form) + var form = DependencyManager.Instance.Resolve(); + if (form.ShowDialog() == DialogResult.OK) { - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } @@ -59,14 +57,11 @@ namespace ConfectioneryView { if (dataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); - if (service is FormImplementer form) + var form = DependencyManager.Instance.Resolve(); + form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + if (form.ShowDialog() == DialogResult.OK) { - form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } } diff --git a/Confectionery/ConfectioneryView/FormPastries.cs b/Confectionery/ConfectioneryView/FormPastries.cs index 839ec63..20e95be 100644 --- a/Confectionery/ConfectioneryView/FormPastries.cs +++ b/Confectionery/ConfectioneryView/FormPastries.cs @@ -10,6 +10,7 @@ using System.Windows.Forms; using Microsoft.Extensions.Logging; using ConfectioneryContracts.BindingModels; using ConfectioneryContracts.BusinessLogicsContracts; +using ConfectioneryContracts.DI; namespace ConfectioneryView { @@ -46,13 +47,10 @@ namespace ConfectioneryView private void ButtonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormPastry)); - if (service is FormPastry form) + var form = DependencyManager.Instance.Resolve(); + if (form.ShowDialog() == DialogResult.OK) { - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } @@ -60,14 +58,11 @@ namespace ConfectioneryView { if (dataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormPastry)); - if (service is FormPastry form) + var form = DependencyManager.Instance.Resolve(); + form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + if (form.ShowDialog() == DialogResult.OK) { - form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } } diff --git a/Confectionery/ConfectioneryView/FormPastry.cs b/Confectionery/ConfectioneryView/FormPastry.cs index 6b6714a..85cae60 100644 --- a/Confectionery/ConfectioneryView/FormPastry.cs +++ b/Confectionery/ConfectioneryView/FormPastry.cs @@ -12,6 +12,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using ConfectioneryContracts.DI; namespace ConfectioneryView { @@ -85,29 +86,23 @@ namespace ConfectioneryView private void ButtonAdd_Click(object sender, EventArgs e) { - var service = - Program.ServiceProvider?.GetService(typeof(FormPastryComponent)); - if (service is FormPastryComponent form) + var form = DependencyManager.Instance.Resolve(); + if (form.ShowDialog() == DialogResult.OK) { - if (form.ShowDialog() == DialogResult.OK) + if (form.ComponentModel == null) { - if (form.ComponentModel == null) - { - return; - } - _logger.LogInformation("Добавление нового компонента: { ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count); - if (_pastryComponents.ContainsKey(form.Id)) - { - _pastryComponents[form.Id] = (form.ComponentModel, - form.Count); - } - else - { - _pastryComponents.Add(form.Id, (form.ComponentModel, - form.Count)); - } - LoadData(); + return; } + _logger.LogInformation("Adding new component: {ComponentName} - {Count}", form.ComponentModel.ComponentName, form.Count); + if (_pastryComponents.ContainsKey(form.Id)) + { + _pastryComponents[form.Id] = (form.ComponentModel, form.Count); + } + else + { + _pastryComponents.Add(form.Id, (form.ComponentModel, form.Count)); + } + LoadData(); } } @@ -115,24 +110,19 @@ namespace ConfectioneryView { if (dataGridView.SelectedRows.Count == 1) { - var service = - Program.ServiceProvider?.GetService(typeof(FormPastryComponent)); - if (service is FormPastryComponent form) + var form = DependencyManager.Instance.Resolve(); + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value); + form.Id = id; + form.Count = _pastryComponents[id].Item2; + if (form.ShowDialog() == DialogResult.OK) { - int id = - Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value); - form.Id = id; - form.Count = _pastryComponents[id].Item2; - if (form.ShowDialog() == DialogResult.OK) + if (form.ComponentModel == null) { - if (form.ComponentModel == null) - { - return; - } - _logger.LogInformation("Изменение компонента: { ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count); - _pastryComponents[form.Id] = (form.ComponentModel, form.Count); - LoadData(); + return; } + _logger.LogInformation("Component editing: {ComponentName} - {Count}", form.ComponentModel.ComponentName, form.Count); + _pastryComponents[form.Id] = (form.ComponentModel, form.Count); + LoadData(); } } } diff --git a/Confectionery/ImplementationExtensions/ConfectioneryContracts.dll b/Confectionery/ImplementationExtensions/ConfectioneryContracts.dll new file mode 100644 index 0000000000000000000000000000000000000000..a8361a87c35f798871d5847c8a2e800c45deea82 GIT binary patch literal 32256 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 literal 0 HcmV?d00001 diff --git a/Confectionery/ImplementationExtensions/ConfectioneryDataModels.dll b/Confectionery/ImplementationExtensions/ConfectioneryDataModels.dll new file mode 100644 index 0000000000000000000000000000000000000000..e18706c61101ce52b4757df3567a90b041d05b23 GIT binary patch literal 6656 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 Y&nH|k0DoguKk)oA`~Uy| literal 0 HcmV?d00001 diff --git a/Confectionery/ImplementationExtensions/ConfectioneryDatabaseImplement.dll b/Confectionery/ImplementationExtensions/ConfectioneryDatabaseImplement.dll new file mode 100644 index 0000000000000000000000000000000000000000..5e4c2fbf3377a6c0bfac669615f69084c2db53cc GIT binary patch literal 77312 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 G7WfTLR*xM3 literal 0 HcmV?d00001 diff --git a/Confectionery/ImplementationExtensions/ConfectioneryFileImplement.dll b/Confectionery/ImplementationExtensions/ConfectioneryFileImplement.dll new file mode 100644 index 0000000000000000000000000000000000000000..7e228ea6c9b9ea81be913ca50ce0a62517a00c9c GIT binary patch literal 40960 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 literal 0 HcmV?d00001