Feat: Add more workflow guards

This commit is contained in:
Björn Fromme
2023-10-13 15:17:11 +02:00
parent 98fc5fbf8b
commit f5e88b5418
2 changed files with 44 additions and 7 deletions
@@ -3,9 +3,10 @@
namespace App\EventListener;
use App\Entity\Disposition;
use App\Entity\Upload;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Workflow\Event\GuardEvent;
use Symfony\Contracts\Translation\TranslatorInterface;
class DispositionWorkflowGuardSubscriber implements EventSubscriberInterface
{
@@ -15,11 +16,28 @@ class DispositionWorkflowGuardSubscriber implements EventSubscriberInterface
public static function getSubscribedEvents(): array
{
return [
'workflow.disposition.guard.confirm_contract' => ['guardConfirmContract'],
'workflow.disposition.guard.upload_contract' => ['guardUploadContract'],
'workflow.disposition.guard.upload_invoice' => ['guardUploadInvoice'],
'workflow.disposition.guard.confirm_invoice' => ['guardConfirmInvoice'],
];
}
public function guardConfirmContract(GuardEvent $event): void
{
/** @var Disposition $disposition */
$disposition = $event->getSubject();
$contractDocument = $disposition->getDocumentByType(Upload::TYPE_CONTRACT);
if (null === $contractDocument || Upload::STATUS_CHECKED !== $contractDocument->getStatus()) {
$message = $this
->translator
->trans('message.confirm_contract.document_missing_or_not_checked')
;
$event->setBlocked(true, $message);
}
}
public function guardUploadContract(GuardEvent $event): void
{
/** @var Disposition $disposition */
@@ -75,4 +93,19 @@ class DispositionWorkflowGuardSubscriber implements EventSubscriberInterface
$event->setBlocked(true, $message);
}
}
public function guardConfirmInvoice(GuardEvent $event): void
{
/** @var Disposition $disposition */
$disposition = $event->getSubject();
$invoiceDocument = $disposition->getDocumentByType(Upload::TYPE_INVOICE);
if (null === $invoiceDocument || Upload::STATUS_CHECKED !== $invoiceDocument->getStatus()) {
$message = $this
->translator
->trans('message.confirm_invoice.document_missing_or_not_checked')
;
$event->setBlocked(true, $message);
}
}
}