Лабораторная работа №2

This commit is contained in:
insideq 2024-11-24 16:26:38 +04:00
parent fb7bfe478d
commit b68734cad1
25 changed files with 585 additions and 204 deletions

View File

@ -12,9 +12,9 @@ public class Components
public double Count { get; private set; } public double Count { get; private set; }
public Type_Components TypeComponents { get; private set; } public Type_Components TypeComponentsId { get; private set; }
public static Components CreateEntity(int id, string name, decimal price, double count, Type_Components typeComponents) public static Components CreateEntity(int id, string name, decimal price, double count, Type_Components typeComponentsId)
{ {
return new Components return new Components
{ {
@ -22,7 +22,7 @@ public class Components
Name = name, Name = name,
Price = price, Price = price,
Count = count, Count = count,
TypeComponents = typeComponents TypeComponentsId = typeComponentsId
}; };
} }
} }

View File

@ -4,7 +4,7 @@ public class Components_Production
{ {
public int Id { get; set; } public int Id { get; set; }
public int ComponentsID { get; private set; } public int ComponentsId { get; private set; }
public int Count { get; private set; } public int Count { get; private set; }
@ -13,7 +13,7 @@ public class Components_Production
return new Components_Production return new Components_Production
{ {
Id = id, Id = id,
ComponentsID = componentsID, ComponentsId = componentsID,
Count = count Count = count
}; };
} }

View File

@ -10,7 +10,7 @@ public class Employee
public string LastName { get; private set; } = string.Empty; public string LastName { get; private set; } = string.Empty;
public EmployeePost EmployeePost { get; private set; } public EmployeePost EmployeePostId { get; private set; }
public static Employee CreateEntity(int id, string first, string last, public static Employee CreateEntity(int id, string first, string last,
EmployeePost employeePost) EmployeePost employeePost)
@ -20,7 +20,7 @@ public class Employee
Id = id, Id = id,
FirstName = first ?? string.Empty, FirstName = first ?? string.Empty,
LastName = last ?? string.Empty, LastName = last ?? string.Empty,
EmployeePost = employeePost EmployeePostId = employeePost
}; };
} }
} }

View File

@ -2,25 +2,25 @@
public enum Type_Components public enum Type_Components
{ {
Electronic = 0, Electronic = 1,
Mechanical = 1, Mechanical = 2,
Fasteners = 2, Fasteners = 3,
Plastic = 3, Plastic = 4,
Power_supply_and_cables = 4, Power_supply_and_cables = 5,
Hydraulic_and_pneumatic = 5, Hydraulic_and_pneumatic = 6,
Optical = 6, Optical = 7,
Metals = 7, Metals = 8,
Wood = 8, Wood = 9,
Glass = 9, Glass = 10,
Chemistry = 10 Chemistry = 11
} }

View File

@ -8,7 +8,7 @@ public class Inventory
public bool IsDefect { get; private set; } public bool IsDefect { get; private set; }
public int ComponentsID { get; private set; } public int ComponentsId { get; private set; }
public static Inventory CreateEntity(int id, double quantity, bool isDefect, int ComponentsID) public static Inventory CreateEntity(int id, double quantity, bool isDefect, int ComponentsID)
{ {
@ -17,7 +17,7 @@ public class Inventory
Id = id, Id = id,
Quantity = quantity, Quantity = quantity,
IsDefect = isDefect, IsDefect = isDefect,
ComponentsID = ComponentsID ComponentsId = ComponentsID
}; };
} }
} }

View File

@ -28,13 +28,12 @@ namespace ProjectWarehouse.Forms
textBoxLastName.Text = employee.LastName; textBoxLastName.Text = employee.LastName;
foreach (EmployeePost elem in Enum.GetValues(typeof(EmployeePost))) foreach (EmployeePost elem in Enum.GetValues(typeof(EmployeePost)))
{ {
if ((elem & employee.EmployeePost) != 0) if ((elem & employee.EmployeePostId) != 0)
{ {
checkedListBoxPost.SetItemChecked(checkedListBoxPost.Items.IndexOf(elem), true); checkedListBoxPost.SetItemChecked(checkedListBoxPost.Items.IndexOf(elem), true);
} }
} }
_employeeId = value; _employeeId = value;
} }
catch (Exception ex) catch (Exception ex)

View File

