From bb69e427c8d358b80562c4685ae02ef54b67c557 Mon Sep 17 00:00:00 2001 From: MorozovDanil Date: Mon, 2 Dec 2024 04:40:52 +0400 Subject: [PATCH 1/6] =?UTF-8?q?=D0=92=D1=80=D0=BE=D0=B4=D0=B5=20=D0=B3?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B2=D0=B0=20=D0=BA=20=D1=81=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectRepairCompany/Entities/Order.cs | 4 +- .../Entities/OrderDetail.cs | 4 +- .../Forms/FormOrder.Designer.cs | 4 +- .../ProjectRepairCompany/Forms/FormOrder.cs | 68 ++++++-- .../Forms/FormOrders.Designer.cs | 6 +- .../ProjectRepairCompany/Forms/FormOrders.cs | 12 +- .../Forms/FormStorageDetail.Designer.cs | 46 +++-- .../Forms/FormStorageDetail.cs | 86 ++-------- .../Forms/FormStorageDetails.Designer.cs | 7 +- .../Forms/FormStorageDetails.cs | 6 +- .../ProjectRepairCompany/Program.cs | 18 ++ .../ProjectRepairCompany.csproj | 17 ++ .../Repositories/IConnectionString.cs | 12 ++ .../Implementations/ConnectionString.cs | 13 ++ .../Implementations/DetailRepository.cs | 124 ++++++++++++-- .../Implementations/MasterRepository.cs | 122 ++++++++++++-- .../Implementations/OrderRepository.cs | 157 +++++++++++++++++- .../StorageDetailRepository.cs | 46 ++++- .../Implementations/StorageRepository.cs | 101 ++++++++++- .../ProjectRepairCompany/appsettings.json | 16 ++ 20 files changed, 704 insertions(+), 165 deletions(-) create mode 100644 ProjectRepairCompany/ProjectRepairCompany/Repositories/IConnectionString.cs create mode 100644 ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/ConnectionString.cs create mode 100644 ProjectRepairCompany/ProjectRepairCompany/appsettings.json diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs index ecf0341..27d03fa 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs @@ -39,9 +39,9 @@ public class Order }; } - public void AddOrderDetail(int detailId, int detailPrice, int detailCount) + public void AddOrderDetail(int detailId, int detailCount) { - var orderDetail = OrderDetail.CreateOperation(this.Id, detailId, detailPrice, detailCount); + var orderDetail = OrderDetail.CreateOperation(this.Id, detailId, detailCount); OrderDetails.Add(orderDetail); } } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs index d240c09..c465ed8 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs @@ -10,16 +10,14 @@ public class OrderDetail { public int OrderId { get; private set; } public int DetailId { get; private set; } - public int DetailPrice { get; private set; } public int DetailCount { get; private set; } - public static OrderDetail CreateOperation(int orderId, int detailId, int detailPrice, int detailCount) + public static OrderDetail CreateOperation(int orderId, int detailId, int detailCount) { return new OrderDetail { OrderId = orderId, DetailId = detailId, - DetailPrice = detailPrice, DetailCount = detailCount }; } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs index 6ce1a5d..f7dff8a 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs @@ -160,18 +160,18 @@ // groupBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; groupBox1.Controls.Add(dataGridView); - groupBox1.Location = new Point(30, 234); + groupBox1.Location = new Point(25, 234); groupBox1.Name = "groupBox1"; groupBox1.Size = new Size(401, 224); groupBox1.TabIndex = 12; groupBox1.TabStop = false; - groupBox1.Text = "groupBox1"; // // dataGridView // dataGridView.AllowUserToDeleteRows = false; dataGridView.AllowUserToResizeColumns = false; dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridView.Columns.AddRange(new DataGridViewColumn[] { Detail, DetailCount }); dataGridView.Location = new Point(3, 21); diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs index 8d70b23..517f83d 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs @@ -2,6 +2,7 @@ using ProjectRepairCompany.Repositories; using System; using System.Collections.Generic; +using System.Diagnostics.Metrics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -13,17 +14,50 @@ namespace ProjectRepairCompany.Forms { private readonly IOrderRepository _orderRepository; private readonly IDetailRepository _detailRepository; + private int? _orderId; + + public int Id + { + set + { + try + { + var order = _orderRepository.ReadOrderById(value); + if (order == null) + { + throw new InvalidOperationException(nameof(order)); + } + numericUpDownFullPrice.Value = order.FullPrice; + comboBoxMaster.SelectedValue = order.MasterId; + dateTimeCompletion.Value = order.DateCompletion; + dateTimeIssue.Value = order.DateIssue; + + foreach (var detail in order.OrderDetails) + { + dataGridView.Rows.Add(detail.DetailId, detail.DetailCount); + } + + _orderId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } public FormOrder(IOrderRepository orderRepository, IMasterRepository masterRepository, IDetailRepository detailRepository) { InitializeComponent(); + _orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository)); + _detailRepository = detailRepository ?? throw new ArgumentNullException(nameof(detailRepository)); comboBoxMaster.DataSource = masterRepository.ReadMasters(); - comboBoxMaster.DisplayMember = "Name"; + comboBoxMaster.DisplayMember = "MasterName"; comboBoxMaster.ValueMember = "Id"; - Detail.DataSource = detailRepository.ReadDetails(); + Detail.DataSource = _detailRepository.ReadDetails(); Detail.DisplayMember = "NameDetail"; Detail.ValueMember = "Id"; } @@ -37,28 +71,27 @@ namespace ProjectRepairCompany.Forms throw new Exception("Имеются незаполненные поля."); } - var order = Order.CreateOperation( - id: 0, - fullPrice: (int)numericUpDownFullPrice.Value, - masterId: (int)comboBoxMaster.SelectedValue!, - dateCompletion: dateTimeCompletion.Value, - dateIssue: dateTimeIssue.Value); + var order = Order.CreateOperation(_orderId ?? 0, Convert.ToInt32(numericUpDownFullPrice.Value), + (int)comboBoxMaster.SelectedValue, dateTimeCompletion.Value, dateTimeIssue.Value); foreach (DataGridViewRow row in dataGridView.Rows) { - if (row.Cells["Detail"].Value == null || row.Cells["DetailCount"].Value == null) + if (row.Cells["Detail"].Value != null && row.Cells["DetailCount"].Value != null) { - continue; + var detailId = (int)row.Cells["Detail"].Value; + var detailCount = (int)row.Cells["DetailCount"].Value; + order.AddOrderDetail(detailId, detailCount); } - - int detailId = (int)row.Cells["Detail"].Value; - int detailCount = int.Parse(row.Cells["DetailCount"].Value.ToString() ?? "0"); - var detailPrice = (int)_detailRepository.ReadDetailById(detailId).PriceDetail; - - order.AddOrderDetail(detailId, detailPrice, detailCount); } - _orderRepository.CreateOrder(order); + if (_orderId.HasValue) + { + _orderRepository.UpdateOrder(order); + } + else + { + _orderRepository.CreateOrder(order); + } Close(); } @@ -68,6 +101,7 @@ namespace ProjectRepairCompany.Forms } } + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); } } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs index ece12bb..0dd8b3c 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs @@ -43,7 +43,7 @@ panel1.Controls.Add(ButtonDel); panel1.Controls.Add(ButtonAdd); panel1.Dock = DockStyle.Right; - panel1.Location = new Point(607, 0); + panel1.Location = new Point(871, 0); panel1.Name = "panel1"; panel1.Size = new Size(193, 450); panel1.TabIndex = 2; @@ -96,14 +96,14 @@ dataGridView.ReadOnly = true; dataGridView.RowHeadersVisible = false; dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dataGridView.Size = new Size(607, 450); + dataGridView.Size = new Size(871, 450); dataGridView.TabIndex = 3; // // FormOrders // AutoScaleDimensions = new SizeF(7F, 17F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(800, 450); + ClientSize = new Size(1064, 450); Controls.Add(dataGridView); Controls.Add(panel1); Name = "FormOrders"; diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs index 929168a..b040713 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs @@ -1,4 +1,5 @@ -using ProjectRepairCompany.Repositories; +using ProjectRepairCompany.Entities; +using ProjectRepairCompany.Repositories; using System; using System.Collections.Generic; using System.ComponentModel; @@ -53,14 +54,14 @@ namespace ProjectRepairCompany.Forms private void ButtonUp_Click(object sender, EventArgs e) { - if (!TryGetIdentifierFromSelectRow(out int findId)) + if (!TryGetIdentifierFromSelectRow(out var findId)) { return; } try { - var form = _container.Resolve(); - form.Id = findId; + var form = _container.Resolve(); + form.Id = findId; form.ShowDialog(); LoadList(); } @@ -70,9 +71,10 @@ namespace ProjectRepairCompany.Forms } } + private void ButtonDel_Click(object sender, EventArgs e) { - if (!TryGetIdentifierFromSelectRow(out int findId)) + if (!TryGetIdentifierFromSelectRow(out var findId)) { return; } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.Designer.cs index 3d547e3..19d3cfb 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.Designer.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.Designer.cs @@ -35,7 +35,9 @@ label3 = new Label(); numericUpDown1 = new NumericUpDown(); dateTimePicker1 = new DateTimePicker(); - textBox1 = new TextBox(); + comboBoxDetail = new ComboBox(); + comboBoxAddress = new ComboBox(); + label4 = new Label(); ((System.ComponentModel.ISupportInitialize)numericUpDown1).BeginInit(); SuspendLayout(); // @@ -100,19 +102,41 @@ dateTimePicker1.Size = new Size(187, 25); dateTimePicker1.TabIndex = 6; // - // textBox1 + // comboBoxDetail // - textBox1.Location = new Point(127, 15); - textBox1.Name = "textBox1"; - textBox1.Size = new Size(175, 25); - textBox1.TabIndex = 7; + comboBoxDetail.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxDetail.FormattingEnabled = true; + comboBoxDetail.Location = new Point(128, 23); + comboBoxDetail.Name = "comboBoxDetail"; + comboBoxDetail.Size = new Size(162, 25); + comboBoxDetail.TabIndex = 7; + // + // comboBoxAddress + // + comboBoxAddress.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxAddress.FormattingEnabled = true; + comboBoxAddress.Location = new Point(119, 135); + comboBoxAddress.Name = "comboBoxAddress"; + comboBoxAddress.Size = new Size(187, 25); + comboBoxAddress.TabIndex = 8; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(12, 143); + label4.Name = "label4"; + label4.Size = new Size(91, 17); + label4.TabIndex = 9; + label4.Text = "Адрес склада:"; // // FormStorageDetail // AutoScaleDimensions = new SizeF(7F, 17F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(393, 435); - Controls.Add(textBox1); + ClientSize = new Size(393, 295); + Controls.Add(label4); + Controls.Add(comboBoxAddress); + Controls.Add(comboBoxDetail); Controls.Add(dateTimePicker1); Controls.Add(numericUpDown1); Controls.Add(label3); @@ -121,7 +145,7 @@ Controls.Add(ButtonCancel); Controls.Add(ButtonSave); Name = "FormStorageDetail"; - Text = "FormStorageDetail"; + Text = "Пополнение склада"; ((System.ComponentModel.ISupportInitialize)numericUpDown1).EndInit(); ResumeLayout(false); PerformLayout(); @@ -136,6 +160,8 @@ private Label label3; private NumericUpDown numericUpDown1; private DateTimePicker dateTimePicker1; - private TextBox textBox1; + private ComboBox comboBoxDetail; + private ComboBox comboBoxAddress; + private Label label4; } } \ No newline at end of file diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.cs index abb6499..dc4623d 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.cs @@ -1,13 +1,8 @@ using ProjectRepairCompany.Entities; using ProjectRepairCompany.Repositories; +using ProjectRepairCompany.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 ProjectRepairCompany.Forms @@ -15,86 +10,30 @@ namespace ProjectRepairCompany.Forms public partial class FormStorageDetail : Form { private readonly IStorageDetailRepository _storageDetailRepository; - private readonly IDetailRepository _detailRepository; - private int? _storageId; // ID записи для редактирования - public int Id - { - set - { - _storageId = value; - LoadData(); - } - } - - public FormStorageDetail(IStorageDetailRepository storageDetailRepository, IDetailRepository detailRepository) + public FormStorageDetail(IStorageDetailRepository storageDetailRepository, IDetailRepository detailRepository, IStorageRepository storageRepository) { InitializeComponent(); _storageDetailRepository = storageDetailRepository ?? throw new ArgumentNullException(nameof(storageDetailRepository)); - _detailRepository = detailRepository ?? throw new ArgumentNullException(nameof(detailRepository)); + comboBoxDetail.DataSource = detailRepository.ReadDetails(); + comboBoxDetail.DisplayMember = "NameDetail"; + comboBoxDetail.ValueMember = "Id"; + comboBoxAddress.DataSource = storageRepository.ReadStorages(); + comboBoxAddress.DisplayMember = "StorageAddress"; + comboBoxAddress.ValueMember = "Id"; + } - private void FormStorageDetailAdd_Load(object sender, EventArgs e) - { - if (_storageId.HasValue) - { - LoadData(); - } - } - - private void LoadData() - { - try - { - if (!_storageId.HasValue) - { - return; - } - - var storageDetail = _storageDetailRepository.ReadStorageDetails() - .FirstOrDefault(x => x.StorageId == _storageId.Value); - if (storageDetail == null) - { - throw new Exception("Запись не найдена."); - } - - textBox1.Text = _detailRepository.ReadDetailById(storageDetail.DetailId)?.NameDetail; - numericUpDown1.Value = storageDetail.DetailCount; - dateTimePicker1.Value = storageDetail.SupplyDate; - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "Ошибка загрузки данных", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } private void ButtonSave_Click(object sender, EventArgs e) { try { - // Проверка на заполненность данных - if (string.IsNullOrWhiteSpace(textBox1.Text) || numericUpDown1.Value <= 0) + if (comboBoxDetail.SelectedIndex < 0 || comboBoxAddress.SelectedIndex < 0 || Convert.ToInt32(numericUpDown1.Value) == 0) { - throw new Exception("Необходимо заполнить все поля."); + throw new Exception("Заполни все поля"); } - - // Получение данных из формы - var detail = _detailRepository.ReadDetails() - .FirstOrDefault(d => d.NameDetail == textBox1.Text); - - if (detail == null) - { - throw new Exception("Деталь с указанным названием не найдена."); - } - - var storageDetail = StorageDetail.CreateOperation( - storageId: _storageId ?? 0, - detailId: detail.Id, - detailCount: (int)numericUpDown1.Value, - supplyDate: dateTimePicker1.Value - ); - - _storageDetailRepository.CreateStorageDetail(storageDetail); + _storageDetailRepository.CreateStorageDetail(StorageDetail.CreateOperation((int)comboBoxAddress.SelectedValue!, (int)comboBoxDetail.SelectedValue!, Convert.ToInt32(numericUpDown1.Value), dateTimePicker1.Value)); Close(); } catch (Exception ex) @@ -104,6 +43,5 @@ namespace ProjectRepairCompany.Forms } private void ButtonCancel_Click(object sender, EventArgs e) => Close(); - } } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.Designer.cs index 32b0488..ca5bc67 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.Designer.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.Designer.cs @@ -73,15 +73,16 @@ dataGridView.Size = new Size(607, 450); dataGridView.TabIndex = 4; // - // FormStorageDetail + // FormStorageDetails // AutoScaleDimensions = new SizeF(7F, 17F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(800, 450); Controls.Add(dataGridView); Controls.Add(panel1); - Name = "FormStorageDetail"; - Text = "Пополнение деталей"; + Name = "FormStorageDetails"; + Text = "Пополнение складов"; + Load += FormStorageDetail_Load; panel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); ResumeLayout(false); diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.cs index c486851..2008c7b 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.cs @@ -22,7 +22,7 @@ namespace ProjectRepairCompany.Forms { try { - LoadList(); + LoadList(); } catch (Exception ex) { @@ -34,7 +34,9 @@ namespace ProjectRepairCompany.Forms { try { - _container.Resolve().ShowDialog(); // Форма добавления StorageDetail + var formStorageDetail = _container.Resolve(); + formStorageDetail.ShowDialog(); + LoadList(); } catch (Exception ex) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Program.cs b/ProjectRepairCompany/ProjectRepairCompany/Program.cs index 3c91fc9..5af87b5 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Program.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Program.cs @@ -1,6 +1,10 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; using ProjectRepairCompany.Repositories; using ProjectRepairCompany.Repositories.Implementations; +using Serilog; using Unity; +using Unity.Microsoft.Logging; namespace ProjectRepairCompany { @@ -21,12 +25,26 @@ namespace ProjectRepairCompany private static IUnityContainer CreateContainer() { var container = new UnityContainer(); + container.AddExtension(new LoggingExtension(CreateLoggerFactory())); container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); container.RegisterType(); + + container.RegisterType(); 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; + } } } \ No newline at end of file diff --git a/ProjectRepairCompany/ProjectRepairCompany/ProjectRepairCompany.csproj b/ProjectRepairCompany/ProjectRepairCompany/ProjectRepairCompany.csproj index accbdf0..b94bfad 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/ProjectRepairCompany.csproj +++ b/ProjectRepairCompany/ProjectRepairCompany/ProjectRepairCompany.csproj @@ -9,7 +9,18 @@ + + + + + + + + + + + @@ -27,4 +38,10 @@ + + + PreserveNewest + + + \ No newline at end of file diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/IConnectionString.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/IConnectionString.cs new file mode 100644 index 0000000..813f679 --- /dev/null +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/IConnectionString.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairCompany.Repositories; + +public interface IConnectionString +{ + public string ConnectionString { get; } +} diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/ConnectionString.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/ConnectionString.cs new file mode 100644 index 0000000..32560be --- /dev/null +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/ConnectionString.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairCompany.Repositories.Implementations; + +public class ConnectionString : IConnectionString +{ + string IConnectionString.ConnectionString => + "Host=localhost;Port=5432;Database=otp;Username=postgres;Password=postgres"; +} diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/DetailRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/DetailRepository.cs index 847751f..e4be308 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/DetailRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/DetailRepository.cs @@ -1,4 +1,8 @@ -using ProjectRepairCompany.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using ProjectRepairCompany.Entities; using ProjectRepairCompany.Entities.Enums; using System; using System.Collections.Generic; @@ -10,25 +14,115 @@ namespace ProjectRepairCompany.Repositories.Implementations; public class DetailRepository : IDetailRepository { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + + public DetailRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateDetail(Detail detail) { - } - - public void DeleteDetail(int id) - { - } - - public Detail ReadDetailById(int id) - { - return Detail.CreateEntity(0, string.Empty, 0, 0, DetailProperties.None); - } - - public IEnumerable ReadDetails() - { - return []; + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(detail)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" +INSERT INTO Detail (NameDetail, NumberDetail, PriceDetail, DetailProperties) +VALUES (@NameDetail, @NumberDetail, @PriceDetail, @DetailProperties)"; + connection.Execute(queryInsert, detail); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка добавления"); + throw; + } } public void UpdateDetail(Detail detail) { + _logger.LogInformation("Редактирование объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(detail)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @" +UPDATE Detail +SET + NameDetail = @NameDetail, + NumberDetail = @NumberDetail, + PriceDetail = @PriceDetail, + DetailProperties = @DetailProperties +WHERE Id = @Id"; + connection.Execute(queryUpdate, detail); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка редактирования"); + throw; + } } + + public void DeleteDetail(int id) + { + _logger.LogInformation("Удаление объекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" +DELETE FROM Detail +WHERE Id = @id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка удаления"); + throw; + } + } + + public Detail ReadDetailById(int id) + { + _logger.LogInformation("Получение по id"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" +SELECT * FROM Detail +WHERE Id = @id"; + var detail = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(detail)); + return detail; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка поиска"); + throw; + } + } + + public IEnumerable ReadDetails() + { + _logger.LogInformation("Получение объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Detail"; + var details = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(details)); + return details; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении"); + throw; + } + } + + } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/MasterRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/MasterRepository.cs index acecefe..20effbd 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/MasterRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/MasterRepository.cs @@ -1,7 +1,12 @@ -using ProjectRepairCompany.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using ProjectRepairCompany.Entities; using ProjectRepairCompany.Entities.Enums; using System; using System.Collections.Generic; +using System.Diagnostics.Metrics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,25 +15,112 @@ namespace ProjectRepairCompany.Repositories.Implementations; public class MasterRepository : IMasterRepository { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + public MasterRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } + public void CreateMaster(Master master) { - } - - public void DeleteMaster(int id) - { - } - - public Master ReadMasterById(int id) - { - return Master.CreateEntity(0, string.Empty, DateTime.MinValue, MasterPost.None); - } - - public IEnumerable ReadMasters() - { - return []; + _logger.LogInformation("Добавление обьекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(master)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" +INSERT INTO Master (MasterName, StartDate, MasterPost) +VALUES (@MasterName, @StartDate, @MasterPost)"; + connection.Execute(queryInsert, master); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка добавления"); + throw; + } } public void UpdateMaster(Master master) { + _logger.LogInformation("Редактирование обьекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(master)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @" +UPDATE Master +SET + MasterName = @MasterName, + StartDate = @StartDate, + MasterPost = @MasterPost +WHERE Id = @Id"; + connection.Execute(queryUpdate, master); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка Редактирования"); + throw; + } } + public void DeleteMaster(int id) + { + _logger.LogInformation("Удаление обьекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" +DELETE FROM Master +WHERE Id=@id"; + connection.Execute(queryDelete, new { id }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка Удаления"); + throw; + } + } + + public Master ReadMasterById(int id) + { + _logger.LogInformation("Получение по id"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" +SELECT * FROM Master +WHERE Id=@id"; + var master = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(master)); + return master; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка поиска"); + throw; + } + } + + public IEnumerable ReadMasters() + { + _logger.LogInformation("Получение объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Master"; + var master = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(master)); + return master; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении"); + throw; + } + } + + } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs index deaa6c7..6c2ece1 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs @@ -1,35 +1,180 @@ -using ProjectRepairCompany.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using ProjectRepairCompany.Entities; using ProjectRepairCompany.Entities.Enums; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView; namespace ProjectRepairCompany.Repositories.Implementations; public class OrderRepository : IOrderRepository { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + + public OrderRepository(IConnectionString connectionString, ILogger 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 ""Order"" (OrderDate, DateCompletion, DateIssue, FullPrice, MasterId) +VALUES (@OrderDate, @DateCompletion, @DateIssue, @FullPrice, @MasterId); +SELECT MAX(Id) FROM ""Order"""; + var orderId = connection.QueryFirst(queryInsert, order, transaction); + var querySubInsert = @" +INSERT INTO OrderDetail (OrderId, DetailId, DetailCount) +VALUES (@OrderId, @DetailId, @DetailCount)"; + foreach (var elem in order.OrderDetails) + { + connection.Execute(querySubInsert, new {orderId, elem.DetailId, elem.DetailCount}, transaction); + } + transaction.Commit(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка добавления"); + throw; + } } + public void UpdateOrder(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 queryUpdate = @" + UPDATE ""Order"" + SET DateCompletion = @DateCompletion, + DateIssue = @DateIssue, + FullPrice = @FullPrice, + MasterId = @MasterId + WHERE Id = @Id"; + + connection.Execute(queryUpdate, new + { + order.Id, + order.DateCompletion, + order.DateIssue, + order.FullPrice, + order.MasterId + }, transaction); + + var queryDeleteDetails = "DELETE FROM OrderDetail WHERE OrderId = @OrderId"; + connection.Execute(queryDeleteDetails, new { order.Id }, transaction); + + var queryInsertDetails = @" + INSERT INTO OrderDetail (OrderId, DetailId, DetailCount) + VALUES (@OrderId, @DetailId, @DetailCount)"; + + foreach (var detail in order.OrderDetails) + { + connection.Execute(queryInsertDetails, new + { + order.Id, + detail.DetailId, + detail.DetailCount + }, transaction); + } + + transaction.Commit(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при обновлении"); + throw; + } + } + public void DeleteOrder(int id) { + _logger.LogInformation("Удаление объекта с Id {OrderId}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + using var transaction = connection.BeginTransaction(); + + var queryDeleteDetails = "DELETE FROM OrderDetail WHERE OrderId = @OrderId"; + connection.Execute(queryDeleteDetails, new { OrderId = id }, transaction); + + var queryDeleteOrder = "DELETE FROM \"Order\" WHERE Id = @Id"; + connection.Execute(queryDeleteOrder, new { Id = id }, transaction); + + transaction.Commit(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при удалении"); + throw; + } } + + public Order ReadOrderById(int id) { - return Order.CreateOperation(0, 0, 0, DateTime.MinValue, DateTime.MinValue); + _logger.LogInformation("Получение по id"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" +SELECT * FROM ""Order"" +WHERE Id=@id"; + var order = connection.QueryFirst(querySelect, new { id }); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(order)); + return order; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка поиска"); + throw; + } } + + public IEnumerable ReadOrders() { - return []; - } + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); - public void UpdateOrder(Order order) - { + var querySelect = @"SELECT * FROM ""Order"""; + var orders = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(orders)); + return orders; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении"); + throw; + } } } + + diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageDetailRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageDetailRepository.cs index d1e3613..a2ab52c 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageDetailRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageDetailRepository.cs @@ -1,20 +1,62 @@ -using ProjectRepairCompany.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Npgsql; +using ProjectRepairCompany.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView; namespace ProjectRepairCompany.Repositories.Implementations; public class StorageDetailRepository : IStorageDetailRepository { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + + public StorageDetailRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } public void CreateStorageDetail(StorageDetail storageDetail) { + _logger.LogInformation("Добавление объекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(storageDetail)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" +INSERT INTO StorageDetail (StorageId, DetailId, DetailCount, SupplyDate) +VALUES (@StorageId, @DetailId, @DetailCount, @SupplyDate)"; + connection.Execute(queryInsert, storageDetail); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка добавления"); + throw; + } + } public IEnumerable ReadStorageDetails(DateTime? dateFrom = null, DateTime? dateTo = null, int? storageId = null, int? detailId = null) { - return []; + _logger.LogInformation("Получение объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM StorageDetail"; + var storageDetails = connection.Query(querySelect); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(storageDetails)); + return storageDetails; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении"); + throw; + } } } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageRepository.cs index aaa4d86..4b0a740 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageRepository.cs @@ -1,6 +1,10 @@ -using ProjectRepairCompany.Entities; +using Dapper; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using ProjectRepairCompany.Entities; using System; using System.Collections.Generic; +using Npgsql; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,25 +13,110 @@ namespace ProjectRepairCompany.Repositories.Implementations; public class StorageRepository : IStorageRepository { + private readonly IConnectionString _connectionString; + private readonly ILogger _logger; + public StorageRepository(IConnectionString connectionString, ILogger logger) + { + _connectionString = connectionString; + _logger = logger; + } public void CreateStorage(Storage storage) { + _logger.LogInformation("Добавление обьекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(storage)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryInsert = @" +INSERT INTO Storage (StorageAddress, Capacity) +VALUES (@StorageAddress, @Capacity)"; + connection.Execute(queryInsert, storage); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка добавления"); + throw; + } + } + public void UpdateStorage(Storage storage) + { + _logger.LogInformation("Редактирование обьекта"); + _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(storage)); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryUpdate = @" +UPDATE Storage +SET + StorageAddress = @StorageAddress, + Capacity = @Capacity +WHERE Id = @Id"; + connection.Execute(queryUpdate, storage); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка Редактирования"); + throw; + } } public void DeleteStorage(int id) { + _logger.LogInformation("Удаление обьекта"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var queryDelete = @" +DELETE FROM Storage +WHERE Id=@id"; + connection.Execute(queryDelete, new {id}); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка Удаления"); + throw; + } } public Storage ReadStorageById(int id) { - return Storage.CreateEntity(0, string.Empty, 0); + _logger.LogInformation("Получение по id"); + _logger.LogDebug("Объект: {id}", id); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @" +SELECT * FROM Storage +WHERE Id=@id"; + var storage = connection.QueryFirst(querySelect, new {id}); + _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(storage)); + return storage; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка поиска"); + throw; + } } public IEnumerable ReadStorages() { - return []; + _logger.LogInformation("Получение объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = "SELECT * FROM Storage"; + var storage = connection.Query(querySelect).ToList(); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(storage)); + return storage; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении"); + throw; + } } - public void UpdateStorage(Storage storage) - { - } + } diff --git a/ProjectRepairCompany/ProjectRepairCompany/appsettings.json b/ProjectRepairCompany/ProjectRepairCompany/appsettings.json new file mode 100644 index 0000000..f37e7ad --- /dev/null +++ b/ProjectRepairCompany/ProjectRepairCompany/appsettings.json @@ -0,0 +1,16 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "Logo/repairCompany_log.txt", + "rollingInterval": "Day" + + } + } + ] + } +} \ No newline at end of file -- 2.25.1 From f6e89b60405cc867a6a19d370c384e0a374e34d1 Mon Sep 17 00:00:00 2001 From: MorozovDanil Date: Mon, 2 Dec 2024 17:51:40 +0400 Subject: [PATCH 2/6] =?UTF-8?q?=D0=BF=D0=BE=D1=87=D1=82=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=81=D0=B5.=20=D1=81=D0=BB=D0=BE=D0=BC=D0=B0=D0=BB=D0=BE?= =?UTF-8?q?=D1=81=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectRepairCompany/Entities/Order.cs | 28 +-- .../Entities/OrderDetail.cs | 2 +- .../Forms/FormOrder.Designer.cs | 3 +- .../ProjectRepairCompany/Forms/FormOrder.cs | 179 ++++++++++-------- .../ProjectRepairCompany/Forms/FormOrders.cs | 25 ++- .../Implementations/OrderRepository.cs | 120 +++++++----- 6 files changed, 191 insertions(+), 166 deletions(-) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs index 27d03fa..a310fc8 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs @@ -14,34 +14,22 @@ public class Order public DateTime DateIssue { get; private set; } public int FullPrice { get; private set; } public int MasterId { get; private set; } - public List OrderDetails { get; private set; } - - private Order() + public IEnumerable OrderDetails { get; private set; } = []; + + public static Order CreateOperation(int id, int fullPrice, int masterId, DateTime dateCompletion, + DateTime dateIssue, IEnumerable orderDetails) { - OrderDetails = new List(); - } - - public static Order CreateOperation(int id, int fullPrice, int masterId, DateTime dateCompletion, DateTime dateIssue) - { - if (dateCompletion > DateTime.Now || dateIssue > DateTime.Now) - { - throw new ArgumentException("Дата начала работы и дата завершения не могут быть в будущем."); - } + return new Order { Id = id, - OrderDate = DateTime.Now, // Автоматически задается текущая дата + OrderDate = DateTime.Now, DateCompletion = dateCompletion, DateIssue = dateIssue, FullPrice = fullPrice, - MasterId = masterId + MasterId = masterId, + OrderDetails = orderDetails }; } - - public void AddOrderDetail(int detailId, int detailCount) - { - var orderDetail = OrderDetail.CreateOperation(this.Id, detailId, detailCount); - OrderDetails.Add(orderDetail); - } } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs index c465ed8..00073f2 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs @@ -10,7 +10,7 @@ public class OrderDetail { public int OrderId { get; private set; } public int DetailId { get; private set; } - public int DetailCount { get; private set; } + public int DetailCount { get; private set; } public static OrderDetail CreateOperation(int orderId, int detailId, int detailCount) { diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs index f7dff8a..ac512f3 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs @@ -165,6 +165,7 @@ groupBox1.Size = new Size(401, 224); groupBox1.TabIndex = 12; groupBox1.TabStop = false; + groupBox1.Text = "Деталь"; // // dataGridView // @@ -183,7 +184,7 @@ // // Detail // - Detail.HeaderText = "Деталь"; + Detail.HeaderText = "Название детали"; Detail.Name = "Detail"; // // DetailCount diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs index 517f83d..4199710 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs @@ -1,5 +1,7 @@ using ProjectRepairCompany.Entities; +using ProjectRepairCompany.Entities.Enums; using ProjectRepairCompany.Repositories; +using ProjectRepairCompany.Repositories.Implementations; using System; using System.Collections.Generic; using System.Diagnostics.Metrics; @@ -8,100 +10,121 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; -namespace ProjectRepairCompany.Forms +namespace ProjectRepairCompany.Forms; + +public partial class FormOrder : Form { - public partial class FormOrder : Form + private readonly IOrderRepository _orderRepository; + private int? _orderId; + + public int Id { - private readonly IOrderRepository _orderRepository; - private readonly IDetailRepository _detailRepository; - private int? _orderId; - - public int Id - { - set - { - try - { - var order = _orderRepository.ReadOrderById(value); - if (order == null) - { - throw new InvalidOperationException(nameof(order)); - } - numericUpDownFullPrice.Value = order.FullPrice; - comboBoxMaster.SelectedValue = order.MasterId; - dateTimeCompletion.Value = order.DateCompletion; - dateTimeIssue.Value = order.DateIssue; - - foreach (var detail in order.OrderDetails) - { - dataGridView.Rows.Add(detail.DetailId, detail.DetailCount); - } - - _orderId = value; - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } - - public FormOrder(IOrderRepository orderRepository, IMasterRepository masterRepository, IDetailRepository detailRepository) - { - InitializeComponent(); - - _orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository)); - _detailRepository = detailRepository ?? throw new ArgumentNullException(nameof(detailRepository)); - - comboBoxMaster.DataSource = masterRepository.ReadMasters(); - comboBoxMaster.DisplayMember = "MasterName"; - comboBoxMaster.ValueMember = "Id"; - - Detail.DataSource = _detailRepository.ReadDetails(); - Detail.DisplayMember = "NameDetail"; - Detail.ValueMember = "Id"; - } - - private void ButtonSave_Click(object sender, EventArgs e) + set { try { - if (dataGridView.RowCount < 1 || comboBoxMaster.SelectedIndex < 0) + var order = _orderRepository.ReadOrderById(value); + if (order == null) { - throw new Exception("Имеются незаполненные поля."); + throw new InvalidOperationException(nameof(order)); } - var order = Order.CreateOperation(_orderId ?? 0, Convert.ToInt32(numericUpDownFullPrice.Value), - (int)comboBoxMaster.SelectedValue, dateTimeCompletion.Value, dateTimeIssue.Value); + comboBoxMaster.SelectedValue = order.MasterId; + numericUpDownFullPrice.Value = (decimal)order.FullPrice; + dateTimeCompletion.Value = order.DateCompletion; + dateTimeIssue.Value = order.DateIssue; - foreach (DataGridViewRow row in dataGridView.Rows) + dataGridView.Rows.Clear(); + foreach (var detail in order.OrderDetails) { - if (row.Cells["Detail"].Value != null && row.Cells["DetailCount"].Value != null) - { - var detailId = (int)row.Cells["Detail"].Value; - var detailCount = (int)row.Cells["DetailCount"].Value; - order.AddOrderDetail(detailId, detailCount); - } + dataGridView.Rows.Add(detail.DetailId, detail.DetailCount); } - if (_orderId.HasValue) - { - _orderRepository.UpdateOrder(order); - } - else - { - _orderRepository.CreateOrder(order); - } - - Close(); + _orderId = value; } catch (Exception ex) { - MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; } } - - - private void ButtonCancel_Click(object sender, EventArgs e) => Close(); } + + public FormOrder(IOrderRepository orderRepository, IMasterRepository masterRepository, IDetailRepository detailRepository) + { + InitializeComponent(); + + _orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository)); + + + comboBoxMaster.DataSource = masterRepository.ReadMasters(); + comboBoxMaster.DisplayMember = "MasterName"; + comboBoxMaster.ValueMember = "Id"; + + Detail.DataSource = detailRepository.ReadDetails(); + Detail.DisplayMember = "NameDetail"; + Detail.ValueMember = "Id"; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (dataGridView.RowCount < 1 || comboBoxMaster.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля."); + } + + var order = CreateOrder(); + if (_orderId.HasValue) + { + _orderRepository.UpdateOrder(order); + } + else + { + _orderRepository.CreateOrder(order); + } + DialogResult = DialogResult.OK; + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private List CreateListOrderDetailsFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridView.Rows) + { + if (row.Cells["Detail"].Value == null || + row.Cells["DetailCount"].Value == null) + { + continue; + } + list.Add(OrderDetail.CreateOperation(0, + Convert.ToInt32(row.Cells["Detail"].Value), + Convert.ToInt32(row.Cells["DetailCount"].Value))); + } + return list; + } + private Order CreateOrder() + { + var orderDetails = CreateListOrderDetailsFromDataGrid(); + + return Order.CreateOperation( + _orderId ?? 0, + Convert.ToInt32(numericUpDownFullPrice.Value), + (int)comboBoxMaster.SelectedValue, + dateTimeCompletion.Value, + dateTimeIssue.Value, + orderDetails + ); + } + + + } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs index b040713..3ff9cfa 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs @@ -1,5 +1,6 @@ using ProjectRepairCompany.Entities; using ProjectRepairCompany.Repositories; +using ProjectRepairCompany.Repositories.Implementations; using System; using System.Collections.Generic; using System.ComponentModel; @@ -61,9 +62,14 @@ namespace ProjectRepairCompany.Forms try { var form = _container.Resolve(); - form.Id = findId; - form.ShowDialog(); - LoadList(); + + form.Id = findId; + + if (form.ShowDialog() == DialogResult.OK) + { + LoadList(); + dataGridView.Refresh(); + } } catch (Exception ex) { @@ -93,17 +99,8 @@ namespace ProjectRepairCompany.Forms } } - private void LoadList() - { - try - { - dataGridView.DataSource = _orderRepository.ReadOrders(); - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "Ошибка загрузки данных", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } + private void LoadList() => dataGridView.DataSource =_orderRepository.ReadOrders(); + private bool TryGetIdentifierFromSelectRow(out int id) { diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs index 6c2ece1..7846265 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs @@ -25,85 +25,101 @@ public class OrderRepository : IOrderRepository } public void CreateOrder(Order order) { - _logger.LogInformation("Добавление объекта"); - _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(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 ""Order"" (OrderDate, DateCompletion, DateIssue, FullPrice, MasterId) -VALUES (@OrderDate, @DateCompletion, @DateIssue, @FullPrice, @MasterId); -SELECT MAX(Id) FROM ""Order"""; + INSERT INTO ""Order"" (OrderDate, DateCompletion, DateIssue, FullPrice, MasterId) + VALUES (@OrderDate, @DateCompletion, @DateIssue, @FullPrice, @MasterId) + RETURNING Id"; + var orderId = connection.QueryFirst(queryInsert, order, transaction); + _logger.LogInformation("Новый заказ создан с Id {OrderId}", orderId); + var querySubInsert = @" -INSERT INTO OrderDetail (OrderId, DetailId, DetailCount) -VALUES (@OrderId, @DetailId, @DetailCount)"; - foreach (var elem in order.OrderDetails) + INSERT INTO OrderDetail (OrderId, DetailId, DetailCount) + VALUES (@OrderId, @DetailId, @DetailCount)"; + + foreach (var elem in order.OrderDetails) { - connection.Execute(querySubInsert, new {orderId, elem.DetailId, elem.DetailCount}, transaction); + _logger.LogDebug("Добавление детали: DetailId = {DetailId}, DetailCount = {DetailCount}", + elem.DetailId, elem.DetailCount); + connection.Execute(querySubInsert, new { orderId, elem.DetailId, elem.DetailCount }, transaction); } + transaction.Commit(); + _logger.LogInformation("Заказ с деталями успешно добавлен."); } catch (Exception ex) { - _logger.LogError(ex, "Ошибка добавления"); + _logger.LogError(ex, "Ошибка при добавлении заказа."); throw; } } + public void UpdateOrder(Order order) +{ + _logger.LogInformation("Обновление заказа с Id {OrderId}", order.Id); + _logger.LogDebug("Обновляемый объект заказа: {json}", JsonConvert.SerializeObject(order)); + + try { - _logger.LogInformation("Обновление объекта"); - _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(order)); - try + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + connection.Open(); + using var transaction = connection.BeginTransaction(); + + var queryUpdate = @" + UPDATE ""Order"" + SET DateCompletion = @DateCompletion, + DateIssue = @DateIssue, + FullPrice = @FullPrice, + MasterId = @MasterId + WHERE Id = @Id"; + + connection.Execute(queryUpdate, new { - using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - connection.Open(); - using var transaction = connection.BeginTransaction(); + order.Id, + order.DateCompletion, + order.DateIssue, + order.FullPrice, + order.MasterId + }, transaction); - var queryUpdate = @" - UPDATE ""Order"" - SET DateCompletion = @DateCompletion, - DateIssue = @DateIssue, - FullPrice = @FullPrice, - MasterId = @MasterId - WHERE Id = @Id"; + _logger.LogInformation("Заказ с Id {OrderId} обновлен.", order.Id); - connection.Execute(queryUpdate, new + var queryDeleteDetails = "DELETE FROM OrderDetail WHERE OrderId = @OrderId"; + connection.Execute(queryDeleteDetails, new { order.Id }, transaction); + + var queryInsertDetails = @" + INSERT INTO OrderDetail (OrderId, DetailId, DetailCount) + VALUES (@OrderId, @DetailId, @DetailCount)"; + + foreach (var detail in order.OrderDetails) + { + connection.Execute(queryInsertDetails, new { order.Id, - order.DateCompletion, - order.DateIssue, - order.FullPrice, - order.MasterId + detail.DetailId, + detail.DetailCount }, transaction); - - var queryDeleteDetails = "DELETE FROM OrderDetail WHERE OrderId = @OrderId"; - connection.Execute(queryDeleteDetails, new { order.Id }, transaction); - - var queryInsertDetails = @" - INSERT INTO OrderDetail (OrderId, DetailId, DetailCount) - VALUES (@OrderId, @DetailId, @DetailCount)"; - - foreach (var detail in order.OrderDetails) - { - connection.Execute(queryInsertDetails, new - { - order.Id, - detail.DetailId, - detail.DetailCount - }, transaction); - } - - transaction.Commit(); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка при обновлении"); - throw; } + + transaction.Commit(); + _logger.LogInformation("Детали для заказа с Id {OrderId} обновлены.", order.Id); } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при обновлении заказа с Id {OrderId}.", order.Id); + throw; + } +} + public void DeleteOrder(int id) -- 2.25.1 From c149dcb24974a4d06c4749903ee0ed58ebf01768 Mon Sep 17 00:00:00 2001 From: MorozovDanil Date: Sun, 15 Dec 2024 18:44:30 +0400 Subject: [PATCH 3/6] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repositories/Implementations/OrderRepository.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs index 7846265..dfc3408 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs @@ -18,6 +18,7 @@ public class OrderRepository : IOrderRepository private readonly IConnectionString _connectionString; private readonly ILogger _logger; + public OrderRepository(IConnectionString connectionString, ILogger logger) { _connectionString = connectionString; -- 2.25.1 From 33ec560a987bc99ae03410023958c19504c340d1 Mon Sep 17 00:00:00 2001 From: MorozovDanil Date: Sun, 15 Dec 2024 20:35:24 +0400 Subject: [PATCH 4/6] =?UTF-8?q?=D0=95=D1=81=D0=BB=D0=B8=20=D0=B3=D0=BB?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE,=20=D1=82=D0=BE=20?= =?UTF-8?q?=D1=80=D0=B5=D1=88=D0=B8=D0=BB=20=D1=83=D0=B1=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7=D0=BE=D0=B2=20=D1=82?= =?UTF-8?q?=D0=BA.=20=D1=81=D1=87=D0=B8=D1=82=D0=B0=D1=8E=20=D1=8D=D1=82?= =?UTF-8?q?=D0=BE=20=D0=B8=D0=B7=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=BC=20?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=BE=D0=B6=D0=B5=D1=82=20=D1=83=D0=B3=D1=80?= =?UTF-8?q?=D0=BE=D0=B6=D0=B0=D1=82=D1=8C=20=D1=86=D0=B5=D0=BB=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=B4=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/FormOrder.Designer.cs | 2 + .../ProjectRepairCompany/Forms/FormOrder.cs | 29 +++++----- .../ProjectRepairCompany/Forms/FormOrder.resx | 6 ++ .../Forms/FormOrders.Designer.cs | 14 ----- .../ProjectRepairCompany/Forms/FormOrders.cs | 22 ------- .../Forms/FormStorageDetail.cs | 12 +++- .../Repositories/IOrderRepository.cs | 1 - .../Implementations/OrderRepository.cs | 58 ------------------- 8 files changed, 30 insertions(+), 114 deletions(-) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs index 44845be..0b4d297 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.Designer.cs @@ -91,6 +91,7 @@ // // dateTimePickerOrderDate // + dateTimePickerOrderDate.CausesValidation = false; dateTimePickerOrderDate.Enabled = false; dateTimePickerOrderDate.Location = new Point(190, 12); dateTimePickerOrderDate.Name = "dateTimePickerOrderDate"; @@ -110,6 +111,7 @@ dateTimeIssue.Name = "dateTimeIssue"; dateTimeIssue.Size = new Size(200, 25); dateTimeIssue.TabIndex = 6; + dateTimeIssue.Value = new DateTime(2024, 12, 15, 0, 0, 0, 0); // // label3 // diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs index a9bb428..875e564 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs @@ -33,6 +33,7 @@ namespace ProjectRepairCompany.Forms dateTimeCompletion.Value = order.DateCompletion; dateTimeIssue.Value = order.DateIssue; + dataGridView.Rows.Clear(); foreach (var detail in order.OrderDetails) { dataGridView.Rows.Add(detail.DetailId, detail.DetailCount); @@ -59,9 +60,9 @@ namespace ProjectRepairCompany.Forms comboBoxMaster.DisplayMember = "MasterName"; comboBoxMaster.ValueMember = "Id"; - Detail.DataSource = detailRepository.ReadDetails(); - Detail.DisplayMember = "NameDetail"; - Detail.ValueMember = "Id"; + Detail.DataSource = detailRepository.ReadDetails(); + Detail.DisplayMember = "NameDetail"; + Detail.ValueMember = "Id"; } private void ButtonSave_Click(object sender, EventArgs e) @@ -73,15 +74,9 @@ namespace ProjectRepairCompany.Forms throw new Exception("Имеются незаполненные поля."); } - var order = CreateOrder(); - if (_orderId.HasValue) - { - _orderRepository.UpdateOrder(order); - } - else - { - _orderRepository.CreateOrder(order); - } + var order = CreateOrder(); + _orderRepository.CreateOrder(order); + DialogResult = DialogResult.OK; Close(); } @@ -99,13 +94,15 @@ namespace ProjectRepairCompany.Forms foreach (DataGridViewRow row in dataGridView.Rows) { if (row.Cells["Detail"].Value == null || - row.Cells["DetailCount"].Value == null) + row.Cells["DetailCount"].Value == null) { continue; } - list.Add(OrderDetail.CreateOperation(0, - Convert.ToInt32(row.Cells["Detail"].Value), - Convert.ToInt32(row.Cells["DetailCount"].Value))); + list.Add(OrderDetail.CreateOperation( + _orderId ?? 0, + Convert.ToInt32(row.Cells["Detail"].Value), + Convert.ToInt32(row.Cells["DetailCount"].Value) + )); } return list; } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.resx b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.resx index 3513ce1..27acbf9 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.resx +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.resx @@ -123,4 +123,10 @@ True + + True + + + True + \ No newline at end of file diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs index 0dd8b3c..23dcdb5 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { panel1 = new Panel(); - ButtonUp = new Button(); ButtonDel = new Button(); ButtonAdd = new Button(); dataGridView = new DataGridView(); @@ -39,7 +38,6 @@ // // panel1 // - panel1.Controls.Add(ButtonUp); panel1.Controls.Add(ButtonDel); panel1.Controls.Add(ButtonAdd); panel1.Dock = DockStyle.Right; @@ -48,17 +46,6 @@ panel1.Size = new Size(193, 450); panel1.TabIndex = 2; // - // ButtonUp - // - ButtonUp.BackgroundImage = Properties.Resources.Feedbin_Icon_home_edit_svg; - ButtonUp.BackgroundImageLayout = ImageLayout.Stretch; - ButtonUp.Location = new Point(42, 113); - ButtonUp.Name = "ButtonUp"; - ButtonUp.Size = new Size(117, 77); - ButtonUp.TabIndex = 2; - ButtonUp.UseVisualStyleBackColor = true; - ButtonUp.Click += ButtonUp_Click; - // // ButtonDel // ButtonDel.BackgroundImage = Properties.Resources.Ic_remove_circle_48px_svg; @@ -117,7 +104,6 @@ #endregion private Panel panel1; - private Button ButtonUp; private Button ButtonDel; private Button ButtonAdd; private DataGridView dataGridView; diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs index 2bfefbc..d2094dd 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.cs @@ -53,28 +53,6 @@ namespace ProjectRepairCompany.Forms } } - private void ButtonUp_Click(object sender, EventArgs e) - { - if (!TryGetIdentifierFromSelectRow(out var findId)) - { - return; - } - try - { - var form = _container.Resolve(); - form.Id = findId; - if (form.ShowDialog() == DialogResult.OK) - { - LoadList(); - dataGridView.Refresh(); - } - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "Ошибка изменения", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - private void ButtonDel_Click(object sender, EventArgs e) { diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.cs index 7921428..6d3ca54 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetail.cs @@ -10,13 +10,19 @@ namespace ProjectRepairCompany.Forms public partial class FormStorageDetail : Form { private readonly IStorageDetailRepository _storageDetailRepository; - private readonly IDetailRepository _detailRepository; - public FormStorageDetail(IStorageDetailRepository storageDetailRepository, IDetailRepository detailRepository) + public FormStorageDetail(IStorageDetailRepository storageDetailRepository, IDetailRepository detailRepository, IStorageRepository storageRepository) { InitializeComponent(); _storageDetailRepository = storageDetailRepository ?? throw new ArgumentNullException(nameof(storageDetailRepository)); - _detailRepository = detailRepository ?? throw new ArgumentNullException(nameof(detailRepository)); + + comboBoxAddress.DataSource = storageRepository.ReadStorages(); + comboBoxAddress.DisplayMember = "StorageAddress"; + comboBoxAddress.ValueMember = "Id"; + + comboBoxDetail.DataSource = detailRepository.ReadDetails(); + comboBoxDetail.DisplayMember = "NameDetail"; + comboBoxDetail.ValueMember = "Id"; } private void ButtonSave_Click(object sender, EventArgs e) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/IOrderRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/IOrderRepository.cs index 1dac1bd..0a7e741 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/IOrderRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/IOrderRepository.cs @@ -12,6 +12,5 @@ public interface IOrderRepository IEnumerable ReadOrders(); Order ReadOrderById(int id); void CreateOrder(Order order); - void UpdateOrder(Order order); void DeleteOrder(int id); } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs index 07fe582..56d039b 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs @@ -64,64 +64,6 @@ public class OrderRepository : IOrderRepository } } - public void UpdateOrder(Order order) -{ - _logger.LogInformation("Обновление заказа с Id {OrderId}", order.Id); - _logger.LogDebug("Обновляемый объект заказа: {json}", JsonConvert.SerializeObject(order)); - - try - { - using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - connection.Open(); - using var transaction = connection.BeginTransaction(); - - var queryUpdate = @" - UPDATE ""Order"" - SET DateCompletion = @DateCompletion, - DateIssue = @DateIssue, - FullPrice = @FullPrice, - MasterId = @MasterId - WHERE Id = @Id"; - - connection.Execute(queryUpdate, new - { - order.Id, - order.DateCompletion, - order.DateIssue, - order.FullPrice, - order.MasterId - }, transaction); - - _logger.LogInformation("Заказ с Id {OrderId} обновлен.", order.Id); - - var queryDeleteDetails = "DELETE FROM OrderDetail WHERE OrderId = @OrderId"; - connection.Execute(queryDeleteDetails, new { order.Id }, transaction); - - var queryInsertDetails = @" - INSERT INTO OrderDetail (OrderId, DetailId, DetailCount) - VALUES (@OrderId, @DetailId, @DetailCount)"; - - foreach (var detail in order.OrderDetails) - { - connection.Execute(queryInsertDetails, new - { - order.Id, - detail.DetailId, - detail.DetailCount - }, transaction); - } - - transaction.Commit(); - _logger.LogInformation("Детали для заказа с Id {OrderId} обновлены.", order.Id); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка при обновлении заказа с Id {OrderId}.", order.Id); - throw; - } -} - - public void DeleteOrder(int id) { -- 2.25.1 From 2411dfc6f784e43569d7a27d99517cbc8ef22c1b Mon Sep 17 00:00:00 2001 From: MorozovDanil Date: Sun, 15 Dec 2024 20:48:37 +0400 Subject: [PATCH 5/6] =?UTF-8?q?=D0=B2=20=D0=BF=D1=80=D0=BE=D1=88=D0=BB?= =?UTF-8?q?=D0=BE=D0=BC=20=D0=BA=D0=BE=D0=BC=D0=B8=D1=82=D0=B5=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B1=D1=8B=D0=BB=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D1=82?= =?UTF-8?q?=D1=8C,=20=D1=87=D1=82=D0=BE=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=BF=D0=BE=D0=BF=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8=20=D1=81=D0=BA=D0=BB=D0=B0=D0=B4=D0=B0.=20?= =?UTF-8?q?=D0=97=D0=B4=D0=B5=D1=81=D1=8C=20=D1=83=D0=B1=D1=80=D0=B0=D0=BB?= =?UTF-8?q?=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B8=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=BD=D0=B0=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=B2=D0=B7=D0=B3=D0=BB=D1=8F=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs | 4 ++-- .../ProjectRepairCompany/Forms/FormOrders.Designer.cs | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs index 875e564..ebefee8 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrder.cs @@ -99,7 +99,7 @@ namespace ProjectRepairCompany.Forms continue; } list.Add(OrderDetail.CreateOperation( - _orderId ?? 0, + 0, Convert.ToInt32(row.Cells["Detail"].Value), Convert.ToInt32(row.Cells["DetailCount"].Value) )); @@ -111,7 +111,7 @@ namespace ProjectRepairCompany.Forms var orderDetails = CreateListOrderDetailsFromDataGrid(); return Order.CreateOperation( - _orderId ?? 0, + 0, Convert.ToInt32(numericUpDownFullPrice.Value), (int)comboBoxMaster.SelectedValue, dateTimeCompletion.Value, diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs index 23dcdb5..94ad1ae 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs @@ -29,6 +29,7 @@ private void InitializeComponent() { panel1 = new Panel(); + ButtonUp = new Button(); ButtonDel = new Button(); ButtonAdd = new Button(); dataGridView = new DataGridView(); @@ -38,6 +39,7 @@ // // panel1 // + panel1.Controls.Add(ButtonUp); panel1.Controls.Add(ButtonDel); panel1.Controls.Add(ButtonAdd); panel1.Dock = DockStyle.Right; @@ -104,6 +106,7 @@ #endregion private Panel panel1; + private Button ButtonUp; private Button ButtonDel; private Button ButtonAdd; private DataGridView dataGridView; -- 2.25.1 From 9fdef630384a2ffd1acc2685d0058b986af7785e Mon Sep 17 00:00:00 2001 From: MorozovDanil Date: Mon, 16 Dec 2024 15:36:42 +0400 Subject: [PATCH 6/6] =?UTF-8?q?=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectRepairCompany/Forms/FormOrders.Designer.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs index 94ad1ae..23dcdb5 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { panel1 = new Panel(); - ButtonUp = new Button(); ButtonDel = new Button(); ButtonAdd = new Button(); dataGridView = new DataGridView(); @@ -39,7 +38,6 @@ // // panel1 // - panel1.Controls.Add(ButtonUp); panel1.Controls.Add(ButtonDel); panel1.Controls.Add(ButtonAdd); panel1.Dock = DockStyle.Right; @@ -106,7 +104,6 @@ #endregion private Panel panel1; - private Button ButtonUp; private Button ButtonDel; private Button ButtonAdd; private DataGridView dataGridView; -- 2.25.1