лабораторная 2

This commit is contained in:
SVETLANA_8 2024-11-25 14:33:39 +03:00
parent d1c9cd4ecc
commit 273c081f0e
27 changed files with 714 additions and 140 deletions

View File

@ -11,7 +11,7 @@ public class Client
public int Id { get; set; } public int Id { get; set; }
public string Name { get; private set; } = string.Empty; public string Name { get; private set; } = string.Empty;
public string Phone { get; private set; } = string.Empty; public string Phone { get; private set; } = string.Empty;
public Gender Gender { get; private set; } = Gender.None; // Используем flag Gender public Gender Gender { get; private set; } // Используем flag Gender
public static Client CreateEntity(int id, string name, string phone, Gender gender) public static Client CreateEntity(int id, string name, string phone, Gender gender)
{ {

View File

@ -8,12 +8,12 @@ namespace ProjectAtelier.Entities;
public class Product public class Product
{ {
public int Id { get; private set; } public int Id { get; set; }
public string Name { get; private set; } = string.Empty; public string Name { get; set; } = string.Empty;
public ProductView View{ get; private set; } public ProductView View{ get; set; }
public int CountMaterial { get; private set; } public int CountMaterial { get; set; }
public IEnumerable<ProductMaterial> ProductMaterial { get; private set; } = []; public IEnumerable<ProductMaterial> ProductMaterial { get; set; } = [];
public static Product CreateEntity(int id, string name, ProductView view, int countmaterial, IEnumerable<ProductMaterial> productMaterial) public static Product CreateEntity(int id, string name, ProductView view, int countmaterial, IEnumerable<ProductMaterial> productMaterial)
{ {
return new Product return new Product

View File

@ -10,8 +10,8 @@ namespace ProjectAtelier.Entities;
{ {
public int Id { get; private set; } public int Id { get; private set; }
public int ProductId { get; private set; } public int ProductId { get; private set; }
public int MaterialId { get; private set; } public int MaterialId { get; set; }
public int Count { get; private set; } public int Count { get; set; }
public static ProductMaterial CreateOperation(int id, int productId, int materialid, int count) public static ProductMaterial CreateOperation(int id, int productId, int materialid, int count)
{ {

View File

@ -10,8 +10,8 @@ public enum Gender
{ {
None = 0, None = 0,
Male = 1, M = 1,
Female = 2, F = 2,
Other = 4 Other = 4
} }

View File

@ -8,8 +8,8 @@ namespace ProjectAtelier.Entities;
public enum OrderStatus public enum OrderStatus
{ {
None = 0, None = 0,
NotCompleted = 1, Обработка = 1,
Reserv = 2, Пошив = 2,
Completed = 3 Готово = 3
} }

View File

@ -9,8 +9,11 @@ namespace ProjectAtelier.Entities;
public enum ProductView public enum ProductView
{ {
None = 0, None = 0,
Shirt = 1, Рубашка = 1,
Trousers = 2, Брюки = 2,
Jacket = 3 Пиджак = 3,
Халат= 4,
Футболка= 5
} }

View File

@ -1,4 +1,5 @@
using ProjectAtelier.Entities; using Microsoft.VisualBasic.FileIO;
using ProjectAtelier.Entities;
using ProjectAtelier.Repositories; using ProjectAtelier.Repositories;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -28,10 +29,23 @@ namespace ProjectAtelier.Forms
{ {
throw new InvalidDataException(nameof(client)); throw new InvalidDataException(nameof(client));
} }
//textBoxName.Text = client.Name;
//textBoxPhone.Text = client.Phone;
//SetCheckedListBoxGender(client.Gender); // Устанавливаем выбранные элементы
//_clientId = value;///////////////////////////////
foreach (Gender elem in Enum.GetValues(typeof(Gender)))
{
if ((elem & client.Gender) != 0)
{
checkedListBoxGender.SetItemChecked(checkedListBoxGender.Items.IndexOf(
elem), true);
}
}
textBoxName.Text = client.Name; textBoxName.Text = client.Name;
textBoxPhone.Text = client.Phone; textBoxPhone.Text = client.Phone;
SetCheckedListBoxGender(client.Gender); // Устанавливаем выбранные элементы
_clientId = value; _clientId = value;
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -44,21 +58,25 @@ namespace ProjectAtelier.Forms
public FormClient(IClientRepository clientRepository) public FormClient(IClientRepository clientRepository)
{ {
InitializeComponent(); InitializeComponent();
_clientRepository = clientRepository ?? throw new ArgumentNullException(nameof(clientRepository)); _clientRepository = clientRepository ??
throw new ArgumentNullException(nameof(clientRepository));
foreach (var elem in Enum.GetValues(typeof(Gender)))
{
checkedListBoxGender.Items.Add(elem);
}
// Инициализация CheckedListBox с элементами перечисления Gender
checkedListBoxGender.Items.AddRange(Enum.GetValues(typeof(Gender)).Cast<object>().ToArray());
} }
private void ButtonAdd_Click(object sender, EventArgs e) private void ButtonAdd_Click(object sender, EventArgs e)
{ {
try try
{ {
if (string.IsNullOrWhiteSpace(textBoxName.Text) || string.IsNullOrWhiteSpace(textBoxPhone.Text)) if (string.IsNullOrWhiteSpace(textBoxName.Text) ||
string.IsNullOrWhiteSpace(textBoxPhone.Text) ||
checkedListBoxGender.CheckedItems.Count == 0)
{ {
throw new Exception("Имеются незаполненные поля"); throw new Exception("Имеются незаполненные поля");
} }
if (_clientId.HasValue) if (_clientId.HasValue)
{ {
_clientRepository.UpdateClient(CreateClient(_clientId.Value)); _clientRepository.UpdateClient(CreateClient(_clientId.Value));
@ -71,34 +89,22 @@ namespace ProjectAtelier.Forms
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка при сохранении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
private void ButtonCancel_Click(object sender, EventArgs e) =>Close(); private void ButtonCancel_Click(object sender, EventArgs e) =>Close();
private Client CreateClient(int id) private Client CreateClient(int id)
{ {
// Получаем выбранные значения из CheckedListBox
Gender gender = Gender.None; Gender gender = Gender.None;
foreach (var item in checkedListBoxGender.CheckedItems) foreach (var elem in checkedListBoxGender.CheckedItems)
{ {
gender |= (Gender)item; gender |= (Gender)elem;
} }
return Client.CreateEntity(id, textBoxName.Text, textBoxPhone.Text, gender); return Client.CreateEntity(id, textBoxName.Text, textBoxPhone.Text, gender);
} }
}
private void SetCheckedListBoxGender(Gender gender)
{
checkedListBoxGender.ClearSelected();
foreach (var item in checkedListBoxGender.Items)
{
if (gender.HasFlag((Gender)item))
{
checkedListBoxGender.SetItemChecked(checkedListBoxGender.Items.IndexOf(item), true);
}
}
}
}
} }

View File

@ -66,7 +66,7 @@ namespace ProjectAtelier.Forms
} }
try try
{ {
var form = _container.Resolve<FormMaterial>(); var form = _container.Resolve<FormClient>();
form.Id = findId; form.Id = findId;
form.ShowDialog(); form.ShowDialog();
LoadList(); LoadList();
@ -76,7 +76,7 @@ namespace ProjectAtelier.Forms
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
private void LoadList() => dataGridView.DataSource = _clientRepository.ReadClient(); private void LoadList() => dataGridView.DataSource = _clientRepository.ReadClients();
private bool TryGetIdentifierFromSelectedRow(out int id) private bool TryGetIdentifierFromSelectedRow(out int id)
{ {
id = 0; id = 0;

View File

@ -30,8 +30,9 @@
{ {
groupBox = new GroupBox(); groupBox = new GroupBox();
dataGridView = new DataGridView(); dataGridView = new DataGridView();
ColumnMaterials = new DataGridViewComboBoxColumn(); ColumnMaterial = new DataGridViewComboBoxColumn();
ColumnCount = new DataGridViewTextBoxColumn(); ColumnCount = new DataGridViewTextBoxColumn();
ColumProduct = new DataGridViewTextBoxColumn();
buttonAdd = new Button(); buttonAdd = new Button();
buttonCancel = new Button(); buttonCancel = new Button();
labelName = new Label(); labelName = new Label();
@ -60,7 +61,7 @@
// //
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnMaterials, ColumnCount }); dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnMaterial, ColumnCount, ColumProduct });
dataGridView.Dock = DockStyle.Fill; dataGridView.Dock = DockStyle.Fill;
dataGridView.Location = new Point(3, 24); dataGridView.Location = new Point(3, 24);
dataGridView.Margin = new Padding(3, 4, 3, 4); dataGridView.Margin = new Padding(3, 4, 3, 4);
@ -71,13 +72,13 @@
dataGridView.Size = new Size(642, 328); dataGridView.Size = new Size(642, 328);
dataGridView.TabIndex = 0; dataGridView.TabIndex = 0;
// //
// ColumnMaterials // ColumnMaterial
// //
ColumnMaterials.HeaderText = "Materials"; ColumnMaterial.HeaderText = "Materials";
ColumnMaterials.MinimumWidth = 6; ColumnMaterial.MinimumWidth = 6;
ColumnMaterials.Name = "ColumnMaterials"; ColumnMaterial.Name = "ColumnMaterial";
ColumnMaterials.Resizable = DataGridViewTriState.True; ColumnMaterial.Resizable = DataGridViewTriState.True;
ColumnMaterials.SortMode = DataGridViewColumnSortMode.Automatic; ColumnMaterial.SortMode = DataGridViewColumnSortMode.Automatic;
// //
// ColumnCount // ColumnCount
// //
@ -85,6 +86,12 @@
ColumnCount.MinimumWidth = 6; ColumnCount.MinimumWidth = 6;
ColumnCount.Name = "ColumnCount"; ColumnCount.Name = "ColumnCount";
// //
// ColumProduct
//
ColumProduct.HeaderText = "ColumnName";
ColumProduct.MinimumWidth = 6;
ColumProduct.Name = "ColumProduct";
//
// buttonAdd // buttonAdd
// //
buttonAdd.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; buttonAdd.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
@ -121,7 +128,7 @@
// labelType // labelType
// //
labelType.AutoSize = true; labelType.AutoSize = true;
labelType.Location = new Point(35, 104); labelType.Location = new Point(35, 109);
labelType.Name = "labelType"; labelType.Name = "labelType";
labelType.Size = new Size(96, 20); labelType.Size = new Size(96, 20);
labelType.TabIndex = 4; labelType.TabIndex = 4;
@ -148,7 +155,7 @@
// //
comboBoxProduct.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxProduct.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxProduct.FormattingEnabled = true; comboBoxProduct.FormattingEnabled = true;
comboBoxProduct.Location = new Point(215, 104); comboBoxProduct.Location = new Point(215, 101);
comboBoxProduct.Margin = new Padding(3, 4, 3, 4); comboBoxProduct.Margin = new Padding(3, 4, 3, 4);
comboBoxProduct.Name = "comboBoxProduct"; comboBoxProduct.Name = "comboBoxProduct";
comboBoxProduct.Size = new Size(161, 28); comboBoxProduct.Size = new Size(161, 28);
@ -192,13 +199,14 @@
private DataGridView dataGridView; private DataGridView dataGridView;
private Button buttonAdd; private Button buttonAdd;
private Button buttonCancel; private Button buttonCancel;
private DataGridViewComboBoxColumn ColumnMaterials;
private DataGridViewTextBoxColumn ColumnCount;
private Label labelName; private Label labelName;
private Label labelType; private Label labelType;
private Label labelCountInWarehouse; private Label labelCountInWarehouse;
private TextBox textBoxName; private TextBox textBoxName;
private ComboBox comboBoxProduct; private ComboBox comboBoxProduct;
private NumericUpDown numericUpDownCount; private NumericUpDown numericUpDownCount;
private DataGridViewComboBoxColumn ColumnMaterial;
private DataGridViewTextBoxColumn ColumnCount;
private DataGridViewTextBoxColumn ColumProduct;
} }
} }

View File

@ -1,5 +1,15 @@
using ProjectAtelier.Entities; using ProjectAtelier.Entities;
using ProjectAtelier.Repositories; using ProjectAtelier.Repositories;
using ProjectAtelier.Repositories.Implementations;
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 ProjectAtelier.Forms namespace ProjectAtelier.Forms
{ {
@ -23,6 +33,13 @@ namespace ProjectAtelier.Forms
comboBoxProduct.SelectedItem = product.View; comboBoxProduct.SelectedItem = product.View;
numericUpDownCount.Value = product.CountMaterial; numericUpDownCount.Value = product.CountMaterial;
_productId = value; _productId = value;
// Заполняем DataGridView данными из product.ProductMaterial
dataGridView.Rows.Clear();
foreach (var material in product.ProductMaterial)
{
dataGridView.Rows.Add(material.MaterialId, material.Count);
}
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -39,19 +56,17 @@ namespace ProjectAtelier.Forms
comboBoxProduct.DataSource = Enum.GetValues(typeof(ProductView)); comboBoxProduct.DataSource = Enum.GetValues(typeof(ProductView));
ColumnMaterials.DataSource = materialRepository.ReadMaterials();
ColumnMaterials.DisplayMember = "Name";
ColumnMaterials.ValueMember = "Id";
} }
private void buttonAdd_Click(object sender, EventArgs e) private void buttonAdd_Click(object sender, EventArgs e)
{ {
if (dataGridView.RowCount < 1) if (dataGridView.RowCount < 1)
{ {
throw new Exception("Имеются незаполненны поля"); MessageBox.Show("Имеются незаполненные поля", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
} }
try try
{ {
if (string.IsNullOrWhiteSpace(textBoxName.Text) || comboBoxProduct.SelectedIndex < 1) if (string.IsNullOrWhiteSpace(textBoxName.Text) || comboBoxProduct.SelectedIndex < 0)
{ {
throw new Exception("Имеются незаполненные поля"); throw new Exception("Имеются незаполненные поля");
} }
@ -76,17 +91,25 @@ namespace ProjectAtelier.Forms
var list = new List<ProductMaterial>(); var list = new List<ProductMaterial>();
foreach (DataGridViewRow row in dataGridView.Rows) foreach (DataGridViewRow row in dataGridView.Rows)
{ {
if (row.Cells["ColumProduct"].Value == null || row.Cells["ColumMaterials"].Value == null || row.Cells["ColumnCount"].Value == null) if (row.Cells["ColumnMaterial"].Value == null || row.Cells["ColumnCount"].Value == null)
{ {
continue; continue;
} }
list.Add(ProductMaterial.CreateOperation(0, Convert.ToInt32(row.Cells["ColumnMaterial"].Value), list.Add(new ProductMaterial
Convert.ToInt32(row.Cells["ColumnProduct"].Value), Convert.ToInt32(row.Cells["ColumnCount"].Value))); {
MaterialId = Convert.ToInt32(row.Cells["ColumnMaterial"].Value),
Count = Convert.ToInt32(row.Cells["ColumnCount"].Value)
});
} }
return list; return list;
} }
private Product CreateProduct(int id) => Product.CreateEntity(id, textBoxName.Text, (ProductView)comboBoxProduct.SelectedItem!, Convert.ToInt32(numericUpDownCount.Value), CreateListMaterialFromDataGrid()); private Product CreateProduct(int id) => new Product
{
Id = id,
Name = textBoxName.Text,
View = (ProductView)comboBoxProduct.SelectedItem,
CountMaterial = Convert.ToInt32(numericUpDownCount.Value),
ProductMaterial = CreateListMaterialFromDataGrid()
};
} }
} }

View File

@ -117,4 +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="ColumProduct.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root> </root>

View File

@ -36,12 +36,12 @@
comboBoxStatus = new ComboBox(); comboBoxStatus = new ComboBox();
groupBox = new GroupBox(); groupBox = new GroupBox();
dataGridView = new DataGridView(); dataGridView = new DataGridView();
ColumnProducts = new DataGridViewComboBoxColumn();
ColumnCount = new DataGridViewTextBoxColumn();
comboBoxClient = new ComboBox(); comboBoxClient = new ComboBox();
labelClient = new Label(); labelClient = new Label();
dateTimePicker = new DateTimePicker(); dateTimePicker = new DateTimePicker();
label1 = new Label(); label1 = new Label();
ColumProduct = new DataGridViewComboBoxColumn();
ColumnCount = new DataGridViewTextBoxColumn();
groupBox.SuspendLayout(); groupBox.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout(); SuspendLayout();
@ -120,7 +120,7 @@
// //
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnProducts, ColumnCount }); dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumProduct, ColumnCount });
dataGridView.Dock = DockStyle.Fill; dataGridView.Dock = DockStyle.Fill;
dataGridView.Location = new Point(3, 24); dataGridView.Location = new Point(3, 24);
dataGridView.Margin = new Padding(3, 4, 3, 4); dataGridView.Margin = new Padding(3, 4, 3, 4);
@ -131,19 +131,6 @@
dataGridView.Size = new Size(499, 408); dataGridView.Size = new Size(499, 408);
dataGridView.TabIndex = 0; dataGridView.TabIndex = 0;
// //
// ColumnProducts
//
ColumnProducts.HeaderText = "Изделие";
ColumnProducts.MinimumWidth = 6;
ColumnProducts.Name = "ColumnProducts";
ColumnProducts.ReadOnly = true;
//
// ColumnCount
//
ColumnCount.HeaderText = "Количество";
ColumnCount.MinimumWidth = 6;
ColumnCount.Name = "ColumnCount";
//
// comboBoxClient // comboBoxClient
// //
comboBoxClient.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxClient.DropDownStyle = ComboBoxStyle.DropDownList;
@ -179,6 +166,19 @@
label1.TabIndex = 11; label1.TabIndex = 11;
label1.Text = "Дата"; label1.Text = "Дата";
// //
// ColumProduct
//
ColumProduct.HeaderText = "Изделие";
ColumProduct.MinimumWidth = 6;
ColumProduct.Name = "ColumProduct";
ColumProduct.ReadOnly = true;
//
// ColumnCount
//
ColumnCount.HeaderText = "Количество";
ColumnCount.MinimumWidth = 6;
ColumnCount.Name = "ColumnCount";
//
// FormProductOrder // FormProductOrder
// //
AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleDimensions = new SizeF(8F, 20F);
@ -216,9 +216,9 @@
private DataGridView dataGridView; private DataGridView dataGridView;
private ComboBox comboBoxClient; private ComboBox comboBoxClient;
private Label labelClient; private Label labelClient;
private DataGridViewComboBoxColumn ColumnProducts;
private DataGridViewTextBoxColumn ColumnCount;
private DateTimePicker dateTimePicker; private DateTimePicker dateTimePicker;
private Label label1; private Label label1;
private DataGridViewComboBoxColumn ColumProduct;
private DataGridViewTextBoxColumn ColumnCount;
} }
} }

