diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Client.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Client.cs index bf7cf0c..49bcba8 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Client.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Client.cs @@ -1,12 +1,16 @@  +using System.ComponentModel; + namespace Accounting_Time_It_Company.Entities; public class Client { public int Id { get; private set; } + [DisplayName("Имя")] public string NameClient { get; private set; } = string.Empty; + [DisplayName("Телефон")] public string Phone { get; private set; } = string.Empty; public static Client CreateEntity(int id, string nameClaent, string phone) diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Employee.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Employee.cs index 0f59bd3..25458f4 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Employee.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Employee.cs @@ -1,16 +1,34 @@  +using System.ComponentModel; + namespace Accounting_Time_It_Company.Entities; public class Employee { public int Id { get; private set; } + [Browsable(false)] public int PostId { get; private set; } + [Browsable(false)] + public string PostName { get; private set; } = string.Empty; + + [Browsable(false)] + public string PostLevel { get; private set; } = string.Empty; + + [Browsable(false)] + public string PostWage { get; private set; } = string.Empty; + + [DisplayName("Должность")] + public string FullPost => $"{PostName}<{PostLevel}>-{PostWage}"; + + [DisplayName("Имя")] public string Name { get; private set; } = string.Empty; + [DisplayName("Телефон")] public string Phone { get; private set; } = string.Empty; + [DisplayName("Надбавка(%)")] public float Allowance { get; private set; } public static Employee CreateEntity(int id, int postId, string name, string phone, float allowance) diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Post.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Post.cs index 30e0eed..8027205 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Post.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Post.cs @@ -1,4 +1,5 @@ using Accounting_Time_It_Company.Entities.Enums; +using System.ComponentModel; namespace Accounting_Time_It_Company.Entities; @@ -6,10 +7,15 @@ public class Post { public int Id { get; private set; } + [DisplayName("Должность")] public TypePost NamePost { get; private set; } + [DisplayName("Уровень")] public string LevelPost { get; private set; } = string.Empty; + public string FullName => $"{NamePost}<{LevelPost}>-{Wage}"; + + [DisplayName("Зарплата")] public int Wage { get; private set; } public static Post CreateEntity(int id, TypePost namePost, string levelPost, int wage) diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Product.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Product.cs index 5cf7d69..72da3bb 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Product.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Product.cs @@ -1,4 +1,5 @@ using Accounting_Time_It_Company.Entities.Enums; +using System.ComponentModel; namespace Accounting_Time_It_Company.Entities; @@ -6,10 +7,16 @@ public class Product { public int Id { get; private set; } + [Browsable(false)] public int ClientId { get; private set; } + [DisplayName("Клиент")] + public string ClientName { get; private set; } = string.Empty; + + [DisplayName("Имя проекта")] public string Name { get; private set; } = string.Empty; + [DisplayName("Тип проекта")] public TypeProduct Type { get; private set; } public static Product CreateEntity(int id, int clientId, string name, TypeProduct type) diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/TempWorkTime.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/TempWorkTime.cs deleted file mode 100644 index 24a5ca2..0000000 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/TempWorkTime.cs +++ /dev/null @@ -1,17 +0,0 @@ - -using Accounting_Time_It_Company.Entities.Enums; - -namespace Accounting_Time_It_Company.Entities; - -public class TempWorkTime -{ - public int Id { get; private set; } - public int ProductId { get; private set; } - public int DirectorId { get; private set; } - public string Description { get; private set; } = string.Empty; - public int AllowanceForJob { get; private set; } - public DateTime Date { get; private set; } - public int EmployeeId { get; private set; } - public int Hours { get; private set; } - public TypePost NamePost { get; private set; } -} diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/TypeJob.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/TypeJob.cs index 55c4f03..3a4d9d2 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/TypeJob.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/TypeJob.cs @@ -1,22 +1,47 @@  +using System.ComponentModel; + namespace Accounting_Time_It_Company.Entities; public class TypeJob { public int Id { get; private set; } + [Browsable(false)] public int ProductId { get; private set; } + [Browsable(false)] public int DirectorId { get; private set; } + [DisplayName("Проект")] + public string ProductName { get; private set; } = string.Empty; + + [DisplayName("Директор")] + public string DirectorName { get; private set; } = string.Empty; + + [DisplayName("Описание")] public string Description { get; private set; } = string.Empty; + [DisplayName("Надбавка")] public int AllowanceForJob { get; private set; } + [DisplayName("Дата")] public DateTime Date { get; private set; } + [DisplayName("Разработчики")] + public string Developes => WorkTimesDevelop != null ? + string.Join(", ", WorkTimesDevelop.Select(x => $"{x.EmployeeName} {x.Hours}")) : + string.Empty; + + [DisplayName("Менеджеры")] + public string Managers => WorkTimesManager != null ? + string.Join(", ", WorkTimesManager.Select(x => $"{x.EmployeeName} {x.Hours}")) : + string.Empty; + + [Browsable(false)] public IEnumerable WorkTimesDevelop { get; private set; } = []; + [Browsable(false)] public IEnumerable WorkTimesManager { get; private set; } = []; public static TypeJob CreateOperation(int id, int productId, int directorId, string discription, int allowanceForJob, @@ -35,19 +60,15 @@ public class TypeJob }; } - public static TypeJob CreateOperation(TempWorkTime tempWorkTime, - IEnumerable workTimesDevelop, IEnumerable workTimesManager) + public void SetWorkTime(IEnumerable dev, IEnumerable man) { - return new TypeJob + if (dev.Any() && WorkTimesDevelop != null) { - Id = tempWorkTime.Id, - ProductId = tempWorkTime.ProductId, - DirectorId = tempWorkTime.DirectorId, - Description = tempWorkTime.Description, - AllowanceForJob = tempWorkTime.AllowanceForJob, - Date = tempWorkTime.Date, - WorkTimesDevelop = workTimesDevelop, - WorkTimesManager = workTimesManager - }; + WorkTimesDevelop = dev; + } + if (man.Any() && WorkTimesManager != null) + { + WorkTimesManager = man; + } } } diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Vacation.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Vacation.cs index 3f1ccfa..05970d4 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Vacation.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/Vacation.cs @@ -1,16 +1,28 @@  +using System.ComponentModel; + namespace Accounting_Time_It_Company.Entities; public class Vacation { public int Id { get; private set; } + [Browsable(false)] public int DirectorId { get; private set; } + [Browsable(false)] public int EmployeeId { get; private set; } + [DisplayName("Ответственный директор")] + public string DirectorName { get; private set; } = string.Empty; + + [DisplayName("Сотрудник")] + public string EmployeeName { get; private set; } = string.Empty; + + [DisplayName("Дата начала")] public DateTime StartDate { get; private set; } + [DisplayName("Дата конца")] public DateTime EndDate { get; private set; } public static Vacation CreateOpeartion(int id, int directorId, int EmployeeId, DateTime startDate, DateTime endDate) diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/WorkTime.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/WorkTime.cs index b196b16..9d93911 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/WorkTime.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Entities/WorkTime.cs @@ -1,4 +1,4 @@ - + namespace Accounting_Time_It_Company.Entities; public class WorkTime @@ -7,6 +7,8 @@ public class WorkTime public int EmployeeId { get; private set; } + public string EmployeeName { get; private set; } = string.Empty; + public int Hours { get; private set; } public static WorkTime CreateElement(int id, int employeeId, int hours) diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormClients.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormClients.cs index 432c122..c00fc28 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormClients.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormClients.cs @@ -81,7 +81,11 @@ namespace Accounting_Time_It_Company.Forms } } - private void LoadList() => dataGridViewData.DataSource = _clientRepositories.ReadClients(); + private void LoadList() + { + dataGridViewData.DataSource = _clientRepositories.ReadClients(); + dataGridViewData.Columns["Id"].Visible = false; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormEmployee.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormEmployee.cs index 3598cb8..5bc0312 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormEmployee.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormEmployee.cs @@ -40,7 +40,7 @@ namespace Accounting_Time_It_Company.Forms _employeeRepositories = employeeRepositories ?? throw new ArgumentNullException(nameof(employeeRepositories)); comboBoxPost.DataSource = postRepositories.ReadPosts(); - comboBoxPost.DisplayMember = "NamePost"; + comboBoxPost.DisplayMember = "FullName"; comboBoxPost.ValueMember = "Id"; } diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormEmployees.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormEmployees.cs index ecf11a4..9749986 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormEmployees.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormEmployees.cs @@ -81,7 +81,11 @@ namespace Accounting_Time_It_Company.Forms } } - private void LoadList() => dataGridViewData.DataSource = _employeeRepositories.ReadEmployees(); + private void LoadList() + { + dataGridViewData.DataSource = _employeeRepositories.ReadEmployees(); + dataGridViewData.Columns["Id"].Visible = false; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormPosts.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormPosts.cs index 06ac195..6a7f3c7 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormPosts.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormPosts.cs @@ -81,7 +81,12 @@ namespace Accounting_Time_It_Company.Forms } } - private void LoadList() => dataGridViewData.DataSource = _postRepositories.ReadPosts(); + private void LoadList() + { + dataGridViewData.DataSource = _postRepositories.ReadPosts(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["FullName"].Visible = false; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormProducts.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormProducts.cs index ff79c6b..6560fcb 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormProducts.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormProducts.cs @@ -81,7 +81,11 @@ namespace Accounting_Time_It_Company.Forms } } - private void LoadList() => dataGridViewData.DataSource = _productRepositories.ReadProducts(); + private void LoadList() + { + dataGridViewData.DataSource = _productRepositories.ReadProducts(); + dataGridViewData.Columns["Id"].Visible = false; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJobs.Designer.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJobs.Designer.cs index 5ea84ff..d99dce3 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJobs.Designer.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJobs.Designer.cs @@ -41,7 +41,7 @@ panel1.Controls.Add(buttonDelete); panel1.Controls.Add(buttonAdd); panel1.Dock = DockStyle.Right; - panel1.Location = new Point(686, 0); + panel1.Location = new Point(978, 0); panel1.Name = "panel1"; panel1.Size = new Size(114, 450); panel1.TabIndex = 6; @@ -84,14 +84,14 @@ dataGridViewData.RowHeadersVisible = false; dataGridViewData.RowHeadersWidth = 51; dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dataGridViewData.Size = new Size(800, 450); + dataGridViewData.Size = new Size(1092, 450); dataGridViewData.TabIndex = 7; // // FormTypeJobs // AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(800, 450); + ClientSize = new Size(1092, 450); Controls.Add(panel1); Controls.Add(dataGridViewData); Name = "FormTypeJobs"; diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJobs.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJobs.cs index 4bc11e7..6ec776f 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJobs.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormTypeJobs.cs @@ -62,7 +62,12 @@ namespace Accounting_Time_It_Company.Forms } } - private void LoadList() => dataGridViewData.DataSource = _typeJobRepositories.ReadTypeJobs(); + private void LoadList() + { + dataGridViewData.DataSource = _typeJobRepositories.ReadTypeJobs(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["Date"].DefaultCellStyle.Format = "MMMM yy"; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormVacations.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormVacations.cs index 1120045..96a392e 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormVacations.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Forms/FormVacations.cs @@ -41,6 +41,12 @@ namespace Accounting_Time_It_Company.Forms } } - private void LoadList() => dataGridViewData.DataSource = _vacationRepositories.ReadVacations(); + private void LoadList() + { + dataGridViewData.DataSource = _vacationRepositories.ReadVacations(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["StartDate"].DefaultCellStyle.Format = "dd.MM.yy"; + dataGridViewData.Columns["EndDate"].DefaultCellStyle.Format = "dd.MM.yy"; + } } } diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/EmployeeRepositories.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/EmployeeRepositories.cs index 1ea456b..1bbd473 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/EmployeeRepositories.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/EmployeeRepositories.cs @@ -113,7 +113,12 @@ public class EmployeeRepositories : IEmployeeRepositories { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); connection.Open(); - var querySelect = "SELECT * FROM Employee"; + var querySelect = @"SELECT e.*, + p.NamePost AS PostName, + p.LevelPost AS PostLevel, + p.Wage AS PostWage + FROM Employee e + LEFT JOIN Post p ON p.id = e.postid"; var employees = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(employees)); diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ProductRepositories.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ProductRepositories.cs index 42f4340..68d1adf 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ProductRepositories.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/ProductRepositories.cs @@ -112,7 +112,10 @@ public class ProductRepositories : IProductRepositories { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); connection.Open(); - var querySelect = "SELECT * FROM Product"; + var querySelect = @"SELECT p.*, + c.NameClient AS ClientName + FROM Product p + LEFT JOIN Client c ON c.id = p.clientid"; var products = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(products)); diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/TypeJobRepositories.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/TypeJobRepositories.cs index 3226b9d..554ef8d 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/TypeJobRepositories.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/TypeJobRepositories.cs @@ -4,6 +4,9 @@ using Dapper; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Npgsql; +using System.Collections; +using System.Collections.Generic; +using System.Linq; namespace Accounting_Time_It_Company.Repositories.Implementations; @@ -93,17 +96,51 @@ public class TypeJobRepositories : ITypeJobRepositories { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); connection.Open(); - var querySelect = @"SELECT tj.*, wt.EmployeeId, wt.Hours, p.namepost + var querySelect = @"SELECT + tj.*, + pr.Name AS ProductName, + ed.Name AS DirectorName, + wt.EmployeeID, + wt.Hours, + e.Name AS EmployeeName, + e.Name, + e.PostId FROM TypeJob tj - INNER JOIN WorkTime wt ON wt.typejobid = tj.id - INNER JOIN Employee e ON e.id = wt.employeeid - INNER JOIN Post p ON p.id = e.PostId;"; - var typeJobs = connection.Query(querySelect); + LEFT JOIN Product pr ON pr.id = tj.productid + LEFT JOIN Employee ed ON ed.id = tj.directorid + LEFT JOIN WorkTime wt ON wt.typejobid = tj.id + LEFT JOIN Employee e ON e.id = wt.employeeid"; + + var jobDictDev = new Dictionary>(); + var jobDictMan = new Dictionary>(); + + var typeJobs = connection.Query(querySelect, + (tj, wt, e) => + { + if (!jobDictDev.TryGetValue(tj.Id, out var tjwtd)) + { + tjwtd = []; + jobDictDev.Add(tj.Id, tjwtd); + } + if (!jobDictMan.TryGetValue(tj.Id, out var tjwtm)) + { + tjwtm = []; + jobDictMan.Add(tj.Id, tjwtm); + } + if (e.PostId == (int)TypePost.Developer) tjwtd.Add(wt); + if (e.PostId == (int)TypePost.Manager) tjwtm.Add(wt); + return tj; + }, splitOn: "employeeid, name"); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(typeJobs)); - return typeJobs.GroupBy(x => x.Id, y => y, - (key, value) => TypeJob.CreateOperation(value.First(), - value.Where(z => z.NamePost == TypePost.Developer).Select(h => WorkTime.CreateElement(0, h.EmployeeId, h.Hours)).ToList(), - value.Where(z => z.NamePost == TypePost.Manager).Select(h => WorkTime.CreateElement(0, h.EmployeeId, h.Hours)).ToList())).ToList(); + + return typeJobs.GroupBy(x => x.Id).Select(x => x.First()).Select(x => + { + var dev = jobDictDev.Where(y => y.Key == x.Id).Select(y => y.Value).SelectMany(a => a).ToList(); + var man = jobDictMan.Where(y => y.Key == x.Id).Select(y => y.Value).SelectMany(a => a).ToList(); + x.SetWorkTime(dev, man); + return x; + }).ToArray(); } catch (Exception ex) { diff --git a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/VacationRepositories.cs b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/VacationRepositories.cs index 317f494..d26945c 100644 --- a/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/VacationRepositories.cs +++ b/Accounting-Time-It-Company/Accounting-Time-It-Company/Repositories/Implementations/VacationRepositories.cs @@ -48,7 +48,12 @@ public class VacationRepositories : IVacationRepositories { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); connection.Open(); - var querySelect = "SELECT * FROM Vacation"; + var querySelect = @"SELECT v.*, + ed.Name AS DirectorName, + ee.Name AS EmployeeName + FROM Vacation v + LEFT JOIN Employee ed ON ed.id = v.directorid + LEFT JOIN Employee ee ON ee.id = v.employeeid"; var vacations = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(vacations));