<?php
namespace App\Controller\Admin;
use App\Controller\BaseController;
use App\DataTable\TaskType as TaskTypeDT;
use App\Entity\Task;
use App\Entity\TaskStatut;
use App\Form\TaskType;
use App\Manager\AttachementManager;
use App\Repository\ProjectRepository;
use App\Repository\TaskRepository;
use App\Repository\TaskStatutRepository;
use App\Service\StatutService;
use App\Service\StringService;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/admin/task-project")
*/
class TaskController extends BaseController
{
/**
* @Route("/", name="admin_task_index", methods={"GET","POST"})
* @param Request $request
* @param TaskStatutRepository $taskStatutRepository
* @return Response
*/
public function index(Request $request, TaskStatutRepository $taskStatutRepository): Response
{
$datatable = $this->createDataTable(TaskTypeDT::class);
$datatable->handleRequest($request);
if ($datatable->isCallback()) {
return $datatable->getResponse();
}
return $this->render('admin/task/index.html.twig', [
'datatable' => $datatable,
'taskStatus' => $taskStatutRepository->findAllActive(),
]);
}
/**
* @Route("/new", name="admin_task_new", methods={"GET", "POST"},
* defaults={"title": "Ajout d' une tâche"})
* @param Request $request
* @param TaskStatutRepository $taskStatusRepository
* @param ProjectRepository $projectRepository
* @param AttachementManager $attachementManager
* @return Response
*/
public function new(Request $request, TaskStatutRepository $taskStatusRepository,
ProjectRepository $projectRepository, AttachementManager $attachementManager): Response
{
$task = new Task();
$project = $projectRepository->findOneBy(['id' => $request->query->get('project')]);
if ($project){
$task->setProject($project);
}
$projects = $projectRepository->findBy(['status' => true]);
if (count($projects) === 1){
$task->setProject(current($projects));
}
$statut = $taskStatusRepository->getFirst();
$task->setTaskStatus($statut);
$form = $this->createForm(TaskType::class, $task);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$task->setReference(StringService::generateRandomStringByProject($task));
$this->entityManager->persist($task);
$this->entityManager->flush();
$files = $request->files->get('taskfile');
if ($files){
$attachementManager->addAttach($files,$task, null);
}
$this->addFlash('success', 'Enregistrement efféctué avec succès');
return $this->redirectToRoute('admin_task_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('admin/task/new.html.twig', [
'task' => $task,
'form' => $form,
'taskStatus' => $taskStatusRepository->findAll(),
]);
}
/**
* @Route("/{id}", name="admin_task_show", methods={"GET"},
* defaults={"title": "Detail d' une tâche"})
* @param Task $task
* @param TaskRepository $taskRepository
* @param TaskStatutRepository $taskStatutRepository
* @return Response
*/
public function show(Task $task, TaskRepository $taskRepository, TaskStatutRepository $taskStatutRepository): Response
{
$taskRecents = $taskRepository->getTaskRecent($task->getId());
return $this->render('admin/task/show.html.twig', [
'task' => $task,
'taskRecents' => $taskRecents,
'taskStatus' => $taskStatutRepository->findAllActive(),
]);
}
/**
* @Route("/{id}/edit", name="admin_task_edit", methods={"GET", "POST"},
* defaults={"title": "Edition d' une tâche"})
* @param Request $request
* @param Task $task
* @param TaskStatutRepository $taskStatusRepository
* @param AttachementManager $attachementManager
* @return Response
*/
public function edit(Request $request, Task $task,
TaskStatutRepository $taskStatusRepository,
AttachementManager $attachementManager): Response
{
$taskStatus = $taskStatusRepository-> findAll();
$form = $this->createForm(TaskType::class, $task);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->entityManager->flush();
$files = $request->files->get('taskfile');
if ($files){
$attachementManager->addAttach($files, $task, null);
}
$this->addFlash('success', 'Enregistrement efféctué avec succès');
return $this->redirectToRoute('admin_task_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('admin/task/edit.html.twig', [
'task' => $task,
'form' => $form,
'taskStatus' => $taskStatus,
]);
}
/**
* @Route("/{id}/delete", name="admin_task_delete", methods={"POST","GET"})
* @param Task $task
* @return Response
*/
public function delete(Task $task): Response
{
if ($task){
$this->entityManager->remove($task);
$this->entityManager->flush();
$this->addFlash('success', 'Suppression efféctué avec succées');
}
return $this->redirectToRoute('admin_task_index', [], Response::HTTP_SEE_OTHER);
}
}