diff --git a/migrations/Version20250210162751.php b/migrations/Version20250210162751.php new file mode 100644 index 0000000..991f734 --- /dev/null +++ b/migrations/Version20250210162751.php @@ -0,0 +1,33 @@ +addSql('ALTER TABLE teamer ADD remarks_internal LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE user DROP hotel_code'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE teamer DROP remarks_internal'); + $this->addSql('ALTER TABLE user ADD hotel_code VARCHAR(32) DEFAULT NULL'); + } +} diff --git a/src/Controller/Admin/Application/InfoController.php b/src/Controller/Admin/Application/InfoController.php deleted file mode 100644 index 9f81bac..0000000 --- a/src/Controller/Admin/Application/InfoController.php +++ /dev/null @@ -1,19 +0,0 @@ -render('admin/application/modal_info.html.twig', [ - 'application' => $application, - ]); - } -} \ No newline at end of file diff --git a/src/Controller/Admin/Teamer/RemarksController.php b/src/Controller/Admin/Teamer/RemarksController.php new file mode 100644 index 0000000..2a74c22 --- /dev/null +++ b/src/Controller/Admin/Teamer/RemarksController.php @@ -0,0 +1,67 @@ +getReturnUrl($request, 'app_administrative_teamer_index'); + + $form = $this + ->createFormBuilder([ + 'remarks' => $teamer->getRemarksInternal(), + ], [ + 'action' => $this->generateUrl('app_admin_teamer_remarks_internal', [ + 'uuid' => $teamer->getUuid(), + 'r' => $returnUrl, + ]) + ]) + ->add('remarks', TextareaType::class, [ + 'label' => 'Anmerkungen', + 'required' => true, + 'attr' => [ + 'rows' => 10, + ], + ]) + ->getForm() + ; + + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $teamer->setRemarksInternal($form->get('remarks')->getData()); + $this->entityManager->flush(); + + $this->addFlash('success', 'Die Anmerkungen wurden gespeichert.'); + + return $this->redirectToRoute('app_admin_teamer_remarks_internal', [ + 'uuid' => $teamer->getUuid(), + 'r' => $returnUrl, + ]); + } + + return $this->render('admin/teamer/remarks_internal.html.twig', [ + 'teamer' => $teamer, + 'form' => $form->createView(), + 'returnUrl' => $returnUrl, + ]); + } +} \ No newline at end of file diff --git a/src/Controller/Admin/Teamer/TrainingAttendance/CreateController.php b/src/Controller/Admin/Teamer/TrainingAttendance/CreateController.php index 99ed80f..c8d9fed 100644 --- a/src/Controller/Admin/Teamer/TrainingAttendance/CreateController.php +++ b/src/Controller/Admin/Teamer/TrainingAttendance/CreateController.php @@ -51,8 +51,18 @@ class CreateController extends AbstractController $yearFrom = (int) date('Y'); $yearsRange = range($yearFrom + 1, $yearFrom - 10); + $returnUrl = $this->getReturnUrl($request, 'app_admin_teamer_skills', [ + 'uuid' => $teamer->getUuid(), + ]); + $form = $this - ->createFormBuilder($attendance) + ->createFormBuilder($attendance, [ + 'action' => $this->generateUrl('app_admin_teamer_skills_training_attendance_create', [ + 'training_id' => $training->getId(), + 'teamer_id' => $teamer->getId(), + 'r' => $returnUrl, + ]) + ]) ->add('date', AbbreviatedDateType::class, [ 'label' => 'Datum', 'years' => $yearsRange, @@ -79,11 +89,7 @@ class CreateController extends AbstractController 'training_name' => $training->getName(), ]); - $redirectUrl = $this->getReturnUrl($request, 'app_admin_teamer_skills', [ - 'uuid' => $teamer->getUuid(), - ]); - - return new HxRedirectResponse($redirectUrl); + return new HxRedirectResponse($returnUrl); } return $this->render('admin/teamer/training_attendance/modal_create.html.twig', [ diff --git a/src/Controller/Administrative/Teamer/InfoController.php b/src/Controller/Administrative/Teamer/InfoController.php index 181a4e5..b2fe535 100644 --- a/src/Controller/Administrative/Teamer/InfoController.php +++ b/src/Controller/Administrative/Teamer/InfoController.php @@ -2,28 +2,35 @@ namespace App\Controller\Administrative\Teamer; +use App\Controller\Traits\ReturnUrlTrait; use App\Entity\Teamer; use App\Repository\DispositionRepository; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\ExpressionLanguage\Expression; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Attribute\IsGranted; class InfoController extends AbstractController { + use ReturnUrlTrait; + public function __construct(private readonly DispositionRepository $dispositionRepository) {} #[Route('/administrative/teamer/info/{uuid}', name: 'app_administrative_teamer_info')] #[IsGranted(new Expression('is_granted("ROLE_ADMINISTRATIVE") or is_granted("ROLE_HOUSE_MANAGER")'))] - public function index(Teamer $teamer): Response + public function index(Teamer $teamer, Request $request): Response { + $returnUrl = $this->getReturnUrl($request, 'app_administrative_assignment_index'); + $recentDispositions = $this->dispositionRepository->findRecentDispositionsByTeamer($teamer); return $this->render('administrative/teamer/modal_info.html.twig', [ 'teamer' => $teamer, 'recentDispositions' => $recentDispositions, + 'returnUrl' => $returnUrl, ]); } } \ No newline at end of file diff --git a/src/Entity/Teamer.php b/src/Entity/Teamer.php index ab33739..e3fa4f2 100644 --- a/src/Entity/Teamer.php +++ b/src/Entity/Teamer.php @@ -83,6 +83,9 @@ class Teamer implements TimestampableEntityInterface #[ORM\Column(type: Types::TEXT, nullable: true)] private ?string $remarks = null; + #[ORM\Column(type: Types::TEXT, nullable: true)] + private ?string $remarksInternal = null; + #[ORM\ManyToMany(targetEntity: Availability::class, inversedBy: 'teamers')] #[ORM\OrderBy(['dateFrom' => 'ASC'])] private Collection $availabilities; @@ -388,6 +391,18 @@ class Teamer implements TimestampableEntityInterface return $this; } + public function getRemarksInternal(): ?string + { + return $this->remarksInternal; + } + + public function setRemarksInternal(?string $remarksInternal): static + { + $this->remarksInternal = $remarksInternal; + + return $this; + } + /** * @return Collection */ diff --git a/src/Menu/AdminMenuBuilder.php b/src/Menu/AdminMenuBuilder.php index 74f7532..1fa6cc4 100644 --- a/src/Menu/AdminMenuBuilder.php +++ b/src/Menu/AdminMenuBuilder.php @@ -285,6 +285,13 @@ class AdminMenuBuilder extends AbstractMenuBuilder 'title' => 'Vergangene Einsätze', ], ]); + $menu->addChild('Anmerkungen (intern)', [ + 'route' => 'app_admin_teamer_remarks_internal', + 'routeParameters' => $this->getDefaultRouteParameters('uuid'), + 'linkAttributes' => [ + 'title' => 'Anmerkungen (intern)', + ], + ]); $this->addDivider($menu); diff --git a/templates/_partials/_menu.html.twig b/templates/_partials/_menu.html.twig index 524a491..d2c853a 100644 --- a/templates/_partials/_menu.html.twig +++ b/templates/_partials/_menu.html.twig @@ -64,7 +64,8 @@ {% elseif item.extras.divider is defined %}
{% else %} -
+
{{ block('label') }}
{% endif %} diff --git a/templates/admin/application/modal_info.html.twig b/templates/admin/application/modal_info.html.twig deleted file mode 100644 index 4e5398e..0000000 --- a/templates/admin/application/modal_info.html.twig +++ /dev/null @@ -1,50 +0,0 @@ -{% extends 'htmx_modal.html.twig' %} - -{% block title %}Teamer:inneninfo {{ application.teamer }}{% endblock %} - -{% block content %} -
-
- {% include '_partials/_assignment_requirements_info.html.twig' with { - 'assignment': application.assignment, - 'teamer': application.teamer - } %} -
    - {% for type in ['ski', 'snowboard'] %} -
  • -
    - {{ type|license_label }} - {% set license = application.teamer.licenseOfType(type) %} - {% if license %} -
    - {{ license.date|date('m/Y') }} - {% if is_granted('DOWNLOAD', license.certificate) %} - - {{ icon('download', 'w-4 h-4') }} - - {% endif %} -
    - {% else %} - {{ icon('minus', 'w-4 h-4') }} - {% endif %} -
    -
  • - {% endfor %} -
-
-
- {% set teamer = application.teamer %} - {% if teamer.photo %} - {{ teamer.firstName }} - {% else %} -
- {{ icon('user', 'w-32 h-32 text-gray-200') }} -
- {% endif %} -
-
-{% endblock %} \ No newline at end of file diff --git a/templates/admin/teamer/remarks_internal.html.twig b/templates/admin/teamer/remarks_internal.html.twig new file mode 100644 index 0000000..a9d1ee0 --- /dev/null +++ b/templates/admin/teamer/remarks_internal.html.twig @@ -0,0 +1,25 @@ +{% extends 'admin/layout.html.twig' %} + +{% block title %}Interne Anmerkungen zu {{ teamer }}{% endblock %} + +{% block content %} +
+
+ {{ knp_menu_render(knp_menu_get('admin_teamer')) }} +
+
+

+ Interne Anmerkungen zu {{ teamer }} +

+ {{ form_start(form) }} +
+ {{ form_row(form.remarks) }} +
+ + {{ form_rest(form) }} + {{ form_end(form) }} +
+
+{% endblock %} \ No newline at end of file diff --git a/templates/admin/teamer/skills.html.twig b/templates/admin/teamer/skills.html.twig index 93d19f0..174f9c9 100644 --- a/templates/admin/teamer/skills.html.twig +++ b/templates/admin/teamer/skills.html.twig @@ -27,7 +27,9 @@