<?php
declare(strict_types=1);
namespace App\Bundles\DiseaseCaseBundle\EventListener;
use App\Bundles\DiseaseCaseBundle\Entity\DiseaseCaseFieldValue;
use App\Bundles\DiseaseCaseBundle\Event\DiseaseCaseEditedEvent;
use App\Bundles\PatientBundle\Entity\Patient;
use App\Bundles\PatientBundle\Repository\PatientRepository;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
#[AsEventListener(event: DiseaseCaseEditedEvent::class, method: 'onDiseaseCaseEdited')]
class DiseaseCaseEditedEventListener
{
public function __construct(
private readonly EntityManagerInterface $entityManager,
) {
}
public function onDiseaseCaseEdited(DiseaseCaseEditedEvent $event): void
{
$diseaseCase = $event->getDiseaseCase();
$patient = $diseaseCase->getPatient();
$deadAtFieldValue = $diseaseCase->getFieldValue(PatientRepository::DEAD_AT_FIELD_NAME);
$this->updatePatientDeadAt($patient, $deadAtFieldValue);
$this->entityManager->flush();
}
private function updatePatientDeadAt(Patient $patient, ?DiseaseCaseFieldValue $deadAtValue): void
{
$value = $deadAtValue?->getValue()->getValue() ?? '';
!empty($value) ? $patient->setDeadAt(new DateTime($value)) : $patient->setDeadAt(null);
$this->entityManager->persist($patient);
}
}