src/Form/Type/DoctorType.php line 19

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\Type;
  4. use App\Entity\Doctor\Doctor;
  5. use App\Form\Choice\ClinicalManagerChoiceType;
  6. use App\Form\Choice\ProgramAutocompleteChoiceType;
  7. use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType;
  8. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  9. use Symfony\Component\Form\Extension\Core\Type\TextType;
  10. use Symfony\Component\Form\FormBuilderInterface;
  11. use Symfony\Component\Form\FormError;
  12. use Symfony\Component\Form\FormEvent;
  13. use Symfony\Component\Form\FormEvents;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. class DoctorType extends AbstractResourceType
  16. {
  17.     public function __construct(
  18.         private readonly TranslatorInterface $translator,
  19.         string $dataClass,
  20.         array $validationGroups = [],
  21.     ) {
  22.         parent::__construct($dataClass$validationGroups);
  23.     }
  24.     /**
  25.      * {@inheritdoc}
  26.      */
  27.     public function buildForm(FormBuilderInterface $builder, array $options): void
  28.     {
  29.         $builder
  30.             ->add('requiresValidationByClinicalManager'CheckboxType::class, [
  31.                 'label' => 'app.ui.requires_validation_by_clinical_manager',
  32.                 'required' => false,
  33.             ])
  34.             ->add('attachedClinicalManager'ClinicalManagerChoiceType::class, [
  35.                 'label' => 'app.ui.clinical_manager',
  36.                 'required' => false,
  37.             ])
  38.             ->add('programs'ProgramAutocompleteChoiceType::class, [
  39.                 'label' => 'app.ui.programs',
  40.                 'multiple' => true,
  41.                 'required' => false,
  42.             ])
  43.             ->add('makesAppointmentsOnExternalPlatform'CheckboxType::class, [
  44.                 'label' => 'app.ui.makes_appointments_on_external_platform',
  45.                 'required' => false,
  46.             ])
  47.             ->add('externalPlatformName'TextType::class, [
  48.                 'label' => 'app.ui.external_platform_name',
  49.                 'required' => false,
  50.             ])
  51.             ->add('externalPlatformLink'TextType::class, [
  52.                 'label' => 'app.ui.external_platform_link',
  53.                 'required' => false,
  54.             ])
  55.             ->add('sendTransactionalEmails'CheckboxType::class, [
  56.                 'label' => 'app.ui.send_transactional_emails',
  57.                 'required' => false,
  58.             ])
  59.             ->add('appAccessSeriderm360'CheckboxType::class, [
  60.                 'label' => 'app.ui.seriderm_360_access',
  61.                 'required' => false,
  62.             ])
  63.             ->addEventListener(FormEvents::SUBMIT, [$this'onSubmit']);
  64.     }
  65.     public function onSubmit(FormEvent $event): void
  66.     {
  67.         $form $event->getForm();
  68.         /** @var Doctor $doctor */
  69.         $doctor $event->getData();
  70.         $externalPlatformName $doctor->getExternalPlatformName();
  71.         $externalPlatformLink $doctor->getExternalPlatformLink();
  72.         if ($doctor->isMakesAppointmentsOnExternalPlatform()) {
  73.             if (empty($externalPlatformName)) {
  74.                 $form->get('externalPlatformName')->addError(new FormError($this->translator->trans('validator.error.value_can_not_be_blank', [], 'validators')));
  75.             }
  76.             if (empty($externalPlatformLink)) {
  77.                 $form->get('externalPlatformLink')->addError(new FormError($this->translator->trans('validator.error.value_can_not_be_blank', [], 'validators')));
  78.             }
  79.         }
  80.         if ($doctor->getAttachedClinicalManager() !== null) {
  81.             return;
  82.         }
  83.         $doctor->setRequiresValidationByClinicalManager(false);
  84.     }
  85.     public function getBlockPrefix(): string
  86.     {
  87.         return 'app_doctor_type';
  88.     }
  89. }