LabWork01 done?

This commit is contained in:
2024-12-04 18:20:51 +03:00
parent 6af33f1dde
commit f4ae3d879a
50 changed files with 2834 additions and 269 deletions

View File

@@ -1,12 +0,0 @@
namespace ProjectCarpentryWorkshop.Entities.Enums;
public enum MaterialSupplySupplier
{
None = 0,
Sarai = 1,
Megastroi = 2,
SuperStroika = 3
}

View File

@@ -1,21 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectCarpentryWorkshop.Entities.Enums;
public enum OrderCustomerName
{
None = 0,
Lenta = 1,
Ashan = 2,
Matro = 3
}

View File

@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace ProjectCarpentryWorkshop.Entities.Enums;
public enum OrderOrderStatus
public enum OrderStatus
{
None = 0,

View File

@@ -0,0 +1,9 @@
namespace ProjectCarpentryWorkshop.Entities.Enums;
[Flags]
public enum ProductType
{
None = 0,
Wardrobe = 1 << 0,
Table = 1 << 1,
Bench = 1 << 2
}

View File

@@ -10,17 +10,16 @@ public class Material
{
public int Id { get; private set; }
public string Name { get; private set; } = string.Empty;
public int Price { get; private set; }
public int QuantityInStock { get; private set; }
public static Material CreateEntity(int id, string name, int
price, int quantityInStock)
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 ?? string.Empty,
Price = price,
QuantityInStock = quantityInStock
Name = name,
Count = count,
ReservInWarehouse = reserveInWarehouse
};
}
}

View File

@@ -11,26 +11,15 @@ namespace ProjectCarpentryWorkshop.Entities;
public class MaterialSupply
{
public int Id { get; private set; }
public int MaterialId { get; private set; }
public MaterialSupplySupplier MaterialSupplySupplier { get; private set; }
public string Name { get; private set; } = string.Empty;
public DateTime Date { get; private set; }
public int Price { get; private set; }
public int QuantityInStock { get; private set; }
public static MaterialSupply CreateOperation(int id, int materialId,MaterialSupplySupplier materialSupplySupplier, string name, int price, int quantityInStock)
public int Count { get; private set; }
public static MaterialSupply CreateOperation(int id, string name, int count)
{
return new MaterialSupply
{
Id = id,
MaterialId = materialId,
MaterialSupplySupplier = materialSupplySupplier,
Name = name ?? string.Empty,
Date = DateTime.Now,
Price = price,
QuantityInStock = quantityInStock
Name = name,
Count = count
};
}
}

View File

@@ -10,26 +10,19 @@ namespace ProjectCarpentryWorkshop.Entities;
public class Order
{
public int Id { get; private set; }
public string CustomerName { get; private set; } = string.Empty;
public DateTime Date { get; private set; }
public int QuantityInStock { get; private set; }
public int OrderPrice { get; private set; }
public OrderCustomerName OrderCustomerName { get; private set; }
public OrderOrderStatus OrderOrderStatus { get; private set; }
public static Order CreateOperation(int id, string customerName, int quantityInStock, int orderPrice, OrderCustomerName orderCustomerName, OrderOrderStatus orderOrderStatus)
public DateTime DataOrder { get; private set; }
public OrderStatus Status { get; private set; }
public string Description { get; private set; } = string.Empty;
public IEnumerable<OrderProduction> OrderProduction { get; private set; } = [];
public static Order CreateOperation(int id, OrderStatus status, string description, IEnumerable<OrderProduction> orderProduction)
{
return new Order
{
Id = id,
CustomerName = customerName ?? string.Empty,
Date = DateTime.Now,
QuantityInStock = quantityInStock,
OrderPrice = orderPrice,
OrderCustomerName = orderCustomerName,
OrderOrderStatus = orderOrderStatus
DataOrder = DateTime.Now,
Status = status,
Description = description,
OrderProduction = orderProduction
};
}
}

View File

@@ -1,26 +0,0 @@
using ProjectCarpentryWorkshop.Entities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectCarpentryWorkshop.Entities;
public class OrderOfProduction
{
public int OrderId { get; private set; }
public int ProductionId { get; private set; }
public int QuantityProduction{ get; private set; }
public static OrderOfProduction CreateElement(int orderId, int productionId, int
quantityProduction)
{
return new OrderOfProduction
{
OrderId = orderId,
ProductionId = productionId,
QuantityProduction= quantityProduction,
};
}
}

View File

@@ -0,0 +1,24 @@
using ProjectCarpentryWorkshop.Entities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectCarpentryWorkshop.Entities;
public class OrderProduction
{
public int Id { get; private set; }
public int ProductId { get; private set; }
public int Count { get; private set; }
public static OrderProduction CreateOperation(int id, int productId, int count)
{
return new OrderProduction
{
Id = id,
ProductId = productId,
Count = count
};
}
}

