src/Bundles/DiseaseCaseBundle/EventListener/DiseaseCaseFlowSubscriber.php line 27

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Bundles\DiseaseCaseBundle\EventListener;
  4. use App\Bundles\DiseaseCaseBundle\Form\Flow\CreateDiseaseCaseFlow;
  5. use App\Bundles\DiseaseCaseBundle\Form\Request\CreateDiseaseCaseRequest;
  6. use Craue\FormFlowBundle\Event\PostBindRequestEvent;
  7. use Craue\FormFlowBundle\Event\PostBindSavedDataEvent;
  8. use Craue\FormFlowBundle\Form\FormFlowEvents;
  9. use DateTime;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. class DiseaseCaseFlowSubscriber implements EventSubscriberInterface
  12. {
  13.     private ?DateTime $previousPatientBirthday null;
  14.     public static function getSubscribedEvents(): array
  15.     {
  16.         return [
  17.             FormFlowEvents::POST_BIND_REQUEST => 'onPostBindRequest',
  18.             FormFlowEvents::POST_BIND_SAVED_DATA => 'onPostBindSavedData',
  19.         ];
  20.     }
  21.     public function onPostBindSavedData(PostBindSavedDataEvent $event): void
  22.     {
  23.         $data $event->getFormData();
  24.         if (!$data instanceof CreateDiseaseCaseRequest) {
  25.             return;
  26.         }
  27.         $this->previousPatientBirthday $data->getPatient()->getBirthday();
  28.     }
  29.     public function onPostBindRequest(PostBindRequestEvent $event): void
  30.     {
  31.         $data $event->getFormData();
  32.         if (!$data instanceof CreateDiseaseCaseRequest) {
  33.             return;
  34.         }
  35.         if (is_null($this->previousPatientBirthday)) {
  36.             return;
  37.         }
  38.         /** @var CreateDiseaseCaseFlow $flow */
  39.         $flow $event->getFlow();
  40.         $manager $flow->getDataManager();
  41.         $diseaseCaseData $manager->load($flow);
  42.         if ($data->getPatient()->getBirthday()?->getTimestamp() !== $this->previousPatientBirthday->getTimestamp()) {
  43.             $data->setReportedAt(null);
  44.             if (isset($diseaseCaseData[$flow::CASE_COMMON_INFO]['reportedAt'])) {
  45.                 $diseaseCaseData[$flow::CASE_COMMON_INFO]['reportedAt'] = null;
  46.             }
  47.             $manager->save($flow$diseaseCaseData);
  48.         }
  49.     }
  50. }