@ -128,7 +128,6 @@
#endregion #endregion
private Label labelComponent; private Label labelComponent;
private Label label2;
private Label labelCount; private Label labelCount;
private ComboBox comboBoxComponent; private ComboBox comboBoxComponent;
private CheckBox checkBoxIsDefect; private CheckBox checkBoxIsDefect;

View File

@ -24,7 +24,7 @@ namespace ProjectWarehouse.Forms
throw new InvalidDataException(nameof(inventory)); throw new InvalidDataException(nameof(inventory));
} }
comboBoxComponent.SelectedValue = inventory.ComponentsID; comboBoxComponent.SelectedValue = inventory.ComponentsId;
numericUpDownCount.Value = (decimal)inventory.Quantity; numericUpDownCount.Value = (decimal)inventory.Quantity;
checkBoxIsDefect.Checked = inventory.IsDefect; checkBoxIsDefect.Checked = inventory.IsDefect;

View File

@ -38,7 +38,7 @@
comboBoxEmployee = new ComboBox(); comboBoxEmployee = new ComboBox();
groupBoxComponents = new GroupBox(); groupBoxComponents = new GroupBox();
dataGridViewComponents = new DataGridView(); dataGridViewComponents = new DataGridView();
ColumnComponent = new DataGridViewComboBoxColumn(); ColumnComponents = new DataGridViewComboBoxColumn();
ColumnCount = new DataGridViewTextBoxColumn(); ColumnCount = new DataGridViewTextBoxColumn();
groupBoxComponents.SuspendLayout(); groupBoxComponents.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridViewComponents).BeginInit(); ((System.ComponentModel.ISupportInitialize)dataGridViewComponents).BeginInit();
@ -47,40 +47,43 @@
// labelName // labelName
// //
labelName.AutoSize = true; labelName.AutoSize = true;
labelName.Location = new Point(38, 14); labelName.Location = new Point(43, 19);
labelName.Name = "labelName"; labelName.Name = "labelName";
labelName.Size = new Size(122, 15); labelName.Size = new Size(157, 20);
labelName.TabIndex = 0; labelName.TabIndex = 0;
labelName.Text = "Название продукции"; labelName.Text = "Название продукции";
// //
// labelDescription // labelDescription
// //
labelDescription.AutoSize = true; labelDescription.AutoSize = true;
labelDescription.Location = new Point(36, 58); labelDescription.Location = new Point(41, 77);
labelDescription.Name = "labelDescription"; labelDescription.Name = "labelDescription";
labelDescription.Size = new Size(125, 15); labelDescription.Size = new Size(159, 20);
labelDescription.TabIndex = 1; labelDescription.TabIndex = 1;
labelDescription.Text = "Описание продукции"; labelDescription.Text = "Описание продукции";
// //
// textBoxName // textBoxName
// //
textBoxName.Location = new Point(191, 14); textBoxName.Location = new Point(218, 19);
textBoxName.Margin = new Padding(3, 4, 3, 4);
textBoxName.Name = "textBoxName"; textBoxName.Name = "textBoxName";
textBoxName.Size = new Size(165, 23); textBoxName.Size = new Size(188, 27);
textBoxName.TabIndex = 2; textBoxName.TabIndex = 2;
// //
// textBoxDescription // textBoxDescription
// //
textBoxDescription.Location = new Point(191, 56); textBoxDescription.Location = new Point(218, 75);
textBoxDescription.Margin = new Padding(3, 4, 3, 4);
textBoxDescription.Name = "textBoxDescription"; textBoxDescription.Name = "textBoxDescription";
textBoxDescription.Size = new Size(165, 23); textBoxDescription.Size = new Size(188, 27);
textBoxDescription.TabIndex = 3; textBoxDescription.TabIndex = 3;
// //
// buttonSave // buttonSave
// //
buttonSave.Location = new Point(63, 380); buttonSave.Location = new Point(72, 507);
buttonSave.Margin = new Padding(3, 4, 3, 4);
buttonSave.Name = "buttonSave"; buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(94, 23); buttonSave.Size = new Size(107, 31);
buttonSave.TabIndex = 4; buttonSave.TabIndex = 4;
buttonSave.Text = "Сохранить"; buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true; buttonSave.UseVisualStyleBackColor = true;
@ -88,9 +91,10 @@
// //
// buttonCancel // buttonCancel
// //
buttonCancel.Location = new Point(260, 380); buttonCancel.Location = new Point(297, 507);
buttonCancel.Margin = new Padding(3, 4, 3, 4);
buttonCancel.Name = "buttonCancel"; buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(75, 23); buttonCancel.Size = new Size(86, 31);
buttonCancel.TabIndex = 5; buttonCancel.TabIndex = 5;
buttonCancel.Text = "Отмена"; buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true; buttonCancel.UseVisualStyleBackColor = true;
@ -99,9 +103,9 @@
// labelEmployee // labelEmployee
// //
labelEmployee.AutoSize = true; labelEmployee.AutoSize = true;
labelEmployee.Location = new Point(63, 102); labelEmployee.Location = new Point(72, 136);
labelEmployee.Name = "labelEmployee"; labelEmployee.Name = "labelEmployee";
labelEmployee.Size = new Size(59, 15); labelEmployee.Size = new Size(74, 20);
labelEmployee.TabIndex = 8; labelEmployee.TabIndex = 8;
labelEmployee.Text = "Работник"; labelEmployee.Text = "Работник";
// //
@ -109,21 +113,18 @@
// //
comboBoxEmployee.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxEmployee.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxEmployee.FormattingEnabled = true; comboBoxEmployee.FormattingEnabled = true;
comboBoxEmployee.Location = new Point(192, 102); comboBoxEmployee.Location = new Point(219, 136);
comboBoxEmployee.Margin = new Padding(3, 2, 3, 2);
comboBoxEmployee.Name = "comboBoxEmployee"; comboBoxEmployee.Name = "comboBoxEmployee";
comboBoxEmployee.Size = new Size(164, 23); comboBoxEmployee.Size = new Size(187, 28);
comboBoxEmployee.TabIndex = 7; comboBoxEmployee.TabIndex = 7;
// //
// groupBoxComponents // groupBoxComponents
// //
groupBoxComponents.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; groupBoxComponents.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
groupBoxComponents.Controls.Add(dataGridViewComponents); groupBoxComponents.Controls.Add(dataGridViewComponents);
groupBoxComponents.Location = new Point(23, 144); groupBoxComponents.Location = new Point(26, 192);
groupBoxComponents.Margin = new Padding(3, 2, 3, 2);
groupBoxComponents.Name = "groupBoxComponents"; groupBoxComponents.Name = "groupBoxComponents";
groupBoxComponents.Padding = new Padding(3, 2, 3, 2); groupBoxComponents.Size = new Size(399, 293);
groupBoxComponents.Size = new Size(349, 220);
groupBoxComponents.TabIndex = 6; groupBoxComponents.TabIndex = 6;
groupBoxComponents.TabStop = false; groupBoxComponents.TabStop = false;
groupBoxComponents.Text = "Комплектующие"; groupBoxComponents.Text = "Комплектующие";
@ -134,23 +135,22 @@
dataGridViewComponents.AllowUserToResizeRows = false; dataGridViewComponents.AllowUserToResizeRows = false;
dataGridViewComponents.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dataGridViewComponents.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridViewComponents.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridViewComponents.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewComponents.Columns.AddRange(new DataGridViewColumn[] { ColumnComponent, ColumnCount }); dataGridViewComponents.Columns.AddRange(new DataGridViewColumn[] { ColumnComponents, ColumnCount });
dataGridViewComponents.Dock = DockStyle.Fill; dataGridViewComponents.Dock = DockStyle.Fill;
dataGridViewComponents.Location = new Point(3, 18); dataGridViewComponents.Location = new Point(3, 23);
dataGridViewComponents.Margin = new Padding(3, 2, 3, 2);
dataGridViewComponents.MultiSelect = false; dataGridViewComponents.MultiSelect = false;
dataGridViewComponents.Name = "dataGridViewComponents"; dataGridViewComponents.Name = "dataGridViewComponents";
dataGridViewComponents.RowHeadersVisible = false; dataGridViewComponents.RowHeadersVisible = false;
dataGridViewComponents.RowHeadersWidth = 51; dataGridViewComponents.RowHeadersWidth = 51;
dataGridViewComponents.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridViewComponents.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewComponents.Size = new Size(343, 200); dataGridViewComponents.Size = new Size(393, 267);
dataGridViewComponents.TabIndex = 0; dataGridViewComponents.TabIndex = 0;
// //
// ColumnComponent // ColumnComponents
// //
ColumnComponent.HeaderText = "Компонент"; ColumnComponents.HeaderText = "Компонент";
ColumnComponent.MinimumWidth = 6; ColumnComponents.MinimumWidth = 6;
ColumnComponent.Name = "ColumnComponent"; ColumnComponents.Name = "ColumnComponents";
// //
// ColumnCount // ColumnCount
// //
@ -160,9 +160,9 @@
// //
// FormProduction // FormProduction
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(398, 415); ClientSize = new Size(455, 553);
Controls.Add(labelEmployee); Controls.Add(labelEmployee);
Controls.Add(comboBoxEmployee); Controls.Add(comboBoxEmployee);
Controls.Add(groupBoxComponents); Controls.Add(groupBoxComponents);
@ -172,6 +172,7 @@
Controls.Add(textBoxName); Controls.Add(textBoxName);
Controls.Add(labelDescription); Controls.Add(labelDescription);
Controls.Add(labelName); Controls.Add(labelName);
Margin = new Padding(3, 4, 3, 4);
Name = "FormProduction"; Name = "FormProduction";
StartPosition = FormStartPosition.CenterParent; StartPosition = FormStartPosition.CenterParent;
Text = "Продукция"; Text = "Продукция";
@ -193,7 +194,7 @@
private ComboBox comboBoxEmployee; private ComboBox comboBoxEmployee;
private GroupBox groupBoxComponents; private GroupBox groupBoxComponents;
private DataGridView dataGridViewComponents; private DataGridView dataGridViewComponents;
private DataGridViewComboBoxColumn ColumnComponent; private DataGridViewComboBoxColumn ColumnComponents;
private DataGridViewTextBoxColumn ColumnCount; private DataGridViewTextBoxColumn ColumnCount;
} }
} }

