diff --git a/PIbd-23_Gutorov_I.A._IT-Company/FormItCompany.Designer.cs b/PIbd-23_Gutorov_I.A._IT-Company/FormItCompany.Designer.cs
index 75930b7..b70d236 100644
--- a/PIbd-23_Gutorov_I.A._IT-Company/FormItCompany.Designer.cs
+++ b/PIbd-23_Gutorov_I.A._IT-Company/FormItCompany.Designer.cs
@@ -29,31 +29,32 @@
private void InitializeComponent()
{
menuStrip = new MenuStrip();
- справочникиToolStripMenuItem = new ToolStripMenuItem();
+ EntitiesToolStripMenuItem = new ToolStripMenuItem();
CustomersToolStripMenuItem = new ToolStripMenuItem();
ExecutorsToolStripMenuItem = new ToolStripMenuItem();
- операцииToolStripMenuItem = new ToolStripMenuItem();
+ ServicesToolStripMenuItem = new ToolStripMenuItem();
+ OperationsToolStripMenuItem = new ToolStripMenuItem();
CustomerContractReviewsToolStripMenuItem = new ToolStripMenuItem();
- контрактыToolStripMenuItem = new ToolStripMenuItem();
- отчетыToolStripMenuItem = new ToolStripMenuItem();
+ ContractsToolStripMenuItem = new ToolStripMenuItem();
+ ReportsToolStripMenuItem = new ToolStripMenuItem();
menuStrip.SuspendLayout();
SuspendLayout();
//
// menuStrip
//
- menuStrip.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчетыToolStripMenuItem });
+ menuStrip.Items.AddRange(new ToolStripItem[] { EntitiesToolStripMenuItem, OperationsToolStripMenuItem, ReportsToolStripMenuItem });
menuStrip.Location = new Point(0, 0);
menuStrip.Name = "menuStrip";
menuStrip.Size = new Size(734, 24);
menuStrip.TabIndex = 0;
menuStrip.Text = "menuStrip1";
//
- // справочникиToolStripMenuItem
+ // EntitiesToolStripMenuItem
//
- справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { CustomersToolStripMenuItem, ExecutorsToolStripMenuItem });
- справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
- справочникиToolStripMenuItem.Size = new Size(94, 20);
- справочникиToolStripMenuItem.Text = "Справочники";
+ EntitiesToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { CustomersToolStripMenuItem, ExecutorsToolStripMenuItem, ServicesToolStripMenuItem });
+ EntitiesToolStripMenuItem.Name = "EntitiesToolStripMenuItem";
+ EntitiesToolStripMenuItem.Size = new Size(94, 20);
+ EntitiesToolStripMenuItem.Text = "Справочники";
//
// CustomersToolStripMenuItem
//
@@ -69,12 +70,19 @@
ExecutorsToolStripMenuItem.Text = "Исполнители";
ExecutorsToolStripMenuItem.Click += ExecutorsToolStripMenuItem_Click;
//
- // операцииToolStripMenuItem
+ // ServicesToolStripMenuItem
//
- операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { CustomerContractReviewsToolStripMenuItem, контрактыToolStripMenuItem });
- операцииToolStripMenuItem.Name = "операцииToolStripMenuItem";
- операцииToolStripMenuItem.Size = new Size(75, 20);
- операцииToolStripMenuItem.Text = "Операции";
+ ServicesToolStripMenuItem.Name = "ServicesToolStripMenuItem";
+ ServicesToolStripMenuItem.Size = new Size(180, 22);
+ ServicesToolStripMenuItem.Text = "Услуги";
+ ServicesToolStripMenuItem.Click += ServicesToolStripMenuItem_Click;
+ //
+ // OperationsToolStripMenuItem
+ //
+ OperationsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { CustomerContractReviewsToolStripMenuItem, ContractsToolStripMenuItem });
+ OperationsToolStripMenuItem.Name = "OperationsToolStripMenuItem";
+ OperationsToolStripMenuItem.Size = new Size(75, 20);
+ OperationsToolStripMenuItem.Text = "Операции";
//
// CustomerContractReviewsToolStripMenuItem
//
@@ -83,18 +91,18 @@
CustomerContractReviewsToolStripMenuItem.Text = "Отзывы заказчиков";
CustomerContractReviewsToolStripMenuItem.Click += CustomerContractReviewsToolStripMenuItem_Click;
//
- // контрактыToolStripMenuItem
+ // ContractsToolStripMenuItem
//
- контрактыToolStripMenuItem.Name = "контрактыToolStripMenuItem";
- контрактыToolStripMenuItem.Size = new Size(181, 22);
- контрактыToolStripMenuItem.Text = "Контракты";
- контрактыToolStripMenuItem.Click += ContractsToolStripMenuItem_Click;
+ ContractsToolStripMenuItem.Name = "ContractsToolStripMenuItem";
+ ContractsToolStripMenuItem.Size = new Size(181, 22);
+ ContractsToolStripMenuItem.Text = "Контракты";
+ ContractsToolStripMenuItem.Click += ContractsToolStripMenuItem_Click;
//
- // отчетыToolStripMenuItem
+ // ReportsToolStripMenuItem
//
- отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem";
- отчетыToolStripMenuItem.Size = new Size(60, 20);
- отчетыToolStripMenuItem.Text = "Отчеты";
+ ReportsToolStripMenuItem.Name = "ReportsToolStripMenuItem";
+ ReportsToolStripMenuItem.Size = new Size(60, 20);
+ ReportsToolStripMenuItem.Text = "Отчеты";
//
// FormItCompany
//
@@ -117,13 +125,13 @@
#endregion
private MenuStrip menuStrip;
- private ToolStripMenuItem справочникиToolStripMenuItem;
+ private ToolStripMenuItem EntitiesToolStripMenuItem;
private ToolStripMenuItem CustomersToolStripMenuItem;
private ToolStripMenuItem ExecutorsToolStripMenuItem;
- private ToolStripMenuItem операцииToolStripMenuItem;
- private ToolStripMenuItem отчетыToolStripMenuItem;
+ private ToolStripMenuItem OperationsToolStripMenuItem;
+ private ToolStripMenuItem ReportsToolStripMenuItem;
private ToolStripMenuItem CustomerContractReviewsToolStripMenuItem;
- private ToolStripMenuItem контрактыToolStripMenuItem;
+ private ToolStripMenuItem ContractsToolStripMenuItem;
private ToolStripMenuItem ServicesToolStripMenuItem;
}
}
diff --git a/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormContract.Designer.cs b/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormContract.Designer.cs
index 165e71c..e694e67 100644
--- a/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormContract.Designer.cs
+++ b/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormContract.Designer.cs
@@ -41,8 +41,8 @@
labelContractDeadline = new Label();
labelContractPaymentAmount = new Label();
dataGridViewServices = new DataGridView();
+ ColumnServiceDescription = new DataGridViewComboBoxColumn();
groupBox = new GroupBox();
- ColumnServiceDescription = new DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)numericUpDownContractPaymentAmount).BeginInit();
((System.ComponentModel.ISupportInitialize)dataGridViewServices).BeginInit();
groupBox.SuspendLayout();
@@ -172,6 +172,14 @@
dataGridViewServices.Size = new Size(352, 244);
dataGridViewServices.TabIndex = 17;
//
+ // ColumnServiceDescription
+ //
+ ColumnServiceDescription.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ ColumnServiceDescription.HeaderText = "Услуга";
+ ColumnServiceDescription.Name = "ColumnServiceDescription";
+ ColumnServiceDescription.Resizable = DataGridViewTriState.True;
+ ColumnServiceDescription.SortMode = DataGridViewColumnSortMode.Automatic;
+ //
// groupBox
//
groupBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
@@ -183,13 +191,6 @@
groupBox.TabStop = false;
groupBox.Text = "Услуги:";
//
- // ColumnServiceDescription
- //
- ColumnServiceDescription.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
- ColumnServiceDescription.HeaderText = "Услуга";
- ColumnServiceDescription.Name = "ColumnServiceDescription";
- ColumnServiceDescription.Resizable = DataGridViewTriState.True;
- //
// FormContract
//
AutoScaleDimensions = new SizeF(7F, 15F);
@@ -234,6 +235,6 @@
private Label labelContractPaymentAmount;
private DataGridView dataGridViewServices;
private GroupBox groupBox;
- private DataGridViewTextBoxColumn ColumnServiceDescription;
+ private DataGridViewComboBoxColumn ColumnServiceDescription;
}
}
\ No newline at end of file
diff --git a/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormContract.cs b/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormContract.cs
index d883750..6271a08 100644
--- a/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormContract.cs
+++ b/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormContract.cs
@@ -9,7 +9,7 @@ namespace PIbd_23_Gutorov_I.A._IT_Company.Forms
private readonly IContractRepository _contractRepository;
public FormContract(IContractRepository contractRepository, ICustomerRepository customerRepository,
- IExecutorRepository executorRepository)
+ IExecutorRepository executorRepository, IServiceRepository serviceRepository)
{
InitializeComponent();
_contractRepository = contractRepository ?? throw new ArgumentNullException(nameof(contractRepository));
diff --git a/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormService.cs b/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormService.cs
index 6831fd9..2d41b29 100644
--- a/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormService.cs
+++ b/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormService.cs
@@ -41,9 +41,9 @@ namespace PIbd_23_Gutorov_I.A._IT_Company.Forms
{
if (string.IsNullOrEmpty(richTextBoxServiceDescription.Text))
throw new Exception("Имеются незаполненные поля");
-
- _serviceRepository.CreateService(Service.CreateEntity(0,
- richTextBoxServiceDescription.Text));
+
+ if (_serviceId.HasValue) _serviceRepository.UpdateService(Service.CreateEntity(_serviceId.Value, richTextBoxServiceDescription.Text));
+ else _serviceRepository.CreateService(Service.CreateEntity(0, richTextBoxServiceDescription.Text));
Close();
}
diff --git a/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormService.resx b/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormService.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/PIbd-23_Gutorov_I.A._IT-Company/Forms/FormService.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/PIbd-23_Gutorov_I.A._IT-Company/Program.cs b/PIbd-23_Gutorov_I.A._IT-Company/Program.cs
index a253ffa..8114fc4 100644
--- a/PIbd-23_Gutorov_I.A._IT-Company/Program.cs
+++ b/PIbd-23_Gutorov_I.A._IT-Company/Program.cs
@@ -32,6 +32,7 @@ namespace PIbd_23_Gutorov_I.A._IT_Company
container.RegisterType();
container.RegisterType();
container.RegisterType();
+ container.RegisterType();
container.RegisterType();
diff --git a/PIbd-23_Gutorov_I.A._IT-Company/Repositories/IServiceRepository.cs b/PIbd-23_Gutorov_I.A._IT-Company/Repositories/IServiceRepository.cs
index aa261c0..99d3a4f 100644
--- a/PIbd-23_Gutorov_I.A._IT-Company/Repositories/IServiceRepository.cs
+++ b/PIbd-23_Gutorov_I.A._IT-Company/Repositories/IServiceRepository.cs
@@ -8,9 +8,9 @@ public interface IServiceRepository
Service ReadServiceById(int id);
- void CreateService(Service Service);
+ void CreateService(Service service);
- void UpdateService(Service Service);
+ void UpdateService(Service service);
void DeleteService(int id);
}
\ No newline at end of file
diff --git a/PIbd-23_Gutorov_I.A._IT-Company/Repositories/Implementations/ContractRepository.cs b/PIbd-23_Gutorov_I.A._IT-Company/Repositories/Implementations/ContractRepository.cs
index d909fb3..3b69512 100644
--- a/PIbd-23_Gutorov_I.A._IT-Company/Repositories/Implementations/ContractRepository.cs
+++ b/PIbd-23_Gutorov_I.A._IT-Company/Repositories/Implementations/ContractRepository.cs
@@ -37,11 +37,15 @@ public class ContractRepository : IContractRepository
var contractId = connection.QueryFirst(queryInsert, contract, transaction);
var querySubInsert = @"
- INSERT INTO Services (Description, ContractId)
- VALUES (@Description, @ContractId);
+ INSERT INTO ServiceContract (ServiceId, ContractId)
+ VALUES (@ServiceId, @ContractId);
";
foreach (var elem in contract.Services)
- connection.Execute(querySubInsert, new { elem.Description, contractId }, transaction);
+ {
+ var serviceId = elem.Id;
+ connection.Execute(querySubInsert, new { serviceId, contractId }, transaction);
+ }
+
transaction.Commit();
}
catch (Exception ex)
diff --git a/PIbd-23_Gutorov_I.A._IT-Company/Repositories/Implementations/ServiceRepository.cs b/PIbd-23_Gutorov_I.A._IT-Company/Repositories/Implementations/ServiceRepository.cs
index 922a9fc..85718cb 100644
--- a/PIbd-23_Gutorov_I.A._IT-Company/Repositories/Implementations/ServiceRepository.cs
+++ b/PIbd-23_Gutorov_I.A._IT-Company/Repositories/Implementations/ServiceRepository.cs
@@ -1,28 +1,127 @@
-using PIbd_23_Gutorov_I.A._IT_Company.Entities;
+using Dapper;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using Npgsql;
+using PIbd_23_Gutorov_I.A._IT_Company.Entities;
+using System.CodeDom.Compiler;
namespace PIbd_23_Gutorov_I.A._IT_Company.Repositories.Implementations;
-internal class ServiceRepository : IServiceRepository
+public class ServiceRepository : IServiceRepository
{
- public void CreateService(Service Service)
+ private readonly IConnectionString _connectionString;
+ private readonly ILogger _logger;
+
+ public ServiceRepository(IConnectionString connectionString, ILogger logger)
{
+ _connectionString = connectionString;
+ _logger = logger;
+ }
+
+
+ public void CreateService(Service service)
+ {
+ _logger.LogInformation("Добавление объекта");
+ _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(service));
+
+ try
+ {
+ using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
+ var queryInsert = @"
+ INSERT INTO Services (Description)
+ VALUES (@Description);
+ ";
+ connection.Execute(queryInsert, service);
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Ошибка при добавлении объекта");
+ throw;
+ }
}
public void DeleteService(int id)
{
+ _logger.LogInformation("Удаление объекта");
+ _logger.LogDebug("Объект: {id}", id);
+
+ try
+ {
+ using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
+ var queryDelete = @"
+ DELETE FROM Services WHERE Id = @Id;
+ ";
+ connection.Execute(queryDelete, new { id });
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Ошибка при удалении объекта");
+ throw;
+ }
}
public Service ReadServiceById(int id)
{
- return Service.CreateEntity(0, string.Empty);
+ _logger.LogInformation("Получение объекта по идентификатору");
+ _logger.LogDebug("Объект: {id}", id);
+
+ try
+ {
+ using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
+ var querySelect = @"
+ SELECT * FROM Services WHERE Id = @Id;
+ ";
+ var service = connection.QueryFirst(querySelect, new { id });
+ _logger.LogDebug("Найденный объект: {json}", JsonConvert.SerializeObject(service));
+ return service;
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Ошибка при поиске объекта");
+ throw;
+ }
}
public IEnumerable ReadServices()
{
- return [];
+ _logger.LogInformation("Получение всех объектов");
+
+ try
+ {
+ using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
+ var querySelect = @"
+ SELECT * FROM Services;
+ ";
+ var services = connection.Query(querySelect);
+ _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(services));
+ return services;
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Ошибка при чтении объектов");
+ throw;
+ }
}
- public void UpdateService(Service Service)
+ public void UpdateService(Service service)
{
+ _logger.LogInformation("Редактирование объекта");
+ _logger.LogDebug("Объект: {json}", JsonConvert.SerializeObject(service));
+
+ try
+ {
+ using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
+ var queryUpdate = @"
+ UPDATE Services
+ SET Description = @Description
+ WHERE Id = @Id;
+ ";
+ connection.Execute(queryUpdate, service);
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Ошибка при редактировании объекта");
+ throw;
+ }
}
}
\ No newline at end of file