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