View File

@ -9,30 +9,6 @@ namespace ProjectWarehouse.Forms
private int? _productionId; private int? _productionId;
public int Id
{
set
{
try
{
var production = _productionRepository.ReadProductionByID(value);
if (production == null)
{
throw new InvalidDataException(nameof(production));
}
textBoxName.Text = production.Name;
textBoxDescription.Text = production.Description;
_productionId = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormProduction(IProductionRepository productionRepository, IEmployeeRepository employeeRepository, IComponentsRepository componentsRepository) public FormProduction(IProductionRepository productionRepository, IEmployeeRepository employeeRepository, IComponentsRepository componentsRepository)
{ {
InitializeComponent(); InitializeComponent();
@ -43,28 +19,21 @@ namespace ProjectWarehouse.Forms
comboBoxEmployee.DisplayMember = "FirstName"; comboBoxEmployee.DisplayMember = "FirstName";
comboBoxEmployee.ValueMember = "Id"; comboBoxEmployee.ValueMember = "Id";
ColumnComponent.DataSource = componentsRepository.ReadComponents(); ColumnComponents.DataSource = componentsRepository.ReadComponents();
ColumnComponent.DisplayMember = "Name"; ColumnComponents.DisplayMember = "Name";
ColumnComponent.ValueMember = "Id"; ColumnComponents.ValueMember = "Id";
} }
private void ButtonSave_Click(object sender, EventArgs e) private void ButtonSave_Click(object sender, EventArgs e)
{ {
try try
{ {
if (string.IsNullOrWhiteSpace(textBoxName.Text) || string.IsNullOrWhiteSpace(textBoxDescription.Text) || dataGridViewComponents.RowCount < 1 || comboBoxEmployee.SelectedIndex < 0) if (string.IsNullOrWhiteSpace(textBoxName.Text) || dataGridViewComponents.RowCount < 1 || comboBoxEmployee.SelectedIndex < 0)
{ {
throw new Exception("Имеются незаполненные поля"); throw new Exception("Имеются незаполненные поля");
} }
if (_productionId.HasValue) _productionRepository.CreateProduction(Production.CreateEntity(0, textBoxName.Text, textBoxDescription.Text, (int)comboBoxEmployee.SelectedValue!, CreateListComponents_ProductionsFromDataGrid()));
{
_productionRepository.UpdateProduction(CreateProduction(_productionId.Value));
}
else
{
_productionRepository.CreateProduction(CreateProduction(0));
}
Close(); Close();
} }
@ -92,8 +61,5 @@ namespace ProjectWarehouse.Forms
} }
return list; return list;
} }
private Production CreateProduction(int id) => Production.CreateEntity(id, textBoxName.Text, textBoxDescription.Text, (int)comboBoxEmployee.SelectedItem!, CreateListComponents_ProductionsFromDataGrid());
} }
} }