View File

@ -21,12 +21,12 @@ namespace ProjectAtelier.Forms
comboBoxStatus.DataSource = Enum.GetValues(typeof(OrderStatus)); comboBoxStatus.DataSource = Enum.GetValues(typeof(OrderStatus));
ColumnProducts.DataSource = productRepository.ReadProducts(); ColumProduct.DataSource = productRepository.ReadProducts();
ColumnProducts.DisplayMember = "Name"; ColumProduct.DisplayMember = "Name";
ColumnProducts.ValueMember = "Id"; ColumProduct.ValueMember = "Id";
// Заполняем ComboBox для выбора клиента // Заполняем ComboBox для выбора клиента
comboBoxClient.DataSource = clientRepository.ReadClient(); comboBoxClient.DataSource = clientRepository.ReadClients();
comboBoxClient.DisplayMember = "Name"; comboBoxClient.DisplayMember = "Name";
comboBoxClient.ValueMember = "Id"; comboBoxClient.ValueMember = "Id";

View File

@ -88,6 +88,7 @@
buttonRemove.Size = new Size(94, 92); buttonRemove.Size = new Size(94, 92);
buttonRemove.TabIndex = 1; buttonRemove.TabIndex = 1;
buttonRemove.UseVisualStyleBackColor = true; buttonRemove.UseVisualStyleBackColor = true;
buttonRemove.Click += buttonRemove_Click;
// //
// buttonAdd // buttonAdd
// //

