diff --git a/WinFormsProject/AppView/AppView.csproj b/WinFormsProject/AppView/AppView.csproj index b85039e..ec28f5f 100644 --- a/WinFormsProject/AppView/AppView.csproj +++ b/WinFormsProject/AppView/AppView.csproj @@ -9,14 +9,18 @@ + + all runtime; build; native; contentfiles; analyzers; buildtransitive + + \ No newline at end of file diff --git a/WinFormsProject/AppView/Form1.Designer.cs b/WinFormsProject/AppView/Form1.Designer.cs deleted file mode 100644 index 1b9a8ab..0000000 --- a/WinFormsProject/AppView/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace AppView -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #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() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} \ No newline at end of file diff --git a/WinFormsProject/AppView/Form1.cs b/WinFormsProject/AppView/Form1.cs deleted file mode 100644 index c023e9d..0000000 --- a/WinFormsProject/AppView/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace AppView -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/WinFormsProject/AppView/Form1.resx b/WinFormsProject/AppView/Form1.resx deleted file mode 100644 index 1af7de1..0000000 --- a/WinFormsProject/AppView/Form1.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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/WinFormsProject/AppView/FormMain.Designer.cs b/WinFormsProject/AppView/FormMain.Designer.cs new file mode 100644 index 0000000..4db6094 --- /dev/null +++ b/WinFormsProject/AppView/FormMain.Designer.cs @@ -0,0 +1,142 @@ +namespace AppView +{ + partial class FormMain + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #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() + { + this.components = new System.ComponentModel.Container(); + this.dataTable = new ControlsLibraryNet60.Data.ControlDataTableTable(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.создатьToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.изменитьToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.удалитьToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.справочникToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.сформирироватьWordToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.сформироватьPdfToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.сформироватьExcelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.documentWithImage1 = new WinFormsLibrary.DocumentWithImage(this.components); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // dataTable + // + this.dataTable.Location = new System.Drawing.Point(13, 12); + this.dataTable.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.dataTable.Name = "dataTable"; + this.dataTable.SelectedRowIndex = -1; + this.dataTable.Size = new System.Drawing.Size(774, 426); + this.dataTable.TabIndex = 0; + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.создатьToolStripMenuItem, + this.изменитьToolStripMenuItem, + this.удалитьToolStripMenuItem, + this.справочникToolStripMenuItem, + this.сформирироватьWordToolStripMenuItem, + this.сформироватьPdfToolStripMenuItem, + this.сформироватьExcelToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(205, 180); + // + // создатьToolStripMenuItem + // + this.создатьToolStripMenuItem.Name = "создатьToolStripMenuItem"; + this.создатьToolStripMenuItem.Size = new System.Drawing.Size(204, 22); + this.создатьToolStripMenuItem.Text = "Создать"; + this.создатьToolStripMenuItem.Click += new System.EventHandler(this.создатьToolStripMenuItem_Click); + // + // изменитьToolStripMenuItem + // + this.изменитьToolStripMenuItem.Name = "изменитьToolStripMenuItem"; + this.изменитьToolStripMenuItem.Size = new System.Drawing.Size(204, 22); + this.изменитьToolStripMenuItem.Text = "Изменить"; + this.изменитьToolStripMenuItem.Click += new System.EventHandler(this.изменитьToolStripMenuItem_Click); + // + // удалитьToolStripMenuItem + // + this.удалитьToolStripMenuItem.Name = "удалитьToolStripMenuItem"; + this.удалитьToolStripMenuItem.Size = new System.Drawing.Size(204, 22); + this.удалитьToolStripMenuItem.Text = "Удалить"; + this.удалитьToolStripMenuItem.Click += new System.EventHandler(this.удалитьToolStripMenuItem_Click); + // + // справочникToolStripMenuItem + // + this.справочникToolStripMenuItem.Name = "справочникToolStripMenuItem"; + this.справочникToolStripMenuItem.Size = new System.Drawing.Size(204, 22); + this.справочникToolStripMenuItem.Text = "Справочник"; + this.справочникToolStripMenuItem.Click += new System.EventHandler(this.справочникToolStripMenuItem_Click); + // + // сформирироватьWordToolStripMenuItem + // + this.сформирироватьWordToolStripMenuItem.Name = "сформирироватьWordToolStripMenuItem"; + this.сформирироватьWordToolStripMenuItem.Size = new System.Drawing.Size(204, 22); + this.сформирироватьWordToolStripMenuItem.Text = "Сформирировать Word"; + this.сформирироватьWordToolStripMenuItem.Click += new System.EventHandler(this.сформирироватьWordToolStripMenuItem_Click); + // + // сформироватьPdfToolStripMenuItem + // + this.сформироватьPdfToolStripMenuItem.Name = "сформироватьPdfToolStripMenuItem"; + this.сформироватьPdfToolStripMenuItem.Size = new System.Drawing.Size(204, 22); + this.сформироватьPdfToolStripMenuItem.Text = "Сформировать Pdf"; + this.сформироватьPdfToolStripMenuItem.Click += new System.EventHandler(this.сформироватьPdfToolStripMenuItem_Click); + // + // сформироватьExcelToolStripMenuItem + // + this.сформироватьExcelToolStripMenuItem.Name = "сформироватьExcelToolStripMenuItem"; + this.сформироватьExcelToolStripMenuItem.Size = new System.Drawing.Size(204, 22); + this.сформироватьExcelToolStripMenuItem.Text = "Сформировать Excel"; + // + // FormMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.dataTable); + this.Name = "FormMain"; + this.Text = "Главная форма"; + this.Load += new System.EventHandler(this.FormMain_Load); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private ControlsLibraryNet60.Data.ControlDataTableTable dataTable; + private ContextMenuStrip contextMenuStrip1; + private ToolStripMenuItem создатьToolStripMenuItem; + private ToolStripMenuItem изменитьToolStripMenuItem; + private ToolStripMenuItem удалитьToolStripMenuItem; + private ToolStripMenuItem справочникToolStripMenuItem; + private ToolStripMenuItem сформирироватьWordToolStripMenuItem; + private ToolStripMenuItem сформироватьPdfToolStripMenuItem; + private ToolStripMenuItem сформироватьExcelToolStripMenuItem; + private WinFormsLibrary.DocumentWithImage documentWithImage1; + } +} \ No newline at end of file diff --git a/WinFormsProject/AppView/FormMain.cs b/WinFormsProject/AppView/FormMain.cs new file mode 100644 index 0000000..6d1142e --- /dev/null +++ b/WinFormsProject/AppView/FormMain.cs @@ -0,0 +1,154 @@ +using Contracts.StorageContracts; +using Contracts.ViewModels; +using ControlsLibraryNet60.Data; +using ControlsLibraryNet60.Models; +using DocumentFormat.OpenXml.Drawing.Charts; +using System.ComponentModel; +using WinFormsLibrary; +using WinFormsLibrary.SupportClasses; + +namespace AppView +{ + public partial class FormMain : Form + { + private readonly IProviderStorage _providerStorage; + private readonly ITypeStorage _typeStorage; + + public FormMain(IProviderStorage providerStorage, ITypeStorage typeStorage) + { + InitializeComponent(); + + _providerStorage = providerStorage; + _typeStorage = typeStorage; + + ContextMenuStrip = contextMenuStrip1; + + List columns = new List() + { + new DataTableColumnConfig + { + ColumnHeader = "Id", + PropertyName = "Id", + Visible = false + }, + new DataTableColumnConfig + { + ColumnHeader = "", + PropertyName = "Name", + Visible = true + }, + new DataTableColumnConfig + { + ColumnHeader = " ", + PropertyName = "Type", + Visible = true + }, + new DataTableColumnConfig + { + ColumnHeader = "", + PropertyName = "Number", + Visible = true + } + }; + dataTable.LoadColumns(columns); + } + + private void LoadData() + { + var list = _providerStorage.GetFullList(); + dataTable.Clear(); + dataTable.AddTable(list); + } + + private void FormMain_Load(object sender, EventArgs e) + { + LoadData(); + } + + private void ToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormProvider)); + if (!(service is FormProvider form)) return; + if (form.ShowDialog() == DialogResult.OK) LoadData(); + } + + private void ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (dataTable.GetSelectedObject() == null) + { + return; + } + else + { + var service = Program.ServiceProvider?.GetService(typeof(FormProvider)); + if (service is FormProvider form) + { + form.Id = Convert.ToInt32(dataTable.GetSelectedObject()?.Id); + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } + } + } + + private void ToolStripMenuItem_Click(object sender, EventArgs e) + { + + if (dataTable.GetSelectedObject() == null) return; + if (MessageBox.Show( + " ?", + "", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question) == DialogResult.Yes) + { + _providerStorage.Delete(new(dataTable.GetSelectedObject())); + LoadData(); + } + } + + private void ToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormType)); + if (service is FormType form) + { + form.ShowDialog(); + LoadData(); + } + } + + private void toolStripButton1_Click(object sender, EventArgs e) + { + + } + + private void WordToolStripMenuItem_Click(object sender, EventArgs e) + { + string fileName = ""; + using (var dialog = new SaveFileDialog { Filter = "docx|*.docx" }) + { + if (dialog.ShowDialog() == DialogResult.OK) + { + fileName = dialog.FileName.ToString(); + MessageBox.Show("", "", MessageBoxButtons.OK, + MessageBoxIcon.Information); + } + } + + ImageClass info = new ImageClass(); + + var images = _providerStorage.GetFullList().Select(x => x.Logo).ToList(); + + info.Title = "Images"; + info.Path = fileName; + info.Files = images; + + documentWithImage1.CreateDocument(info); + } + + private void PdfToolStripMenuItem_Click(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/WinFormsProject/AppView/FormMain.resx b/WinFormsProject/AppView/FormMain.resx new file mode 100644 index 0000000..f8d595d --- /dev/null +++ b/WinFormsProject/AppView/FormMain.resx @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + 172, 17 + + \ No newline at end of file diff --git a/WinFormsProject/AppView/FormProvider.Designer.cs b/WinFormsProject/AppView/FormProvider.Designer.cs new file mode 100644 index 0000000..233e8e5 --- /dev/null +++ b/WinFormsProject/AppView/FormProvider.Designer.cs @@ -0,0 +1,207 @@ +namespace AppView +{ + partial class FormProvider + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #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() + { + this.labelName = new System.Windows.Forms.Label(); + this.textBoxName = new System.Windows.Forms.TextBox(); + this.labelLogo = new System.Windows.Forms.Label(); + this.textBoxNumber = new System.Windows.Forms.TextBox(); + this.labelType = new System.Windows.Forms.Label(); + this.labelNumber = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.dropDownList1 = new WinForm.DropDownList(); + this.buttonSave = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonType = new System.Windows.Forms.Button(); + this.buttonImage = new System.Windows.Forms.Button(); + this.ImgFile = new System.Windows.Forms.OpenFileDialog(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // labelName + // + this.labelName.AutoSize = true; + this.labelName.Location = new System.Drawing.Point(12, 9); + this.labelName.Name = "labelName"; + this.labelName.Size = new System.Drawing.Size(59, 15); + this.labelName.TabIndex = 0; + this.labelName.Text = "Название"; + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(12, 27); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(239, 23); + this.textBoxName.TabIndex = 1; + this.textBoxName.TabStop = false; + this.textBoxName.TextChanged += new System.EventHandler(this.OnInputChange); + // + // labelLogo + // + this.labelLogo.AutoSize = true; + this.labelLogo.Location = new System.Drawing.Point(12, 59); + this.labelLogo.Name = "labelLogo"; + this.labelLogo.Size = new System.Drawing.Size(53, 15); + this.labelLogo.TabIndex = 2; + this.labelLogo.Text = "Логотип"; + // + // textBoxNumber + // + this.textBoxNumber.Location = new System.Drawing.Point(12, 424); + this.textBoxNumber.Name = "textBoxNumber"; + this.textBoxNumber.Size = new System.Drawing.Size(239, 23); + this.textBoxNumber.TabIndex = 4; + this.textBoxNumber.TabStop = false; + this.textBoxNumber.TextChanged += new System.EventHandler(this.OnInputChange); + // + // labelType + // + this.labelType.AutoSize = true; + this.labelType.Location = new System.Drawing.Point(12, 307); + this.labelType.Name = "labelType"; + this.labelType.Size = new System.Drawing.Size(75, 15); + this.labelType.TabIndex = 5; + this.labelType.Text = "Тип изделий"; + // + // labelNumber + // + this.labelNumber.AutoSize = true; + this.labelNumber.Location = new System.Drawing.Point(12, 406); + this.labelNumber.Name = "labelNumber"; + this.labelNumber.Size = new System.Drawing.Size(101, 15); + this.labelNumber.TabIndex = 6; + this.labelNumber.Text = "Номер телефона"; + // + // pictureBox1 + // + this.pictureBox1.Location = new System.Drawing.Point(12, 77); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(239, 159); + this.pictureBox1.TabIndex = 7; + this.pictureBox1.TabStop = false; + // + // dropDownList1 + // + this.dropDownList1.Location = new System.Drawing.Point(12, 325); + this.dropDownList1.Name = "dropDownList1"; + this.dropDownList1.Selected = ""; + this.dropDownList1.Size = new System.Drawing.Size(239, 30); + this.dropDownList1.TabIndex = 8; + this.dropDownList1.TabStop = false; + // + // buttonSave + // + this.buttonSave.Location = new System.Drawing.Point(38, 471); + this.buttonSave.Name = "buttonSave"; + this.buttonSave.Size = new System.Drawing.Size(75, 23); + this.buttonSave.TabIndex = 9; + this.buttonSave.Text = "Сохранить"; + this.buttonSave.UseVisualStyleBackColor = true; + this.buttonSave.Click += new System.EventHandler(this.buttonSave_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(146, 471); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 10; + this.buttonCancel.Text = "Отменить"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonType + // + this.buttonType.Location = new System.Drawing.Point(109, 361); + this.buttonType.Name = "buttonType"; + this.buttonType.Size = new System.Drawing.Size(142, 23); + this.buttonType.TabIndex = 11; + this.buttonType.TabStop = false; + this.buttonType.Text = "Редактировать типы"; + this.buttonType.UseVisualStyleBackColor = true; + this.buttonType.Click += new System.EventHandler(this.buttonType_Click); + // + // buttonImage + // + this.buttonImage.Location = new System.Drawing.Point(109, 242); + this.buttonImage.Name = "buttonImage"; + this.buttonImage.Size = new System.Drawing.Size(142, 23); + this.buttonImage.TabIndex = 12; + this.buttonImage.TabStop = false; + this.buttonImage.Text = "Загрузить картинку"; + this.buttonImage.UseVisualStyleBackColor = true; + this.buttonImage.Click += new System.EventHandler(this.buttonImage_Click); + // + // ImgFile + // + this.ImgFile.FileName = "openFileDialog1"; + // + // FormProvider + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(263, 509); + this.Controls.Add(this.buttonImage); + this.Controls.Add(this.buttonType); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonSave); + this.Controls.Add(this.dropDownList1); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.labelNumber); + this.Controls.Add(this.labelType); + this.Controls.Add(this.textBoxNumber); + this.Controls.Add(this.labelLogo); + this.Controls.Add(this.textBoxName); + this.Controls.Add(this.labelName); + this.Name = "FormProvider"; + this.Text = "FormProvider"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormProvider_FormClosing); + this.Load += new System.EventHandler(this.FormProvider_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Label labelName; + private TextBox textBoxName; + private Label labelLogo; + private TextBox textBoxNumber; + private Label labelType; + private Label labelNumber; + private PictureBox pictureBox1; + private WinForm.DropDownList dropDownList1; + private Button buttonSave; + private Button buttonCancel; + private Button buttonType; + private Button buttonImage; + private OpenFileDialog ImgFile; + } +} \ No newline at end of file diff --git a/WinFormsProject/AppView/FormProvider.cs b/WinFormsProject/AppView/FormProvider.cs new file mode 100644 index 0000000..0564c83 --- /dev/null +++ b/WinFormsProject/AppView/FormProvider.cs @@ -0,0 +1,186 @@ +using Contracts.BindingModels; +using Contracts.SearchModels; +using Contracts.StorageContracts; +using DocumentFormat.OpenXml.Vml; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Windows.Forms; +using WinForm; + +namespace AppView +{ + public partial class FormProvider : Form + { + private int? _id; + public int Id { set { _id = value; } } + public readonly IProviderStorage _providerStorage; + public readonly ITypeStorage _typeStorage; + private bool isEdited; + private byte[] _logo = new byte[0]; + + public FormProvider(IProviderStorage providerStorage, ITypeStorage typeStorage) + { + _providerStorage = providerStorage; + _typeStorage = typeStorage; + isEdited = false; + + InitializeComponent(); + } + + private Image byteArrayToImage(byte[] byteArrayIn) + { + Image res = null; + try + { + MemoryStream ms = new MemoryStream(byteArrayIn, 0, byteArrayIn.Length); + ms.Write(byteArrayIn, 0, byteArrayIn.Length); + res = Image.FromStream(ms, true);//Exception occurs here + } + catch { } + return res; + } + + private void FormProvider_Load(object sender, EventArgs e) + { + dropDownList1.ExplicitEvent += OnInputChange; + LoadData(); + if (_id.HasValue) + { + try + { + var element = _providerStorage.GetElement(new ProviderSearchModel { Id = _id!.Value }); + if (element != null) + { + textBoxName.Text = element.Name; + _logo = element.Logo; + dropDownList1.Selected = element.Type; + textBoxNumber.Text = element.Number; + + pictureBox1.Image = byteArrayToImage(_logo); + } + } + catch(Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении записи", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void LoadData() + { + var list = _typeStorage.GetFullList().Select(item => item.Name).ToList(); + dropDownList1.Clear(); + foreach (var item in list) + { + dropDownList1.ComboBoxItems.Add(item); + } + + if (_id != null) + { + var provider = _providerStorage.GetElement(new ProviderSearchModel() { Id = _id!.Value }); + dropDownList1.Selected = provider!.Type; + } + } + + private void buttonSave_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxName.Text)) + { + MessageBox.Show("Название не указано."); + return; + } + if (_logo.Length == 0) + { + MessageBox.Show("Выберите фото", "Ошибка"); + return; + } + if (string.IsNullOrEmpty(dropDownList1.Selected)) + { + MessageBox.Show("Не выбран тип изделий."); + return; + } + if (!Regex.IsMatch(textBoxNumber.Text, @"^\d-\d{3}-\d{3}-\d{2}-\d{2}$")) + { + MessageBox.Show("Неправильный формат номера телефона."); + return; + } + + isEdited = false; + + try + { + var model = new ProviderBindingModel + { + Id = _id ?? 0, + Name = textBoxName.Text, + Logo = _logo, + Type = dropDownList1.Selected, + Number = textBoxNumber.Text + }; + var action = _id.HasValue ? _providerStorage.Update(model) : _providerStorage.Insert(model); + DialogResult = DialogResult.OK; + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + Close(); + } + + private void buttonType_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormType)); + if (service is FormType form) + { + form.ShowDialog(); + LoadData(); + } + } + + private void FormProvider_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 buttonImage_Click(object sender, EventArgs e) + { + if (ImgFile.ShowDialog() != DialogResult.OK) return; + + Image img = Image.FromFile(ImgFile.FileName); + using (MemoryStream mStream = new MemoryStream()) + { + img.Save(mStream, img.RawFormat); + _logo = mStream.ToArray(); + } + + pictureBox1.Image = img; + } + + private void OnInputChange(object sender, EventArgs e) + { + isEdited = true; + } + } +} diff --git a/WinFormsProject/AppView/FormProvider.resx b/WinFormsProject/AppView/FormProvider.resx new file mode 100644 index 0000000..741ab82 --- /dev/null +++ b/WinFormsProject/AppView/FormProvider.resx @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + \ No newline at end of file diff --git a/WinFormsProject/AppView/FormType.Designer.cs b/WinFormsProject/AppView/FormType.Designer.cs new file mode 100644 index 0000000..bbf9c76 --- /dev/null +++ b/WinFormsProject/AppView/FormType.Designer.cs @@ -0,0 +1,65 @@ +namespace AppView +{ + partial class FormType + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #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() + { + this.dataGridView = new System.Windows.Forms.DataGridView(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); + this.SuspendLayout(); + // + // dataGridView + // + this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridView.Location = new System.Drawing.Point(0, 0); + this.dataGridView.Name = "dataGridView"; + this.dataGridView.RowTemplate.Height = 25; + this.dataGridView.Size = new System.Drawing.Size(367, 447); + this.dataGridView.TabIndex = 0; + this.dataGridView.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView_CellValueChanged); + this.dataGridView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dataGridView_KeyDown); + // + // FormType + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(367, 447); + this.Controls.Add(this.dataGridView); + this.Name = "FormType"; + this.Text = "FormType"; + this.Load += new System.EventHandler(this.FormType_Load); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/WinFormsProject/AppView/FormType.cs b/WinFormsProject/AppView/FormType.cs new file mode 100644 index 0000000..dd69082 --- /dev/null +++ b/WinFormsProject/AppView/FormType.cs @@ -0,0 +1,138 @@ +using Contracts.BindingModels; +using Contracts.SearchModels; +using Contracts.StorageContracts; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Linq.Expressions; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace AppView +{ + public partial class FormType : Form + { + private readonly ITypeStorage _typeStorage; + + public FormType(ITypeStorage typeStorage) + { + _typeStorage = typeStorage; + + InitializeComponent(); + } + + private void FormType_Load(object sender, EventArgs e) + { + LoadData(); + } + + public void LoadData() + { + try + { + var types = _typeStorage.GetFullList(); + if (types != null) + { + dataGridView.DataSource = types; + dataGridView.Columns["Id"].Visible = false; + dataGridView.Columns["Name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + dataGridView.Columns["Name"].Tag = "Название"; + } + } + catch(Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка загрузки типов.", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void dataGridView_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Insert: + AddType(); + e.Handled = true; + break; + case Keys.Delete: + RemoveType(); + e.Handled = true; + break; + } + } + + private void AddType() + { + var list = _typeStorage.GetFullList(); + list.Add(new()); + if (list != null) + { + dataGridView.DataSource = list; + dataGridView.Columns["Id"].Visible = false; + dataGridView.Columns["Name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + } + } + + private void RemoveType() + { + if (dataGridView.SelectedRows.Count > 0) + { + DialogResult result = MessageBox.Show( + "Вы уверены, что хотите удалить выбранные записи?", + "Подтверждение удаления", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question); + if (result == DialogResult.Yes) + { + foreach (DataGridViewRow row in dataGridView.SelectedRows) + { + if (!row.IsNewRow) + { + int id = Convert.ToInt32(row.Cells["Id"].Value); + var view = _typeStorage.GetElement(new TypeSearchModel { Id = id }); + _typeStorage.Delete(new(view!)); + } + } + LoadData(); + } + } + } + + private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex >= 0) + { + DataGridViewRow row = dataGridView.Rows[e.RowIndex]; + int id = Convert.ToInt32(row.Cells["Id"].Value); + string? name = row.Cells["Name"].Value?.ToString(); + + if (string.IsNullOrWhiteSpace(name)) + { + MessageBox.Show( + "Нельзя сохранить запись с пустым именем!", + "Ошибка", + MessageBoxButtons.OK, + MessageBoxIcon.Error + ); + LoadData(); + } + else + { + var model = new TypeBindingModel + { + Id = id, + Name = name + }; + if (model.Id == 0) _typeStorage.Insert(model); + else _typeStorage.Update(model); + LoadData(); + } + } + } + } +} diff --git a/WinFormsProject/AppView/FormType.resx b/WinFormsProject/AppView/FormType.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/WinFormsProject/AppView/FormType.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/WinFormsProject/AppView/Program.cs b/WinFormsProject/AppView/Program.cs index 5561de2..e2a04d9 100644 --- a/WinFormsProject/AppView/Program.cs +++ b/WinFormsProject/AppView/Program.cs @@ -1,7 +1,13 @@ +using Contracts.StorageContracts; +using DateBaseImplement.Implements; +using Microsoft.Extensions.DependencyInjection; + namespace AppView { internal static class Program { + private static ServiceProvider? _serviceProvider; + public static ServiceProvider? ServiceProvider => _serviceProvider; /// /// The main entry point for the application. /// @@ -11,7 +17,19 @@ namespace AppView // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + var services = new ServiceCollection(); + ConfigureService(services); + _serviceProvider = services.BuildServiceProvider(); + Application.Run(_serviceProvider.GetRequiredService()); + } + + private static void ConfigureService(IServiceCollection services) + { + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); } } } \ No newline at end of file diff --git a/WinFormsProject/WinFormsLibrary/DocumentWithImage.cs b/WinFormsProject/WinFormsLibrary/DocumentWithImage.cs index eb50850..eb6495b 100644 --- a/WinFormsProject/WinFormsLibrary/DocumentWithImage.cs +++ b/WinFormsProject/WinFormsLibrary/DocumentWithImage.cs @@ -39,7 +39,6 @@ namespace WinFormsLibrary public void CreateDocument(ImageClass imageClass) { - // Проверка наличия данных if (string.IsNullOrEmpty(imageClass.Path) || string.IsNullOrEmpty(imageClass.Title) || imageClass.Files.Count == 0) { throw new Exception("Не все данные заполнены"); @@ -58,22 +57,16 @@ namespace WinFormsLibrary // Добавляем изображения mainPart.Document.Append(body); - foreach (string imagePath in imageClass.Files) - { - if (File.Exists(imagePath)) - { - ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg); - using (FileStream stream = new FileStream(imagePath, FileMode.Open)) - { - imagePart.FeedData(stream); - } - AddImageToBody(wordDocument, mainPart.GetIdOfPart(imagePart)); - } - else + foreach (byte[] imageData in imageClass.Files) + { + ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg); + using (MemoryStream stream = new MemoryStream(imageData)) { - Console.WriteLine($"Изображение '{imagePath}' не найдено."); + imagePart.FeedData(stream); } + + AddImageToBody(wordDocument, mainPart.GetIdOfPart(imagePart)); } Console.WriteLine($"Word-документ успешно создан в файле '{imageClass.Path}'."); @@ -82,66 +75,67 @@ namespace WinFormsLibrary private void AddImageToBody(WordprocessingDocument wordDoc, string relationshipId) { - var element = - new Drawing( - new DW.Inline( - new DW.Extent() { Cx = 1990000L, Cy = 1792000L }, - new DW.EffectExtent() - { - LeftEdge = 0L, - TopEdge = 0L, - RightEdge = 0L, - BottomEdge = 0L - }, - new DW.DocProperties() - { - Id = (UInt32Value)1U, - Name = "Picture 1" - }, - new DW.NonVisualGraphicFrameDrawingProperties( - new A.GraphicFrameLocks() { NoChangeAspect = true }), - new A.Graphic( - new A.GraphicData( - new PIC.Picture( - new PIC.NonVisualPictureProperties( - new PIC.NonVisualDrawingProperties() - { - Id = (UInt32Value)0U, - Name = "New Bitmap Image.jpg" - }, - new PIC.NonVisualPictureDrawingProperties()), - new PIC.BlipFill( - new A.Blip( - new A.BlipExtensionList( - new A.BlipExtension() - { - Uri = - "{28A0092B-C50C-407E-A947-70E740481C1C}" - }) - ) - { - Embed = relationshipId, - CompressionState = - A.BlipCompressionValues.Print - }, - new A.Stretch( - new A.FillRectangle())), - new PIC.ShapeProperties( - new A.Transform2D( - new A.Offset() { X = 0L, Y = 0L }, - new A.Extents() { Cx = 990000L, Cy = 792000L }), - new A.PresetGeometry( - new A.AdjustValueList() - ) { Preset = A.ShapeTypeValues.Rectangle })) - ) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" }) - ) - { - DistanceFromTop = (UInt32Value)0U, - DistanceFromBottom = (UInt32Value)0U, - DistanceFromLeft = (UInt32Value)0U, - DistanceFromRight = (UInt32Value)0U, - EditId = "50D07946" - }); + var element = new Drawing( + new DW.Inline( + new DW.Extent() { Cx = 1990000L, Cy = 1792000L }, + new DW.EffectExtent() + { + LeftEdge = 0L, + TopEdge = 0L, + RightEdge = 0L, + BottomEdge = 0L + }, + new DW.DocProperties() + { + Id = (UInt32Value)1U, + Name = "Picture 1" + }, + new DW.NonVisualGraphicFrameDrawingProperties( + new A.GraphicFrameLocks() { NoChangeAspect = true }), + new A.Graphic( + new A.GraphicData( + new PIC.Picture( + new PIC.NonVisualPictureProperties( + new PIC.NonVisualDrawingProperties() + { + Id = (UInt32Value)0U, + Name = "New Bitmap Image.jpg" + }, + new PIC.NonVisualPictureDrawingProperties()), + new PIC.BlipFill( + new A.Blip( + new A.BlipExtensionList( + new A.BlipExtension() + { + Uri = + "{28A0092B-C50C-407E-A947-70E740481C1C}" + }) + ) + { + Embed = relationshipId, + CompressionState = + A.BlipCompressionValues.Print + }, + new A.Stretch( + new A.FillRectangle())), + new PIC.ShapeProperties( + new A.Transform2D( + new A.Offset() { X = 0L, Y = 0L }, + new A.Extents() { Cx = 990000L, Cy = 792000L }), + new A.PresetGeometry( + new A.AdjustValueList() + ) + { Preset = A.ShapeTypeValues.Rectangle })) + ) + { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" }) + ) + { + DistanceFromTop = (UInt32Value)0U, + DistanceFromBottom = (UInt32Value)0U, + DistanceFromLeft = (UInt32Value)0U, + DistanceFromRight = (UInt32Value)0U, + EditId = "50D07946" + }); // Append the reference to the body. The element should be in // a DocumentFormat.OpenXml.Wordprocessing.Run. diff --git a/WinFormsProject/WinFormsLibrary/SupportClasses/ImageClass.cs b/WinFormsProject/WinFormsLibrary/SupportClasses/ImageClass.cs index af0af8c..70b3944 100644 --- a/WinFormsProject/WinFormsLibrary/SupportClasses/ImageClass.cs +++ b/WinFormsProject/WinFormsLibrary/SupportClasses/ImageClass.cs @@ -10,13 +10,13 @@ namespace WinFormsLibrary.SupportClasses { private string path; private string title; - private List files; + private List files; public string Path { get { return path; } set { path = value; } } public string Title { get { return title; } set { title = value; } } - public List Files { get { return files; } set { files = value; } } + public List Files { get { return files; } set { files = value; } } public ImageClass() { } - public ImageClass(string filePath, string documentTitle, List textData) + public ImageClass(string filePath, string documentTitle, List textData) { Path = filePath; Title = documentTitle;