PIbd-22. Tukhtarov I.N. Lab_4 #4
@ -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,15 @@ namespace FamilyBudget.Entities
|
||||
public class ExpenseBudget
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
[Browsable(false)]
|
||||
public int FamilyMemberId { get; private set; }
|
||||
[DisplayName("Участник")]
|
||||
public string FullName { get; private set; } = string.Empty;
|
||||
[DisplayName("Дата")]
|
||||
public DateTime Date { get; private set; }
|
||||
public string Expenses => FamilyMember_Expenses != null ?
|
||||
string.Join(", ", FamilyMember_Expenses.Select(x => $"{x.ExpenseName} {x.Sum}")) : string.Empty;
|
||||
[Browsable(false)]
|
||||
public IEnumerable<FamilyMember_ExpenseBudget> FamilyMember_Expenses { get; private set; } = [];
|
||||
|
||||
public static ExpenseBudget СreateOperation(int id, int familyMemberId, IEnumerable<FamilyMember_ExpenseBudget> familyMember_Expenses)
|
||||
@ -24,15 +32,13 @@ namespace FamilyBudget.Entities
|
||||
};
|
||||
}
|
||||
|
||||
public static ExpenseBudget CreateOperation(TempExpenseBudgetMember tempExpenseBudgetMember, IEnumerable<FamilyMember_ExpenseBudget> FamilyMember_Expenses)
|
||||
public void SetExpenseBudget(IEnumerable<FamilyMember_ExpenseBudget> familyMember_Expenses)
|
||||
{
|
||||
return new ExpenseBudget
|
||||
if (familyMember_Expenses != null && familyMember_Expenses.Any())
|
||||
{
|
||||
Id = tempExpenseBudgetMember.Id,
|
||||
FamilyMemberId = tempExpenseBudgetMember.FamilyMemberId,
|
||||
Date = tempExpenseBudgetMember.Date,
|
||||
FamilyMember_Expenses = FamilyMember_Expenses
|
||||
};
|
||||
FamilyMember_Expenses = familyMember_Expenses;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
using FamilyBudget.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 FamilyBudget.Entities
|
||||
public class ExpenseBudgetCategory
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
[DisplayName("Тип расхода")]
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
[DisplayName("Название")]
|
||||
public ExpenseCategoryType ExpenseCategoryType { get; private set; }
|
||||
[DisplayName("Категория")]
|
||||
public static ExpenseBudgetCategory CreateEntity(int id, string name, ExpenseCategoryType expenseCategoryType)
|
||||
{
|
||||
return new ExpenseBudgetCategory
|
||||
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@ -9,6 +10,7 @@ namespace FamilyBudget.Entities
|
||||
public class Family
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
[DisplayName("Фамилия")]
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
public static Family CreateEntity(int id, string name)
|
||||
{
|
||||
|
@ -1,6 +1,8 @@
|
||||
using FamilyBudget.Entities.Enums;
|
||||
using DocumentFormat.OpenXml.Wordprocessing;
|
||||
using FamilyBudget.Entities.Enums;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@ -10,8 +12,15 @@ namespace FamilyBudget.Entities
|
||||
public class FamilyMember
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[DisplayName("Имя")]
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
[Browsable(false)]
|
||||
public int FamilyId { get; private set; }
|
||||
[DisplayName("Семья")]
|
||||
public string FamilyName { get; private set; } = string.Empty;
|
||||
public string FullName => $"{Name} {FamilyName}";
|
||||
|
||||
[DisplayName("Член семьи")]
|
||||
public FamilyMemberType MemberType { get; private set; }
|
||||
|
||||
public static FamilyMember CreateEntity(int id, string name, int familyId, FamilyMemberType memberType)
|
||||
|
@ -10,14 +10,15 @@ namespace FamilyBudget.Entities
|
||||
{
|
||||
public int Id { 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 string ExpenseName { get; private set; } = string.Empty;
|
||||
public static FamilyMember_ExpenseBudget CreateElement(int id, int expenseCategoryID, int expenseBudgetId, int sum)
|
||||
{
|
||||
return new FamilyMember_ExpenseBudget()
|
||||
{
|
||||
Id = id,
|
||||
ExpenseCategoryID = expenseCategoryID,
|
||||
ExpenseBudgetCategoryID = expenseCategoryID,
|
||||
ExpenseBudgetId = expenseBudgetId,
|
||||
Sum = sum
|
||||
};
|
||||
|
@ -12,6 +12,7 @@ namespace FamilyBudget.Entities
|
||||
public int IncomeBudgetId { get; private set;}
|
||||
public int IncomeBudgetCategoryId { get; private set; }
|
||||
public int Sum { get; private set; }
|
||||
public string IncomeName { get; private set; } = string.Empty;
|
||||
public static FamilyMember_IncomeBudget CreateElement(int id, int incomeBudgetCategoryId, int incomeBudgetId, int sum)
|
||||
{
|
||||
return new FamilyMember_IncomeBudget()
|
||||
|
@ -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 FamilyBudget.Entities
|
||||
public class IncomeBudget
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
[Browsable(false)]
|
||||
public int FamilyMemberId { get; private set; }
|
||||
[DisplayName("Участник")]
|
||||
public string FullName { get; private set; } = string.Empty;
|
||||
[DisplayName("Дата")]
|
||||
public DateTime Date { get; private set; }
|
||||
[DisplayName("Доходы")]
|
||||
public string Incomes => FamilyMember_Incomes != null ?
|
||||
string.Join(", ", FamilyMember_Incomes.Select(x => $"{x.IncomeName} {x.Sum}")) : string.Empty;
|
||||
[Browsable(false)]
|
||||
public IEnumerable<FamilyMember_IncomeBudget> FamilyMember_Incomes { get; private set; } = [];
|
||||
|
||||
public static IncomeBudget CreateOperation(int id, int familyMemberId, IEnumerable<FamilyMember_IncomeBudget> FamilyMember_Incomes)
|
||||
@ -24,15 +33,13 @@ namespace FamilyBudget.Entities
|
||||
};
|
||||
}
|
||||
|
||||
public static IncomeBudget CreateOperation(TempIncomeBudgetMember tempIncomeBudgetMember, IEnumerable<FamilyMember_IncomeBudget> FamilyMember_Incomes)
|
||||
public void SetIncomeBudget(IEnumerable<FamilyMember_IncomeBudget> familyMember_Incomes)
|
||||
{
|
||||
return new IncomeBudget
|
||||
if (familyMember_Incomes != null && familyMember_Incomes.Any())
|
||||
{
|
||||
Id = tempIncomeBudgetMember.Id,
|
||||
FamilyMemberId = tempIncomeBudgetMember.FamilyMemberId,
|
||||
FamilyMember_Incomes = FamilyMember_Incomes,
|
||||
Date = tempIncomeBudgetMember.Date
|
||||
};
|
||||
FamilyMember_Incomes = familyMember_Incomes;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
using FamilyBudget.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 FamilyBudget.Entities
|
||||
public class IncomeBudgetCategory
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
[DisplayName("Тип дохода")]
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
[DisplayName("Название")]
|
||||
public IncomeCategoryType IncomeCategoryType { get; private set; }
|
||||
[DisplayName("Категория")]
|
||||
public static IncomeBudgetCategory CreateEntity(int id, string name, IncomeCategoryType incomeCategoryType)
|
||||
{
|
||||
return new IncomeBudgetCategory
|
||||
|
@ -1,18 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FamilyBudget.Entities
|
||||
{
|
||||
public class TempExpenseBudgetMember
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
public int FamilyMemberId { get; private set; }
|
||||
public int ExpenseBudgetCategoryID { get; private set; }
|
||||
public int ExpenseBudgetId { get; private set; }
|
||||
public DateTime Date { get; private set; }
|
||||
public int Sum { get; private set; }
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FamilyBudget.Entities
|
||||
{
|
||||
public class TempIncomeBudgetMember
|
||||
{
|
||||
public int Id { get; private set; }
|
||||
public int FamilyMemberId { get; private set; }
|
||||
public int IncomeBudgetId { get; private set; }
|
||||
public int IncomeBudgetCategoryID { get; private set; }
|
||||
public DateTime Date { get; private set; }
|
||||
public int Sum { get; private set; }
|
||||
}
|
||||
}
|
@ -91,7 +91,11 @@ namespace FamilyBudget.Forms
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadList() => dataGridViewExpanses.DataSource = _expenseBudgetCategoryRepository.ReadExpenseBudgetCategories();
|
||||
private void LoadList()
|
||||
{
|
||||
dataGridViewExpanses.DataSource = _expenseBudgetCategoryRepository.ReadExpenseBudgetCategories();
|
||||
dataGridViewExpanses.Columns["id"].Visible = false;
|
||||
}
|
||||
|
||||
private bool TryGetIdentifierFromSelectedRow(out int id)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
id = 0;
|
||||
|
@ -23,7 +23,7 @@ namespace FamilyBudget.Forms
|
||||
_expenseBudgetRepository = expenseBudgetRepository ?? throw new ArgumentNullException(nameof(
|
||||
expenseBudgetRepository));
|
||||
comboBoxFamilyMember.DataSource = familyMemberRepository.ReadFamilyMembers();
|
||||
comboBoxFamilyMember.DisplayMember = "Name";
|
||||
comboBoxFamilyMember.DisplayMember = "FullName";
|
||||
comboBoxFamilyMember.ValueMember = "Id";
|
||||
|
||||
ColumnExpanseName.DataSource = expenses.ReadExpenseBudgetCategories();
|
||||
|
@ -72,7 +72,12 @@ namespace FamilyBudget.Forms
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadList() => dataGridViewExpenses.DataSource = _expenseBudgetRepository.ReadExpenseBudgets();
|
||||
private void LoadList()
|
||||
{
|
||||
dataGridViewExpenses.DataSource = _expenseBudgetRepository.ReadExpenseBudgets();
|
||||
dataGridViewExpenses.Columns["id"].Visible = false;
|
||||
dataGridViewExpenses.Columns["date"].DefaultCellStyle.Format = "dd MMMM yyyy";
|
||||
}
|
||||
|
||||
private bool TryGetIdentifierFromSelectedRow(out int id)
|
||||
{
|
||||
|
@ -23,7 +23,7 @@ namespace FamilyBudget.Forms
|
||||
_incomeBudgetRepository = incomeBudgetRepository ?? throw new ArgumentNullException(nameof(
|
||||
incomeBudgetRepository));
|
||||
comboBoxFamilyMember.DataSource = familyMemberRepository.ReadFamilyMembers();
|
||||
comboBoxFamilyMember.DisplayMember = "Name";
|
||||
comboBoxFamilyMember.DisplayMember = "FullName";
|
||||
comboBoxFamilyMember.ValueMember = "Id";
|
||||
|
||||
ColumnIncomeName.DataSource = incomes.ReadIncomeBudgetCategories();
|
||||
|
@ -59,7 +59,12 @@ namespace FamilyBudget.Forms
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadList() => dataGridViewIncomes.DataSource = _incomeBudgetRepository.ReadIncomeBudgets();
|
||||
private void LoadList()
|
||||
{
|
||||
dataGridViewIncomes.DataSource = _incomeBudgetRepository.ReadIncomeBudgets();
|
||||
dataGridViewIncomes.Columns["id"].Visible = false;
|
||||
dataGridViewIncomes.Columns["date"].DefaultCellStyle.Format = "dd MMMM yyyy";
|
||||
}
|
||||
|
||||
private bool TryGetIdentifierFromSelectedRow(out int id)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
id = 0;
|
||||
|
@ -95,6 +95,7 @@
|
||||
dataGridViewIncomes.Name = "dataGridViewIncomes";
|
||||
dataGridViewIncomes.ReadOnly = true;
|
||||
dataGridViewIncomes.RowHeadersVisible = false;
|
||||
dataGridViewIncomes.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
|
||||
dataGridViewIncomes.Size = new Size(664, 450);
|
||||
dataGridViewIncomes.TabIndex = 1;
|
||||
//
|
||||
|
@ -90,7 +90,11 @@ namespace FamilyBudget.Forms
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadList() => dataGridViewIncomes.DataSource = _incomeBudgetCategoryRepository.ReadIncomeBudgetCategories();
|
||||
private void LoadList()
|
||||
{
|
||||
dataGridViewIncomes.DataSource = _incomeBudgetCategoryRepository.ReadIncomeBudgetCategories();
|
||||
dataGridViewIncomes.Columns["id"].Visible = false;
|
||||
}
|
||||
|
||||
private bool TryGetIdentifierFromSelectedRow(out int id)
|
||||
{
|
||||
|
@ -29,7 +29,7 @@ namespace FamilyBudget.Reports
|
||||
{
|
||||
new PdfBuilder(filePath)
|
||||
.AddHeader("Расходы")
|
||||
.AddPieChart("Выбранные категории", GetData(expenseId, dateTime))
|
||||
.AddPieChart($"Траты за {dateTime:dd MMMM yyyy}", GetData(expenseId, dateTime))
|
||||
.Build();
|
||||
return true;
|
||||
}
|
||||
@ -42,13 +42,12 @@ namespace FamilyBudget.Reports
|
||||
private List<(string Caption, double Value)> GetData(int expenseId, DateTime dateTime)
|
||||
{
|
||||
var data = _expenseBudget
|
||||
.ReadExpenseBudgets()
|
||||
.Where(x => x.Date.Date == dateTime.Date)
|
||||
.ReadExpenseBudgets(dateFrom: dateTime.Date, dateTo: dateTime.Date.AddDays(1), BudgetExpenseId: expenseId)
|
||||
.GroupBy(x => x.FamilyMemberId, (key, group) => new {
|
||||
Id = key,
|
||||
Count = group.Sum(x => x.FamilyMember_Expenses.FirstOrDefault(x => x.ExpenseCategoryID == expenseId)?.Sum ?? 0)
|
||||
FullName = group.FirstOrDefault()?.FullName ?? "Unknown",
|
||||
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.FullName.ToString(), (double)x.Count))
|
||||
.ToList();
|
||||
|
||||
return data;
|
||||
|
@ -35,11 +35,10 @@ namespace FamilyBudget.Reports
|
||||
return this;
|
||||
}
|
||||
|
||||
// Подрезаем длинные подписи и фильтруем слишком малые значения
|
||||
data = data
|
||||
.Where(x => x.Value > 0.01) // Исключить слишком маленькие значения
|
||||
.Where(x => x.Value > 0.01)
|
||||
.Select(x => (
|
||||
Caption: x.Caption.Length > 10 ? x.Caption.Substring(0, 10) + "..." : x.Caption,
|
||||
Caption: x.Caption,
|
||||
Value: x.Value
|
||||
)).ToList();
|
||||
|
||||
|
@ -34,7 +34,7 @@ namespace FamilyBudget.Reports
|
||||
{
|
||||
new ExcelBuilder(filePath)
|
||||
.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))
|
||||
.Build();
|
||||
return true;
|
||||
@ -50,22 +50,20 @@ namespace FamilyBudget.Reports
|
||||
{
|
||||
_logger.LogDebug("{json}", JsonConvert.SerializeObject(_expenseBudgetRepository.ReadExpenseBudgets()));
|
||||
var expenseData = _expenseBudgetRepository
|
||||
.ReadExpenseBudgets()
|
||||
.Where(x => x.Date >= startDate && x.Date <= endDate && x.FamilyMember_Expenses.Any(y => y.ExpenseCategoryID == expenseId))
|
||||
.ReadExpenseBudgets(dateFrom: startDate, dateTo: endDate, BudgetExpenseId: expenseId)
|
||||
.Select(x => new
|
||||
{
|
||||
x.FamilyMemberId,
|
||||
x.FullName,
|
||||
x.Date,
|
||||
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
|
||||
.ReadIncomeBudgets()
|
||||
.Where(x => x.Date >= startDate && x.Date <= endDate && x.FamilyMember_Incomes.Any(y => y.IncomeBudgetCategoryId == incomeId))
|
||||
.ReadIncomeBudgets(dateFrom: startDate, dateTo: endDate, BudgetIncomeId: incomeId)
|
||||
.Select(x => new
|
||||
{
|
||||
x.FamilyMemberId,
|
||||
x.FullName,
|
||||
x.Date,
|
||||
CountIn = x.FamilyMember_Incomes.FirstOrDefault(y => y.IncomeBudgetCategoryId == incomeId)?.Sum,
|
||||
CountOut = (int?)null,
|
||||
@ -77,15 +75,10 @@ namespace FamilyBudget.Reports
|
||||
|
||||
return new List<string[]>(){ item }
|
||||
.Union(
|
||||
data.Select(x => new string[] {
|
||||
x.FamilyMemberId.ToString(), x.Date.ToString(), x.CountIn?.ToString() ??
|
||||
string.Empty, x.CountOut?.ToString() ?? string.Empty
|
||||
})
|
||||
)
|
||||
data.Select(x => new string[] {x.FullName, x.Date.ToString("dd.MM.yyyy"), x.CountIn?.ToString("N0") ?? string.Empty,
|
||||
x.CountOut?.ToString("N0") ?? string.Empty }))
|
||||
.Union(
|
||||
[["Всего", "", data.Sum(x => x.CountIn ?? 0).ToString(),
|
||||
data.Sum(x => x.CountOut ?? 0).ToString()]]
|
||||
)
|
||||
[["Всего", "", data.Sum(x => x.CountIn ?? 0).ToString("N0"), data.Sum(x => x.CountOut ?? 0).ToString("N0")]])
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ using FamilyBudget.Entities;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using Npgsql;
|
||||
using ProjectFamilyBudget.Repositories.Implementations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -49,7 +50,7 @@ namespace FamilyBudget.Repositories.Implementations
|
||||
ExpenseBudgetId = expenseBudgetId,
|
||||
expenseBudget.FamilyMemberId,
|
||||
elem.Sum,
|
||||
ExpensebudgetCategoryId = elem.ExpenseCategoryID
|
||||
ExpensebudgetCategoryId = elem.ExpenseBudgetCategoryID
|
||||
}, transaction);
|
||||
}
|
||||
|
||||
@ -93,22 +94,70 @@ namespace FamilyBudget.Repositories.Implementations
|
||||
public IEnumerable<ExpenseBudget> ReadExpenseBudgets(DateTime? dateFrom = null, DateTime? dateTo = null,
|
||||
int? familyMemberId = null, int? BudgetExpenseId = null)
|
||||
{
|
||||
_logger.LogInformation("Получение всех объектов");
|
||||
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);
|
||||
var querySelect = @"SELECT eb.*, fmeb.expensebudgetId, fmeb.sum, fmeb.ExpensebudgetCategoryId FROM ExpenseBudget eb
|
||||
INNER JOIN familymember_expensebudget fmeb on fmeb.expensebudgetid = eb.id";
|
||||
var expensesBudget = connection.Query<TempExpenseBudgetMember>(querySelect);
|
||||
var querySelect = $@"SELECT
|
||||
eb.Id,
|
||||
eb.FamilyMemberId,
|
||||
CONCAT(fm.Name, ' ', f.Name) AS FullName,
|
||||
eb.Date,
|
||||
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(expensesBudget));
|
||||
return expensesBudget.GroupBy(x => x.Id, y => y, (key, value) => ExpenseBudget.CreateOperation(value.First(),
|
||||
value.Select(z => FamilyMember_ExpenseBudget.CreateElement(0, z.ExpenseBudgetCategoryID, z.Id, z.Sum)))).ToList();
|
||||
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)
|
||||
{
|
||||
_logger.LogError(ex, "Ошибка при чтении объектов");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace FamilyBudget.Repositories.Implementations
|
||||
{
|
||||
@ -93,7 +94,8 @@ namespace FamilyBudget.Repositories.Implementations
|
||||
try
|
||||
{
|
||||
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var querySelect = "SELECT * FROM FamilyMember";
|
||||
var querySelect = @"SELECT fm.*, f.name as FamilyName
|
||||
FROM FamilyMember fm left join family f on f.id = fm.familyid";
|
||||
var familyMembers = connection.Query<FamilyMember>(querySelect);
|
||||
_logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(familyMembers));
|
||||
return familyMembers;
|
||||
|
@ -1,8 +1,10 @@
|
||||
using Dapper;
|
||||
using DocumentFormat.OpenXml.Office2013.Word;
|
||||
using FamilyBudget.Entities;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
using Npgsql;
|
||||
using ProjectFamilyBudget.Repositories.Implementations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -94,15 +96,61 @@ namespace FamilyBudget.Repositories.Implementations
|
||||
_logger.LogInformation("Получение всех объектов");
|
||||
try
|
||||
{
|
||||
var builder = new QueryBuilder();
|
||||
if (dateFrom.HasValue)
|
||||
{
|
||||
builder.AddCondition("ib.Date >= @dateFrom");
|
||||
}
|
||||
if (dateTo.HasValue)
|
||||
{
|
||||
builder.AddCondition("ib.Date <= @dateTo");
|
||||
}
|
||||
if (familyMemberId.HasValue)
|
||||
{
|
||||
builder.AddCondition("ib.familyMemberId = @familyMemberId");
|
||||
}
|
||||
if (BudgetIncomeId.HasValue)
|
||||
{
|
||||
builder.AddCondition("fmib.IncomeBudgetCategoryId = @BudgetIncomeId");
|
||||
}
|
||||
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
|
||||
var querySelect = @"SELECT ib.*, fmib.incomebudgetId, fmib.sum, fmib.incomebudgetcategoryid FROM incomeBudget ib
|
||||
INNER JOIN familymember_incomebudget fmib on fmib.incomebudgetid = ib.id";
|
||||
var incomesBudget = connection.Query<TempIncomeBudgetMember>(querySelect);
|
||||
var querySelect = $@"SELECT
|
||||
ib.Id,
|
||||
ib.FamilyMemberId,
|
||||
CONCAT(fm.Name, ' ', f.Name) AS FullName,
|
||||
ib.Date,
|
||||
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()}";
|
||||
var incomeDict = new Dictionary<int, List<FamilyMember_IncomeBudget>>();
|
||||
var incomesBudget = connection.Query<IncomeBudget, FamilyMember_IncomeBudget, IncomeBudget>(querySelect,
|
||||
(income, fmIncome) =>
|
||||
{
|
||||
if (!incomeDict.TryGetValue(income.Id, out var fmi))
|
||||
{
|
||||
fmi = [];
|
||||
incomeDict.Add(income.Id, fmi);
|
||||
}
|
||||
|
||||
fmi.Add(fmIncome);
|
||||
return income;
|
||||
}, splitOn: "IncomeBudgetCategoryId", param: new { dateFrom, dateTo, familyMemberId, BudgetIncomeId });
|
||||
_logger.LogDebug("Полученные объекты: {json}",
|
||||
JsonConvert.SerializeObject(incomesBudget));
|
||||
return incomesBudget.GroupBy(x => x.Id, y => y, (key, value) => IncomeBudget.CreateOperation(value.First(),
|
||||
value.Select(z => FamilyMember_IncomeBudget.CreateElement(0, z.IncomeBudgetCategoryID, z.Id, z.Sum)))).ToList();
|
||||
JsonConvert.SerializeObject(incomesBudget));
|
||||
|
||||
return incomeDict.Select(x =>
|
||||
{
|
||||
var pi = incomesBudget.First(y => y.Id == x.Key);
|
||||
pi.SetIncomeBudget(x.Value);
|
||||
return pi;
|
||||
}).ToArray();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ProjectFamilyBudget.Repositories.Implementations;
|
||||
|
||||
public class QueryBuilder
|
||||
{
|
||||
private readonly StringBuilder _builder;
|
||||
public QueryBuilder()
|
||||
{
|
||||
_builder = new();
|
||||
}
|
||||
public QueryBuilder AddCondition(string condition)
|
||||
{
|
||||
if (_builder.Length > 0)
|
||||
{
|
||||
_builder.Append(" AND ");
|
||||
}
|
||||
_builder.Append(condition);
|
||||
return this;
|
||||
}
|
||||
public string Build()
|
||||
{
|
||||
if (_builder.Length == 0)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
return $"WHERE {_builder}";
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user