diff --git a/Atelier/Atelier/Atelier.csproj b/Atelier/Atelier/Atelier.csproj index b57c89e..ebb86e7 100644 --- a/Atelier/Atelier/Atelier.csproj +++ b/Atelier/Atelier/Atelier.csproj @@ -6,6 +6,30 @@ enable true enable + preview + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + \ No newline at end of file diff --git a/Atelier/Atelier/Entities/Client.cs b/Atelier/Atelier/Entities/Client.cs new file mode 100644 index 0000000..d981a91 --- /dev/null +++ b/Atelier/Atelier/Entities/Client.cs @@ -0,0 +1,19 @@ +public class Client +{ + public int Id { get; private set; } + public string FirstName { get; private set; } = string.Empty; + public string LastName { get; private set; } = string.Empty; + public string ContactInformation { get; private set; } = string.Empty; + public static Client CreateEntity(int id, string firstName, string + lastName, string contactInformation) + { + return new Client + { + Id = id, + FirstName = firstName ?? string.Empty, + LastName = lastName ?? string.Empty, + ContactInformation = contactInformation ?? string.Empty, + + }; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Entities/Enums/Color.cs b/Atelier/Atelier/Entities/Enums/Color.cs new file mode 100644 index 0000000..d5f5d1d --- /dev/null +++ b/Atelier/Atelier/Entities/Enums/Color.cs @@ -0,0 +1,13 @@ +public enum Color +{ + None = 0, + Black = 1, + Red = 2, + Blue = 3, + Green = 4, + Grey = 5, + Yellow = 6, + Pink = 7, + White = 8, + Purple = 9, +} diff --git a/Atelier/Atelier/Entities/Enums/FabricType.cs b/Atelier/Atelier/Entities/Enums/FabricType.cs new file mode 100644 index 0000000..8c2aa75 --- /dev/null +++ b/Atelier/Atelier/Entities/Enums/FabricType.cs @@ -0,0 +1,9 @@ +[Flags] +public enum FabricType +{ + None = 0, + Cotton = 1, + Silk = 2, + Linen = 4, + Polyester = 8 +} diff --git a/Atelier/Atelier/Entities/Enums/ModelType.cs b/Atelier/Atelier/Entities/Enums/ModelType.cs new file mode 100644 index 0000000..83557b2 --- /dev/null +++ b/Atelier/Atelier/Entities/Enums/ModelType.cs @@ -0,0 +1,9 @@ +[Flags] +public enum ModelType +{ + None = 0, + Pants = 1, + Skirt = 2, + Dress = 4, + Jacket = 8 +} diff --git a/Atelier/Atelier/Entities/Enums/Status.cs b/Atelier/Atelier/Entities/Enums/Status.cs new file mode 100644 index 0000000..95c35b1 --- /dev/null +++ b/Atelier/Atelier/Entities/Enums/Status.cs @@ -0,0 +1,7 @@ +public enum Status +{ + None = 0, + Waiting = 1, + InProcess = 2, + Done = 3 +} diff --git a/Atelier/Atelier/Entities/Fabric.cs b/Atelier/Atelier/Entities/Fabric.cs new file mode 100644 index 0000000..fb6e783 --- /dev/null +++ b/Atelier/Atelier/Entities/Fabric.cs @@ -0,0 +1,18 @@ +public class Fabric +{ + public int Id { get; private set; } + public FabricType FabricType { get; private set; } + public Color Color { get; private set; } + public double Metrage { get; private set; } + public static Fabric CreateEntity(int id, FabricType fabricType, Color color, double metrage) + { + return new Fabric + { + Id = id, + FabricType = fabricType, + Color = color, + Metrage = metrage, + + }; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Entities/FabricModel.cs b/Atelier/Atelier/Entities/FabricModel.cs new file mode 100644 index 0000000..442ad77 --- /dev/null +++ b/Atelier/Atelier/Entities/FabricModel.cs @@ -0,0 +1,15 @@ +public class FabricModel +{ + public int FabricId { get; private set; } + public int ModelId { get; private set; } + public int Count { get; private set; } + public static FabricModel CreateElement(int fabricId, int modelId, int count) + { + return new FabricModel + { + FabricId = fabricId, + ModelId = modelId, + Count = count + }; + } +} diff --git a/Atelier/Atelier/Entities/Model.cs b/Atelier/Atelier/Entities/Model.cs new file mode 100644 index 0000000..11fe15a --- /dev/null +++ b/Atelier/Atelier/Entities/Model.cs @@ -0,0 +1,21 @@ +using Microsoft.VisualBasic.FileIO; + +public class Model +{ + public int Id { get; private set; } + public ModelType ModelType { get; private set; } + public double Price { get; private set; } + public IEnumerable FabricModel { get;private set;} = []; + + public static Model CreateEntity(int id, ModelType modelType,double price, IEnumerable fabricModel) + { + return new Model + { + Id = id, + ModelType = modelType, + Price = price, + FabricModel = fabricModel + + }; + } +} diff --git a/Atelier/Atelier/Entities/ModelOrder.cs b/Atelier/Atelier/Entities/ModelOrder.cs new file mode 100644 index 0000000..d409dde --- /dev/null +++ b/Atelier/Atelier/Entities/ModelOrder.cs @@ -0,0 +1,15 @@ +public class ModelOrder +{ + public int OrderId { get; private set; } + public int ModelId { get; private set; } + public int Count { get; private set; } + public static ModelOrder CreateElement(int orderId, int modelId, int count) + { + return new ModelOrder + { + OrderId = orderId, + ModelId = modelId, + Count = count + }; + } +} diff --git a/Atelier/Atelier/Entities/Order.cs b/Atelier/Atelier/Entities/Order.cs new file mode 100644 index 0000000..360d3c5 --- /dev/null +++ b/Atelier/Atelier/Entities/Order.cs @@ -0,0 +1,22 @@ +public class Order +{ + public int Id { get; private set; } + public DateTime Date { get; private set; } + public Status Status { get; private set; } + public int ClientId { get; private set; } + public FabricType FabricType { get; private set; } + public IEnumerable ModelOrder { get; private set; } = []; + + public static Order CreateOperation(int id,DateTime date, Status status, int clientId, IEnumerable modelOrder) + { + return new Order + { + Id = id, + Date = DateTime.Now, + Status = status, + ClientId = clientId, + ModelOrder = modelOrder + + }; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Entities/Storage.cs b/Atelier/Atelier/Entities/Storage.cs new file mode 100644 index 0000000..16f8b25 --- /dev/null +++ b/Atelier/Atelier/Entities/Storage.cs @@ -0,0 +1,17 @@ +public class Storage +{ + public int Id { get; private set; } + public double StockMetrage { get; private set; } + public int FabricId { get; private set; } + + public static Storage CreateOperation(int id, double stockMetrage, int fabricId) + { + return new Storage + { + Id = id, + StockMetrage = stockMetrage, + FabricId = fabricId + + }; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Form1.Designer.cs b/Atelier/Atelier/Form1.Designer.cs deleted file mode 100644 index 2349e22..0000000 --- a/Atelier/Atelier/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace Atelier -{ - 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/Atelier/Atelier/Form1.cs b/Atelier/Atelier/Form1.cs deleted file mode 100644 index e84fdb4..0000000 --- a/Atelier/Atelier/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Atelier -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/Atelier/Atelier/FormAtelier.Designer.cs b/Atelier/Atelier/FormAtelier.Designer.cs new file mode 100644 index 0000000..504cdda --- /dev/null +++ b/Atelier/Atelier/FormAtelier.Designer.cs @@ -0,0 +1,139 @@ +namespace Atelier +{ + partial class FormAtelier + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAtelier)); + menuStrip = new MenuStrip(); + справочникиToolStripMenuItem = new ToolStripMenuItem(); + ClientsToolStripMenuItem = new ToolStripMenuItem(); + ModelsToolStripMenuItem = new ToolStripMenuItem(); + FabricsToolStripMenuItem1 = new ToolStripMenuItem(); + операцииToolStripMenuItem = new ToolStripMenuItem(); + OrdersToolStripMenuItem = new ToolStripMenuItem(); + StoragesToolStripMenuItem = new ToolStripMenuItem(); + отчётыToolStripMenuItem = new ToolStripMenuItem(); + menuStrip.SuspendLayout(); + SuspendLayout(); + // + // menuStrip + // + menuStrip.ImageScalingSize = new Size(20, 20); + menuStrip.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчётыToolStripMenuItem }); + menuStrip.Location = new Point(0, 0); + menuStrip.Name = "menuStrip"; + menuStrip.Size = new Size(817, 28); + menuStrip.TabIndex = 0; + menuStrip.Text = "menuStrip1"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ClientsToolStripMenuItem, ModelsToolStripMenuItem, FabricsToolStripMenuItem1 }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(117, 24); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // ClientsToolStripMenuItem + // + ClientsToolStripMenuItem.Name = "ClientsToolStripMenuItem"; + ClientsToolStripMenuItem.Size = new Size(224, 26); + ClientsToolStripMenuItem.Text = "Клиент"; + ClientsToolStripMenuItem.Click += ClientsToolStripMenuItem_Click_1; + // + // ModelsToolStripMenuItem + // + ModelsToolStripMenuItem.Name = "ModelsToolStripMenuItem"; + ModelsToolStripMenuItem.Size = new Size(224, 26); + ModelsToolStripMenuItem.Text = "Модель"; + ModelsToolStripMenuItem.Click += ModelsToolStripMenuItem_Click_1; + // + // FabricsToolStripMenuItem1 + // + FabricsToolStripMenuItem1.Name = "FabricsToolStripMenuItem1"; + FabricsToolStripMenuItem1.Size = new Size(224, 26); + FabricsToolStripMenuItem1.Text = "Ткань"; + FabricsToolStripMenuItem1.Click += FabricsToolStripMenuItem1_Click; + // + // операцииToolStripMenuItem + // + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { OrdersToolStripMenuItem, StoragesToolStripMenuItem }); + операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; + операцииToolStripMenuItem.Size = new Size(95, 24); + операцииToolStripMenuItem.Text = "Операции"; + // + // OrdersToolStripMenuItem + // + OrdersToolStripMenuItem.Name = "OrdersToolStripMenuItem"; + OrdersToolStripMenuItem.Size = new Size(224, 26); + OrdersToolStripMenuItem.Text = "Заказ"; + OrdersToolStripMenuItem.Click += OrdersToolStripMenuItem_Click_1; + // + // StoragesToolStripMenuItem + // + StoragesToolStripMenuItem.Name = "StoragesToolStripMenuItem"; + StoragesToolStripMenuItem.Size = new Size(224, 26); + StoragesToolStripMenuItem.Text = "Склад"; + StoragesToolStripMenuItem.Click += StoragesToolStripMenuItem_Click_1; + // + // отчётыToolStripMenuItem + // + отчётыToolStripMenuItem.Name = "отчётыToolStripMenuItem"; + отчётыToolStripMenuItem.Size = new Size(73, 24); + отчётыToolStripMenuItem.Text = "Отчёты"; + // + // FormAtelier + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = (Image)resources.GetObject("$this.BackgroundImage"); + BackgroundImageLayout = ImageLayout.Zoom; + ClientSize = new Size(817, 467); + Controls.Add(menuStrip); + MainMenuStrip = menuStrip; + Name = "FormAtelier"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Ателье"; + menuStrip.ResumeLayout(false); + menuStrip.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip; + private ToolStripMenuItem справочникиToolStripMenuItem; + private ToolStripMenuItem ClientsToolStripMenuItem; + private ToolStripMenuItem операцииToolStripMenuItem; + private ToolStripMenuItem отчётыToolStripMenuItem; + private ToolStripMenuItem ModelsToolStripMenuItem; + private ToolStripMenuItem FabricsToolStripMenuItem1; + private ToolStripMenuItem OrdersToolStripMenuItem; + private ToolStripMenuItem StoragesToolStripMenuItem; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/FormAtelier.cs b/Atelier/Atelier/FormAtelier.cs new file mode 100644 index 0000000..4c082d0 --- /dev/null +++ b/Atelier/Atelier/FormAtelier.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; +using Atelier.Forms; + +namespace Atelier +{ + public partial class FormAtelier : Form + { + private readonly IUnityContainer _container; + public FormAtelier(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + } + + + private void ClientsToolStripMenuItem_Click_1(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ModelsToolStripMenuItem_Click_1(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void FabricsToolStripMenuItem1_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void OrdersToolStripMenuItem_Click_1(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void StoragesToolStripMenuItem_Click_1(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/Atelier/Atelier/FormAtelier.resx b/Atelier/Atelier/FormAtelier.resx new file mode 100644 index 0000000..df019d5 --- /dev/null +++ b/Atelier/Atelier/FormAtelier.resx @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAEIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AA0++qusAAEAIAUqecAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+mwgwgcuoM64AAwwYukAAAAAAAAAAAAAA + AAAAAAAAAAAEe8AAAAAQw+c0gAAAAA0+AAAAAAAAAAAAAAAAAAAAAAAAAA+gAAAAAAMwqkMMMAAAQ+4A + AAAAAAAAAAAAAAAAAAAAAAA+IAAAAAAc4w0A2ysAAAAE6AAAAAAAAAAAAAAAAAAAAAAAQ+IAAAAAUe+Q + AQAwAAAAAUmIAAAAAAAAAAAAAAAAAAAAAAA2gAAAAce6wAAAAAAAAAAU+AAAAAAAAAAAAAAAAAAAAAAA + A8gAAAEeugAAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAwuIAc+uAAAAAAAAAAAAA+oAAAAAAAAAAA + AAAAAAAAAAAAAQY+M++gAAAAAAAAAAAE02gAAAAAAAAAAAAAAAAAAAAAAAAAQa+0gAAAAAAAAAAAEe+g + AAAAAAAAAAAAAAAAAAAAAAAAAAEW40IAAAAAAAAAAA8+gAAAAAAAAAAAAAAAAAAAAAAAAAAEEwwa+IAA + AAAAAAE8+gAAAAAAAAAAAAAAAAAAAAAAAAAAA0wAAQa+IAAAAAAE8+gAAAAAAAAAAAAAAAAAAAAAAAAA + AAAQAAAAQa+IAAAAE8+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQa+IAAEu+gAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAQa+IEk+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQa++6AAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAe6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + + + \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormClient.Designer.cs b/Atelier/Atelier/Forms/FormClient.Designer.cs new file mode 100644 index 0000000..609eab6 --- /dev/null +++ b/Atelier/Atelier/Forms/FormClient.Designer.cs @@ -0,0 +1,141 @@ +namespace Atelier.Forms +{ + partial class FormClient + { + /// + /// 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() + { + textBoxFirstName = new TextBox(); + labelFirstName = new Label(); + textBoxLastName = new TextBox(); + labelLastName = new Label(); + labelContactInf = new Label(); + textBoxContactInf = new TextBox(); + buttonSave = new Button(); + buttonCancel = new Button(); + SuspendLayout(); + // + // textBoxFirstName + // + textBoxFirstName.Location = new Point(171, 42); + textBoxFirstName.Name = "textBoxFirstName"; + textBoxFirstName.Size = new Size(235, 27); + textBoxFirstName.TabIndex = 0; + // + // labelFirstName + // + labelFirstName.AutoSize = true; + labelFirstName.Location = new Point(12, 49); + labelFirstName.Name = "labelFirstName"; + labelFirstName.Size = new Size(101, 20); + labelFirstName.TabIndex = 1; + labelFirstName.Text = "Имя клиента:"; + + // + // textBoxLastName + // + textBoxLastName.Location = new Point(171, 104); + textBoxLastName.Name = "textBoxLastName"; + textBoxLastName.Size = new Size(235, 27); + textBoxLastName.TabIndex = 2; + // + // labelLastName + // + labelLastName.AutoSize = true; + labelLastName.Location = new Point(12, 111); + labelLastName.Name = "labelLastName"; + labelLastName.Size = new Size(135, 20); + labelLastName.TabIndex = 3; + labelLastName.Text = "Фамилия клиента:"; + // + // labelContactInf + // + labelContactInf.AutoSize = true; + labelContactInf.Location = new Point(114, 178); + labelContactInf.Name = "labelContactInf"; + labelContactInf.Size = new Size(186, 20); + labelContactInf.TabIndex = 4; + labelContactInf.Text = "Контактная информация:"; + // + // textBoxContactInf + // + textBoxContactInf.Location = new Point(59, 221); + textBoxContactInf.Name = "textBoxContactInf"; + textBoxContactInf.Size = new Size(306, 27); + textBoxContactInf.TabIndex = 5; + // + // buttonSave + // + buttonSave.Location = new Point(95, 282); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 6; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(223, 282); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 7; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // FormClient + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(444, 348); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(textBoxContactInf); + Controls.Add(labelContactInf); + Controls.Add(labelLastName); + Controls.Add(textBoxLastName); + Controls.Add(labelFirstName); + Controls.Add(textBoxFirstName); + Name = "FormClient"; + StartPosition = FormStartPosition.CenterParent; + Text = "Клиент"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private TextBox textBoxFirstName; + private Label labelFirstName; + private TextBox textBoxLastName; + private Label labelLastName; + private Label labelContactInf; + private TextBox textBoxContactInf; + private Button buttonSave; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormClient.cs b/Atelier/Atelier/Forms/FormClient.cs new file mode 100644 index 0000000..b841928 --- /dev/null +++ b/Atelier/Atelier/Forms/FormClient.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Atelier.Forms +{ + public partial class FormClient : Form + { + private readonly IClientRepository _clientRepository; + private int? _clientId; + public int Id + { + set + { + try + { + var client = + _clientRepository.ReadClientById(value); + if (client == null) + { + throw new + InvalidDataException(nameof(client)); + } + textBoxFirstName.Text = client.FirstName; + textBoxLastName.Text = client.LastName; + textBoxContactInf.Text = client.ContactInformation; + _clientId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormClient(IClientRepository clientRepository) + { + InitializeComponent(); + _clientRepository = clientRepository ?? + throw new + ArgumentNullException(nameof(clientRepository)); + } + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxFirstName.Text) || string.IsNullOrWhiteSpace(textBoxLastName.Text) || string.IsNullOrWhiteSpace(textBoxContactInf.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_clientId.HasValue) + { + _clientRepository.UpdateClient(CreateClient(_clientId.Value)); + } + else + { + _clientRepository.CreateClient(CreateClient(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + private Client CreateClient(int id) => Client.CreateEntity(id, textBoxFirstName.Text, textBoxLastName.Text, textBoxContactInf.Text); + } +} + + + diff --git a/Atelier/Atelier/Forms/FormClient.resx b/Atelier/Atelier/Forms/FormClient.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/Atelier/Atelier/Forms/FormClient.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/Atelier/Atelier/Forms/FormClients.Designer.cs b/Atelier/Atelier/Forms/FormClients.Designer.cs new file mode 100644 index 0000000..46e38d7 --- /dev/null +++ b/Atelier/Atelier/Forms/FormClients.Designer.cs @@ -0,0 +1,126 @@ +namespace Atelier.Forms +{ + partial class FormClients + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormClients)); + dataGridView1 = new DataGridView(); + panel1 = new Panel(); + buttonDel = new Button(); + buttonUpd = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.RowHeadersWidth = 51; + dataGridView1.RowTemplate.Height = 29; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(1001, 604); + dataGridView1.TabIndex = 0; + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(1001, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(133, 604); + panel1.TabIndex = 1; + // + // buttonDel + // + buttonDel.Image = (Image)resources.GetObject("buttonDel.Image"); + buttonDel.Location = new Point(14, 204); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(107, 88); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonUpd + // + buttonUpd.Image = (Image)resources.GetObject("buttonUpd.Image"); + buttonUpd.Location = new Point(14, 107); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(107, 91); + buttonUpd.TabIndex = 1; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonAdd + // + buttonAdd.Image = (Image)resources.GetObject("buttonAdd.Image"); + buttonAdd.Location = new Point(14, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(107, 89); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormClients + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1134, 604); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormClients"; + StartPosition = FormStartPosition.CenterParent; + Text = "Клиенты"; + Load += FormClients_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView1; + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormClients.cs b/Atelier/Atelier/Forms/FormClients.cs new file mode 100644 index 0000000..775a98c --- /dev/null +++ b/Atelier/Atelier/Forms/FormClients.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; +using Atelier.Forms; + +namespace Atelier.Forms +{ + public partial class FormClients : Form + { + private readonly IUnityContainer _container; + private readonly IClientRepository _clientRepository; + public FormClients(IUnityContainer container, IClientRepository clientRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _clientRepository = clientRepository ?? + throw new + ArgumentNullException(nameof(clientRepository)); + } + private void FormClients_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _clientRepository.DeleteClient(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView1.DataSource = _clientRepository.ReadClients(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + + + } +} + + + + + + + diff --git a/Atelier/Atelier/Forms/FormClients.resx b/Atelier/Atelier/Forms/FormClients.resx new file mode 100644 index 0000000..7cb8229 --- /dev/null +++ b/Atelier/Atelier/Forms/FormClients.resx @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAABNVJREFUeF7tnL9uXHUQhZ2OKk8ANRJ5AHipNInXgCFKyuD1H/ECZJ11Eh7AViCP + ELeJaCgQHV2gIIULc0cZ0KfRaDTaO2Ph63ukrzg+oxnOzxvT7dasWbNmzbpafX93fXtve/XTcnt1sVwc + X47iw46XslPXT1/LxerbvcXqxcOHTz7SH20s2TE84o9728cP9EfT1/B4b5f3n36udrQOdp58sbc4/kXt + tPV4Z3VnKPv75dblLf3RaMmu4Zfy2/L++jP90XQ1/L16NPz921dbpuHPwoHsVjtdVf/z/Vf/63/G+/d+ + +ORo99nL/Z31+//+7zdRpOPQ9efvFutPtf44yeMdfn3y7vTF+cWb8z8uf33716SRjmdD1/0vn/4p3fUZ + Npd88mShd2zKnD4/vzjaPTnTZ9hcB8NH+iZ88izSefgUvtdn2Fzyd8E7cBOQ7voMm2t+wJGaH3CkZMlN + Rp+hTrLU+21NgZYHs5ofcKTmBxyp+QFHyj5g9KDZx97kl1Kx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8o + PYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3Z + J+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZ + eK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U + 7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpI + do5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0 + JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWaf + vKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bi + tWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx + 22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZ + OVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKT + KCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3y + jtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nX + mn3apOx1YX7AkVzJA8q3m03xq6DevJavelr/rTX7dLh78kq+mMv7j7jOnD5/fXH0zbNTrdkn+V49+Wo4 + ecQpfBLlkyePd/jV+t3jnfXHWrNXH76Q8eRMvt1M/m5cZ6SDfPKu7PFmzZo1azLa2voHHNxQxvmbf3YA + AAAASUVORK5CYII= + + + + + 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 + + + \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormFabric.Designer.cs b/Atelier/Atelier/Forms/FormFabric.Designer.cs new file mode 100644 index 0000000..3d824e1 --- /dev/null +++ b/Atelier/Atelier/Forms/FormFabric.Designer.cs @@ -0,0 +1,148 @@ +namespace Atelier.Forms +{ + partial class FormFabric + { + /// + /// 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() + { + labelFabric = new Label(); + labelColor = new Label(); + labelMetrage = new Label(); + checkedListBoxColor = new CheckedListBox(); + comboBoxFabric = new ComboBox(); + numericUpDownMetrage = new NumericUpDown(); + buttonSave = new Button(); + buttonCancel = new Button(); + ((System.ComponentModel.ISupportInitialize)numericUpDownMetrage).BeginInit(); + SuspendLayout(); + // + // labelFabric + // + labelFabric.AutoSize = true; + labelFabric.Location = new Point(60, 33); + labelFabric.Name = "labelFabric"; + labelFabric.Size = new Size(52, 20); + labelFabric.TabIndex = 0; + labelFabric.Text = "Ткань:"; + // + // labelColor + // + labelColor.AutoSize = true; + labelColor.Location = new Point(67, 77); + labelColor.Name = "labelColor"; + labelColor.Size = new Size(45, 20); + labelColor.TabIndex = 1; + labelColor.Text = "Цвет:"; + // + // labelMetrage + // + labelMetrage.AutoSize = true; + labelMetrage.Location = new Point(55, 229); + labelMetrage.Name = "labelMetrage"; + labelMetrage.Size = new Size(67, 20); + labelMetrage.TabIndex = 2; + labelMetrage.Text = "Метраж:"; + // + // checkedListBoxColor + // + checkedListBoxColor.FormattingEnabled = true; + checkedListBoxColor.Location = new Point(146, 77); + checkedListBoxColor.Name = "checkedListBoxColor"; + checkedListBoxColor.Size = new Size(150, 114); + checkedListBoxColor.TabIndex = 3; + // + // comboBoxFabric + // + comboBoxFabric.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxFabric.FormattingEnabled = true; + comboBoxFabric.Location = new Point(145, 25); + comboBoxFabric.Name = "comboBoxFabric"; + comboBoxFabric.Size = new Size(151, 28); + comboBoxFabric.TabIndex = 4; + // + // numericUpDownMetrage + // + numericUpDownMetrage.DecimalPlaces = 2; + numericUpDownMetrage.Location = new Point(146, 229); + numericUpDownMetrage.Minimum = new decimal(new int[] { 5, 0, 0, 65536 }); + numericUpDownMetrage.Name = "numericUpDownMetrage"; + numericUpDownMetrage.Size = new Size(150, 27); + numericUpDownMetrage.TabIndex = 5; + numericUpDownMetrage.Value = new decimal(new int[] { 5, 0, 0, 65536 }); + // + // buttonSave + // + buttonSave.Location = new Point(67, 296); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 6; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(215, 296); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 7; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // FormFabric + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(367, 352); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(numericUpDownMetrage); + Controls.Add(comboBoxFabric); + Controls.Add(checkedListBoxColor); + Controls.Add(labelMetrage); + Controls.Add(labelColor); + Controls.Add(labelFabric); + Name = "FormFabric"; + StartPosition = FormStartPosition.CenterParent; + Text = "Ткань"; + ((System.ComponentModel.ISupportInitialize)numericUpDownMetrage).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelFabric; + private Label labelColor; + private Label labelMetrage; + private CheckedListBox checkedListBoxColor; + private ComboBox comboBoxFabric; + private NumericUpDown numericUpDownMetrage; + private Button buttonSave; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormFabric.cs b/Atelier/Atelier/Forms/FormFabric.cs new file mode 100644 index 0000000..27bdfa4 --- /dev/null +++ b/Atelier/Atelier/Forms/FormFabric.cs @@ -0,0 +1,105 @@ +using Microsoft.VisualBasic.FileIO; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Atelier.Forms +{ + public partial class FormFabric : Form + { + private readonly IFabricRepository _fabricRepository; + private int? _fabricId; + + public FormFabric(IFabricRepository fabricRepository) + { + InitializeComponent(); + _fabricRepository = fabricRepository ?? throw new ArgumentNullException(nameof(fabricRepository)); + comboBoxFabric.DataSource = Enum.GetValues(typeof(FabricType)); + + // Инициализация CheckedListBox + foreach (Color elem in Enum.GetValues(typeof(Color))) + { + checkedListBoxColor.Items.Add(elem); + } + + // Отладочный вывод + foreach (var item in checkedListBoxColor.Items) + { + Console.WriteLine(item); + } + } + + public int Id + { + set + { + try + { + var fabric = _fabricRepository.ReadFabricById(value); + if (fabric == null) + { + throw new InvalidDataException(nameof(fabric)); + } + + comboBoxFabric.SelectedItem = fabric.FabricType; + foreach (Color elem in Enum.GetValues(typeof(Color))) + { + if ((elem & fabric.Color) != 0) + { + checkedListBoxColor.SetItemChecked(checkedListBoxColor.Items.IndexOf(elem), true); + } + } + numericUpDownMetrage.Value = (decimal)fabric.Metrage; + + _fabricId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxFabric.SelectedIndex < 0.50 || checkedListBoxColor.CheckedItems.Count == 0) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_fabricId.HasValue) + { + _fabricRepository.UpdateFabric(CreateFabric(_fabricId.Value)); + } + else + { + _fabricRepository.CreateFabric(CreateFabric(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + private Fabric CreateFabric(int id) + { + Color color = Color.None; + foreach (var elem in checkedListBoxColor.CheckedItems) + { + color |= (Color)elem; + } + return Fabric.CreateEntity(id, (FabricType)comboBoxFabric.SelectedItem!, color, Convert.ToDouble(numericUpDownMetrage.Value)); ; + } + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormFabric.resx b/Atelier/Atelier/Forms/FormFabric.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/Atelier/Atelier/Forms/FormFabric.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/Atelier/Atelier/Forms/FormFabrics.Designer.cs b/Atelier/Atelier/Forms/FormFabrics.Designer.cs new file mode 100644 index 0000000..2087bdd --- /dev/null +++ b/Atelier/Atelier/Forms/FormFabrics.Designer.cs @@ -0,0 +1,126 @@ +namespace Atelier.Forms +{ + partial class FormFabrics + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormFabrics)); + dataGridView1 = new DataGridView(); + panel1 = new Panel(); + buttonDel = new Button(); + buttonUpd = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.RowHeadersWidth = 51; + dataGridView1.RowTemplate.Height = 29; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(1001, 604); + dataGridView1.TabIndex = 0; + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(1001, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(133, 604); + panel1.TabIndex = 1; + // + // buttonDel + // + buttonDel.Image = (Image)resources.GetObject("buttonDel.Image"); + buttonDel.Location = new Point(14, 204); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(107, 88); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonUpd + // + buttonUpd.Image = (Image)resources.GetObject("buttonUpd.Image"); + buttonUpd.Location = new Point(14, 107); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(107, 91); + buttonUpd.TabIndex = 1; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonAdd + // + buttonAdd.Image = (Image)resources.GetObject("buttonAdd.Image"); + buttonAdd.Location = new Point(14, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(107, 89); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormFabrics + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1134, 604); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormFabrics"; + StartPosition = FormStartPosition.CenterParent; + Text = "Ткани"; + Load += FormFabrics_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView1; + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormFabrics.cs b/Atelier/Atelier/Forms/FormFabrics.cs new file mode 100644 index 0000000..aefec2d --- /dev/null +++ b/Atelier/Atelier/Forms/FormFabrics.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace Atelier.Forms +{ + public partial class FormFabrics : Form + { + private readonly IUnityContainer _container; + private readonly IFabricRepository _fabricRepository; + public FormFabrics(IUnityContainer container, IFabricRepository fabricRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _fabricRepository = fabricRepository ?? + throw new + ArgumentNullException(nameof(fabricRepository)); + } + private void FormFabrics_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _fabricRepository.DeleteFabric(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView1.DataSource = _fabricRepository.ReadFabrics(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormFabrics.resx b/Atelier/Atelier/Forms/FormFabrics.resx new file mode 100644 index 0000000..ad98e8b --- /dev/null +++ b/Atelier/Atelier/Forms/FormFabrics.resx @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DgAACw4BQL7hQQAABNVJREFUeF7tnL9uXHUQhZ2OKk8ANRJ5AHipNInXgCFKyuD1H/ECZJ11Eh7AViCP + ELeJaCgQHV2gIIULc0cZ0KfRaDTaO2Ph63ukrzg+oxnOzxvT7dasWbNmzbpafX93fXtve/XTcnt1sVwc + X47iw46XslPXT1/LxerbvcXqxcOHTz7SH20s2TE84o9728cP9EfT1/B4b5f3n36udrQOdp58sbc4/kXt + tPV4Z3VnKPv75dblLf3RaMmu4Zfy2/L++jP90XQ1/L16NPz921dbpuHPwoHsVjtdVf/z/Vf/63/G+/d+ + +ORo99nL/Z31+//+7zdRpOPQ9efvFutPtf44yeMdfn3y7vTF+cWb8z8uf33716SRjmdD1/0vn/4p3fUZ + Npd88mShd2zKnD4/vzjaPTnTZ9hcB8NH+iZ88izSefgUvtdn2Fzyd8E7cBOQ7voMm2t+wJGaH3CkZMlN + Rp+hTrLU+21NgZYHs5ofcKTmBxyp+QFHyj5g9KDZx97kl1Kx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8o + PYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3Z + J+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZ + eK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U + 7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpI + do5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0 + JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWaf + vKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bi + tWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx + 22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZ + OVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKT + KCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3y + jtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nX + mn3apOx1YX7AkVzJA8q3m03xq6DevJavelr/rTX7dLh78kq+mMv7j7jOnD5/fXH0zbNTrdkn+V49+Wo4 + ecQpfBLlkyePd/jV+t3jnfXHWrNXH76Q8eRMvt1M/m5cZ6SDfPKu7PFmzZo1azLa2voHHNxQxvmbf3YA + AAAASUVORK5CYII= + + + + + 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 + + + \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormModel.Designer.cs b/Atelier/Atelier/Forms/FormModel.Designer.cs new file mode 100644 index 0000000..6c57b3d --- /dev/null +++ b/Atelier/Atelier/Forms/FormModel.Designer.cs @@ -0,0 +1,182 @@ +namespace Atelier.Forms +{ + partial class FormModel + { + /// + /// 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() + { + labelModel = new Label(); + labelPrice = new Label(); + comboBoxModel = new ComboBox(); + numericUpDownPrice = new NumericUpDown(); + buttonSave = new Button(); + buttonCancel = new Button(); + groupBox1 = new GroupBox(); + dataGridView1 = new DataGridView(); + ColumnFabric = new DataGridViewComboBoxColumn(); + ColumnCount = new DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit(); + groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // labelModel + // + labelModel.AutoSize = true; + labelModel.Location = new Point(30, 52); + labelModel.Name = "labelModel"; + labelModel.Size = new Size(66, 20); + labelModel.TabIndex = 0; + labelModel.Text = "Модель:"; + // + // labelPrice + // + labelPrice.AutoSize = true; + labelPrice.Location = new Point(48, 118); + labelPrice.Name = "labelPrice"; + labelPrice.Size = new Size(48, 20); + labelPrice.TabIndex = 1; + labelPrice.Text = "Цена:"; + // + // comboBoxModel + // + comboBoxModel.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxModel.FormattingEnabled = true; + comboBoxModel.Location = new Point(119, 52); + comboBoxModel.Name = "comboBoxModel"; + comboBoxModel.Size = new Size(151, 28); + comboBoxModel.TabIndex = 2; + // + // numericUpDownPrice + // + numericUpDownPrice.DecimalPlaces = 2; + numericUpDownPrice.Location = new Point(120, 118); + numericUpDownPrice.Maximum = new decimal(new int[] { 39999, 0, 0, 131072 }); + numericUpDownPrice.Minimum = new decimal(new int[] { 39999, 0, 0, 131072 }); + numericUpDownPrice.Name = "numericUpDownPrice"; + numericUpDownPrice.Size = new Size(150, 27); + numericUpDownPrice.TabIndex = 3; + numericUpDownPrice.Value = new decimal(new int[] { 39999, 0, 0, 131072 }); + // + // buttonSave + // + buttonSave.Location = new Point(48, 206); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 4; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(176, 206); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 5; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // groupBox1 + // + groupBox1.Controls.Add(dataGridView1); + groupBox1.Location = new Point(323, 23); + groupBox1.Name = "groupBox1"; + groupBox1.Size = new Size(251, 227); + groupBox1.TabIndex = 6; + groupBox1.TabStop = false; + groupBox1.Text = "Ткани"; + // + // dataGridView1 + // + dataGridView1.AllowUserToOrderColumns = true; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Columns.AddRange(new DataGridViewColumn[] { ColumnFabric, ColumnCount }); + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(3, 23); + dataGridView1.Name = "dataGridView1"; + dataGridView1.RowHeadersVisible = false; + dataGridView1.RowHeadersWidth = 51; + dataGridView1.RowTemplate.Height = 29; + dataGridView1.Size = new Size(245, 201); + dataGridView1.TabIndex = 0; + // + // ColumnFabric + // + ColumnFabric.HeaderText = "Ткань"; + ColumnFabric.MinimumWidth = 6; + ColumnFabric.Name = "ColumnFabric"; + ColumnFabric.Resizable = DataGridViewTriState.True; + ColumnFabric.SortMode = DataGridViewColumnSortMode.Automatic; + // + // ColumnCount + // + ColumnCount.HeaderText = "Количество"; + ColumnCount.MinimumWidth = 6; + ColumnCount.Name = "ColumnCount"; + ColumnCount.Resizable = DataGridViewTriState.True; + ColumnCount.SortMode = DataGridViewColumnSortMode.NotSortable; + // + // FormModel + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(619, 284); + Controls.Add(groupBox1); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(numericUpDownPrice); + Controls.Add(comboBoxModel); + Controls.Add(labelPrice); + Controls.Add(labelModel); + Name = "FormModel"; + StartPosition = FormStartPosition.CenterParent; + Text = "Модель"; + ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).EndInit(); + groupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelModel; + private Label labelPrice; + private ComboBox comboBoxModel; + private NumericUpDown numericUpDownPrice; + private Button buttonSave; + private Button buttonCancel; + private GroupBox groupBox1; + private DataGridView dataGridView1; + private DataGridViewComboBoxColumn ColumnFabric; + private DataGridViewTextBoxColumn ColumnCount; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormModel.cs b/Atelier/Atelier/Forms/FormModel.cs new file mode 100644 index 0000000..0de2b46 --- /dev/null +++ b/Atelier/Atelier/Forms/FormModel.cs @@ -0,0 +1,101 @@ +using Microsoft.VisualBasic.FileIO; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Reflection.Metadata.Ecma335; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Atelier.Forms +{ + public partial class FormModel : Form + { + private readonly IModelRepository _modelRepository; + private int? _modelId; + public int Id + { + set + { + try + { + var model = _modelRepository.ReadModelById(value); + if (model == null) + { + throw new + InvalidDataException(nameof(model)); + } + comboBoxModel.SelectedItem = model.ModelType; + numericUpDownPrice.Value = (decimal)model.Price; + _modelId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormModel(IModelRepository modelRepository, IFabricRepository fabricRepository) + { + InitializeComponent(); + _modelRepository = modelRepository ?? + throw new ArgumentNullException(nameof(modelRepository)); + comboBoxModel.DataSource = Enum.GetValues(typeof(ModelType)); + ColumnFabric.DataSource = fabricRepository.ReadFabrics(); + ColumnFabric.DisplayMember = "FabricType"; + ColumnFabric.ValueMember = "Id"; + + } + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxModel.SelectedIndex < 399.99 || dataGridView1.RowCount < 1) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_modelId.HasValue) + { + _modelRepository.UpdateModel(CreateModel(_modelId.Value)); + } + else + { + _modelRepository.CreateModel(CreateModel(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + + private Model CreateModel(int id) + { + List fabricModels = new List(); + + foreach (DataGridViewRow row in dataGridView1.Rows) + { + if (row.Cells["ColumnFabric"].Value == null || row.Cells["ColumnCount"].Value == null || !(bool)row.Cells["CheckBoxColumn"].Value) + { + continue; + } + + int fabricId = Convert.ToInt32(row.Cells["ColumnFabric"].Value); + int count = Convert.ToInt32(row.Cells["ColumnCount"].Value); + + fabricModels.Add(FabricModel.CreateElement(0, fabricId, count)); + } + + return Model.CreateEntity(id, (ModelType)comboBoxModel.SelectedItem!, Convert.ToDouble(numericUpDownPrice.Value), fabricModels); + } + } +} + diff --git a/Atelier/Atelier/Forms/FormModel.resx b/Atelier/Atelier/Forms/FormModel.resx new file mode 100644 index 0000000..d668d73 --- /dev/null +++ b/Atelier/Atelier/Forms/FormModel.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + True + + \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormModels.Designer.cs b/Atelier/Atelier/Forms/FormModels.Designer.cs new file mode 100644 index 0000000..0aecfba --- /dev/null +++ b/Atelier/Atelier/Forms/FormModels.Designer.cs @@ -0,0 +1,128 @@ +namespace Atelier.Forms +{ + partial class FormModels + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormModels)); + dataGridView1 = new DataGridView(); + panel1 = new Panel(); + buttonDel = new Button(); + buttonUpd = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.RowHeadersWidth = 51; + dataGridView1.RowTemplate.Height = 29; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(1001, 604); + dataGridView1.TabIndex = 0; + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(1001, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(133, 604); + panel1.TabIndex = 1; + // + // buttonDel + // + buttonDel.Image = (Image)resources.GetObject("buttonDel.Image"); + buttonDel.Location = new Point(14, 204); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(107, 88); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonUpd + // + buttonUpd.Image = (Image)resources.GetObject("buttonUpd.Image"); + buttonUpd.Location = new Point(14, 107); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(107, 91); + buttonUpd.TabIndex = 1; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonAdd + // + buttonAdd.Image = (Image)resources.GetObject("buttonAdd.Image"); + buttonAdd.Location = new Point(14, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(107, 89); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormModels + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1134, 604); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormModels"; + StartPosition = FormStartPosition.CenterParent; + Text = "Модели"; + Load += FormModels_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + + + #endregion + + private DataGridView dataGridView1; + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormModels.cs b/Atelier/Atelier/Forms/FormModels.cs new file mode 100644 index 0000000..1d9d3d1 --- /dev/null +++ b/Atelier/Atelier/Forms/FormModels.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace Atelier.Forms +{ + public partial class FormModels : Form + { + private readonly IUnityContainer _container; + private readonly IModelRepository _modelRepository; + public FormModels(IUnityContainer container, IModelRepository modelRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _modelRepository = modelRepository ?? + throw new + ArgumentNullException(nameof(modelRepository)); + + } + private void FormModels_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _modelRepository.DeleteModel(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView1.DataSource = _modelRepository.ReadModels(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormModels.resx b/Atelier/Atelier/Forms/FormModels.resx new file mode 100644 index 0000000..ad98e8b --- /dev/null +++ b/Atelier/Atelier/Forms/FormModels.resx @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DgAACw4BQL7hQQAABNVJREFUeF7tnL9uXHUQhZ2OKk8ANRJ5AHipNInXgCFKyuD1H/ECZJ11Eh7AViCP + ELeJaCgQHV2gIIULc0cZ0KfRaDTaO2Ph63ukrzg+oxnOzxvT7dasWbNmzbpafX93fXtve/XTcnt1sVwc + X47iw46XslPXT1/LxerbvcXqxcOHTz7SH20s2TE84o9728cP9EfT1/B4b5f3n36udrQOdp58sbc4/kXt + tPV4Z3VnKPv75dblLf3RaMmu4Zfy2/L++jP90XQ1/L16NPz921dbpuHPwoHsVjtdVf/z/Vf/63/G+/d+ + +ORo99nL/Z31+//+7zdRpOPQ9efvFutPtf44yeMdfn3y7vTF+cWb8z8uf33716SRjmdD1/0vn/4p3fUZ + Npd88mShd2zKnD4/vzjaPTnTZ9hcB8NH+iZ88izSefgUvtdn2Fzyd8E7cBOQ7voMm2t+wJGaH3CkZMlN + Rp+hTrLU+21NgZYHs5ofcKTmBxyp+QFHyj5g9KDZx97kl1Kx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8o + PYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3Z + J+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZ + eK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U + 7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpI + do5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0 + JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWaf + vKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bi + tWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx + 22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZ + OVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKT + KCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3y + jtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nX + mn3apOx1YX7AkVzJA8q3m03xq6DevJavelr/rTX7dLh78kq+mMv7j7jOnD5/fXH0zbNTrdkn+V49+Wo4 + ecQpfBLlkyePd/jV+t3jnfXHWrNXH76Q8eRMvt1M/m5cZ6SDfPKu7PFmzZo1azLa2voHHNxQxvmbf3YA + AAAASUVORK5CYII= + + + + + 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 + + + \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormOrder.Designer.cs b/Atelier/Atelier/Forms/FormOrder.Designer.cs new file mode 100644 index 0000000..c936c59 --- /dev/null +++ b/Atelier/Atelier/Forms/FormOrder.Designer.cs @@ -0,0 +1,183 @@ +namespace Atelier.Forms +{ + partial class FormOrder + { + /// + /// 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() + { + dateTimePicker1 = new DateTimePicker(); + groupBox1 = new GroupBox(); + dataGridView1 = new DataGridView(); + ColumnModel = new DataGridViewComboBoxColumn(); + ColumnCount = new DataGridViewTextBoxColumn(); + labelClient = new Label(); + comboBoxClient = new ComboBox(); + comboBoxStatus = new ComboBox(); + labelStatus = new Label(); + buttonSave = new Button(); + buttonCancel = new Button(); + groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // dateTimePicker1 + // + dateTimePicker1.Enabled = false; + dateTimePicker1.Location = new Point(20, 12); + dateTimePicker1.Name = "dateTimePicker1"; + dateTimePicker1.Size = new Size(250, 27); + dateTimePicker1.TabIndex = 0; + // + // groupBox1 + // + groupBox1.Controls.Add(dataGridView1); + groupBox1.Location = new Point(302, 12); + groupBox1.Name = "groupBox1"; + groupBox1.Size = new Size(223, 176); + groupBox1.TabIndex = 1; + groupBox1.TabStop = false; + groupBox1.Text = "Модели"; + // + // dataGridView1 + // + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Columns.AddRange(new DataGridViewColumn[] { ColumnModel, ColumnCount }); + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(3, 23); + dataGridView1.Name = "dataGridView1"; + dataGridView1.RowHeadersVisible = false; + dataGridView1.RowHeadersWidth = 51; + dataGridView1.RowTemplate.Height = 29; + dataGridView1.Size = new Size(217, 150); + dataGridView1.TabIndex = 0; + // + // ColumnModel + // + ColumnModel.HeaderText = "Модель"; + ColumnModel.MinimumWidth = 6; + ColumnModel.Name = "ColumnModel"; + // + // ColumnCount + // + ColumnCount.HeaderText = "Количество"; + ColumnCount.MinimumWidth = 6; + ColumnCount.Name = "ColumnCount"; + // + // labelClient + // + labelClient.AutoSize = true; + labelClient.Location = new Point(20, 79); + labelClient.Name = "labelClient"; + labelClient.Size = new Size(61, 20); + labelClient.TabIndex = 2; + labelClient.Text = "Клиент:"; + // + // comboBoxClient + // + comboBoxClient.FormattingEnabled = true; + comboBoxClient.Location = new Point(95, 79); + comboBoxClient.Name = "comboBoxClient"; + comboBoxClient.Size = new Size(151, 28); + comboBoxClient.TabIndex = 3; + // + // comboBoxStatus + // + comboBoxStatus.FormattingEnabled = true; + comboBoxStatus.Location = new Point(95, 139); + comboBoxStatus.Name = "comboBoxStatus"; + comboBoxStatus.Size = new Size(151, 28); + comboBoxStatus.TabIndex = 6; + // + // labelStatus + // + labelStatus.AutoSize = true; + labelStatus.Location = new Point(26, 142); + labelStatus.Name = "labelStatus"; + labelStatus.Size = new Size(55, 20); + labelStatus.TabIndex = 7; + labelStatus.Text = "Статус:"; + // + // buttonSave + // + buttonSave.Location = new Point(152, 231); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 8; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(302, 231); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 9; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // FormOrder + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(556, 298); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(labelStatus); + Controls.Add(comboBoxStatus); + Controls.Add(comboBoxClient); + Controls.Add(labelClient); + Controls.Add(groupBox1); + Controls.Add(dateTimePicker1); + Name = "FormOrder"; + StartPosition = FormStartPosition.CenterParent; + Text = "Заказ"; + groupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + + #endregion + + private DateTimePicker dateTimePicker1; + private GroupBox groupBox1; + private DataGridView dataGridView1; + private DataGridViewComboBoxColumn ColumnModel; + private DataGridViewTextBoxColumn ColumnCount; + private Label labelClient; + private ComboBox comboBoxClient; + private ComboBox comboBoxStatus; + private Label labelStatus; + private Button buttonSave; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormOrder.cs b/Atelier/Atelier/Forms/FormOrder.cs new file mode 100644 index 0000000..b30a73d --- /dev/null +++ b/Atelier/Atelier/Forms/FormOrder.cs @@ -0,0 +1,72 @@ +using Microsoft.VisualBasic.FileIO; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Atelier.Forms +{ + public partial class FormOrder : Form + { + private readonly IOrderRepository _orderRepository; + public FormOrder(IOrderRepository orderRepository, IModelRepository modelRepository, IClientRepository clientRepository) + { + InitializeComponent(); + _orderRepository = orderRepository ?? + throw new + ArgumentNullException(nameof(orderRepository)); + comboBoxClient.DataSource = clientRepository.ReadClients(); + comboBoxClient.DisplayMember = "FirstName"; + comboBoxClient.ValueMember = "Id"; + comboBoxStatus.DataSource = orderRepository.ReadOrders(); + comboBoxStatus.DataSource = Enum.GetValues(typeof(Status)); + ColumnModel.DataSource = modelRepository.ReadModels(); + ColumnModel.DisplayMember = "ModelType"; + ColumnModel.ValueMember = "Id"; + } + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (dataGridView1.RowCount < 1 || comboBoxClient.SelectedIndex < 0 || comboBoxStatus.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + + _orderRepository.CreateOrder(Order.CreateOperation(0, dateTimePicker1.Value, (Status)comboBoxStatus.SelectedValue, + (int)comboBoxClient.SelectedValue, CreateListModelOrderFromDataGrid())); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonCancel_Click(object sender, EventArgs e) => + Close(); + private List + CreateListModelOrderFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridView1.Rows) + { + if (row.Cells["ColumnModel"].Value == null || + row.Cells["ColumnCount"].Value == null) + { + continue; + } + list.Add(ModelOrder.CreateElement(0, + Convert.ToInt32(row.Cells["ColumnFeed"].Value), + Convert.ToInt32(row.Cells["ColumnCount"].Value))); + } + return list; + } + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormOrder.resx b/Atelier/Atelier/Forms/FormOrder.resx new file mode 100644 index 0000000..472458a --- /dev/null +++ b/Atelier/Atelier/Forms/FormOrder.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormOrders.Designer.cs b/Atelier/Atelier/Forms/FormOrders.Designer.cs new file mode 100644 index 0000000..b63c573 --- /dev/null +++ b/Atelier/Atelier/Forms/FormOrders.Designer.cs @@ -0,0 +1,113 @@ +namespace Atelier.Forms +{ + partial class FormOrders + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormOrders)); + dataGridView1 = new DataGridView(); + panel1 = new Panel(); + buttonDel = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.RowHeadersWidth = 51; + dataGridView1.RowTemplate.Height = 29; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(1001, 604); + dataGridView1.TabIndex = 0; + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(1001, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(133, 604); + panel1.TabIndex = 1; + // + // buttonDel + // + buttonDel.Image = (Image)resources.GetObject("buttonDel.Image"); + buttonDel.Location = new Point(14, 204); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(107, 88); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonAdd + // + buttonAdd.Image = (Image)resources.GetObject("buttonAdd.Image"); + buttonAdd.Location = new Point(14, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(107, 89); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormOrders + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1134, 604); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormOrders"; + StartPosition = FormStartPosition.CenterParent; + Text = "Заказы"; + Load += FormOrders_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView1; + private Panel panel1; + private Button buttonDel; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormOrders.cs b/Atelier/Atelier/Forms/FormOrders.cs new file mode 100644 index 0000000..bc9fb9e --- /dev/null +++ b/Atelier/Atelier/Forms/FormOrders.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; +using static Atelier.Forms.FormOrders; + +namespace Atelier.Forms +{ + public partial class FormOrders : Form + { + private readonly IUnityContainer _container; + private readonly IOrderRepository _orderRepository; + public FormOrders(IUnityContainer container, + IOrderRepository orderRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _orderRepository = orderRepository ?? + throw new + ArgumentNullException(nameof(orderRepository)); + } + private void FormOrders_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _orderRepository.DeleteOrder(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView1.DataSource = _orderRepository.ReadOrders(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormOrders.resx b/Atelier/Atelier/Forms/FormOrders.resx new file mode 100644 index 0000000..079c320 --- /dev/null +++ b/Atelier/Atelier/Forms/FormOrders.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAABNVJREFUeF7tnL9uXHUQhZ2OKk8ANRJ5AHipNInXgCFKyuD1H/ECZJ11Eh7AViCP + ELeJaCgQHV2gIIULc0cZ0KfRaDTaO2Ph63ukrzg+oxnOzxvT7dasWbNmzbpafX93fXtve/XTcnt1sVwc + X47iw46XslPXT1/LxerbvcXqxcOHTz7SH20s2TE84o9728cP9EfT1/B4b5f3n36udrQOdp58sbc4/kXt + tPV4Z3VnKPv75dblLf3RaMmu4Zfy2/L++jP90XQ1/L16NPz921dbpuHPwoHsVjtdVf/z/Vf/63/G+/d+ + +ORo99nL/Z31+//+7zdRpOPQ9efvFutPtf44yeMdfn3y7vTF+cWb8z8uf33716SRjmdD1/0vn/4p3fUZ + Npd88mShd2zKnD4/vzjaPTnTZ9hcB8NH+iZ88izSefgUvtdn2Fzyd8E7cBOQ7voMm2t+wJGaH3CkZMlN + Rp+hTrLU+21NgZYHs5ofcKTmBxyp+QFHyj5g9KDZx97kl1Kx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8o + PYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3Z + J+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZ + eK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U + 7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpI + do5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0 + JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWaf + vKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bi + tWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx + 22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZ + OVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKT + KCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3y + jtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nX + mn3apOx1YX7AkVzJA8q3m03xq6DevJavelr/rTX7dLh78kq+mMv7j7jOnD5/fXH0zbNTrdkn+V49+Wo4 + ecQpfBLlkyePd/jV+t3jnfXHWrNXH76Q8eRMvt1M/m5cZ6SDfPKu7PFmzZo1azLa2voHHNxQxvmbf3YA + AAAASUVORK5CYII= + + + + + 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 + + + \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormStorage.Designer.cs b/Atelier/Atelier/Forms/FormStorage.Designer.cs new file mode 100644 index 0000000..628053c --- /dev/null +++ b/Atelier/Atelier/Forms/FormStorage.Designer.cs @@ -0,0 +1,122 @@ +namespace Atelier.Forms +{ + partial class FormStorage + { + /// + /// 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() + { + comboBoxFabric = new ComboBox(); + numericUpDownMetrage = new NumericUpDown(); + labelFabric = new Label(); + labelMetrage = new Label(); + buttonSave = new Button(); + buttonCancel = new Button(); + ((System.ComponentModel.ISupportInitialize)numericUpDownMetrage).BeginInit(); + SuspendLayout(); + // + // comboBoxFabric + // + comboBoxFabric.FormattingEnabled = true; + comboBoxFabric.Location = new Point(130, 22); + comboBoxFabric.Name = "comboBoxFabric"; + comboBoxFabric.Size = new Size(151, 28); + comboBoxFabric.TabIndex = 0; + // + // numericUpDownMetrage + // + numericUpDownMetrage.DecimalPlaces = 2; + numericUpDownMetrage.Location = new Point(131, 81); + numericUpDownMetrage.Name = "numericUpDownMetrage"; + numericUpDownMetrage.Size = new Size(150, 27); + numericUpDownMetrage.TabIndex = 1; + // + // labelFabric + // + labelFabric.AutoSize = true; + labelFabric.Location = new Point(40, 30); + labelFabric.Name = "labelFabric"; + labelFabric.Size = new Size(52, 20); + labelFabric.TabIndex = 2; + labelFabric.Text = "Ткань:"; + // + // labelMetrage + // + labelMetrage.AutoSize = true; + labelMetrage.Location = new Point(40, 88); + labelMetrage.Name = "labelMetrage"; + labelMetrage.Size = new Size(67, 20); + labelMetrage.TabIndex = 3; + labelMetrage.Text = "Метраж:"; + // + // buttonSave + // + buttonSave.Location = new Point(50, 148); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 4; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(171, 148); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 5; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // FormStorage + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(320, 213); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(labelMetrage); + Controls.Add(labelFabric); + Controls.Add(numericUpDownMetrage); + Controls.Add(comboBoxFabric); + Name = "FormStorage"; + StartPosition = FormStartPosition.CenterParent; + Text = "Склад"; + ((System.ComponentModel.ISupportInitialize)numericUpDownMetrage).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxFabric; + private NumericUpDown numericUpDownMetrage; + private Label labelFabric; + private Label labelMetrage; + private Button buttonSave; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormStorage.cs b/Atelier/Atelier/Forms/FormStorage.cs new file mode 100644 index 0000000..6e10460 --- /dev/null +++ b/Atelier/Atelier/Forms/FormStorage.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace Atelier.Forms +{ + public partial class FormStorage : Form + { + private readonly IStorageRepository _storageRepository; + public FormStorage(IStorageRepository storageRepository, IFabricRepository fabricRepository) + { + InitializeComponent(); + _storageRepository = storageRepository ?? + throw new + ArgumentNullException(nameof(storageRepository)); + comboBoxFabric.DataSource = fabricRepository.ReadFabrics(); + comboBoxFabric.DisplayMember = "FabricType"; + comboBoxFabric.ValueMember = "Id"; + } + + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxFabric.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + _storageRepository.CreateStorage(Storage.CreateOperation(0, (int)comboBoxFabric.SelectedValue!, Convert.ToInt32(numericUpDownMetrage.Value))); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + } +} diff --git a/Atelier/Atelier/Forms/FormStorage.resx b/Atelier/Atelier/Forms/FormStorage.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/Atelier/Atelier/Forms/FormStorage.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/Atelier/Atelier/Forms/FormStorages.Designer.cs b/Atelier/Atelier/Forms/FormStorages.Designer.cs new file mode 100644 index 0000000..a9cd81a --- /dev/null +++ b/Atelier/Atelier/Forms/FormStorages.Designer.cs @@ -0,0 +1,113 @@ +namespace Atelier.Forms +{ + partial class FormStorages + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormStorages)); + dataGridView1 = new DataGridView(); + panel1 = new Panel(); + buttonDel = new Button(); + buttonAdd = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.RowHeadersWidth = 51; + dataGridView1.RowTemplate.Height = 29; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(1001, 604); + dataGridView1.TabIndex = 0; + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(1001, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(133, 604); + panel1.TabIndex = 1; + // + // buttonDel + // + buttonDel.Image = (Image)resources.GetObject("buttonDel.Image"); + buttonDel.Location = new Point(14, 204); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(107, 88); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonAdd + // + buttonAdd.Image = (Image)resources.GetObject("buttonAdd.Image"); + buttonAdd.Location = new Point(14, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(107, 89); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // FormStorages + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1134, 604); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormStorages"; + StartPosition = FormStartPosition.CenterParent; + Text = "Склады"; + Load += FormStorages_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView1; + private Panel panel1; + private Button buttonDel; + private Button buttonAdd; + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormStorages.cs b/Atelier/Atelier/Forms/FormStorages.cs new file mode 100644 index 0000000..57df5e5 --- /dev/null +++ b/Atelier/Atelier/Forms/FormStorages.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + + +namespace Atelier.Forms +{ + public partial class FormStorages : Form + { + private readonly IUnityContainer _container; + private readonly IStorageRepository _storageRepository; + public FormStorages(IUnityContainer container, IStorageRepository storageRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _storageRepository = storageRepository ?? + throw new + ArgumentNullException(nameof(storageRepository)); + } + private void FormStorages_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _storageRepository.DeleteStorage(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView1.DataSource = + _storageRepository.ReadStorage(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Forms/FormStorages.resx b/Atelier/Atelier/Forms/FormStorages.resx new file mode 100644 index 0000000..9dbe4d9 --- /dev/null +++ b/Atelier/Atelier/Forms/FormStorages.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DgAACw4BQL7hQQAABNVJREFUeF7tnL9uXHUQhZ2OKk8ANRJ5AHipNInXgCFKyuD1H/ECZJ11Eh7AViCP + ELeJaCgQHV2gIIULc0cZ0KfRaDTaO2Ph63ukrzg+oxnOzxvT7dasWbNmzbpafX93fXtve/XTcnt1sVwc + X47iw46XslPXT1/LxerbvcXqxcOHTz7SH20s2TE84o9728cP9EfT1/B4b5f3n36udrQOdp58sbc4/kXt + tPV4Z3VnKPv75dblLf3RaMmu4Zfy2/L++jP90XQ1/L16NPz921dbpuHPwoHsVjtdVf/z/Vf/63/G+/d+ + +ORo99nL/Z31+//+7zdRpOPQ9efvFutPtf44yeMdfn3y7vTF+cWb8z8uf33716SRjmdD1/0vn/4p3fUZ + Npd88mShd2zKnD4/vzjaPTnTZ9hcB8NH+iZ88izSefgUvtdn2Fzyd8E7cBOQ7voMm2t+wJGaH3CkZMlN + Rp+hTrLU+21NgZYHs5ofcKTmBxyp+QFHyj5g9KDZx97kl1Kx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8o + PYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3Z + J+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZ + eK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpIdo5U + 7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0JMpI + do5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWafvKP0 + JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bitWaf + vKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx22bi + tWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZOVKx + 22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKTKCPZ + OVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3yjtKT + KCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nXmn3y + jtKTKCPZOVKx22bitWafvKP0JMpIdo5U7LaZeK3ZJ+8oPYkykp0jFbttJl5r9sk7Sk+ijGTnSMVum4nX + mn3apOx1YX7AkVzJA8q3m03xq6DevJavelr/rTX7dLh78kq+mMv7j7jOnD5/fXH0zbNTrdkn+V49+Wo4 + ecQpfBLlkyePd/jV+t3jnfXHWrNXH76Q8eRMvt1M/m5cZ6SDfPKu7PFmzZo1azLa2voHHNxQxvmbf3YA + AAAASUVORK5CYII= + + + + + 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 + + + \ No newline at end of file diff --git a/Atelier/Atelier/Program.cs b/Atelier/Atelier/Program.cs index 579bec7..1b4db83 100644 --- a/Atelier/Atelier/Program.cs +++ b/Atelier/Atelier/Program.cs @@ -1,6 +1,8 @@ -namespace Atelier -{ - internal static class Program +using Atelier; +using Unity; +using Unity.Lifetime; + +internal static class Program { /// /// The main entry point for the application. @@ -11,7 +13,16 @@ namespace Atelier // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(CreateContainer().Resolve()); } + private static IUnityContainer CreateContainer() + { + var container = new UnityContainer(); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + return container; } -} \ No newline at end of file +} diff --git a/Atelier/Atelier/Properties/Resources.Designer.cs b/Atelier/Atelier/Properties/Resources.Designer.cs new file mode 100644 index 0000000..12c5263 --- /dev/null +++ b/Atelier/Atelier/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace Atelier.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("Atelier.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/Atelier/Atelier/Form1.resx b/Atelier/Atelier/Properties/Resources.resx similarity index 100% rename from Atelier/Atelier/Form1.resx rename to Atelier/Atelier/Properties/Resources.resx diff --git a/Atelier/Atelier/Repositories/IClientRepository.cs b/Atelier/Atelier/Repositories/IClientRepository.cs new file mode 100644 index 0000000..f1ab940 --- /dev/null +++ b/Atelier/Atelier/Repositories/IClientRepository.cs @@ -0,0 +1,9 @@ +public interface IClientRepository +{ + IEnumerable ReadClients(); + Client ReadClientById(int id); + void CreateClient(Client client); + void UpdateClient(Client client); + void DeleteClient(int id); + +} diff --git a/Atelier/Atelier/Repositories/IFabricRepository.cs b/Atelier/Atelier/Repositories/IFabricRepository.cs new file mode 100644 index 0000000..6086934 --- /dev/null +++ b/Atelier/Atelier/Repositories/IFabricRepository.cs @@ -0,0 +1,9 @@ +public interface IFabricRepository +{ + IEnumerable ReadFabrics(); + Fabric ReadFabricById(int id); + void CreateFabric(Fabric fabric); + void UpdateFabric(Fabric fabric); + void DeleteFabric(int id); + +} diff --git a/Atelier/Atelier/Repositories/IModelRepository.cs b/Atelier/Atelier/Repositories/IModelRepository.cs new file mode 100644 index 0000000..def0969 --- /dev/null +++ b/Atelier/Atelier/Repositories/IModelRepository.cs @@ -0,0 +1,9 @@ +public interface IModelRepository +{ + IEnumerable ReadModels(); + Model ReadModelById(int id); + void CreateModel(Model model); + void UpdateModel(Model model); + void DeleteModel(int id); + +} diff --git a/Atelier/Atelier/Repositories/IOrderRepository.cs b/Atelier/Atelier/Repositories/IOrderRepository.cs new file mode 100644 index 0000000..d41795b --- /dev/null +++ b/Atelier/Atelier/Repositories/IOrderRepository.cs @@ -0,0 +1,7 @@ +public interface IOrderRepository +{ + IEnumerable ReadOrders(int? id = null, DateTime? dateFrom = null, DateTime? dateTo = null, + Status? status = null, int? clientId = null); + void CreateOrder(Order order); + void DeleteOrder(int id); +} diff --git a/Atelier/Atelier/Repositories/IStorageRepository.cs b/Atelier/Atelier/Repositories/IStorageRepository.cs new file mode 100644 index 0000000..e5db76d --- /dev/null +++ b/Atelier/Atelier/Repositories/IStorageRepository.cs @@ -0,0 +1,6 @@ +public interface IStorageRepository +{ + IEnumerable ReadStorage(double? minStockMetrage = null, double? maxStockMetrage = null, int? fabricId = null); + void CreateStorage(Storage storage); + void DeleteStorage(int id); +} diff --git a/Atelier/Atelier/Repositories/Implementations/ClientRepository.cs b/Atelier/Atelier/Repositories/Implementations/ClientRepository.cs new file mode 100644 index 0000000..3b2c222 --- /dev/null +++ b/Atelier/Atelier/Repositories/Implementations/ClientRepository.cs @@ -0,0 +1,23 @@ +using Microsoft.VisualBasic.FileIO; + +internal class ClientRepository : IClientRepository +{ + public void CreateClient(Client client) + { + } + public void DeleteClient(int id) + { + } + public Client ReadClientById(int id) + { + + return Client.CreateEntity(0, string.Empty, string.Empty, string.Empty); + } + public IEnumerable ReadClients() + { + return []; + } + public void UpdateClient(Client client) + { + } +} \ No newline at end of file diff --git a/Atelier/Atelier/Repositories/Implementations/FabricRepository.cs b/Atelier/Atelier/Repositories/Implementations/FabricRepository.cs new file mode 100644 index 0000000..375cdbe --- /dev/null +++ b/Atelier/Atelier/Repositories/Implementations/FabricRepository.cs @@ -0,0 +1,20 @@ +internal class FabricRepository : IFabricRepository +{ + public void CreateFabric(Fabric fabric) + { + } + public void DeleteFabric(int id) + { + } + public Fabric ReadFabricById(int id) + { + return Fabric.CreateEntity(0, FabricType.None, Color.None, 0); + } + public IEnumerable ReadFabrics() + { + return []; + } + public void UpdateFabric(Fabric fabric) + { + } +} diff --git a/Atelier/Atelier/Repositories/Implementations/ModelRepository.cs b/Atelier/Atelier/Repositories/Implementations/ModelRepository.cs new file mode 100644 index 0000000..0277982 --- /dev/null +++ b/Atelier/Atelier/Repositories/Implementations/ModelRepository.cs @@ -0,0 +1,20 @@ +internal class ModelRepository : IModelRepository +{ + public void CreateModel(Model model) + { + } + public void DeleteModel(int id) + { + } + public Model ReadModelById(int id) + { + return Model.CreateEntity(0, ModelType.None, 0, Enumerable.Empty()); + } + public IEnumerable ReadModels() + { + return []; + } + public void UpdateModel(Model model) + { + } +} diff --git a/Atelier/Atelier/Repositories/Implementations/OrderRepository.cs b/Atelier/Atelier/Repositories/Implementations/OrderRepository.cs new file mode 100644 index 0000000..46ce36d --- /dev/null +++ b/Atelier/Atelier/Repositories/Implementations/OrderRepository.cs @@ -0,0 +1,14 @@ +internal class OrderRepository : IOrderRepository +{ + public void CreateOrder(Order order) + { + } + public void DeleteOrder(int id) + { + } + public IEnumerable ReadOrders(int? id = null, DateTime?dateForm = null, DateTime? dateTo = null, + Status? status = null, int? clientId = null) + { + return []; + } +} diff --git a/Atelier/Atelier/Repositories/Implementations/StorageRepository.cs b/Atelier/Atelier/Repositories/Implementations/StorageRepository.cs new file mode 100644 index 0000000..a1bd1bf --- /dev/null +++ b/Atelier/Atelier/Repositories/Implementations/StorageRepository.cs @@ -0,0 +1,16 @@ +internal class StorageRepository : IStorageRepository +{ + public void CreateStorage(Storage storage) + { + } + public void UpdateStorage(Storage storage) + { + } + public void DeleteStorage(int id) + { + } + public IEnumerable ReadStorage(double? minStockMetrage = null, double? maxStockMetrage = null, int? fabricId = null) + { + return []; + } +}