From 4372cdaaeb94c1d6473dfd7db295db8a4a3258ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Fri, 19 Apr 2024 12:34:04 +0200 Subject: [PATCH] fix: rework document and disposition workflow --- config/packages/workflow.yaml | 21 ++++--------- src/Entity/Disposition.php | 1 + .../DispositionWorkflowGuardSubscriber.php | 2 +- src/Repository/DispositionRepository.php | 20 +++++++++---- src/Service/Cron/DispositionStatusService.php | 5 ++-- templates/teamer/disposition/detail.html.twig | 30 +++++++++++++++++-- 6 files changed, 52 insertions(+), 27 deletions(-) diff --git a/config/packages/workflow.yaml b/config/packages/workflow.yaml index d706e0c..19caab6 100644 --- a/config/packages/workflow.yaml +++ b/config/packages/workflow.yaml @@ -12,8 +12,8 @@ framework: - new - checking_contract - confirmed + - ended - checking_invoice - - paid - completed transitions: upload_contract: @@ -23,23 +23,14 @@ framework: from: checking_contract to: confirmed reject_contract: - from: - - confirmed - - checking_contract + from: checking_contract to: new upload_invoice: - from: - - confirmed - - completed + from: ended to: checking_invoice + reject_invoice: + from: checking_invoice + to: ended confirm_invoice: from: checking_invoice - to: paid - reject_invoice: - from: - - paid - - checking_invoice - to: confirmed - complete: - from: confirmed to: completed diff --git a/src/Entity/Disposition.php b/src/Entity/Disposition.php index 69b1e91..c4eb649 100644 --- a/src/Entity/Disposition.php +++ b/src/Entity/Disposition.php @@ -23,6 +23,7 @@ class Disposition implements BlameableEntityInterface, TimestampableEntityInterf public const STATUS_NEW = 'new'; public const STATUS_CHECKING_CONTRACT = 'checking_contract'; public const STATUS_CONFIRMED = 'confirmed'; + public const STATUS_ENDED = 'ended'; public const STATUS_CHECKING_INVOICE = 'checking_invoice'; public const STATUS_PAID = 'paid'; public const STATUS_COMPLETED = 'completed'; diff --git a/src/EventListener/DispositionWorkflowGuardSubscriber.php b/src/EventListener/DispositionWorkflowGuardSubscriber.php index 6f20fb7..9f6b95d 100644 --- a/src/EventListener/DispositionWorkflowGuardSubscriber.php +++ b/src/EventListener/DispositionWorkflowGuardSubscriber.php @@ -110,7 +110,7 @@ class DispositionWorkflowGuardSubscriber implements EventSubscriberInterface $disposition = $event->getSubject(); $invoiceDocument = $disposition->getDocumentByType(Upload::TYPE_INVOICE); - if (null === $invoiceDocument || Upload::STATUS_CHECKED !== $invoiceDocument->getStatus()) { + if (null === $invoiceDocument || Upload::STATUS_PAID !== $invoiceDocument->getStatus()) { $message = $this ->translator ->trans('message.confirm_invoice.document_missing_or_not_checked') diff --git a/src/Repository/DispositionRepository.php b/src/Repository/DispositionRepository.php index 8cdc7d2..bcd24c5 100644 --- a/src/Repository/DispositionRepository.php +++ b/src/Repository/DispositionRepository.php @@ -225,13 +225,21 @@ class DispositionRepository extends ServiceEntityRepository return $qb ->innerJoin('disposition.assignment', 'assignment') ->innerJoin('assignment.destination', 'destination') - ->where($qb->expr()->orX( - $qb->expr()->andX( - $qb->expr()->isNotNull('assignment.dateTo'), - $qb->expr()->lte('assignment.dateTo', ':dateTo') - ), - $qb->expr()->lte('destination.dateTo', ':dateTo') + ->where($qb->expr()->andX( + $qb->expr()->in('disposition.status', ':status'), + $qb->expr()->orX( + $qb->expr()->andX( + $qb->expr()->isNotNull('assignment.dateTo'), + $qb->expr()->lte('assignment.dateTo', ':dateTo') + ), + $qb->expr()->lte('destination.dateTo', ':dateTo') + ) )) + ->setParameter('status', [ + Disposition::STATUS_NEW, + Disposition::STATUS_CHECKING_CONTRACT, + Disposition::STATUS_CONFIRMED, + ]) ->setParameter('dateTo', new \DateTimeImmutable()) ->getQuery() ->getResult() diff --git a/src/Service/Cron/DispositionStatusService.php b/src/Service/Cron/DispositionStatusService.php index 0774ef0..29fb1b8 100644 --- a/src/Service/Cron/DispositionStatusService.php +++ b/src/Service/Cron/DispositionStatusService.php @@ -18,7 +18,8 @@ class DispositionStatusService { $endedDispositions = $this ->entityManager - ->getRepository(Disposition::class)->findEndedDispositions() + ->getRepository(Disposition::class) + ->findEndedDispositions() ; if (0 === $count = count($endedDispositions)) { @@ -26,7 +27,7 @@ class DispositionStatusService } foreach ($endedDispositions as $disposition) { - $disposition->setStatus(Disposition::STATUS_COMPLETED); + $disposition->setStatus(Disposition::STATUS_ENDED); } $this->entityManager->flush(); diff --git a/templates/teamer/disposition/detail.html.twig b/templates/teamer/disposition/detail.html.twig index 9dded1c..a555dc3 100644 --- a/templates/teamer/disposition/detail.html.twig +++ b/templates/teamer/disposition/detail.html.twig @@ -5,7 +5,7 @@ {% block content %} {% set assignment = disposition.assignment %}

- {% if workflow_has_marked_place(disposition, 'completed') %} + {% if workflow_has_marked_place(disposition, 'ended') %} Dein Einsatz ist abgeschlossen {% else %} Dein Einsatz wurde bestätigt! @@ -76,10 +76,23 @@ {% endif %} {# Upload invoice #} - {% if workflow_has_marked_place(disposition, 'completed') %} + {% if workflow_has_marked_place(disposition, 'ended') %}

Honorarnote

+ + {# Existing invoice has been rejected #} + {% set invoice = disposition.documentByType('invoice') %} + {% if invoice and invoice.status == constant('App\\Entity\\Upload::STATUS_REJECTED') %} + + {% if invoice.comment %} +
+ Begründung: {{ invoice.comment|nl2br }} +
+ {% endif %} + {% endif %} + + {# New invoice #} {% if workflow_can(disposition, 'upload_invoice') %} {{ form_start(form) }}
@@ -135,10 +148,21 @@
Wir prüfen das Dokument schnellstmöglich.
+ + {# Existing upload is being checked #} + {% set invoice = disposition.documentByType('invoice') %} + {% if invoice and invoice.status == constant('App\\Entity\\Upload::STATUS_PENDING') %} + + {% if invoice.comment %} +
+ Begründung: {{ invoice.comment|nl2br }} +
+ {% endif %} + {% endif %} {% endif %} {# Invoice paid #} - {% if workflow_has_marked_place(disposition, 'paid') %} + {% if workflow_has_marked_place(disposition, 'completed') %}

Dein Honorar wurde überwiesen