View File

@ -3,6 +3,10 @@ using ProjectAtelier.Repositories;
using ProjectAtelier.REPOSITORY.Implementations; using ProjectAtelier.REPOSITORY.Implementations;
using ProjectAtelier.REPOSITORY; using ProjectAtelier.REPOSITORY;
using Unity; using Unity;
using Unity.Microsoft.Logging;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Serilog;
namespace ProjectAtelier namespace ProjectAtelier
{ {
@ -22,6 +26,8 @@ namespace ProjectAtelier
private static IUnityContainer CreateContainer() private static IUnityContainer CreateContainer()
{ {
var container = new UnityContainer(); var container = new UnityContainer();
container.AddExtension(new LoggingExtension(CreateLoggerFactory()));
container.RegisterType<IOrderRepository, OrderRepository>(); container.RegisterType<IOrderRepository, OrderRepository>();
container.RegisterType<IMaterialRepository, MaterialRepository>(); container.RegisterType<IMaterialRepository, MaterialRepository>();
container.RegisterType<IProductRepository, ProductRepository>(); container.RegisterType<IProductRepository, ProductRepository>();
@ -29,7 +35,19 @@ namespace ProjectAtelier
container.RegisterType<IProductMaterialRepository, ProductMaterialRepository>(); container.RegisterType<IProductMaterialRepository, ProductMaterialRepository>();
container.RegisterType<IMaterialReplenishmentRepository, MaterialReplenishmentRepository>(); container.RegisterType<IMaterialReplenishmentRepository, MaterialReplenishmentRepository>();
container.RegisterType<IConnectionString, ConnectionString>();
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="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Npgsql" Version="8.0.5" />
<PackageReference Include="Serilog" Version="4.0.2" />
<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>
@ -27,4 +38,10 @@
</EmbeddedResource> </EmbeddedResource>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>

View File

@ -1,4 +1,9 @@
using ProjectAtelier.Entities; using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectAtelier.Entities;
using ProjectAtelier.Repositories;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -9,21 +14,93 @@ namespace ProjectAtelier.REPOSITORY.Implementations;
public class MaterialReplenishmentRepository : IMaterialReplenishmentRepository public class MaterialReplenishmentRepository : IMaterialReplenishmentRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<Material> _logger;
public MaterialReplenishmentRepository(IConnectionString connectionString, ILogger<Material> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateMaterialSpent(MaterialReplenishment material) public void CreateMaterialSpent(MaterialReplenishment material)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(material));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO MaterialReplenishment (Count, DataTime, IDMaterial)
VALUES (@Count, @DataTime, @IDMaterial)";
connection.Execute(queryInsert, material);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public MaterialReplenishment ReadMaterialSpentById(int id) public MaterialReplenishment ReadMaterialSpentById(int id)
{ {
return MaterialReplenishment.CreateOperation(0, 0, DateTime.Now, 0); _logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM MaterialReplenishment
WHERE Id=@id";
var material = connection.QueryFirst<MaterialReplenishment>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(material));
return material;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
} }
public IEnumerable<MaterialReplenishment> ReadMaterialsSpent() public IEnumerable<MaterialReplenishment> ReadMaterialsSpent()
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM MaterialReplenishment";
var materials = connection.Query<MaterialReplenishment>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(materials));
return materials;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
public void UpdateMaterialSpent(MaterialReplenishment material) public void UpdateMaterialSpent(MaterialReplenishment material)
{ {
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(material));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE MaterialReplenishment
SET
Count=@Count,
DataTime=@DataTime,
IDMaterial=@IDMaterial
WHERE Id=@Id";
connection.Execute(queryUpdate, material);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
} }

View File

@ -9,7 +9,7 @@ namespace ProjectAtelier.Repositories;
public interface IClientRepository public interface IClientRepository
{ {
IEnumerable<Client> ReadClient(); IEnumerable<Client> ReadClients();
Client ReadClientById(int id); Client ReadClientById(int id);
void CreateClient(Client client); void CreateClient(Client client);
void UpdateClient(Client client); void UpdateClient(Client client);

View File

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

View File

@ -10,7 +10,6 @@ namespace ProjectAtelier.Repositories;
public interface IOrderRepository public interface IOrderRepository
{ {
IEnumerable<Order> ReadOrders(DateTime? dateForm = null, DateTime? dateTo = null, int? orderStatus = null, int? orderId = null); IEnumerable<Order> ReadOrders(DateTime? dateForm = null, DateTime? dateTo = null, int? orderStatus = null, int? orderId = null);
Order ReadOrderById(int orderId);
void CreateOrder(Order order); void CreateOrder(Order order);
void DeleteOrder(int id); void DeleteOrder(int id);
} }

View File

@ -1,33 +1,126 @@
using ProjectAtelier.Entities; using Dapper;
using System; using Microsoft.Extensions.Logging;
using System.Collections.Generic; using Newtonsoft.Json;
using System.Linq; using Npgsql;
using System.Text; using ProjectAtelier.Entities;
using System.Threading.Tasks;
namespace ProjectAtelier.Repositories.Implementations; namespace ProjectAtelier.Repositories.Implementations;
public class ClientRepository : IClientRepository public class ClientRepository : IClientRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<Client> _logger;
public ClientRepository(IConnectionString connectionString, ILogger<Client> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateClient(Client client) public void CreateClient(Client client)
{ {
} _logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}",
public void DeleteClient(int id) JsonConvert.SerializeObject(client));
try
{ {
using var connection = new
NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Clients (Name, Phone, Gender)
VALUES (@Name, @Phone, @Gender)";
connection.Execute(queryInsert, client);
} }
catch (Exception ex)
public IEnumerable<Client> ReadClient()
{ {
return []; _logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
} }
public Client ReadClientById(int id)
{
return Client.CreateEntity(id, string.Empty, string.Empty, Gender.None);
} }
public void UpdateClient(Client client) public void UpdateClient(Client client)
{ {
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}",
JsonConvert.SerializeObject(client));
try
{
using var connection = new
NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Clients
SET
Name=@Name,
Phone=@Phone,
Gender=@Gender
WHERE Id=@Id";
connection.Execute(queryUpdate, client);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
}
public void DeleteClient(int id)
{
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new
NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Clients
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
}
public Client ReadClientById(int id)
{
_logger.LogInformation("Получение объекта по идентификатору");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Clients
WHERE Id=@id";
var client = connection.QueryFirst<Client>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(client));
return client;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
}
public IEnumerable<Client> ReadClients()
{
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new
NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Clients";
var Client = connection.Query<Client>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(Client));
return Client;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
} }

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectAtelier.Repositories.Implementations;
public class ConnectionString : IConnectionString
{
string IConnectionString.ConnectionString => "Server=localhost; Port=5432;Database=atelier;User Id=postgres; Password=postgres";
}

