46 lines
1.7 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|