almost done

This commit is contained in:
I1nur 2024-12-24 03:37:47 +04:00
parent 9e0c116449
commit 15edafea60
11 changed files with 128 additions and 67 deletions

View File

@ -12,8 +12,8 @@ namespace FamilyBudget.Entities
public int Id { get; private set; } public int Id { get; private set; }
[Browsable(false)] [Browsable(false)]
public int FamilyMemberId { get; private set; } public int FamilyMemberId { get; private set; }
[DisplayName("Семья")] [DisplayName("Участник")]
public string Name { get; private set; } = string.Empty; public string FullName { get; private set; } = string.Empty;
[DisplayName("Дата")] [DisplayName("Дата")]
public DateTime Date { get; private set; } public DateTime Date { get; private set; }
public string Expenses => FamilyMember_Expenses != null ? public string Expenses => FamilyMember_Expenses != null ?
@ -32,7 +32,7 @@ namespace FamilyBudget.Entities
}; };
} }
public void setExpenseBudget(IEnumerable<FamilyMember_ExpenseBudget> familyMember_Expenses) public void SetExpenseBudget(IEnumerable<FamilyMember_ExpenseBudget> familyMember_Expenses)
{ {
if (familyMember_Expenses != null && familyMember_Expenses.Any()) if (familyMember_Expenses != null && familyMember_Expenses.Any())
{ {

View File

@ -10,7 +10,7 @@ namespace FamilyBudget.Entities
{ {
public int Id { get; private set; } public int Id { get; private set; }
public int ExpenseBudgetId { get; private set; } public int ExpenseBudgetId { get; private set; }
public int ExpenseCategoryID { get; private set; } public int ExpenseBudgetCategoryID { get; private set; }
public int Sum { get; private set; } public int Sum { get; private set; }
public string ExpenseName { get; private set; } = string.Empty; public string ExpenseName { get; private set; } = string.Empty;
public static FamilyMember_ExpenseBudget CreateElement(int id, int expenseCategoryID, int expenseBudgetId, int sum) public static FamilyMember_ExpenseBudget CreateElement(int id, int expenseCategoryID, int expenseBudgetId, int sum)
@ -18,7 +18,7 @@ namespace FamilyBudget.Entities
return new FamilyMember_ExpenseBudget() return new FamilyMember_ExpenseBudget()
{ {
Id = id, Id = id,
ExpenseCategoryID = expenseCategoryID, ExpenseBudgetCategoryID = expenseCategoryID,
ExpenseBudgetId = expenseBudgetId, ExpenseBudgetId = expenseBudgetId,
Sum = sum Sum = sum
}; };

View File

@ -12,8 +12,8 @@ namespace FamilyBudget.Entities
public int Id { get; private set; } public int Id { get; private set; }
[Browsable(false)] [Browsable(false)]
public int FamilyMemberId { get; private set; } public int FamilyMemberId { get; private set; }
[DisplayName("Семья")] [DisplayName("Участник")]
public string FamilyName { get; private set; } = string.Empty; public string FullName { get; private set; } = string.Empty;
[DisplayName("Дата")] [DisplayName("Дата")]
public DateTime Date { get; private set; } public DateTime Date { get; private set; }
[DisplayName("Доходы")] [DisplayName("Доходы")]
@ -33,7 +33,7 @@ namespace FamilyBudget.Entities
}; };
} }
public void setIncomeBudget(IEnumerable<FamilyMember_IncomeBudget> familyMember_Incomes) public void SetIncomeBudget(IEnumerable<FamilyMember_IncomeBudget> familyMember_Incomes)
{ {
if (familyMember_Incomes != null && familyMember_Incomes.Any()) if (familyMember_Incomes != null && familyMember_Incomes.Any())
{ {

View File

@ -91,7 +91,11 @@ namespace FamilyBudget.Forms
} }
} }
private void LoadList() => dataGridViewFamilies.DataSource = _familyRepository.ReadFamilies(); private void LoadList()
{
dataGridViewFamilies.DataSource = _familyRepository.ReadFamilies();
dataGridViewFamilies.Columns["id"].Visible = false;
}
private bool TryGetIdentifierFromSelectedRow(out int id) private bool TryGetIdentifierFromSelectedRow(out int id)
{ {
id = 0; id = 0;

View File

@ -76,7 +76,7 @@ namespace FamilyBudget.Forms
{ {
dataGridViewExpenses.DataSource = _expenseBudgetRepository.ReadExpenseBudgets(); dataGridViewExpenses.DataSource = _expenseBudgetRepository.ReadExpenseBudgets();
dataGridViewExpenses.Columns["id"].Visible = false; dataGridViewExpenses.Columns["id"].Visible = false;
dataGridViewExpenses.Columns["data"].DefaultCellStyle.Format = "dd MMMM yyyy"; dataGridViewExpenses.Columns["date"].DefaultCellStyle.Format = "dd MMMM yyyy";
} }
private bool TryGetIdentifierFromSelectedRow(out int id) private bool TryGetIdentifierFromSelectedRow(out int id)

View File

@ -63,7 +63,7 @@ namespace FamilyBudget.Forms
{ {
dataGridViewIncomes.DataSource = _incomeBudgetRepository.ReadIncomeBudgets(); dataGridViewIncomes.DataSource = _incomeBudgetRepository.ReadIncomeBudgets();
dataGridViewIncomes.Columns["id"].Visible = false; dataGridViewIncomes.Columns["id"].Visible = false;
dataGridViewIncomes.Columns["data"].DefaultCellStyle.Format = "dd MMMM yyyy"; dataGridViewIncomes.Columns["date"].DefaultCellStyle.Format = "dd MMMM yyyy";
} }
private bool TryGetIdentifierFromSelectedRow(out int id) private bool TryGetIdentifierFromSelectedRow(out int id)

View File

@ -91,8 +91,12 @@ namespace FamilyBudget.Forms
} }
} }
private void LoadList() => dataGridViewFamilyMembers.DataSource = _familyMemberRepository.ReadFamilyMembers(); private void LoadList()
{
dataGridViewFamilyMembers.DataSource = _familyMemberRepository.ReadFamilyMembers();
dataGridViewFamilyMembers.Columns["id"].Visible = false;
dataGridViewFamilyMembers.Columns["FullName"].Visible = false;
}
private bool TryGetIdentifierFromSelectedRow(out int id) private bool TryGetIdentifierFromSelectedRow(out int id)
{ {
id = 0; id = 0;

View File

@ -46,7 +46,7 @@ namespace FamilyBudget.Reports
.Where(x => x.Date.Date == dateTime.Date) .Where(x => x.Date.Date == dateTime.Date)
.GroupBy(x => x.FamilyMemberId, (key, group) => new { .GroupBy(x => x.FamilyMemberId, (key, group) => new {
Id = key, Id = key,
Count = group.Sum(x => x.FamilyMember_Expenses.FirstOrDefault(x => x.ExpenseCategoryID == expenseId)?.Sum ?? 0) Count = group.Sum(x => x.FamilyMember_Expenses.FirstOrDefault(x => x.ExpenseBudgetCategoryID == expenseId)?.Sum ?? 0)
}) })
.Select(x => (x.Id.ToString(), (double)x.Count)) .Select(x => (x.Id.ToString(), (double)x.Count))
.ToList(); .ToList();

View File

@ -34,7 +34,7 @@ namespace FamilyBudget.Reports
{ {
new ExcelBuilder(filePath) new ExcelBuilder(filePath)
.AddHeader("Сводка по бюджету семьи", 0, 4) .AddHeader("Сводка по бюджету семьи", 0, 4)
.AddParagraph("за период", 0) .AddParagraph($"за период с {startDate:dd.MM.yyyy} по {endDate:dd.MM.yyyy}", 0)
.AddTable([15, 10, 15, 15], GetData(incomeId, expenseId, startDate, endDate)) .AddTable([15, 10, 15, 15], GetData(incomeId, expenseId, startDate, endDate))
.Build(); .Build();
return true; return true;
@ -50,22 +50,20 @@ namespace FamilyBudget.Reports
{ {
_logger.LogDebug("{json}", JsonConvert.SerializeObject(_expenseBudgetRepository.ReadExpenseBudgets())); _logger.LogDebug("{json}", JsonConvert.SerializeObject(_expenseBudgetRepository.ReadExpenseBudgets()));
var expenseData = _expenseBudgetRepository var expenseData = _expenseBudgetRepository
.ReadExpenseBudgets() .ReadExpenseBudgets(dateFrom: startDate, dateTo: endDate, BudgetExpenseId: expenseId)
.Where(x => x.Date >= startDate && x.Date <= endDate && x.FamilyMember_Expenses.Any(y => y.ExpenseCategoryID == expenseId))
.Select(x => new .Select(x => new
{ {
x.FamilyMemberId, x.FullName,
x.Date, x.Date,
CountIn = (int?)null, CountIn = (int?)null,
CountOut = x.FamilyMember_Expenses.FirstOrDefault(y => y.ExpenseCategoryID == expenseId)?.Sum CountOut = x.FamilyMember_Expenses.FirstOrDefault(y => y.ExpenseBudgetCategoryID == expenseId)?.Sum
}); });
var incomeData = _incomeBudgetRepository var incomeData = _incomeBudgetRepository
.ReadIncomeBudgets() .ReadIncomeBudgets(dateFrom: startDate, dateTo: endDate, BudgetIncomeId: incomeId)
.Where(x => x.Date >= startDate && x.Date <= endDate && x.FamilyMember_Incomes.Any(y => y.IncomeBudgetCategoryId == incomeId))
.Select(x => new .Select(x => new
{ {
x.FamilyMemberId, x.FullName,
x.Date, x.Date,
CountIn = x.FamilyMember_Incomes.FirstOrDefault(y => y.IncomeBudgetCategoryId == incomeId)?.Sum, CountIn = x.FamilyMember_Incomes.FirstOrDefault(y => y.IncomeBudgetCategoryId == incomeId)?.Sum,
CountOut = (int?)null, CountOut = (int?)null,
@ -77,15 +75,10 @@ namespace FamilyBudget.Reports
return new List<string[]>(){ item } return new List<string[]>(){ item }
.Union( .Union(
data.Select(x => new string[] { data.Select(x => new string[] {x.FullName, x.Date.ToString("dd.MM.yyyy"), x.CountIn?.ToString("N0") ?? string.Empty,
x.FamilyMemberId.ToString(), x.Date.ToString(), x.CountIn?.ToString() ?? x.CountOut?.ToString("N0") ?? string.Empty }))
string.Empty, x.CountOut?.ToString() ?? string.Empty
})
)
.Union( .Union(
[["Всего", "", data.Sum(x => x.CountIn ?? 0).ToString(), [["Всего", "", data.Sum(x => x.CountIn ?? 0).ToString("N0"), data.Sum(x => x.CountOut ?? 0).ToString("N0")]])
data.Sum(x => x.CountOut ?? 0).ToString()]]
)
.ToList(); .ToList();
} }
} }

View File

@ -3,6 +3,7 @@ using FamilyBudget.Entities;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
using Npgsql; using Npgsql;
using ProjectFamilyBudget.Repositories.Implementations;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -49,7 +50,7 @@ namespace FamilyBudget.Repositories.Implementations
ExpenseBudgetId = expenseBudgetId, ExpenseBudgetId = expenseBudgetId,
expenseBudget.FamilyMemberId, expenseBudget.FamilyMemberId,
elem.Sum, elem.Sum,
ExpensebudgetCategoryId = elem.ExpenseCategoryID ExpensebudgetCategoryId = elem.ExpenseBudgetCategoryID
}, transaction); }, transaction);
} }
@ -93,15 +94,64 @@ namespace FamilyBudget.Repositories.Implementations
public IEnumerable<ExpenseBudget> ReadExpenseBudgets(DateTime? dateFrom = null, DateTime? dateTo = null, public IEnumerable<ExpenseBudget> ReadExpenseBudgets(DateTime? dateFrom = null, DateTime? dateTo = null,
int? familyMemberId = null, int? BudgetExpenseId = null) int? familyMemberId = null, int? BudgetExpenseId = null)
{ {
_logger.LogInformation("Получение всех объектов");
try try
{ {
var builder = new QueryBuilder();
if (dateFrom.HasValue)
{
builder.AddCondition("eb.Date >= @dateFrom");
}
if (dateTo.HasValue)
{
builder.AddCondition("eb.Date<= @dateTo");
}
if (familyMemberId.HasValue)
{
builder.AddCondition("eb.familyMemberId = @familyMemberId");
}
if (BudgetExpenseId.HasValue)
{
builder.AddCondition("fmeb.ExpenseBudgetCategoryId = @BudgetExpenseId");
}
using var connection = new NpgsqlConnection(_connectionString.ConnectionString); using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT eb.*, fmeb.expensebudgetId, fmeb.sum, fmeb.ExpensebudgetCategoryId FROM ExpenseBudget eb var querySelect = $@"SELECT
INNER JOIN familymember_expensebudget fmeb on fmeb.expensebudgetid = eb.id"; eb.Id,
var expensesBudget = connection.Query<FamilyMember>(querySelect); eb.FamilyMemberId,
//_logger.LogDebug("Полученные объекты: {json}", CONCAT(fm.Name, ' ', f.Name) AS FullName,
//JsonConvert.SerializeObject(expensesBudget)); eb.Date,
return null; fmeb.ExpenseBudgetId,
fmeb.ExpenseBudgetCategoryId,
fmeb.Sum,
e.Name AS ExpenseName
FROM expenseBudget eb
LEFT JOIN familymember_expensebudget fmeb ON fmeb.expensebudgetid = eb.id
INNER JOIN Familymember fm ON fm.Id = eb.FamilyMemberId
LEFT JOIN Family f ON f.Id = fm.FamilyId
LEFT JOIN expensebudgetcategory e ON e.Id = fmeb.ExpenseBudgetCategoryId
{builder.Build()}";
var expenseDict = new Dictionary<int, List<FamilyMember_ExpenseBudget>>();
var expenseBudget = connection.Query<ExpenseBudget, FamilyMember_ExpenseBudget, ExpenseBudget>(querySelect,
(expense, fmExpense) =>
{
if (!expenseDict.TryGetValue(expense.Id, out var fme))
{
fme = [];
expenseDict.Add(expense.Id, fme);
}
fme.Add(fmExpense);
return expense;
}, splitOn: "ExpenseBudgetCategoryId", param: new { dateFrom, dateTo, familyMemberId, BudgetExpenseId });
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(expenseBudget));
return expenseDict.Select(x =>
{
var pi = expenseBudget.First(y => y.Id == x.Key);
pi.SetExpenseBudget(x.Value);
return pi;
}).ToArray();
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -99,48 +99,58 @@ namespace FamilyBudget.Repositories.Implementations
var builder = new QueryBuilder(); var builder = new QueryBuilder();
if (dateFrom.HasValue) if (dateFrom.HasValue)
{ {
builder.AddCondition("pi.DataReciept >= @dateForm"); builder.AddCondition("ib.Date >= @dateFrom");
} }
if (dateTo.HasValue) if (dateTo.HasValue)
{ {
builder.AddCondition("pi.DataReciept <= @dateTo"); builder.AddCondition("ib.Date <= @dateTo");
} }
if (familyMemberId.HasValue) if (familyMemberId.HasValue)
{ {
builder.AddCondition("pi.PeopleId = @peopleId"); builder.AddCondition("ib.familyMemberId = @familyMemberId");
} }
if (BudgetIncomeId.HasValue) if (BudgetIncomeId.HasValue)
{ {
builder.AddCondition("ipi.IncomeId = @incomeId"); builder.AddCondition("fmib.IncomeBudgetCategoryId = @BudgetIncomeId");
} }
using var connection = new NpgsqlConnection(_connectionString.ConnectionString); using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = $@"SELECT ib.*, CONCAT(fm.Name, ' ', f.Name) as people, var querySelect = $@"SELECT
fmib.incomebudgetId, fmib.sum, ib.Id,
fmib.incomebudgetcategoryid FROM incomeBudget ib ib.FamilyMemberId,
LEFT JOIN familymember_incomebudget fmib on fmib.incomebudgetid = ib.id CONCAT(fm.Name, ' ', f.Name) AS FullName,
LEFT JOIN Familymember fm on fm.Id = fmib.familymemberid ib.Date,
LEFT JOIN Family f on f.Id = fm.familyid fmib.IncomeBudgetId,
fmib.IncomeBudgetCategoryId,
fmib.Sum,
i.Name AS IncomeName
FROM incomeBudget ib
LEFT JOIN familymember_incomebudget fmib ON fmib.incomebudgetid = ib.id
INNER JOIN Familymember fm ON fm.Id = ib.FamilyMemberId
LEFT JOIN Family f ON f.Id = fm.FamilyId
LEFT JOIN incomebudgetcategory i ON i.Id = fmib.IncomeBudgetCategoryId
{builder.Build()}"; {builder.Build()}";
// var incomeDict = new Dictionary<int, List<FamilyMember_IncomeBudget>>(); var incomeDict = new Dictionary<int, List<FamilyMember_IncomeBudget>>();
// var peopleIncomes = connection.Query<FamilyMember, Family, IncomeBudget, FamilyMember_IncomeBudget>(querySelect, var incomesBudget = connection.Query<IncomeBudget, FamilyMember_IncomeBudget, IncomeBudget>(querySelect,
// (income, peopleIncomes) => (income, fmIncome) =>
// { {
// if (!incomeDict.TryGetValue(income.Id, out var fmi)) if (!incomeDict.TryGetValue(income.Id, out var fmi))
// { {
// fmi = []; fmi = [];
// incomeDict.Add(income.Id, fmi); incomeDict.Add(income.Id, fmi);
// } }
// fmi.Add(peopleIncomes); fmi.Add(fmIncome);
// return income; return income;
// }, splitOn: "IncomeId", param: new { dateFrom, dateTo, familyMemberId, BudgetIncomeId }); }, splitOn: "IncomeBudgetCategoryId", param: new { dateFrom, dateTo, familyMemberId, BudgetIncomeId });
// _logger.LogDebug("Полученные объекты: {json}", _logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(incomesBudget));
//_logger.LogDebug("Полученные объекты: {json}", return incomeDict.Select(x =>
// JsonConvert.SerializeObject(incomesBudget)); {
// return incomesBudget.GroupBy(x => x.Id, y => y, (key, value) => IncomeBudget.CreateOperation(value.First(), var pi = incomesBudget.First(y => y.Id == x.Key);
// value.Select(z => FamilyMember_IncomeBudget.CreateElement(0, z.IncomeBudgetCategoryID, z.Id, z.Sum)))).ToList(); pi.SetIncomeBudget(x.Value);
return null; return pi;
}).ToArray();
} }
catch (Exception ex) catch (Exception ex)
{ {