View File

@@ -12,20 +12,18 @@ public class Production
public int Id { get; private set; }
public string Name { get; private set; } = string.Empty;
public string Description { get; private set; } = string.Empty;
public int Price { get; private set; }
public int QuantityInStock { get; private set; }
public static Production CreateEntity(int id, string name, int
price, int quantityInStock, string description)
public ProductType Type { get; private set; }
public int CountInWarehouse { get; private set; }
public IEnumerable<ProductionMaterial> ProductionMaterial { get; set; } = [];
public static Production CreateEntity(int id, string name, ProductType type, int countInWarehouse, IEnumerable<ProductionMaterial> productionMaterial)
{
return new Production
{
Id = id,
Name = name ?? string.Empty,
Price = price,
QuantityInStock = quantityInStock,
Description = description ?? string.Empty
Name = name,
Type = type,
CountInWarehouse = countInWarehouse,
ProductionMaterial = productionMaterial
};
}
}

View File

@@ -8,18 +8,16 @@ namespace ProjectCarpentryWorkshop.Entities;
public class ProductionMaterial
{
public int MaterialId { get; private set; }
public int ProductionId { get; private set; }
public int QuantityMaterials { get; private set; }
public static ProductionMaterial CreateElement(int materialId, int productionId, int
quantityMaterials)
public int Id { get; private set; }
public int MaterialId { get; set; }
public int Count { get; set; }
public static ProductionMaterial CreateOperation(int id, int materialId, int count)
{
return new ProductionMaterial
{
Id = id,
MaterialId = materialId,
ProductionId = productionId,
QuantityMaterials = quantityMaterials,
Count = count
};
}
}

View File

@@ -30,12 +30,12 @@
{
menuStrip = new MenuStrip();
справочникиToolStripMenuItem = new ToolStripMenuItem();
операцииToolStripMenuItem = new ToolStripMenuItem();
отчетыToolStripMenuItem = new ToolStripMenuItem();
материалыToolStripMenuItem = new ToolStripMenuItem();
продукцияToolStripMenuItem = new ToolStripMenuItem();
операцииToolStripMenuItem = new ToolStripMenuItem();
заказToolStripMenuItem = new ToolStripMenuItem();
поступлениеМатериаловToolStripMenuItem = new ToolStripMenuItem();
отчетыToolStripMenuItem = new ToolStripMenuItem();
menuStrip.SuspendLayout();
SuspendLayout();
//
@@ -55,6 +55,21 @@
справочникиToolStripMenuItem.Size = new Size(94, 20);
справочникиToolStripMenuItem.Text = "Справочники";
//
// материалыToolStripMenuItem
//
материалыToolStripMenuItem.Name = атериалыToolStripMenuItem";
материалыToolStripMenuItem.Size = new Size(180, 22);
материалыToolStripMenuItem.Text = "Материалы";
материалыToolStripMenuItem.Click += MaterialsToolStripMenuItem_Click;
//
// продукцияToolStripMenuItem
//
продукцияToolStripMenuItem.Name = "продукцияToolStripMenuItem";
продукцияToolStripMenuItem.Size = new Size(180, 22);
продукцияToolStripMenuItem.Text = "Изделия";
продукцияToolStripMenuItem.Click += ProductsToolStripMenuItem_Click;
//
// операцииToolStripMenuItem
//
операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { заказToolStripMenuItem, поступлениеМатериаловToolStripMenuItem });
@@ -62,36 +77,27 @@
операцииToolStripMenuItem.Size = new Size(75, 20);
операцииToolStripMenuItem.Text = "Операции";
//
// отчетыToolStripMenuItem
//
отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem";
отчетыToolStripMenuItem.Size = new Size(60, 20);
отчетыToolStripMenuItem.Text = "Отчеты";
//
// материалыToolStripMenuItem
//
материалыToolStripMenuItem.Name = атериалыToolStripMenuItem";
материалыToolStripMenuItem.Size = new Size(180, 22);
материалыToolStripMenuItem.Text = "Материалы";
//
// продукцияToolStripMenuItem
//
продукцияToolStripMenuItem.Name = "продукцияToolStripMenuItem";
продукцияToolStripMenuItem.Size = new Size(180, 22);
продукцияToolStripMenuItem.Text = "Изделия";
продукцияToolStripMenuItem.Click += продукцияToolStripMenuItem_Click;
//
// заказToolStripMenuItem
//
заказToolStripMenuItem.Name = аказToolStripMenuItem";
заказToolStripMenuItem.Size = new Size(216, 22);
заказToolStripMenuItem.Text = "Заказ";
заказToolStripMenuItem.Click += OrderToolStripMenuItem_Click;
//
// поступлениеМатериаловToolStripMenuItem
//
поступлениеМатериаловToolStripMenuItem.Name = "поступлениеМатериаловToolStripMenuItem";
поступлениеМатериаловToolStripMenuItem.Size = new Size(216, 22);
поступлениеМатериаловToolStripMenuItem.Text = "Поступление материалов";
поступлениеМатериаловToolStripMenuItem.Click += MaterialConsumptionToolStripMenuItem_Click;
//
// отчетыToolStripMenuItem
//
отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem";
отчетыToolStripMenuItem.Size = new Size(60, 20);
отчетыToolStripMenuItem.Text = "Отчеты";
//
// FormWorkshop
//

