<?php
declare(strict_types=1);
namespace Due\EventListener;
use Due\Enum\DueStatus;
use Due\Event\DueUpdateEvent;
use Due\Repository\DueTokenRepository;
class DueUpdateListener
{
private $tokenRepository;
private $due;
public function __construct(DueTokenRepository $tokenRepository)
{
$this->tokenRepository = $tokenRepository;
}
public function onUpdate(DueUpdateEvent $dueUpdateEvent)
{
$this->due = $dueUpdateEvent->getDue();
$this->checkDueExpiredFields();
}
private function checkDueExpiredFields()
{
if ($this->hasUpdateResetStatus()) {
$this->resetStatus();
$this->expireDueToken();
$this->deleteDocument();
}
}
private function hasUpdateResetStatus(): bool {
return in_array($this->due->getStatus(), DueStatus::getEditResetStatuses());
}
private function resetStatus(): void
{
$this->due->setStatus(DueStatus::READY_TO_SIGN());
}
private function expireDueToken(): void
{
if ($dueToken = $this->tokenRepository->findOneByDue($this->due)) {
$dueToken->setExpiresAt(new \DateTimeImmutable());
$this->tokenRepository->save($dueToken);
}
}
private function deleteDocument(): void
{
$this->due->setDocument(null);
}
}