src/Admin/Modules/CRM/Controller/TaskController.php line 48
<?phpnamespace App\Admin\Modules\CRM\Controller;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\JsonResponse;use Doctrine\Persistence\ManagerRegistry;use Knp\Component\Pager\PaginatorInterface;use App\Admin\Modules\Contract\Entity\ContractClient;use App\Admin\Modules\CRM\Service\UserRepositoryService;use App\Admin\Modules\CRM\Service\TaskService;use App\Admin\Modules\CRM\Entity\CRMTask;use App\Admin\Modules\CRM\Form\TaskSearchFilterType;use App\Admin\Modules\CRM\Form\TaskType;use App\Admin\Modules\CRM\Form\TaskDurationPopupType;use App\Admin\Modules\CRM\Form\TaskNoteType;class TaskController extends BaseController{private const PAGE_SIZE = 15;private $_paginator;private $_doctrine;private $_userRepositoryService;private $_taskService;public function __construct(PaginatorInterface $paginator,ManagerRegistry $doctrine,UserRepositoryService $userRepositoryService,TaskService $taskService){$this->_paginator = $paginator;$this->_doctrine = $doctrine;$this->_userRepositoryService = $userRepositoryService;$this->_taskService = $taskService;}public function beforeAction(){$url = $this->generateUrl('admin_crm_task_list');$this->addBreadcrumb('CRM', $url);$this->addBreadcrumb('Lista zadań', $url);}public function list(Request $request){$filterForm = $this->createForm(TaskSearchFilterType::class);$filterForm->handleRequest($request);if (!$filterForm->isSubmitted() || $filterForm->isValid()){$filter = $filterForm->getData();$filter->join['t.client'] = 'client';$filter->leftJoin['t.group'] = '_group';$query = $this->_doctrine->getRepository(CRMTask::class)->getSearchQuery($filter);if ($query){$pagination = $this->_paginator->paginate($query,$request->query->getInt('page', 1),self::PAGE_SIZE,array('defaultSortFieldName' => 't.date', 'defaultSortDirection' => 'asc'));$tasks = array();foreach($pagination as $task)$tasks[] = $this->_taskService->getDetails($task, ['include' => ['client_data']]);}}return $this->render('Admin/Modules/CRM/Templates/Task/list.html.twig', ['filterForm' => $filterForm->createView(),'pagination' => $pagination ?? null,'tasks' => $tasks ?? null]);}public function listUpdateTaskItemAjax(Request $request, $id, $viewType){$task = $this->_doctrine->getRepository(CRMTask::class)->find($id);if (!$task)$this->throwHttpError400();switch($viewType){case TaskSearchFilterType::VIEW_TYPE_LIST:$view = 'listViewListTaskItem.html.twig';break;case TaskSearchFilterType::VIEW_TYPE_TILED:$view = 'listViewTiledTaskItem.html.twig';break;default:$this->throwHttpError400();}return $this->render('Admin/Modules/CRM/Templates/Task/partials/' . $view, array('data' => $this->_taskService->getDetails($task, ['include' => ['client_data']]),'requestUri' => $request->query->get('requestUri')));}public function listTodayTasksWidget(Request $request){return $this->render('Admin/Modules/CRM/Templates/Task/partials/listTodayTasksWidget.html.twig', array('data' => $this->_taskService->getTaskListTodayTasksWidgetData(),'requestUri' => $request->getRequestUri()));}public function details(Request $request, $id){$task = $this->_doctrine->getRepository(CRMTask::class)->find($id);if (!$task)throw $this->createNotFoundException();$this->addBreadcrumb('Karta zadania', $request->getRequestUri());return $this->render('Admin/Modules/CRM/Templates/Task/details.html.twig', array('data' => $this->_taskService->getDetails($task, ['include' => ['client_data', 'files']]),'returnUrl' => $this->getReturnUrl($this->generateUrl('admin_crm_task_list'))));}public function detailsActivitiesWidget(Request $request, CRMTask $task = null, $id = null, $activityId = null, $isDone = null){if ($id)$task = $this->_doctrine->getRepository(CRMTask::class)->find($id);if (!$task)$this->throwHttpError400();if (!count($task->getActivities()))return new Response();if ($activityId){$activityIds = explode(',', $activityId);foreach($activityIds as $id){$activity = null;foreach($task->getActivities() as $_activity){if ($_activity->getId() == $id){$activity = $_activity;break;}}if (!$activity)$this->throwHttpError400();if (!$this->_taskService->setActivityDone($activity, (bool)(int)$isDone))$this->throwHttpError400();}}$doneActivityCount = 0;foreach($task->getActivities() as $activity){if ($activity->getDoneAt())$doneActivityCount++;}return $this->render('Admin/Modules/CRM/Templates/Task/partials/detailsActivitiesWidget.html.twig', array('task' => $task,'doneActivityCount' => $doneActivityCount,'canEdit' => !$task->getArchivedAt() && $task->getStatus() == CRMTask::STATUS_IN_PROGRESS));}public function detailsNotesWidget(Request $request, CRMTask $task = null, $id = null){if ($id)$task = $this->_doctrine->getRepository(CRMTask::class)->find($id);if (!$task)$this->throwHttpError400();if (!$task->getArchivedAt()){$form = $this->createForm(TaskNoteType::class);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()){$this->_taskService->addNote($form, $task);$form = $this->createForm(TaskNoteType::class);}}return $this->render('Admin/Modules/CRM/Templates/Task/partials/detailsNotesWidget.html.twig', array('task' => $task,'form' => isset($form) ? $form->createView() : null));}public function add(Request $request, $userId){if ($userId){$user = $this->_userRepositoryService->find($userId);if (!$user)$this->throwHttpError400();}if ($request->query->get('clientId')){$client = $this->_doctrine->getRepository(ContractClient::class)->find($request->query->get('clientId'));if (!$client)$this->throwHttpError400();}$returnUrl = $this->getReturnUrl($this->generateUrl('admin_crm_task_list'));$form = $this->createForm(TaskType::class, null, ['user' => $user ?? null, 'client' => $client ?? null]);$form->handleRequest($request);if ($form->isSubmitted()){if ($form->isValid()){$this->_taskService->add($form);$this->addFlash('success', 'Zadanie zostało dodane.');return $this->redirect($returnUrl);}else$this->addFlash('error', 'Popraw wszystkie błędy.');}$this->addBreadcrumb('Nowe zadanie', $request->getRequestUri());return $this->render('Admin/Modules/CRM/Templates/Task/edit.html.twig', array('formType' => $form->getConfig()->getType()->getInnerType(),'form' => $form->createView(),'returnUrl' => $returnUrl));}public function edit(Request $request, $id){$task = $this->_doctrine->getRepository(CRMTask::class)->find($id);if (!$task || $task->getArchivedAt())throw $this->createNotFoundException();$returnUrl = $this->getReturnUrl($this->generateUrl('admin_crm_task_list'));$form = $this->createForm(TaskType::class, $task);$form->handleRequest($request);if ($form->isSubmitted()){if ($form->isValid()){$this->_taskService->save($form);$this->addFlash('success', 'Zadanie zostało zapisane.');return $this->redirect($returnUrl);}else$this->addFlash('error', 'Popraw wszystkie błędy.');}$this->addBreadcrumb('Edycja zadania', $request->getRequestUri());return $this->render('Admin/Modules/CRM/Templates/Task/edit.html.twig', array('formType' => $form->getConfig()->getType()->getInnerType(),'form' => $form->createView(),'returnUrl' => $returnUrl));}public function updateFormAjax(Request $request, $id){if ($id){$task = $this->_doctrine->getRepository(CRMTask::class)->find($id);if (!$task)$this->throwHttpError400();}$form = $this->createForm(TaskType::class, $task ?? null, ['validation_groups' => false]);$form->handleRequest($request);return new JsonResponse(array('html' => $this->renderView('Admin/Modules/CRM/Templates/Task/partials/form.html.twig', array('formType' => $form->getConfig()->getType()->getInnerType(),'form' => $form->createView(),'returnUrl' => $this->getReturnUrl($this->generateUrl('admin_crm_task_list'))))));}public function moveToArchive($id){$task = $this->_doctrine->getRepository(CRMTask::class)->find($id);if (!$task || $task->getArchivedAt())throw $this->createNotFoundException();$this->_taskService->archive($task);$this->addFlash('success', 'Zadanie zostało zarchiwizowane.');return $this->redirect($this->getReturnUrl($this->generateUrl('admin_crm_task_list')));}public function delete($id){$task = $this->_doctrine->getRepository(CRMTask::class)->find($id);if (!$task || !$task->getArchivedAt())throw $this->createNotFoundException();$this->_taskService->delete($task);$this->addFlash('success', 'Zadanie zostało usunięte.');return $this->redirect($this->getReturnUrl($this->generateUrl('admin_crm_task_list')));}public function setStatus(Request $request, $id, $status){$task = $this->_doctrine->getRepository(CRMTask::class)->find($id);if (!$task || $task->getArchivedAt())throw $this->createNotFoundException();$prevStatus = $task->getStatus();$this->_taskService->setStatus($task, $status);if ($request->isXmlHttpRequest())return new Response();else{switch($status){case CRMTask::STATUS_IN_PROGRESS:$message = $prevStatus == CRMTask::STATUS_NEW ? 'Zadanie zostało rozpoczęte.' : 'Zadanie zostało wznowione.';break;case CRMTask::STATUS_DONE:$message = 'Zadanie zostało zakończone.';break;default:$message = 'Status zadania został zmieniony.';}$this->addFlash('success', $message);return $this->returnToPreviousPage();}}public function setDurationPopupAjax(Request $request, $id){$task = $this->_doctrine->getRepository(CRMTask::class)->find($id);if (!$task || $task->getArchivedAt())$this->throwHttpError400();$form = $this->createForm(TaskDurationPopupType::class, $task);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()){$this->_taskService->saveDuration($form);$status = true;}return new JsonResponse(array('html' => $this->renderView('Admin/Modules/CRM/Templates/Task/setDurationPopup.html.twig', ['form' => $form->createView(),'status' => $status ?? false])));}public function addNotePopupAjax(Request $request, $id){$task = $this->_doctrine->getRepository(CRMTask::class)->find($id);if (!$task || $task->getArchivedAt())$this->throwHttpError400();$form = $this->createForm(TaskNoteType::class);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()){$this->_taskService->addNote($form, $task);return new JsonResponse(array('status' => 'close'));}return new JsonResponse(array('html' => $this->renderView('Admin/Modules/CRM/Templates/Task/addNotePopup.html.twig', ['form' => $form->createView()])));}}