From 7084e1528ef32f94d36d85d914ebce24e60d3c72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Tue, 10 Oct 2023 17:50:50 +0200 Subject: [PATCH] WIP: Implement application process --- .../Teamer/Application/IndexController.php | 49 +++++++++++ .../Teamer/Disposition/DetailController.php | 7 +- .../Teamer/Document/IndexController.php | 18 ++++ .../Teamer/Feedback/IndexController.php | 18 ++++ src/Entity/Upload.php | 4 + src/Menu/TeamerMenuBuilder.php | 8 +- src/Repository/ApplicationRepository.php | 16 ++++ templates/admin/application/index.html.twig | 4 +- templates/teamer/application/index.html.twig | 85 +++++++++++++++++++ templates/teamer/disposition/detail.html.twig | 3 + translations/messages.de.yaml | 19 +++++ 11 files changed, 225 insertions(+), 6 deletions(-) create mode 100644 src/Controller/Teamer/Application/IndexController.php create mode 100644 src/Controller/Teamer/Document/IndexController.php create mode 100644 src/Controller/Teamer/Feedback/IndexController.php create mode 100644 templates/teamer/application/index.html.twig diff --git a/src/Controller/Teamer/Application/IndexController.php b/src/Controller/Teamer/Application/IndexController.php new file mode 100644 index 0000000..9c1a227 --- /dev/null +++ b/src/Controller/Teamer/Application/IndexController.php @@ -0,0 +1,49 @@ +getUser(); + $teamer = $user->getTeamer(); + + $query = $this + ->applicationRepository + ->getPendingForTeamerQuery($teamer) + ; + + $pagination = $this->paginator->paginate( + $query, + $request->query->getInt('page', 1), + 10, + [ + 'defaultSortFieldName' => 'assignment.dateFrom', + 'defaultSortDirection' => 'asc', + ] + ); + + return $this->render('teamer/application/index.html.twig', [ + 'pagination' => $pagination, + ]); + } +} \ No newline at end of file diff --git a/src/Controller/Teamer/Disposition/DetailController.php b/src/Controller/Teamer/Disposition/DetailController.php index 4214e38..c84f300 100644 --- a/src/Controller/Teamer/Disposition/DetailController.php +++ b/src/Controller/Teamer/Disposition/DetailController.php @@ -2,20 +2,25 @@ namespace App\Controller\Teamer\Disposition; +use App\Controller\Traits\ReturnUrlTrait; use App\Entity\Disposition; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Http\Attribute\IsGranted; class DetailController extends AbstractController { + use ReturnUrlTrait; + #[Route('/teamer/disposition/detail/{uuid}', name: 'app_teamer_disposition_detail')] #[IsGranted('VIEW', subject: 'disposition')] - public function index(Disposition $disposition): Response + public function index(Disposition $disposition, Request $request): Response { return $this->render('teamer/disposition/detail.html.twig', [ 'disposition' => $disposition, + 'returnUrl' => $this->getReturnUrl($request, 'app_teamer_index'), ]); } } \ No newline at end of file diff --git a/src/Controller/Teamer/Document/IndexController.php b/src/Controller/Teamer/Document/IndexController.php new file mode 100644 index 0000000..0f6c95e --- /dev/null +++ b/src/Controller/Teamer/Document/IndexController.php @@ -0,0 +1,18 @@ +render(''); + } +} \ No newline at end of file diff --git a/src/Controller/Teamer/Feedback/IndexController.php b/src/Controller/Teamer/Feedback/IndexController.php new file mode 100644 index 0000000..8b6be52 --- /dev/null +++ b/src/Controller/Teamer/Feedback/IndexController.php @@ -0,0 +1,18 @@ +render(''); + } +} \ No newline at end of file diff --git a/src/Entity/Upload.php b/src/Entity/Upload.php index caa9d05..bdf2336 100644 --- a/src/Entity/Upload.php +++ b/src/Entity/Upload.php @@ -17,10 +17,14 @@ class Upload implements BlameableEntityInterface, TimestampableEntityInterface public const TYPE_PHOTO = 'photo'; public const TYPE_CERTIFICATE = 'certificate'; + public const TYPE_CONTRACT = 'contract'; + public const TYPE_INVOICE = 'invoice'; public const STATUS_NEW = 'new'; public const STATUS_IN_PROCESS = 'in_process'; public const STATUS_CHECKED = 'checked'; + public const STATUS_PAYED = 'payed'; + public const STATUS_ERROR = 'error'; #[ORM\Id] #[ORM\GeneratedValue] diff --git a/src/Menu/TeamerMenuBuilder.php b/src/Menu/TeamerMenuBuilder.php index 2e30cbf..7282cc3 100644 --- a/src/Menu/TeamerMenuBuilder.php +++ b/src/Menu/TeamerMenuBuilder.php @@ -45,13 +45,13 @@ class TeamerMenuBuilder extends AbstractMenuBuilder 'route' => false, 'title' => 'Meine Einsätze', 'icon' => 'bus', - 'children' => [ + 'children' => [# [ 'route' => 'app_teamer_bookmark_index', 'title' => 'Merkliste', ], [ - 'route' => 'app_teamer_bookmark_index', + 'route' => 'app_teamer_application_index', 'title' => 'Offene Bewerbungen', ], [ @@ -63,11 +63,11 @@ class TeamerMenuBuilder extends AbstractMenuBuilder 'title' => 'Letzte Einsätze', ], [ - 'route' => 'app_teamer_bookmark_index', + 'route' => 'app_teamer_document_index', 'title' => 'Meine Dokumente', ], [ - 'route' => 'app_teamer_bookmark_index', + 'route' => 'app_teamer_feedback_index', 'title' => 'Mein Feedback', ], ], diff --git a/src/Repository/ApplicationRepository.php b/src/Repository/ApplicationRepository.php index d766531..2841f50 100644 --- a/src/Repository/ApplicationRepository.php +++ b/src/Repository/ApplicationRepository.php @@ -3,6 +3,7 @@ namespace App\Repository; use App\Entity\Application; +use App\Entity\Teamer; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\ORM\Query; use Doctrine\Persistence\ManagerRegistry; @@ -35,4 +36,19 @@ class ApplicationRepository extends ServiceEntityRepository ->getQuery() ; } + + public function getPendingForTeamerQuery(Teamer $teamer): Query + { + $qb = $this->createQueryBuilder('application'); + + return $qb + ->select('application', 'assignment', 'destination', 'job_profile') + ->innerJoin('application.assignment', 'assignment') + ->innerJoin('assignment.destination', 'destination') + ->innerJoin('assignment.jobProfile', 'job_profile') + ->where($qb->expr()->eq('application.teamer', ':teamer')) + ->setParameter('teamer', $teamer) + ->getQuery() + ; + } } diff --git a/templates/admin/application/index.html.twig b/templates/admin/application/index.html.twig index 4eab495..b646b1c 100644 --- a/templates/admin/application/index.html.twig +++ b/templates/admin/application/index.html.twig @@ -57,7 +57,9 @@ {{ application.teamer }} - + {% else %} diff --git a/templates/teamer/application/index.html.twig b/templates/teamer/application/index.html.twig new file mode 100644 index 0000000..06ecd76 --- /dev/null +++ b/templates/teamer/application/index.html.twig @@ -0,0 +1,85 @@ +{% extends 'teamer/layout.html.twig' %} + +{% block title %}Meine Bewerbungen{% endblock %} + +{% block content %} +

+ Meine offenen Bewerbungen +

+
+
+ + + + + + + + + + + + + + {% for application in pagination %} + {% set assignment = application.assignment %} + + + + + + + + + + {% else %} + + + + {% endfor %} + +
+ {{ knp_pagination_sortable(pagination, 'Einsatz­beginn', 'assignment.dateFrom') }} + + {{ knp_pagination_sortable(pagination, 'Einsatz­ende', 'assignment.dateTo') }} + + {{ knp_pagination_sortable(pagination, 'Jobprofil', 'assignment.jobProfile') }} + + {{ knp_pagination_sortable(pagination, 'Destination', 'destination.dateFrom') }} + + {{ knp_pagination_sortable(pagination, 'Busbegleitung', 'assignment.pickup') }} + + {{ knp_pagination_sortable(pagination, 'Status', 'application.status') }} +
+ {% set dateFrom = assignment.dateFrom ? assignment.dateFrom : assignment.destination.dateFrom %} + {{ dateFrom|date('d.m.Y') }} + + {% set dateTo = assignment.dateTo ? assignment.dateTo : assignment.destination.dateTo %} + {{ dateTo|date('d.m.Y') }} + + {{ assignment.jobProfile.name }} + + {{ assignment.destination.product }} +
+ {{ assignment.destination.hotel }} +
+ {{ assignment.pickup ? assignment.pickup|bpn_pickup_label|default('-') : '-' }} +
+ {{ assignment.pickupDate ? assignment.pickupDate|date('d.m.Y') : '' }} +
+ {{ ('label.application.status.' ~ application.status)|trans }} + + +
+
+ Keine Daten +
+
+ {{ knp_pagination_render(pagination) }} +
+
+{% endblock %} \ No newline at end of file diff --git a/templates/teamer/disposition/detail.html.twig b/templates/teamer/disposition/detail.html.twig index 72f2562..8835ccd 100644 --- a/templates/teamer/disposition/detail.html.twig +++ b/templates/teamer/disposition/detail.html.twig @@ -20,6 +20,9 @@
{{ assignment.contact }}, {{ assignment.contact.email }}

+ + zurück + {% endblock %} \ No newline at end of file diff --git a/translations/messages.de.yaml b/translations/messages.de.yaml index 4ef8d1e..e8ae59a 100644 --- a/translations/messages.de.yaml +++ b/translations/messages.de.yaml @@ -1,3 +1,22 @@ +label: + application: + status: + new: neu + pending: in Bearbeitung + rejected: abgelehnt + document: + type: + invoice: Honorarnote + contract: Honorarvertrag + certificate: Lizenznachweis + photo: Foto + status: + new: neu + in_process: in Bearbeitung + checked: geprüft + payed: bezahlt + error: Fehler + uploader: drop_files: Dateien hier ablegen oder click_here: hier klicken