From cc93a0be0c5e55b441574c133b3df834dc3dec4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Sat, 21 Oct 2023 10:50:47 +0200 Subject: [PATCH] Feat: Make dispositions deletable by admins --- migrations/Version20231021084644.php | 31 ++++++++ .../Admin/Disposition/DeleteController.php | 70 +++++++++++++++++++ src/Entity/Disposition.php | 3 +- src/Event/DispositionDeletedEvent.php | 19 +++++ templates/admin/assignment/detail.html.twig | 15 +++- templates/admin/disposition/delete.html.twig | 9 +++ 6 files changed, 143 insertions(+), 4 deletions(-) create mode 100644 migrations/Version20231021084644.php create mode 100644 src/Controller/Admin/Disposition/DeleteController.php create mode 100644 src/Event/DispositionDeletedEvent.php create mode 100644 templates/admin/disposition/delete.html.twig diff --git a/migrations/Version20231021084644.php b/migrations/Version20231021084644.php new file mode 100644 index 0000000..f63a0a2 --- /dev/null +++ b/migrations/Version20231021084644.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE disposition DROP deleted_at'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE disposition ADD deleted_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\''); + } +} diff --git a/src/Controller/Admin/Disposition/DeleteController.php b/src/Controller/Admin/Disposition/DeleteController.php new file mode 100644 index 0000000..4438630 --- /dev/null +++ b/src/Controller/Admin/Disposition/DeleteController.php @@ -0,0 +1,70 @@ +generateUrl('app_admin_disposition_delete', ['uuid' => $disposition->getUuid()]); + $form = $this + ->createFormBuilder($disposition, ['action' => $formAction, 'ajax_submit' => true]) + ->add('remarks', TextareaType::class, [ + 'label' => 'Kommentar/Begründung', + 'required' => false, + 'attr' => [ + 'rows' => 3, + ], + ]) + ->getForm() + ; + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $this->eventDispatcher->dispatch(new DispositionDeletedEvent($disposition), DispositionDeletedEvent::NAME); + + $this->entityManager->remove($disposition); + $this->entityManager->flush(); + + $this->addFlash('success', 'Die Einteilung wurde gelöscht'); + $this->logger->info('Delete disposition', [ + 'disposition_id' => $disposition->getId(), + 'teamer' => (string) $disposition->getTeamer(), + ]); + + $response->setCloseAndRedirect($this->generateUrl('app_admin_assignment_detail', [ + 'uuid' => $disposition->getAssignment()->getUuid(), + ])); + } else { + $response->setContent($this->renderView('admin/disposition/delete.html.twig', [ + 'form' => $form, + ])); + } + + return $this->json($response); + } +} \ No newline at end of file diff --git a/src/Entity/Disposition.php b/src/Entity/Disposition.php index 744d001..ef544c8 100644 --- a/src/Entity/Disposition.php +++ b/src/Entity/Disposition.php @@ -13,11 +13,10 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Uid\Uuid; #[ORM\Entity(repositoryClass: DispositionRepository::class)] -class Disposition implements BlameableEntityInterface, TimestampableEntityInterface, SoftDeletableEntityInterface +class Disposition implements BlameableEntityInterface, TimestampableEntityInterface { use BlameableEntity; use TimestampableEntity; - use SoftDeletableEntity; public const STATUS_NEW = 'new'; public const STATUS_CHECKING_CONTRACT = 'checking_contract'; diff --git a/src/Event/DispositionDeletedEvent.php b/src/Event/DispositionDeletedEvent.php new file mode 100644 index 0000000..a5e4d31 --- /dev/null +++ b/src/Event/DispositionDeletedEvent.php @@ -0,0 +1,19 @@ +disposition; + } +} \ No newline at end of file diff --git a/templates/admin/assignment/detail.html.twig b/templates/admin/assignment/detail.html.twig index e8089bf..af0eac7 100644 --- a/templates/admin/assignment/detail.html.twig +++ b/templates/admin/assignment/detail.html.twig @@ -91,7 +91,7 @@ {% else %} - + Es liegen keine Bewerbungen vor... @@ -143,12 +143,23 @@
+ {% if is_granted('DELETE', disposition) %} + + {% endif %}
{% else %} - + Es gibt noch keine Einteilungen... diff --git a/templates/admin/disposition/delete.html.twig b/templates/admin/disposition/delete.html.twig new file mode 100644 index 0000000..e41282b --- /dev/null +++ b/templates/admin/disposition/delete.html.twig @@ -0,0 +1,9 @@ +{{ form_start(form) }} +
+ {{ form_row(form.remarks) }} +
+ +{{ form_rest(form) }} +{{ form_end(form) }}