src/Controller/Web/ObligationController.php line 165

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Web;
  3. use App\Entity\Building;
  4. use App\Entity\Obligation;
  5. use App\Entity\User;
  6. use App\Form\ObligationBuildingType;
  7. use App\Form\ObligationType;
  8. use App\Repository\BuildingRepository;
  9. use App\Repository\ObligationRepository;
  10. use App\Repository\UserRepository;
  11. use App\Services\EquipmentService;
  12. use App\Services\ObligationService;
  13. use App\Services\ReportService;
  14. use App\Services\TaskService;
  15. use DateTime;
  16. use Exception;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. class ObligationController extends AbstractController
  24. {
  25.     private BuildingRepository $buildingRepository;
  26.     private ObligationService $obligationService;
  27.     private TaskService $taskService;
  28.     private UserRepository $userRepository;
  29.     private EquipmentService $equipmentService;
  30.     private ReportService $reportService;
  31.     private ObligationRepository $obligationRepository;
  32.     /**
  33.      * @param BuildingRepository $buildingRepository
  34.      * @param ObligationService $obligationService
  35.      * @param TaskService $taskService
  36.      * @param EquipmentService $equipmentService
  37.      * @param ReportService $reportService
  38.      * @param UserRepository $userRepository
  39.      * @param ObligationRepository $obligationRepository
  40.      */
  41.     public function __construct(
  42.         BuildingRepository $buildingRepository,
  43.         ObligationService $obligationService,
  44.         TaskService $taskService,
  45.         EquipmentService $equipmentService,
  46.         ReportService $reportService,
  47.         UserRepository $userRepository,
  48.         ObligationRepository $obligationRepository
  49.     ) {
  50.         $this->buildingRepository $buildingRepository;
  51.         $this->obligationService $obligationService;
  52.         $this->taskService $taskService;
  53.         $this->userRepository $userRepository;
  54.         $this->equipmentService $equipmentService;
  55.         $this->reportService $reportService;
  56.         $this->obligationRepository $obligationRepository;
  57.     }
  58.     /**
  59.      * @return Response
  60.      * @throws Exception
  61.      */
  62.     #[Route('/obligations'name'obligation')]
  63.     public function obligationsList(): Response
  64.     {
  65.         /** @var User $user */
  66.         $user $this->getUser();
  67.         $companyUsers $this->userRepository->findUsersByMain($user);
  68.         $obligations $this->obligationService->getAllObligationsForCalendarByUser($companyUsers);
  69.         $buildings $this->buildingRepository->getAllBuildingsByCompanyUsers($companyUsers);
  70.         $tasks $this->taskService->getAllTasksForCalendar($companyUsers);
  71.         $equipments $this->equipmentService->getAllEquipmentsForCalendar($companyUsers);
  72.         $reports $this->reportService->getAllReportsForCalendar($companyUsers);
  73.         $calendarData array_merge($tasks$obligations$equipments$reports);
  74.         $form $this->createForm(
  75.             ObligationBuildingType::class,
  76.             null,
  77.             [
  78.                 'method' => 'POST',
  79.                 'action' => $this->generateUrl('obligation_add_new'),
  80.                 'attr' => ['id' => 'obligation_building_form'],
  81.                 'buildings' => $buildings,
  82.             ]
  83.         );
  84.         return $this->render('@views/Obligation/obligationsList.html.twig', [
  85.             'calendarData' => $calendarData,
  86.             'form' => $form->createView()
  87.         ]);
  88.     }
  89.     /**
  90.      * @Route("/obligations/create", name="obligation_add_new", options={"expose"=true}, methods={"POST"})
  91.      * @param Request $request
  92.      * @return JsonResponse
  93.      */
  94.     public function addNewObligationAction(Request $request): JsonResponse
  95.     {
  96.         /** @var User $user */
  97.         $user $this->getUser();
  98.         $companyUsers $this->userRepository->findUsersByMain($user);
  99.         $buildings $this->buildingRepository->getAllBuildingsByCompanyUsers($companyUsers);
  100.         $form $this->createForm(ObligationBuildingType::class, null, [
  101.             'buildings' => $buildings,
  102.         ]);
  103.         $form->handleRequest($request);
  104.         if ($form->isSubmitted() && $form->isValid()) {
  105.             $data $form->getData();
  106.             /** @var Building $obligationBuilding */
  107.             $obligationBuilding $data['building'];
  108.             $obligation $this->obligationService->createObligationFromCalendar($obligationBuilding->getUser(), $data);
  109.             return new JsonResponse([
  110.                 'obligation' => $obligation,
  111.             ]);
  112.         }
  113.         return new JsonResponse([
  114.             'message' => 'Greška.',
  115.         ], 400);
  116.     }
  117.     /**
  118.      * @Route("/today-obligations", name="obligation_today", options={"expose"=true})
  119.      * @return JsonResponse
  120.      * @throws Exception
  121.      */
  122.     public function todayObligations(): JsonResponse
  123.     {
  124.         /** @var User $user */
  125.         $user $this->getUser();
  126.         $companyUsers $this->userRepository->findUsersByMain($user);
  127.         $today = new DateTime();
  128.         $obligations $this->obligationService->getAllObligationsForToday($companyUsers$today->format('Y-m-d'));
  129.         return new JsonResponse([
  130.             'success' => true,
  131.             'calendarData' => $obligations
  132.         ]);
  133.     }
  134.     /**
  135.      * @Route("/obligations-number", name="obligation_number", options={"expose"=true})
  136.      * @return JsonResponse
  137.      * @throws Exception
  138.      */
  139.     public function getObligationsNumber(): JsonResponse
  140.     {
  141.         /** @var User $user */
  142.         $user $this->getUser();
  143.         $companyUsers $this->userRepository->findUsersByMain($user);
  144.         $today = new DateTime();
  145.         $obligation $this->obligationService->getAllObligationsForToday($companyUsers$today->format('Y-m-d'));
  146.         return new JsonResponse([
  147.             'success' => true,
  148.             'dataSum' => count($obligation),
  149.         ]);
  150.     }
  151.     /**
  152.      * @Route(
  153.      *     "/do_obligation/{id}/{type}",
  154.      *     requirements={"id" = "\d+", "type" = "\d+"},
  155.      *     name="obligation_action",
  156.      *     options={"expose"=true}
  157.      *     )
  158.      *
  159.      * @param Request $request
  160.      * @param int $id
  161.      * @param int $type
  162.      *
  163.      * @return JsonResponse
  164.      */
  165.     public function doObligationAction(Request $requestint $idint $type): JsonResponse
  166.     {
  167.         /** @var Obligation $obligation */
  168.         $obligation $this->obligationRepository->find($id);
  169.         if ($type == 1) {
  170.             $obligation->setDone(true);
  171.         } else {
  172.             $obligation->setDone(false);
  173.         }
  174.         $this->obligationRepository->save($obligation);
  175.         return new JsonResponse(['success' => true]);
  176.     }
  177.     /**
  178.      * Deletes a obligation entity.
  179.      *
  180.      * @Route(
  181.      *     "/obligation/{id}",
  182.      *     requirements={"id" = "\d+"},
  183.      *     name="obligation_delete",
  184.      *     options={"expose"=true},
  185.      *     methods={"DELETE", "GET"}
  186.      *     )
  187.      *
  188.      * @param Request $request
  189.      * @param int $id
  190.      *
  191.      * @return JsonResponse
  192.      */
  193.     public function deleteObligationAction(Request $requestint $id): JsonResponse
  194.     {
  195.         $id $request->get('id');
  196.         /** @var Obligation $obligation */
  197.         $obligation $this->obligationRepository->find($id);
  198.         $form $this->createForm(ObligationType::class, $obligation, [
  199.             'action' => $this->generateUrl('obligation_delete', ['id' => $obligation->getId()]),
  200.             'attr' => ['id' => 'deleteObligationEntry'],
  201.             'method' => 'DELETE',
  202.         ]);
  203.         $form->add(
  204.             'delete',
  205.             SubmitType::class,
  206.             [
  207.                 'label' => 'Obrisati',
  208.                 'attr' => ['class' => 'btn']
  209.             ]
  210.         );
  211.         $form->handleRequest($request);
  212.         if ($form->isSubmitted() && $form->isValid()) {
  213.             $this->obligationRepository->remove($obligation);
  214.             return new JsonResponse(["success" => "true"]);
  215.         }
  216.         return new JsonResponse([
  217.             'html' => $this->renderView(
  218.                 "@views/Obligation/obligationDelete.html.twig",
  219.                 ['form' => $form->createView()]
  220.             ),
  221.                 'success' => true
  222.         ]);
  223.     }
  224. }