diff --git a/CarpentryWorkshop/CarpentryWorkshop/CarpentryWorkshop.csproj b/CarpentryWorkshop/CarpentryWorkshop/CarpentryWorkshop.csproj index 663fdb8..accbdf0 100644 --- a/CarpentryWorkshop/CarpentryWorkshop/CarpentryWorkshop.csproj +++ b/CarpentryWorkshop/CarpentryWorkshop/CarpentryWorkshop.csproj @@ -8,4 +8,23 @@ enable + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Entities/Enums/OrderStatus.cs b/CarpentryWorkshop/CarpentryWorkshop/Entities/Enums/OrderStatus.cs new file mode 100644 index 0000000..25ff466 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Entities/Enums/OrderStatus.cs @@ -0,0 +1,9 @@ +namespace CarpentryWorkshop.Entities.Enums; + +public enum OrderStatus +{ + None = 0, + NotCompleted = 1, + Reserv = 2, + Completed = 3 +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Entities/Enums/ProductType.cs b/CarpentryWorkshop/CarpentryWorkshop/Entities/Enums/ProductType.cs new file mode 100644 index 0000000..b161483 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Entities/Enums/ProductType.cs @@ -0,0 +1,9 @@ +namespace CarpentryWorkshop.Entities.Enums; + +public enum ProductType +{ + None = 0, + Chair = 1, + Table = 2, + Shelf = 3 +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Entities/Material.cs b/CarpentryWorkshop/CarpentryWorkshop/Entities/Material.cs new file mode 100644 index 0000000..93da8a1 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Entities/Material.cs @@ -0,0 +1,19 @@ +namespace CarpentryWorkshop.Entities; + +public class Material +{ + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public int Count { get; private set; } + public int ReservInWarehouse { get; private set; } + public static Material CreateEntity(int id, string name, int count, int reserveInWarehouse) + { + return new Material + { + Id = id, + Name = name, + Count = count, + ReservInWarehouse = reserveInWarehouse + }; + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Entities/MaterialReplenishment.cs b/CarpentryWorkshop/CarpentryWorkshop/Entities/MaterialReplenishment.cs new file mode 100644 index 0000000..a74839a --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Entities/MaterialReplenishment.cs @@ -0,0 +1,17 @@ +namespace CarpentryWorkshop.Entities; + +public class MaterialReplenishment +{ + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public int Count { get; private set; } + public static MaterialReplenishment CreateOperation(int id, string name, int count) + { + return new MaterialReplenishment + { + Id = id, + Name = name, + Count = count + }; + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Entities/Order.cs b/CarpentryWorkshop/CarpentryWorkshop/Entities/Order.cs new file mode 100644 index 0000000..8af3354 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Entities/Order.cs @@ -0,0 +1,23 @@ +using CarpentryWorkshop.Entities.Enums; + +namespace CarpentryWorkshop.Entities; + +public class Order +{ + public int Id { get; private set; } + public DateTime DataOrder { get; private set; } + public OrderStatus Status { get; private set; } + public string Description { get; private set; } = string.Empty; + public IEnumerable OrderProduct { get; private set; } = []; + public static Order CreateOperation(int id, OrderStatus status, string description, IEnumerable orderProduct) + { + return new Order + { + Id = id, + DataOrder = DateTime.Now, + Status = status, + Description = description, + OrderProduct = orderProduct + }; + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Entities/OrderProduct.cs b/CarpentryWorkshop/CarpentryWorkshop/Entities/OrderProduct.cs new file mode 100644 index 0000000..ba97408 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Entities/OrderProduct.cs @@ -0,0 +1,17 @@ +namespace CarpentryWorkshop.Entities; + +public class OrderProduct +{ + public int Id { get; private set; } + public int ProductId { get; private set; } + public int Count { get; private set; } + public static OrderProduct CreateOperation(int id, int productId, int count) + { + return new OrderProduct + { + Id = id, + ProductId = productId, + Count = count + }; + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Entities/Product.cs b/CarpentryWorkshop/CarpentryWorkshop/Entities/Product.cs new file mode 100644 index 0000000..e746aee --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Entities/Product.cs @@ -0,0 +1,23 @@ +using CarpentryWorkshop.Entities.Enums; + +namespace CarpentryWorkshop.Entities; + +public class Product +{ + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public ProductType Type { get; private set; } + public int CountInWarehouse { get; private set; } + public IEnumerable ProductMaterial { get; private set; } = []; + public static Product CreateEntity(int id, string name, ProductType type, int countInWarehouse, IEnumerable productMaterial) + { + return new Product + { + Id = id, + Name = name, + Type = type, + CountInWarehouse = countInWarehouse, + ProductMaterial = productMaterial + }; + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Entities/ProductMaterial.cs b/CarpentryWorkshop/CarpentryWorkshop/Entities/ProductMaterial.cs new file mode 100644 index 0000000..ee00083 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Entities/ProductMaterial.cs @@ -0,0 +1,17 @@ +namespace CarpentryWorkshop.Entities; + +public class ProductMaterial +{ + public int Id { get; private set; } + public int MaterialId { get; private set; } + public int Count { get; private set; } + public static ProductMaterial CreateOperation(int id, int materialId, int count) + { + return new ProductMaterial + { + Id = id, + MaterialId = materialId, + Count = count + }; + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Form1.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/Form1.Designer.cs deleted file mode 100644 index 3326ced..0000000 --- a/CarpentryWorkshop/CarpentryWorkshop/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace CarpentryWorkshop -{ - 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 - } -} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Form1.cs b/CarpentryWorkshop/CarpentryWorkshop/Form1.cs deleted file mode 100644 index d3feca5..0000000 --- a/CarpentryWorkshop/CarpentryWorkshop/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace CarpentryWorkshop -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/CarpentryWorkshop/CarpentryWorkshop/FormCarpentryWorkshop.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/FormCarpentryWorkshop.Designer.cs new file mode 100644 index 0000000..0027659 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/FormCarpentryWorkshop.Designer.cs @@ -0,0 +1,127 @@ +namespace CarpentryWorkshop +{ + partial class FormCarpentryWorkshop + { + /// + /// 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() + { + menuStrip1 = new MenuStrip(); + справочникиToolStripMenuItem = new ToolStripMenuItem(); + ProductsToolStripMenuItem = new ToolStripMenuItem(); + MaterialsToolStripMenuItem = new ToolStripMenuItem(); + операцииToolStripMenuItem = new ToolStripMenuItem(); + OrderToolStripMenuItem = new ToolStripMenuItem(); + MaterialReplenishmentToolStripMenuItem = new ToolStripMenuItem(); + отчетыToolStripMenuItem = new ToolStripMenuItem(); + menuStrip1.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчетыToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new Size(939, 24); + menuStrip1.TabIndex = 0; + menuStrip1.Text = "menuStrip"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ProductsToolStripMenuItem, MaterialsToolStripMenuItem }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(94, 20); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // ProductsToolStripMenuItem + // + ProductsToolStripMenuItem.Name = "ProductsToolStripMenuItem"; + ProductsToolStripMenuItem.Size = new Size(138, 22); + ProductsToolStripMenuItem.Text = "Изделия"; + ProductsToolStripMenuItem.Click += ProductsToolStripMenuItem_Click; + // + // MaterialsToolStripMenuItem + // + MaterialsToolStripMenuItem.Name = "MaterialsToolStripMenuItem"; + MaterialsToolStripMenuItem.Size = new Size(138, 22); + MaterialsToolStripMenuItem.Text = "Материалы"; + MaterialsToolStripMenuItem.Click += MaterialsToolStripMenuItem_Click; + // + // операцииToolStripMenuItem + // + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { OrderToolStripMenuItem, MaterialReplenishmentToolStripMenuItem }); + операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; + операцииToolStripMenuItem.Size = new Size(75, 20); + операцииToolStripMenuItem.Text = "Операции"; + // + // OrderToolStripMenuItem + // + OrderToolStripMenuItem.Name = "OrderToolStripMenuItem"; + OrderToolStripMenuItem.Size = new Size(206, 22); + OrderToolStripMenuItem.Text = "Заказ изделия"; + OrderToolStripMenuItem.Click += OrderToolStripMenuItem_Click; + // + // MaterialReplenishmentToolStripMenuItem + // + MaterialReplenishmentToolStripMenuItem.Name = "MaterialReplenishmentToolStripMenuItem"; + MaterialReplenishmentToolStripMenuItem.Size = new Size(206, 22); + MaterialReplenishmentToolStripMenuItem.Text = "Пополнение материала"; + MaterialReplenishmentToolStripMenuItem.Click += MaterialConsumptionToolStripMenuItem_Click; + // + // отчетыToolStripMenuItem + // + отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; + отчетыToolStripMenuItem.Size = new Size(60, 20); + отчетыToolStripMenuItem.Text = "Отчеты"; + // + // FormCarpentryWorkshop + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources.Uborka_masterskoi_2; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(939, 521); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Name = "FormCarpentryWorkshop"; + Text = "FormCarpentryShop"; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem справочникиToolStripMenuItem; + private ToolStripMenuItem ProductsToolStripMenuItem; + private ToolStripMenuItem MaterialsToolStripMenuItem; + private ToolStripMenuItem операцииToolStripMenuItem; + private ToolStripMenuItem отчетыToolStripMenuItem; + private ToolStripMenuItem OrderToolStripMenuItem; + private ToolStripMenuItem MaterialReplenishmentToolStripMenuItem; + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/FormCarpentryWorkshop.cs b/CarpentryWorkshop/CarpentryWorkshop/FormCarpentryWorkshop.cs new file mode 100644 index 0000000..2c88bc1 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/FormCarpentryWorkshop.cs @@ -0,0 +1,59 @@ +using CarpentryWorkshop.Forms; +using Unity; + +namespace CarpentryWorkshop +{ + public partial class FormCarpentryWorkshop : Form + { + private readonly IUnityContainer _container; + public FormCarpentryWorkshop(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + } + private void ProductsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void MaterialsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void OrderToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void MaterialConsumptionToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/FormCarpentryWorkshop.resx b/CarpentryWorkshop/CarpentryWorkshop/FormCarpentryWorkshop.resx new file mode 100644 index 0000000..a0623c8 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/FormCarpentryWorkshop.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterial.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterial.Designer.cs new file mode 100644 index 0000000..5493ad9 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterial.Designer.cs @@ -0,0 +1,145 @@ +namespace CarpentryWorkshop.Forms +{ + partial class FormMaterial + { + /// + /// 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() + { + labelName = new Label(); + labelCount = new Label(); + labelReversed = new Label(); + buttonAdd = new Button(); + buttonCancel = new Button(); + textBoxName = new TextBox(); + numericUpDownCount = new NumericUpDown(); + numericUpDownReversedCount = new NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)numericUpDownCount).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownReversedCount).BeginInit(); + SuspendLayout(); + // + // labelName + // + labelName.AutoSize = true; + labelName.Location = new Point(38, 51); + labelName.Name = "labelName"; + labelName.Size = new Size(39, 15); + labelName.TabIndex = 0; + labelName.Text = "Name"; + // + // labelCount + // + labelCount.AutoSize = true; + labelCount.Location = new Point(38, 96); + labelCount.Name = "labelCount"; + labelCount.Size = new Size(40, 15); + labelCount.TabIndex = 2; + labelCount.Text = "Count"; + // + // labelReversed + // + labelReversed.AutoSize = true; + labelReversed.Location = new Point(38, 142); + labelReversed.Name = "labelReversed"; + labelReversed.Size = new Size(87, 15); + labelReversed.TabIndex = 3; + labelReversed.Text = "ReversedCount"; + // + // buttonAdd + // + buttonAdd.Location = new Point(61, 194); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 23); + buttonAdd.TabIndex = 4; + buttonAdd.Text = "Add"; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(193, 194); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 5; + buttonCancel.Text = "Cancel"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // textBoxName + // + textBoxName.Location = new Point(169, 51); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(120, 23); + textBoxName.TabIndex = 6; + // + // numericUpDownCount + // + numericUpDownCount.Location = new Point(169, 94); + numericUpDownCount.Minimum = new decimal(new int[] { 1, 0, 0, 0 }); + numericUpDownCount.Name = "numericUpDownCount"; + numericUpDownCount.Size = new Size(120, 23); + numericUpDownCount.TabIndex = 7; + numericUpDownCount.Value = new decimal(new int[] { 1, 0, 0, 0 }); + // + // numericUpDownReversedCount + // + numericUpDownReversedCount.Location = new Point(169, 142); + numericUpDownReversedCount.Name = "numericUpDownReversedCount"; + numericUpDownReversedCount.Size = new Size(120, 23); + numericUpDownReversedCount.TabIndex = 8; + // + // FormMaterial + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(345, 237); + Controls.Add(numericUpDownReversedCount); + Controls.Add(numericUpDownCount); + Controls.Add(textBoxName); + Controls.Add(buttonCancel); + Controls.Add(buttonAdd); + Controls.Add(labelReversed); + Controls.Add(labelCount); + Controls.Add(labelName); + Name = "FormMaterial"; + Text = "Material"; + ((System.ComponentModel.ISupportInitialize)numericUpDownCount).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownReversedCount).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelName; + private Label labelCount; + private Label labelReversed; + private Button buttonAdd; + private Button buttonCancel; + private TextBox textBoxName; + private NumericUpDown numericUpDownCount; + private NumericUpDown numericUpDownReversedCount; + } +} \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterial.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterial.cs new file mode 100644 index 0000000..3ff6b2c --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterial.cs @@ -0,0 +1,68 @@ +using CarpentryWorkshop.Entities; +using CarpentryWorkshop.Repositories; + +namespace CarpentryWorkshop.Forms +{ + public partial class FormMaterial : Form + { + private readonly IMaterialRepository _materialRepository; + private int? _materialId; + public int Id + { + set + { + try + { + var material = _materialRepository.ReadMaterialById(value); + if (material == null) + { + throw new InvalidDataException(nameof(material)); + } + textBoxName.Text = material.Name; + numericUpDownCount.Value = material.Count; + numericUpDownReversedCount.Value = material.ReservInWarehouse; + _materialId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormMaterial(IMaterialRepository materialRepository) + { + InitializeComponent(); + _materialRepository = materialRepository ?? throw new ArgumentNullException(nameof(materialRepository)); + } + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (numericUpDownCount.Value < numericUpDownReversedCount.Value) + { + throw new Exception("Нельзя зарезервировать больше чем храниться на складе"); + } + if (_materialId.HasValue) + { + _materialRepository.UpdateMaterial(CreateMaterial(_materialId.Value)); + } + else + { + _materialRepository.CreateMaterial(CreateMaterial(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + private Material CreateMaterial(int id) => Material.CreateEntity(id, textBoxName.Text, Convert.ToInt32(numericUpDownCount.Value), Convert.ToInt32(numericUpDownReversedCount.Value)); + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Form1.resx b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterial.resx similarity index 93% rename from CarpentryWorkshop/CarpentryWorkshop/Form1.resx rename to CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterial.resx index 1af7de1..af32865 100644 --- a/CarpentryWorkshop/CarpentryWorkshop/Form1.resx +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterial.resx @@ -1,17 +1,17 @@  - diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialReplenishment.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialReplenishment.Designer.cs new file mode 100644 index 0000000..aeacb08 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialReplenishment.Designer.cs @@ -0,0 +1,119 @@ +namespace CarpentryWorkshop.Forms +{ + partial class FormMaterialReplenishment + { + /// + /// 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() + { + buttonAdd = new Button(); + buttonCancel = new Button(); + labelName = new Label(); + labelCount = new Label(); + textBoxName = new TextBox(); + numericUpDownCount = new NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)numericUpDownCount).BeginInit(); + SuspendLayout(); + // + // buttonAdd + // + buttonAdd.Location = new Point(33, 164); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 23); + buttonAdd.TabIndex = 1; + buttonAdd.Text = "Add"; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click_1; + // + // buttonCancel + // + buttonCancel.Location = new Point(199, 164); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 2; + buttonCancel.Text = "Cancel"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click_1; + // + // labelName + // + labelName.AutoSize = true; + labelName.Location = new Point(33, 46); + labelName.Name = "labelName"; + labelName.Size = new Size(39, 15); + labelName.TabIndex = 3; + labelName.Text = "Name"; + // + // labelCount + // + labelCount.AutoSize = true; + labelCount.Location = new Point(33, 97); + labelCount.Name = "labelCount"; + labelCount.Size = new Size(40, 15); + labelCount.TabIndex = 4; + labelCount.Text = "Count"; + // + // textBoxName + // + textBoxName.Location = new Point(124, 46); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(120, 23); + textBoxName.TabIndex = 7; + // + // numericUpDownCount + // + numericUpDownCount.Location = new Point(124, 97); + numericUpDownCount.Name = "numericUpDownCount"; + numericUpDownCount.Size = new Size(120, 23); + numericUpDownCount.TabIndex = 8; + // + // FormMaterialSpent + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(304, 204); + Controls.Add(numericUpDownCount); + Controls.Add(textBoxName); + Controls.Add(labelCount); + Controls.Add(labelName); + Controls.Add(buttonCancel); + Controls.Add(buttonAdd); + Name = "FormMaterialSpent"; + Text = "FormMaterialSpent"; + ((System.ComponentModel.ISupportInitialize)numericUpDownCount).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonAdd; + private Button buttonCancel; + private Label labelName; + private Label labelCount; + private TextBox textBoxName; + private NumericUpDown numericUpDownCount; + } +} \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialReplenishment.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialReplenishment.cs new file mode 100644 index 0000000..5acc2f9 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialReplenishment.cs @@ -0,0 +1,64 @@ +using CarpentryWorkshop.Entities; +using CarpentryWorkshop.Repositories; + +namespace CarpentryWorkshop.Forms +{ + public partial class FormMaterialReplenishment : Form + { + private readonly IMaterialReplenishmentRepository _materialSpentRepository; + private int? _materialSpentId; + public int Id + { + set + { + try + { + var materialSpent = _materialSpentRepository.ReadMaterialSpentById(value); + if (materialSpent == null) + { + throw new InvalidDataException(nameof(materialSpent)); + } + textBoxName.Text = materialSpent.Name; + numericUpDownCount.Value = materialSpent.Count; + _materialSpentId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormMaterialReplenishment(IMaterialReplenishmentRepository materialSpentRepository) + { + InitializeComponent(); + _materialSpentRepository = materialSpentRepository ?? throw new ArgumentNullException(nameof(materialSpentRepository)); + } + private MaterialReplenishment CreateMaterialSpent(int id) => MaterialReplenishment.CreateOperation(id, textBoxName.Text, Convert.ToInt32(numericUpDownCount.Value)); + private void buttonAdd_Click_1(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_materialSpentId.HasValue) + { + _materialSpentRepository.UpdateMaterialSpent(CreateMaterialSpent(_materialSpentId.Value)); + } + else + { + _materialSpentRepository.CreateMaterialSpent(CreateMaterialSpent(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void buttonCancel_Click_1(object sender, EventArgs e) => Close(); + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialReplenishment.resx b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialReplenishment.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialReplenishment.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/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterials.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterials.Designer.cs new file mode 100644 index 0000000..7fbcb0a --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterials.Designer.cs @@ -0,0 +1,125 @@ +namespace CarpentryWorkshop.Forms +{ + partial class FormMaterials + { + /// + /// 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() + { + panel = new Panel(); + buttonUpdate = new Button(); + buttonRemove = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel + // + panel.Controls.Add(buttonUpdate); + panel.Controls.Add(buttonRemove); + panel.Controls.Add(buttonAdd); + panel.Dock = DockStyle.Right; + panel.Location = new Point(602, 0); + panel.Name = "panel"; + panel.Size = new Size(148, 441); + panel.TabIndex = 0; + // + // buttonUpdate + // + buttonUpdate.BackgroundImage = Properties.Resources.png_transparent_pencil_editing_icon_big_pencil_s_angle_pencil_orange; + buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpdate.Location = new Point(36, 249); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(75, 76); + buttonUpdate.TabIndex = 2; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += ButtonUpdate_Click; + // + // buttonRemove + // + buttonRemove.BackgroundImage = Properties.Resources.Symbol_atmospheric_pressure_tendency_4_svg; + buttonRemove.BackgroundImageLayout = ImageLayout.Stretch; + buttonRemove.Location = new Point(36, 141); + buttonRemove.Name = "buttonRemove"; + buttonRemove.Size = new Size(75, 76); + buttonRemove.TabIndex = 1; + buttonRemove.UseVisualStyleBackColor = true; + buttonRemove.Click += ButtonRemove_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.pljus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(33, 43); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(81, 71); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(602, 441); + dataGridView.TabIndex = 1; + // + // FormMaterials + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(750, 441); + Controls.Add(dataGridView); + Controls.Add(panel); + Name = "FormMaterials"; + Text = "FormMaterials"; + Load += FormMaterials_Load; + panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel; + private Button buttonUpdate; + private Button buttonRemove; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterials.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterials.cs new file mode 100644 index 0000000..0017894 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterials.cs @@ -0,0 +1,92 @@ +using CarpentryWorkshop.Repositories; +using Unity; + +namespace CarpentryWorkshop.Forms +{ + public partial class FormMaterials : Form + { + private readonly IUnityContainer _container; + private readonly IMaterialRepository _materialRepository; + + public FormMaterials(IUnityContainer container, IMaterialRepository materiallRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _materialRepository = materiallRepository ?? throw new ArgumentNullException(nameof(materiallRepository)); + } + private void FormMaterials_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 ButtonRemove_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _materialRepository.DeleteMaterial(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonUpdate_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 LoadList() => dataGridView.DataSource = _materialRepository.ReadMaterials(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterials.resx b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterials.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterials.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/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialsReplenishment.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialsReplenishment.Designer.cs new file mode 100644 index 0000000..8005805 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialsReplenishment.Designer.cs @@ -0,0 +1,111 @@ +namespace CarpentryWorkshop.Forms +{ + partial class FormMaterialsReplenishment + { + /// + /// 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() + { + panel = new Panel(); + buttonUpdate = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel + // + panel.Controls.Add(buttonUpdate); + panel.Controls.Add(buttonAdd); + panel.Dock = DockStyle.Right; + panel.Location = new Point(652, 0); + panel.Name = "panel"; + panel.Size = new Size(148, 450); + panel.TabIndex = 1; + // + // buttonUpdate + // + buttonUpdate.BackgroundImage = Properties.Resources.png_transparent_pencil_editing_icon_big_pencil_s_angle_pencil_orange; + buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpdate.Location = new Point(33, 144); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(81, 76); + buttonUpdate.TabIndex = 2; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += buttonUpdate_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.pljus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(33, 43); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(81, 71); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(652, 450); + dataGridView.TabIndex = 2; + // + // FormMaterialsSpent + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView); + Controls.Add(panel); + Name = "FormMaterialsSpent"; + Text = "FormMaterialsSpent"; + Load += FormMaterialsSpent_Load; + panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel; + private Button buttonUpdate; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialsReplenishment.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialsReplenishment.cs new file mode 100644 index 0000000..0868e30 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialsReplenishment.cs @@ -0,0 +1,71 @@ +using CarpentryWorkshop.Repositories; +using Unity; + +namespace CarpentryWorkshop.Forms +{ + public partial class FormMaterialsReplenishment : Form + { + private readonly IUnityContainer _container; + private readonly IMaterialReplenishmentRepository _materialSpentRepository; + public FormMaterialsReplenishment(IUnityContainer container, IMaterialReplenishmentRepository materialSpentRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _materialSpentRepository = materialSpentRepository ?? throw new ArgumentNullException(nameof(materialSpentRepository)); + } + private void FormMaterialsSpent_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 buttonUpdate_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 LoadList() => dataGridView.DataSource = _materialSpentRepository.ReadMaterialsSpent(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialsReplenishment.resx b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialsReplenishment.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormMaterialsReplenishment.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/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrderProduct.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrderProduct.Designer.cs new file mode 100644 index 0000000..da1adc0 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrderProduct.Designer.cs @@ -0,0 +1,167 @@ +namespace CarpentryWorkshop.Forms +{ + partial class FormOrderProduct + { + /// + /// 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() + { + buttonAdd = new Button(); + buttonCancel = new Button(); + labelStatus = new Label(); + labelDescription = new Label(); + textBoxDescription = new TextBox(); + comboBoxStatus = new ComboBox(); + groupBox = new GroupBox(); + dataGridView = new DataGridView(); + ColumnProducts = new DataGridViewComboBoxColumn(); + ColumnCount = new DataGridViewTextBoxColumn(); + groupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // buttonAdd + // + buttonAdd.Location = new Point(36, 461); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 23); + buttonAdd.TabIndex = 0; + buttonAdd.Text = "Add"; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(345, 461); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 23); + buttonCancel.TabIndex = 1; + buttonCancel.Text = "Cancel"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // labelStatus + // + labelStatus.AutoSize = true; + labelStatus.Location = new Point(21, 19); + labelStatus.Name = "labelStatus"; + labelStatus.Size = new Size(39, 15); + labelStatus.TabIndex = 2; + labelStatus.Text = "Status"; + // + // labelDescription + // + labelDescription.AutoSize = true; + labelDescription.Location = new Point(21, 64); + labelDescription.Name = "labelDescription"; + labelDescription.Size = new Size(67, 15); + labelDescription.TabIndex = 3; + labelDescription.Text = "Description"; + // + // textBoxDescription + // + textBoxDescription.Location = new Point(116, 61); + textBoxDescription.Multiline = true; + textBoxDescription.Name = "textBoxDescription"; + textBoxDescription.Size = new Size(234, 44); + textBoxDescription.TabIndex = 4; + // + // comboBoxStatus + // + comboBoxStatus.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxStatus.FormattingEnabled = true; + comboBoxStatus.Location = new Point(116, 19); + comboBoxStatus.Name = "comboBoxStatus"; + comboBoxStatus.Size = new Size(234, 23); + comboBoxStatus.TabIndex = 5; + // + // groupBox + // + groupBox.Controls.Add(dataGridView); + groupBox.Location = new Point(12, 111); + groupBox.Name = "groupBox"; + groupBox.Size = new Size(442, 327); + groupBox.TabIndex = 6; + groupBox.TabStop = false; + groupBox.Text = "groupBox"; + // + // dataGridView + // + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnProducts, ColumnCount }); + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(3, 19); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(436, 305); + dataGridView.TabIndex = 0; + // + // ColumnProducts + // + ColumnProducts.HeaderText = "Products"; + ColumnProducts.Name = "ColumnProducts"; + ColumnProducts.SortMode = DataGridViewColumnSortMode.Automatic; + // + // ColumnCount + // + ColumnCount.HeaderText = "Count"; + ColumnCount.Name = "ColumnCount"; + // + // FormOrderProduct + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(479, 505); + Controls.Add(groupBox); + Controls.Add(comboBoxStatus); + Controls.Add(textBoxDescription); + Controls.Add(labelDescription); + Controls.Add(labelStatus); + Controls.Add(buttonCancel); + Controls.Add(buttonAdd); + Name = "FormOrderProduct"; + Text = "FormOrder"; + groupBox.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonAdd; + private Button buttonCancel; + private Label labelStatus; + private Label labelDescription; + private TextBox textBoxDescription; + private ComboBox comboBoxStatus; + private GroupBox groupBox; + private DataGridView dataGridView; + private DataGridViewComboBoxColumn ColumnProducts; + private DataGridViewTextBoxColumn ColumnCount; + } +} \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrderProduct.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrderProduct.cs new file mode 100644 index 0000000..a5d3c01 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrderProduct.cs @@ -0,0 +1,52 @@ +using CarpentryWorkshop.Entities; +using CarpentryWorkshop.Entities.Enums; +using CarpentryWorkshop.Repositories; + +namespace CarpentryWorkshop.Forms +{ + public partial class FormOrderProduct : Form + { + private readonly IOrderRepository _orderRepository; + public FormOrderProduct(IOrderRepository orderRepository, IProductRepository productRepository) + { + InitializeComponent(); + _orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository)); + + comboBoxStatus.DataSource = Enum.GetValues(typeof(OrderStatus)); + + ColumnProducts.DataSource = productRepository.ReadProducts(); + ColumnProducts.DisplayMember = "Name"; + ColumnProducts.ValueMember = "Id"; + } + private void ButtonAdd_Click(object sender, EventArgs e) + { + if (dataGridView.RowCount < 1 || textBoxDescription.Text == null || comboBoxStatus.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненны поля"); + } + try + { + _orderRepository.CreateOrder(Order.CreateOperation(0, (OrderStatus)comboBoxStatus.SelectedValue!, textBoxDescription.Text, CreateListProductFromDataGrid())); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + private List CreateListProductFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridView.Rows) + { + if (row.Cells["ColumnProducts"].Value == null || row.Cells["ColumnCount"].Value == null) + { + continue; + } + list.Add(OrderProduct.CreateOperation(0, Convert.ToInt32(row.Cells["ColumnProducts"].Value), Convert.ToInt32(row.Cells["ColumnCount"].Value))); + } + return list; + } + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrderProduct.resx b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrderProduct.resx new file mode 100644 index 0000000..8bd08f1 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrderProduct.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/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrders.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrders.Designer.cs new file mode 100644 index 0000000..78ecff7 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrders.Designer.cs @@ -0,0 +1,111 @@ +namespace CarpentryWorkshop.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() + { + panel = new Panel(); + buttonRemove = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel + // + panel.Controls.Add(buttonRemove); + panel.Controls.Add(buttonAdd); + panel.Dock = DockStyle.Right; + panel.Location = new Point(600, 0); + panel.Name = "panel"; + panel.Size = new Size(200, 450); + panel.TabIndex = 0; + // + // buttonRemove + // + buttonRemove.BackgroundImage = Properties.Resources.Symbol_atmospheric_pressure_tendency_4_svg; + buttonRemove.BackgroundImageLayout = ImageLayout.Stretch; + buttonRemove.Location = new Point(61, 148); + buttonRemove.Name = "buttonRemove"; + buttonRemove.Size = new Size(81, 76); + buttonRemove.TabIndex = 2; + buttonRemove.UseVisualStyleBackColor = true; + buttonRemove.Click += ButtonRemove_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.pljus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(61, 55); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(81, 71); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(600, 450); + dataGridView.TabIndex = 2; + // + // FormOrders + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView); + Controls.Add(panel); + Name = "FormOrders"; + Text = "FormOrders"; + Load += FormOrders_Load; + panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel; + private DataGridView dataGridView; + private Button buttonAdd; + private Button buttonRemove; + } +} \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrders.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrders.cs new file mode 100644 index 0000000..2f40068 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrders.cs @@ -0,0 +1,72 @@ +using CarpentryWorkshop.Repositories; +using Unity; + +namespace CarpentryWorkshop.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 ButtonRemove_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() => dataGridView.DataSource = _orderRepository.ReadOrders(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrders.resx b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrders.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormOrders.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/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProductMaterial.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProductMaterial.Designer.cs new file mode 100644 index 0000000..afe0394 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProductMaterial.Designer.cs @@ -0,0 +1,193 @@ +namespace CarpentryWorkshop.Forms +{ + partial class FormProductMaterial + { + /// + /// 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() + { + groupBox = new GroupBox(); + dataGridView = new DataGridView(); + ColumnMaterials = new DataGridViewComboBoxColumn(); + ColumnCount = new DataGridViewTextBoxColumn(); + buttonAdd = new Button(); + buttonCancel = new Button(); + labelName = new Label(); + labelType = new Label(); + labelCountInWarehouse = new Label(); + textBoxName = new TextBox(); + comboBoxProduct = new ComboBox(); + numericUpDownCount = new NumericUpDown(); + groupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownCount).BeginInit(); + SuspendLayout(); + // + // groupBox + // + groupBox.Controls.Add(dataGridView); + groupBox.Location = new Point(12, 171); + groupBox.Name = "groupBox"; + groupBox.Size = new Size(567, 267); + groupBox.TabIndex = 0; + groupBox.TabStop = false; + groupBox.Text = "groupBox"; + // + // dataGridView + // + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnMaterials, ColumnCount }); + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(3, 19); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(561, 245); + dataGridView.TabIndex = 0; + // + // ColumnMaterials + // + ColumnMaterials.HeaderText = "Materials"; + ColumnMaterials.Name = "ColumnMaterials"; + ColumnMaterials.Resizable = DataGridViewTriState.True; + ColumnMaterials.SortMode = DataGridViewColumnSortMode.Automatic; + // + // ColumnCount + // + ColumnCount.HeaderText = "Count"; + ColumnCount.Name = "ColumnCount"; + // + // buttonAdd + // + buttonAdd.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonAdd.Location = new Point(84, 447); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(125, 23); + buttonAdd.TabIndex = 1; + buttonAdd.Text = "Add"; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(355, 447); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(125, 23); + buttonCancel.TabIndex = 2; + buttonCancel.Text = "Cancel"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // labelName + // + labelName.AutoSize = true; + labelName.Location = new Point(31, 31); + labelName.Name = "labelName"; + labelName.Size = new Size(39, 15); + labelName.TabIndex = 3; + labelName.Text = "Name"; + // + // labelType + // + labelType.AutoSize = true; + labelType.Location = new Point(31, 78); + labelType.Name = "labelType"; + labelType.Size = new Size(76, 15); + labelType.TabIndex = 4; + labelType.Text = "Product Type"; + // + // labelCountInWarehouse + // + labelCountInWarehouse.AutoSize = true; + labelCountInWarehouse.Location = new Point(31, 130); + labelCountInWarehouse.Name = "labelCountInWarehouse"; + labelCountInWarehouse.Size = new Size(113, 15); + labelCountInWarehouse.TabIndex = 5; + labelCountInWarehouse.Text = "Count in warehouse"; + // + // textBoxName + // + textBoxName.Location = new Point(188, 28); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(141, 23); + textBoxName.TabIndex = 6; + // + // comboBoxProduct + // + comboBoxProduct.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxProduct.FormattingEnabled = true; + comboBoxProduct.Location = new Point(188, 78); + comboBoxProduct.Name = "comboBoxProduct"; + comboBoxProduct.Size = new Size(141, 23); + comboBoxProduct.TabIndex = 7; + // + // numericUpDownCount + // + numericUpDownCount.Location = new Point(188, 130); + numericUpDownCount.Name = "numericUpDownCount"; + numericUpDownCount.Size = new Size(141, 23); + numericUpDownCount.TabIndex = 8; + // + // FormMaterialConsumption + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(591, 482); + Controls.Add(numericUpDownCount); + Controls.Add(comboBoxProduct); + Controls.Add(textBoxName); + Controls.Add(labelCountInWarehouse); + Controls.Add(labelType); + Controls.Add(labelName); + Controls.Add(buttonCancel); + Controls.Add(buttonAdd); + Controls.Add(groupBox); + Name = "FormMaterialConsumption"; + Text = "FormMaterialConsumption"; + groupBox.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownCount).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private GroupBox groupBox; + private DataGridView dataGridView; + private Button buttonAdd; + private Button buttonCancel; + private DataGridViewComboBoxColumn ColumnMaterials; + private DataGridViewTextBoxColumn ColumnCount; + private Label labelName; + private Label labelType; + private Label labelCountInWarehouse; + private TextBox textBoxName; + private ComboBox comboBoxProduct; + private NumericUpDown numericUpDownCount; + } +} \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProductMaterial.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProductMaterial.cs new file mode 100644 index 0000000..d744431 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProductMaterial.cs @@ -0,0 +1,88 @@ +using CarpentryWorkshop.Entities; +using CarpentryWorkshop.Entities.Enums; +using CarpentryWorkshop.Repositories; + +namespace CarpentryWorkshop.Forms +{ + public partial class FormProductMaterial : Form + { + private readonly IProductRepository _productRepository; + private int? _productId; + public int Id + { + set + { + try + { + var product = _productRepository.ReadProductById(value); + if (product == null) + { + throw new InvalidDataException(nameof(product)); + } + textBoxName.Text = product.Name; + comboBoxProduct.SelectedItem = product.Type; + numericUpDownCount.Value = product.CountInWarehouse; + _productId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при полученииданных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormProductMaterial(IProductRepository productRepository, IMaterialRepository materialRepository) + { + InitializeComponent(); + _productRepository = productRepository ?? throw new ArgumentNullException(nameof(productRepository)); + + comboBoxProduct.DataSource = Enum.GetValues(typeof(ProductType)); + + ColumnMaterials.DataSource = materialRepository.ReadMaterials(); + ColumnMaterials.DisplayMember = "Name"; + ColumnMaterials.ValueMember = "Id"; + } + private void buttonAdd_Click(object sender, EventArgs e) + { + if (dataGridView.RowCount < 1) + { + throw new Exception("Имеются незаполненны поля"); + } + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text) || comboBoxProduct.SelectedIndex < 1) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_productId.HasValue) + { + _productRepository.UpdateProduct(CreateProduct(_productId.Value)); + } + else + { + _productRepository.CreateProduct(CreateProduct(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void buttonCancel_Click(object sender, EventArgs e) => Close(); + private List CreateListMaterialFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridView.Rows) + { + if (row.Cells["ColumnMaterials"].Value == null || row.Cells["ColumnCount"].Value == null) + { + continue; + } + list.Add(ProductMaterial.CreateOperation(0, Convert.ToInt32(row.Cells["ColumnMaterials"].Value), Convert.ToInt32(row.Cells["ColumnCount"].Value))); + } + return list; + } + private Product CreateProduct(int id) => Product.CreateEntity(id, textBoxName.Text, (ProductType)comboBoxProduct.SelectedItem!, Convert.ToInt32(numericUpDownCount.Value), CreateListMaterialFromDataGrid()); + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProductMaterial.resx b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProductMaterial.resx new file mode 100644 index 0000000..b6c4d33 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProductMaterial.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/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProducts.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProducts.Designer.cs new file mode 100644 index 0000000..d0b4255 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProducts.Designer.cs @@ -0,0 +1,125 @@ +namespace CarpentryWorkshop.Forms +{ + partial class FormProducts + { + /// + /// 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() + { + panel = new Panel(); + buttonUpdate = new Button(); + buttonRemove = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel + // + panel.Controls.Add(buttonUpdate); + panel.Controls.Add(buttonRemove); + panel.Controls.Add(buttonAdd); + panel.Dock = DockStyle.Right; + panel.Location = new Point(623, 0); + panel.Name = "panel"; + panel.Size = new Size(177, 450); + panel.TabIndex = 0; + // + // buttonUpdate + // + buttonUpdate.BackgroundImage = Properties.Resources.png_transparent_pencil_editing_icon_big_pencil_s_angle_pencil_orange; + buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpdate.Location = new Point(47, 230); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(81, 71); + buttonUpdate.TabIndex = 3; + buttonUpdate.UseVisualStyleBackColor = true; + buttonUpdate.Click += buttonUpdate_Click; + // + // buttonRemove + // + buttonRemove.BackgroundImage = Properties.Resources.Symbol_atmospheric_pressure_tendency_4_svg; + buttonRemove.BackgroundImageLayout = ImageLayout.Stretch; + buttonRemove.Location = new Point(47, 137); + buttonRemove.Name = "buttonRemove"; + buttonRemove.Size = new Size(81, 71); + buttonRemove.TabIndex = 2; + buttonRemove.UseVisualStyleBackColor = true; + buttonRemove.Click += buttonRemove_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.pljus; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(47, 50); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(81, 71); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(623, 450); + dataGridView.TabIndex = 1; + // + // FormProducts + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView); + Controls.Add(panel); + Name = "FormProducts"; + Text = "FormProducts"; + Load += FormProducts_Load; + panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel; + private Button buttonUpdate; + private Button buttonRemove; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProducts.cs b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProducts.cs new file mode 100644 index 0000000..9354598 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProducts.cs @@ -0,0 +1,90 @@ +using CarpentryWorkshop.Repositories; +using Unity; + +namespace CarpentryWorkshop.Forms +{ + public partial class FormProducts : Form + { + private readonly IUnityContainer _container; + private readonly IProductRepository _productRepository; + public FormProducts(IUnityContainer container, IProductRepository productRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _productRepository = productRepository ?? throw new ArgumentNullException(nameof(productRepository)); + } + private void FormProducts_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 buttonRemove_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + try + { + _productRepository.DeleteProduct(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void buttonUpdate_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 LoadList() => dataGridView.DataSource = _productRepository.ReadProducts(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProducts.resx b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProducts.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Forms/FormProducts.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/CarpentryWorkshop/CarpentryWorkshop/Program.cs b/CarpentryWorkshop/CarpentryWorkshop/Program.cs index 57440dd..0d4eaf5 100644 --- a/CarpentryWorkshop/CarpentryWorkshop/Program.cs +++ b/CarpentryWorkshop/CarpentryWorkshop/Program.cs @@ -1,3 +1,7 @@ +using Unity; +using CarpentryWorkshop.Repositories; +using CarpentryWorkshop.Repositories.Implementations; + namespace CarpentryWorkshop { internal static class Program @@ -11,7 +15,17 @@ namespace CarpentryWorkshop // 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(); + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + return container; + } + } } \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Properties/Resources.Designer.cs b/CarpentryWorkshop/CarpentryWorkshop/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3b06d91 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace CarpentryWorkshop.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("CarpentryWorkshop.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; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pljus { + get { + object obj = ResourceManager.GetObject("pljus", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap png_transparent_pencil_editing_icon_big_pencil_s_angle_pencil_orange { + get { + object obj = ResourceManager.GetObject("png-transparent-pencil-editing-icon-big-pencil-s-angle-pencil-orange", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Symbol_atmospheric_pressure_tendency_4_svg { + get { + object obj = ResourceManager.GetObject("Symbol_atmospheric_pressure_tendency_4.svg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Uborka_masterskoi_2 { + get { + object obj = ResourceManager.GetObject("Uborka-masterskoi-2", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Properties/Resources.resx b/CarpentryWorkshop/CarpentryWorkshop/Properties/Resources.resx new file mode 100644 index 0000000..251f505 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + ..\Resources\pljus.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\png-transparent-pencil-editing-icon-big-pencil-s-angle-pencil-orange.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Symbol_atmospheric_pressure_tendency_4.svg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Uborka-masterskoi-2.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/CarpentryWorkshop/CarpentryWorkshop/Repositories/IMaterialReplenishmentRepository.cs b/CarpentryWorkshop/CarpentryWorkshop/Repositories/IMaterialReplenishmentRepository.cs new file mode 100644 index 0000000..7e10d89 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Repositories/IMaterialReplenishmentRepository.cs @@ -0,0 +1,11 @@ +using CarpentryWorkshop.Entities; + +namespace CarpentryWorkshop.Repositories; + +public interface IMaterialReplenishmentRepository +{ + IEnumerable ReadMaterialsSpent(); + MaterialReplenishment ReadMaterialSpentById(int id); + void CreateMaterialSpent(MaterialReplenishment material); + void UpdateMaterialSpent(MaterialReplenishment material); +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Repositories/IMaterialRepository.cs b/CarpentryWorkshop/CarpentryWorkshop/Repositories/IMaterialRepository.cs new file mode 100644 index 0000000..e0d4070 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Repositories/IMaterialRepository.cs @@ -0,0 +1,12 @@ +using CarpentryWorkshop.Entities; + +namespace CarpentryWorkshop.Repositories; + +public interface IMaterialRepository +{ + IEnumerable ReadMaterials(); + Material ReadMaterialById(int id); + void CreateMaterial(Material material); + void UpdateMaterial(Material material); + void DeleteMaterial(int id); +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Repositories/IOrderRepository.cs b/CarpentryWorkshop/CarpentryWorkshop/Repositories/IOrderRepository.cs new file mode 100644 index 0000000..a1b56f3 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Repositories/IOrderRepository.cs @@ -0,0 +1,11 @@ +using CarpentryWorkshop.Entities; + +namespace CarpentryWorkshop.Repositories; + +public interface IOrderRepository +{ + IEnumerable ReadOrders(DateTime? dateForm = null, DateTime? dateTo = null, int? orderStatus = null, int? orderId = null); + Order ReadOrderById(int orderId); + void CreateOrder(Order order); + void DeleteOrder(int id); +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Repositories/IProductRepository.cs b/CarpentryWorkshop/CarpentryWorkshop/Repositories/IProductRepository.cs new file mode 100644 index 0000000..ce38a56 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Repositories/IProductRepository.cs @@ -0,0 +1,12 @@ +using CarpentryWorkshop.Entities; + +namespace CarpentryWorkshop.Repositories; + +public interface IProductRepository +{ + IEnumerable ReadProducts(); + Product ReadProductById(int id); + void CreateProduct(Product product); + void UpdateProduct(Product product); + void DeleteProduct(int id); +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/MaterialReplenishmentRepository.cs b/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/MaterialReplenishmentRepository.cs new file mode 100644 index 0000000..d86e94c --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/MaterialReplenishmentRepository.cs @@ -0,0 +1,24 @@ +using CarpentryWorkshop.Entities; + +namespace CarpentryWorkshop.Repositories.Implementations; + +public class MaterialReplenishmentRepository : IMaterialReplenishmentRepository +{ + public void CreateMaterialSpent(MaterialReplenishment material) + { + } + + public MaterialReplenishment ReadMaterialSpentById(int id) + { + return MaterialReplenishment.CreateOperation(0, string.Empty, 0); + } + + public IEnumerable ReadMaterialsSpent() + { + return []; + } + + public void UpdateMaterialSpent(MaterialReplenishment material) + { + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/MaterialRepository.cs b/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/MaterialRepository.cs new file mode 100644 index 0000000..fa8864a --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/MaterialRepository.cs @@ -0,0 +1,28 @@ +using CarpentryWorkshop.Entities; + +namespace CarpentryWorkshop.Repositories.Implementations; + +public class MaterialRepository : IMaterialRepository +{ + public void CreateMaterial(Material material) + { + } + + public void DeleteMaterial(int id) + { + } + + public IEnumerable ReadMaterials() + { + return []; + } + + public Material ReadMaterialById(int id) + { + return Material.CreateEntity(id, string.Empty, 0, 0); + } + + public void UpdateMaterial(Material material) + { + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/OrderRepository.cs b/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/OrderRepository.cs new file mode 100644 index 0000000..b3cfeae --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/OrderRepository.cs @@ -0,0 +1,23 @@ +using CarpentryWorkshop.Entities; + +namespace CarpentryWorkshop.Repositories.Implementations; + +public class OrderRepository : IOrderRepository +{ + public void CreateOrder(Order feedReplenishment) + { + } + + public void DeleteOrder(int id) + { + } + + public IEnumerable ReadOrders(DateTime? dateForm = null, DateTime? dateTo = null, int? orderStatus = null, int? orderId = null) + { + return []; + } + public Order ReadOrderById(int id) + { + return Order.CreateOperation(id, 0, string.Empty, []); + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/ProductRepository.cs b/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/ProductRepository.cs new file mode 100644 index 0000000..2a50786 --- /dev/null +++ b/CarpentryWorkshop/CarpentryWorkshop/Repositories/Implementations/ProductRepository.cs @@ -0,0 +1,28 @@ +using CarpentryWorkshop.Entities; + +namespace CarpentryWorkshop.Repositories.Implementations; + +public class ProductRepository : IProductRepository +{ + public void CreateProduct(Product product) + { + } + + public void DeleteProduct(int id) + { + } + + public IEnumerable ReadProducts() + { + return []; + } + + public Product ReadProductById(int id) + { + return Product.CreateEntity(id, string.Empty, 0, 0, []); + } + + public void UpdateProduct(Product product) + { + } +} diff --git a/CarpentryWorkshop/CarpentryWorkshop/Resources/Symbol_atmospheric_pressure_tendency_4.svg.png b/CarpentryWorkshop/CarpentryWorkshop/Resources/Symbol_atmospheric_pressure_tendency_4.svg.png new file mode 100644 index 0000000..b7eeb41 Binary files /dev/null and b/CarpentryWorkshop/CarpentryWorkshop/Resources/Symbol_atmospheric_pressure_tendency_4.svg.png differ diff --git a/CarpentryWorkshop/CarpentryWorkshop/Resources/Uborka-masterskoi-2.jpg b/CarpentryWorkshop/CarpentryWorkshop/Resources/Uborka-masterskoi-2.jpg new file mode 100644 index 0000000..2e2a469 Binary files /dev/null and b/CarpentryWorkshop/CarpentryWorkshop/Resources/Uborka-masterskoi-2.jpg differ diff --git a/CarpentryWorkshop/CarpentryWorkshop/Resources/pljus.jpg b/CarpentryWorkshop/CarpentryWorkshop/Resources/pljus.jpg new file mode 100644 index 0000000..b766719 Binary files /dev/null and b/CarpentryWorkshop/CarpentryWorkshop/Resources/pljus.jpg differ diff --git a/CarpentryWorkshop/CarpentryWorkshop/Resources/png-transparent-pencil-editing-icon-big-pencil-s-angle-pencil-orange.png b/CarpentryWorkshop/CarpentryWorkshop/Resources/png-transparent-pencil-editing-icon-big-pencil-s-angle-pencil-orange.png new file mode 100644 index 0000000..ad8dba2 Binary files /dev/null and b/CarpentryWorkshop/CarpentryWorkshop/Resources/png-transparent-pencil-editing-icon-big-pencil-s-angle-pencil-orange.png differ