View File

@@ -1,15 +1,59 @@
using ProjectCarpentryWorkshop.Forms;
using Unity;
namespace ProjectCarpentryWorkshop
{
public partial class FormWorkshop : Form
{
public FormWorkshop()
private readonly IUnityContainer _container;
public FormWorkshop(IUnityContainer container)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
}
private void <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ToolStripMenuItem_Click(object sender, EventArgs e)
private void ProductsToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormProduction>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void MaterialsToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormMaterials>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void OrderToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormOrders>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void MaterialConsumptionToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormMaterialsSupply>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@@ -28,86 +28,118 @@
/// </summary>
private void InitializeComponent()
{
label1 = new Label();
textBox1 = new TextBox();
label2 = new Label();
textBox2 = new TextBox();
label3 = new Label();
textBox3 = new TextBox();
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();
//
// label1
// labelName
//
label1.AutoSize = true;
label1.Location = new Point(12, 29);
label1.Name = "label1";
label1.Size = new Size(38, 15);
label1.TabIndex = 0;
label1.Text = "label1";
labelName.AutoSize = true;
labelName.Location = new Point(38, 51);
labelName.Name = "labelName";
labelName.Size = new Size(39, 15);
labelName.TabIndex = 0;
labelName.Text = "Name";
//
// textBox1
// labelCount
//
textBox1.Location = new Point(71, 26);
textBox1.Name = "textBox1";
textBox1.Size = new Size(100, 23);
textBox1.TabIndex = 1;
labelCount.AutoSize = true;
labelCount.Location = new Point(38, 96);
labelCount.Name = "labelCount";
labelCount.Size = new Size(40, 15);
labelCount.TabIndex = 2;
labelCount.Text = "Count";
//
// label2
// labelReversed
//
label2.AutoSize = true;
label2.Location = new Point(17, 91);
label2.Name = "label2";
label2.Size = new Size(38, 15);
label2.TabIndex = 2;
label2.Text = "label2";
labelReversed.AutoSize = true;
labelReversed.Location = new Point(38, 142);
labelReversed.Name = "labelReversed";
labelReversed.Size = new Size(87, 15);
labelReversed.TabIndex = 3;
labelReversed.Text = "ReversedCount";
//
// textBox2
// buttonAdd
//
textBox2.Location = new Point(70, 91);
textBox2.Name = "textBox2";
textBox2.Size = new Size(100, 23);
textBox2.TabIndex = 3;
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;
//
// label3
// buttonCancel
//
label3.AutoSize = true;
label3.Location = new Point(14, 151);
label3.Name = "label3";
label3.Size = new Size(38, 15);
label3.TabIndex = 4;
label3.Text = "label3";
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;
//
// textBox3
// textBoxName
//
textBox3.Location = new Point(66, 153);
textBox3.Name = "textBox3";
textBox3.Size = new Size(100, 23);
textBox3.TabIndex = 5;
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(800, 450);
Controls.Add(textBox3);
Controls.Add(label3);
Controls.Add(textBox2);
Controls.Add(label2);
Controls.Add(textBox1);
Controls.Add(label1);
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 = "Материалы";
Text = "Material";
((System.ComponentModel.ISupportInitialize)numericUpDownCount).EndInit();
((System.ComponentModel.ISupportInitialize)numericUpDownReversedCount).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label label1;
private TextBox textBox1;
private Label label2;
private TextBox textBox2;
private Label label3;
private TextBox textBox3;
private Label labelName;
private Label labelCount;
private Label labelReversed;
private Button buttonAdd;
private Button buttonCancel;
private TextBox textBoxName;
private NumericUpDown numericUpDownCount;
private NumericUpDown numericUpDownReversedCount;
}
}

View File

@@ -1,4 +1,6 @@
using System;
using ProjectCarpentryWorkshop.Entities;
using ProjectCarpentryWorkshop.Repositories;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
@@ -12,9 +14,64 @@ namespace ProjectCarpentryWorkshop.Forms
{
public partial class FormMaterial : Form
{
public FormMaterial()
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));
}
}

