<?php
namespace App\Event;
use App\Entity\Application;
use App\Service\EmailSender;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Workflow\Event\Event;
use Symfony\Component\Workflow\Event\GuardEvent;
class ApplicationEvents implements EventSubscriberInterface
{
private $sender;
public function __construct(EmailSender $sender)
{
$this->sender = $sender;
}
public static function getSubscribedEvents()
{
return [
'workflow.application.guard.complete' => ['guardCompletion'],
'workflow.application.completed.complete' => ['hasCompleted'],
'workflow.application.guard.approve_tier_one' => ['guardTierOneApproval'],
'workflow.application.completed.approve_tier_one' => ['hasTierOneApproval'],
'workflow.application.guard.approve_tier_two' => ['guardTierTwoApproval'],
'workflow.application.completed.approve_tier_two' => ['hasTierTwoApproval'],
'workflow.application.guard.submit' => ['guardSubmission'],
'workflow.application.completed.submit' => ['hasSubmitted'],
'workflow.application.completed.alter' => ['hasAltered'],
];
}
public function guardCompletion(GuardEvent $event)
{
/* @var Application $application */
$application = $event->getSubject();
if (!$application->canComplete()) {
$event->setBlocked(true);
}
}
public function hasCompleted(Event $event)
{
/* @var Application $application */
$application = $event->getSubject();
$this->sender->sendApplicationCompleteEmail($application);
}
public function guardTierOneApproval(GuardEvent $event)
{
/* @var Application $application */
$application = $event->getSubject();
if (!$application->hasTierOneApproval()) {
$event->setBlocked(true);
}
}
public function hasTierOneApproval(Event $event)
{
/* @var Application $application */
$application = $event->getSubject();
if ($application->getAward()->getAwardType()->getAcronym() !== "VAC") {
$this->sender->sendTierOneApprovedEmail($application);
}
}
public function guardTierTwoApproval(GuardEvent $event)
{
/* @var Application $application */
$application = $event->getSubject();
if (!$application->hasTierTwoApproval()) {
$event->setBlocked(true);
}
}
public function hasTierTwoApproval(Event $event)
{
/* @var Application $application */
$application = $event->getSubject();
$awardTypeAcronym = $application->getAward()->getAwardType()->getAcronym() ?? "";
if ($awardTypeAcronym == "PHD") {
// $this->sender->sendTierTwoApprovedEmail($application);
}
}
public function guardSubmission(GuardEvent $event)
{
/* @var Application $application */
$application = $event->getSubject();
if (!$application->hasTierTwoApproval()) {
$event->setBlocked(true);
}
}
public function hasSubmitted(Event $event)
{
/* @var Application $application */
$application = $event->getSubject();
$this->sender->sendSubmittedEmail($application);
}
public function hasAltered(Event $event)
{
/* @var Application $application */
$application = $event->getSubject();
$application->removeCurrentSignatories();
$this->sender->sendAlterationEmail($application);
}
}