src/Bundles/PatientBundle/EventListener/PatientSoftDeleteListener.php line 20

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Bundles\PatientBundle\EventListener;
  4. use App\Bundles\OutbreakBundle\Event\RecalculateOutbreakFieldsEvent;
  5. use App\Bundles\PatientBundle\Event\PatientDeleteEvent;
  6. use DateTime;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
  9. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  10. #[AsEventListener(eventPatientDeleteEvent::class, method'onDelete')]
  11. class PatientSoftDeleteListener
  12. {
  13.     public function __construct(
  14.         private readonly EntityManagerInterface $entityManager,
  15.         private readonly EventDispatcherInterface $eventDispatcher,
  16.     ) {
  17.     }
  18.     public function onDelete(PatientDeleteEvent $event): void
  19.     {
  20.         $patient $event->getPatient();
  21.         $outbreaksToRecalculate = [];
  22.         if (!$patient->isDeleted()) {
  23.             return;
  24.         }
  25.         foreach ($patient->getDiseaseCases() as $diseaseCase) {
  26.             $diseaseCase->setDeletedAt(new DateTime());
  27.             if ($outbreak $diseaseCase->getOutbreak()) {
  28.                 $outbreaksToRecalculate[$outbreak->getId()] = $outbreak;
  29.                 $outbreak->removeDiseaseCase($diseaseCase);
  30.                 $this->entityManager->persist($outbreak);
  31.             }
  32.             $this->entityManager->persist($diseaseCase);
  33.         }
  34.         $this->entityManager->flush();
  35.         foreach ($outbreaksToRecalculate as $outbreak) {
  36.             $this->eventDispatcher->dispatch(new RecalculateOutbreakFieldsEvent($outbreak));
  37.         }
  38.     }
  39. }