View File

@@ -0,0 +1,119 @@
namespace ProjectCarpentryWorkshop.Forms
{
partial class FormMaterialSupply
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View File

@@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ProjectCarpentryWorkshop.Entities;
using ProjectCarpentryWorkshop.Repositories;
namespace ProjectCarpentryWorkshop.Forms
{
public partial class FormMaterialSupply : Form
{
private readonly IMaterialSupplyRepository _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 FormMaterialSupply(IMaterialSupplyRepository materialSpentRepository)
{
InitializeComponent();
_materialSpentRepository = materialSpentRepository ?? throw new ArgumentNullException(nameof(materialSpentRepository));
}
private MaterialSupply CreateMaterialSpent(int id) => MaterialSupply.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();
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,132 @@
namespace ProjectCarpentryWorkshop.Forms
{
partial class FormMaterials
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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(1118, 0);
panel.Margin = new Padding(6);
panel.Name = "panel";
panel.Size = new Size(275, 941);
panel.TabIndex = 0;
//
// buttonUpdate
//
buttonUpdate.BackgroundImage = Properties.Resources.edit;
buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpdate.Location = new Point(12, 652);
buttonUpdate.Margin = new Padding(6);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(248, 248);
buttonUpdate.TabIndex = 2;
buttonUpdate.UseVisualStyleBackColor = true;
buttonUpdate.Click += ButtonUpdate_Click;
//
// buttonRemove
//
buttonRemove.BackgroundImage = Properties.Resources.minus;
buttonRemove.BackgroundImageLayout = ImageLayout.Stretch;
buttonRemove.Location = new Point(12, 340);
buttonRemove.Margin = new Padding(6);
buttonRemove.Name = "buttonRemove";
buttonRemove.Size = new Size(248, 248);
buttonRemove.TabIndex = 1;
buttonRemove.UseVisualStyleBackColor = true;
buttonRemove.Click += ButtonRemove_Click;
//
// buttonAdd
//
buttonAdd.BackgroundImage = Properties.Resources.plus;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(12, 41);
buttonAdd.Margin = new Padding(6);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(248, 248);
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.Margin = new Padding(6);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 82;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(1118, 941);
dataGridView.TabIndex = 1;
//
// FormMaterials
//
AutoScaleDimensions = new SizeF(13F, 32F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1393, 941);
Controls.Add(dataGridView);
Controls.Add(panel);
Margin = new Padding(6);
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;
}
}

View File

@@ -0,0 +1,101 @@
using ProjectCarpentryWorkshop.Repositories;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Unity;
namespace ProjectCarpentryWorkshop.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<FormMaterial>().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<FormMaterial>();
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;
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,117 @@
namespace ProjectCarpentryWorkshop.Forms
{
partial class FormMaterialsSupply
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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(1211, 0);
panel.Margin = new Padding(6, 6, 6, 6);
panel.Name = "panel";
panel.Size = new Size(275, 960);
panel.TabIndex = 1;
//
// buttonUpdate
//
buttonUpdate.BackgroundImage = Properties.Resources.edit;
buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpdate.Location = new Point(12, 521);
buttonUpdate.Margin = new Padding(6, 6, 6, 6);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(248, 248);
buttonUpdate.TabIndex = 2;
buttonUpdate.UseVisualStyleBackColor = true;
buttonUpdate.Click += buttonUpdate_Click;
//
// buttonAdd
//
buttonAdd.BackgroundImage = Properties.Resources.plus;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(12, 144);
buttonAdd.Margin = new Padding(6, 6, 6, 6);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(248, 248);
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.Margin = new Padding(6, 6, 6, 6);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 82;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(1211, 960);
dataGridView.TabIndex = 2;
//
// FormMaterialsReplenishment
//
AutoScaleDimensions = new SizeF(13F, 32F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1486, 960);
Controls.Add(dataGridView);
Controls.Add(panel);
Margin = new Padding(6, 6, 6, 6);
Name = "FormMaterialsReplenishment";
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;
}
}

View File

@@ -0,0 +1,80 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ProjectCarpentryWorkshop.Repositories;
using Unity;
namespace ProjectCarpentryWorkshop.Forms
{
public partial class FormMaterialsSupply : Form
{
private readonly IUnityContainer _container;
private readonly IMaterialSupplyRepository _materialSpentRepository;
public FormMaterialsSupply(IUnityContainer container, IMaterialSupplyRepository 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<FormMaterialSupply>().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<FormMaterialSupply>();
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;
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,167 @@
namespace ProjectCarpentryWorkshop.Forms
{
partial class FormOrderProduction
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View File

@@ -0,0 +1,62 @@
using ProjectCarpentryWorkshop.Entities.Enums;
using ProjectCarpentryWorkshop.Entities;
using ProjectCarpentryWorkshop.Repositories;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
namespace ProjectCarpentryWorkshop.Forms
{
public partial class FormOrderProduction : Form
{
private readonly IOrderRepository _orderRepository;
public FormOrderProduction(IOrderRepository orderRepository, IProductionRepository productRepository)
{
InitializeComponent();
_orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository));
comboBoxStatus.DataSource = Enum.GetValues(typeof(OrderStatus));
ColumnProducts.DataSource = productRepository.ReadProduction();
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<OrderProduction> CreateListProductFromDataGrid()
{
var list = new List<OrderProduction>();
foreach (DataGridViewRow row in dataGridView.Rows)
{
if (row.Cells["ColumnProducts"].Value == null || row.Cells["ColumnCount"].Value == null)
{
continue;
}
list.Add(OrderProduction.CreateOperation(0, Convert.ToInt32(row.Cells["ColumnProducts"].Value), Convert.ToInt32(row.Cells["ColumnCount"].Value)));
}
return list;
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,117 @@
namespace ProjectCarpentryWorkshop.Forms
{
partial class FormOrders
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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(1115, 0);
panel.Margin = new Padding(6, 6, 6, 6);
panel.Name = "panel";
panel.Size = new Size(371, 960);
panel.TabIndex = 0;
//
// buttonRemove
//
buttonRemove.BackgroundImage = Properties.Resources.minus;
buttonRemove.BackgroundImageLayout = ImageLayout.Stretch;
buttonRemove.Location = new Point(66, 557);
buttonRemove.Margin = new Padding(6, 6, 6, 6);
buttonRemove.Name = "buttonRemove";
buttonRemove.Size = new Size(248, 248);
buttonRemove.TabIndex = 2;
buttonRemove.UseVisualStyleBackColor = true;
buttonRemove.Click += ButtonRemove_Click;
//
// buttonAdd
//
buttonAdd.BackgroundImage = Properties.Resources.plus;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(66, 178);
buttonAdd.Margin = new Padding(6, 6, 6, 6);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(248, 248);
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.Margin = new Padding(6, 6, 6, 6);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 82;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(1115, 960);
dataGridView.TabIndex = 2;
//
// FormOrders
//
AutoScaleDimensions = new SizeF(13F, 32F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1486, 960);
Controls.Add(dataGridView);
Controls.Add(panel);
Margin = new Padding(6, 6, 6, 6);
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;
}
}

View File

@@ -0,0 +1,81 @@
using ProjectCarpentryWorkshop.Repositories;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Unity;
namespace ProjectCarpentryWorkshop.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<FormOrderProduction>().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;
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,132 @@
namespace ProjectCarpentryWorkshop.Forms
{
partial class FormProduction
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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(1157, 0);
panel.Margin = new Padding(6);
panel.Name = "panel";
panel.Size = new Size(329, 960);
panel.TabIndex = 0;
//
// buttonUpdate
//
buttonUpdate.BackgroundImage = Properties.Resources.edit;
buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpdate.Location = new Point(45, 666);
buttonUpdate.Margin = new Padding(6);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(248, 248);
buttonUpdate.TabIndex = 3;
buttonUpdate.UseVisualStyleBackColor = true;
buttonUpdate.Click += buttonUpdate_Click;
//
// buttonRemove
//
buttonRemove.BackgroundImage = Properties.Resources.minus;
buttonRemove.BackgroundImageLayout = ImageLayout.Stretch;
buttonRemove.Location = new Point(45, 346);
buttonRemove.Margin = new Padding(6);
buttonRemove.Name = "buttonRemove";
buttonRemove.Size = new Size(248, 248);
buttonRemove.TabIndex = 2;
buttonRemove.UseVisualStyleBackColor = true;
buttonRemove.Click += buttonRemove_Click;
//
// buttonAdd
//
buttonAdd.BackgroundImage = Properties.Resources.plus;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(45, 15);
buttonAdd.Margin = new Padding(6);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(248, 248);
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.Margin = new Padding(6);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 82;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(1157, 960);
dataGridView.TabIndex = 1;
//
// FormProducts
//
AutoScaleDimensions = new SizeF(13F, 32F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1486, 960);
Controls.Add(dataGridView);
Controls.Add(panel);
Margin = new Padding(6);
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;
}
}

View File

@@ -0,0 +1,99 @@
using ProjectCarpentryWorkshop.Repositories;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Unity;
namespace ProjectCarpentryWorkshop.Forms
{
public partial class FormProduction : Form
{
private readonly IUnityContainer _container;
private readonly IProductionRepository _productRepository;
public FormProduction(IUnityContainer container, IProductionRepository 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<FormProductionMaterial>().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.DeleteProduction(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<FormProductionMaterial>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridView.DataSource = _productRepository.ReadProduction();
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;
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,208 @@
namespace ProjectCarpentryWorkshop.Forms
{
partial class FormProductionMaterial
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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();
numericUpDownCount = new NumericUpDown();
checkedListBox1 = new CheckedListBox();
groupBox.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
((System.ComponentModel.ISupportInitialize)numericUpDownCount).BeginInit();
SuspendLayout();
//
// groupBox
//
groupBox.Controls.Add(dataGridView);
groupBox.Location = new Point(22, 365);
groupBox.Margin = new Padding(6);
groupBox.Name = "groupBox";
groupBox.Padding = new Padding(6);
groupBox.Size = new Size(1053, 570);
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(6, 38);
dataGridView.Margin = new Padding(6);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.RowHeadersWidth = 82;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(1041, 526);
dataGridView.TabIndex = 0;
//
// ColumnMaterials
//
ColumnMaterials.HeaderText = "Materials";
ColumnMaterials.MinimumWidth = 10;
ColumnMaterials.Name = "ColumnMaterials";
ColumnMaterials.Resizable = DataGridViewTriState.True;
ColumnMaterials.SortMode = DataGridViewColumnSortMode.Automatic;
//
// ColumnCount
//
ColumnCount.HeaderText = "Count";
ColumnCount.MinimumWidth = 10;
ColumnCount.Name = "ColumnCount";
//
// buttonAdd
//
buttonAdd.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonAdd.Location = new Point(156, 954);
buttonAdd.Margin = new Padding(6);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(232, 49);
buttonAdd.TabIndex = 1;
buttonAdd.Text = "Add";
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += buttonAdd_Click;
//
// buttonCancel
//
buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonCancel.Location = new Point(659, 954);
buttonCancel.Margin = new Padding(6);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(232, 49);
buttonCancel.TabIndex = 2;
buttonCancel.Text = "Cancel";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// labelName
//
labelName.AutoSize = true;
labelName.Location = new Point(58, 66);
labelName.Margin = new Padding(6, 0, 6, 0);
labelName.Name = "labelName";
labelName.Size = new Size(78, 32);
labelName.TabIndex = 3;
labelName.Text = "Name";
//
// labelType
//
labelType.AutoSize = true;
labelType.Location = new Point(58, 166);
labelType.Margin = new Padding(6, 0, 6, 0);
labelType.Name = "labelType";
labelType.Size = new Size(154, 32);
labelType.TabIndex = 4;
labelType.Text = "Product Type";
//
// labelCountInWarehouse
//
labelCountInWarehouse.AutoSize = true;
labelCountInWarehouse.Location = new Point(58, 277);
labelCountInWarehouse.Margin = new Padding(6, 0, 6, 0);
labelCountInWarehouse.Name = "labelCountInWarehouse";
labelCountInWarehouse.Size = new Size(228, 32);
labelCountInWarehouse.TabIndex = 5;
labelCountInWarehouse.Text = "Count in warehouse";
//
// textBoxName
//
textBoxName.Location = new Point(349, 60);
textBoxName.Margin = new Padding(6);
textBoxName.Name = "textBoxName";
textBoxName.Size = new Size(258, 39);
textBoxName.TabIndex = 6;
//
// numericUpDownCount
//
numericUpDownCount.Location = new Point(349, 277);
numericUpDownCount.Margin = new Padding(6);
numericUpDownCount.Name = "numericUpDownCount";
numericUpDownCount.Size = new Size(262, 39);
numericUpDownCount.TabIndex = 8;
//
// checkedListBox1
//
checkedListBox1.FormattingEnabled = true;
checkedListBox1.Items.AddRange(new object[] { "Wardrobe", "Table", "Bench" });
checkedListBox1.Location = new Point(349, 132);
checkedListBox1.Name = "checkedListBox1";
checkedListBox1.Size = new Size(262, 112);
checkedListBox1.TabIndex = 9;
checkedListBox1.SelectedIndexChanged += checkedListBox1_SelectedIndexChanged;
//
// FormProductMaterial
//
AutoScaleDimensions = new SizeF(13F, 32F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1098, 1028);
Controls.Add(checkedListBox1);
Controls.Add(numericUpDownCount);
Controls.Add(textBoxName);
Controls.Add(labelCountInWarehouse);
Controls.Add(labelType);
Controls.Add(labelName);
Controls.Add(buttonCancel);
Controls.Add(buttonAdd);
Controls.Add(groupBox);
Margin = new Padding(6);
Name = "FormProductMaterial";
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 NumericUpDown numericUpDownCount;
private CheckedListBox checkedListBox1;
}
}

View File

@@ -0,0 +1,140 @@
using ProjectCarpentryWorkshop.Entities;
using ProjectCarpentryWorkshop.Entities.Enums;
using ProjectCarpentryWorkshop.Repositories;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ProjectCarpentryWorkshop.Forms
{
public partial class FormProductionMaterial : Form
{
private readonly IProductionRepository _productRepository;
private int? _productId;
private ProductType selectedProducts = ProductType.None;
public int Id
{
set
{
try
{
var product = _productRepository.ReadProductionById(value);
if (product == null)
{
throw new InvalidDataException(nameof(product));
}
textBoxName.Text = product.Name;
numericUpDownCount.Value = product.CountInWarehouse;
_productId = value;
// Устанавливаем выбранные продукты в checkedListBox1
checkedListBox1.SetItemChecked(0, product.Type.HasFlag(ProductType.Wardrobe));
checkedListBox1.SetItemChecked(1, product.Type.HasFlag(ProductType.Table));
checkedListBox1.SetItemChecked(2, product.Type.HasFlag(ProductType.Bench));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormProductionMaterial(IProductionRepository productRepository, IMaterialRepository materialRepository)
{
InitializeComponent();
_productRepository = productRepository ?? throw new ArgumentNullException(nameof(productRepository));
ColumnMaterials.DataSource = materialRepository.ReadMaterials();
ColumnMaterials.DisplayMember = "Name";
ColumnMaterials.ValueMember = "Id";
// Пример заполнения CheckedListBox
checkedListBox1.Items.AddRange(new object[]
{
"Wardrobe",
"Table",
"Bench"
});
}
private void buttonAdd_Click(object sender, EventArgs e)
{
if (dataGridView.RowCount < 1)
{
throw new Exception("Имеются незаполненные поля");
}
try
{
if (string.IsNullOrWhiteSpace(textBoxName.Text))
{
throw new Exception("Имеются незаполненные поля");
}
if (_productId.HasValue)
{
_productRepository.UpdateProduction(CreateProduct(_productId.Value));
}
else
{
_productRepository.CreateProduction(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<ProductionMaterial> CreateListMaterialFromDataGrid()
{
var list = new List<ProductionMaterial>();
foreach (DataGridViewRow row in dataGridView.Rows)
{
if (row.Cells["ColumnMaterials"].Value == null || row.Cells["ColumnCount"].Value == null)
{
continue;
}
list.Add(ProductionMaterial.CreateOperation(0, Convert.ToInt32(row.Cells["ColumnMaterials"].Value), Convert.ToInt32(row.Cells["ColumnCount"].Value)));
}
return list;
}
private Production CreateProduct(int id) => Production.CreateEntity(id, textBoxName.Text, selectedProducts, Convert.ToInt32(numericUpDownCount.Value), CreateListMaterialFromDataGrid());
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// Сбрасываем выбранные продукты
selectedProducts = ProductType.None;
// Проходим по всем выбранным элементам
foreach (var item in checkedListBox1.CheckedItems)
{
switch (item.ToString())
{
case "Wardrobe":
selectedProducts |= ProductType.Wardrobe;
break;
case "Table":
selectedProducts |= ProductType.Table;
break;
case "Bench":
selectedProducts |= ProductType.Bench;
break;
}
}
// Выводим выбранные продукты для демонстрации
MessageBox.Show($"Selected products: {selectedProducts}");
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -60,6 +60,36 @@ namespace ProjectCarpentryWorkshop.Properties {
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap edit {
get {
object obj = ResourceManager.GetObject("edit", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap minus {
get {
object obj = ResourceManager.GetObject("minus", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap plus {
get {
object obj = ResourceManager.GetObject("plus", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>

View File

@@ -118,7 +118,16 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="minus" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Res\minus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="plus" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Res\plus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="workshopjpg" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Entities\Res\workshopjpg.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<value>..\Res\workshopjpg.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Res\edit.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@@ -9,8 +9,7 @@ namespace ProjectCarpentryWorkshop.Repositories;
public interface IMaterialRepository
{
IEnumerable<Material> ReadMaterial(DateTime? dateForm = null,
DateTime? dateTo = null);
IEnumerable<Material> ReadMaterials();
Material ReadMaterialById(int id);
void CreateMaterial(Material material);
void UpdateMaterial(Material material);

View File

@@ -10,10 +10,8 @@ namespace ProjectCarpentryWorkshop.Repositories;
public interface IMaterialSupplyRepository
{
IEnumerable<MaterialSupply> ReadMaterialSupply(DateTime? dateForm = null,
DateTime? dateTo = null, int? materialId = null);
MaterialSupply MaterialSupplyById(int id);
void CreateMaterialSupply(MaterialSupply materialSupply);
void UpdateMaterialSupply(MaterialSupply materialSupply);
void DeleteMaterialSupply(int id);
IEnumerable<MaterialSupply> ReadMaterialsSpent();
MaterialSupply ReadMaterialSpentById(int id);
void CreateMaterialSpent(MaterialSupply material);
void UpdateMaterialSpent(MaterialSupply material);
}

View File

@@ -1,18 +0,0 @@
using ProjectCarpentryWorkshop.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectCarpentryWorkshop.Repositories;
public interface IOrderOfProductionRepository
{
IEnumerable<OrderOfProduction> ReadOrderOfProduction();
OrderOfProduction OrderOfProductionById(int id);
void CreateOrderOfProduction(OrderOfProduction orderOfProduction);
void UpdateOrderOfProduction(OrderOfProduction orderOfProduction);
void DeleteOrderOfProduction(int id);
}

View File

@@ -9,11 +9,9 @@ namespace ProjectCarpentryWorkshop.Repositories;
public interface IOrderRepository
{
IEnumerable<Order> ReadOrder(DateTime? dateForm = null,
DateTime? dateTo = null);
Order ReadOrderById(int id);
IEnumerable<Order> ReadOrders(DateTime? dateForm = null, DateTime? dateTo = null, int? orderStatus = null, int? orderId = null);
Order ReadOrderById(int orderId);
void CreateOrder(Order order);
void UpdateOrder(Order order);
void DeleteOrder(int id);

View File

@@ -1,12 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectCarpentryWorkshop.Repositories
{
internal class IProductionMaterialRepository
{
}
}

View File

@@ -12,18 +12,21 @@ public class MaterialRepository : IMaterialRepository
public void CreateMaterial(Material material)
{
}
public void DeleteMaterial(int id)
{
}
public Material ReadMaterialById(int id)
{
return Material.CreateEntity(0, string.Empty, 0, 0);
}
public IEnumerable<Material> ReadMaterial(DateTime? dateForm = null, DateTime? dateTo = null)
public IEnumerable<Material> ReadMaterials()
{
return [];
}
public Material ReadMaterialById(int id)
{
return Material.CreateEntity(id, string.Empty, 0, 0);
}
public void UpdateMaterial(Material material)
{
}

View File

@@ -10,25 +10,22 @@ namespace ProjectCarpentryWorkshop.Repositories.Implementations;
public class MaterialSupplyRepository : IMaterialSupplyRepository
{
public void CreateMaterialSupply(MaterialSupply materialSupply)
public void CreateMaterialSpent(MaterialSupply material)
{
}
public void DeleteMaterialSupply(int id)
public MaterialSupply ReadMaterialSpentById(int id)
{
return MaterialSupply.CreateOperation(0, string.Empty, 0);
}
public MaterialSupply MaterialSupplyById(int id)
{
return MaterialSupply.CreateOperation(0,0, MaterialSupplySupplier.None, string.Empty, 0, 0);
}
public IEnumerable<MaterialSupply> ReadMaterialSupply(DateTime? dateForm = null, DateTime? dateTo = null, int? materialId = null)
public IEnumerable<MaterialSupply> ReadMaterialsSpent()
{
return [];
}
public void UpdateMaterialSupply(MaterialSupply materialSupply)
public void UpdateMaterialSpent(MaterialSupply material)
{
}
}

View File

@@ -10,22 +10,21 @@ namespace ProjectCarpentryWorkshop.Repositories.Implementations;
public class OrderRepository : IOrderRepository
{
public void CreateOrder(Order order)
public void CreateOrder(Order feedReplenishment)
{
}
public void DeleteOrder(int id)
{
}
public Order ReadOrderById(int id)
{
return Order.CreateOperation(0, string.Empty,0,0,OrderCustomerName.None, OrderOrderStatus.None );
}
public IEnumerable<Order> ReadOrder(DateTime? dateForm = null, DateTime? dateTo = null)
public IEnumerable<Order> ReadOrders(DateTime? dateForm = null, DateTime? dateTo = null, int? orderStatus = null, int? orderId = null)
{
return [];
}
public void UpdateOrder(Order order)
public Order ReadOrderById(int id)
{
return Order.CreateOperation(id, 0, string.Empty, []);
}

View File

@@ -9,20 +9,24 @@ namespace ProjectCarpentryWorkshop.Repositories.Implementations;
public class ProductionRepository : IProductionRepository
{
public void CreateProduction(Production production)
public void CreateProduction(Production product)
{
}
public void DeleteProduction(int id)
{
}
public Production ReadProductionById(int id)
{
return Production.CreateEntity(0, string.Empty,0,0, string.Empty);
}
public IEnumerable<Production> ReadProduction()
{
return [];
}
public Production ReadProductionById(int id)
{
return Production.CreateEntity(id, string.Empty, 0, 0, []);
}
public void UpdateProduction(Production production)
{
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB