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
+
+
+
+
+
+
+ |
+ {{ knp_pagination_sortable(pagination, 'Einsatzbeginn', 'assignment.dateFrom') }}
+ |
+
+ {{ knp_pagination_sortable(pagination, 'Einsatzende', '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') }}
+ |
+ |
+
+
+
+ {% for application in pagination %}
+ {% set assignment = application.assignment %}
+
+ |
+ {% 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 }}
+ |
+
+
+ |
+
+ {% else %}
+
+ |
+
+ Keine Daten
+
+ |
+
+ {% endfor %}
+
+
+ {{ 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