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 @@
|