View File

@ -1,4 +1,8 @@
using ProjectAtelier.Entities; using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectAtelier.Entities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -9,25 +13,113 @@ namespace ProjectAtelier.Repositories.Implementations;
public class MaterialRepository : IMaterialRepository public class MaterialRepository : IMaterialRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<Material> _logger;
public MaterialRepository(IConnectionString connectionString, ILogger<Material> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateMaterial(Material material) public void CreateMaterial(Material material)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(material));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryInsert = @"
INSERT INTO Materials (Name, UseCount, CountInWareHouse)
VALUES (@Name, @UseCount, @CountInWareHouse)";
connection.Execute(queryInsert, material);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
}
public void UpdateMaterial(Material material)
{
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(material));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryUpdate = @"
UPDATE Materials
SET
Name=@Name,
UseCount=@UseCount,
CountInWareHouse=@CountInWareHouse
WHERE Id=@Id";
connection.Execute(queryUpdate, material);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
public void DeleteMaterial(int id) public void DeleteMaterial(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Materials
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
} }
public IEnumerable<Material> ReadMaterials() public IEnumerable<Material> ReadMaterials()
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Materials";
var materials = connection.Query<Material>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(materials));
return materials;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
public Material ReadMaterialById(int id) public Material ReadMaterialById(int id)
{ {
return Material.CreateEntity(id, string.Empty, 0, 0); _logger.LogInformation("Получение объекта по идентификатору");
} _logger.LogDebug("Объект: {id}", id);
try
public void UpdateMaterial(Material material)
{ {
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Materials
WHERE Id=@id";
var material = connection.QueryFirst<Material>(querySelect, new
{
id
});
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(material));
return material;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при поиске объекта");
throw;
}
} }
} }

