diff --git a/src/Controller/ActivityController.php b/src/Controller/ActivityController.php index 7250ace..54b0b0e 100644 --- a/src/Controller/ActivityController.php +++ b/src/Controller/ActivityController.php @@ -129,14 +129,14 @@ // Get activity $activity = $activityRepository->find($id); - + // Get actors $actors = $actorRepository->findAll(); // Activity edit form /** @var ActivityEditForm $activityEditForm */ $activityEditForm = $this->createNamedCustomForm('edit', ActivityEditForm::class, [ - 'actors' => $actorRepository->findAll() + 'actors' => $actors, ]); $activityEditForm->handleRequest($request); if ($activityEditForm->isSubmitted() && $activityEditForm->isValid()) { @@ -184,7 +184,7 @@ ]); } } - + // Task add form /** @var TaskAddForm $taskAddForm */ $taskAddForm = $this->createNamedCustomForm('taskAdd', TaskAddForm::class, [ diff --git a/src/Controller/TaskController.php b/src/Controller/TaskController.php index c91ea68..398d841 100644 --- a/src/Controller/TaskController.php +++ b/src/Controller/TaskController.php @@ -10,6 +10,7 @@ use App\Repository\TaskRepository; use App\Form\Actors\TaskAddForm; use App\Form\Activity\TaskDeleteForm; +use App\Form\Task\TaskEditForm; class TaskController extends AbstractExtendedController { @@ -104,12 +105,40 @@ { // Get repositories $entityManager = $this->getDoctrine()->getManager(); + /** @var ActorRepository $actorRepository */ + $actorRepository = $entityManager->getRepository(ActorEntity::class); /** @var TaskRepository $taskRepository */ $taskRepository = $entityManager->getRepository(TaskEntity::class); // Get task $task = $taskRepository->find($id); + // Get actors + $actors = $actorRepository->findAll(); + + // Task edit form + /** @var TaskEditForm $taskEditForm */ + $taskEditForm = $this->createNamedCustomForm('taskEdit', TaskEditForm::class, [ + 'actors' => $actors + ]); + $taskEditForm->handleRequest($request); + if ($taskEditForm->isSubmitted() && $taskEditForm->isValid()) { + $errors = $taskEditForm->validate(); + if (empty($errors)) { + $taskEditForm->updateTask($task); + $entityManager->persist($task); + $entityManager->flush(); + return $this->ajaxFormAnswer([ + 'refresh' => true, + ]); + } else { + return $this->ajaxFormAnswer([ + 'error' => 'Tâche non trouvé', + 'code' => Response::HTTP_BAD_REQUEST, + ]); + } + } + // Task delete form /** @var TaskDeleteForm $taskDeleteForm */ $taskDeleteForm = $this->createNamedCustomForm('taskDelete', TaskDeleteForm::class); @@ -117,21 +146,12 @@ if ($taskDeleteForm->isSubmitted() && $taskDeleteForm->isValid()) { $errors = $taskDeleteForm->validate(); if (empty($errors)) { - if (!is_null($task)) { - $entityManager->remove($task); - $entityManager->flush(); - if (is_null($task->getActivity())) { - return $this->ajaxFormAnswer([ - 'redirect' => $this->generateUrl('task_tasks', [], UrlGenerator::ABSOLUTE_PATH), - ]); - } else { - return $this->ajaxFormAnswer([ - 'redirect' => $this->generateUrl('activity_activity', [ - 'id' => $task->getActivity() - ->getId() - ], UrlGenerator::ABSOLUTE_PATH), - ]); - } + $entityManager->remove($task); + $entityManager->flush(); + if (is_null($task->getActivity())) { + return $this->ajaxFormAnswer([ + 'redirect' => $this->generateUrl('task_tasks', [], UrlGenerator::ABSOLUTE_PATH), + ]); } return $this->ajaxFormAnswer([ 'error' => 'Tâche non trouvé', @@ -145,8 +165,12 @@ } } + // Update fields + $taskEditForm->updateFields($task); + return $this->render('task/task.html.twig', [ 'task' => $task, + 'taskEditForm' => $taskEditForm, 'taskDeleteForm' => $taskDeleteForm, ]); } diff --git a/src/Form/Task/TaskEditForm.php b/src/Form/Task/TaskEditForm.php new file mode 100644 index 0000000..033c264 --- /dev/null +++ b/src/Form/Task/TaskEditForm.php @@ -0,0 +1,115 @@ +actors = $data['actors']; + parent::__construct($formBuilder, $data, $usesToken); + } + + /** + * Update fields with task data + * + * @param TaskEntity $task + * @return self + */ + public function updateFields(TaskEntity $task): self + { + $this->form->setData([ + 'name' => $task->getName(), + 'status' => $task->getStatus(), + 'actor' => $task->getActor(), + 'planifiedDate' => $task->getPlanifiedDate(), + 'executionDate' => $task->getExecutionDate(), + ]); + + return $this; + } + + /** + * Update task + * + * @param TaskEntity $task + * @return self + */ + public function updateTask(TaskEntity $task): self + { + $data = $this->form->getData(); + $task->setName($data['name']); + $task->setStatus($data['status']); + $task->setActor($data['actor']); + $task->setPlanifiedDate($data['planifiedDate']); + $task->setExecutionDate($data['executionDate']); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getTemplate(): string + { + return '_includes/html/form/task/edit.html.twig'; + } + + /** + * {@inheritdoc} + */ + protected function addFields($formBuilder, $options): void + { + $formBuilder->add('name', TextType::class, [ + 'required' => true + ]) + ->add('actor', EntityType::class, [ + 'class' => ActorEntity::class, + 'choices' => $this->actors, + 'group_by' => function (ActorEntity $choice) { + if ($choice->getFollowed()) { + return 'Suivi'; + } + if ($choice->getActive()) { + return 'Actif'; + } + + return 'Inactif'; + }, + 'choice_label' => 'displayName', + 'required' => false, + ]) + ->add('status', ChoiceType::class, [ + 'choices' => TaskEntity::VALID_STATUS, + 'choice_label' => function ($choice, $key, $value) { + return StatusEnum::STATUS_NAME[$choice]; + }, + ]) + ->add('planifiedDate', DateType::class, [ + 'required' => false, + 'widget' => 'single_text', + ]) + ->add('executionDate', DateType::class, [ + 'required' => false, + 'widget' => 'single_text', + ]) + ->add('submit', SubmitType::class); + } +} \ No newline at end of file diff --git a/templates/_includes/html/form/task/edit.html.twig b/templates/_includes/html/form/task/edit.html.twig new file mode 100644 index 0000000..a092359 --- /dev/null +++ b/templates/_includes/html/form/task/edit.html.twig @@ -0,0 +1,33 @@ +{% import '_includes/macros/status.html.twig' as statusTools %} + +{{ form_start(form, {attr: {class: 'ajax-form'}}) }} +
+
+
+ {{ form_label(form.name, 'Nom', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.name, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.status, 'Status', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.status, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.actor, 'Acteur', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.actor, {attr: {class: 'w-100'}}) }} +
+
+
+
+ {{ form_label(form.planifiedDate, 'Planifié', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.planifiedDate, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_label(form.executionDate, 'Executé', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.executionDate, {attr: {class: 'w-100'}}) }} +
+
+
+

+

+{{ form_widget(form.submit, {attr: {class: 'w-100'}, label: 'Enregistrer'}) }} +{{ form_end(form) }} \ No newline at end of file diff --git a/templates/task/task.html.twig b/templates/task/task.html.twig index 98fe9e6..d098fcf 100644 --- a/templates/task/task.html.twig +++ b/templates/task/task.html.twig @@ -18,7 +18,9 @@

Editer

-
+
+ {% include '_includes/html/genericForm.html.twig' with {'form': taskEditForm} %} +