From 168a69c103e3e824859026af7d52917281f9234b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Fri, 20 Oct 2023 16:41:30 +0200 Subject: [PATCH] Feat: Add functionality to duplicate availabilities --- .../Availability/DuplicateController.php | 56 +++++++++++++++++++ src/Entity/Availability.php | 13 +++++ .../admin/system/availability/index.html.twig | 8 +++ 3 files changed, 77 insertions(+) create mode 100644 src/Controller/Admin/System/Availability/DuplicateController.php diff --git a/src/Controller/Admin/System/Availability/DuplicateController.php b/src/Controller/Admin/System/Availability/DuplicateController.php new file mode 100644 index 0000000..2eaec01 --- /dev/null +++ b/src/Controller/Admin/System/Availability/DuplicateController.php @@ -0,0 +1,56 @@ +generateUrl('app_admin_system_availability_duplicate', ['id' => $availability->getId()]); + + $form = $this->createForm(AvailabilityType::class, $copy, ['action' => $action, 'ajax_submit' => true]); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $this->entityManager->persist($copy); + $this->entityManager->flush(); + + $this->addFlash('success', 'Der Zeitraum wurde dupliziert.'); + $this->logger->info('Duplicate availability', [ + 'availability' => $availability, + ]); + + $redirectUrl = $this->generateUrl('app_admin_system_availability_index'); + $response->setCloseAndRedirect($redirectUrl); + } else { + $content = $this->renderView('admin/system/availability/form.html.twig', [ + 'form' => $form, + ]); + $response->setContent($content); + } + + return $this->json($response); + } +} \ No newline at end of file diff --git a/src/Entity/Availability.php b/src/Entity/Availability.php index 4cb1eac..53ca2d9 100644 --- a/src/Entity/Availability.php +++ b/src/Entity/Availability.php @@ -45,6 +45,19 @@ class Availability implements BlameableEntityInterface, TimestampableEntityInter $this->teamers = new ArrayCollection(); } + public static function duplicate(Availability $availability): static + { + $instance = new static(); + + $instance + ->setDateFrom($availability->getDateFrom()) + ->setDateTo($availability->getDateTo()) + ->setDescription($availability->getDescription()) + ; + + return $instance; + } + public function __toString() { return sprintf('%s - %s', $this->getDateFrom()->format('d.m.Y'), $this->getDateTo()->format('d.m.Y')); diff --git a/templates/admin/system/availability/index.html.twig b/templates/admin/system/availability/index.html.twig index dbfd1ce..d213873 100644 --- a/templates/admin/system/availability/index.html.twig +++ b/templates/admin/system/availability/index.html.twig @@ -55,6 +55,14 @@ }) }}> {{ icon('edit') }} +