View File

@ -117,7 +117,7 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="ColumnComponent.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="ColumnComponents.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>
<metadata name="ColumnCount.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="ColumnCount.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

View File

@ -30,7 +30,6 @@
{ {
panel1 = new Panel(); panel1 = new Panel();
ButtonDel = new Button(); ButtonDel = new Button();
ButtonUpd = new Button();
ButtonAdd = new Button(); ButtonAdd = new Button();
dataGridViewData = new DataGridView(); dataGridViewData = new DataGridView();
panel1.SuspendLayout(); panel1.SuspendLayout();
@ -40,43 +39,34 @@
// panel1 // panel1
// //
panel1.Controls.Add(ButtonDel); panel1.Controls.Add(ButtonDel);
panel1.Controls.Add(ButtonUpd);
panel1.Controls.Add(ButtonAdd); panel1.Controls.Add(ButtonAdd);
panel1.Dock = DockStyle.Right; panel1.Dock = DockStyle.Right;
panel1.Location = new Point(685, 0); panel1.Location = new Point(921, 0);
panel1.Margin = new Padding(3, 4, 3, 4);
panel1.Name = "panel1"; panel1.Name = "panel1";
panel1.Size = new Size(115, 450); panel1.Size = new Size(131, 600);
panel1.TabIndex = 0; panel1.TabIndex = 0;
// //
// ButtonDel // ButtonDel
// //
ButtonDel.BackgroundImage = Properties.Resources.минус; ButtonDel.BackgroundImage = Properties.Resources.минус;
ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; ButtonDel.BackgroundImageLayout = ImageLayout.Stretch;
ButtonDel.Location = new Point(19, 264); ButtonDel.Location = new Point(22, 352);
ButtonDel.Margin = new Padding(3, 4, 3, 4);
ButtonDel.Name = "ButtonDel"; ButtonDel.Name = "ButtonDel";
ButtonDel.Size = new Size(75, 74); ButtonDel.Size = new Size(86, 99);
ButtonDel.TabIndex = 2; ButtonDel.TabIndex = 2;
ButtonDel.UseVisualStyleBackColor = true; ButtonDel.UseVisualStyleBackColor = true;
ButtonDel.Click += ButtonDel_Click; ButtonDel.Click += ButtonDel_Click;
// //
// ButtonUpd
//
ButtonUpd.BackgroundImage = Properties.Resources.редактировать;
ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch;
ButtonUpd.Location = new Point(19, 135);
ButtonUpd.Name = "ButtonUpd";
ButtonUpd.Size = new Size(75, 74);
ButtonUpd.TabIndex = 1;
ButtonUpd.UseVisualStyleBackColor = true;
ButtonUpd.Click += ButtonUpd_Click;
//
// ButtonAdd // ButtonAdd
// //
ButtonAdd.BackgroundImage = Properties.Resources.плюс; ButtonAdd.BackgroundImage = Properties.Resources.плюс;
ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch;
ButtonAdd.Location = new Point(19, 24); ButtonAdd.Location = new Point(22, 32);
ButtonAdd.Margin = new Padding(3, 4, 3, 4);
ButtonAdd.Name = "ButtonAdd"; ButtonAdd.Name = "ButtonAdd";
ButtonAdd.Size = new Size(75, 74); ButtonAdd.Size = new Size(86, 99);
ButtonAdd.TabIndex = 0; ButtonAdd.TabIndex = 0;
ButtonAdd.UseVisualStyleBackColor = true; ButtonAdd.UseVisualStyleBackColor = true;
ButtonAdd.Click += ButtonAdd_Click; ButtonAdd.Click += ButtonAdd_Click;
@ -91,21 +81,24 @@
dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewData.Dock = DockStyle.Fill; dataGridViewData.Dock = DockStyle.Fill;
dataGridViewData.Location = new Point(0, 0); dataGridViewData.Location = new Point(0, 0);
dataGridViewData.Margin = new Padding(3, 4, 3, 4);
dataGridViewData.MultiSelect = false; dataGridViewData.MultiSelect = false;
dataGridViewData.Name = "dataGridViewData"; dataGridViewData.Name = "dataGridViewData";
dataGridViewData.ReadOnly = true; dataGridViewData.ReadOnly = true;
dataGridViewData.RowHeadersVisible = false; dataGridViewData.RowHeadersVisible = false;
dataGridViewData.RowHeadersWidth = 51;
dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewData.Size = new Size(685, 450); dataGridViewData.Size = new Size(921, 600);
dataGridViewData.TabIndex = 1; dataGridViewData.TabIndex = 1;
// //
// FormProductions // FormProductions
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450); ClientSize = new Size(1052, 600);
Controls.Add(dataGridViewData); Controls.Add(dataGridViewData);
Controls.Add(panel1); Controls.Add(panel1);
Margin = new Padding(3, 4, 3, 4);
Name = "FormProductions"; Name = "FormProductions";
StartPosition = FormStartPosition.CenterParent; StartPosition = FormStartPosition.CenterParent;
Text = "Продукция"; Text = "Продукция";
@ -119,7 +112,6 @@
private Panel panel1; private Panel panel1;
private Button ButtonDel; private Button ButtonDel;
private Button ButtonUpd;
private Button ButtonAdd; private Button ButtonAdd;
private DataGridView dataGridViewData; private DataGridView dataGridViewData;
} }

