<?php
declare(strict_types=1);
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Form\Type\ContactBuyerChoiceType;
use App\Infrastructure\RequestDto\ContactDtoRequest;
use App\Infrastructure\RequestDto\Reference\ReferencePropertyServiceTypeDto;
class AddFormFieldSaleTransactionSubscriber 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_SELL,
ReferencePropertyServiceTypeDto::REFERENCE_CODE_PROPERTY_SERVICE_TYPE_SEARCH_BUY],
true
)
) {
return;
}
$form->add('contact', ContactBuyerChoiceType::class, [
'placeholder' => $this->translator->trans(
'transaction.contact.placeholder',
[],
'transaction'
),
'label' => $this->translator->trans(
'transaction.properties.buyerContact',
[],
'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();
},
'choice_attr' => function (?ContactDtoRequest $contact) {
return $contact ? $contact->getRecommender()
? ['recommender' => $contact->getRecommender()->getFullName()] : [] : [];
},
'attr' => [
'class' => 'form-control',
'required' => 'required'
]
]);
}
public static function getSubscribedEvents(): array
{
return [
FormEvents::PRE_SET_DATA => 'onPreSetData'
];
}
}