diff --git a/src/Activity/ActivityStatisticService.php b/src/Activity/ActivityStatisticService.php new file mode 100644 index 00000000..ddd8ec14 --- /dev/null +++ b/src/Activity/ActivityStatisticService.php @@ -0,0 +1,40 @@ +repository = $activityRepository; + $this->dispatcher = $dispatcher; + } + + public function getActivityStatistics(Activity $activity): ActivityStatistic + { + $statistic = $this->repository->getActivityStatistics($activity); + $event = new ActivityStatisticEvent($activity, $statistic); + $this->dispatcher->dispatch($event); + + return $statistic; + } +} diff --git a/src/Controller/ActivityController.php b/src/Controller/ActivityController.php index f2ab91fd..c6acf53d 100644 --- a/src/Controller/ActivityController.php +++ b/src/Controller/ActivityController.php @@ -10,6 +10,7 @@ namespace App\Controller; use App\Activity\ActivityService; +use App\Activity\ActivityStatisticService; use App\Configuration\SystemConfiguration; use App\Entity\Activity; use App\Entity\ActivityRate; @@ -114,7 +115,7 @@ final class ActivityController extends AbstractController * @Route(path="/{id}/details", name="activity_details", methods={"GET", "POST"}) * @Security("is_granted('view', activity)") */ - public function detailsAction(Activity $activity, TeamRepository $teamRepository, ActivityRateRepository $rateRepository) + public function detailsAction(Activity $activity, TeamRepository $teamRepository, ActivityRateRepository $rateRepository, ActivityStatisticService $statisticService) { $event = new ActivityMetaDefinitionEvent($activity); $this->dispatcher->dispatch($event); @@ -132,7 +133,7 @@ final class ActivityController extends AbstractController } if ($this->isGranted('budget', $activity)) { - $stats = $this->repository->getActivityStatistics($activity); + $stats = $statisticService->getActivityStatistics($activity); } if ($this->isGranted('permissions', $activity) || $this->isGranted('details', $activity) || $this->isGranted('view_team')) { @@ -308,9 +309,9 @@ final class ActivityController extends AbstractController * @Route(path="/{id}/delete", name="admin_activity_delete", methods={"GET", "POST"}) * @Security("is_granted('delete', activity)") */ - public function deleteAction(Activity $activity, Request $request) + public function deleteAction(Activity $activity, Request $request, ActivityStatisticService $statisticService) { - $stats = $this->repository->getActivityStatistics($activity); + $stats = $statisticService->getActivityStatistics($activity); $deleteForm = $this->createFormBuilder(null, [ 'attr' => [ diff --git a/src/Controller/CustomerController.php b/src/Controller/CustomerController.php index 08f79c7f..f185dea1 100644 --- a/src/Controller/CustomerController.php +++ b/src/Controller/CustomerController.php @@ -10,6 +10,7 @@ namespace App\Controller; use App\Configuration\SystemConfiguration; +use App\Customer\CustomerStatisticService; use App\Entity\Customer; use App\Entity\CustomerComment; use App\Entity\CustomerRate; @@ -268,7 +269,7 @@ final class CustomerController extends AbstractController * @Route(path="/{id}/details", name="customer_details", methods={"GET", "POST"}) * @Security("is_granted('view', customer)") */ - public function detailsAction(Customer $customer, TeamRepository $teamRepository, CustomerRateRepository $rateRepository) + public function detailsAction(Customer $customer, TeamRepository $teamRepository, CustomerRateRepository $rateRepository, CustomerStatisticService $statisticService) { $event = new CustomerMetaDefinitionEvent($customer); $this->dispatcher->dispatch($event); @@ -295,7 +296,7 @@ final class CustomerController extends AbstractController } if ($this->isGranted('budget', $customer)) { - $stats = $this->repository->getCustomerStatistics($customer); + $stats = $statisticService->getCustomerStatistics($customer); } if ($this->isGranted('comments', $customer)) { @@ -370,9 +371,9 @@ final class CustomerController extends AbstractController * @Route(path="/{id}/delete", name="admin_customer_delete", methods={"GET", "POST"}) * @Security("is_granted('delete', customer)") */ - public function deleteAction(Customer $customer, Request $request) + public function deleteAction(Customer $customer, Request $request, CustomerStatisticService $statisticService) { - $stats = $this->repository->getCustomerStatistics($customer); + $stats = $statisticService->getCustomerStatistics($customer); $deleteForm = $this->createFormBuilder(null, [ 'attr' => [ diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index eb7b5c52..77ce0a18 100644 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -30,6 +30,7 @@ use App\Form\Toolbar\ProjectToolbarForm; use App\Form\Type\ProjectType; use App\Project\ProjectDuplicationService; use App\Project\ProjectService; +use App\Project\ProjectStatisticService; use App\Repository\ActivityRepository; use App\Repository\ProjectRateRepository; use App\Repository\ProjectRepository; @@ -291,7 +292,7 @@ final class ProjectController extends AbstractController * @Route(path="/{id}/details", name="project_details", methods={"GET", "POST"}) * @Security("is_granted('view', project)") */ - public function detailsAction(Project $project, TeamRepository $teamRepository, ProjectRateRepository $rateRepository) + public function detailsAction(Project $project, TeamRepository $teamRepository, ProjectRateRepository $rateRepository, ProjectStatisticService $statisticService) { $event = new ProjectMetaDefinitionEvent($project); $this->dispatcher->dispatch($event); @@ -312,7 +313,7 @@ final class ProjectController extends AbstractController } if ($this->isGranted('budget', $project)) { - $stats = $this->repository->getProjectStatistics($project); + $stats = $statisticService->getProjectStatistics($project); } if ($this->isGranted('comments', $project)) { @@ -414,9 +415,9 @@ final class ProjectController extends AbstractController * @Route(path="/{id}/delete", name="admin_project_delete", methods={"GET", "POST"}) * @Security("is_granted('delete', project)") */ - public function deleteAction(Project $project, Request $request) + public function deleteAction(Project $project, Request $request, ProjectStatisticService $statisticService) { - $stats = $this->repository->getProjectStatistics($project); + $stats = $statisticService->getProjectStatistics($project); $deleteForm = $this->createFormBuilder(null, [ 'attr' => [ diff --git a/src/Controller/Reporting/InactiveProjectController.php b/src/Controller/Reporting/InactiveProjectController.php index cb549d54..f0118c3e 100644 --- a/src/Controller/Reporting/InactiveProjectController.php +++ b/src/Controller/Reporting/InactiveProjectController.php @@ -10,9 +10,9 @@ namespace App\Controller\Reporting; use App\Controller\AbstractController; +use App\Project\ProjectStatisticService; use App\Reporting\ProjectInactive\ProjectInactiveForm; use App\Reporting\ProjectInactive\ProjectInactiveQuery; -use App\Reporting\ProjectStatisticService; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; diff --git a/src/Controller/Reporting/ProjectViewController.php b/src/Controller/Reporting/ProjectViewController.php index 6ec4154f..fd6b1ef1 100644 --- a/src/Controller/Reporting/ProjectViewController.php +++ b/src/Controller/Reporting/ProjectViewController.php @@ -10,7 +10,7 @@ namespace App\Controller\Reporting; use App\Controller\AbstractController; -use App\Reporting\ProjectStatisticService; +use App\Project\ProjectStatisticService; use App\Reporting\ProjectView\ProjectViewForm; use App\Reporting\ProjectView\ProjectViewQuery; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; diff --git a/src/Customer/CustomerStatisticService.php b/src/Customer/CustomerStatisticService.php new file mode 100644 index 00000000..6c9e4720 --- /dev/null +++ b/src/Customer/CustomerStatisticService.php @@ -0,0 +1,40 @@ +repository = $customerRepository; + $this->dispatcher = $dispatcher; + } + + public function getCustomerStatistics(Customer $customer): CustomerStatistic + { + $statistic = $this->repository->getCustomerStatistics($customer); + $event = new CustomerStatisticEvent($customer, $statistic); + $this->dispatcher->dispatch($event); + + return $statistic; + } +} diff --git a/src/Event/ActivityStatisticEvent.php b/src/Event/ActivityStatisticEvent.php new file mode 100644 index 00000000..ce948099 --- /dev/null +++ b/src/Event/ActivityStatisticEvent.php @@ -0,0 +1,29 @@ +statistic = $statistic; + } + + public function getStatistic(): ActivityStatistic + { + return $this->statistic; + } +} diff --git a/src/Event/CustomerStatisticEvent.php b/src/Event/CustomerStatisticEvent.php new file mode 100644 index 00000000..5dcf36a2 --- /dev/null +++ b/src/Event/CustomerStatisticEvent.php @@ -0,0 +1,29 @@ +statistic = $statistic; + } + + public function getStatistic(): CustomerStatistic + { + return $this->statistic; + } +} diff --git a/src/Event/ProjectStatisticEvent.php b/src/Event/ProjectStatisticEvent.php new file mode 100644 index 00000000..42a27633 --- /dev/null +++ b/src/Event/ProjectStatisticEvent.php @@ -0,0 +1,29 @@ +statistic = $statistic; + } + + public function getStatistic(): ProjectStatistic + { + return $this->statistic; + } +} diff --git a/src/Export/Base/HtmlRenderer.php b/src/Export/Base/HtmlRenderer.php index 03c6f420..9ecaffcb 100644 --- a/src/Export/Base/HtmlRenderer.php +++ b/src/Export/Base/HtmlRenderer.php @@ -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, diff --git a/src/Export/Base/PDFRenderer.php b/src/Export/Base/PDFRenderer.php index 0b975006..4fe421a1 100644 --- a/src/Export/Base/PDFRenderer.php +++ b/src/Export/Base/PDFRenderer.php @@ -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))); diff --git a/src/Export/Base/RendererTrait.php b/src/Export/Base/RendererTrait.php index 794344f1..a261c021 100644 --- a/src/Export/Base/RendererTrait.php +++ b/src/Export/Base/RendererTrait.php @@ -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(); diff --git a/src/Export/Renderer/HtmlRendererFactory.php b/src/Export/Renderer/HtmlRendererFactory.php index 6d727453..b7b8b564 100644 --- a/src/Export/Renderer/HtmlRendererFactory.php +++ b/src/Export/Renderer/HtmlRendererFactory.php @@ -9,7 +9,7 @@ namespace App\Export\Renderer; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Twig\Environment; @@ -24,20 +24,20 @@ final class HtmlRendererFactory */ private $dispatcher; /** - * @var ProjectRepository + * @var ProjectStatisticService */ - private $projectRepository; + private $projectStatisticService; - 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; } public function create(string $id, string $template): HtmlRenderer { - $renderer = new HtmlRenderer($this->twig, $this->dispatcher, $this->projectRepository); + $renderer = new HtmlRenderer($this->twig, $this->dispatcher, $this->projectStatisticService); $renderer->setId($id); $renderer->setTemplate($template); diff --git a/src/Export/Renderer/PdfRendererFactory.php b/src/Export/Renderer/PdfRendererFactory.php index 1722bb32..d74c5921 100644 --- a/src/Export/Renderer/PdfRendererFactory.php +++ b/src/Export/Renderer/PdfRendererFactory.php @@ -9,7 +9,7 @@ namespace App\Export\Renderer; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; use App\Utils\HtmlToPdfConverter; use Twig\Environment; @@ -24,20 +24,20 @@ final class PdfRendererFactory */ private $converter; /** - * @var ProjectRepository + * @var ProjectStatisticService */ - private $projectRepository; + private $projectStatisticService; - public function __construct(Environment $twig, HtmlToPdfConverter $converter, ProjectRepository $projectRepository) + public function __construct(Environment $twig, HtmlToPdfConverter $converter, ProjectStatisticService $projectStatisticService) { $this->twig = $twig; $this->converter = $converter; - $this->projectRepository = $projectRepository; + $this->projectStatisticService = $projectStatisticService; } public function create(string $id, string $template): PDFRenderer { - $renderer = new PDFRenderer($this->twig, $this->converter, $this->projectRepository); + $renderer = new PDFRenderer($this->twig, $this->converter, $this->projectStatisticService); $renderer->setId($id); $renderer->setTemplate($template); diff --git a/src/Reporting/ProjectStatisticService.php b/src/Project/ProjectStatisticService.php similarity index 93% rename from src/Reporting/ProjectStatisticService.php rename to src/Project/ProjectStatisticService.php index f62fefae..95f28fb7 100644 --- a/src/Reporting/ProjectStatisticService.php +++ b/src/Project/ProjectStatisticService.php @@ -7,11 +7,13 @@ * file that was distributed with this source code. */ -namespace App\Reporting; +namespace App\Project; use App\Entity\Project; use App\Entity\Timesheet; use App\Entity\User; +use App\Event\ProjectStatisticEvent; +use App\Model\ProjectStatistic; use App\Reporting\ProjectInactive\ProjectInactiveQuery; use App\Reporting\ProjectView\ProjectViewModel; use App\Reporting\ProjectView\ProjectViewQuery; @@ -20,16 +22,31 @@ use App\Repository\TimesheetRepository; use App\Timesheet\DateTimeFactory; use DateTime; use Doctrine\DBAL\Types\Types; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; -final class ProjectStatisticService +/** + * @final + */ +class ProjectStatisticService { private $repository; private $timesheetRepository; + private $dispatcher; - public function __construct(ProjectRepository $projectRepository, TimesheetRepository $timesheetRepository) + public function __construct(ProjectRepository $projectRepository, TimesheetRepository $timesheetRepository, EventDispatcherInterface $dispatcher) { $this->repository = $projectRepository; $this->timesheetRepository = $timesheetRepository; + $this->dispatcher = $dispatcher; + } + + public function getProjectStatistics(Project $project, ?DateTime $end = null): ProjectStatistic + { + $statistic = $this->repository->getProjectStatistics($project, null, $end); + $event = new ProjectStatisticEvent($project, $statistic); + $this->dispatcher->dispatch($event); + + return $statistic; } /** diff --git a/src/Repository/ActivityRepository.php b/src/Repository/ActivityRepository.php index b336f5b8..679f482d 100644 --- a/src/Repository/ActivityRepository.php +++ b/src/Repository/ActivityRepository.php @@ -92,7 +92,7 @@ class ActivityRepository extends EntityRepository * @param Activity $activity * @return ActivityStatistic */ - public function getActivityStatistics(Activity $activity) + public function getActivityStatistics(Activity $activity): ActivityStatistic { $qb = $this->getEntityManager()->createQueryBuilder(); $qb diff --git a/src/Validator/TimesheetBudgetUsedValidator.php b/src/Validator/TimesheetBudgetUsedValidator.php index e6873d46..a347c4ad 100644 --- a/src/Validator/TimesheetBudgetUsedValidator.php +++ b/src/Validator/TimesheetBudgetUsedValidator.php @@ -9,11 +9,11 @@ namespace App\Validator; +use App\Activity\ActivityStatisticService; use App\Configuration\SystemConfiguration; +use App\Customer\CustomerStatisticService; use App\Entity\Timesheet; -use App\Repository\ActivityRepository; -use App\Repository\CustomerRepository; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; use App\Repository\TimesheetRepository; use App\Timesheet\RateServiceInterface; use App\Utils\Duration; @@ -25,19 +25,19 @@ use Symfony\Component\Validator\Exception\UnexpectedTypeException; final class TimesheetBudgetUsedValidator extends ConstraintValidator { - private $customerRepository; - private $projectRepository; - private $activityRepository; + private $customerStatisticService; + private $projectStatisticService; + private $activityStatisticService; private $timesheetRepository; private $rateService; private $configuration; - public function __construct(SystemConfiguration $configuration, CustomerRepository $customerRepository, ProjectRepository $projectRepository, ActivityRepository $activityRepository, TimesheetRepository $timesheetRepository, RateServiceInterface $rateService) + public function __construct(SystemConfiguration $configuration, CustomerStatisticService $customerStatisticService, ProjectStatisticService $projectStatisticService, ActivityStatisticService $activityStatisticService, TimesheetRepository $timesheetRepository, RateServiceInterface $rateService) { $this->configuration = $configuration; - $this->customerRepository = $customerRepository; - $this->projectRepository = $projectRepository; - $this->activityRepository = $activityRepository; + $this->customerStatisticService = $customerStatisticService; + $this->projectStatisticService = $projectStatisticService; + $this->activityStatisticService = $activityStatisticService; $this->timesheetRepository = $timesheetRepository; $this->rateService = $rateService; } @@ -135,7 +135,7 @@ final class TimesheetBudgetUsedValidator extends ConstraintValidator return false; } - $stat = $this->activityRepository->getActivityStatistics($activity); + $stat = $this->activityStatisticService->getActivityStatistics($activity); $fullRate = ($stat->getRecordRate() + $rate); @@ -164,7 +164,7 @@ final class TimesheetBudgetUsedValidator extends ConstraintValidator return false; } - $stat = $this->projectRepository->getProjectStatistics($project); + $stat = $this->projectStatisticService->getProjectStatistics($project); $fullRate = ($stat->getRecordRate() + $rate); @@ -193,7 +193,7 @@ final class TimesheetBudgetUsedValidator extends ConstraintValidator return false; } - $stat = $this->customerRepository->getCustomerStatistics($customer); + $stat = $this->customerStatisticService->getCustomerStatistics($customer); $fullRate = ($stat->getRecordRate() + $rate); diff --git a/src/Widget/Type/UserTeamProjects.php b/src/Widget/Type/UserTeamProjects.php index 0fc66be3..b194c62d 100644 --- a/src/Widget/Type/UserTeamProjects.php +++ b/src/Widget/Type/UserTeamProjects.php @@ -12,21 +12,18 @@ namespace App\Widget\Type; use App\Entity\Project; use App\Entity\Team; use App\Entity\User; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; class UserTeamProjects extends SimpleWidget implements AuthorizedWidget, UserWidget { - /** - * @var ProjectRepository - */ - private $repository; + private $statisticService; - public function __construct(ProjectRepository $repository) + public function __construct(ProjectStatisticService $statisticService) { $this->setId('UserTeamProjects'); $this->setTitle('label.my_team_projects'); $this->setOption('id', ''); - $this->repository = $repository; + $this->statisticService = $statisticService; } public function getOptions(array $options = []): array @@ -65,7 +62,7 @@ class UserTeamProjects extends SimpleWidget implements AuthorizedWidget, UserWid if ($project->getBudget() > 0 || $project->getTimeBudget() > 0) { $stats[] = [ 'project' => $project, - 'stats' => $this->repository->getProjectStatistics($project), + 'stats' => $this->statisticService->getProjectStatistics($project), ]; } } diff --git a/tests/Event/ActivityStatisticEventTest.php b/tests/Event/ActivityStatisticEventTest.php new file mode 100644 index 00000000..bcfda241 --- /dev/null +++ b/tests/Event/ActivityStatisticEventTest.php @@ -0,0 +1,36 @@ +getStatistic()); + } +} diff --git a/tests/Event/CustomerStatisticEventTest.php b/tests/Event/CustomerStatisticEventTest.php new file mode 100644 index 00000000..8264e4cb --- /dev/null +++ b/tests/Event/CustomerStatisticEventTest.php @@ -0,0 +1,36 @@ +getStatistic()); + } +} diff --git a/tests/Event/ProjectStatisticEventTest.php b/tests/Event/ProjectStatisticEventTest.php new file mode 100644 index 00000000..48d58218 --- /dev/null +++ b/tests/Event/ProjectStatisticEventTest.php @@ -0,0 +1,36 @@ +getStatistic()); + } +} diff --git a/tests/Export/Renderer/HtmlRendererFactoryTest.php b/tests/Export/Renderer/HtmlRendererFactoryTest.php index c7f2ecc4..9b184d47 100644 --- a/tests/Export/Renderer/HtmlRendererFactoryTest.php +++ b/tests/Export/Renderer/HtmlRendererFactoryTest.php @@ -11,7 +11,7 @@ namespace App\Tests\Export\Renderer; use App\Export\Renderer\HtmlRenderer; use App\Export\Renderer\HtmlRendererFactory; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Twig\Environment; @@ -26,7 +26,7 @@ class HtmlRendererFactoryTest extends TestCase $sut = new HtmlRendererFactory( $this->createMock(Environment::class), $this->createMock(EventDispatcherInterface::class), - $this->createMock(ProjectRepository::class) + $this->createMock(ProjectStatisticService::class) ); $renderer = $sut->create('foo', 'bar.html.twig'); diff --git a/tests/Export/Renderer/HtmlRendererTest.php b/tests/Export/Renderer/HtmlRendererTest.php index 8aaae3ce..67e6af28 100644 --- a/tests/Export/Renderer/HtmlRendererTest.php +++ b/tests/Export/Renderer/HtmlRendererTest.php @@ -10,7 +10,7 @@ namespace App\Tests\Export\Renderer; use App\Export\Renderer\HtmlRenderer; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\HttpFoundation\Request; use Twig\Environment; @@ -28,7 +28,7 @@ class HtmlRendererTest extends AbstractRendererTest $sut = new HtmlRenderer( $this->createMock(Environment::class), new EventDispatcher(), - $this->createMock(ProjectRepository::class) + $this->createMock(ProjectStatisticService::class) ); $this->assertEquals('html', $sut->getId()); @@ -46,7 +46,7 @@ class HtmlRendererTest extends AbstractRendererTest $request->setLocale('en'); $stack->push($request); - $sut = new HtmlRenderer($twig, new EventDispatcher(), $this->createMock(ProjectRepository::class)); + $sut = new HtmlRenderer($twig, new EventDispatcher(), $this->createMock(ProjectStatisticService::class)); $response = $this->render($sut); diff --git a/tests/Export/Renderer/PdfRendererFactoryTest.php b/tests/Export/Renderer/PdfRendererFactoryTest.php index 68cbafb0..231c5d7a 100644 --- a/tests/Export/Renderer/PdfRendererFactoryTest.php +++ b/tests/Export/Renderer/PdfRendererFactoryTest.php @@ -11,7 +11,7 @@ namespace App\Tests\Export\Renderer; use App\Export\Renderer\PDFRenderer; use App\Export\Renderer\PdfRendererFactory; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; use App\Utils\HtmlToPdfConverter; use PHPUnit\Framework\TestCase; use Twig\Environment; @@ -26,7 +26,7 @@ class PdfRendererFactoryTest extends TestCase $sut = new PdfRendererFactory( $this->createMock(Environment::class), $this->createMock(HtmlToPdfConverter::class), - $this->createMock(ProjectRepository::class) + $this->createMock(ProjectStatisticService::class) ); $renderer = $sut->create('foo', 'bar.pdf.twig'); diff --git a/tests/Export/Renderer/PdfRendererTest.php b/tests/Export/Renderer/PdfRendererTest.php index a78bf8f2..b4099794 100644 --- a/tests/Export/Renderer/PdfRendererTest.php +++ b/tests/Export/Renderer/PdfRendererTest.php @@ -10,7 +10,7 @@ namespace App\Tests\Export\Renderer; use App\Export\Renderer\PDFRenderer; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; use App\Utils\HtmlToPdfConverter; use App\Utils\MPdfConverter; use Symfony\Component\HttpFoundation\Request; @@ -29,7 +29,7 @@ class PdfRendererTest extends AbstractRendererTest $sut = new PDFRenderer( $this->createMock(Environment::class), $this->createMock(HtmlToPdfConverter::class), - $this->createMock(ProjectRepository::class) + $this->createMock(ProjectStatisticService::class) ); $this->assertEquals('pdf', $sut->getId()); @@ -54,7 +54,7 @@ class PdfRendererTest extends AbstractRendererTest $request->setLocale('en'); $stack->push($request); - $sut = new PDFRenderer($twig, $converter, $this->createMock(ProjectRepository::class)); + $sut = new PDFRenderer($twig, $converter, $this->createMock(ProjectStatisticService::class)); $response = $this->render($sut); diff --git a/tests/Export/ServiceExportTest.php b/tests/Export/ServiceExportTest.php index cd0dcb57..769d079a 100644 --- a/tests/Export/ServiceExportTest.php +++ b/tests/Export/ServiceExportTest.php @@ -12,7 +12,7 @@ namespace App\Tests\Export; use App\Export\Renderer\HtmlRenderer; use App\Export\ServiceExport; use App\Export\Timesheet\HtmlRenderer as HtmlExporter; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcher; use Twig\Environment; @@ -37,7 +37,7 @@ class ServiceExportTest extends TestCase { $sut = new ServiceExport(); - $renderer = new HtmlRenderer($this->createMock(Environment::class), new EventDispatcher(), $this->createMock(ProjectRepository::class)); + $renderer = new HtmlRenderer($this->createMock(Environment::class), new EventDispatcher(), $this->createMock(ProjectStatisticService::class)); $sut->addRenderer($renderer); self::assertEquals(1, \count($sut->getRenderer())); @@ -48,7 +48,7 @@ class ServiceExportTest extends TestCase { $sut = new ServiceExport(); - $exporter = new HtmlExporter($this->createMock(Environment::class), new EventDispatcher(), $this->createMock(ProjectRepository::class)); + $exporter = new HtmlExporter($this->createMock(Environment::class), new EventDispatcher(), $this->createMock(ProjectStatisticService::class)); $sut->addTimesheetExporter($exporter); self::assertEquals(1, \count($sut->getTimesheetExporter())); diff --git a/tests/Export/Timesheet/HtmlRendererTest.php b/tests/Export/Timesheet/HtmlRendererTest.php index b72ca2d5..4da2c431 100644 --- a/tests/Export/Timesheet/HtmlRendererTest.php +++ b/tests/Export/Timesheet/HtmlRendererTest.php @@ -10,7 +10,7 @@ namespace App\Tests\Export\Timesheet; use App\Export\Timesheet\HtmlRenderer; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\HttpFoundation\Request; use Twig\Environment; @@ -26,7 +26,7 @@ class HtmlRendererTest extends AbstractRendererTest $sut = new HtmlRenderer( $this->createMock(Environment::class), new EventDispatcher(), - $this->createMock(ProjectRepository::class) + $this->createMock(ProjectStatisticService::class) ); $this->assertEquals('print', $sut->getId()); @@ -42,7 +42,7 @@ class HtmlRendererTest extends AbstractRendererTest $request->setLocale('en'); $stack->push($request); - $sut = new HtmlRenderer($twig, new EventDispatcher(), $this->createMock(ProjectRepository::class)); + $sut = new HtmlRenderer($twig, new EventDispatcher(), $this->createMock(ProjectStatisticService::class)); $response = $this->render($sut); diff --git a/tests/Export/Timesheet/PdfRendererTest.php b/tests/Export/Timesheet/PdfRendererTest.php index ff319dde..9c2b7f64 100644 --- a/tests/Export/Timesheet/PdfRendererTest.php +++ b/tests/Export/Timesheet/PdfRendererTest.php @@ -10,7 +10,7 @@ namespace App\Tests\Export\Timesheet; use App\Export\Timesheet\PDFRenderer; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; use App\Utils\HtmlToPdfConverter; use App\Utils\MPdfConverter; use Symfony\Component\HttpFoundation\Request; @@ -29,7 +29,7 @@ class PdfRendererTest extends AbstractRendererTest $sut = new PDFRenderer( $this->createMock(Environment::class), $this->createMock(HtmlToPdfConverter::class), - $this->createMock(ProjectRepository::class) + $this->createMock(ProjectStatisticService::class) ); $this->assertEquals('pdf', $sut->getId()); @@ -47,7 +47,7 @@ class PdfRendererTest extends AbstractRendererTest $request->setLocale('en'); $stack->push($request); - $sut = new PDFRenderer($twig, $converter, $this->createMock(ProjectRepository::class)); + $sut = new PDFRenderer($twig, $converter, $this->createMock(ProjectStatisticService::class)); $response = $this->render($sut); diff --git a/tests/Validator/TimesheetBudgetUsedValidatorTest.php b/tests/Validator/TimesheetBudgetUsedValidatorTest.php index a3f22330..fb00a901 100644 --- a/tests/Validator/TimesheetBudgetUsedValidatorTest.php +++ b/tests/Validator/TimesheetBudgetUsedValidatorTest.php @@ -9,7 +9,9 @@ namespace App\Tests\Validator; +use App\Activity\ActivityStatisticService; use App\Configuration\SystemConfiguration; +use App\Customer\CustomerStatisticService; use App\Entity\Activity; use App\Entity\Customer; use App\Entity\Project; @@ -18,9 +20,7 @@ use App\Entity\User; use App\Model\ActivityStatistic; use App\Model\CustomerStatistic; use App\Model\ProjectStatistic; -use App\Repository\ActivityRepository; -use App\Repository\CustomerRepository; -use App\Repository\ProjectRepository; +use App\Project\ProjectStatisticService; use App\Repository\TimesheetRepository; use App\Timesheet\Rate; use App\Timesheet\RateService; @@ -43,15 +43,15 @@ class TimesheetBudgetUsedValidatorTest extends ConstraintValidatorTestCase $configuration = $this->createMock(SystemConfiguration::class); $configuration->method('isTimesheetAllowOverbookingBudget')->willReturn($isAllowed); - $customerRepository = $this->createMock(CustomerRepository::class); + $customerRepository = $this->createMock(CustomerStatisticService::class); $customerStatistic = $customerStatistic ?? new CustomerStatistic(); $customerRepository->method('getCustomerStatistics')->willReturn($customerStatistic); - $projectRepository = $this->createMock(ProjectRepository::class); + $projectRepository = $this->createMock(ProjectStatisticService::class); $projectStatistic = $projectStatistic ?? new ProjectStatistic(); $projectRepository->method('getProjectStatistics')->willReturn($projectStatistic); - $activityRepository = $this->createMock(ActivityRepository::class); + $activityRepository = $this->createMock(ActivityStatisticService::class); $activityStatistic = $activityStatistic ?? new ActivityStatistic(); $activityRepository->method('getActivityStatistics')->willReturn($activityStatistic);