<?php
declare(strict_types=1);
namespace App\EventSubscriber;
use Symfony\Component\Form\FormEvent;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvents;
use App\Form\Type\ContactTenantChoiceType;
use App\Infrastructure\RequestDto\ContactDtoRequest;
use App\Infrastructure\RequestDto\Reference\ReferencePropertyServiceTypeDto;
class AddFormFieldLocationTransactionSubscriber implements EventSubscriberInterface
{
private TranslatorInterface $translator;
/**
* @param TranslatorInterface $translator
*/
public function __construct(
TranslatorInterface $translator
) {
$this->translator = $translator;
}
public function onPresetData(FormEvent $event): void
{
$transaction = $event->getData();
$form = $event->getForm();
if (
!$transaction
|| !in_array(
$transaction->getMandate()->getProperty()->getReferenceServiceType()->getCode(),
[ReferencePropertyServiceTypeDto::REFERENCE_CODE_PROPERTY_SERVICE_TYPE_RENTAL,
ReferencePropertyServiceTypeDto::REFERENCE_CODE_PROPERTY_SERVICE_TYPE_SEARCH_RENT],
true
)
) {
return;
}
$form->add('contact', ContactTenantChoiceType::class, [
'placeholder' => $this->translator->trans('transaction.contact.placeholder', [], 'transaction'),
'label' => $this->translator->trans(
'transaction.properties.tenantContact',
[],
'transaction'
),
'label_attr' => [
'class' => 'form-label font-weight-bold text-uppercase'
],
'required' => true,
'data' => $transaction ? $transaction->getContact() : null,
'choice_label' => function (ContactDtoRequest $contact) {
return $contact->getFullName();
},
'attr' => [
'class' => 'form-control',
'required' => 'required'
],
]);
}
public static function getSubscribedEvents(): array
{
return [
FormEvents::PRE_SET_DATA => 'onPreSetData'
];
}
}