use events for budget calculation (#2544)

This commit is contained in:
Kevin Papst
2021-04-29 11:50:48 +02:00
committed by GitHub
parent bb94b11e37
commit e4b176a4d5
30 changed files with 384 additions and 92 deletions

View File

@@ -17,7 +17,7 @@ use App\Event\ProjectMetaDisplayEvent;
use App\Event\TimesheetMetaDisplayEvent;
use App\Event\UserPreferenceDisplayEvent;
use App\Export\ExportItemInterface;
use App\Repository\ProjectRepository;
use App\Project\ProjectStatisticService;
use App\Repository\Query\CustomerQuery;
use App\Repository\Query\TimesheetQuery;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
@@ -37,9 +37,9 @@ class HtmlRenderer
*/
protected $dispatcher;
/**
* @var ProjectRepository
* @var ProjectStatisticService
*/
private $projectRepository;
private $projectStatisticService;
/**
* @var string
*/
@@ -49,11 +49,11 @@ class HtmlRenderer
*/
private $template = 'default.html.twig';
public function __construct(Environment $twig, EventDispatcherInterface $dispatcher, ProjectRepository $projectRepository)
public function __construct(Environment $twig, EventDispatcherInterface $dispatcher, ProjectStatisticService $projectStatisticService)
{
$this->twig = $twig;
$this->dispatcher = $dispatcher;
$this->projectRepository = $projectRepository;
$this->projectStatisticService = $projectStatisticService;
}
/**
@@ -107,7 +107,7 @@ class HtmlRenderer
'entries' => $timesheets,
'query' => $query,
'summaries' => $summary,
'budgets' => $this->calculateProjectBudget($timesheets, $query, $this->projectRepository),
'budgets' => $this->calculateProjectBudget($timesheets, $query, $this->projectStatisticService),
// @deprecated since 1.3, will be removed with 2.0
'metaColumns' => $timesheetMetaFields,
'timesheetMetaFields' => $timesheetMetaFields,

View File

@@ -11,7 +11,7 @@ namespace App\Export\Base;
use App\Export\ExportContext;
use App\Export\ExportItemInterface;
use App\Repository\ProjectRepository;
use App\Project\ProjectStatisticService;
use App\Repository\Query\TimesheetQuery;
use App\Utils\FileHelper;
use App\Utils\HtmlToPdfConverter;
@@ -32,9 +32,9 @@ class PDFRenderer
*/
private $converter;
/**
* @var ProjectRepository
* @var ProjectStatisticService
*/
private $projectRepository;
private $projectStatisticService;
/**
* @var string
*/
@@ -48,11 +48,11 @@ class PDFRenderer
*/
private $pdfOptions = [];
public function __construct(Environment $twig, HtmlToPdfConverter $converter, ProjectRepository $projectRepository)
public function __construct(Environment $twig, HtmlToPdfConverter $converter, ProjectStatisticService $projectRepository)
{
$this->twig = $twig;
$this->converter = $converter;
$this->projectRepository = $projectRepository;
$this->projectStatisticService = $projectRepository;
}
protected function getTemplate(): string
@@ -104,7 +104,7 @@ class PDFRenderer
// @deprecated since 1.13
'now' => new \DateTime('now', new \DateTimeZone(date_default_timezone_get())),
'summaries' => $summary,
'budgets' => $this->calculateProjectBudget($timesheets, $query, $this->projectRepository),
'budgets' => $this->calculateProjectBudget($timesheets, $query, $this->projectStatisticService),
'decimal' => false,
'pdfContext' => $context
], $this->getOptions($query)));

View File

@@ -10,7 +10,7 @@
namespace App\Export\Base;
use App\Export\ExportItemInterface;
use App\Repository\ProjectRepository;
use App\Project\ProjectStatisticService;
use App\Repository\Query\TimesheetQuery;
trait RendererTrait
@@ -124,10 +124,10 @@ trait RendererTrait
/**
* @param ExportItemInterface[] $exportItems
* @param TimesheetQuery $query
* @param ProjectRepository $projectRepository
* @param ProjectStatisticService $projectStatisticService
* @return array
*/
protected function calculateProjectBudget(array $exportItems, TimesheetQuery $query, ProjectRepository $projectRepository)
protected function calculateProjectBudget(array $exportItems, TimesheetQuery $query, ProjectStatisticService $projectStatisticService)
{
$summary = [];
@@ -154,7 +154,7 @@ trait RendererTrait
];
if (null !== $project && ($project->getTimeBudget() > 0 || $project->getBudget() > 0)) {
$projectStats = $projectRepository->getProjectStatistics($project, null, $query->getEnd());
$projectStats = $projectStatisticService->getProjectStatistics($project, $query->getEnd());
if ($project->getTimeBudget() > 0) {
$summary[$id]['time_left'] = $project->getTimeBudget() - $projectStats->getRecordDuration();