diff --git a/ProjectFamilyBudget/Entities/Expense.cs b/ProjectFamilyBudget/Entities/Expense.cs index dc76123..6e22020 100644 --- a/ProjectFamilyBudget/Entities/Expense.cs +++ b/ProjectFamilyBudget/Entities/Expense.cs @@ -1,6 +1,7 @@ using ProjectFamilyBudget.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,8 +11,11 @@ namespace ProjectFamilyBudget.Entities; public class Expense { public int Id { get; private set; } + [DisplayName("Тип расхода")] public IncomeExpenseType ExpenseType { get; private set; } + [DisplayName("Название")] public string Name { get; private set; } = string.Empty; + [DisplayName("Категория")] public string ExpenseCategory { get; private set; } = string.Empty; public static Expense CreateEntity(int id,IncomeExpenseType expenseType, string name, string expenseCategory) { diff --git a/ProjectFamilyBudget/Entities/ExpensePeopleExpense.cs b/ProjectFamilyBudget/Entities/ExpensePeopleExpense.cs index 2f5facf..8ac59c8 100644 --- a/ProjectFamilyBudget/Entities/ExpensePeopleExpense.cs +++ b/ProjectFamilyBudget/Entities/ExpensePeopleExpense.cs @@ -11,6 +11,7 @@ public class ExpensePeopleExpense public int PeopleExpenseId { get; private set; } public int ExpenseId { get; private set; } public int Sum { get; private set; } + public string ExpenseName { get; private set; } = string.Empty; public static ExpensePeopleExpense CreateElement(int peopleExpenseId, int expenseId, int sum) { return new ExpensePeopleExpense diff --git a/ProjectFamilyBudget/Entities/Income.cs b/ProjectFamilyBudget/Entities/Income.cs index 50addbb..3404501 100644 --- a/ProjectFamilyBudget/Entities/Income.cs +++ b/ProjectFamilyBudget/Entities/Income.cs @@ -1,6 +1,7 @@ using ProjectFamilyBudget.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,8 +11,11 @@ namespace ProjectFamilyBudget.Entities; public class Income { public int Id { get; private set; } + [DisplayName("Тип дохода")] public IncomeExpenseType IncomeType { get; private set; } + [DisplayName("Название")] public string Name { get; private set; } = string.Empty; + [DisplayName("Категория")] public string IncomeCategory { get; private set; } = string.Empty; public static Income CreateEntity(int id, IncomeExpenseType incomeType, string name, string incomeCategory) diff --git a/ProjectFamilyBudget/Entities/IncomePeopleIncome.cs b/ProjectFamilyBudget/Entities/IncomePeopleIncome.cs index 45e8273..a6dd8b1 100644 --- a/ProjectFamilyBudget/Entities/IncomePeopleIncome.cs +++ b/ProjectFamilyBudget/Entities/IncomePeopleIncome.cs @@ -11,6 +11,7 @@ public class IncomePeopleIncome public int PeopleIncomeId { get; private set; } public int IncomeId { get; private set; } public int Sum { get; private set; } + public string IncomeName { get; private set; } = string.Empty; public static IncomePeopleIncome CreateElement(int peopleIncomeId,int incomeId, int sum) { return new IncomePeopleIncome diff --git a/ProjectFamilyBudget/Entities/People.cs b/ProjectFamilyBudget/Entities/People.cs index d8eb15d..d58c829 100644 --- a/ProjectFamilyBudget/Entities/People.cs +++ b/ProjectFamilyBudget/Entities/People.cs @@ -2,6 +2,7 @@ using ProjectFamilyBudget.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,9 +12,14 @@ namespace ProjectFamilyBudget.Entities; public class People { public int Id { get; private set; } + [DisplayName("Имя")] public string Name { get; private set; } = string.Empty; + [DisplayName("Фамилия")] public string LastName { get; private set; } = string.Empty; - public int Age { get; private set; } + public string FullName => $"{Name} {LastName}"; + [DisplayName("Возраст")] + public int Age { get; private set; } + [DisplayName("Член семьи")] public FamilyMemberType MemberType { get; private set; } public static People CreateEntity(int id, string name,string lastName, int age, FamilyMemberType memberType) { diff --git a/ProjectFamilyBudget/Entities/PeopleExpense.cs b/ProjectFamilyBudget/Entities/PeopleExpense.cs index dde00b6..65071d7 100644 --- a/ProjectFamilyBudget/Entities/PeopleExpense.cs +++ b/ProjectFamilyBudget/Entities/PeopleExpense.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,8 +10,16 @@ namespace ProjectFamilyBudget.Entities; public class PeopleExpense { public int Id { get; private set; } + [Browsable(false)] public int PeopleId { get; private set; } + [DisplayName("Человек")] + public string PeopleName { get; private set; } = string.Empty; + [DisplayName("Дата")] public DateTime DataReciept { get; private set; } + [DisplayName("Расходы")] + public string Expense => ExpensePeopleExpenses != null ? + string.Join(", ", ExpensePeopleExpenses.Select(x => $"{x.ExpenseName} {x.Sum}")) : string.Empty; + [Browsable(false)] public IEnumerable ExpensePeopleExpenses { get; private set; } = []; public static PeopleExpense CreateOperation(int id, int peopleId, DateTime dataReciept,IEnumerable expensePeopleExpenses) { @@ -22,14 +31,11 @@ public class PeopleExpense ExpensePeopleExpenses = expensePeopleExpenses }; } - public static PeopleExpense CreateOperation(TempExpensePeopleExpense tempExpensePeopleExpense, IEnumerable expensePeopleExpenses) + public void SetExpensePeopleExpenses(IEnumerable expensePeopleExpenses) { - return new PeopleExpense + if (expensePeopleExpenses != null && expensePeopleExpenses.Any()) { - Id = tempExpensePeopleExpense.Id, - PeopleId = tempExpensePeopleExpense.PeopleId, - DataReciept = tempExpensePeopleExpense.DataReciept, - ExpensePeopleExpenses = expensePeopleExpenses - }; + ExpensePeopleExpenses = expensePeopleExpenses; + } } } diff --git a/ProjectFamilyBudget/Entities/PeopleIncome.cs b/ProjectFamilyBudget/Entities/PeopleIncome.cs index 8435df5..6120741 100644 --- a/ProjectFamilyBudget/Entities/PeopleIncome.cs +++ b/ProjectFamilyBudget/Entities/PeopleIncome.cs @@ -1,6 +1,7 @@ using ProjectFamilyBudget.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,8 +11,16 @@ namespace ProjectFamilyBudget.Entities; public class PeopleIncome { public int Id { get; private set; } + [Browsable(false)] public int PeopleId { get; private set; } + [DisplayName("Человек")] + public string PeopleName { get; private set; } = string.Empty; + [DisplayName("Дата")] public DateTime DataReciept { get; private set; } + [DisplayName("Доходы")] + public string Income => IncomePeopleIncomes != null ? + string.Join(", ", IncomePeopleIncomes.Select(x => $"{x.IncomeName} {x.Sum}")) : string.Empty; + [Browsable(false)] public IEnumerable IncomePeopleIncomes { get; private set; } = []; public static PeopleIncome CreateOperation(int id, int peopleId,DateTime dataReciept,IEnumerable incomePeopleIncomes) { @@ -23,14 +32,11 @@ public class PeopleIncome IncomePeopleIncomes = incomePeopleIncomes }; } - public static PeopleIncome CreateOperation(TempIncomePeopleIncome tempIncomePeopleIncome, IEnumerable incomePeopleIncomes) + public void SetIncomePeopleIncomes(IEnumerable incomePeopleIncomes) { - return new PeopleIncome + if (incomePeopleIncomes != null && incomePeopleIncomes.Any()) { - Id = tempIncomePeopleIncome.Id, - PeopleId = tempIncomePeopleIncome.PeopleId, - DataReciept = tempIncomePeopleIncome.DataReciept, - IncomePeopleIncomes = incomePeopleIncomes - }; + IncomePeopleIncomes = incomePeopleIncomes; + } } } diff --git a/ProjectFamilyBudget/Entities/TempExpensePeopleExpense.cs b/ProjectFamilyBudget/Entities/TempExpensePeopleExpense.cs deleted file mode 100644 index 41a1f25..0000000 --- a/ProjectFamilyBudget/Entities/TempExpensePeopleExpense.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ProjectFamilyBudget.Entities; - -public class TempExpensePeopleExpense -{ - public int Id { get; private set; } - public int PeopleId { get; private set; } - public DateTime DataReciept { get; private set; } - public int ExpenseId { get; private set; } - public int Sum { get; private set; } -} diff --git a/ProjectFamilyBudget/Entities/TempIncomePeopleIncome.cs b/ProjectFamilyBudget/Entities/TempIncomePeopleIncome.cs deleted file mode 100644 index 31eb880..0000000 --- a/ProjectFamilyBudget/Entities/TempIncomePeopleIncome.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ProjectFamilyBudget.Entities; - -public class TempIncomePeopleIncome -{ - public int Id { get; private set; } - public int PeopleId { get; private set; } - public DateTime DataReciept { get; private set; } - public int IncomeId { get; private set; } - public int Sum { get; private set; } -} diff --git a/ProjectFamilyBudget/Forms/FormExpenses.cs b/ProjectFamilyBudget/Forms/FormExpenses.cs index d8aaa58..25201e6 100644 --- a/ProjectFamilyBudget/Forms/FormExpenses.cs +++ b/ProjectFamilyBudget/Forms/FormExpenses.cs @@ -93,7 +93,12 @@ namespace ProjectFamilyBudget.Forms MessageBoxButtons.OK, MessageBoxIcon.Error); } } - private void LoadList() => dataGridViewData.DataSource = _expense.ReadExpense(); + private void LoadList() + { + dataGridViewData.DataSource = _expense.ReadExpense(); + dataGridViewData.Columns["Id"].Visible = false; + } + private bool TryGetIdentifierFromSelectedRow(out int id) { id = 0; diff --git a/ProjectFamilyBudget/Forms/FormIncomes.cs b/ProjectFamilyBudget/Forms/FormIncomes.cs index 09f1ae8..03a1100 100644 --- a/ProjectFamilyBudget/Forms/FormIncomes.cs +++ b/ProjectFamilyBudget/Forms/FormIncomes.cs @@ -94,7 +94,12 @@ namespace ProjectFamilyBudget.Forms MessageBoxButtons.OK, MessageBoxIcon.Error); } } - private void LoadList() => dataGridViewData.DataSource = _income.ReadIncome(); + private void LoadList() + { + dataGridViewData.DataSource = _income.ReadIncome(); + dataGridViewData.Columns["Id"].Visible = false; + } + private bool TryGetIdentifierFromSelectedRow(out int id) { id = 0; diff --git a/ProjectFamilyBudget/Forms/FormPeopleExpense.cs b/ProjectFamilyBudget/Forms/FormPeopleExpense.cs index 639110e..78b8eb1 100644 --- a/ProjectFamilyBudget/Forms/FormPeopleExpense.cs +++ b/ProjectFamilyBudget/Forms/FormPeopleExpense.cs @@ -21,7 +21,7 @@ namespace ProjectFamilyBudget.Forms _peopleEpxense = peopleEpxense ?? throw new ArgumentNullException(nameof(peopleEpxense)); comboBoxPeople.DataSource = people.ReadPeople(); - comboBoxPeople.DisplayMember = "Name"; + comboBoxPeople.DisplayMember = "FullName"; comboBoxPeople.ValueMember = "Id"; ColumnExpense.DataSource = expense.ReadExpense(); diff --git a/ProjectFamilyBudget/Forms/FormPeopleExpenses.cs b/ProjectFamilyBudget/Forms/FormPeopleExpenses.cs index 6d7f84c..f2f21c5 100644 --- a/ProjectFamilyBudget/Forms/FormPeopleExpenses.cs +++ b/ProjectFamilyBudget/Forms/FormPeopleExpenses.cs @@ -76,7 +76,13 @@ namespace ProjectFamilyBudget.Forms MessageBoxButtons.OK, MessageBoxIcon.Error); } } - private void LoadList() => dataGridViewData.DataSource = _peopleExpense.ReadPeopleExpense(); + private void LoadList() + { + dataGridViewData.DataSource = _peopleExpense.ReadPeopleExpense(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["DataReciept"].DefaultCellStyle.Format = "dd MMMM yyyy hh:mm"; + } + private bool TryGetIdentifierFromSelectedRow(out int id) { id = 0; diff --git a/ProjectFamilyBudget/Forms/FormPeopleIncome.cs b/ProjectFamilyBudget/Forms/FormPeopleIncome.cs index e35e52e..f94ae6a 100644 --- a/ProjectFamilyBudget/Forms/FormPeopleIncome.cs +++ b/ProjectFamilyBudget/Forms/FormPeopleIncome.cs @@ -21,7 +21,7 @@ namespace ProjectFamilyBudget.Forms _peopleIncome = peopleIncome ?? throw new ArgumentNullException(nameof(peopleIncome)); comboBoxPeople.DataSource = people.ReadPeople(); - comboBoxPeople.DisplayMember = "Name"; + comboBoxPeople.DisplayMember = "FullName"; comboBoxPeople.ValueMember = "Id"; ColumnIncome.DataSource = income.ReadIncome(); diff --git a/ProjectFamilyBudget/Forms/FormPeopleIncomes.cs b/ProjectFamilyBudget/Forms/FormPeopleIncomes.cs index b1f19f1..9a30951 100644 --- a/ProjectFamilyBudget/Forms/FormPeopleIncomes.cs +++ b/ProjectFamilyBudget/Forms/FormPeopleIncomes.cs @@ -74,7 +74,13 @@ namespace ProjectFamilyBudget.Forms MessageBoxButtons.OK, MessageBoxIcon.Error); } } - private void LoadList() => dataGridViewData.DataSource = _peopleIncome.ReadPeopleIncome(); + private void LoadList() + { + dataGridViewData.DataSource = _peopleIncome.ReadPeopleIncome(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["DataReciept"].DefaultCellStyle.Format = "dd MMMM yyyy"; + } + private bool TryGetIdentifierFromSelectedRow(out int id) { id = 0; diff --git a/ProjectFamilyBudget/Forms/FormPeoples.cs b/ProjectFamilyBudget/Forms/FormPeoples.cs index ed6c174..2196058 100644 --- a/ProjectFamilyBudget/Forms/FormPeoples.cs +++ b/ProjectFamilyBudget/Forms/FormPeoples.cs @@ -92,7 +92,13 @@ namespace ProjectFamilyBudget.Forms MessageBoxButtons.OK, MessageBoxIcon.Error); } } - private void LoadList() => dataGridViewData.DataSource = _people.ReadPeople(); + private void LoadList() + { + dataGridViewData.DataSource = _people.ReadPeople(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["FullName"].Visible = false; + } + private bool TryGetIdentifierFromSelectedRow(out int id) { id = 0; diff --git a/ProjectFamilyBudget/Repositories/Implementations/PeopleIncomeRepository.cs b/ProjectFamilyBudget/Repositories/Implementations/PeopleIncomeRepository.cs index 16c5bf1..9574caf 100644 --- a/ProjectFamilyBudget/Repositories/Implementations/PeopleIncomeRepository.cs +++ b/ProjectFamilyBudget/Repositories/Implementations/PeopleIncomeRepository.cs @@ -93,13 +93,54 @@ public class PeopleIncomeRepository : IPeopleIncome _logger.LogInformation("Получение всех объектов"); try { + var builder = new QueryBuilder(); + if (dateFrom.HasValue) + { + builder.AddCondition("cf.Date >= @dateFrom"); + } + if (dateTo.HasValue) + { + builder.AddCondition("cf.Date <= @dateTo"); + } + if (fuelId.HasValue) + { + builder.AddCondition("cff.FuelId = @fuelId"); + } using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = @"SELECT pi.*, ipi.IncomeId, ipi.Sum FROM PeopleIncome pi - INNER JOIN IncomePeopleIncome ipi on ipi.PeopleIncomeId = pi.Id"; - var peopleIncomes = connection.Query(querySelect); - _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(peopleIncomes)); - return peopleIncomes.GroupBy(x => x.Id, y => y, (key, value) => PeopleIncome.CreateOperation(value.First(), - value.Select(z => IncomePeopleIncome.CreateElement(0, z.IncomeId, z.Sum)))).ToList(); + var querySelect = $@"SELECT + cf.*, + c.Name as ContractorName, + cff.FuelId, + cff.Quantity, + f.Type as FuelName + FROM ContractorFuel cf + LEFT JOIN Contractor c on c.Id = cf.ContractorId + INNER JOIN ContractorFuelFuel cff on cff.ContractorFuelId = cf.Id + LEFT JOIN Fuel f on f.Id = cff.FuelId + {builder.Build()}"; + var contractorsDict = new Dictionary>(); + + var contractorFuels = connection.Query(querySelect, + (contractor, contractorFuel) => + { + if (!contractorsDict.TryGetValue(contractor.Id, out var ccf)) + { + ccf = []; + contractorsDict.Add(contractor.Id, ccf); + } + + ccf.Add(contractorFuel); + return contractor; + }, splitOn: "FuelId", param: new { dateFrom, dateTo, fuelId }); + _logger.LogDebug("Полученные объекты: {json}", + JsonConvert.SerializeObject(contractorFuels)); + + return contractorsDict.Select(x => + { + var cf = contractorFuels.First(y => y.Id == x.Key); + cf.SetContractorFuelFuel(x.Value); + return cf; + }).ToArray(); } catch (Exception ex) {