src/Controller/Management/DashboardController.php line 27

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller\Management;
  4. use App\Data\Appointment\Appointment;
  5. use App\Data\Appointment\AppointmentFilterWaitingRoom;
  6. use App\Entity\Office\Office;
  7. use App\Form\WaitingRoom\Model\WaitingRoomCallModel;
  8. use App\Form\WaitingRoom\Model\WaitingRoomCheckinModel;
  9. use App\Form\WaitingRoom\Model\WaitingRoomFinishModel;
  10. use App\Form\WaitingRoom\Type\WaitingRoomCallType;
  11. use App\Form\WaitingRoom\Type\WaitingRoomCheckinType;
  12. use App\Form\WaitingRoom\Type\WaitingRoomFinishType;
  13. use App\Service\Appointment\AppointmentService;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use function array_map;
  17. #[Route(path'/')]
  18. class DashboardController extends ManagementController
  19. {
  20.     #[Route(path'/'name'management_dashboard')]
  21.     public function view(AppointmentService $appointmentService): Response
  22.     {
  23.         $office $this->getOffice();
  24.         if (!$office instanceof Office) {
  25.             return $this->redirectToOfficeSelection();
  26.         } else {
  27.             $this->denyAccessUnlessGranted(attribute'OFFICE_DASHBOARD_VIEW'subject$office);
  28.         }
  29.         $appointments $appointmentService->findBetween($office, new AppointmentFilterWaitingRoom());
  30.         $checkinForms array_map(function (Appointment $appointment) {
  31.             return $this->createForm(WaitingRoomCheckinType::class, new WaitingRoomCheckinModel())->createView();
  32.         }, $appointments);
  33.         $callForms array_map(function (Appointment $appointment) {
  34.             return $this->createForm(WaitingRoomCallType::class, new WaitingRoomCallModel())->createView();
  35.         }, $appointments);
  36.         $finishForms array_map(function (Appointment $appointment) {
  37.             return $this->createForm(WaitingRoomFinishType::class, new WaitingRoomFinishModel())->createView();
  38.         }, $appointments);
  39.         return $this->render('management/dashboard/dashboard.html.twig', [
  40.             'appointments' => $appointments,
  41.             'checkinForms' => $checkinForms,
  42.             'callForms' => $callForms,
  43.             'finishForms' => $finishForms,
  44.         ]);
  45.     }
  46. }