← Back
Editing: ProviderController.php
<?php namespace App\Controller\Supervisor; use App\Breadcrumb\BreadcrumbInterface; use App\Breadcrumb\BreadcrumbItem; use App\Entity\Service; use App\Repository\HistoriqueAlerteRepository; use App\Repository\ItemRepository; use App\Repository\NoteRepository; use App\Repository\PrestataireRepository; use App\Repository\ServiceRepository; use App\Repository\ThematicRepository; use App\Repository\ZoneRepository; use App\Service\SolutionService; use App\Service\SupervisorService; use App\Service\Utils; use App\Session\Filter\SessionFiltersContainer; use Knp\Component\Pager\PaginatorInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; #[Route(path: '/supervisor/provider', name: 'supervisor_provider_')] class ProviderController extends AbstractController { public function __construct(BreadcrumbInterface $breadcrumb, SupervisorService $supervisorService) { $breadcrumb->addItem(BreadcrumbItem::set('Prestataires', 'supervisor_provider_index')); $supervisorService->setSection('provider'); } #[Route(path: '/', name: 'index')] public function list(PrestataireRepository $prestataireRepository): Response { return $this->render( 'supervisor/provider/index.html.twig', ['providers' => $prestataireRepository->fetchByAgencies([$this->getUser()->getAgency()->getId()])] ); } #[Route(path: '/performance/print', name: 'performance_print', defaults: ['print' => true])] #[Route(path: '/performance', name: 'performance')] public function performance( BreadcrumbInterface $breadcrumb, PrestataireRepository $prestataireRepository, ZoneRepository $zoneRepository, ItemRepository $itemRepository, ThematicRepository $thematicRepository, NoteRepository $noteRepository, SolutionService $solutionService, bool $print = false ): Response { $breadcrumb->addItem(BreadcrumbItem::set('Performance', 'supervisor_provider_performance')); $perf['overallPerf'] = $noteRepository->averageNoteForSupervisorV2( $this->getUser()->getAgency() )[0]; $perf['itemsPerf'] = $noteRepository->averageNoteItemsForSupervisor( $this->getUser()->getAgency() ); $thematics = $thematicRepository->findForAgency($this->getUser()->getAgency()); $zones = $zoneRepository->findByAgency($this->getUser()->getAgency(), $solutionService->getCurrent()); $thematicsPerfs = []; foreach ($thematics as $thematic) { $stat = $noteRepository->averageNoteForSupervisorV2( $this->getUser()->getAgency(), $thematic, ); $thematicsPerfs[$thematic->getId()] = $stat[0]; } $perf['thematicsPerfs'] = $thematicsPerfs; $tpl = 'supervisor/provider/performance.html.twig'; if (true === $print) { $tpl = 'supervisor/provider/performance.print.html.twig'; } return $this->render( $tpl, [ 'providers' => $prestataireRepository->fetchNotesByAgencies([$this->getUser()->getAgency()->getId()]), 'perf' => $perf, 'thematics' => $thematics, 'zones' => $zones, 'items' => $itemRepository->fetchItemsByAgencies( [$this->getUser()->getAgency()->getId()] ), ] ); } #[Route(path: '/chart-intervention.json', name: 'chart_intervention')] public function interventionChart( Utils $utils, SessionFiltersContainer $sessionFiltersContainer, ServiceRepository $serviceRepository ): JsonResponse { $filters = $sessionFiltersContainer->getCurrent(); $startDate = $filters->getDateRange()->getDateStart(); $endDate = $filters->getDateRange()->getDateEnd(); $interventions = $serviceRepository->getByAgenciesByMonth([$this->getUser()->getAgency()->getId()]); $prevInterventions = $serviceRepository->getByAgenciesByMonth( agenciesId: [$this->getUser()->getAgency()->getId()], previous: true ); $total = array_reduce($interventions, function ($carry, $item) { return $carry + $item['cnt']; }, 0); $prevTotal = array_reduce($prevInterventions, function ($carry, $item) { return $carry + $item['cnt']; }, 0); $evolution = 100; if ($prevTotal > 0) { $evolution = (($total - $prevTotal) / $prevTotal) * 100; } $labels = $utils->getMonthsTimeline($startDate, $endDate, true); return new JsonResponse([ 'labels' => $labels, 'interventions' => $interventions, 'total' => $total, 'prevTotal' => $prevTotal, 'evolution' => $evolution, ]); } #[Route(path: '/chart-alerts.json', name: 'chart_alert')] public function alertsChart( Utils $utils, SessionFiltersContainer $sessionFiltersContainer, HistoriqueAlerteRepository $alerteRepository ): JsonResponse { $filters = $sessionFiltersContainer->getCurrent(); $startDate = $filters->getDateRange()->getDateStart(); $endDate = $filters->getDateRange()->getDateEnd(); $labels = $utils->getMonthsTimeline($startDate, $endDate); $alerts = $alerteRepository->getByAgenciesByMonth([$this->getUser()->getAgency()->getId()]); $prevAlerts = $alerteRepository->getByAgenciesByMonth( agenciesId: [$this->getUser()->getAgency()->getId()], previous: true ); $total = array_reduce($alerts, function ($carry, $item) { return $carry + $item['cnt']; }, 0); $prevTotal = array_reduce($prevAlerts, function ($carry, $item) { return $carry + $item['cnt']; }, 0); $evolution = 100; if ($prevTotal > 0) { $evolution = (($total - $prevTotal) / $prevTotal) * 100; } return new JsonResponse([ 'labels' => $labels, 'alerts' => $alerts, 'total' => $total, 'prevTotal' => $prevTotal, 'evolution' => $evolution, ]); } #[Route(path: '/chart-perf.json', name: 'chart_perf')] public function performanceChart( PrestataireRepository $prestataireRepository ): JsonResponse { $result = $prestataireRepository->fetchPerfByAgencies( [$this->getUser()->getAgency()->getId()] ); return new JsonResponse($result); } #[Route(path: '/penalties/{page}', name: 'penalties', requirements: ['page' => '\d+'])] public function penalties( ServiceRepository $serviceRepository, PaginatorInterface $paginator, SupervisorService $supervisorService, BreadcrumbInterface $breadcrumb, int $page = 1 ): Response { $breadcrumb->addItem(BreadcrumbItem::set('Pénalités', 'supervisor_provider_penalties')); $supervisorService->setSection('penalties'); $query = $serviceRepository ->findByAgenciesQuery([$this->getUser()->getAgency()->getId()]) ->andWhere('LENGTH(s.status) > 0') ->orderBy('s.createdAt', 'desc'); /** @var Service[] $penalties */ $penalties = $paginator->paginate($query, $page); return $this->render('supervisor/provider/penalties.html.twig', ['penalties' => $penalties]); } /** * @return Response */ #[Route(path: '/penalties/{id}.html', name: 'penalties_detail', requirements: ['id' => '\d+'])] public function penaltyDetail(Service $service, BreadcrumbInterface $breadcrumb) { $breadcrumb->addItem(BreadcrumbItem::set('Pénalités', 'supervisor_provider_penalties')); $breadcrumb->addItem(BreadcrumbItem::set('Pénalité du '.$service->getCreatedAt()->format('d/m/Y'))); return $this->render( 'supervisor/provider/penalties.detail.html.twig', [ 'messages' => $service->getMessages(), 'service' => $service, 'statusDone' => Service::STATUS_DONE, ] ); } }
Save File
Cancel