View File

@ -43,26 +43,6 @@ namespace ProjectWarehouse.Forms
} }
} }
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<FormProduction>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonDel_Click(object sender, EventArgs e) private void ButtonDel_Click(object sender, EventArgs e)
{ {
if (!TryGetIdentifierFromSelectedRow(out var findId)) if (!TryGetIdentifierFromSelectedRow(out var findId))

View File

@ -1,7 +1,11 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using ProjectWarehouse.Repositories; using ProjectWarehouse.Repositories;
using ProjectWarehouse.Repositories.Implementations; using ProjectWarehouse.Repositories.Implementations;
using Serilog;
using Unity; using Unity;
using Unity.Lifetime; using Unity.Lifetime;
using Unity.Microsoft.Logging;
namespace ProjectWarehouse namespace ProjectWarehouse
{ {
@ -23,13 +27,28 @@ namespace ProjectWarehouse
{ {
var container = new UnityContainer(); var container = new UnityContainer();
container.AddExtension(new LoggingExtension(CreateLoggerFactory()));
container.RegisterType<IEmployeeRepository, EmployeeRepository>(new TransientLifetimeManager()); container.RegisterType<IEmployeeRepository, EmployeeRepository>(new TransientLifetimeManager());
container.RegisterType<IProductionRepository, ProductionRepository>(new TransientLifetimeManager()); container.RegisterType<IProductionRepository, ProductionRepository>(new TransientLifetimeManager());
container.RegisterType<IComponentsRepository, ComponentsRepository>(new TransientLifetimeManager()); container.RegisterType<IComponentsRepository, ComponentsRepository>(new TransientLifetimeManager());
container.RegisterType<IOrderRequestRepository, OrderRequestRepository>(new TransientLifetimeManager()); container.RegisterType<IOrderRequestRepository, OrderRequestRepository>(new TransientLifetimeManager());
container.RegisterType<IInventoryRepository, InventoryRepository>(new TransientLifetimeManager()); container.RegisterType<IInventoryRepository, InventoryRepository>(new TransientLifetimeManager());
container.RegisterType<IConnectionString, ConnectionString>(new TransientLifetimeManager());
return container; return container;
} }
private static LoggerFactory CreateLoggerFactory()
{
var loggerFactory = new LoggerFactory();
loggerFactory.AddSerilog(new LoggerConfiguration()
.ReadFrom.Configuration(new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build())
.CreateLogger());
return loggerFactory;
}
} }
} }

