<?php
declare(strict_types=1);
namespace App\Form\Type;
use App\Entity\Doctor\Doctor;
use App\Form\Choice\ClinicalManagerChoiceType;
use App\Form\Choice\ProgramAutocompleteChoiceType;
use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Contracts\Translation\TranslatorInterface;
class DoctorType extends AbstractResourceType
{
public function __construct(
private readonly TranslatorInterface $translator,
string $dataClass,
array $validationGroups = [],
) {
parent::__construct($dataClass, $validationGroups);
}
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('requiresValidationByClinicalManager', CheckboxType::class, [
'label' => 'app.ui.requires_validation_by_clinical_manager',
'required' => false,
])
->add('attachedClinicalManager', ClinicalManagerChoiceType::class, [
'label' => 'app.ui.clinical_manager',
'required' => false,
])
->add('programs', ProgramAutocompleteChoiceType::class, [
'label' => 'app.ui.programs',
'multiple' => true,
'required' => false,
])
->add('makesAppointmentsOnExternalPlatform', CheckboxType::class, [
'label' => 'app.ui.makes_appointments_on_external_platform',
'required' => false,
])
->add('externalPlatformName', TextType::class, [
'label' => 'app.ui.external_platform_name',
'required' => false,
])
->add('externalPlatformLink', TextType::class, [
'label' => 'app.ui.external_platform_link',
'required' => false,
])
->add('sendTransactionalEmails', CheckboxType::class, [
'label' => 'app.ui.send_transactional_emails',
'required' => false,
])
->add('appAccessSeriderm360', CheckboxType::class, [
'label' => 'app.ui.seriderm_360_access',
'required' => false,
])
->addEventListener(FormEvents::SUBMIT, [$this, 'onSubmit']);
}
public function onSubmit(FormEvent $event): void
{
$form = $event->getForm();
/** @var Doctor $doctor */
$doctor = $event->getData();
$externalPlatformName = $doctor->getExternalPlatformName();
$externalPlatformLink = $doctor->getExternalPlatformLink();
if ($doctor->isMakesAppointmentsOnExternalPlatform()) {
if (empty($externalPlatformName)) {
$form->get('externalPlatformName')->addError(new FormError($this->translator->trans('validator.error.value_can_not_be_blank', [], 'validators')));
}
if (empty($externalPlatformLink)) {
$form->get('externalPlatformLink')->addError(new FormError($this->translator->trans('validator.error.value_can_not_be_blank', [], 'validators')));
}
}
if ($doctor->getAttachedClinicalManager() !== null) {
return;
}
$doctor->setRequiresValidationByClinicalManager(false);
}
public function getBlockPrefix(): string
{
return 'app_doctor_type';
}
}