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)>();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|