51 lines
1.7 KiB
C#

using Microsoft.Extensions.Logging;
using ProjectFamilyBudget.Entities;
using ProjectFamilyBudget.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectFamilyBudget.Reports;
public class ChartReport
{
private readonly IPeopleExpense _peopleExpense;
private readonly ILogger<ChartReport> _logger;
public ChartReport(IPeopleExpense peopleExpense, ILogger<ChartReport> logger)
{
_peopleExpense = peopleExpense ?? throw new ArgumentNullException(nameof(peopleExpense));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public bool CreateChart(string filePath, int expenseId, DateTime dateTime)
{
try
{
new PdfBuilder(filePath)
.AddHeader("Траты людей")
.AddPieChart($"Траты за {dateTime:dd MMMM yyyy}", GetData(expenseId, dateTime))
.Build();
return true;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при формировании документа");
return false;
}
}
private List<(string Caption, double Value)> GetData(int expenseId, DateTime dateTime)
{
return _peopleExpense
.ReadPeopleExpense(dateForm: dateTime.Date, dateTo: dateTime.Date.AddDays(1),expenseId: expenseId)
.GroupBy(x => x.PeopleName, (key, group) => new
{
PeopleName = key,
Count = group.Sum(x => x.ExpensePeopleExpenses.FirstOrDefault(y => y.ExpenseId == expenseId)?.Sum ?? 0)
})
.Select(x => (x.PeopleName, (double)x.Count))
.ToList();
}
}