← Back
Editing: AgencyController.php
<?php namespace App\Controller\Organization; use App\Breadcrumb\BreadcrumbInterface; use App\Breadcrumb\BreadcrumbItem; use App\Entity\User; use App\Repository\AgencyRepository; use App\Repository\UserRepository; use App\Service\SupervisorService; use App\Service\Utils; use App\Session\Filter\SessionFiltersContainer; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; #[Route('/organization/agency', name: 'organization_agency_')] class AgencyController extends AbstractController { public function __construct(BreadcrumbInterface $breadcrumb, SupervisorService $supervisorService) { $breadcrumb->addRootItem(BreadcrumbItem::set('Accueil', 'organization_index')); $breadcrumb->addItem(BreadcrumbItem::set('Agences', 'organization_agency_index')); $supervisorService->setSection('agency'); } #[Route('/performance.html', name: 'performance')] public function performance( BreadcrumbInterface $breadcrumb, AgencyRepository $agencyRepository ): Response { /** @var User $user */ $user = $this->getUser(); $breadcrumb->addItem(BreadcrumbItem::set('Performance')); $data = $agencyRepository->getByOrganizationByControl($user->getOrganization()); $prevData = $agencyRepository->getByOrganizationByControl($user->getOrganization()); return $this->render( 'organization/agency/performance.html.twig', [ 'agencies' => $user->getOrganization()->getAgencies(), 'data' => $this->getAgenciesEvolution($data, $prevData), ] ); } #[Route('/', name: 'index')] public function list(UserRepository $userRepository): Response { return $this->render( 'organization/manager/index.html.twig', ['managers' => $userRepository->findManagersByOrganization($this->getUser()->getOrganization())] ); } #[Route('/chart-synthesis.json', name: 'synthesis_chart')] public function synthesisChart( SessionFiltersContainer $sessionFiltersContainer, Utils $utils, AgencyRepository $agencyRepository ): JsonResponse { /** @var User $user */ $user = $this->getUser(); $filters = $sessionFiltersContainer->getCurrent(); $startDate = $filters->getDateRange()->getDateStart(); $endDate = $filters->getDateRange()->getDateEnd(); $labels = $utils->getMonthsTimeline($startDate, $endDate); $agencies = $agencyRepository->getAgenciesByOrganizationByMonth($user->getOrganization()); return new JsonResponse([ 'labels' => $labels, 'agencies' => $agencies, ]); } private function getAgenciesEvolution($data, $prevData): array { $results = []; foreach ($data as $item) { $results[$item['id']]['current'] = $item['cnt']; $results[$item['id']]['name'] = $item['name']; } foreach ($prevData as $item) { $results[$item['id']]['prev'] = $item['cnt']; $results[$item['id']]['name'] = $item['name']; } foreach ($results as $key => $result) { $current = $result['current'] ?? 0; $prev = $result['prev'] ?? 0; if (!isset($result['current'])) { $results[$key]['current'] = 0; } if (!isset($result['prev'])) { $results[$key]['prev'] = 0; } $results[$key]['evolution'] = $prev > 0 ? ((($current - $prev) / $prev) * 100) : 0; } return $results; } #[Route('/chart-doughnut.json', name: 'doughnut_chart')] public function doughnutChart( Request $request, AgencyRepository $agencyRepository ): JsonResponse { /** @var User $user */ $user = $this->getUser(); $limit = $request->query->get('limit', 5); $sort = ['COUNT(c.id)', 'desc']; if ($request->query->has('sort')) { if ('lessActive' === $request->query->get('sort')) { $sort[1] = 'asc'; } } $data = $agencyRepository->getByOrganizationByControl($user->getOrganization(), $limit, $sort); return new JsonResponse([ 'data' => $data, ]); } }
Save File
Cancel