View File

@ -1,4 +1,8 @@
using ProjectAtelier.Entities; using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectAtelier.Entities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -9,20 +13,82 @@ namespace ProjectAtelier.Repositories.Implementations;
public class OrderRepository : IOrderRepository public class OrderRepository : IOrderRepository
{ {
public void CreateOrder(Order feedReplenishment) private readonly IConnectionString _connectionString;
private readonly ILogger<ProductRepository> _logger;
public OrderRepository(IConnectionString connectionString, ILogger<ProductRepository> logger)
{ {
_connectionString = connectionString;
_logger = logger;
}
public void CreateOrder(Order order)
{
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(order));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
using var transaction = connection.BeginTransaction();
var queryInsert = @"
INSERT INTO Orders (DataTime, Status, Characteristic, IdClient)
VALUES (@DataTime, @Status, @Characteristic, @IdClient);
SELECT MAX(Id) FROM Orders";
var orderId = connection.QueryFirst<int>(queryInsert, order, transaction);
var querySubInsert = @"
INSERT INTO Orders_Products (OrderId, ProductId, Count)
VALUES (@OrderId, @ProductId, @Count)";
foreach (var elem in order.OrderProduct)
{
connection.Execute(querySubInsert, new
{
orderId,
elem.ProductId,
elem.Count
}, transaction);
}
transaction.Commit();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public void DeleteOrder(int id) public void DeleteOrder(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Orders
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
} }
public IEnumerable<Order> ReadOrders(DateTime? dateForm = null, DateTime? dateTo = null, int? orderStatus = null, int? orderId = null) public IEnumerable<Order> ReadOrders(DateTime? dateForm = null, DateTime? dateTo = null, int? orderStatus = null, int? orderId = null)
{ {
return []; _logger.LogInformation("Получение всех объектов");
} try
public Order ReadOrderById(int id)
{ {
return Order.CreateOperation(id, 0, string.Empty, [], 0, DateTime.Now); using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT * FROM Orders";
var order = connection.Query<Order>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(order));
return order;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
} }

View File

@ -1,4 +1,8 @@
using ProjectAtelier.Entities; using Dapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Npgsql;
using ProjectAtelier.Entities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -9,25 +13,157 @@ namespace ProjectAtelier.Repositories.Implementations;
public class ProductRepository : IProductRepository public class ProductRepository : IProductRepository
{ {
private readonly IConnectionString _connectionString;
private readonly ILogger<ProductRepository> _logger;
public ProductRepository(IConnectionString connectionString, ILogger<ProductRepository> logger)
{
_connectionString = connectionString;
_logger = logger;
}
public void CreateProduct(Product product) public void CreateProduct(Product product)
{ {
_logger.LogInformation("Добавление объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(product));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
using var transaction = connection.BeginTransaction();
var queryInsert = @"
INSERT INTO Products (Name, View, CountMaterial)
VALUES (@Name, @View, @CountMaterial);
SELECT MAX(Id) FROM Products";
var productId = connection.QueryFirst<int>(queryInsert, product, transaction);
var querySubInsert = @"
INSERT INTO Product_Materials (ProductId, MaterialId, Count)
VALUES (@ProductId, @MaterialId, @Count)";
foreach (var elem in product.ProductMaterial)
{
connection.Execute(querySubInsert, new
{
productId,
elem.MaterialId,
elem.Count
}, transaction);
}
transaction.Commit();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при добавлении объекта");
throw;
}
} }
public void DeleteProduct(int id) public void DeleteProduct(int id)
{ {
_logger.LogInformation("Удаление объекта");
_logger.LogDebug("Объект: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var queryDelete = @"
DELETE FROM Products
WHERE Id=@id";
connection.Execute(queryDelete, new { id });
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при удалении объекта");
throw;
}
} }
public IEnumerable<Product> ReadProducts() public IEnumerable<Product> ReadProducts()
{ {
return []; _logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT * FROM Products";
var product = connection.Query<Product>(querySelect);
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(product));
return product;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объектов");
throw;
}
} }
public Product ReadProductById(int id) public Product ReadProductById(int id)
{ {
return Product.CreateEntity(id, string.Empty, 0, 0, []); _logger.LogInformation("Получение объекта по ID: {id}", id);
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"
SELECT * FROM Products WHERE Id = @Id;
SELECT m.*, pm.Count FROM Materials m
JOIN Product_Materials pm ON m.Id = pm.MaterialId
WHERE pm.ProductId = @Id";
using var multi = connection.QueryMultiple(querySelect, new { Id = id });
var product = multi.Read<Product>().FirstOrDefault();
if (product != null)
{
var materials = multi.Read<Material>().ToList();
product.ProductMaterial = materials.Select(m => new ProductMaterial
{
MaterialId = m.Id,
Count = m.UseCount // Исправлено здесь
}).ToList();
}
_logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(product));
return product;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при чтении объекта по ID: {id}", id);
throw;
}
} }
public void UpdateProduct(Product product) public void UpdateProduct(Product product)
{ {
_logger.LogInformation("Редактирование объекта");
_logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(product));
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
connection.Open();
using var transaction = connection.BeginTransaction();
var queryUpdate = @"
UPDATE Products
SET Name = @Name, View = @View, CountMaterial = @CountMaterial
WHERE Id = @Id";
connection.Execute(queryUpdate, product, transaction);
var queryDelete = @"
DELETE FROM Product_Materials
WHERE ProductId = @ProductId";
connection.Execute(queryDelete, new { ProductId = product.Id }, transaction);
var querySubInsert = @"
INSERT INTO Product_Materials (ProductId, MaterialId, Count)
VALUES (@ProductId, @MaterialId, @Count)";
foreach (var elem in product.ProductMaterial)
{
connection.Execute(querySubInsert, new
{
ProductId = product.Id,
elem.MaterialId,
elem.Count
}, transaction);
}
transaction.Commit();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при редактировании объекта");
throw;
}
} }
} }

View File

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