46 lines
1.7 KiB
C#

using Microsoft.Extensions.Logging;
using ProjectOptika.Scripts.Repositories;
namespace ProjectOptika.Scripts.Reports
{
internal class ChartReport
{
private readonly IOrderRepository _orderRepository;
private readonly ILogger<ChartReport> _logger;
public ChartReport(IOrderRepository orderRepository,
ILogger<ChartReport> logger)
{
_orderRepository = orderRepository ??
throw new ArgumentNullException(nameof(orderRepository));
_logger = logger ??
throw new ArgumentNullException(nameof(logger));
}
public bool CreateChart(string filePath, DateTime dateTime)
{
try
{
new PdfBuilder(filePath)
.AddHeader("Учет оплат клиентов")
.AddPieChart($"Оплаты клиентов за {dateTime: dd MMMM yyyy}", GetData(dateTime))
.Build();
return true;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при формировании документа");
return false;
}
}
private List<(string Caption, double Value)> GetData(DateTime dateTime)
{
return _orderRepository.GetOrders(startDate: dateTime.Date, endDate: dateTime.Date.AddDays(1))
.GroupBy(x => x.ClientFullName, (key, group) => new {
Client = key,
Count = group.Sum(x => x.TotalCost)
})
.Select(x => (x.Client, (double)x.Count))
.ToList();
}
}
}