src/Nolimit/Task/Controller/TaskController.php line 78

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Nolimit\Task\Controller;
  4. use App\Entity\Project;
  5. use App\Entity\ProjectStatus;
  6. use App\Entity\ProjectType;
  7. use App\Entity\Task;
  8. use App\Entity\TaskStatus;
  9. use App\Entity\TaskType;
  10. use App\Entity\User;
  11. use App\Nolimit\Task\Manager\TaskManager;
  12. use App\Nolimit\Task\Persister\TaskLogPersister;
  13. use App\Nolimit\Task\Persister\TaskPersister;
  14. use App\Nolimit\Task\Provider\TaskDatatableProvider;
  15. use App\Repository\ProjectRepository;
  16. use App\Repository\ProjectTypeRepository;
  17. use App\Repository\TaskLogRepository;
  18. use App\Repository\TaskRepository;
  19. use App\Repository\TaskStatusRepository;
  20. use App\Repository\TaskTypeRepository;
  21. use App\Repository\UserRepository;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use Sonata\AdminBundle\Controller\CRUDController;
  24. use Symfony\Component\HttpFoundation\JsonResponse;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\HttpFoundation\Response;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  29. use Symfony\Contracts\Translation\TranslatorInterface;
  30. class TaskController extends CRUDController{
  31.     private EntityManagerInterface $entity;
  32.     private TaskDatatableProvider $datatableProvider;
  33.     private TranslatorInterface $translator;
  34.     private TaskManager $taskManager;
  35.     private TaskLogRepository $taskLogRepository;
  36.     private TaskRepository $taskRepository;
  37.     private TaskLogPersister $taskLogPersister;
  38.     private TaskPersister $taskPersister;
  39.     private TaskDatatableProvider $taskDatatableProvider;
  40.     private ProjectRepository $projectRepository;
  41.     private ProjectTypeRepository $projectTypeRepository;
  42.     private TaskTypeRepository $taskTypeRepository;
  43.     private TaskStatusRepository $taskStatusRepository;
  44.     private UserRepository $userRepository;
  45.     /**
  46.      * @var TokenStorageInterface
  47.      */
  48.     private $tokenStorage;
  49.     public function __construct(EntityManagerInterface $entity,
  50.                                 TaskDatatableProvider $datatableProvider,
  51.                                 TranslatorInterface $translator,
  52.                                 TaskManager $taskManager,TaskLogRepository $taskLogRepository,TaskRepository $taskRepository,TaskLogPersister $taskLogPersister,TaskPersister $taskPersister,TaskDatatableProvider $taskDatatableProvider,ProjectRepository $projectRepository,ProjectTypeRepository $projectTypeRepository,TaskTypeRepository $taskTypeRepository,TaskStatusRepository $taskStatusRepository,UserRepository $userRepository,TokenStorageInterface $tokenStorage)
  53.     {
  54.         $this->entity $entity;
  55.         $this->datatableProvider $datatableProvider;
  56.         $this->translator $translator;
  57.         $this->taskManager $taskManager;
  58.         $this->taskLogRepository $taskLogRepository;
  59.         $this->taskRepository $taskRepository;
  60.         $this->taskLogPersister $taskLogPersister;
  61.         $this->taskPersister $taskPersister;
  62.         $this->taskDatatableProvider $taskDatatableProvider;
  63.         $this->projectRepository $projectRepository;
  64.         $this->projectTypeRepository $projectTypeRepository;
  65.         $this->taskTypeRepository $taskTypeRepository;
  66.         $this->taskStatusRepository $taskStatusRepository;
  67.         $this->userRepository $userRepository;
  68.         $this->tokenStorage $tokenStorage;
  69.     }
  70.     public function listAction(Request $request): Response
  71.     {
  72. //        $notActiveProjetStatu=[ProjectStatus::PROJECT_STATUS_BEFEJEZETT, ProjectStatus::PROJECT_STATUS_FELFUGESZTETT, ProjectStatus::PROJECT_STATUS_VISSZAUTASITOTT];
  73. //        $projects=$this->projectRepository->getProjectByStatusNotIn($notActiveProjetStatu);
  74.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  75.         $projects=$this->projectRepository->findAll();
  76.         $projectTypes=$this->projectTypeRepository->findAll();
  77.         $taskTypes=$this->taskTypeRepository->findAll();
  78.         $taskStatus=$this->taskStatusRepository->findAll();
  79.         $user=$this->tokenStorage->getToken()->getUser();
  80.         $user_id=$user->getId();
  81.         $isSuperAdmin in_array("ROLE_SUPER_ADMIN"$user->getRoles());
  82.         $selectedStatus $isSuperAdmin
  83.             ? [TaskStatus::TASK_STATUS_LETREHOZOTTTaskStatus::TASK_STATUS_FEJLESZTESALATTTaskStatus::TASK_STATUS_BEFEJEZETT]
  84.             : [TaskStatus::TASK_STATUS_LETREHOZOTTTaskStatus::TASK_STATUS_FEJLESZTESALATT];
  85.         $users=$this->userRepository->findAll();
  86.         return $this->renderWithExtraParams('/task/task_view.html.twig', array(
  87.             'projects'=>$projects,
  88.             'projectTypes'=>$projectTypes,
  89.             'taskTypes'=>$taskTypes,
  90.             'taskStatus'=>$taskStatus,
  91.             'selectedStatus'=>$selectedStatus,
  92.             'user_id'=>$user_id,
  93.             'current_user_id'=>$user_id,
  94.             'is_super_admin'=>$isSuperAdmin,
  95.             'users'=>$users
  96.         ));
  97.     }
  98.     /**
  99.      * @Route("/admin/app/task/task_list", name="task_list", methods={"POST"} )
  100.      */
  101.     public function taskListAction()
  102.     {
  103.         $user $this->tokenStorage->getToken()->getUser();
  104.         $user_id $user->getId();
  105.         $isSuperAdmin in_array("ROLE_SUPER_ADMIN"$user->getRoles());
  106.         $selectedStatus $isSuperAdmin
  107.             ? [TaskStatus::TASK_STATUS_LETREHOZOTTTaskStatus::TASK_STATUS_FEJLESZTESALATT,  TaskStatus::TASK_STATUS_BEFEJEZETT]
  108.             : [TaskStatus::TASK_STATUS_LETREHOZOTTTaskStatus::TASK_STATUS_FEJLESZTESALATT];
  109.         $adata['data'] = $this->datatableProvider->datatableRow($selectedStatus$user_id);
  110.         return $this->json($adata);
  111.     }
  112.     /**
  113.      * @Route("/admin/app/apv/task_filtered", name="task_filtered", methods={"POST"} )
  114.      */
  115.     public function taskFilteredAction(Request $request): Response
  116.     {
  117.         $adata['adata'] = $this->taskDatatableProvider->getFilteredData($request);
  118.         return $this->json($adata);
  119.     }
  120.     /**
  121.      * @Route("/admin/app/task/task_new", name="task_new", methods={"POST"} )
  122.      */
  123.     public function taskNewAction(Request $request): Response
  124.     {
  125.         if (!$this->isGranted('IS_AUTHENTICATED_FULLY')) {
  126.             // AJAX-kérés esetén 401-es válasz küldése
  127.             if ($request->isXmlHttpRequest()) {
  128.                 return new JsonResponse(['error' => 'Unauthorized'], 401);
  129.             }
  130.             // Nem AJAX-kérés esetén hozzáférés megtagadása
  131.             throw new AccessDeniedException('Hozzáférés megtagadva');
  132.         }
  133.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  134.         $currentUser $this->tokenStorage->getToken()->getUser();
  135.         $isSuperAdmin in_array("ROLE_SUPER_ADMIN"$currentUser->getRoles());
  136.         $project $this->projectRepository->getProjectsForTaskAdd($isSuperAdmin);
  137.         $user $this->entity->getRepository(User::class)->findAll();
  138.         $taskType $this->entity->getRepository(TaskType::class)->findAll();
  139.         $taskStatus $this->entity->getRepository(TaskStatus::class)->findAll();
  140.         $lastWorkedDay $this->taskManager->getLastWorkedDay();
  141.         return $this->renderWithExtraParams('/task/task_new_edit.html.twig', array(
  142.             'project'=>$project,
  143.             'user'=>$user,
  144.             'taskType'=>$taskType,
  145.             'title'=>$this->translator->trans('New task'),
  146.             'edited'=>false,
  147.             'lastWorkedDay'=>$lastWorkedDay,
  148.             'taskStatus'=>$taskStatus
  149.         ));
  150.     }
  151.     /**
  152.      * @Route("/admin/app/task/task_edit", name="task_edit", methods={"POST"} )
  153.      */
  154.     public function taskEditAction(Request $request): Response
  155.     {
  156.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  157.         $id $request->get('id');
  158.         $task $this->entity->getRepository(Task::class)->find($id);
  159.         
  160.         // Ellenőrzés: Ha befejezett task, karbantartási projekt és van tranche_id, csak super admin módosíthatja
  161.         $currentUser $this->tokenStorage->getToken()->getUser();
  162.         $isSuperAdmin in_array("ROLE_SUPER_ADMIN"$currentUser->getRoles());
  163.         
  164.         if ($task->getTaskStatus()->getId() == TaskStatus::TASK_STATUS_BEFEJEZETT &&
  165.             $task->getProject()->getProjectType()->getId() == ProjectType::PROJECT_TYPE_KARBANTARTAS &&
  166.             $task->getTranche() !== null &&
  167.             !$isSuperAdmin) {
  168.             return new JsonResponse(['error' => 'Ez a feladat nem módosítható. Csak Super Admin módosíthatja a lezárt karbantartási feladatokat, amelyekhez tartozik tranche.'], 403);
  169.         }
  170.         
  171.         $project $this->projectRepository->getProjectsForTaskAdd($isSuperAdmin);
  172.         // Szerkesztéskor a feladat jelenlegi projektje mindig szerepeljen a listában (ha nem Super Admin)
  173.         $currentProject $task->getProject();
  174.         if ($currentProject && !in_array($currentProject$projecttrue)) {
  175.             $project array_merge([$currentProject], $project);
  176.         }
  177.         $taskStatus $this->entity->getRepository(TaskStatus::class)->findAll();
  178.         $user $this->entity->getRepository(User::class)->findAll();
  179.         $taskType $this->entity->getRepository(TaskType::class)->findAll();
  180.         return $this->renderWithExtraParams('/task/task_new_edit.html.twig', array(
  181.             'project'=>$project,
  182.             'user'=>$user,
  183.             'task'=>$task,
  184.             'title'=>$this->translator->trans('Edit task'),
  185.             'taskStatus'=>$taskStatus,
  186.             'taskType'=>$taskType,
  187.             'edited'=>true
  188.         ));
  189.     }
  190.     /**
  191.      * @Route("/admin/app/task/task_save", name="task_save", methods={"POST"} )
  192.      */
  193.     public function taskSaveAction(Request $request): Response
  194.     {
  195.         $task $this->taskPersister->insertUpdateTask($request);
  196.         $data[] = $this->taskDatatableProvider->getRow($task);
  197.         return new JsonResponse(array('msg' => true,'datatableRow' =>$data[0]),  200);
  198.     }
  199.     /**
  200.      * @Route("/admin/app/task/task_new_log", name="task_new_log", methods={"POST"} )
  201.      */
  202.     public function taskNewLogAction(Request $request): Response
  203.     {
  204.         $id $request->get('id');
  205.         $task $this->entity->getRepository(Task::class)->find($id);
  206.         $lastWorkedDay $this->taskManager->getLastWorkedDay();
  207.         return $this->renderWithExtraParams('/task/task_new_edit_log.html.twig', array(
  208.             'task'=>$task,
  209.             'title'=>$this->translator->trans('New log'),
  210.             'edited'=>false,
  211.             'lastWorkedDay'=>$lastWorkedDay
  212.         ));
  213.     }
  214.     /**
  215.      * @Route("/admin/app/task/task_edit_log", name="task_edit_log", methods={"POST"} )
  216.      */
  217.     public function taskEditLogAction(Request $request): Response
  218.     {
  219.         $id $request->get('id');
  220.         $taskLog $this->taskLogRepository->find($id);
  221.         return $this->renderWithExtraParams('/task/task_new_edit_log.html.twig', array(
  222.             'task'=>$taskLog->getTask(),
  223.             'title'=>$this->translator->trans('Edit log'),
  224.             'taskLog'=>$taskLog,
  225.             'workedHourMin'=>$this->taskManager->convertMinInHourMin($taskLog->getWorkedMinutes()),
  226.             'edited'=>true
  227.         ));
  228.     }
  229.     /**
  230.      * @Route("/admin/app/task/task_save_log", name="task_save_log", methods={"POST"} )
  231.      */
  232.     public function taskSaveLogAction(Request $request): Response
  233.     {
  234.         $this->taskLogPersister->insertUpdateTaskLog($request);
  235.         $task $this->taskRepository->find($request->get('taskId'));
  236.         $data[] = $this->datatableProvider->getRow($task);
  237.         return new JsonResponse(array('msg' => true,'datatableRow' =>$data[0]),  200);
  238.     }
  239.     /**
  240.      * @Route("/admin/app/task/task_delete_log", name="task_delete_log", methods={"POST"} )
  241.      */
  242.     public function taskDeleteLogAction(Request $request): Response
  243.     {
  244.         $logId = (int)$request->get('logId');
  245.         $taskId = (int)$request->get('taskId');
  246.         $taskLog $this->taskLogRepository->find($logId);
  247.         $this->entity->remove($taskLog);
  248.         $this->entity->flush();
  249.         $task $this->taskRepository->find($taskId);
  250.         $data[] = $this->taskDatatableProvider->getRow($task);
  251.         return new JsonResponse(array('msg' => true,'datatableRow' =>$data[0]),  200);
  252.     }
  253.     /**
  254.      * @Route("/admin/app/task/task_delete", name="task_delete", methods={"POST"} )
  255.      */
  256.     public function taskDeleteAction(Request $request): Response
  257.     {
  258.         $id = (int)$request->get('id');
  259.         $task $this->taskRepository->find($id);
  260.         $this->entity->remove($task);
  261.         $this->entity->flush();
  262.         return new JsonResponse(array('msg' => true),  200);
  263.     }
  264. }