src/Bundles/DiseaseCaseBundle/EventListener/DiseaseCaseEditedEventListener.php line 23

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Bundles\DiseaseCaseBundle\EventListener;
  4. use App\Bundles\DiseaseCaseBundle\Entity\DiseaseCaseFieldValue;
  5. use App\Bundles\DiseaseCaseBundle\Event\DiseaseCaseEditedEvent;
  6. use App\Bundles\PatientBundle\Entity\Patient;
  7. use App\Bundles\PatientBundle\Repository\PatientRepository;
  8. use DateTime;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
  11. #[AsEventListener(eventDiseaseCaseEditedEvent::class, method'onDiseaseCaseEdited')]
  12. class DiseaseCaseEditedEventListener
  13. {
  14.     public function __construct(
  15.         private readonly EntityManagerInterface $entityManager,
  16.     ) {
  17.     }
  18.     public function onDiseaseCaseEdited(DiseaseCaseEditedEvent $event): void
  19.     {
  20.         $diseaseCase $event->getDiseaseCase();
  21.         $patient $diseaseCase->getPatient();
  22.         $deadAtFieldValue $diseaseCase->getFieldValue(PatientRepository::DEAD_AT_FIELD_NAME);
  23.         $this->updatePatientDeadAt($patient$deadAtFieldValue);
  24.         $this->entityManager->flush();
  25.     }
  26.     private function updatePatientDeadAt(Patient $patient, ?DiseaseCaseFieldValue $deadAtValue): void
  27.     {
  28.         $value $deadAtValue?->getValue()->getValue() ?? '';
  29.         !empty($value) ? $patient->setDeadAt(new DateTime($value)) : $patient->setDeadAt(null);
  30.         $this->entityManager->persist($patient);
  31.     }
  32. }