From 05c925eec10a5c874b64692ff80b0b236849fd0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Fri, 20 Oct 2023 16:08:44 +0200 Subject: [PATCH] Feat: Implement duplicating assignments for admins --- assets/images/icons.svg | 3 ++ .../Admin/Assignment/DuplicateController.php | 19 ++++++++----- src/Entity/Assignment.php | 28 +++++++++++++++++++ .../admin/assignment/duplicate.html.twig | 10 +++++++ templates/admin/assignment/index.html.twig | 3 ++ 5 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 templates/admin/assignment/duplicate.html.twig diff --git a/assets/images/icons.svg b/assets/images/icons.svg index d663341..77b452d 100644 --- a/assets/images/icons.svg +++ b/assets/images/icons.svg @@ -87,6 +87,9 @@ + + + diff --git a/src/Controller/Admin/Assignment/DuplicateController.php b/src/Controller/Admin/Assignment/DuplicateController.php index 762b9ff..e4cc4d7 100644 --- a/src/Controller/Admin/Assignment/DuplicateController.php +++ b/src/Controller/Admin/Assignment/DuplicateController.php @@ -12,7 +12,7 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Http\Attribute\IsGranted; -class EditController extends AbstractController +class DuplicateController extends AbstractController { public function __construct( private readonly EntityManagerInterface $entityManager, @@ -20,26 +20,31 @@ class EditController extends AbstractController ) { } - #[Route('/admin/assignment/edit/{uuid}', name: 'app_admin_assignment_edit')] + #[Route('/admin/assignment/duplicate/{uuid}', name: 'app_admin_assignment_duplicate')] #[IsGranted('ROLE_ADMINISTRATIVE')] public function index(Assignment $assignment, Request $request): Response { - $form = $this->createForm(AssignmentType::class, $assignment); + $copy = Assignment::duplicate($assignment); + + $form = $this->createForm(AssignmentType::class, $copy); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { + $this->entityManager->persist($copy); $this->entityManager->flush(); - $this->addFlash('success', 'Der Einsatz wurde aktualisiert'); + $this->addFlash('success', 'Der Einsatz wurde dupliziert'); - $this->logger->info('Edit assignment', [ + $this->logger->info('Duplicate assignment', [ 'assignment' => $assignment->getUuid(), ]); - return $this->redirectToRoute('app_admin_assignment_index'); + return $this->redirectToRoute('app_admin_assignment_edit', [ + 'uuid' => $copy->getUuid(), + ]); } - return $this->render('admin/assignment/edit.html.twig', [ + return $this->render('admin/assignment/duplicate.html.twig', [ 'form' => $form, ]); } diff --git a/src/Entity/Assignment.php b/src/Entity/Assignment.php index 8be5a10..a1f2d26 100644 --- a/src/Entity/Assignment.php +++ b/src/Entity/Assignment.php @@ -90,6 +90,34 @@ class Assignment implements BlameableEntityInterface, TimestampableEntityInterfa $this->documents = new ArrayCollection(); } + public static function duplicate(Assignment $assignment): static + { + $instance = new static(); + + $instance + ->setDestination($assignment->getDestination()) + ->setJobProfile($assignment->getJobProfile()) + ->setAvailableDispositions($assignment->getAvailableDispositions()) + ->setShowAvailableDispositions($assignment->isShowAvailableDispositions()) + ->setDateFrom($assignment->getDateFrom()) + ->setDateTo($assignment->getDateTo()) + ->setPickupDate($assignment->getPickupDate()) + ->setPickup($assignment->getPickup()) + ->setBenefits($assignment->getBenefits()) + ->setContact($assignment->getContact()) + ; + + $assignment->getFees()->map(function (Fee $fee) use ($instance) { + $instance->addFee($fee); + }); + + $assignment->getDocuments()->map(function (Upload $document) use ($instance) { + $instance->addDocument($document); + }); + + return $instance; + } + public function getId(): ?int { return $this->id; diff --git a/templates/admin/assignment/duplicate.html.twig b/templates/admin/assignment/duplicate.html.twig new file mode 100644 index 0000000..8d24743 --- /dev/null +++ b/templates/admin/assignment/duplicate.html.twig @@ -0,0 +1,10 @@ +{% extends 'admin/layout.html.twig' %} + +{% block title %}Einsatz duplizieren{% endblock %} + +{% block content %} +

+ Einsatz duplizieren +

+ {% include 'admin/assignment/_form.html.twig' %} +{% endblock %} \ No newline at end of file diff --git a/templates/admin/assignment/index.html.twig b/templates/admin/assignment/index.html.twig index dcf28ee..954183b 100644 --- a/templates/admin/assignment/index.html.twig +++ b/templates/admin/assignment/index.html.twig @@ -65,6 +65,9 @@
+ + {{ icon('copy', 'w-5 h-5') }} + {{ icon('edit', 'w-5 h-5') }}