From 787e76c21c333886339a172996f173800584ec4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Thu, 24 Jul 2025 11:59:40 +0200 Subject: [PATCH] wip: refactor --- src/Form/BookingEditType.php | 74 ++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 28 deletions(-) diff --git a/src/Form/BookingEditType.php b/src/Form/BookingEditType.php index db48a84..816a2e9 100644 --- a/src/Form/BookingEditType.php +++ b/src/Form/BookingEditType.php @@ -5,6 +5,7 @@ namespace App\Form; use App\BusProNet\Constants; use App\BusProNet\Model\Service; use App\Form\Model\BookingEditDto; +use App\Form\ParticipantFieldHandler\ParticipantFieldHandlerRegistry; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\CollectionType; use Symfony\Component\Form\FormBuilderInterface; @@ -14,37 +15,54 @@ use Symfony\Component\OptionsResolver\OptionsResolver; class BookingEditType extends AbstractType { + public function __construct( + private readonly ParticipantFieldHandlerRegistry $participantFieldHandlerRegistry, + ) {} + public function buildForm(FormBuilderInterface $builder, array $options): void { - $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { - /** @var BookingEditDto $data */ - $data = $event->getData(); - $form = $event->getForm(); + $builder + ->addEventListener(FormEvents::PRE_SET_DATA, [$this, 'onPreSetData']) + ->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit']); + } - $travelData = $data->travel; - $form->add('participants', CollectionType::class, [ - 'entry_type' => BookingEditParticipantType::class, - 'entry_options' => [ - 'selectable_courses' => $this->mergeSelectableServices($data, Constants::TOKEN_COURSES), - 'selectable_ski_passes' => $this->mergeSelectableServices($data, Constants::TOKEN_SKI_PASS), - 'selectable_services' => $this->mergeSelectableServices($data, Constants::TOKEN_ADDITIONAL), - 'selectable_board' => $this->mergeSelectableServices($data, Constants::TOKEN_BOARD), - 'selectable_rentals' => $this->mergeSelectableServices($data, Constants::TOKEN_RENTALS), - 'selectable_transportation_services_to' => $travelData - ->getTransportationServicesByDirection('HIN', false), - 'selectable_transportation_services_fro' => $travelData - ->getTransportationServicesByDirection('RUECK', false), - 'selectable_pickups' => $travelData->pickupsTo, - 'personal_data_mutable' => $travelData->participantDataMutable, - '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 onPreSetData(FormEvent $event): void + { + /** @var BookingEditDto $data */ + $data = $event->getData(); + $form = $event->getForm(); + + $travelData = $data->travel; + $form->add('participants', CollectionType::class, [ + 'entry_type' => BookingEditParticipantType::class, + 'entry_options' => [ + 'selectable_courses' => $this->mergeSelectableServices($data, Constants::TOKEN_COURSES), + 'selectable_ski_passes' => $this->mergeSelectableServices($data, Constants::TOKEN_SKI_PASS), + 'selectable_services' => $this->mergeSelectableServices($data, Constants::TOKEN_ADDITIONAL), + 'selectable_board' => $this->mergeSelectableServices($data, Constants::TOKEN_BOARD), + 'selectable_rentals' => $this->mergeSelectableServices($data, Constants::TOKEN_RENTALS), + 'selectable_transportation_services_to' => $travelData + ->getTransportationServicesByDirection('HIN', false), + 'selectable_transportation_services_fro' => $travelData + ->getTransportationServicesByDirection('RUECK', false), + 'selectable_pickups' => $travelData->pickupsTo, + 'personal_data_mutable' => $travelData->participantDataMutable, + '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