wip: refactor

This commit is contained in:
Björn Fromme
2025-07-24 11:59:40 +02:00
parent 7b1f2e7468
commit 787e76c21c
+46 -28
View File
@@ -5,6 +5,7 @@ namespace App\Form;
use App\BusProNet\Constants; use App\BusProNet\Constants;
use App\BusProNet\Model\Service; use App\BusProNet\Model\Service;
use App\Form\Model\BookingEditDto; use App\Form\Model\BookingEditDto;
use App\Form\ParticipantFieldHandler\ParticipantFieldHandlerRegistry;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType; use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@@ -14,37 +15,54 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
class BookingEditType extends AbstractType class BookingEditType extends AbstractType
{ {
public function __construct(
private readonly ParticipantFieldHandlerRegistry $participantFieldHandlerRegistry,
) {}
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { $builder
/** @var BookingEditDto $data */ ->addEventListener(FormEvents::PRE_SET_DATA, [$this, 'onPreSetData'])
$data = $event->getData(); ->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit']);
$form = $event->getForm(); }
$travelData = $data->travel; public function onPreSetData(FormEvent $event): void
$form->add('participants', CollectionType::class, [ {
'entry_type' => BookingEditParticipantType::class, /** @var BookingEditDto $data */
'entry_options' => [ $data = $event->getData();
'selectable_courses' => $this->mergeSelectableServices($data, Constants::TOKEN_COURSES), $form = $event->getForm();
'selectable_ski_passes' => $this->mergeSelectableServices($data, Constants::TOKEN_SKI_PASS),
'selectable_services' => $this->mergeSelectableServices($data, Constants::TOKEN_ADDITIONAL), $travelData = $data->travel;
'selectable_board' => $this->mergeSelectableServices($data, Constants::TOKEN_BOARD), $form->add('participants', CollectionType::class, [
'selectable_rentals' => $this->mergeSelectableServices($data, Constants::TOKEN_RENTALS), 'entry_type' => BookingEditParticipantType::class,
'selectable_transportation_services_to' => $travelData 'entry_options' => [
->getTransportationServicesByDirection('HIN', false), 'selectable_courses' => $this->mergeSelectableServices($data, Constants::TOKEN_COURSES),
'selectable_transportation_services_fro' => $travelData 'selectable_ski_passes' => $this->mergeSelectableServices($data, Constants::TOKEN_SKI_PASS),
->getTransportationServicesByDirection('RUECK', false), 'selectable_services' => $this->mergeSelectableServices($data, Constants::TOKEN_ADDITIONAL),
'selectable_pickups' => $travelData->pickupsTo, 'selectable_board' => $this->mergeSelectableServices($data, Constants::TOKEN_BOARD),
'personal_data_mutable' => $travelData->participantDataMutable, 'selectable_rentals' => $this->mergeSelectableServices($data, Constants::TOKEN_RENTALS),
'additional_services_mutable' => $travelData->additionalServicesMutable, 'selectable_transportation_services_to' => $travelData
'transportation_services_mutable' => $travelData->transportationServicesMutable, ->getTransportationServicesByDirection('HIN', false),
'pickups_mutable' => $travelData->pickupsMutable, 'selectable_transportation_services_fro' => $travelData
'applicant_id' => $data->booking->applicant->personId, ->getTransportationServicesByDirection('RUECK', false),
], 'selectable_pickups' => $travelData->pickupsTo,
'allow_add' => false, 'personal_data_mutable' => $travelData->participantDataMutable,
'allow_delete' => false, 'additional_services_mutable' => $travelData->additionalServicesMutable,
]); 'transportation_services_mutable' => $travelData->transportationServicesMutable,
}); 'pickups_mutable' => $travelData->pickupsMutable,
'applicant_id' => $data->booking->applicant->personId,
],
'allow_add' => false,
'allow_delete' => false,
]);
}
public function onPreSubmit(FormEvent $event): void
{
$form = $event->getForm();
$submittedData = $event->getData();
$bookingDto = $form->getData();
$this->participantFieldHandlerRegistry->processFields($submittedData, $bookingDto);
} }
private function mergeSelectableServices(BookingEditDto $data, string|array $subType): array private function mergeSelectableServices(BookingEditDto $data, string|array $subType): array