From 501b3bb6cf70b32a1e6cbce83e1450db8bd42eee Mon Sep 17 00:00:00 2001 From: bekodeg Date: Mon, 17 Jun 2024 10:16:39 +0400 Subject: [PATCH 1/4] =?UTF-8?q?=D0=BE=D0=BD=D0=BE=20=D0=B4=D0=BE=D0=BB?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BD=D0=BE=20=D0=BD=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/DataGridViewExtension.cs | 46 ++ .../SushiBar/Forms/FormClients.Designer.cs | 24 +- SushiBar/SushiBar/Forms/FormClients.cs | 43 +- SushiBar/SushiBar/Forms/FormComponents.cs | 29 +- SushiBar/SushiBar/Forms/FormCreateOrder.cs | 37 +- SushiBar/SushiBar/Forms/FormImplementer.cs | 3 +- SushiBar/SushiBar/Forms/FormImplementers.cs | 18 +- SushiBar/SushiBar/Forms/FormMailView.cs | 31 +- SushiBar/SushiBar/Forms/FormMain.Designer.cs | 477 +++++++++--------- SushiBar/SushiBar/Forms/FormMain.cs | 413 ++++++++------- SushiBar/SushiBar/Forms/FormSushis.cs | 30 +- .../SushiBar/ImplementationExtensions.dll | Bin 0 -> 6144 bytes .../SushiBar/ImplementationExtensionst.dll | Bin 0 -> 76800 bytes SushiBar/SushiBar/Program.cs | 101 ++-- SushiBar/SushiBar/SushiBar.csproj | 3 - .../BusinessLogics/BackUpLogic.cs | 90 ++++ .../BusinessLogics/ImplementerLogic.cs | 4 +- .../SushiBarBusinessLogic.csproj | 1 + .../Attributes/ColumnAttribute.cs | 22 + .../Attributes/GridViewAutoSize.cs | 14 + .../BindingModels/BackUpSaveBinidngModel.cs | 8 + .../BindingModels/MessageInfoBindingModel.cs | 4 +- .../BusinessLogicsContracts/IBackUpLogic.cs | 9 + .../SushiBarContracts/DI/DependencyManager.cs | 45 ++ .../DI/IDependencyContainer.cs | 12 + .../DI/IImplementationExtension.cs | 9 + .../DI/ServiceDependencyContainer.cs | 57 +++ .../DI/ServiceProviderLoader.cs | 53 ++ .../StoragesContracts/IBackUpInfo.cs | 8 + .../StoragesContracts/IImplementerStorage.cs | 2 +- .../SushiBarContracts.csproj | 5 + .../ViewModels/ClientViewModel.cs | 19 +- .../ViewModels/ComponentViewModel.cs | 15 +- .../ViewModels/ImplementerViewModel.cs | 13 +- .../ViewModels/MessageInfoViewModel.cs | 33 +- .../ViewModels/OrderViewModel.cs | 49 +- .../ViewModels/ReportOrdersViewModel.cs | 8 +- .../ReportProductComponentViewModel.cs | 8 +- .../ViewModels/SushiViewModel.cs | 18 +- .../Models/IMessageInfoModel.cs | 3 +- .../DatabaseImplementationExtension.cs | 21 + .../Implements/BackUpInfo.cs | 27 + .../Implements/ImplementerStorage.cs | 4 +- .../Models/MessageInfo.cs | 4 +- .../Properties/Resources.Designer.cs | 63 +++ .../Properties/Resources.resx | 101 ++++ .../SushiBarDatabaseImplement.csproj | 19 + .../FileImplementationExtension.cs | 21 + .../Implements/BackUpInfo.cs | 38 ++ .../Implements/ClientStorage.cs | 3 +- .../Implements/ImplementerStorage.cs | 4 +- .../Models/MessageInfo.cs | 4 +- .../Implements/BackUpInfo.cs | 17 + .../Implements/ImplementerStorage.cs | 4 +- .../ListImplementationExtension.cs | 22 + .../Models/MessageInfo.cs | 3 +- 56 files changed, 1416 insertions(+), 703 deletions(-) create mode 100644 SushiBar/SushiBar/Extensions/DataGridViewExtension.cs create mode 100644 SushiBar/SushiBar/ImplementationExtensions.dll create mode 100644 SushiBar/SushiBar/ImplementationExtensionst.dll create mode 100644 SushiBar/SushiBarBusinessLogic/BusinessLogics/BackUpLogic.cs create mode 100644 SushiBar/SushiBarContracts/Attributes/ColumnAttribute.cs create mode 100644 SushiBar/SushiBarContracts/Attributes/GridViewAutoSize.cs create mode 100644 SushiBar/SushiBarContracts/BindingModels/BackUpSaveBinidngModel.cs create mode 100644 SushiBar/SushiBarContracts/BusinessLogicsContracts/IBackUpLogic.cs create mode 100644 SushiBar/SushiBarContracts/DI/DependencyManager.cs create mode 100644 SushiBar/SushiBarContracts/DI/IDependencyContainer.cs create mode 100644 SushiBar/SushiBarContracts/DI/IImplementationExtension.cs create mode 100644 SushiBar/SushiBarContracts/DI/ServiceDependencyContainer.cs create mode 100644 SushiBar/SushiBarContracts/DI/ServiceProviderLoader.cs create mode 100644 SushiBar/SushiBarContracts/StoragesContracts/IBackUpInfo.cs create mode 100644 SushiBar/SushiBarDatabaseImplement/DatabaseImplementationExtension.cs create mode 100644 SushiBar/SushiBarDatabaseImplement/Implements/BackUpInfo.cs create mode 100644 SushiBar/SushiBarDatabaseImplement/Properties/Resources.Designer.cs create mode 100644 SushiBar/SushiBarDatabaseImplement/Properties/Resources.resx create mode 100644 SushiBar/SushiBarFileImplement/FileImplementationExtension.cs create mode 100644 SushiBar/SushiBarFileImplement/Implements/BackUpInfo.cs create mode 100644 SushiBar/SushiBarListImplement/Implements/BackUpInfo.cs create mode 100644 SushiBar/SushiBarListImplement/ListImplementationExtension.cs diff --git a/SushiBar/SushiBar/Extensions/DataGridViewExtension.cs b/SushiBar/SushiBar/Extensions/DataGridViewExtension.cs new file mode 100644 index 0000000..8cfc6b0 --- /dev/null +++ b/SushiBar/SushiBar/Extensions/DataGridViewExtension.cs @@ -0,0 +1,46 @@ +using SushiBarContracts.Attributes; + +namespace SushiBar.Extensions +{ + public static class DataGridViewExtension + { + public static void FillandConfigGrid(this DataGridView grid, List? data) + { + if (data == null) + { + return; + } + grid.DataSource = data; + var type = typeof(T); + var properties = type.GetProperties(); + foreach (DataGridViewColumn column in grid.Columns) + { + var property = properties.FirstOrDefault(x => x.Name == column.Name); + if (property == null) + { + throw new InvalidOperationException($"В типе {type.Name} не найдено свойство с именем { column.Name }"); + } + var attribute = property.GetCustomAttributes(typeof(ColumnAttribute), true)?.SingleOrDefault(); + if (attribute == null) + { + throw new InvalidOperationException($"Не найден атрибут типа ColumnAttribute для свойства { property.Name }"); + } + if (attribute is ColumnAttribute columnAttr) + { + column.HeaderText = columnAttr.Title; + column.Visible = columnAttr.Visible; + if (columnAttr.IsUseAutoSize) + { + column.AutoSizeMode = (DataGridViewAutoSizeColumnMode)Enum + .Parse(typeof(DataGridViewAutoSizeColumnMode), + columnAttr.GridViewAutoSize.ToString()); + } + else + { + column.Width = columnAttr.Width; + } + } + } + } + } +} diff --git a/SushiBar/SushiBar/Forms/FormClients.Designer.cs b/SushiBar/SushiBar/Forms/FormClients.Designer.cs index 2cd8cae..1fadac7 100644 --- a/SushiBar/SushiBar/Forms/FormClients.Designer.cs +++ b/SushiBar/SushiBar/Forms/FormClients.Designer.cs @@ -28,19 +28,19 @@ /// private void InitializeComponent() { - DataGridView = new DataGridView(); + dataGridView = new DataGridView(); DeleteButton = new Button(); - ((System.ComponentModel.ISupportInitialize)DataGridView).BeginInit(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); SuspendLayout(); // - // DataGridView + // dataGridView // - DataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - DataGridView.Location = new Point(12, 34); - DataGridView.Name = "DataGridView"; - DataGridView.RowTemplate.Height = 25; - DataGridView.Size = new Size(776, 404); - DataGridView.TabIndex = 0; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Location = new Point(12, 34); + dataGridView.Name = "DataGridView"; + dataGridView.RowTemplate.Height = 25; + dataGridView.Size = new Size(776, 404); + dataGridView.TabIndex = 0; // // DeleteButton // @@ -58,17 +58,17 @@ AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(800, 450); Controls.Add(DeleteButton); - Controls.Add(DataGridView); + Controls.Add(dataGridView); Name = "ClientsForm"; Text = "Клиенты"; Load += ClientsForm_Load; - ((System.ComponentModel.ISupportInitialize)DataGridView).EndInit(); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); ResumeLayout(false); } #endregion - private DataGridView DataGridView; + private DataGridView dataGridView; private Button DeleteButton; } } \ No newline at end of file diff --git a/SushiBar/SushiBar/Forms/FormClients.cs b/SushiBar/SushiBar/Forms/FormClients.cs index dc6d81a..51fc24d 100644 --- a/SushiBar/SushiBar/Forms/FormClients.cs +++ b/SushiBar/SushiBar/Forms/FormClients.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using SushiBar.Extensions; using SushiBarContracts.BindingModels; using SushiBarContracts.BusinessLogicsContracts; @@ -17,28 +18,22 @@ namespace SushiBar.Forms private void LoadData() { - try - { - var list = _logic.ReadList(null); - if (list != null) - { - DataGridView.DataSource = list; - DataGridView.Columns["Id"].Visible = false; - DataGridView.Columns["ClientFIO"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - DataGridView.Columns["Email"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - DataGridView.Columns["Password"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - } - _logger.LogInformation("Загрузка клиентов"); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка загрузки клиентов"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } + try + { + var list = _logic.ReadList(null); + if (list != null) + { + dataGridView.FillandConfigGrid(list); + _logger.LogInformation("Загрузка клиентов"); + } + _logger.LogInformation("Загрузка клиентов"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки клиентов"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } private void ClientsForm_Load(object sender, EventArgs e) { @@ -47,12 +42,12 @@ namespace SushiBar.Forms private void DeleteButton_Click(object sender, EventArgs e) { - if (DataGridView.SelectedRows.Count == 1) + if (dataGridView.SelectedRows.Count == 1) { if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { - int id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); _logger.LogInformation("Удаление клиента"); try { diff --git a/SushiBar/SushiBar/Forms/FormComponents.cs b/SushiBar/SushiBar/Forms/FormComponents.cs index 7943174..749aba9 100644 --- a/SushiBar/SushiBar/Forms/FormComponents.cs +++ b/SushiBar/SushiBar/Forms/FormComponents.cs @@ -1,6 +1,7 @@ using SushiBarContracts.BindingModels; using SushiBarContracts.BusinessLogicsContracts; using Microsoft.Extensions.Logging; +using SushiBar.Extensions; namespace SushiBar.Forms { @@ -20,23 +21,17 @@ namespace SushiBar.Forms } private void LoadData() { - try - { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["Id"].Visible = false; - dataGridView.Columns["ComponentName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } - _logger.LogInformation("Загрузка компонентов"); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка загрузки компонентов"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } + try + { + dataGridView.FillandConfigGrid(_logic.ReadList(null)); + _logger.LogInformation("Загрузка компонентов"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки компонентов"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } private void ButtonAdd_Click(object sender, EventArgs e) { var service = Program.ServiceProvider?.GetService(typeof(FormComponent)); diff --git a/SushiBar/SushiBar/Forms/FormCreateOrder.cs b/SushiBar/SushiBar/Forms/FormCreateOrder.cs index b447051..8624895 100644 --- a/SushiBar/SushiBar/Forms/FormCreateOrder.cs +++ b/SushiBar/SushiBar/Forms/FormCreateOrder.cs @@ -20,24 +20,25 @@ namespace SushiBar.Forms } private void FormCreateOrder_Load(object sender, EventArgs e) { - try - { - _logger.LogInformation("Загрузка суши для заказа"); - List? _list = _logicS.ReadList(null); - if (_list != null) - { - ComboBoxSushi.DisplayMember = "SushiName"; - ComboBoxSushi.ValueMember = "Id"; - ComboBoxSushi.DataSource = _list; - ComboBoxSushi.SelectedItem = null; - } - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка загрузки суши"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } + _logger.LogInformation("Загрузка суши для заказа"); + try + { + var list = _logicS.ReadList(null); + if (list != null) + { + ComboBoxSushi.DisplayMember = "SushiCreamName"; + ComboBoxSushi.ValueMember = "Id"; + ComboBoxSushi.DataSource = list; + ComboBoxSushi.SelectedItem = null; + } + _logger.LogInformation("Суши загружено"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки суши"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } private void CalcSum() { if (ComboBoxSushi.SelectedValue != null && !string.IsNullOrEmpty(TextBoxCount.Text)) diff --git a/SushiBar/SushiBar/Forms/FormImplementer.cs b/SushiBar/SushiBar/Forms/FormImplementer.cs index f359f4a..959744a 100644 --- a/SushiBar/SushiBar/Forms/FormImplementer.cs +++ b/SushiBar/SushiBar/Forms/FormImplementer.cs @@ -40,8 +40,7 @@ namespace SushiBar.Forms catch (Exception ex) { _logger.LogError(ex, "Ошибка получения исполнителя"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, - MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } diff --git a/SushiBar/SushiBar/Forms/FormImplementers.cs b/SushiBar/SushiBar/Forms/FormImplementers.cs index db4c42e..8b75f8b 100644 --- a/SushiBar/SushiBar/Forms/FormImplementers.cs +++ b/SushiBar/SushiBar/Forms/FormImplementers.cs @@ -1,6 +1,8 @@ using Microsoft.Extensions.Logging; +using SushiBar.Extensions; using SushiBarContracts.BindingModels; using SushiBarContracts.BusinessLogicsContracts; +using System.Windows.Forms; namespace SushiBar.Forms { @@ -24,23 +26,13 @@ namespace SushiBar.Forms { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["Id"].Visible = false; - dataGridView.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - dataGridView.Columns["Password"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - dataGridView.Columns["Qualification"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - dataGridView.Columns["WorkExperience"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } - _logger.LogInformation("Загрузка компонентов"); + dataGridView.FillandConfigGrid(_logic.ReadList(null)); + _logger.LogInformation("Загрузка исполнителей"); } catch (Exception ex) { _logger.LogError(ex, "Ошибка загрузки исполнителей"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, - MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void CreateButton_Click(object sender, EventArgs e) diff --git a/SushiBar/SushiBar/Forms/FormMailView.cs b/SushiBar/SushiBar/Forms/FormMailView.cs index 112d5b6..d2f27d1 100644 --- a/SushiBar/SushiBar/Forms/FormMailView.cs +++ b/SushiBar/SushiBar/Forms/FormMailView.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using SushiBar.Extensions; using SushiBarContracts.BusinessLogicsContracts; namespace SushiBar.Forms @@ -16,24 +17,16 @@ namespace SushiBar.Forms private void FormMailView_Load(object sender, EventArgs e) { - try - { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["ClientId"].Visible = false; - dataGridView.Columns["MessageId"].Visible = false; - dataGridView.Columns["Body"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } - _logger.LogInformation("Загрузка списка писем"); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка загрузки писем"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, - MessageBoxIcon.Error); - } - } + try + { + dataGridView.FillandConfigGrid(_logic.ReadList(null)); + _logger.LogInformation("Загрузка списка писем"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки писем"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } } } diff --git a/SushiBar/SushiBar/Forms/FormMain.Designer.cs b/SushiBar/SushiBar/Forms/FormMain.Designer.cs index 83a9518..b5574a5 100644 --- a/SushiBar/SushiBar/Forms/FormMain.Designer.cs +++ b/SushiBar/SushiBar/Forms/FormMain.Designer.cs @@ -20,242 +20,250 @@ base.Dispose(disposing); } - #region Windows Form Designer generated code + #region Windows Form Designer generated code - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - dataGridView = new DataGridView(); - menuStrip1 = new MenuStrip(); - toolStripMenuItem = new ToolStripMenuItem(); - sushiToolStripMenuItem = new ToolStripMenuItem(); - componentsToolStripMenuItem = new ToolStripMenuItem(); - clientsToolStripMenuItem = new ToolStripMenuItem(); - implementersToolStripMenuItem = new ToolStripMenuItem(); - отчётыToolStripMenuItem1 = new ToolStripMenuItem(); - sushisReportToolStripMenuItem = new ToolStripMenuItem(); - componentsReportПоСушиToolStripMenuItem = new ToolStripMenuItem(); - orderReportToolStripMenuItem = new ToolStripMenuItem(); - startWorksToolStripMenuItem = new ToolStripMenuItem(); - отчётыToolStripMenuItem = new ToolStripMenuItem(); - sushisToolStripMenuItem = new ToolStripMenuItem(); - componentSushisToolStripMenuItem = new ToolStripMenuItem(); - ordersToolStripMenuItem = new ToolStripMenuItem(); - buttonCreateOrder = new Button(); - buttonTakeOrderInWork = new Button(); - buttonOrderReady = new Button(); - buttonIssuedOrder = new Button(); - buttonRef = new Button(); - MailToolStripMenuItem = new ToolStripMenuItem(); - ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); - menuStrip1.SuspendLayout(); - SuspendLayout(); - // - // dataGridView - // - dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dataGridView.Location = new Point(0, 28); - dataGridView.Name = "dataGridView"; - dataGridView.RowHeadersWidth = 51; - dataGridView.RowTemplate.Height = 29; - dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dataGridView.Size = new Size(986, 514); - dataGridView.TabIndex = 0; - // - // menuStrip1 - // - menuStrip1.ImageScalingSize = new Size(20, 20); - menuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem, отчётыToolStripMenuItem1, startWorksToolStripMenuItem, MailToolStripMenuItem }); - menuStrip1.Location = new Point(0, 0); - menuStrip1.Name = "menuStrip1"; - menuStrip1.Size = new Size(1184, 28); - menuStrip1.TabIndex = 1; - menuStrip1.Text = "menuStrip1"; - // - // toolStripMenuItem - // - toolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { sushiToolStripMenuItem, componentsToolStripMenuItem, clientsToolStripMenuItem, implementersToolStripMenuItem }); - toolStripMenuItem.Name = "toolStripMenuItem"; - toolStripMenuItem.Size = new Size(117, 24); - toolStripMenuItem.Text = "Справочники"; - // - // sushiToolStripMenuItem - // - sushiToolStripMenuItem.Name = "sushiToolStripMenuItem"; - sushiToolStripMenuItem.Size = new Size(185, 26); - sushiToolStripMenuItem.Text = "Суши"; - sushiToolStripMenuItem.Click += SushiToolStripMenuItem_Click; - // - // componentsToolStripMenuItem - // - componentsToolStripMenuItem.Name = "componentsToolStripMenuItem"; - componentsToolStripMenuItem.Size = new Size(185, 26); - componentsToolStripMenuItem.Text = "Компоненты"; - componentsToolStripMenuItem.Click += ComponentsToolStripMenuItem_Click; - // - // clientsToolStripMenuItem - // - clientsToolStripMenuItem.Name = "clientsToolStripMenuItem"; - clientsToolStripMenuItem.Size = new Size(185, 26); - clientsToolStripMenuItem.Text = "Клиенты"; - clientsToolStripMenuItem.Click += clientsToolStripMenuItem_Click; - // - // implementersToolStripMenuItem - // - implementersToolStripMenuItem.Name = "implementersToolStripMenuItem"; - implementersToolStripMenuItem.Size = new Size(185, 26); - implementersToolStripMenuItem.Text = "Исполнители"; - implementersToolStripMenuItem.Click += implementersToolStripMenuItem_Click; - // - // отчётыToolStripMenuItem1 - // - отчётыToolStripMenuItem1.DropDownItems.AddRange(new ToolStripItem[] { sushisReportToolStripMenuItem, componentsReportПоСушиToolStripMenuItem, orderReportToolStripMenuItem }); - отчётыToolStripMenuItem1.Name = "отчётыToolStripMenuItem1"; - отчётыToolStripMenuItem1.Size = new Size(73, 24); - отчётыToolStripMenuItem1.Text = "Отчёты"; - // - // sushisReportToolStripMenuItem - // - sushisReportToolStripMenuItem.Name = "sushisReportToolStripMenuItem"; - sushisReportToolStripMenuItem.Size = new Size(243, 26); - sushisReportToolStripMenuItem.Text = "Список суши"; - sushisReportToolStripMenuItem.Click += sushisReportToolStripMenuItem_Click; - // - // componentsReportПоСушиToolStripMenuItem - // - componentsReportПоСушиToolStripMenuItem.Name = "componentsReportПоСушиToolStripMenuItem"; - componentsReportПоСушиToolStripMenuItem.Size = new Size(243, 26); - componentsReportПоСушиToolStripMenuItem.Text = "Компоненты по суши"; - componentsReportПоСушиToolStripMenuItem.Click += componentsReportПоСушиToolStripMenuItem_Click; - // - // orderReportToolStripMenuItem - // - orderReportToolStripMenuItem.Name = "orderReportToolStripMenuItem"; - orderReportToolStripMenuItem.Size = new Size(243, 26); - orderReportToolStripMenuItem.Text = "Список заказов"; - orderReportToolStripMenuItem.Click += orderReportToolStripMenuItem_Click; - // - // startWorksToolStripMenuItem - // - startWorksToolStripMenuItem.Name = "startWorksToolStripMenuItem"; - startWorksToolStripMenuItem.Size = new Size(114, 24); - startWorksToolStripMenuItem.Text = "Запуск работ"; - startWorksToolStripMenuItem.Click += startWorksToolStripMenuItem_Click; - // - // отчётыToolStripMenuItem - // - отчётыToolStripMenuItem.Name = "отчётыToolStripMenuItem"; - отчётыToolStripMenuItem.Size = new Size(32, 19); - // - // sushisToolStripMenuItem - // - sushisToolStripMenuItem.Name = "sushisToolStripMenuItem"; - sushisToolStripMenuItem.Size = new Size(32, 19); - // - // componentSushisToolStripMenuItem - // - componentSushisToolStripMenuItem.Name = "componentSushisToolStripMenuItem"; - componentSushisToolStripMenuItem.Size = new Size(32, 19); - // - // ordersToolStripMenuItem - // - ordersToolStripMenuItem.Name = "ordersToolStripMenuItem"; - ordersToolStripMenuItem.Size = new Size(32, 19); - // - // buttonCreateOrder - // - buttonCreateOrder.Anchor = AnchorStyles.Top | AnchorStyles.Right; - buttonCreateOrder.Location = new Point(992, 28); - buttonCreateOrder.Name = "buttonCreateOrder"; - buttonCreateOrder.Size = new Size(180, 30); - buttonCreateOrder.TabIndex = 8; - buttonCreateOrder.Text = "Создать заказ"; - buttonCreateOrder.UseVisualStyleBackColor = true; - buttonCreateOrder.Click += ButtonCreateOrder_Click; - // - // buttonTakeOrderInWork - // - buttonTakeOrderInWork.Anchor = AnchorStyles.Top | AnchorStyles.Right; - buttonTakeOrderInWork.Location = new Point(992, 64); - buttonTakeOrderInWork.Name = "buttonTakeOrderInWork"; - buttonTakeOrderInWork.Size = new Size(180, 30); - buttonTakeOrderInWork.TabIndex = 9; - buttonTakeOrderInWork.Text = "Отдать на выполнение"; - buttonTakeOrderInWork.UseVisualStyleBackColor = true; - buttonTakeOrderInWork.Click += ButtonTakeOrderInWork_Click; - // - // buttonOrderReady - // - buttonOrderReady.Anchor = AnchorStyles.Top | AnchorStyles.Right; - buttonOrderReady.Location = new Point(992, 100); - buttonOrderReady.Name = "buttonOrderReady"; - buttonOrderReady.Size = new Size(180, 30); - buttonOrderReady.TabIndex = 10; - buttonOrderReady.Text = "Заказ готов"; - buttonOrderReady.UseVisualStyleBackColor = true; - buttonOrderReady.Click += ButtonOrderReady_Click; - // - // buttonIssuedOrder - // - buttonIssuedOrder.Anchor = AnchorStyles.Top | AnchorStyles.Right; - buttonIssuedOrder.Location = new Point(992, 136); - buttonIssuedOrder.Name = "buttonIssuedOrder"; - buttonIssuedOrder.Size = new Size(180, 30); - buttonIssuedOrder.TabIndex = 11; - buttonIssuedOrder.Text = "Заказ Выдан"; - buttonIssuedOrder.UseVisualStyleBackColor = true; - buttonIssuedOrder.Click += ButtonIssuedOrder_Click; - // - // buttonRef - // - buttonRef.Anchor = AnchorStyles.Top | AnchorStyles.Right; - buttonRef.Location = new Point(992, 172); - buttonRef.Name = "buttonRef"; - buttonRef.Size = new Size(180, 30); - buttonRef.TabIndex = 12; - buttonRef.Text = "Обновить список"; - buttonRef.UseVisualStyleBackColor = true; - buttonRef.Click += ButtonRef_Click; - // - // MailToolStripMenuItem - // - MailToolStripMenuItem.Name = "MailToolStripMenuItem"; - MailToolStripMenuItem.Size = new Size(65, 24); - MailToolStripMenuItem.Text = "Почта"; - MailToolStripMenuItem.Click += MailToolStripMenuItem_Click; - // - // FormMain - // - AllowDrop = true; - AutoScaleDimensions = new SizeF(8F, 20F); - AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(1184, 554); - Controls.Add(buttonRef); - Controls.Add(buttonIssuedOrder); - Controls.Add(buttonOrderReady); - Controls.Add(buttonTakeOrderInWork); - Controls.Add(buttonCreateOrder); - Controls.Add(dataGridView); - Controls.Add(menuStrip1); - MainMenuStrip = menuStrip1; - Name = "FormMain"; - Text = "Сушибар"; - WindowState = FormWindowState.Maximized; - Load += FormMain_Load; - ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); - menuStrip1.ResumeLayout(false); - menuStrip1.PerformLayout(); - ResumeLayout(false); - PerformLayout(); - } + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridView = new DataGridView(); + menuStrip1 = new MenuStrip(); + toolStripMenuItem = new ToolStripMenuItem(); + sushiToolStripMenuItem = new ToolStripMenuItem(); + componentsToolStripMenuItem = new ToolStripMenuItem(); + clientsToolStripMenuItem = new ToolStripMenuItem(); + implementersToolStripMenuItem = new ToolStripMenuItem(); + отчётыToolStripMenuItem1 = new ToolStripMenuItem(); + sushisReportToolStripMenuItem = new ToolStripMenuItem(); + componentsReportПоСушиToolStripMenuItem = new ToolStripMenuItem(); + orderReportToolStripMenuItem = new ToolStripMenuItem(); + startWorksToolStripMenuItem = new ToolStripMenuItem(); + MailToolStripMenuItem = new ToolStripMenuItem(); + отчётыToolStripMenuItem = new ToolStripMenuItem(); + sushisToolStripMenuItem = new ToolStripMenuItem(); + componentSushisToolStripMenuItem = new ToolStripMenuItem(); + ordersToolStripMenuItem = new ToolStripMenuItem(); + buttonCreateOrder = new Button(); + buttonTakeOrderInWork = new Button(); + buttonOrderReady = new Button(); + buttonIssuedOrder = new Button(); + buttonRef = new Button(); + backupToolStripMenuItem = new ToolStripMenuItem(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + menuStrip1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView + // + dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Location = new Point(0, 28); + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersWidth = 51; + dataGridView.RowTemplate.Height = 29; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(986, 514); + dataGridView.TabIndex = 0; + // + // menuStrip1 + // + menuStrip1.ImageScalingSize = new Size(20, 20); + menuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem, отчётыToolStripMenuItem1, startWorksToolStripMenuItem, MailToolStripMenuItem, backupToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new Size(1184, 28); + menuStrip1.TabIndex = 1; + menuStrip1.Text = "menuStrip1"; + // + // toolStripMenuItem + // + toolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { sushiToolStripMenuItem, componentsToolStripMenuItem, clientsToolStripMenuItem, implementersToolStripMenuItem }); + toolStripMenuItem.Name = "toolStripMenuItem"; + toolStripMenuItem.Size = new Size(117, 24); + toolStripMenuItem.Text = "Справочники"; + // + // sushiToolStripMenuItem + // + sushiToolStripMenuItem.Name = "sushiToolStripMenuItem"; + sushiToolStripMenuItem.Size = new Size(185, 26); + sushiToolStripMenuItem.Text = "Суши"; + sushiToolStripMenuItem.Click += SushiToolStripMenuItem_Click; + // + // componentsToolStripMenuItem + // + componentsToolStripMenuItem.Name = "componentsToolStripMenuItem"; + componentsToolStripMenuItem.Size = new Size(185, 26); + componentsToolStripMenuItem.Text = "Компоненты"; + componentsToolStripMenuItem.Click += ComponentsToolStripMenuItem_Click; + // + // clientsToolStripMenuItem + // + clientsToolStripMenuItem.Name = "clientsToolStripMenuItem"; + clientsToolStripMenuItem.Size = new Size(185, 26); + clientsToolStripMenuItem.Text = "Клиенты"; + clientsToolStripMenuItem.Click += clientsToolStripMenuItem_Click; + // + // implementersToolStripMenuItem + // + implementersToolStripMenuItem.Name = "implementersToolStripMenuItem"; + implementersToolStripMenuItem.Size = new Size(185, 26); + implementersToolStripMenuItem.Text = "Исполнители"; + implementersToolStripMenuItem.Click += implementersToolStripMenuItem_Click; + // + // отчётыToolStripMenuItem1 + // + отчётыToolStripMenuItem1.DropDownItems.AddRange(new ToolStripItem[] { sushisReportToolStripMenuItem, componentsReportПоСушиToolStripMenuItem, orderReportToolStripMenuItem }); + отчётыToolStripMenuItem1.Name = "отчётыToolStripMenuItem1"; + отчётыToolStripMenuItem1.Size = new Size(73, 24); + отчётыToolStripMenuItem1.Text = "Отчёты"; + // + // sushisReportToolStripMenuItem + // + sushisReportToolStripMenuItem.Name = "sushisReportToolStripMenuItem"; + sushisReportToolStripMenuItem.Size = new Size(243, 26); + sushisReportToolStripMenuItem.Text = "Список суши"; + sushisReportToolStripMenuItem.Click += sushisReportToolStripMenuItem_Click; + // + // componentsReportПоСушиToolStripMenuItem + // + componentsReportПоСушиToolStripMenuItem.Name = "componentsReportПоСушиToolStripMenuItem"; + componentsReportПоСушиToolStripMenuItem.Size = new Size(243, 26); + componentsReportПоСушиToolStripMenuItem.Text = "Компоненты по суши"; + componentsReportПоСушиToolStripMenuItem.Click += componentsReportПоСушиToolStripMenuItem_Click; + // + // orderReportToolStripMenuItem + // + orderReportToolStripMenuItem.Name = "orderReportToolStripMenuItem"; + orderReportToolStripMenuItem.Size = new Size(243, 26); + orderReportToolStripMenuItem.Text = "Список заказов"; + orderReportToolStripMenuItem.Click += orderReportToolStripMenuItem_Click; + // + // startWorksToolStripMenuItem + // + startWorksToolStripMenuItem.Name = "startWorksToolStripMenuItem"; + startWorksToolStripMenuItem.Size = new Size(114, 24); + startWorksToolStripMenuItem.Text = "Запуск работ"; + startWorksToolStripMenuItem.Click += startWorksToolStripMenuItem_Click; + // + // MailToolStripMenuItem + // + MailToolStripMenuItem.Name = "MailToolStripMenuItem"; + MailToolStripMenuItem.Size = new Size(65, 24); + MailToolStripMenuItem.Text = "Почта"; + MailToolStripMenuItem.Click += MailToolStripMenuItem_Click; + // + // отчётыToolStripMenuItem + // + отчётыToolStripMenuItem.Name = "отчётыToolStripMenuItem"; + отчётыToolStripMenuItem.Size = new Size(32, 19); + // + // sushisToolStripMenuItem + // + sushisToolStripMenuItem.Name = "sushisToolStripMenuItem"; + sushisToolStripMenuItem.Size = new Size(32, 19); + // + // componentSushisToolStripMenuItem + // + componentSushisToolStripMenuItem.Name = "componentSushisToolStripMenuItem"; + componentSushisToolStripMenuItem.Size = new Size(32, 19); + // + // ordersToolStripMenuItem + // + ordersToolStripMenuItem.Name = "ordersToolStripMenuItem"; + ordersToolStripMenuItem.Size = new Size(32, 19); + // + // buttonCreateOrder + // + buttonCreateOrder.Anchor = AnchorStyles.Top | AnchorStyles.Right; + buttonCreateOrder.Location = new Point(992, 28); + buttonCreateOrder.Name = "buttonCreateOrder"; + buttonCreateOrder.Size = new Size(180, 30); + buttonCreateOrder.TabIndex = 8; + buttonCreateOrder.Text = "Создать заказ"; + buttonCreateOrder.UseVisualStyleBackColor = true; + buttonCreateOrder.Click += ButtonCreateOrder_Click; + // + // buttonTakeOrderInWork + // + buttonTakeOrderInWork.Anchor = AnchorStyles.Top | AnchorStyles.Right; + buttonTakeOrderInWork.Location = new Point(992, 64); + buttonTakeOrderInWork.Name = "buttonTakeOrderInWork"; + buttonTakeOrderInWork.Size = new Size(180, 30); + buttonTakeOrderInWork.TabIndex = 9; + buttonTakeOrderInWork.Text = "Отдать на выполнение"; + buttonTakeOrderInWork.UseVisualStyleBackColor = true; + buttonTakeOrderInWork.Click += ButtonTakeOrderInWork_Click; + // + // buttonOrderReady + // + buttonOrderReady.Anchor = AnchorStyles.Top | AnchorStyles.Right; + buttonOrderReady.Location = new Point(992, 100); + buttonOrderReady.Name = "buttonOrderReady"; + buttonOrderReady.Size = new Size(180, 30); + buttonOrderReady.TabIndex = 10; + buttonOrderReady.Text = "Заказ готов"; + buttonOrderReady.UseVisualStyleBackColor = true; + buttonOrderReady.Click += ButtonOrderReady_Click; + // + // buttonIssuedOrder + // + buttonIssuedOrder.Anchor = AnchorStyles.Top | AnchorStyles.Right; + buttonIssuedOrder.Location = new Point(992, 136); + buttonIssuedOrder.Name = "buttonIssuedOrder"; + buttonIssuedOrder.Size = new Size(180, 30); + buttonIssuedOrder.TabIndex = 11; + buttonIssuedOrder.Text = "Заказ Выдан"; + buttonIssuedOrder.UseVisualStyleBackColor = true; + buttonIssuedOrder.Click += ButtonIssuedOrder_Click; + // + // buttonRef + // + buttonRef.Anchor = AnchorStyles.Top | AnchorStyles.Right; + buttonRef.Location = new Point(992, 172); + buttonRef.Name = "buttonRef"; + buttonRef.Size = new Size(180, 30); + buttonRef.TabIndex = 12; + buttonRef.Text = "Обновить список"; + buttonRef.UseVisualStyleBackColor = true; + buttonRef.Click += ButtonRef_Click; + // + // backupToolStripMenuItem + // + backupToolStripMenuItem.Name = "backupToolStripMenuItem"; + backupToolStripMenuItem.Size = new Size(123, 24); + backupToolStripMenuItem.Text = "Создать бекап"; + backupToolStripMenuItem.Click += backupToolStripMenuItem_Click; + // + // FormMain + // + AllowDrop = true; + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1184, 554); + Controls.Add(buttonRef); + Controls.Add(buttonIssuedOrder); + Controls.Add(buttonOrderReady); + Controls.Add(buttonTakeOrderInWork); + Controls.Add(buttonCreateOrder); + Controls.Add(dataGridView); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Name = "FormMain"; + Text = "Сушибар"; + WindowState = FormWindowState.Maximized; + Load += FormMain_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } - #endregion + #endregion - private DataGridView dataGridView; + private DataGridView dataGridView; private MenuStrip menuStrip1; private Button buttonCreateOrder; private Button buttonTakeOrderInWork; @@ -277,5 +285,6 @@ private ToolStripMenuItem implementersToolStripMenuItem; private ToolStripMenuItem startWorksToolStripMenuItem; private ToolStripMenuItem MailToolStripMenuItem; - } + private ToolStripMenuItem backupToolStripMenuItem; + } } \ No newline at end of file diff --git a/SushiBar/SushiBar/Forms/FormMain.cs b/SushiBar/SushiBar/Forms/FormMain.cs index 5b1b4e7..4686ddc 100644 --- a/SushiBar/SushiBar/Forms/FormMain.cs +++ b/SushiBar/SushiBar/Forms/FormMain.cs @@ -1,208 +1,235 @@ using Microsoft.Extensions.Logging; +using SushiBar.Extensions; +using SushiBarBusinessLogic.BusinessLogic; using SushiBarBusinessLogic.BusinessLogics; using SushiBarContracts.BindingModels; using SushiBarContracts.BusinessLogicsContracts; namespace SushiBar.Forms { - public partial class FormMain : Form - { - private readonly ILogger _logger; - private readonly IOrderLogic _orderLogic; - private readonly IReportLogic _reportLogic; - private readonly IWorkProcess _workProcess; - public FormMain(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess) - { - InitializeComponent(); - _logger = logger; - _orderLogic = orderLogic; - _reportLogic = reportLogic; - _workProcess = workProcess; - } - private void FormMain_Load(object sender, EventArgs e) - { - LoadData(); - } - private void LoadData() - { - try - { - var list = _orderLogic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["SushiId"].Visible = false; - dataGridView.Columns["ClientId"].Visible = false; - dataGridView.Columns["ImplementerId"].Visible = false; - dataGridView.Columns["SushiName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } - _logger.LogInformation("Загрузка заказов"); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка загрузки суши"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - private void ComponentsToolStripMenuItem_Click(object sender, EventArgs e) - { - var service = Program.ServiceProvider?.GetService(typeof(FormComponents)); - if (service is FormComponents form) - { - form.ShowDialog(); - } - } - private void SushiToolStripMenuItem_Click(object sender, EventArgs e) - { - var service = Program.ServiceProvider?.GetService(typeof(FormSushis)); - if (service is FormSushis form) - { - form.ShowDialog(); - } - } - private void ButtonCreateOrder_Click(object sender, EventArgs e) - { - var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder)); - if (service is FormCreateOrder form) - { - form.ShowDialog(); - LoadData(); - } - } - private void ButtonTakeOrderInWork_Click(object sender, EventArgs e) - { - if (dataGridView.SelectedRows.Count == 1) - { - int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - _logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id); - try - { - var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel { Id = id }); - if (!operationResult) - { - throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); - } - LoadData(); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка передачи заказа в работу"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } - private void ButtonOrderReady_Click(object sender, EventArgs e) - { - if (dataGridView.SelectedRows.Count == 1) - { - int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - _logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id); - try - { - var operationResult = _orderLogic.FinishOrder(new OrderBindingModel { Id = id }); - if (!operationResult) - { - throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); - } - LoadData(); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка отметки о готовности заказа"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } - private void ButtonIssuedOrder_Click(object sender, EventArgs e) - { - if (dataGridView.SelectedRows.Count == 1) - { - int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - _logger.LogInformation("Заказ №{id}. Меняется статус на 'Выдан'", id); - try - { - var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel { Id = id }); - if (!operationResult) - { - throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); - } - _logger.LogInformation("Заказ №{id} выдан", id); - LoadData(); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка отметки о выдачи заказа"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } - private void ButtonRef_Click(object sender, EventArgs e) - { - LoadData(); - } + public partial class FormMain : Form + { + private readonly ILogger _logger; + private readonly IOrderLogic _orderLogic; + private readonly IReportLogic _reportLogic; + private readonly IWorkProcess _workProcess; + private readonly IBackUpLogic _backUpLogic; - private void sushisReportToolStripMenuItem_Click(object sender, EventArgs e) - { - using var dialog = new SaveFileDialog { Filter = "docx|*.docx" }; - if (dialog.ShowDialog() == DialogResult.OK) - { - _reportLogic.SaveSushisToWordFile(new ReportBindingModel - { - FileName = dialog.FileName - }); - MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - private void componentsReportПоСушиToolStripMenuItem_Click(object sender, EventArgs e) - { - var service = Program.ServiceProvider?.GetService(typeof(FormReportSushiComponents)); - if (service is FormReportSushiComponents form) - { - form.ShowDialog(); - } - } + public FormMain(ILogger logger, + IOrderLogic orderLogic, + IReportLogic reportLogic, + IWorkProcess workProcess, + IBackUpLogic backUpLogic + ) + { + InitializeComponent(); + _logger = logger; + _orderLogic = orderLogic; + _reportLogic = reportLogic; + _workProcess = workProcess; + _backUpLogic = backUpLogic; + } + private void FormMain_Load(object sender, EventArgs e) + { + LoadData(); + } + private void LoadData() + { + _logger.LogInformation("Загрузка заказов"); + try + { + dataGridView.FillandConfigGrid(_orderLogic.ReadList(null)); + _logger.LogInformation("Загрузка заказов"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки заказов"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ComponentsToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormComponents)); + if (service is FormComponents form) + { + form.ShowDialog(); + } + } + private void SushiToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormSushis)); + if (service is FormSushis form) + { + form.ShowDialog(); + } + } + private void ButtonCreateOrder_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder)); + if (service is FormCreateOrder form) + { + form.ShowDialog(); + LoadData(); + } + } + private void ButtonTakeOrderInWork_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + _logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id); + try + { + var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel { Id = id }); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка передачи заказа в работу"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + private void ButtonOrderReady_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + _logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id); + try + { + var operationResult = _orderLogic.FinishOrder(new OrderBindingModel { Id = id }); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка отметки о готовности заказа"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + private void ButtonIssuedOrder_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + _logger.LogInformation("Заказ №{id}. Меняется статус на 'Выдан'", id); + try + { + var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel { Id = id }); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + _logger.LogInformation("Заказ №{id} выдан", id); + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка отметки о выдачи заказа"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + private void ButtonRef_Click(object sender, EventArgs e) + { + LoadData(); + } - private void orderReportToolStripMenuItem_Click(object sender, EventArgs e) - { - var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders)); - if (service is FormReportOrders form) - { - form.ShowDialog(); - } - } + private void sushisReportToolStripMenuItem_Click(object sender, EventArgs e) + { + using var dialog = new SaveFileDialog { Filter = "docx|*.docx" }; + if (dialog.ShowDialog() == DialogResult.OK) + { + _reportLogic.SaveSushisToWordFile(new ReportBindingModel + { + FileName = dialog.FileName + }); + MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } - private void clientsToolStripMenuItem_Click(object sender, EventArgs e) - { - var service = Program.ServiceProvider?.GetService(typeof(FormClients)); - if (service is FormClients form) - { - form.ShowDialog(); - } - } + private void componentsReportПоСушиToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormReportSushiComponents)); + if (service is FormReportSushiComponents form) + { + form.ShowDialog(); + } + } - private void implementersToolStripMenuItem_Click(object sender, EventArgs e) - { - var service = Program.ServiceProvider?.GetService(typeof(FormImplementers)); - if (service is FormImplementers form) - { - form.ShowDialog(); - } - } + private void orderReportToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders)); + if (service is FormReportOrders form) + { + form.ShowDialog(); + } + } - private void startWorksToolStripMenuItem_Click(object sender, EventArgs e) - { - _workProcess.DoWork((Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!, _orderLogic); - MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); - } + private void clientsToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormClients)); + if (service is FormClients form) + { + form.ShowDialog(); + } + } - private void MailToolStripMenuItem_Click(object sender, EventArgs e) - { - var service = Program.ServiceProvider?.GetService(typeof(FormMailView)); - if (service is FormMailView form) - { - form.ShowDialog(); - } - } - } + private void implementersToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormImplementers)); + if (service is FormImplementers form) + { + form.ShowDialog(); + } + } + + private void startWorksToolStripMenuItem_Click(object sender, EventArgs e) + { + _workProcess.DoWork((Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!, _orderLogic); + MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + private void MailToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormMailView)); + if (service is FormMailView form) + { + form.ShowDialog(); + } + } + + private void backupToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + if (_backUpLogic != null) + { + var fbd = new FolderBrowserDialog(); + if (fbd.ShowDialog() == DialogResult.OK) + { + _backUpLogic.CreateBackUp(new BackUpSaveBinidngModel + { + FolderName = fbd.SelectedPath + }); + MessageBox.Show("Бекап создан", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } } diff --git a/SushiBar/SushiBar/Forms/FormSushis.cs b/SushiBar/SushiBar/Forms/FormSushis.cs index caefccd..8b92ef8 100644 --- a/SushiBar/SushiBar/Forms/FormSushis.cs +++ b/SushiBar/SushiBar/Forms/FormSushis.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using SushiBar.Extensions; using SushiBarContracts.BindingModels; using SushiBarContracts.BusinessLogicsContracts; @@ -20,24 +21,17 @@ namespace SushiBar.Forms } private void LoadData() { - try - { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["Id"].Visible = false; - dataGridView.Columns["SushiComponents"].Visible = false; - dataGridView.Columns["SushiName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } - _logger.LogInformation("Загрузка суши"); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка загрузки суши"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } + try + { + dataGridView.FillandConfigGrid(_logic.ReadList(null)); + _logger.LogInformation("Загрузка суши"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки суши"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } private void ButtonAdd_Click(object sender, EventArgs e) { var service = Program.ServiceProvider?.GetService(typeof(FormSushi)); diff --git a/SushiBar/SushiBar/ImplementationExtensions.dll b/SushiBar/SushiBar/ImplementationExtensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..a5c8c73e004546c4996cd7ee607ea251a7f547db GIT binary patch literal 6144 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 T#`SV#!+ii3|L^j@TY-N8Q@&4@ literal 0 HcmV?d00001 diff --git a/SushiBar/SushiBar/ImplementationExtensionst.dll b/SushiBar/SushiBar/ImplementationExtensionst.dll new file mode 100644 index 0000000000000000000000000000000000000000..d9be8058ff350cd7b32251f49d4336d6da16b03c GIT binary patch literal 76800 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 _serviceProvider; @@ -28,12 +27,11 @@ namespace SushiBar // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); var services = new ServiceCollection(); - ConfigureServices(services); - _serviceProvider = services.BuildServiceProvider(); + InitDependency(); - try + try { - var mailSender = _serviceProvider.GetService(); + var mailSender = DependencyManager.Instance.Resolve(); mailSender?.MailConfig(new MailConfigBindingModel { MailLogin = System.Configuration.ConfigurationManager.AppSettings["MailLogin"] ?? string.Empty, @@ -48,54 +46,53 @@ namespace SushiBar } catch (Exception ex) { - var logger = _serviceProvider.GetService(); - logger?.LogError(ex, "Îøèáêà ðàáîòû ñ ïî÷òîé"); + var logger = DependencyManager.Instance.Resolve(); + logger?.LogError(ex, "Ошибка при ходе в почту"); } - Application.Run(_serviceProvider.GetRequiredService()); - } - private static void ConfigureServices(ServiceCollection services) - { - services.AddLogging(option => - { - option.SetMinimumLevel(LogLevel.Information); - option.AddNLog("nlog.config"); - }); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + Application.Run(DependencyManager.Instance.Resolve()); + } - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddSingleton(); - services.AddTransient(); + private static void InitDependency() + { + DependencyManager.InitDependency(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + DependencyManager.Instance.AddLogging(option => + { + option.SetMinimumLevel(LogLevel.Information); + option.AddNLog("nlog.config"); + }); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddSingleton(); - } + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + + DependencyManager.Instance.RegisterType(); + + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } private static void MailCheck(object obj) => ServiceProvider?.GetService()?.MailCheck(); } diff --git a/SushiBar/SushiBar/SushiBar.csproj b/SushiBar/SushiBar/SushiBar.csproj index dfe9d68..62d3b8d 100644 --- a/SushiBar/SushiBar/SushiBar.csproj +++ b/SushiBar/SushiBar/SushiBar.csproj @@ -23,9 +23,6 @@ - - - diff --git a/SushiBar/SushiBarBusinessLogic/BusinessLogics/BackUpLogic.cs b/SushiBar/SushiBarBusinessLogic/BusinessLogics/BackUpLogic.cs new file mode 100644 index 0000000..3dd51bc --- /dev/null +++ b/SushiBar/SushiBarBusinessLogic/BusinessLogics/BackUpLogic.cs @@ -0,0 +1,90 @@ +using Microsoft.Extensions.Logging; +using SushiBarContracts.BindingModels; +using SushiBarContracts.BusinessLogicsContracts; +using SushiBarContracts.StoragesContracts; +using SushiBarDataModels; +using System.IO.Compression; +using System.Reflection; +using System.Runtime.Serialization.Json; + +namespace SushiBarBusinessLogic.BusinessLogic +{ + public class BackUpLogic : IBackUpLogic + { + private readonly ILogger _logger; + private readonly IBackUpInfo _backUpInfo; + public BackUpLogic(ILogger logger, IBackUpInfo backUpInfo) + { + _logger = logger; + _backUpInfo = backUpInfo; + } + public void CreateBackUp(BackUpSaveBinidngModel model) + { + if (_backUpInfo == null) + { + return; + } + try + { + _logger.LogDebug("Clear folder"); + var dirInfo = new DirectoryInfo(model.FolderName); + if (dirInfo.Exists) + { + foreach (var file in dirInfo.GetFiles()) + { + file.Delete(); + } + } + _logger.LogDebug("Delete archive"); + string fileName = $"{model.FolderName}.zip"; + if (File.Exists(fileName)) + { + File.Delete(fileName); + } + _logger.LogDebug("Get assembly"); + var typeIId = typeof(IId); + var assembly = typeIId.Assembly; + if (assembly == null) + { + throw new ArgumentNullException("Сборка не найдена", nameof(assembly)); + } + var types = assembly.GetTypes(); + var method = GetType().GetMethod("SaveToFile", BindingFlags.NonPublic | BindingFlags.Instance); + _logger.LogDebug("Find {count} types", types.Length); + foreach (var type in types) + { + if (type.IsInterface && type.GetInterface(typeIId.Name) != null) + { + var modelType = _backUpInfo.GetTypeByModelInterface(type.Name); + if (modelType == null) + { + throw new InvalidOperationException($"Не найден класс - модель для { type.Name }"); + } + _logger.LogDebug("Call SaveToFile method for {name} type", type.Name); + method?.MakeGenericMethod(modelType).Invoke(this, new object[] { model.FolderName }); + } + } + _logger.LogDebug("Create zip and remove folder"); + ZipFile.CreateFromDirectory(model.FolderName, fileName); + dirInfo.Delete(true); + } + catch (Exception) + { + throw; + } + } + private void SaveToFile(string folderName) where T : class, new() + { + var records = _backUpInfo.GetList(); + if (records == null) + { + _logger.LogWarning("{type} type get null list", typeof(T).Name); + return; + } + var jsonFormatter = new DataContractJsonSerializer(typeof(List)); + using var fs = new FileStream(string.Format("{0}/{1}.json", folderName, typeof(T).Name), FileMode.OpenOrCreate); + jsonFormatter.WriteObject(fs, records); + } + + } +} diff --git a/SushiBar/SushiBarBusinessLogic/BusinessLogics/ImplementerLogic.cs b/SushiBar/SushiBarBusinessLogic/BusinessLogics/ImplementerLogic.cs index 0fae2b2..3d09b6a 100644 --- a/SushiBar/SushiBarBusinessLogic/BusinessLogics/ImplementerLogic.cs +++ b/SushiBar/SushiBarBusinessLogic/BusinessLogics/ImplementerLogic.cs @@ -1,8 +1,8 @@ -using IceCreamShopContracts.StoragesContracts; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging; using SushiBarContracts.BindingModels; using SushiBarContracts.BusinessLogicsContracts; using SushiBarContracts.SearchModels; +using SushiBarContracts.StoragesContracts; using SushiBarContracts.ViewModels; namespace SushiBarBusinessLogic.BusinessLogics diff --git a/SushiBar/SushiBarBusinessLogic/SushiBarBusinessLogic.csproj b/SushiBar/SushiBarBusinessLogic/SushiBarBusinessLogic.csproj index 5639c84..7017c98 100644 --- a/SushiBar/SushiBarBusinessLogic/SushiBarBusinessLogic.csproj +++ b/SushiBar/SushiBarBusinessLogic/SushiBarBusinessLogic.csproj @@ -16,6 +16,7 @@ + diff --git a/SushiBar/SushiBarContracts/Attributes/ColumnAttribute.cs b/SushiBar/SushiBarContracts/Attributes/ColumnAttribute.cs new file mode 100644 index 0000000..d6a1576 --- /dev/null +++ b/SushiBar/SushiBarContracts/Attributes/ColumnAttribute.cs @@ -0,0 +1,22 @@ +namespace SushiBarContracts.Attributes +{ + [AttributeUsage(AttributeTargets.Property)] + public class ColumnAttribute : Attribute + { + public ColumnAttribute(string title = "", bool visible = true, int width = 0, + GridViewAutoSize gridViewAutoSize = GridViewAutoSize.None, bool isUseAutoSize = false) + { + Title = title; + Visible = visible; + Width = width; + GridViewAutoSize = gridViewAutoSize; + IsUseAutoSize = isUseAutoSize; + } + public string Title { get; private set; } + public bool Visible { get; private set; } + public int Width { get; private set; } + public GridViewAutoSize GridViewAutoSize { get; private set; } + public bool IsUseAutoSize { get; private set; } + + } +} diff --git a/SushiBar/SushiBarContracts/Attributes/GridViewAutoSize.cs b/SushiBar/SushiBarContracts/Attributes/GridViewAutoSize.cs new file mode 100644 index 0000000..9fa1721 --- /dev/null +++ b/SushiBar/SushiBarContracts/Attributes/GridViewAutoSize.cs @@ -0,0 +1,14 @@ +namespace SushiBarContracts.Attributes +{ + public enum GridViewAutoSize + { + NotSet = 0, + None = 1, + ColumnHeader = 2, + AllCellsExceptHeader = 4, + AllCells = 6, + DisplayedCellsExceptHeader = 8, + DisplayedCells = 10, + Fill = 16 + } +} diff --git a/SushiBar/SushiBarContracts/BindingModels/BackUpSaveBinidngModel.cs b/SushiBar/SushiBarContracts/BindingModels/BackUpSaveBinidngModel.cs new file mode 100644 index 0000000..f0ca175 --- /dev/null +++ b/SushiBar/SushiBarContracts/BindingModels/BackUpSaveBinidngModel.cs @@ -0,0 +1,8 @@ +namespace SushiBarContracts.BindingModels +{ + public class BackUpSaveBinidngModel + { + public string FolderName { get; set; } = string.Empty; + } + +} diff --git a/SushiBar/SushiBarContracts/BindingModels/MessageInfoBindingModel.cs b/SushiBar/SushiBarContracts/BindingModels/MessageInfoBindingModel.cs index 6db61aa..b1ed58f 100644 --- a/SushiBar/SushiBarContracts/BindingModels/MessageInfoBindingModel.cs +++ b/SushiBar/SushiBarContracts/BindingModels/MessageInfoBindingModel.cs @@ -15,5 +15,7 @@ namespace SushiBarContracts.BindingModels public string Body { get; set; } = string.Empty; public DateTime DateDelivery { get; set; } - } + + public int Id => throw new NotImplementedException(); + } } diff --git a/SushiBar/SushiBarContracts/BusinessLogicsContracts/IBackUpLogic.cs b/SushiBar/SushiBarContracts/BusinessLogicsContracts/IBackUpLogic.cs new file mode 100644 index 0000000..bd17b76 --- /dev/null +++ b/SushiBar/SushiBarContracts/BusinessLogicsContracts/IBackUpLogic.cs @@ -0,0 +1,9 @@ +using SushiBarContracts.BindingModels; + +namespace SushiBarContracts.BusinessLogicsContracts +{ + public interface IBackUpLogic + { + void CreateBackUp(BackUpSaveBinidngModel model); + } +} diff --git a/SushiBar/SushiBarContracts/DI/DependencyManager.cs b/SushiBar/SushiBarContracts/DI/DependencyManager.cs new file mode 100644 index 0000000..e15165a --- /dev/null +++ b/SushiBar/SushiBarContracts/DI/DependencyManager.cs @@ -0,0 +1,45 @@ +using Microsoft.Extensions.Logging; + +namespace SushiBarContracts.DI +{ + public class DependencyManager + { + private readonly IDependencyContainer _dependencyManager; + private static DependencyManager? _manager; + private static readonly object _locjObject = new(); + private DependencyManager() + { + _dependencyManager = new ServiceDependencyContainer(); + } + public static DependencyManager Instance + { + get + { + if (_manager == null) { + lock (_locjObject) + { + _manager = new DependencyManager(); + } + } + return _manager; + } + } + public static void InitDependency() + { + var ext = ServiceProviderLoader.GetImplementationExtensions(); + if (ext == null) + { + throw new ArgumentNullException("Отсутствуют компонент для загрузки зависимостей по модулям"); + } + ext.RegisterServices(); + } + public void AddLogging(Action configure) => + _dependencyManager.AddLogging(configure); + public void RegisterType(bool isSingle = false) where U : + class, T where T : class => + _dependencyManager.RegisterType(isSingle); + public void RegisterType(bool isSingle = false) where T : class => + _dependencyManager.RegisterType(isSingle); + public T Resolve() => _dependencyManager.Resolve(); + } +} diff --git a/SushiBar/SushiBarContracts/DI/IDependencyContainer.cs b/SushiBar/SushiBarContracts/DI/IDependencyContainer.cs new file mode 100644 index 0000000..f00efbe --- /dev/null +++ b/SushiBar/SushiBarContracts/DI/IDependencyContainer.cs @@ -0,0 +1,12 @@ +using Microsoft.Extensions.Logging; + +namespace SushiBarContracts.DI +{ + public interface IDependencyContainer + { + void AddLogging(Action configure); + void RegisterType(bool isSingle) where U : class, T where T : class; + void RegisterType(bool isSingle) where T : class; + T Resolve(); + } +} diff --git a/SushiBar/SushiBarContracts/DI/IImplementationExtension.cs b/SushiBar/SushiBarContracts/DI/IImplementationExtension.cs new file mode 100644 index 0000000..4f2d798 --- /dev/null +++ b/SushiBar/SushiBarContracts/DI/IImplementationExtension.cs @@ -0,0 +1,9 @@ +namespace SushiBarContracts.DI +{ + public interface IImplementationExtension + { + public int Priority { get; } + public void RegisterServices(); + + } +} diff --git a/SushiBar/SushiBarContracts/DI/ServiceDependencyContainer.cs b/SushiBar/SushiBarContracts/DI/ServiceDependencyContainer.cs new file mode 100644 index 0000000..f2af4f7 --- /dev/null +++ b/SushiBar/SushiBarContracts/DI/ServiceDependencyContainer.cs @@ -0,0 +1,57 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace SushiBarContracts.DI +{ + public class ServiceDependencyContainer : IDependencyContainer + { + private ServiceProvider? _serviceProvider; + + private readonly ServiceCollection _serviceCollection; + + public ServiceDependencyContainer() + { + _serviceCollection = new ServiceCollection(); + } + + public void AddLogging(Action configure) + { + _serviceCollection.AddLogging(configure); + } + + public void RegisterType(bool isSingle) where T : class + { + if (isSingle) + { + _serviceCollection.AddSingleton(); + } + else + { + _serviceCollection.AddTransient(); + } + _serviceProvider = null; + } + + public void RegisterType(bool isSingle) where U : class, T where T : class + { + if (isSingle) + { + _serviceCollection.AddSingleton(); + } + else + { + _serviceCollection.AddTransient(); + } + _serviceProvider = null; + } + public T Resolve() + { + if (_serviceProvider == null) + { + _serviceProvider = _serviceCollection.BuildServiceProvider(); + } + return _serviceProvider.GetService()!; + } + + } +} diff --git a/SushiBar/SushiBarContracts/DI/ServiceProviderLoader.cs b/SushiBar/SushiBarContracts/DI/ServiceProviderLoader.cs new file mode 100644 index 0000000..a4e2763 --- /dev/null +++ b/SushiBar/SushiBarContracts/DI/ServiceProviderLoader.cs @@ -0,0 +1,53 @@ +using System.Reflection; + +namespace SushiBarContracts.DI +{ + public static partial class ServiceProviderLoader + { + public static IImplementationExtension? GetImplementationExtensions() + { + IImplementationExtension? source = null; + var files = Directory + .GetFiles( + TryGetImplementationExtensionsFolder(), + "*.dll", + SearchOption.AllDirectories + ); + foreach (var file in files.Distinct()) + { + Assembly asm = Assembly.LoadFrom(file); + foreach (var t in asm.GetExportedTypes()) + { + if (t.IsClass && + typeof(IImplementationExtension).IsAssignableFrom(t)) + { + if (source == null) + { + source = (IImplementationExtension)Activator.CreateInstance(t)!; + } + else + { + var newSource = (IImplementationExtension)Activator.CreateInstance(t)!; + if (newSource.Priority > source.Priority) + { + source = newSource; + } + } + } + } + } + return source; + } + private static string TryGetImplementationExtensionsFolder() + { + var directory = new DirectoryInfo(Directory.GetCurrentDirectory()); + while (directory != null && !directory.GetDirectories("ImplementationExtensions", + SearchOption.AllDirectories).Any(x => x.Name == "ImplementationExtensions")) + { + directory = directory.Parent; + } + return $"{directory?.FullName}\\ImplementationExtensions"; + } + } + +} diff --git a/SushiBar/SushiBarContracts/StoragesContracts/IBackUpInfo.cs b/SushiBar/SushiBarContracts/StoragesContracts/IBackUpInfo.cs new file mode 100644 index 0000000..7cbedd5 --- /dev/null +++ b/SushiBar/SushiBarContracts/StoragesContracts/IBackUpInfo.cs @@ -0,0 +1,8 @@ +namespace SushiBarContracts.StoragesContracts +{ + public interface IBackUpInfo + { + List? GetList() where T : class, new(); + Type? GetTypeByModelInterface(string modelInterfaceName); + } +} diff --git a/SushiBar/SushiBarContracts/StoragesContracts/IImplementerStorage.cs b/SushiBar/SushiBarContracts/StoragesContracts/IImplementerStorage.cs index 3b112b3..fb23fc6 100644 --- a/SushiBar/SushiBarContracts/StoragesContracts/IImplementerStorage.cs +++ b/SushiBar/SushiBarContracts/StoragesContracts/IImplementerStorage.cs @@ -2,7 +2,7 @@ using SushiBarContracts.SearchModels; using SushiBarContracts.ViewModels; -namespace IceCreamShopContracts.StoragesContracts +namespace SushiBarContracts.StoragesContracts { public interface IImplementerStorage { diff --git a/SushiBar/SushiBarContracts/SushiBarContracts.csproj b/SushiBar/SushiBarContracts/SushiBarContracts.csproj index ef52534..fba228a 100644 --- a/SushiBar/SushiBarContracts/SushiBarContracts.csproj +++ b/SushiBar/SushiBarContracts/SushiBarContracts.csproj @@ -4,8 +4,13 @@ net6.0 enable enable + \bin + + + + diff --git a/SushiBar/SushiBarContracts/ViewModels/ClientViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/ClientViewModel.cs index d4ab405..da48bb6 100644 --- a/SushiBar/SushiBarContracts/ViewModels/ClientViewModel.cs +++ b/SushiBar/SushiBarContracts/ViewModels/ClientViewModel.cs @@ -1,16 +1,17 @@ -using System.ComponentModel; +using SushiBarContracts.Attributes; +using SushiBarDataModels.Models; namespace SushiBarContracts.ViewModels { - public class ClientViewModel + public class ClientViewModel : IClientModel { - public int Id { get; set; } - [DisplayName("ФИО клиента")] - public string ClientFIO { get; set; } = string.Empty; - [DisplayName("Логин (эл. почта)")] - public string Email { get; set; } = string.Empty; - [DisplayName("Пароль")] - public string Password { get; set; } = string.Empty; + [Column(visible: false)] + public int Id { get; set; } + public string ClientFIO { get; set; } = string.Empty; + [Column(title: "Email клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string Email { get; set; } = string.Empty; + [Column(title: "Пароль", width: 150)] + public string Password { get; set; } = string.Empty; } } diff --git a/SushiBar/SushiBarContracts/ViewModels/ComponentViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/ComponentViewModel.cs index f879afc..69fb28a 100644 --- a/SushiBar/SushiBarContracts/ViewModels/ComponentViewModel.cs +++ b/SushiBar/SushiBarContracts/ViewModels/ComponentViewModel.cs @@ -1,14 +1,15 @@ -using SushiBarDataModels.Models; -using System.ComponentModel; +using SushiBarContracts.Attributes; +using SushiBarDataModels.Models; namespace SushiBarContracts.ViewModels { public class ComponentViewModel : IComponentModel { - public int Id { get; set; } - [DisplayName("Название компонента")] - public string ComponentName { get; set; } = string.Empty; - [DisplayName("Цена")] - public double Cost { get; set; } + [Column(visible: false)] + public int Id { get; set; } + [Column(title: "Название компонента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string ComponentName { get; set; } = string.Empty; + [Column(title: "Цена", width: 80)] + public double Cost { get; set; } } } diff --git a/SushiBar/SushiBarContracts/ViewModels/ImplementerViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/ImplementerViewModel.cs index 8dc68c4..b1c6c13 100644 --- a/SushiBar/SushiBarContracts/ViewModels/ImplementerViewModel.cs +++ b/SushiBar/SushiBarContracts/ViewModels/ImplementerViewModel.cs @@ -1,18 +1,19 @@ -using SushiBarDataModels.Models; -using System.ComponentModel; +using SushiBarContracts.Attributes; +using SushiBarDataModels.Models; namespace SushiBarContracts.ViewModels { public class ImplementerViewModel : IImplementerModel { + [Column(visible: false)] public int Id { get; set; } - [DisplayName("ФИО исполнителя")] + [Column(title: "ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string ImplementerFIO { get; set; } = string.Empty; - [DisplayName("Стаж работы")] + [Column(title: "Стаж работы", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] public int WorkExperience { get; set; } = 0; - [DisplayName("Квалификация")] + [Column(title: "Квалификация", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] public int Qualification { get; set; } = 0; - [DisplayName("Пароль")] + [Column(title: "Пароль", width: 150)] public string Password { get; set; } = string.Empty; } } diff --git a/SushiBar/SushiBarContracts/ViewModels/MessageInfoViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/MessageInfoViewModel.cs index d1cb3cb..7c2b854 100644 --- a/SushiBar/SushiBarContracts/ViewModels/MessageInfoViewModel.cs +++ b/SushiBar/SushiBarContracts/ViewModels/MessageInfoViewModel.cs @@ -1,24 +1,27 @@ -using SushiBarDataModels.Models; -using System.ComponentModel; +using SushiBarContracts.Attributes; +using SushiBarDataModels.Models; namespace SushiBarContracts.ViewModels { - public class MessageInfoViewModel : IMessageInfoModel + public class MessageInfoViewModel : IMessageInfoModel { - public string MessageId { get; set; } = string.Empty; + [Column(visible: false)] + public string MessageId { get; set; } = string.Empty; + [Column(visible: false)] + public int? ClientId { get; set; } - public int? ClientId { get; set; } + [Column(title: "Отправитель", gridViewAutoSize: GridViewAutoSize.DisplayedCells, isUseAutoSize: true)] + public string SenderName { get; set; } = string.Empty; - [DisplayName("Отправитель")] - public string SenderName { get; set; } = string.Empty; + [Column(title: "Дата письма", width: 100)] + public DateTime DateDelivery { get; set; } - [DisplayName("Дата письма")] - public DateTime DateDelivery { get; set; } + [Column(title: "Заголовок", width: 150)] + public string Subject { get; set; } = string.Empty; - [DisplayName("Заголовок")] - public string Subject { get; set; } = string.Empty; - - [DisplayName("Текст")] - public string Body { get; set; } = string.Empty; - } + [Column(title: "Текст", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string Body { get; set; } = string.Empty; + [Column(visible: false)] + public int Id => throw new NotImplementedException(); + } } diff --git a/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs index 6c3fc54..f6bafa4 100644 --- a/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs +++ b/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs @@ -1,31 +1,34 @@ -using SushiBarDataModels.Enums; +using SushiBarContracts.Attributes; +using SushiBarDataModels.Enums; using SushiBarDataModels.Models; -using System.ComponentModel; namespace SushiBarContracts.ViewModels { public class OrderViewModel : IOrderModel { - [DisplayName("Номер")] - public int Id { get; set; } - public int SushiId { get; set; } - public int ClientId { get; set; } - public int? ImplementerId { get; set; } - [DisplayName("Клиент")] - public string ClientFIO { get; set; } = string.Empty; - [DisplayName("Суши")] - public string SushiName { get; set; } = string.Empty; - [DisplayName("Исполнитель")] - public string ImplementerName { get; set;} = string.Empty; - [DisplayName("Количество")] - public int Count { get; set; } - [DisplayName("Сумма")] - public double Sum { get; set; } - [DisplayName("Статус")] - public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; - [DisplayName("Дата создания")] - public DateTime DateCreate { get; set; } = DateTime.Now; - [DisplayName("Дата выполнения")] - public DateTime? DateImplement { get; set; } + [Column(title: "Номер", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] + public int Id { get; set; } + [Column(visible: false)] + public int SushiId { get; set; } + [Column(visible: false)] + public int ClientId { get; set; } + [Column(visible: false)] + public int? ImplementerId { get; set; } + [Column(title: "ФИО клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string ClientFIO { get; set; } = string.Empty; + [Column(title: "Суши", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] + public string SushiName { get; set; } = string.Empty; + [Column(title: "ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string ImplementerName { get; set;} = string.Empty; + [Column(title: "Количество", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] + public int Count { get; set; } + [Column(title: "Сумма", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] + public double Sum { get; set; } + [Column(title: "Статус", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] + public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; + [Column(title: "Дата создания", width: 100)] + public DateTime DateCreate { get; set; } = DateTime.Now; + [Column(title: "Дата выполнения", width: 100)] + public DateTime? DateImplement { get; set; } } } diff --git a/SushiBar/SushiBarContracts/ViewModels/ReportOrdersViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/ReportOrdersViewModel.cs index dfb4ded..3d43be1 100644 --- a/SushiBar/SushiBarContracts/ViewModels/ReportOrdersViewModel.cs +++ b/SushiBar/SushiBarContracts/ViewModels/ReportOrdersViewModel.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SushiBarContracts.ViewModels +namespace SushiBarContracts.ViewModels { public class ReportOrdersViewModel { diff --git a/SushiBar/SushiBarContracts/ViewModels/ReportProductComponentViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/ReportProductComponentViewModel.cs index 63ce68a..730ee42 100644 --- a/SushiBar/SushiBarContracts/ViewModels/ReportProductComponentViewModel.cs +++ b/SushiBar/SushiBarContracts/ViewModels/ReportProductComponentViewModel.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SushiBarContracts.ViewModels +namespace SushiBarContracts.ViewModels { public class ReportSushiComponentViewModel { diff --git a/SushiBar/SushiBarContracts/ViewModels/SushiViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/SushiViewModel.cs index 73b3ae8..037996b 100644 --- a/SushiBar/SushiBarContracts/ViewModels/SushiViewModel.cs +++ b/SushiBar/SushiBarContracts/ViewModels/SushiViewModel.cs @@ -1,16 +1,18 @@ -using SushiBarDataModels.Models; -using System.ComponentModel; +using SushiBarContracts.Attributes; +using SushiBarDataModels.Models; namespace SushiBarContracts.ViewModels { public class SushiViewModel : ISushiModel { - public int Id { get; set; } - [DisplayName("Название суши")] - public string SushiName { get; set; } = string.Empty; - [DisplayName("Цена")] - public double Price { get; set; } - public Dictionary SushiComponents + [Column(visible: false)] + public int Id { get; set; } + [Column(title: "Название Суши", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string SushiName { get; set; } = string.Empty; + [Column(title: "Цена", width: 100)] + public double Price { get; set; } + [Column(visible: false)] + public Dictionary SushiComponents { get; set; diff --git a/SushiBar/SushiBarDataModels/Models/IMessageInfoModel.cs b/SushiBar/SushiBarDataModels/Models/IMessageInfoModel.cs index 626ae17..8468874 100644 --- a/SushiBar/SushiBarDataModels/Models/IMessageInfoModel.cs +++ b/SushiBar/SushiBarDataModels/Models/IMessageInfoModel.cs @@ -1,6 +1,6 @@ namespace SushiBarDataModels.Models { - public interface IMessageInfoModel + public interface IMessageInfoModel : IId { string MessageId { get; } int? ClientId { get; } @@ -8,6 +8,5 @@ DateTime DateDelivery { get; } string Subject { get; } string Body { get; } - } } diff --git a/SushiBar/SushiBarDatabaseImplement/DatabaseImplementationExtension.cs b/SushiBar/SushiBarDatabaseImplement/DatabaseImplementationExtension.cs new file mode 100644 index 0000000..b3a9a1f --- /dev/null +++ b/SushiBar/SushiBarDatabaseImplement/DatabaseImplementationExtension.cs @@ -0,0 +1,21 @@ +using SushiBarContracts.DI; +using SushiBarContracts.StoragesContracts; +using SushiBarDatabaseImplement.Implements; + +namespace SushiBarDatabaseImplement +{ + public class DatabaseImplementationExtension : IImplementationExtension + { + public int Priority => 2; + public void RegisterServices() + { + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + } +} diff --git a/SushiBar/SushiBarDatabaseImplement/Implements/BackUpInfo.cs b/SushiBar/SushiBarDatabaseImplement/Implements/BackUpInfo.cs new file mode 100644 index 0000000..712ae1e --- /dev/null +++ b/SushiBar/SushiBarDatabaseImplement/Implements/BackUpInfo.cs @@ -0,0 +1,27 @@ +using SushiBarContracts.StoragesContracts; + +namespace SushiBarDatabaseImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + public List? GetList() where T : class, new() + { + using var context = new SushiBarDatabase(); + return context.Set().ToList(); + } + public Type? GetTypeByModelInterface(string modelInterfaceName) + { + var assembly = typeof(BackUpInfo).Assembly; + var types = assembly.GetTypes(); + foreach (var type in types) + { + if (type.IsClass && + type.GetInterface(modelInterfaceName) != null) + { + return type; + } + } + return null; + } + } +} diff --git a/SushiBar/SushiBarDatabaseImplement/Implements/ImplementerStorage.cs b/SushiBar/SushiBarDatabaseImplement/Implements/ImplementerStorage.cs index 4918d1a..aca63f2 100644 --- a/SushiBar/SushiBarDatabaseImplement/Implements/ImplementerStorage.cs +++ b/SushiBar/SushiBarDatabaseImplement/Implements/ImplementerStorage.cs @@ -1,6 +1,6 @@ -using IceCreamShopContracts.StoragesContracts; -using SushiBarContracts.BindingModels; +using SushiBarContracts.BindingModels; using SushiBarContracts.SearchModels; +using SushiBarContracts.StoragesContracts; using SushiBarContracts.ViewModels; using SushiBarDatabaseImplement.Models; diff --git a/SushiBar/SushiBarDatabaseImplement/Models/MessageInfo.cs b/SushiBar/SushiBarDatabaseImplement/Models/MessageInfo.cs index 5109a4a..db851df 100644 --- a/SushiBar/SushiBarDatabaseImplement/Models/MessageInfo.cs +++ b/SushiBar/SushiBarDatabaseImplement/Models/MessageInfo.cs @@ -46,5 +46,7 @@ namespace SushiBarDatabaseImplement.Models SenderName = SenderName, DateDelivery = DateDelivery, }; - } + + public int Id => throw new NotImplementedException(); + } } diff --git a/SushiBar/SushiBarDatabaseImplement/Properties/Resources.Designer.cs b/SushiBar/SushiBarDatabaseImplement/Properties/Resources.Designer.cs new file mode 100644 index 0000000..daab7e1 --- /dev/null +++ b/SushiBar/SushiBarDatabaseImplement/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace SushiBarDatabaseImplement.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SushiBarDatabaseImplement.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/SushiBar/SushiBarDatabaseImplement/Properties/Resources.resx b/SushiBar/SushiBarDatabaseImplement/Properties/Resources.resx new file mode 100644 index 0000000..4fdb1b6 --- /dev/null +++ b/SushiBar/SushiBarDatabaseImplement/Properties/Resources.resx @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SushiBar/SushiBarDatabaseImplement/SushiBarDatabaseImplement.csproj b/SushiBar/SushiBarDatabaseImplement/SushiBarDatabaseImplement.csproj index 2af36de..85958cc 100644 --- a/SushiBar/SushiBarDatabaseImplement/SushiBarDatabaseImplement.csproj +++ b/SushiBar/SushiBarDatabaseImplement/SushiBarDatabaseImplement.csproj @@ -26,4 +26,23 @@ + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + diff --git a/SushiBar/SushiBarFileImplement/FileImplementationExtension.cs b/SushiBar/SushiBarFileImplement/FileImplementationExtension.cs new file mode 100644 index 0000000..2c4f761 --- /dev/null +++ b/SushiBar/SushiBarFileImplement/FileImplementationExtension.cs @@ -0,0 +1,21 @@ +using SushiBarContracts.DI; +using SushiBarContracts.StoragesContracts; +using SushiBarFileImplement.Implements; + +namespace SushiBarFileImplement +{ + public class FileImplementationExtension : IImplementationExtension + { + public int Priority => 0; + public void RegisterServices() + { + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + } +} diff --git a/SushiBar/SushiBarFileImplement/Implements/BackUpInfo.cs b/SushiBar/SushiBarFileImplement/Implements/BackUpInfo.cs new file mode 100644 index 0000000..708688f --- /dev/null +++ b/SushiBar/SushiBarFileImplement/Implements/BackUpInfo.cs @@ -0,0 +1,38 @@ +using SushiBarContracts.StoragesContracts; +using System.Reflection; + +namespace SushiBarFileImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + private readonly DataFileSingleton source; + private readonly PropertyInfo[] sourceProperties; + + public BackUpInfo() + { + source = DataFileSingleton.GetInstance(); + sourceProperties = source.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); + } + public Type? GetTypeByModelInterface(string modelInterfaceName) + { + var assembly = typeof(BackUpInfo).Assembly; + var types = assembly.GetTypes(); + foreach (var type in types) + { + if (type.IsClass && + type.GetInterface(modelInterfaceName) != null) + { + return type; + } + } + return null; + } + public List? GetList() where T : class, new() + { + var requredType = typeof(T); + return (List?)sourceProperties.FirstOrDefault(x => x.PropertyType.IsGenericType && x.PropertyType.GetGenericArguments()[0] == requredType) + ?.GetValue(source); + } + + } +} diff --git a/SushiBar/SushiBarFileImplement/Implements/ClientStorage.cs b/SushiBar/SushiBarFileImplement/Implements/ClientStorage.cs index 9950acb..ad0690f 100644 --- a/SushiBar/SushiBarFileImplement/Implements/ClientStorage.cs +++ b/SushiBar/SushiBarFileImplement/Implements/ClientStorage.cs @@ -1,11 +1,12 @@ using SushiBarContracts.BindingModels; using SushiBarContracts.SearchModels; +using SushiBarContracts.StoragesContracts; using SushiBarContracts.ViewModels; using SushiBarFileImplement.Models; namespace SushiBarFileImplement.Implements { - public class ClientStorage + public class ClientStorage : IClientStorage { private readonly DataFileSingleton source; public ClientStorage() diff --git a/SushiBar/SushiBarFileImplement/Implements/ImplementerStorage.cs b/SushiBar/SushiBarFileImplement/Implements/ImplementerStorage.cs index 6369c82..ebab256 100644 --- a/SushiBar/SushiBarFileImplement/Implements/ImplementerStorage.cs +++ b/SushiBar/SushiBarFileImplement/Implements/ImplementerStorage.cs @@ -1,6 +1,6 @@ -using IceCreamShopContracts.StoragesContracts; -using SushiBarContracts.BindingModels; +using SushiBarContracts.BindingModels; using SushiBarContracts.SearchModels; +using SushiBarContracts.StoragesContracts; using SushiBarContracts.ViewModels; using SushiBarFileImplement.Models; diff --git a/SushiBar/SushiBarFileImplement/Models/MessageInfo.cs b/SushiBar/SushiBarFileImplement/Models/MessageInfo.cs index 0d6e81a..71e5184 100644 --- a/SushiBar/SushiBarFileImplement/Models/MessageInfo.cs +++ b/SushiBar/SushiBarFileImplement/Models/MessageInfo.cs @@ -71,5 +71,7 @@ namespace SushiBarFileImplement.Models new XAttribute("SenderName", SenderName), new XAttribute("DateDelivery", DateDelivery) ); - } + + public int Id => throw new NotImplementedException(); + } } diff --git a/SushiBar/SushiBarListImplement/Implements/BackUpInfo.cs b/SushiBar/SushiBarListImplement/Implements/BackUpInfo.cs new file mode 100644 index 0000000..f6f3014 --- /dev/null +++ b/SushiBar/SushiBarListImplement/Implements/BackUpInfo.cs @@ -0,0 +1,17 @@ +using SushiBarContracts.StoragesContracts; + +namespace SushiBarListImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + public List? GetList() where T : class, new() + { + throw new NotImplementedException(); + } + + public Type? GetTypeByModelInterface(string modelInterfaceName) + { + throw new NotImplementedException(); + } + } +} diff --git a/SushiBar/SushiBarListImplement/Implements/ImplementerStorage.cs b/SushiBar/SushiBarListImplement/Implements/ImplementerStorage.cs index 8836a46..35fa59e 100644 --- a/SushiBar/SushiBarListImplement/Implements/ImplementerStorage.cs +++ b/SushiBar/SushiBarListImplement/Implements/ImplementerStorage.cs @@ -1,6 +1,6 @@ -using IceCreamShopContracts.StoragesContracts; -using SushiBarContracts.BindingModels; +using SushiBarContracts.BindingModels; using SushiBarContracts.SearchModels; +using SushiBarContracts.StoragesContracts; using SushiBarContracts.ViewModels; using SushiBarListImplement.Models; diff --git a/SushiBar/SushiBarListImplement/ListImplementationExtension.cs b/SushiBar/SushiBarListImplement/ListImplementationExtension.cs new file mode 100644 index 0000000..aaebeb8 --- /dev/null +++ b/SushiBar/SushiBarListImplement/ListImplementationExtension.cs @@ -0,0 +1,22 @@ +using SushiBarContracts.DI; +using SushiBarContracts.StoragesContracts; +using SushiBarListImplement.Implements; + +namespace SushiBarListImplement +{ + public class ListImplementationExtension : IImplementationExtension + { + public int Priority => 0; + public void RegisterServices() + { + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + + } +} diff --git a/SushiBar/SushiBarListImplement/Models/MessageInfo.cs b/SushiBar/SushiBarListImplement/Models/MessageInfo.cs index 8a99091..7cba57c 100644 --- a/SushiBar/SushiBarListImplement/Models/MessageInfo.cs +++ b/SushiBar/SushiBarListImplement/Models/MessageInfo.cs @@ -45,5 +45,6 @@ namespace SushiBarListImplement.Models DateDelivery = DateDelivery, }; - } + public int Id => throw new NotImplementedException(); + } } -- 2.25.1 From a2737c5f00f724581e07aff82eccf260d0fa3608 Mon Sep 17 00:00:00 2001 From: bekodeg Date: Mon, 17 Jun 2024 22:01:18 +0400 Subject: [PATCH 2/4] =?UTF-8?q?=D0=B2=D1=80=D0=BE=D0=B4=D0=B5=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SushiBarContracts.dll | Bin 0 -> 30208 bytes .../SushiBarDataModels.dll | Bin 0 -> 6144 bytes .../SushiBarDatabaseImplement.dll | Bin 0 -> 76800 bytes .../SushiBarFileImplement.dll | Bin 0 -> 39424 bytes .../SushiBarListImplement.dll | Bin 0 -> 26624 bytes SushiBar/SushiBar/Forms/FormComponents.cs | 5 +++-- SushiBar/SushiBar/Forms/FormImplementers.cs | 5 +++-- SushiBar/SushiBar/Forms/FormMain.cs | 19 +++++++++--------- SushiBar/SushiBar/Forms/FormSushi.cs | 5 +++-- SushiBar/SushiBar/Forms/FormSushis.cs | 5 +++-- SushiBar/SushiBar/Program.cs | 4 ++-- SushiBar/SushiBar/SushiBar.csproj | 1 + .../ViewModels/ClientViewModel.cs | 1 + .../Implements/OrderStorage.cs | 1 - .../SushiBarFileImplement.csproj | 3 +++ .../SushiBarListImplement.csproj | 3 +++ 16 files changed, 32 insertions(+), 20 deletions(-) create mode 100644 SushiBar/ImplementationExtensions/SushiBarContracts.dll create mode 100644 SushiBar/ImplementationExtensions/SushiBarDataModels.dll create mode 100644 SushiBar/ImplementationExtensions/SushiBarDatabaseImplement.dll create mode 100644 SushiBar/ImplementationExtensions/SushiBarFileImplement.dll create mode 100644 SushiBar/ImplementationExtensions/SushiBarListImplement.dll diff --git a/SushiBar/ImplementationExtensions/SushiBarContracts.dll b/SushiBar/ImplementationExtensions/SushiBarContracts.dll new file mode 100644 index 0000000000000000000000000000000000000000..f9a25d3e896d40feb40659af0cc54326bd9c83cb GIT binary patch literal 30208 zcmeHw34B!Lx&C|3teLDcA(J4B6T%X<7-e@^-AdhZP6>G z4eKL`KwCVvE*@+NGzVK-W9@;aa3J2%8i=$8YM0grT4JGaMQ*NVq{@2PJfcOKjS5Gt zy4ftPk46NtwMwE^C{9CtdgYzUtWDc==`!#<5e8W|EE8d$r4_x zk?&F_DWV?kh*MuZL^;q_-$2xGs_(Px0FgVx?}oiF!>(u#U)m1)i538S(pFV(Sn>)G zHCDtE@n%?3w-g9Bv<>f!R~3e1tDi7kkYgD2dV;GkfNNUqMTGwPLxr@ zBA7C;LXf-P6of!1HU%LNN=!irgu$jD1i~4nAOyk?QxF1Ss3{16Fw7K$Kp1WcLLi)J z3PK%1i~~^5Ms83y{h|J&uGbXGhPTXm|+Tvqzj*EdW0bKY*P>dVU{Tf zfiT+?gg`jQ6of!H*Ax^<7dOZB2tnw1rl5!lU9MU~dZGvC(m*ZSx&-UlIe0q5ihL$L?AIXv&LvLlfC%9bYIO;w0b0b~uc*+__8kQ=Z z{8T)VutnIoSw~*h9@pJ&<*vGqaQ&{g(vpPmk9rhe&gMuMH04pW!60AA$Gc^REuNV-wC zax6I>DMb0pagrLJJ)T^sE)A))(Xa7|+IVS@r~C!58ml%s0n{U%nSu~=2gKoOLE=C~IV7XB^Ub6}kk=PXK?sCJrXa+u zGLDAOylvQxF1SnJEZ?aDgcZF?T?m9$Ozyg%6HZ4dJMa8Z3t?eJcdn z)tiD42o0tn1i}ha5CUPPDF}gZp(zM4w?15gss!h)DCepuC(o$bMKGmmLXhn$QxF2- zVp9-e4j_lC963-?4#~*;5;Lg~$fzWIULLh`pK?sDfDF}hE))a(5SZ4}CAgnh9ArK;_ zAY=n}X`EK=(l}K{oi~`VLXdc)DF}fOH3cE&VZq@U*|eBJLXfJ}6of#CnSu}qZKfc^ z++1+D+9t7X7V)aOpd#H?z7z`+>Gtvq4!Mt3Yafg zQCEx4cVXMJV9$-lFtg;P;}me=nfGO74Tt$RZ3?y*Qu-X2s2e5m#)?jF;}g3HLM(y(;=0f|miEG=n(Ri7ZZaqv&h=;|Ar?I@+ZqQ%-#HgFS5BV5x z@s$@jsY(cFpC1!ZpGq~GX?7f!<{VN76s8~w=^&xQgzf{~d9ZiiAp=j8vTuo`3N z5bHv*T$Cr4S1b<|iS=O~N9I#NEM0s>R3X-Au}W!ySc}9OP0Pi4OVW)+&vm0bzxQAf z(L`zzYmnQpLSmIEYlB#%tTwUUav71E#rij8Z569mSxG5xVcw5W&xv%kSQm>miM}e< zB(bK@*Tl*aYdYN}RzR$oloIQ&xtz-!dRVLq-!7`AD%vmQt%gO|`yUi5yTGsxOXMbr ztf3z2LSJ9)<#hAtd5Ija-GsK!qZh@BE9<*rU7@U3#9FGXABZ(rSw9wQrm}u2)>oDF z3$b#Q^{!YK6dC1xAT=w^eF`m_hkY=Q`!izArw_$?O|0|j-^JP^)?)ftteIjhC%4Aw zf?{1nMPh9g>k=9&)-7TMX`EQ^iM4^w6>F(jEmSL(KYIb@=O$XL!K7Hug2KJDnJ&_7 zr3I7)rJAmQHJU<&F9L7Qc^P4w^;dzH=p#|9r|pa%2{-hSqFm`bZbi-(?|d7lDseCx z@z;s|rv5`HzqD~aA3OgQ{4EFbUpg6$Jnxqh-xNG7@kZ(UB$Z7{^gB7{U)j0by^dc1 zYwVocM~-)ZMm~mOq%tCpNLhw5QF4eneq+TO`dK#4^IFG8qH}Fe*LK#8wr`di8m%^3 zYP8X4ui-V6SM6N48B)W&4yUe>(K;iBOE0A=U!LxzdY@09L~*|#G0%Ai>!oyi!Eo@G zr3e05Bl5BIq*wBMO!~h``sC}v>x3_r9y7-1xab4NF>?fsF&#LLpFLhiKin=g$?PQ~ zpMm3Yg+#8km7z~kcAg2B+ed@1v6tyir>4ECtxVqQAFZ!U{zn#LotJTwVCf*{D~0=n z-M)|hp7vTKxyz&ikb!v8cMfu8I1vroV z$grfI4#MQY%P8GJZn3VG(s3!Pe9vZe;tV`k`CiK^z&US(^7Rxi(_J)9`Cck+fHlRi zqy#rDP(E&-o0ckz+vlc>#6sz4Uluhg->Ya}7DbfrTdqa8`rf2`&$=}1W40>a$bvIkd~Lq-MGFl8Ssu>(p}TxQhHS&IGyiGvzDQSLu25 zw(?czL0G?0zAfmNeEO5}U5$Rpr~g#G=8_FMdV2)-?$z%0k{GO9vEI+R+~28rsYv;* z^B3Uqez@}0mUL=98m)YbOA5$GXDJ`|U?EL6eA0$O+St#RQ0cgL3+cq8-Zj zNB9QOjmlT5FVc(XHs!0p3@oC1l<#A073TH>%9oF}`{_|-@r*2{r&7ahVQ-$)K@b82* z!?2`x&!mL%anGMge6yQJlY93}+Mz5iAwV}Mi%SU5ZOY=FD5blV#XV6<4=9UUG=d&c z7Pn{wJ*})SV1|^@ca(JrW=I)**RZ5!Bk7mQ$0dxU-z$qt7)gIMedy0o1VL(j9{O_> zWhv|TMYrms$*ZiBMJZTk7?zYUhRzntSQ*ApwTk4nkD>FGk4rD7<;usUm(wN67jrGs z$5ONMb-Eg0MU^kt|A;=0+Lf==e^?(++YC!epTJed>jlSw;@9-Fb)oC0`b5J8-$TWH z`dOB>tN4Qq>zMz~dZp!CQv7#)vSkhP{9WhkDSo}+SOsgkVMv}f+f2*aRh*My9rG94 zBZ%J{rt=6)J zd8%#mEo&7l+!~V?x4q7GzGdwyUY=nc^MBEXTV5)1NpZ-w*s>lfj@p)5)~@1?4C|Ob zXX?FrHzWj&__VLhxYUVED8NoDcc(?o}r#b?82dO=xy zHf*NXl*MO+5dBzLd`1XSpJB1O5QdPeCEWpO>Dbf2=ggckaivbcm6dR$pO z`ANN%4k_!E{GG6lDeI2~Nj*m2SJr+uG<&WmWkP!Fpd=e9qZKzf%^U zb2iaOh9$Me{f*H^&vUKg^CEtVfnvsr<<-7{(EoGg|`kAeRKD4Yp+h+PtWev@F-?oLa#&8KYmptS9 z9xUVaf`fBOTb#?KmhWU%pRLofIG3%am3x25BHgkaC$Y!eN<~tFvE$rIHDZq`FMqXjD{#5 zuh5UtNaf?}mHjk9`S^NeKTR_%DdBOdQ$F7FJx&)Wi%WQ%E*8tUUU`C=l#f^MCupPc z@%74+lu$mtUU`zftbBaE@)Ye*KE7Ugif&XsZu`@8oAPnnpQd{ZOKNt2URJ)}qX!Sr z>&p5VJ$QhAuB>Uu<=gbGvgRX~Z_|g$`gL)qc98yJrYkPMJ+YI@YQbLd5IM&i{h7pG z@et)J>jy~p3>7QuEu?#f0?Jx}bk9<`vVutWEKM>jsr6x6t9)N7>eLQXtFl^)3g|Fx zQ5IhjeTS}47GDv4hptuDU|bRP&`ru3fh(dOy2G%fgd=oRtoO6{jCX`yR*`(hJ3>EH zK0c21Dq z?z?o2^6_=tOY~LcRZKSLk)+Cc!^I)#8XvgZ~Q*eMC!K?^^} z3OS|3fp7U7REK-&EAXx(7ruLS(--ls&+&+_ zKzs%GS%^OipOX+j37=W?luyImW&TcLFwldPPx%VqV?0~1TCh&=0>M>+L7)@)Jmo9G z_mfZgh9GZNg4+I)k<=wTqOtN4jV~F4d&r^QN!{9Z*KT@Dn^^dLI-=d~{}FCr-sAfdO`w8eyLPtr zKz-or1n$oF4uVNgjP^etbL#rd7Q}Ss*+h+wbY?na}>`3 zA6{6iO+`IdX-Bj*C2O=lYKw5T4{96z+ra;ZGjUM6qhve2ad|^K3j8V1O+VM}0`_Ss z;Je!Wz+Y+K0{&Ke6!-`23E-c#Zv+3T9oF(FXyfB0Y;G2Vfcf2XH*T^{b#Mv;;VtRsm~hE$|DX*8^+l5=v<` zI4h^Ld6H+HIX2fx$NBaufGa{N(=KPr*W3%-Q-7H6NtoKVP- z??~i367!zm2Z+26U#xL^HH92$)3^>cd}lIScL-)_+^YeJDOJdkWfEB?F{1>>BJ!Yf z3izFlDv7LC$niB2Un7z81nUt0OJ}3R1Ql{*vqUyaOjt02$Q)NvV!9M^Iwc-o5Y+b3P7^{*;&_3OVwqL_RN(FG*ydcuy$gn0F-RJ&E}M zF;iWnOCKua7#qHMNI4uj_hFX4!E>=IAl_1i98)GSqaMj zDlvVcpHRqNa!Q{lWX0x`K5=rN*nxLC0^%)I$T4LSQzkK0qE{cJNPJ3ow?g*z2tT5bm17dwC&~$htdmRHrI3|?@KS}WjC9F* zE=sjR)*FQf6|xeN$fPJ;3RzDH?^ejl9*OJ`<%mMo`-GoR$jZACNp7xZK(N#;^$}hx zyis^icvAQd;VI$W3OTnU!jHI_ACs6qQBEjiowB4)6tZH^lJOO#R3YnC!mAas(kMKr zkd=_6O^VW`koA=CZiTGuk;ooVjwockPxuLitdK`)sE`%Ahih0WN~wpHD&f@%S*ewn zMp1$aSx*Y@Qpm~JD*?eO!A8NP;0`aRN(n#a<$U^tlTT6!RtbiD9GMiJ66_H?CVHQ6 zD&$o5Le3{3yiqVIm=f#}q(PFuV3lC)AkM#0cv5i3AkHTxyhpH4kcuR&V3lB_U`nt@ zuuqWu9GNQNT}lry<)FdLQ-W1zFh6z%k4T^JcZCOru$~;sST&4uXcSBd_6YU~(r~GX zV3lB_U{bJ0uuqWAlt{rU!A8N9V2@y*AO$2+uu8B|Fe#W4>=C3=i4?37Y!plirUZKg z`vhr(#0yplHVUQ$dj$IgsZ1gTs|1sRDZw7WK0z8Ok%Co%je<$RlwglwpJ3G}j&Br9 z3Z?{m1p5SOwB#vRCDO6G5^NMq3HAu~2~xR43RVdw1yh1Of_;KC zRw4zf1RDi=1p5SOoWuxL2{sBQ1yh1Of_;MXaJS;ic%u6unyfi+C&`I>A1>VMaO0V~ zEZjrzPypA%qj0yQ9M%LpjaG@DK}^QeWz+B!*$mvpI2TWaorn7jRfwp@{fxP|3o;+q z%5{idLKE@V4=U(F+y(g(Qm(_DjtxlNiW@dF^{AcbPt*pyJfCrii_y?u&tm>cal57b zKq8O0IMu8IMkD@THIAIDUkbcVQe9e-1pkVk^$SYUc^WzYMdP%SrSw8cWz=D=q6FJf+t%V>!iIChz%W{jgz!+~S>*<)n1eT=j*vuBKa29Cw= z++4TS?!&;7Iov<7oacbEat_=1?_1d9*szg~ql1qVH&DkB;sW;obsQyG;5k4YzW~Vw z&j;%GE;<+73)FGvBpySDP^U`}tI=wp zj(fH%z`q34X$@jEY6R-|EzBzLYk)dkixe8|1nP7hQfPENP^TM^LZcgjI-Wrfg5Lzx z@#Ic3_$@#kt85tjHlR+oV=dI^Uw}G&9d~jyx&x@wUAXh7(Jr7)cT)@aJwTmO_~o&N z`@S*o`|#TjJc|z0X%C*H(&&DmP7hEA_&0z$eUr9;?*;1gE!;KM@Z3lz_``G=_#;3a z&vI-7-v`w3EX5VT!?=&E<2Nqbq5lS`;}Bxt;o4*1X998bX^(@K0&(p_F4e)tDo#tyl244WwX`%L0@H(JQ=WG88{so{;OYnWTMoWP@Ez^DhegP0i z9KN^45eLK(r@aHd0*E6{dk_3VU@6v_8TjSp$4G5Y^7mDlugmePE@y_YQ~Nc(yFE2( zcOh&2lW=B_>SjPZ6W{A^OU%M8^l`w{BD=D{j~#m1LMy1vNjcKF=0>i zJlcidj#7*EFmzf6@tRm` zdpy|Oo~Wp;qx#N7d$^^dZYiw`x395k8;;M1lo%*+R82I32AKhAs{zaSX0FScH7L26 z>ZHU)v2_vf#o+~tcq~opGAd*^BW8b^(RD`oDw~>E zOIxfJwNv);a9b>{4As<{STq`zK1x(92)BmgT)VoE(f*LpX2UY8Y=~)#`#_q8RNO@- zKcxqiH=_xv6r;wx1udU|(lusvK84+96buP(77 z5w7lNkJU%Ep2oc(9to|CgtvTp#D$Si`}%?T&TGLi4V1Ym^W(9Wfu8z~(}+CQeBiYX zjK82G7>%rrG|MtL(9H!k#0Kh|V|6GL$Ko;2Y4zi2d@`<|8GseJ<1`6nA*%lrXMIQ0 z2CN+etHSlS#(ki>Cf3n7$|}QJGOVcniY!###8k z$9YJoIo7&1vaTZ@#+Ho7G)ybnLO4LAI-HF$A*HezW^K5sW8J!Nd~Q6pMdksoMaUx@ z4dY{8OH()$3WuuO@i$hQI-qd%FqU!I${;esWd*I^otI@HFD`=TSXwi8plM}5MbfV7 zL?YbM6z!DpPsH(MWrScWx)fNH)co9f??Uvs#rh&*L%$`kmP+($CLF!l|crNi;xQcghBU=0}6; z%(>dI9=nPV)&p7`X^zJdv9;|L=_`^7oVju8UPn0JnpAC>RTC@JC~%PRH-2O;%a%f_ zW3Vl}#h`}Z#;~j{b*;RnQY|k#8_C%8^J+9V(i#c1u9Fp=c(pf%5;9lOkYzFGr*I%2 z={!67JJQz|{dB2AKPBU^@24BfbbrZQs{5(NMMXbJDq0^7#+%ox2BoW$DNAiKg^bE% z%IcJnks;47xw6R&Gfq!NiJ4beN|DkO&nQSKMj3`-T^p%F%n-9s6~$MOyuUO|^9ln) zkrt)Qw3$(CS~NOPA`@xVs88B9qNHc7#;3h4e43H@Cwo_!e+DxqP3CoOC>kZKHBogS z(4tr{#3xCrOW?4MtZU`9Py{~Gcrg}(PcoLl9&CE09RB2!wiM4ZQZ~KfN?Yk`S6O_l z15Fb3+YU>@{>o_&(AsbtpVV5LJL_6`8;WJqJhYdG*Q$$JTy-0}pY(Mutw{`!j9Ij_ zO)^;$OW&smhxlx7=+*IcxEImd&WmD(8VVVkiguK5c34A9TEX1~$_u+OrT93dI^(Dp zUK@#{>ajT50FQAFG~8xe7DZY&;k3r5jD=XQ!f`o)MuVN7oS|uus4=eAq z$C9{PjXPtRi+eh=v_E4JKAqcIrV^*jT{7pZRc5*x6+AY`?bKsc3DyE)g_u)xU;sMW zT6p`fJ_#&-a+)7d%)tE9D~L7U)IpFD`*~NYit46>bS~fhG-pz}1epZJ89~;RxQheoJ4|`?B;}}pC(dWo@K;XlhD}d z8Wpn6O$n(_hRJJV|I?Qda;heAa>qe(Fm66bW2Hls&1a)b8&${M6k3CSOJKuNxh)|{ z)GZ1lC*yVn&%yRcYjZoUQgChDPV+8}wDUHvAs)otXe{tJa)Y6H#*J!OB^2eF@se&$ zCdszHg1OeeK~jxn!8qs38Ps&d)0}UFsD5I`{`6fCab%ddSP#dIAay%LB23PS)3-19 zZiu)~k+^Amznt5JWkG*RS|?0b@Rk5oNttfo-Row9-&jD#j(xd zC1L#Y5u6R*N|8K-u(Bk!g)XH!EV$_fTtfN&ii8R=uRW-`wNu^4->M&;s3#Z&rsoT)MAKcY2V1xMufg!|`B( z?n^$8|BHOdotiIsqs^u1Sp^y>t62rQVn~WqZi0C;9BzaRCtvc7GhMm9wqbcleutKq z=S$u_%$K~%jknH4`P#C`HY_hM&zpSHizEnp59!p0&7erh6bFA zyF1SrAkGyXfug&glk zaJTLVpf5`BDleJ72Y>Iv)m7VyL0B)Hy>$4 zpW}Nz{_+w}gaFvK^S6a|{9cjl_~|0q`I|-!-EDIYbLdX|@7A5UPG^xfh(UFF!+5v2 z#Po)<(Oh%l)U z40E7KJd<)+%5|ZaxfX61LeR_Ju*|72(-xsEZX?Va&QfvSa1M`;S9_9~@HROMcS~ z8ES?M^zGXa7e(HJYa^5G($%E8aV_X95T|Ee8vo^G(#$V zAr8R@hgABK$2bHX>us@mtOYZ}w;uCR%a;ByjxI-~u4%fX5#J9&B)`r~BF)4gt zn(i?^zG-|sWPBVjKCHS-K(5k<<-TMOd`Qk8NPa8}liZiQ)|b4=6Tkz#x*O9(=i$fn zCvc87KKPihm1BOCQy$*Au5x2~*vm017+Tzhg7F7Qk2o6{18hdM;2=Po%W*g%aq|0a zeng62!*MuJgYLgD9&E#XN$biD_kVCtQ9~U5A_rdQ;t7n3CG#3;V)1ZwTiXP6d*|HE z(<{(f4S9pCTX}p36Bl57Pt?sR0*LVA8IOS*E<7PZ4%znOA2>omlkoSV@gEjzjVi<# zKdo|7)0C#B>CJ0rR5neS9Gn!M-rUq2o;f8vY3j7fP}9t&(A3G{a2S7I8jq$3qPnQH z@yf<8&B3^hc;th2Y~mJX}$OM?mM3B zJ=}Zf_zfEW?HrYUDxOy9y}Nf`@6)~efzNUdoYmppXL`Q_eD-u1;?GsMdmmsA3R;%V zYyuvY>D|-&_1=2|y$6nWNd|{FPt@p1l>F7qT8+fA(A&**?R_eMs_pB2toQKoE013< zLAK#Nwt_C+UQ*op4AW!c-$m~0k(|)VS8zeVgm_ek-uOU4O z4WM?YO9W9h4+5E4`%k+U_9^FdmmbK5b3X!0#r|n=WfJ5 z)BEJ{qK7TfB^?{#AJIy8&;0Y*@Xx9sEep7`&(5h<8jm)CZT5 z`C49ITfgYJzy9vNoewU)vF;1|r!2hwmz+nLQPb^uzK>e>7?rMVXmqN+FDic z>J?x5+M!?kZp>SgC+t9b%-2241E$sg)BHEs40R1w&e~`c_xxI^CDDv!G+e>=8u|6f zDCBW!ml(mr^h9jJ5MLcA|Z;b~=FLe(o|n+moP&tt9u&cpMZ z_1IT0#gpV~@VNv}mK%R9@mc%tPa5kOk0QT}PxG%l+M)2=$$Ztq(2#48;>af=yZbuq z;@4tV&##euM#fX4aYXRmK8jCs&o2SA&wdP<^7Ezbh>9R;-Dz@4NlYc$ZTvTtnz#?B z7SI1`cvdSW*9lxkCt4JgD-6!R9#3v2@OK9zcrupj$dP>I!S!jzC$2K^^eg9K*1i^3 zAqn`nE^Ynl`g!uI6JA8 T&B%S{{*&_i|JnRs)dT+pet2@i literal 0 HcmV?d00001 diff --git a/SushiBar/ImplementationExtensions/SushiBarDataModels.dll b/SushiBar/ImplementationExtensions/SushiBarDataModels.dll new file mode 100644 index 0000000000000000000000000000000000000000..0c1d40a4c091e9ec93396ee1777d8166894dbf97 GIT binary patch literal 6144 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 literal 0 HcmV?d00001 diff --git a/SushiBar/ImplementationExtensions/SushiBarDatabaseImplement.dll b/SushiBar/ImplementationExtensions/SushiBarDatabaseImplement.dll new file mode 100644 index 0000000000000000000000000000000000000000..66b4ea09829ce4b4cd491e11ee048b6e7619c111 GIT binary patch literal 76800 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 literal 0 HcmV?d00001 diff --git a/SushiBar/ImplementationExtensions/SushiBarListImplement.dll b/SushiBar/ImplementationExtensions/SushiBarListImplement.dll new file mode 100644 index 0000000000000000000000000000000000000000..b8a79d1905236177cb0b4ed3f22fcd835222b3af GIT binary patch literal 26624 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 A2LJ#7 literal 0 HcmV?d00001 diff --git a/SushiBar/SushiBar/Forms/FormComponents.cs b/SushiBar/SushiBar/Forms/FormComponents.cs index 749aba9..7d78183 100644 --- a/SushiBar/SushiBar/Forms/FormComponents.cs +++ b/SushiBar/SushiBar/Forms/FormComponents.cs @@ -2,6 +2,7 @@ using SushiBarContracts.BusinessLogicsContracts; using Microsoft.Extensions.Logging; using SushiBar.Extensions; +using SushiBarContracts.DI; namespace SushiBar.Forms { @@ -34,7 +35,7 @@ namespace SushiBar.Forms } private void ButtonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormComponent)); + var service = DependencyManager.Instance.Resolve(); if (service is FormComponent form) { if (form.ShowDialog() == DialogResult.OK) @@ -47,7 +48,7 @@ namespace SushiBar.Forms { if (dataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormComponent)); + var service = DependencyManager.Instance.Resolve(); if (service is FormComponent form) { form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); diff --git a/SushiBar/SushiBar/Forms/FormImplementers.cs b/SushiBar/SushiBar/Forms/FormImplementers.cs index 8b75f8b..204b804 100644 --- a/SushiBar/SushiBar/Forms/FormImplementers.cs +++ b/SushiBar/SushiBar/Forms/FormImplementers.cs @@ -2,6 +2,7 @@ using SushiBar.Extensions; using SushiBarContracts.BindingModels; using SushiBarContracts.BusinessLogicsContracts; +using SushiBarContracts.DI; using System.Windows.Forms; namespace SushiBar.Forms @@ -37,7 +38,7 @@ namespace SushiBar.Forms } private void CreateButton_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); + var service = DependencyManager.Instance.Resolve(); if (service is FormImplementer form) { if (form.ShowDialog() == DialogResult.OK) @@ -51,7 +52,7 @@ namespace SushiBar.Forms { if (dataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); + var service = DependencyManager.Instance.Resolve(); if (service is FormImplementer form) { form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); diff --git a/SushiBar/SushiBar/Forms/FormMain.cs b/SushiBar/SushiBar/Forms/FormMain.cs index 4686ddc..3988bab 100644 --- a/SushiBar/SushiBar/Forms/FormMain.cs +++ b/SushiBar/SushiBar/Forms/FormMain.cs @@ -4,6 +4,7 @@ using SushiBarBusinessLogic.BusinessLogic; using SushiBarBusinessLogic.BusinessLogics; using SushiBarContracts.BindingModels; using SushiBarContracts.BusinessLogicsContracts; +using SushiBarContracts.DI; namespace SushiBar.Forms { @@ -50,7 +51,7 @@ namespace SushiBar.Forms } private void ComponentsToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormComponents)); + var service = DependencyManager.Instance.Resolve(); if (service is FormComponents form) { form.ShowDialog(); @@ -58,7 +59,7 @@ namespace SushiBar.Forms } private void SushiToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormSushis)); + var service = DependencyManager.Instance.Resolve(); if (service is FormSushis form) { form.ShowDialog(); @@ -66,7 +67,7 @@ namespace SushiBar.Forms } private void ButtonCreateOrder_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder)); + var service = DependencyManager.Instance.Resolve(); if (service is FormCreateOrder form) { form.ShowDialog(); @@ -160,7 +161,7 @@ namespace SushiBar.Forms private void componentsReportПоСушиToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormReportSushiComponents)); + var service = DependencyManager.Instance.Resolve(); if (service is FormReportSushiComponents form) { form.ShowDialog(); @@ -169,7 +170,7 @@ namespace SushiBar.Forms private void orderReportToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders)); + var service = DependencyManager.Instance.Resolve(); if (service is FormReportOrders form) { form.ShowDialog(); @@ -178,7 +179,7 @@ namespace SushiBar.Forms private void clientsToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormClients)); + var service = DependencyManager.Instance.Resolve(); if (service is FormClients form) { form.ShowDialog(); @@ -187,7 +188,7 @@ namespace SushiBar.Forms private void implementersToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormImplementers)); + var service = DependencyManager.Instance.Resolve(); if (service is FormImplementers form) { form.ShowDialog(); @@ -196,13 +197,13 @@ namespace SushiBar.Forms private void startWorksToolStripMenuItem_Click(object sender, EventArgs e) { - _workProcess.DoWork((Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!, _orderLogic); + _workProcess.DoWork((DependencyManager.Instance.Resolve() as IImplementerLogic)!, _orderLogic); MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void MailToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormMailView)); + var service = DependencyManager.Instance.Resolve(); if (service is FormMailView form) { form.ShowDialog(); diff --git a/SushiBar/SushiBar/Forms/FormSushi.cs b/SushiBar/SushiBar/Forms/FormSushi.cs index 9df5936..2c33ae7 100644 --- a/SushiBar/SushiBar/Forms/FormSushi.cs +++ b/SushiBar/SushiBar/Forms/FormSushi.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.Logging; using SushiBarContracts.BindingModels; using SushiBarContracts.BusinessLogicsContracts; +using SushiBarContracts.DI; using SushiBarContracts.SearchModels; using SushiBarDataModels.Models; @@ -69,7 +70,7 @@ namespace SushiBar.Forms } private void ButtonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormSushiComponent)); + var service = DependencyManager.Instance.Resolve(); if (service is FormSushiComponent form) { @@ -96,7 +97,7 @@ namespace SushiBar.Forms { if (dataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormSushiComponent)); + var service = DependencyManager.Instance.Resolve(); if (service is FormSushiComponent form) { int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value); diff --git a/SushiBar/SushiBar/Forms/FormSushis.cs b/SushiBar/SushiBar/Forms/FormSushis.cs index 8b92ef8..b821910 100644 --- a/SushiBar/SushiBar/Forms/FormSushis.cs +++ b/SushiBar/SushiBar/Forms/FormSushis.cs @@ -2,6 +2,7 @@ using SushiBar.Extensions; using SushiBarContracts.BindingModels; using SushiBarContracts.BusinessLogicsContracts; +using SushiBarContracts.DI; namespace SushiBar.Forms { @@ -34,7 +35,7 @@ namespace SushiBar.Forms } private void ButtonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormSushi)); + var service = DependencyManager.Instance.Resolve(); if (service is FormSushi form) { if (form.ShowDialog() == DialogResult.OK) @@ -47,7 +48,7 @@ namespace SushiBar.Forms { if (dataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormSushi)); + var service = DependencyManager.Instance.Resolve(); if (service is FormSushi form) { form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); diff --git a/SushiBar/SushiBar/Program.cs b/SushiBar/SushiBar/Program.cs index edae342..1f3996b 100644 --- a/SushiBar/SushiBar/Program.cs +++ b/SushiBar/SushiBar/Program.cs @@ -64,12 +64,12 @@ namespace SushiBar }); DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(true); DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(true); DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); diff --git a/SushiBar/SushiBar/SushiBar.csproj b/SushiBar/SushiBar/SushiBar.csproj index 62d3b8d..954cb20 100644 --- a/SushiBar/SushiBar/SushiBar.csproj +++ b/SushiBar/SushiBar/SushiBar.csproj @@ -23,6 +23,7 @@ + diff --git a/SushiBar/SushiBarContracts/ViewModels/ClientViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/ClientViewModel.cs index da48bb6..95d5a2b 100644 --- a/SushiBar/SushiBarContracts/ViewModels/ClientViewModel.cs +++ b/SushiBar/SushiBarContracts/ViewModels/ClientViewModel.cs @@ -7,6 +7,7 @@ namespace SushiBarContracts.ViewModels { [Column(visible: false)] public int Id { get; set; } + [Column(visible: false)] public string ClientFIO { get; set; } = string.Empty; [Column(title: "Email клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string Email { get; set; } = string.Empty; diff --git a/SushiBar/SushiBarDatabaseImplement/Implements/OrderStorage.cs b/SushiBar/SushiBarDatabaseImplement/Implements/OrderStorage.cs index 4cf9ba3..28999ab 100644 --- a/SushiBar/SushiBarDatabaseImplement/Implements/OrderStorage.cs +++ b/SushiBar/SushiBarDatabaseImplement/Implements/OrderStorage.cs @@ -4,7 +4,6 @@ using SushiBarContracts.SearchModels; using SushiBarContracts.StoragesContracts; using SushiBarContracts.ViewModels; using SushiBarDatabaseImplement.Models; -using System.Collections.Generic; namespace SushiBarDatabaseImplement.Implements { diff --git a/SushiBar/SushiBarFileImplement/SushiBarFileImplement.csproj b/SushiBar/SushiBarFileImplement/SushiBarFileImplement.csproj index 00e2c96..9f96834 100644 --- a/SushiBar/SushiBarFileImplement/SushiBarFileImplement.csproj +++ b/SushiBar/SushiBarFileImplement/SushiBarFileImplement.csproj @@ -11,4 +11,7 @@ + + + diff --git a/SushiBar/SushiBarListImplement/SushiBarListImplement.csproj b/SushiBar/SushiBarListImplement/SushiBarListImplement.csproj index 00e2c96..9f96834 100644 --- a/SushiBar/SushiBarListImplement/SushiBarListImplement.csproj +++ b/SushiBar/SushiBarListImplement/SushiBarListImplement.csproj @@ -11,4 +11,7 @@ + + + -- 2.25.1 From 2dbd0a9ac8a2d24187bb84802fbbadb1400bac34 Mon Sep 17 00:00:00 2001 From: bekodeg Date: Tue, 18 Jun 2024 21:09:07 +0400 Subject: [PATCH 3/4] =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D1=85=20=D0=B1=D0=B5=D0=BA=D0=B0?= =?UTF-8?q?=D0=BF=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SushiBarContracts.dll | Bin 30208 -> 30208 bytes .../SushiBarDataModels.dll | Bin 6144 -> 6144 bytes .../SushiBarDatabaseImplement.dll | Bin 76800 -> 77312 bytes .../SushiBarFileImplement.dll | Bin 39424 -> 39424 bytes .../SushiBarListImplement.dll | Bin 26624 -> 26624 bytes .../SushiBar/ImplementationExtensions.dll | Bin 6144 -> 0 bytes .../SushiBar/ImplementationExtensionst.dll | Bin 76800 -> 0 bytes SushiBar/SushiBar/SushiBar.csproj | 3 ++ .../Models/Client.cs | 22 +++++++----- .../Models/Component.cs | 17 +++++---- .../Models/Implementer.cs | 7 ++++ .../Models/MessageInfo.cs | 27 +++++++------- .../SushiBarDatabaseImplement/Models/Order.cs | 34 +++++++++++------- .../SushiBarDatabaseImplement/Models/Sushi.cs | 18 ++++++---- .../Models/SushiComponent.cs | 19 ++++++---- .../SushiBarFileImplement/Models/Client.cs | 16 ++++++--- .../SushiBarFileImplement/Models/Component.cs | 13 ++++--- .../Models/Implementer.cs | 19 ++++++---- .../Models/MessageInfo.cs | 24 ++++++++----- .../SushiBarFileImplement/Models/Order.cs | 31 ++++++++++------ .../SushiBarFileImplement/Models/Sushi.cs | 13 ++++--- 21 files changed, 175 insertions(+), 88 deletions(-) delete mode 100644 SushiBar/SushiBar/ImplementationExtensions.dll delete mode 100644 SushiBar/SushiBar/ImplementationExtensionst.dll diff --git a/SushiBar/ImplementationExtensions/SushiBarContracts.dll b/SushiBar/ImplementationExtensions/SushiBarContracts.dll index f9a25d3e896d40feb40659af0cc54326bd9c83cb..194d57b53b2ba45d950c67b176aa5821983f7404 100644 GIT binary patch delta 238 zcmZp8!`SeKaY6@6uIklm8+-Po2txqlv22dXzryUF$Y8`^&R`70 z$qc3pX$%HHmL)+87C!~ zC8wDiBpDke8m5{hCncv^7^fPVm>Q%cStO;H7^SABZvK!}z|6w>z4*Z7l)L}|pF=<1 zE$UqD+w1AQ$=IX&`Q#&c6$((nx4ck6plSz!bMmfW`9!#0|rBe zBnD$3PGT@)NM=Z5Fb9f(M2r{`fpV!}(IlWuDuV@3G!-aj!T{2j0#s!I#3?|&5l|cm KH`f<8G64XzAW?7t diff --git a/SushiBar/ImplementationExtensions/SushiBarDataModels.dll b/SushiBar/ImplementationExtensions/SushiBarDataModels.dll index 0c1d40a4c091e9ec93396ee1777d8166894dbf97..502b2a16917d98de375221fbbada9faa2c2d2bfa 100644 GIT binary patch delta 235 zcmZoLXfT-2!P4WK(Xg@S39o>JfyCQawQLR>_780a|2%?qeh~Uxv_b&X_|pS znz@mQsfA&xfq7zDnuSqna&nrHnL&y{TB5O;fyHD=fpnG|U-sUg+#(Pl;CNJhmP;?M zd$;S|SZmp?`pHiOsuZAt?A%a6km}%yY10#*+i3FloHO2BCwPq6Kas(R!JNSuh?5yi z8PXUGfG`cnGh#3S@+}w)8B&2F<_w8I(KI062*^(c!ZaYu3@DQVR-Xto0mQS|JXtiC F2>{>LM+X1^ delta 235 zcmZoLXfT-2!NM|Eck#xaC%gh`Eq1PKEPtI>a~?=}a(Ioz<_5k(Mh#N~!zAORB(vl+ zbAu#fqeR10v*e`YR14!&LlaYjlq8F!6ceM=)YQq60_iM?;daL+w+I9XEcy3Zrpfn~ z%hH9XR9zljc{cfpK$QYiu;nRK5TtsQ=jk|>+VU$g=Et%(*9jhD_BUlPU@&AzVlW2c zBnC5vWQH^bbD$VV#E2mgD3=NrO#;fKGFSjbQ-NY83?O|eKvfn%oC4$<0mXrE^JLLn FCIFl8Oh5nt diff --git a/SushiBar/ImplementationExtensions/SushiBarDatabaseImplement.dll b/SushiBar/ImplementationExtensions/SushiBarDatabaseImplement.dll index 66b4ea09829ce4b4cd491e11ee048b6e7619c111..cd45e626a18c906ddc6da40cc98c3e835a9ae836 100644 GIT binary patch literal 77312 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 literal 76800 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 Jmrsvm0sx*TOkDr~ delta 237 zcmZqJ!ql*ZX+j6fT&Ed3H}?262?$MJaiGRP#-ab&T-zfYPmXVX(In2NVQOHQWSo>_ zmYim8kYsF>Xqal2oRpkuVVr7cVrr0*WRa9&Vw9SiI$3?gUY?<5ce*{qbLr+MlS)|pO&JUr3>lIb zjDa|b!Hgl9A&tQtC7F2$kW~NHj7xHcvK9 zGcZUqH!?A`FibTtPfSa*FiK5MPBStyNHIuDG&VD^m~0Z?!Lmgwb@}82@c{zXU+a%= zl-uS$YsOuj-Nk19lNAyg6rh6TFhQVdbxxVpCj-_ zmYim8kYsF>Xqal2oRpkuVVr7cVrr0*WRa9&Vw9SiI@u(?gXLn#x2Ka2#0Lm4Rop%y zZkg{qW#hEV-s|~YCo3d0C_n{`L!g2{)v4cX4@LQ$UCjJ%9l!VH0|_%&{7o4Q7z`Pb z7>t29iNTB^nIVnA94H17F=9vr%B6xulYla*3>HAqRG^p%14v&AP?ZG`rvUjzKye`4 JygW6M2>|paP51x+ diff --git a/SushiBar/SushiBar/ImplementationExtensions.dll b/SushiBar/SushiBar/ImplementationExtensions.dll deleted file mode 100644 index a5c8c73e004546c4996cd7ee607ea251a7f547db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6144 zcmeHLdyHIV6+ibe+vzU5blWa1ebAw$vbJ=XWgm2rmVL}FjC3FEY_}BFw0CCiPH(w$ z@8sS)ZP#EeEn*DHQ;i6Mm_Q5~($LlxNm0>YHKMbK1|NSwgaqOP6Qc%WsK4{wJ2Q8> z6_Ni;{C4l}p4WH2bI$je`DWzidr2W870=nTM5plP)+g}2;Skg~T0SUOg)b9%hFx$&~V_4p9c7D=JMs>hzF zjP@$6jx|XMq6LsN_|liI#5;zk4-ac%K-rI*1suO#l_aiWQHb??Q;h@v5V6#NY#KJMuUJn*kv2!Kw+7Q_usv>4Iu zxZ^rma3Z!o5S-{jJfYTy=;MxV+A!o;X*VABbrGIW>mwQnv4VV>>x#y)$rPc_$B5o+ zCX!hA0orQ09laZAT_zypC7)}9yR{c74}Stq)peUI3S|zDnALR%GX2p3DTsjc+1C|M z#5)t69lab-giPSISQl#!5`7)-LAfd4Z7ZRakx+_8h^77+{Ndqy==f^p?_HGO)bL#?bzTlbyu1RozWCyUkP;h4hu1#>S1>8!K5YA`R z4eC}{#t`Fgluf|r<$h{t7^fsn9{QVlJ+LXlxK!Y)Lh^gyc#LzpbLj)33OlRZR^;MT zxk+$`s~qe6_CoW1nhJ3P*e*5QHAbTF=jrU|7_occKj;Y~TGDUb_??{W109A>C_r zasGh9UiPX-s+JA382e>0&BxP-r%BKcV6U_i&*jCyM*1*t0d)xM71%E@C2*_2odPvr z1I+;2$PjcCtMf9PyNlr^N=qpYTtS_{7;S`R8TQv&9G^Er(?n;0i)a?Ooc;`4L+=3B zW0%CyXAJlex*0e~dEkvgo(2xmEwCFz4sjY1-m*fH6_PAv=^;rM@*_fiM97ao{=D?K zkbj?6(_7N-1S%5KYXoKm8Vbi5LERd#ALn5YMuGDYaU&|#ggOx&r~84!^hMxih4EQI z%M#PyQ@;%C6cS(llCXCb?sZtmpQ1-V|3%P0SDyg=pvrxJEbv}o|CGRoh2=?=`%WwD z`EKTu3W{i*OFhnB7Z(ZI~|^NA+6Z61p6?6tga)&wAi8+5lWm zR{~dHHOc7T3A}{(j9W!llX?ip9-^%^KJoBzQfp%7Gp@Pre%tZA zjKi}o-0rZQTZax5F_dlvBH?sYEBFR!-OA}sl^wJTMcYF7LXy-xeZqickifQ*-X@Hohd=WZVXd*M3yiKsj5cXIngRdNj+1_=ehVbS!FtEl783K z3mJ1}!tla|6PkmVhVdm;M-gtFYd?%=CUwWfB+gZ)tZCaRXkv!Ve`_^pThm6q?2dgIQ)fAQF;FrHT))bW<>{+vBYKoxzLhczE!!*2*c3=jD zA2zl8IkOcHGQyWBN{PwG`qfQJRn{7^4Np$VNE&zTU5Eg)7-x>TSc3&5SWmNe6tHnO5@)yVbfV53kx>)B34o;0+)WxJk{ zbt|HvCfHm4ic9OxJ}iDWSWifrgK()*Z7z^YBSzM-U3=O?zntE0Y37V;z$fpw`q=#x z&Z9YxD9%|`BMa?zs?MRmP~D&o7>(l=8!nJ}npbj3OhnqJxk~9$W-m^T>c*>1j*tx6 z*p~t2`ow^po2gnSb<^0VJ2O;%p#0qI;qr6kr>T7Z>|N#K<)h`(RQ^i&MEO+tWclgx ziP_tsKf%IBXAePmdiI{#!@lu%(C=9m!0IsU?(xse&A%=^a@*^7jU9RB@AqYXdG}&c zW0DkAVkAXCw6-$aBFNt8(d%}7vh^2@*QjUF#Hp+Dd93nxY*hg$4J#vZ1OB5*Lu(=; z4r_K0VFxQC@XDTB@HEehQCn-j6jfu?I>eB`jf^F&LoFZ{rsQZ_>xjH?MO0}=uXglm zN3ZsvS3CCtB%;0qy+DL|MJ0T^al3@SYfs1*?Qpc>sBH}$$m&HtDkkQJ zCW)5DM~5Z`ZAb4f7Ox1l-KKp#@dO;SEUq3;Ny9Cg+6*7DQSK3g#S)1Y&Ru@Ecu5oy zMBw|+cTab2?C8vD8xskwTkq<~^iFs5 z^kg^U>LAe_xAKiIiO?&@H$@C0-enBulW$nSI1deJp+p_pSn_+g4cawx~1^l@y zY5?j-88J6OanCLX_jItrZV}#>W)^H)>_C^2)Ct^>DPC@Sz7(h znJth1>BeupwIh9k#~Qq5YP*XQeQLj9{@s^w=8pAo>wA?j!TIS)vNva!aABG zXFLAw;HEyJ13a}sJD_xdnxr)C0uIqOP$~S8q0{Qy@A|V`SrPvGy1)-_ zdtMvimINcgt40p|82CLvhfj;9$rfgp@f8%m);O@RaFaFh_F!j&^V?DN6*!d;lLspU z^89%`9TzqUs{D0P1~h-`UWC4b@K>Os7-I$*Y2b9>K20Tzx(9v-Aa!t`jl|=R7@t44!E9VJY3o)9Z zOy1A9ab#rTk6Sxt3WouF<%K7%P!abt&M1$1@b6tQJd=WE zFXQmbbuOWnUML&FY`?#GIgDF_MD>2ot!Ay3>rvAl#N0)_;;rF^F^wmKTL(Ygg73ur zvjaDfEG##Q6~%Tsda+e6dUT+75A-;B(Kd>??8p4MuqwdDL?vUWUHz=q;^4Xc04?VK T#`SV#!+ii3|L^j@TY-N8Q@&4@ diff --git a/SushiBar/SushiBar/ImplementationExtensionst.dll b/SushiBar/SushiBar/ImplementationExtensionst.dll deleted file mode 100644 index d9be8058ff350cd7b32251f49d4336d6da16b03c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76800 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 + + Always + PreserveNewest diff --git a/SushiBar/SushiBarDatabaseImplement/Models/Client.cs b/SushiBar/SushiBarDatabaseImplement/Models/Client.cs index 936bd1a..5b3a0c9 100644 --- a/SushiBar/SushiBarDatabaseImplement/Models/Client.cs +++ b/SushiBar/SushiBarDatabaseImplement/Models/Client.cs @@ -3,18 +3,24 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { - public class Client : IClientModel + [DataContract] + public class Client : IClientModel { - public int Id { get; private set; } - [Required] - public string ClientFIO { get; private set; } = string.Empty; - [Required] - public string Email { get; private set; } = string.Empty; - [Required] - public string Password { get; private set; } = string.Empty; + [DataMember] + public int Id { get; private set; } + [DataMember] + [Required] + public string ClientFIO { get; private set; } = string.Empty; + [DataMember] + [Required] + public string Email { get; private set; } = string.Empty; + [DataMember] + [Required] + public string Password { get; private set; } = string.Empty; [ForeignKey("ClientId")] public List Messages = new(); diff --git a/SushiBar/SushiBarDatabaseImplement/Models/Component.cs b/SushiBar/SushiBarDatabaseImplement/Models/Component.cs index df26753..085903e 100644 --- a/SushiBar/SushiBarDatabaseImplement/Models/Component.cs +++ b/SushiBar/SushiBarDatabaseImplement/Models/Component.cs @@ -3,16 +3,21 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { - public class Component : IComponentModel + [DataContract] + public class Component : IComponentModel { - public int Id { get; private set; } - [Required] - public string ComponentName { get; private set; } = string.Empty; - [Required] - public double Cost { get; set; } + [DataMember] + public int Id { get; private set; } + [DataMember] + [Required] + public string ComponentName { get; private set; } = string.Empty; + [DataMember] + [Required] + public double Cost { get; set; } [ForeignKey("ComponentId")] public virtual List SushiComponents { get; set; } = new(); public static Component? Create(ComponentBindingModel model) diff --git a/SushiBar/SushiBarDatabaseImplement/Models/Implementer.cs b/SushiBar/SushiBarDatabaseImplement/Models/Implementer.cs index 950256f..6d634a4 100644 --- a/SushiBar/SushiBarDatabaseImplement/Models/Implementer.cs +++ b/SushiBar/SushiBarDatabaseImplement/Models/Implementer.cs @@ -3,18 +3,25 @@ using System.ComponentModel.DataAnnotations; using SushiBarDataModels.Models; using SushiBarContracts.BindingModels; using SushiBarContracts.ViewModels; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class Implementer : IImplementerModel { + [DataMember] public int Id { get; private set; } + [DataMember] [Required] public string ImplementerFIO { get; private set; } = string.Empty; + [DataMember] [Required] public string Password { get; set; } = string.Empty; + [DataMember] [Required] public int Qualification { get; set; } = 0; + [DataMember] [Required] public int WorkExperience { get; set; } = 0; [ForeignKey("ImplementerId")] diff --git a/SushiBar/SushiBarDatabaseImplement/Models/MessageInfo.cs b/SushiBar/SushiBarDatabaseImplement/Models/MessageInfo.cs index db851df..bce621d 100644 --- a/SushiBar/SushiBarDatabaseImplement/Models/MessageInfo.cs +++ b/SushiBar/SushiBarDatabaseImplement/Models/MessageInfo.cs @@ -2,23 +2,26 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { - public class MessageInfo : IMessageInfoModel + [DataContract] + public class MessageInfo : IMessageInfoModel { - [Key] + [DataMember] + [Key] public string MessageId { get; private set; } = string.Empty; - - public int? ClientId { get; private set; } - - public string SenderName { get; private set; } = string.Empty; - - public DateTime DateDelivery { get; private set; } = DateTime.Now; - - public string Subject { get; private set; } = string.Empty; - - public string Body { 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 Client? Client; public static MessageInfo? Create(SushiBarDatabase context, MessageInfoBindingModel model) { diff --git a/SushiBar/SushiBarDatabaseImplement/Models/Order.cs b/SushiBar/SushiBarDatabaseImplement/Models/Order.cs index 3000751..5240952 100644 --- a/SushiBar/SushiBarDatabaseImplement/Models/Order.cs +++ b/SushiBar/SushiBarDatabaseImplement/Models/Order.cs @@ -3,29 +3,38 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels.Enums; using SushiBarDataModels.Models; using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { - public class Order : IOrderModel + [DataContract] + public class Order : IOrderModel { - public int Id { get; private set; } - [Required] + [DataMember] + public int Id { get; private set; } + [DataMember] + [Required] public int Count { get; set; } - [Required] + [DataMember] + [Required] public double Sum { get; set; } - [Required] + [DataMember] + [Required] public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; - [Required] + [DataMember] + [Required] public DateTime DateCreate { get; set; } = DateTime.Now; - public DateTime? DateImplement { get; set; } - [Required] + [DataMember] + public DateTime? DateImplement { get; set; } + [DataMember] + [Required] public int SushiId { get; private set; } public virtual Sushi Sushi { get; set; } - - public int ClientId { get; private set; } + [DataMember] + public int ClientId { get; private set; } public virtual Client Client { get; private set; } - - public int? ImplementerId { get; private set; } + [DataMember] + public int? ImplementerId { get; private set; } public virtual Implementer? Implementer { get; set; } public static Order Create(SushiBarDatabase context, OrderBindingModel model) @@ -46,6 +55,7 @@ namespace SushiBarDatabaseImplement.Models Sushi = context.Sushis.First(x => x.Id == model.SushiId), ClientId = model.ClientId, Client = context.Clients.First(x => x.Id == model.ClientId), + ImplementerId = model.ImplementerId, Implementer = model.ImplementerId == null ? null : context.Implementers.First(i => i.Id == model.ImplementerId) }; } diff --git a/SushiBar/SushiBarDatabaseImplement/Models/Sushi.cs b/SushiBar/SushiBarDatabaseImplement/Models/Sushi.cs index ea0c130..1429073 100644 --- a/SushiBar/SushiBarDatabaseImplement/Models/Sushi.cs +++ b/SushiBar/SushiBarDatabaseImplement/Models/Sushi.cs @@ -3,18 +3,24 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { - public class Sushi : ISushiModel + [DataContract] + public class Sushi : ISushiModel { - public int Id { get; set; } - [Required] + [DataMember] + public int Id { get; set; } + [DataMember] + [Required] public string SushiName { get; set; } = string.Empty; - [Required] + [DataMember] + [Required] public double Price { get; set; } - private Dictionary? _sushiComponents = null; - [NotMapped] + + private Dictionary? _sushiComponents = null; + [NotMapped] public Dictionary SushiComponents { get diff --git a/SushiBar/SushiBarDatabaseImplement/Models/SushiComponent.cs b/SushiBar/SushiBarDatabaseImplement/Models/SushiComponent.cs index e47fdfb..55f06d3 100644 --- a/SushiBar/SushiBarDatabaseImplement/Models/SushiComponent.cs +++ b/SushiBar/SushiBarDatabaseImplement/Models/SushiComponent.cs @@ -1,18 +1,23 @@ using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { - public class SushiComponent + [DataContract] + public class SushiComponent { - public int Id { get; set; } - [Required] + [DataMember] + public int Id { get; set; } + [DataMember] + [Required] public int SushiId { get; set; } - [Required] + [DataMember] + [Required] public int ComponentId { get; set; } - [Required] + [DataMember] + [Required] public int Count { get; set; } - public virtual Component Component { get; set; } = new(); + public virtual Component Component { get; set; } = new(); public virtual Sushi Sushi { get; set; } = new(); - } } diff --git a/SushiBar/SushiBarFileImplement/Models/Client.cs b/SushiBar/SushiBarFileImplement/Models/Client.cs index 26bd8e5..87e0228 100644 --- a/SushiBar/SushiBarFileImplement/Models/Client.cs +++ b/SushiBar/SushiBarFileImplement/Models/Client.cs @@ -1,15 +1,21 @@ using SushiBarContracts.BindingModels; using SushiBarContracts.ViewModels; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { - public class Client + [DataContract] + public class Client { - public int Id { get; private set; } - public string ClientFIO { get; private set; } = string.Empty; - public string Email { get; set; } = string.Empty; - public string Password { get; set; } = string.Empty; + [DataMember] + public int Id { get; private set; } + [DataMember] + public string ClientFIO { get; private set; } = string.Empty; + [DataMember] + public string Email { get; set; } = string.Empty; + [DataMember] + public string Password { get; set; } = string.Empty; public static Client? Create(ClientBindingModel model) { if (model == null) diff --git a/SushiBar/SushiBarFileImplement/Models/Component.cs b/SushiBar/SushiBarFileImplement/Models/Component.cs index 8c4ce84..d4d0b76 100644 --- a/SushiBar/SushiBarFileImplement/Models/Component.cs +++ b/SushiBar/SushiBarFileImplement/Models/Component.cs @@ -1,15 +1,20 @@ using SushiBarContracts.BindingModels; using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { - public class Component : IComponentModel + [DataContract] + public class Component : IComponentModel { - public int Id { get; private set; } - public string ComponentName { get; private set; } = string.Empty; - public double Cost { get; set; } + [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) { if (model == null) diff --git a/SushiBar/SushiBarFileImplement/Models/Implementer.cs b/SushiBar/SushiBarFileImplement/Models/Implementer.cs index 7585909..9e05cd0 100644 --- a/SushiBar/SushiBarFileImplement/Models/Implementer.cs +++ b/SushiBar/SushiBarFileImplement/Models/Implementer.cs @@ -1,17 +1,24 @@ using SushiBarContracts.BindingModels; using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { - internal class Implementer : IImplementerModel + [DataContract] + internal class Implementer : IImplementerModel { - public int Id { get; private set; } - public string ImplementerFIO { get; private set; } = string.Empty; - public string Password { get; set; } = string.Empty; - public int Qualification { get; set; } = 0; - public int WorkExperience { get; set; } = 0; + [DataMember] + public int Id { get; private set; } + [DataMember] + public string ImplementerFIO { get; private set; } = string.Empty; + [DataMember] + public string Password { get; set; } = string.Empty; + [DataMember] + public int Qualification { get; set; } = 0; + [DataMember] + public int WorkExperience { get; set; } = 0; public static Implementer? Create(ImplementerBindingModel model) { if (model == null) diff --git a/SushiBar/SushiBarFileImplement/Models/MessageInfo.cs b/SushiBar/SushiBarFileImplement/Models/MessageInfo.cs index 71e5184..dd164a6 100644 --- a/SushiBar/SushiBarFileImplement/Models/MessageInfo.cs +++ b/SushiBar/SushiBarFileImplement/Models/MessageInfo.cs @@ -1,23 +1,31 @@ using SushiBarContracts.BindingModels; using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { - public class MessageInfo : IMessageInfoModel + [DataContract] + public class MessageInfo : IMessageInfoModel { - public string MessageId { get; private set; } = string.Empty; + [DataMember] + public string MessageId { get; private set; } = string.Empty; - public int? ClientId { get; private set; } + [DataMember] + public int? ClientId { get; private set; } - public string SenderName { get; private set; } = string.Empty; + [DataMember] + public string SenderName { get; private set; } = string.Empty; - public DateTime DateDelivery { get; private set; } = DateTime.Now; + [DataMember] + public DateTime DateDelivery { get; private set; } = DateTime.Now; - public string Subject { get; private set; } = string.Empty; - - public string Body { get; private set; } = string.Empty; + [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/SushiBar/SushiBarFileImplement/Models/Order.cs b/SushiBar/SushiBarFileImplement/Models/Order.cs index 31df23d..3c996be 100644 --- a/SushiBar/SushiBarFileImplement/Models/Order.cs +++ b/SushiBar/SushiBarFileImplement/Models/Order.cs @@ -2,21 +2,32 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels.Enums; using SushiBarDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { - public class Order : IOrderModel + [DataContract] + public class Order : IOrderModel { - public int Id { get; private set; } - public int SushiId { get; private set; } - public int ClientId { get; private set; } - public int? ImplementerId { get; private set; } - public int Count { get; private set; } - public double Sum { get; private set; } - public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен; - public DateTime DateCreate { get; private set; } - public DateTime? DateImplement { get; private set; } + [DataMember] + public int Id { get; private set; } + [DataMember] + public int SushiId { 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; } = OrderStatus.Неизвестен; + [DataMember] + public DateTime DateCreate { get; private set; } + [DataMember] + public DateTime? DateImplement { get; private set; } public static Order? Create(OrderBindingModel model) { if (model == null) diff --git a/SushiBar/SushiBarFileImplement/Models/Sushi.cs b/SushiBar/SushiBarFileImplement/Models/Sushi.cs index 5e98c30..db0f606 100644 --- a/SushiBar/SushiBarFileImplement/Models/Sushi.cs +++ b/SushiBar/SushiBarFileImplement/Models/Sushi.cs @@ -1,15 +1,20 @@ using SushiBarContracts.BindingModels; using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { - public class Sushi : ISushiModel + [DataContract] + public class Sushi : ISushiModel { - public int Id { get; private set; } - public string SushiName { get; private set; } = string.Empty; - public double Price { get; private set; } + [DataMember] + public int Id { get; private set; } + [DataMember] + public string SushiName { get; private set; } = string.Empty; + [DataMember] + public double Price { get; private set; } public Dictionary Components { get; private set; } = new(); private Dictionary? _sushiComponents = null; public Dictionary SushiComponents -- 2.25.1 From ffba2fd7f02434b590feefa285671f5baf0fc081 Mon Sep 17 00:00:00 2001 From: bekodeg Date: Sun, 23 Jun 2024 08:29:04 +0400 Subject: [PATCH 4/4] =?UTF-8?q?=D0=9F=D0=BE=D1=87=D0=B8=D0=BD=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D1=83=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=D1=87=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SushiBar/SushiBar/Program.cs | 4 ++-- SushiBar/SushiBarBusinessLogic/BusinessLogics/OrderLogic.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SushiBar/SushiBar/Program.cs b/SushiBar/SushiBar/Program.cs index 1f3996b..2374f76 100644 --- a/SushiBar/SushiBar/Program.cs +++ b/SushiBar/SushiBar/Program.cs @@ -64,7 +64,7 @@ namespace SushiBar }); DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(true); + DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); @@ -73,7 +73,7 @@ namespace SushiBar DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(true); DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); diff --git a/SushiBar/SushiBarBusinessLogic/BusinessLogics/OrderLogic.cs b/SushiBar/SushiBarBusinessLogic/BusinessLogics/OrderLogic.cs index c724cbd..48c34eb 100644 --- a/SushiBar/SushiBarBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/SushiBar/SushiBarBusinessLogic/BusinessLogics/OrderLogic.cs @@ -115,7 +115,7 @@ namespace SushiBarBusinessLogic.BusinessLogics } model.Status = orderStatus; - if (model.Status == OrderStatus.Выдан) + if (model.Status == OrderStatus.Готов) { model.DateImplement = DateTime.Now; } -- 2.25.1