View File

@ -9,7 +9,18 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Npgsql" Version="9.0.1" />
<PackageReference Include="Serilog" Version="4.1.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.4" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="Unity" Version="5.11.10" /> <PackageReference Include="Unity" Version="5.11.10" />
<PackageReference Include="Unity.Microsoft.Logging" Version="5.11.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -39,4 +50,10 @@
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,6 @@
namespace ProjectWarehouse.Repositories;
public interface IConnectionString
{
public string ConnectionString { get; }
}

View File

@ -6,11 +6,7 @@ public interface IProductionRepository
{ {
IEnumerable<Production> ReadProduction(); IEnumerable<Production> ReadProduction();
Production ReadProductionByID(int id);
void CreateProduction(Production production); void CreateProduction(Production production);
void UpdateProduction(Production production);
void DeleteProduction(int id); void DeleteProduction(int id);
} }

View File

@ -1,28 +1,120 @@
using ProjectWarehouse.Entities; using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using ProjectWarehouse.Entities;
using Dapper;
namespace ProjectWarehouse.Repositories.Implementations; namespace ProjectWarehouse.Repositories.Implementations;
public class ComponentsRepository : IComponentsRepository public class ComponentsRepository : IComponentsRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<ComponentsRepository> _logger;
public ComponentsRepository(IConnectionString connectionString, ILogger<ComponentsRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateComponents(Components component) public void CreateComponents(Components component)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(component));
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Components (Name, Price, Count, TypeComponentsId)
VALUES (@Name, @Price, @Count, @TypeComponentsId)";
connection.Execute(queryInsert, component);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void UpdateComponents(Components component)
{
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект:{json}", JsonConvert.SerializeObject(component));
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Components
SET
Name=@Name,
Price=@Price,
Count=@Count,
TypeComponentsId=@TypeComponentsId
WHERE Id=@id";
connection.Execute(queryUpdate, component);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
public void DeleteComponents(int id) public void DeleteComponents(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект:{id}", id);
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Components
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public Components ReadComponentsByID(int id)
{
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект:{id}", id);
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Components
WHERE Id=@id";
var components = connection.QueryFirst<Components>(querySelect, new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(components));
return components;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
} }
public IEnumerable<Components> ReadComponents() public IEnumerable<Components> ReadComponents()
{ {
return []; _logger.LogInformation("Получение всех объектов");
} try
public Components ReadComponentsByID(int id)
{ {
return Components.CreateEntity(0, string.Empty, 0, 0, 0); using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
var querySelect = "SELECT * FROM Components";
var components = connection.Query<Components>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(components));
return components;
} }
catch (Exception ex)
public void UpdateComponents(Components component)
{ {
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
} }

View File

@ -0,0 +1,6 @@
namespace ProjectWarehouse.Repositories.Implementations;
public class ConnectionString : IConnectionString
{
string IConnectionString.ConnectionString => "Host=localhost;Port=5432;Database=warehousebd;Username=postgres;Password=postgres";
}

View File

@ -1,30 +1,121 @@
using ProjectWarehouse.Entities.Enums; using ProjectWarehouse.Entities;
using ProjectWarehouse.Entities; using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Dapper;
namespace ProjectWarehouse.Repositories.Implementations; namespace ProjectWarehouse.Repositories.Implementations;
public class EmployeeRepository : IEmployeeRepository public class EmployeeRepository : IEmployeeRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<EmployeeRepository> _logger;
public EmployeeRepository(IConnectionString connectionString, ILogger<EmployeeRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateEmployee(Employee employee) public void CreateEmployee(Employee employee)
{ {
} _logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(employee));
public void DeleteEmployee(int id) try
{ {
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Employees (FirstName, LastName, EmployeePostId)
VALUES (@FirstName, @LastName, @EmployeePostId)";
connection.Execute(queryInsert, employee);
} }
catch (Exception ex)
public Employee ReadEmployeeById(int id)
{ {
return Employee.CreateEntity(0, string.Empty, string.Empty, _logger.LogError(ex, "Ошибка при добавлении объекта");
EmployeePost.None); throw;
} }
public IEnumerable<Employee> ReadEmployees()
{
return [];
} }
public void UpdateEmployee(Employee employee) public void UpdateEmployee(Employee employee)
{ {
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(employee));
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Employees
SET
FirstName=@FirstName,
LastName=@LastName,
EmployeePostId=@EmployeePostId
WHERE Id=@id";
connection.Execute(queryUpdate, employee);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
public void DeleteEmployee(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Employees
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public Employee ReadEmployeeById(int id)
{
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Employees
WHERE Id=@id";
var employee = connection.QueryFirst<Employee>(querySelect,
new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(employee));
return employee;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
public IEnumerable<Employee> ReadEmployees()
{
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Employees";
var employees = connection.Query<Employee>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(employees));
return employees;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
} }

View File

@ -1,28 +1,123 @@
using ProjectWarehouse.Entities; using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using ProjectWarehouse.Entities;
namespace ProjectWarehouse.Repositories.Implementations; namespace ProjectWarehouse.Repositories.Implementations;
public class InventoryRepository : IInventoryRepository public class InventoryRepository : IInventoryRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<InventoryRepository> _logger;
public InventoryRepository(IConnectionString connectionString, ILogger<InventoryRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateInventory(Inventory inventory) public void CreateInventory(Inventory inventory)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(inventory));
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
var queryInsert = @"
INSERT INTO Inventory (Quantity, IsDefect, ComponentsId)
VALUES (@Quantity, @IsDefect, @ComponentsId)";
connection.Execute(queryInsert, inventory);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void UpdateInventory(Inventory inventory)
{
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект:{json}", JsonConvert.SerializeObject(inventory));
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
var queryUpdate = @"
UPDATE Inventory
SET
Quantity=@Quantity,
IsDefect=@IsDefect,
ComponentsId=@ComponentsId
WHERE Id=@Id";
connection.Execute(queryUpdate, inventory);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
public void DeleteInventory(int id) public void DeleteInventory(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект:{id}", id);
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
var queryDelete = @"
DELETE FROM Inventory
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public Inventory ReadInventoryById(int id)
{
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Inventory
WHERE Id=@id";
var inventory = connection.QueryFirst<Inventory>(querySelect,
new { id });
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(inventory));
return inventory;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
} }
public IEnumerable<Inventory> ReadInventory() public IEnumerable<Inventory> ReadInventory()
{ {
return []; _logger.LogInformation("Получение всех объектов");
} try
public Inventory ReadInventoryById(int id)
{ {
return Inventory.CreateEntity(0, 0, false, 0); using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
var querySelect = "SELECT * FROM Inventory";
var inventory = connection.Query<Inventory>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(inventory));
return inventory;
} }
catch (Exception ex)
public void UpdateInventory(Inventory inventory)
{ {
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
} }

View File

@ -1,15 +1,56 @@
using ProjectWarehouse.Entities; using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using ProjectWarehouse.Entities;
namespace ProjectWarehouse.Repositories.Implementations; namespace ProjectWarehouse.Repositories.Implementations;
public class OrderRequestRepository : IOrderRequestRepository public class OrderRequestRepository : IOrderRequestRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<OrderRequestRepository> _logger;
public OrderRequestRepository(IConnectionString connectionString, ILogger<OrderRequestRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateOrderRequest(OrderRequest orderRequest) public void CreateOrderRequest(OrderRequest orderRequest)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(orderRequest));
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO OrderRequest (Quantity, DateOrder, ComponentsId)
VALUES (@Quantity, @DateOrder, @ComponentsId)";
connection.Execute(queryInsert, orderRequest);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public IEnumerable<OrderRequest> ReadOrderRequest(DateTime? dateForm = null, DateTime? dateTo = null, double? quantity = null, int? componentsID = null) public IEnumerable<OrderRequest> ReadOrderRequest(DateTime? dateForm = null, DateTime? dateTo = null, double? quantity = null, int? componentsID = null)
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM OrderRequest";
var orderRequest = connection.Query<OrderRequest>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(orderRequest));
return orderRequest;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
} }

