From e3da66cd2032da7392c27969167ef2b82e647574 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=AF=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=B2?= Date: Wed, 23 Oct 2024 15:53:54 +0400 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=80=D0=BE=D0=B4=D0=B5=20=D0=B3=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ComponentProgramming.csproj | 2 +- .../Components/LargeTextComponent.cs | 4 +- .../Control/DateBoxWithNull.Designer.cs | 71 ++++++++++ .../Control/DateBoxWithNull.cs | 66 +++++++++ .../Control/DateBoxWithNull.resx | 120 ++++++++++++++++ .../DatabaseImplement.csproj | 1 - ComponentProgramming/Forms/Forms.csproj | 2 + .../Forms/MainForm.Designer.cs | 52 ++++++- ComponentProgramming/Forms/MainForm.cs | 133 +++++++++++++++--- ComponentProgramming/Forms/MainForm.resx | 9 ++ .../Forms/OrganisationTypeForm.Designer.cs | 4 +- .../Forms/ProviderForm.Designer.cs | 35 ++--- ComponentProgramming/Forms/ProviderForm.cs | 49 +++++-- 13 files changed, 493 insertions(+), 55 deletions(-) create mode 100644 ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.Designer.cs create mode 100644 ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.cs create mode 100644 ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.resx diff --git a/ComponentProgramming/ComponentProgramming/ComponentProgramming.csproj b/ComponentProgramming/ComponentProgramming/ComponentProgramming.csproj index f0d4be0..394c50c 100644 --- a/ComponentProgramming/ComponentProgramming/ComponentProgramming.csproj +++ b/ComponentProgramming/ComponentProgramming/ComponentProgramming.csproj @@ -1,7 +1,7 @@  - net8.0-windows + net8.0-windows7.0 enable true enable diff --git a/ComponentProgramming/ComponentProgramming/Components/LargeTextComponent.cs b/ComponentProgramming/ComponentProgramming/Components/LargeTextComponent.cs index 059638a..5e42fc6 100644 --- a/ComponentProgramming/ComponentProgramming/Components/LargeTextComponent.cs +++ b/ComponentProgramming/ComponentProgramming/Components/LargeTextComponent.cs @@ -24,7 +24,7 @@ namespace ComponentProgramming.Components InitializeComponent(); } - public void CreateDocument(string docPath, string title, string[] rows) + public void CreateDocument(string docPath, string title, List rows) { if(string.IsNullOrEmpty(docPath)) { @@ -34,7 +34,7 @@ namespace ComponentProgramming.Components { throw new ArgumentNullException("Введите заголовок"); } - if(rows.Length <= 0) + if(rows.Count <= 0) { throw new ArgumentNullException("Нету данных для сохранения"); } diff --git a/ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.Designer.cs b/ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.Designer.cs new file mode 100644 index 0000000..0436b10 --- /dev/null +++ b/ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.Designer.cs @@ -0,0 +1,71 @@ +namespace ComponentProgramming.Control +{ + partial class DateBoxWithNull + { + /// + /// Обязательная переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором компонентов + + /// + /// Требуемый метод для поддержки конструктора — не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + checkBoxNull = new CheckBox(); + textBoxDate = new TextBox(); + SuspendLayout(); + // + // checkBoxNull + // + checkBoxNull.AutoSize = true; + checkBoxNull.Location = new Point(3, 6); + checkBoxNull.Name = "checkBoxNull"; + checkBoxNull.Size = new Size(15, 14); + checkBoxNull.TabIndex = 0; + checkBoxNull.UseVisualStyleBackColor = true; + checkBoxNull.CheckedChanged += CheckBoxNull_CheckedChanged; + // + // textBoxDate + // + textBoxDate.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + textBoxDate.Location = new Point(24, 3); + textBoxDate.Name = "textBoxDate"; + textBoxDate.Size = new Size(100, 23); + textBoxDate.TabIndex = 1; + textBoxDate.TextChanged += TextBoxDate_TextChanged; + // + // DateBoxWithNull + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + Controls.Add(textBoxDate); + Controls.Add(checkBoxNull); + Name = "DateBoxWithNull"; + Size = new Size(129, 30); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private CheckBox checkBoxNull; + private TextBox textBoxDate; + } +} diff --git a/ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.cs b/ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.cs new file mode 100644 index 0000000..5b4ad5a --- /dev/null +++ b/ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Windows.Forms.VisualStyles; + +namespace ComponentProgramming.Control +{ + public partial class DateBoxWithNull : UserControl + { + public event EventHandler? CombEvent; + + public Exception? Error; + + public DateBoxWithNull() + { + InitializeComponent(); + } + + public DateTime? Value + { + get + { + if (!checkBoxNull.Checked) + { + if (string.IsNullOrEmpty(textBoxDate.Text)) + { + throw new Exception("Text box can't be empty, click checkbox if value must be empty!"); + } + if (DateTime.TryParseExact(textBoxDate.Text, "dd/MM/yyyy", null, DateTimeStyles.None, out DateTime parsedDate)) + { + return parsedDate; + } + else + { + throw new Exception($"Wrong format <{textBoxDate.Text}>!"); + } + } + return null; + } + set + { + bool isNull = value is null; + checkBoxNull.Checked = isNull; + textBoxDate.Text = isNull ? string.Empty : value?.ToString("dd/MM/yyyy"); + } + } + + private void TextBoxDate_TextChanged(object sender, EventArgs e) + { + CombEvent?.Invoke(sender, e); + } + + private void CheckBoxNull_CheckedChanged(object sender, EventArgs e) + { + textBoxDate.Enabled = !checkBoxNull.Checked; + CombEvent?.Invoke(sender, e); + } + } +} diff --git a/ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.resx b/ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ComponentProgramming/ComponentProgramming/Control/DateBoxWithNull.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ComponentProgramming/DatabaseImplement/DatabaseImplement.csproj b/ComponentProgramming/DatabaseImplement/DatabaseImplement.csproj index ec24965..1e5da50 100644 --- a/ComponentProgramming/DatabaseImplement/DatabaseImplement.csproj +++ b/ComponentProgramming/DatabaseImplement/DatabaseImplement.csproj @@ -7,7 +7,6 @@ - all diff --git a/ComponentProgramming/Forms/Forms.csproj b/ComponentProgramming/Forms/Forms.csproj index 08761a0..51c3247 100644 --- a/ComponentProgramming/Forms/Forms.csproj +++ b/ComponentProgramming/Forms/Forms.csproj @@ -16,10 +16,12 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/ComponentProgramming/Forms/MainForm.Designer.cs b/ComponentProgramming/Forms/MainForm.Designer.cs index d870a29..6c85904 100644 --- a/ComponentProgramming/Forms/MainForm.Designer.cs +++ b/ComponentProgramming/Forms/MainForm.Designer.cs @@ -34,6 +34,13 @@ organisationTypesToolStripMenuItem = new ToolStripMenuItem(); addProviderToolStripMenuItem = new ToolStripMenuItem(); editProviderToolStripMenuItem = new ToolStripMenuItem(); + deleteProviderToolStripMenuItem = new ToolStripMenuItem(); + createPdfToolStripMenuItem = new ToolStripMenuItem(); + createExcelToolStripMenuItem = new ToolStripMenuItem(); + largeTextComponent = new ComponentProgramming.Components.LargeTextComponent(components); + componentDocumentWithTableMultiHeaderExcel = new ComponentsLibraryNet60.DocumentWithTable.ComponentDocumentWithTableMultiHeaderExcel(components); + createToolStripMenuItem = new ToolStripMenuItem(); + componentDocumentWithChartPieWord = new ComponentsLibraryNet60.DocumentWithChart.ComponentDocumentWithChartPieWord(components); contextMenuStrip1.SuspendLayout(); SuspendLayout(); // @@ -48,31 +55,59 @@ // // contextMenuStrip1 // - contextMenuStrip1.Items.AddRange(new ToolStripItem[] { organisationTypesToolStripMenuItem, addProviderToolStripMenuItem, editProviderToolStripMenuItem }); + contextMenuStrip1.Items.AddRange(new ToolStripItem[] { organisationTypesToolStripMenuItem, addProviderToolStripMenuItem, editProviderToolStripMenuItem, deleteProviderToolStripMenuItem, createPdfToolStripMenuItem, createExcelToolStripMenuItem, createToolStripMenuItem }); contextMenuStrip1.Name = "contextMenuStrip1"; - contextMenuStrip1.Size = new Size(181, 92); + contextMenuStrip1.Size = new Size(181, 180); // // organisationTypesToolStripMenuItem // organisationTypesToolStripMenuItem.Name = "organisationTypesToolStripMenuItem"; - organisationTypesToolStripMenuItem.Size = new Size(180, 22); + organisationTypesToolStripMenuItem.Size = new Size(173, 22); organisationTypesToolStripMenuItem.Text = "Organisation types"; organisationTypesToolStripMenuItem.Click += organisationTypesToolStripMenuItem_Click; // // addProviderToolStripMenuItem // addProviderToolStripMenuItem.Name = "addProviderToolStripMenuItem"; - addProviderToolStripMenuItem.Size = new Size(180, 22); + addProviderToolStripMenuItem.Size = new Size(173, 22); addProviderToolStripMenuItem.Text = "Add provider"; addProviderToolStripMenuItem.Click += addProviderToolStripMenuItem_Click; // // editProviderToolStripMenuItem // editProviderToolStripMenuItem.Name = "editProviderToolStripMenuItem"; - editProviderToolStripMenuItem.Size = new Size(180, 22); + editProviderToolStripMenuItem.Size = new Size(173, 22); editProviderToolStripMenuItem.Text = "Edit provider"; editProviderToolStripMenuItem.Click += editProviderToolStripMenuItem_Click; // + // deleteProviderToolStripMenuItem + // + deleteProviderToolStripMenuItem.Name = "deleteProviderToolStripMenuItem"; + deleteProviderToolStripMenuItem.Size = new Size(173, 22); + deleteProviderToolStripMenuItem.Text = "Delete provider"; + deleteProviderToolStripMenuItem.Click += deleteProviderToolStripMenuItem_Click; + // + // createPdfToolStripMenuItem + // + createPdfToolStripMenuItem.Name = "createPdfToolStripMenuItem"; + createPdfToolStripMenuItem.Size = new Size(173, 22); + createPdfToolStripMenuItem.Text = "Create Pdf"; + createPdfToolStripMenuItem.Click += createPdfToolStripMenuItem_Click; + // + // createExcelToolStripMenuItem + // + createExcelToolStripMenuItem.Name = "createExcelToolStripMenuItem"; + createExcelToolStripMenuItem.Size = new Size(173, 22); + createExcelToolStripMenuItem.Text = "Create Excel"; + createExcelToolStripMenuItem.Click += createExcelToolStripMenuItem_Click; + // + // createToolStripMenuItem + // + createToolStripMenuItem.Name = "createToolStripMenuItem"; + createToolStripMenuItem.Size = new Size(180, 22); + createToolStripMenuItem.Text = "Create Word"; + createToolStripMenuItem.Click += createToolStripMenuItem_Click; + // // MainForm // AutoScaleDimensions = new SizeF(7F, 15F); @@ -91,5 +126,12 @@ private ToolStripMenuItem organisationTypesToolStripMenuItem; private ToolStripMenuItem addProviderToolStripMenuItem; private ToolStripMenuItem editProviderToolStripMenuItem; + private ToolStripMenuItem deleteProviderToolStripMenuItem; + private ComponentProgramming.Components.LargeTextComponent largeTextComponent; + private ToolStripMenuItem createPdfToolStripMenuItem; + private ToolStripMenuItem createExcelToolStripMenuItem; + private ComponentsLibraryNet60.DocumentWithTable.ComponentDocumentWithTableMultiHeaderExcel componentDocumentWithTableMultiHeaderExcel; + private ToolStripMenuItem createToolStripMenuItem; + private ComponentsLibraryNet60.DocumentWithChart.ComponentDocumentWithChartPieWord componentDocumentWithChartPieWord; } } \ No newline at end of file diff --git a/ComponentProgramming/Forms/MainForm.cs b/ComponentProgramming/Forms/MainForm.cs index ce05d39..75fc2d6 100644 --- a/ComponentProgramming/Forms/MainForm.cs +++ b/ComponentProgramming/Forms/MainForm.cs @@ -8,6 +8,8 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using ComponentsLibraryNet60; +using ComponentsLibraryNet60.Models; +using Contracts.BindingModels; using Contracts.BusinessLogicsContracts; using Contracts.ViewModels; using ControlsLibraryNet60.Data; @@ -19,27 +21,35 @@ namespace Forms { private readonly IProviderLogic _logic; + private readonly IOrganisationTypeLogic _ologic; - public MainForm(IProviderLogic logic) + public MainForm(IProviderLogic logic, IOrganisationTypeLogic ologic) { InitializeComponent(); _logic = logic; + _ologic = ologic; + TreeConfig(); LoadData(); } + private void TreeConfig() + { + DataTreeNodeConfig treeConfig = new(); + treeConfig.NodeNames = new(); + treeConfig.NodeNames.Enqueue("OrganisationType"); + treeConfig.NodeNames.Enqueue("DateLastDelivery"); + treeConfig.NodeNames.Enqueue("Id"); + treeConfig.NodeNames.Enqueue("Name"); + + controlDataTreeTable.LoadConfig(treeConfig); + } + private void LoadData() { var list = _logic.ReadList(null); if (list != null) { - DataTreeNodeConfig treeConfig = new(); - treeConfig.NodeNames = new(); - treeConfig.NodeNames.Enqueue("OrganisationType"); - treeConfig.NodeNames.Enqueue("DateLastDelivery"); - treeConfig.NodeNames.Enqueue("Id"); - treeConfig.NodeNames.Enqueue("Name"); - - controlDataTreeTable.LoadConfig(treeConfig); + controlDataTreeTable.Clear(); controlDataTreeTable.AddTable(list); } } @@ -64,16 +74,107 @@ namespace Forms private void editProviderToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(ProviderForm)); - if(service is ProviderForm form) + int id = Convert.ToInt32(controlDataTreeTable.GetSelectedObject()?.Id); + ProviderForm form = new ProviderForm(_logic, _ologic, id); + form.ShowDialog(); + LoadData(); + } + + private void deleteProviderToolStripMenuItem_Click(object sender, EventArgs e) + { + var confirmResult = MessageBox.Show("Вы действительно хотите удалить запись?", "Подтвердите действие", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question + ); + + if (confirmResult == DialogResult.Yes) { - int id = Convert.ToInt32(controlDataTreeTable.GetSelectedObject()?.Id); - form.Id = id; - if (form.ShowDialog() == DialogResult.OK) + _logic.Delete(new ProviderBindingModel { - LoadData(); - } + Id = Convert.ToInt32(controlDataTreeTable.GetSelectedObject()?.Id), + }); + LoadData(); } } + + private void createPdfToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.ShowDialog(); + string path = saveFileDialog.FileName + ".pdf"; + var list = _logic.ReadList(null); + if (list != null) + { + List strings = new List { }; + foreach (var item in list) + { + strings.Add($"{item.Name} : {item.FurnitureType}"); + } + largeTextComponent.CreateDocument(path, $"Отчет за {DateTime.Now.Year}", strings); + } + } + + private void createExcelToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.ShowDialog(); + string path = saveFileDialog.FileName + ".xlsx"; + var list = _logic.ReadList(null); + var widths = new List<(int Column, int Row)> { (5, 5), (10, 5), (5, 5), (7, 5), (10, 5), }; + var headers = new List<(int ColumnIndex, int RowIndex, string Header, string PropertyName)> { + (0,0,"АЙДИ", "Id"), + (1,0,"Название", "Name"), + (2,0,"Перечень мебели", "FurnitureType"), + (3,0,"Тип организации", "OrganisationType"), + (4,0,"Дата последней доставки", "DateLastDelivery") + }; + var conf = new ComponentDocumentWithTableHeaderDataConfig + { + FilePath = path, + Header = "Отчет по поставщикам", + ColumnsRowsDataCount = (list![0].GetType().GetProperties().Length, list.Count), + UseUnion = false, + ColumnsRowsWidth = widths, + Headers = headers, + Data = list, + }; + componentDocumentWithTableMultiHeaderExcel.CreateDoc(conf); + } + + private void createToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.ShowDialog(); + string path = saveFileDialog.FileName + ".docx"; + var list = _logic.ReadList(null); + var data = new List<(int Date, double Value)> { }; + string header = "График по поставщикам\n"; + var chart = new Dictionary> { }; + int index = 1; + foreach (var type in _ologic.ReadList(null)!) + { + int sum = 0; + foreach(var item in list) + { + if(item.OrganisationType == type.Name) + { + sum++; + } + } + header += $"{index} - {type.Name}\n"; + if (sum != 0) data.Add((index, sum)); + index++; + } + chart.Add("ИП", data); + var conf = new ComponentDocumentWithChartConfig + { + FilePath = path, + Header = header, + ChartTitle = "Диаграмма по типам организаций", + LegendLocation = ComponentsLibraryNet60.Models.Location.Bottom, + Data = chart, + }; + componentDocumentWithChartPieWord.CreateDoc(conf); + } } } diff --git a/ComponentProgramming/Forms/MainForm.resx b/ComponentProgramming/Forms/MainForm.resx index 8f17a46..196159a 100644 --- a/ComponentProgramming/Forms/MainForm.resx +++ b/ComponentProgramming/Forms/MainForm.resx @@ -120,4 +120,13 @@ 132, 17 + + 287, 17 + + + 452, 17 + + + 769, 17 + \ No newline at end of file diff --git a/ComponentProgramming/Forms/OrganisationTypeForm.Designer.cs b/ComponentProgramming/Forms/OrganisationTypeForm.Designer.cs index d84bcf4..af5cc3a 100644 --- a/ComponentProgramming/Forms/OrganisationTypeForm.Designer.cs +++ b/ComponentProgramming/Forms/OrganisationTypeForm.Designer.cs @@ -51,7 +51,7 @@ // // Type // - Type.HeaderText = "Тип организации"; + Type.HeaderText = "Organisation types"; Type.Name = "Type"; // // OrganisationTypeForm @@ -61,7 +61,7 @@ ClientSize = new Size(205, 308); Controls.Add(dataGridView); Name = "OrganisationTypeForm"; - Text = "Справочник"; + Text = "Types"; ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); ResumeLayout(false); } diff --git a/ComponentProgramming/Forms/ProviderForm.Designer.cs b/ComponentProgramming/Forms/ProviderForm.Designer.cs index c1c495b..8904401 100644 --- a/ComponentProgramming/Forms/ProviderForm.Designer.cs +++ b/ComponentProgramming/Forms/ProviderForm.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - controlInputNullableDate = new ControlsLibraryNet60.Input.ControlInputNullableDate(); controlSelectedComboBoxList = new ControlsLibraryNet60.Selected.ControlSelectedComboBoxList(); textBoxName = new TextBox(); label1 = new Label(); @@ -38,27 +37,19 @@ label4 = new Label(); buttonAdd = new Button(); buttonCancel = new Button(); + controlInputNullableDate = new ComponentProgramming.Control.DateBoxWithNull(); SuspendLayout(); // - // controlInputNullableDate - // - controlInputNullableDate.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - controlInputNullableDate.Location = new Point(12, 164); - controlInputNullableDate.Margin = new Padding(4, 3, 4, 3); - controlInputNullableDate.Name = "controlInputNullableDate"; - controlInputNullableDate.Size = new Size(254, 23); - controlInputNullableDate.TabIndex = 0; - controlInputNullableDate.Value = null; - // // controlSelectedComboBoxList // - controlSelectedComboBoxList.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + controlSelectedComboBoxList.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; controlSelectedComboBoxList.Location = new Point(12, 119); controlSelectedComboBoxList.Margin = new Padding(5, 3, 5, 3); controlSelectedComboBoxList.Name = "controlSelectedComboBoxList"; controlSelectedComboBoxList.SelectedElement = ""; controlSelectedComboBoxList.Size = new Size(254, 24); controlSelectedComboBoxList.TabIndex = 1; + controlSelectedComboBoxList.SelectedElementChange += OnInputChange; // // textBoxName // @@ -67,6 +58,7 @@ textBoxName.Name = "textBoxName"; textBoxName.Size = new Size(254, 23); textBoxName.TabIndex = 2; + textBoxName.TextChanged += OnInputChange; // // label1 // @@ -84,6 +76,7 @@ textBoxFurnitureType.Name = "textBoxFurnitureType"; textBoxFurnitureType.Size = new Size(254, 23); textBoxFurnitureType.TabIndex = 4; + textBoxFurnitureType.TextChanged += OnInputChange; // // label2 // @@ -115,7 +108,7 @@ // buttonAdd // buttonAdd.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; - buttonAdd.Location = new Point(12, 193); + buttonAdd.Location = new Point(12, 196); buttonAdd.Name = "buttonAdd"; buttonAdd.Size = new Size(94, 36); buttonAdd.TabIndex = 8; @@ -126,18 +119,27 @@ // buttonCancel // buttonCancel.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; - buttonCancel.Location = new Point(173, 193); + buttonCancel.Location = new Point(173, 196); buttonCancel.Name = "buttonCancel"; buttonCancel.Size = new Size(94, 36); buttonCancel.TabIndex = 9; buttonCancel.Text = "Cancel"; buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // controlInputNullableDate + // + controlInputNullableDate.Location = new Point(12, 165); + controlInputNullableDate.Name = "controlInputNullableDate"; + controlInputNullableDate.Size = new Size(255, 30); + controlInputNullableDate.TabIndex = 10; // // ProviderForm // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(279, 241); + Controls.Add(controlInputNullableDate); Controls.Add(buttonCancel); Controls.Add(buttonAdd); Controls.Add(label4); @@ -147,16 +149,14 @@ Controls.Add(label1); Controls.Add(textBoxName); Controls.Add(controlSelectedComboBoxList); - Controls.Add(controlInputNullableDate); Name = "ProviderForm"; Text = "Create Provider"; + FormClosing += ProviderForm_FormClosing; ResumeLayout(false); PerformLayout(); } #endregion - - private ControlsLibraryNet60.Input.ControlInputNullableDate controlInputNullableDate; private ControlsLibraryNet60.Selected.ControlSelectedComboBoxList controlSelectedComboBoxList; private TextBox textBoxName; private Label label1; @@ -166,5 +166,6 @@ private Label label4; private Button buttonAdd; private Button buttonCancel; + private ComponentProgramming.Control.DateBoxWithNull controlInputNullableDate; } } \ No newline at end of file diff --git a/ComponentProgramming/Forms/ProviderForm.cs b/ComponentProgramming/Forms/ProviderForm.cs index ac8ec65..7bda872 100644 --- a/ComponentProgramming/Forms/ProviderForm.cs +++ b/ComponentProgramming/Forms/ProviderForm.cs @@ -1,7 +1,6 @@ using Contracts.BindingModels; using Contracts.BusinessLogicsContracts; using Contracts.SearchModels; -using DocumentFormat.OpenXml.Spreadsheet; using System; using System.Collections.Generic; using System.ComponentModel; @@ -17,17 +16,17 @@ namespace Forms public partial class ProviderForm : Form { private int? _id; - public int Id { set { _id = value; } } private readonly IProviderLogic _pLogic; private readonly IOrganisationTypeLogic _oLogic; - //private bool isEdited; + private bool isEdited; - public ProviderForm(IProviderLogic plogic, IOrganisationTypeLogic ologic) + public ProviderForm(IProviderLogic plogic, IOrganisationTypeLogic ologic, int? id = null) { InitializeComponent(); _pLogic = plogic; _oLogic = ologic; - //isEdited = false; + _id = id; + isEdited = false; LoadData(); } @@ -49,13 +48,22 @@ namespace Forms { Id = _id.Value, }); + textBoxFurnitureType.Text = view.FurnitureType; + textBoxName.Text = view.Name; + if (view.DateLastDelivery != "Поставок не было") controlInputNullableDate.Value = Convert.ToDateTime(view.DateLastDelivery); controlSelectedComboBoxList.SelectedElement = view!.OrganisationType; + isEdited = false; } } + private void OnInputChange(object sender, EventArgs e) + { + isEdited = true; + } + private void buttonAdd_Click(object sender, EventArgs e) { - if(string.IsNullOrEmpty(textBoxName.Text)) + if (string.IsNullOrEmpty(textBoxName.Text)) { MessageBox.Show("Заполните поле Название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; @@ -65,21 +73,23 @@ namespace Forms MessageBox.Show("Заполните Перечень мебели ", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } - if(string.IsNullOrEmpty(controlSelectedComboBoxList.SelectedElement)) + if (string.IsNullOrEmpty(controlSelectedComboBoxList.SelectedElement)) { MessageBox.Show("Выберите Тип организации", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } - var s = controlInputNullableDate.Value.ToString(); + isEdited = false; try { - var OperationResult = _pLogic.Create(new ProviderBindingModel + var model = new ProviderBindingModel { + Id = _id ?? 0, Name = textBoxName.Text, FurnitureType = textBoxFurnitureType.Text, - DateLastDelivery = controlInputNullableDate.Value.ToString() == "" ? "No date" : controlInputNullableDate.Value.ToString(), + DateLastDelivery = controlInputNullableDate.Value.ToString() == "" ? "Поставок не было" : controlInputNullableDate.Value.ToString(), OrganisationType = controlSelectedComboBoxList.SelectedElement - }); + }; + var OperationResult = _id.HasValue ? _pLogic.Update(model) : _pLogic.Create(model); if (!OperationResult) { throw new Exception("Ошибка при создании поставщика."); @@ -93,5 +103,22 @@ namespace Forms MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } + + private void ProviderForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (!isEdited) return; + var confirmResult = MessageBox.Show("Вы не сохранили изменения.\nВы действительно хотите выйти?", "Подтвердите действие", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question + ); + + if (confirmResult == DialogResult.No) e.Cancel = true; + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } } }