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 _logger; public ChartReport(IPeopleExpense peopleExpense, ILogger 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(dateTime.Date, dateTime.Date.AddDays(1), 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(); } }