<?php
declare(strict_types=1);
namespace App\Bundles\DiseaseCaseBundle\EventListener;
use App\Bundles\DiseaseCaseBundle\Form\Flow\CreateDiseaseCaseFlow;
use App\Bundles\DiseaseCaseBundle\Form\Request\CreateDiseaseCaseRequest;
use Craue\FormFlowBundle\Event\PostBindRequestEvent;
use Craue\FormFlowBundle\Event\PostBindSavedDataEvent;
use Craue\FormFlowBundle\Form\FormFlowEvents;
use DateTime;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class DiseaseCaseFlowSubscriber implements EventSubscriberInterface
{
private ?DateTime $previousPatientBirthday = null;
public static function getSubscribedEvents(): array
{
return [
FormFlowEvents::POST_BIND_REQUEST => 'onPostBindRequest',
FormFlowEvents::POST_BIND_SAVED_DATA => 'onPostBindSavedData',
];
}
public function onPostBindSavedData(PostBindSavedDataEvent $event): void
{
$data = $event->getFormData();
if (!$data instanceof CreateDiseaseCaseRequest) {
return;
}
$this->previousPatientBirthday = $data->getPatient()->getBirthday();
}
public function onPostBindRequest(PostBindRequestEvent $event): void
{
$data = $event->getFormData();
if (!$data instanceof CreateDiseaseCaseRequest) {
return;
}
if (is_null($this->previousPatientBirthday)) {
return;
}
/** @var CreateDiseaseCaseFlow $flow */
$flow = $event->getFlow();
$manager = $flow->getDataManager();
$diseaseCaseData = $manager->load($flow);
if ($data->getPatient()->getBirthday()?->getTimestamp() !== $this->previousPatientBirthday->getTimestamp()) {
$data->setReportedAt(null);
if (isset($diseaseCaseData[$flow::CASE_COMMON_INFO]['reportedAt'])) {
$diseaseCaseData[$flow::CASE_COMMON_INFO]['reportedAt'] = null;
}
$manager->save($flow, $diseaseCaseData);
}
}
}