View File

@ -1,28 +1,94 @@
using ProjectWarehouse.Entities; using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using ProjectWarehouse.Entities;
namespace ProjectWarehouse.Repositories.Implementations; namespace ProjectWarehouse.Repositories.Implementations;
public class ProductionRepository : IProductionRepository public class ProductionRepository : IProductionRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<ProductionRepository> _logger;
public ProductionRepository(IConnectionString connectionString, ILogger<ProductionRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateProduction(Production production) public void CreateProduction(Production production)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(production));
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
using var transaction = connection.BeginTransaction();
var queryInsert = @"
INSERT INTO Production (Name, Description, EmployeeId)
VALUES (@Name, @Description, @EmployeeId);
SELECT MAX(id) FROM Production";
var productionId = connection.QueryFirst<int>(queryInsert, production, transaction);
var querySubInsert = @"
INSERT INTO Components_Production (ComponentsId, Count)
VALUES (@ComponentsId, @Count)";
foreach (var elem in production.Components_Productions)
{
connection.Execute(querySubInsert, new
{
productionId,
elem.ComponentsId,
elem.Count
}, transaction);
}
transaction.Commit();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public void DeleteProduction(int id) public void DeleteProduction(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Production
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
} }
public IEnumerable<Production> ReadProduction() public IEnumerable<Production> ReadProduction()
{ {
return []; _logger.LogInformation("Получение всех объектов");
} try
public Production ReadProductionByID(int id)
{ {
return Production.CreateEntity(0, string.Empty, string.Empty, 0, []); using var connection = new Npgsql.NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT * FROM Production";
var production =
connection.Query<Production>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(production));
return production;
} }
catch (Exception ex)
public void UpdateProduction(Production production)
{ {
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
} }

View File

@ -0,0 +1,15 @@
{
"Serilog": {
"Using": [ "Serilog.Sinks.File" ],
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "Logs/warehouse_log.txt",
"rollingInterval": "Day"
}
}
]
}
}