PIBD14-Boyko-M.S.-GSM-Autot.../ProjectGSM/Documents/ChartReport.cs

71 lines
2.6 KiB
C#
Raw Permalink Normal View History

2024-12-03 00:34:28 +04:00
using Microsoft.Extensions.Logging;
using ProjectGSM.Repositories;
namespace ProjectGSM.Documents;
public class ChartReport
{
private readonly ICaseRepository _caseRepository;
private readonly ICaseAdvocateRepository _caseAdvocateRepository;
private readonly IAdvocateRepository _advocateRepository;
private readonly ILogger<ChartReport> _logger;
public ChartReport(ICaseRepository caseRepository,
IAdvocateRepository advocateRepository,
ICaseAdvocateRepository caseAdvocateRepository,
ILogger<ChartReport> logger)
{
_caseRepository = caseRepository ??
throw new
ArgumentNullException(nameof(caseRepository));
_advocateRepository = advocateRepository ??
throw new ArgumentNullException(nameof(advocateRepository));
_caseAdvocateRepository = caseAdvocateRepository ??
throw new ArgumentNullException(nameof(caseAdvocateRepository));
_logger = logger ??
throw new ArgumentNullException(nameof(logger));
}
public bool CreateChart(string filePath, DateTime dateTime)
{
try
{
new PdfBuilder(filePath)
.AddHeader("Доля выручки адвоката")
.AddPieChart($"Всего до: {dateTime.Date}", GetData(dateTime))
.Build();
return true;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при формировании документа");
return false;
}
}
2024-12-03 00:34:57 +04:00
private List<(string, double)> GetData(DateTime dateTime)
2024-12-03 00:34:28 +04:00
{
try
{
2024-12-17 01:21:56 +04:00
return _caseAdvocateRepository
.ReadCaseAdvocates(dateTo: dateTime.Date.AddDays(1))
.Join(_caseRepository.ReadCases(dateTime.Date.AddDays(1)),
caseItem => caseItem.CaseId,
caseCaseId => caseCaseId.Id,
(caseItem, caseCase) => new
{
caseItem.AdvocateName, caseCase.Payment, caseCase.Verdict, caseCase.Price, caseCase.VictoryPrice
})
.GroupBy(x => x.AdvocateName)
.Select(g => (g.Key,
Sum: g.Sum(x =>
x.Payment ? (x.Verdict ? (double)(x.Price + x.VictoryPrice) : (double)x.Price) : 0)))
2024-12-03 00:34:28 +04:00
.ToList();
}
catch (Exception ex)
{
_logger.LogError(ex, "Error occurred while calculating advocate earnings");
return new List<(string, double)>();
}
}
}