From 06e64bd3b876ea30fc763ee6f58d8621e9556459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Tue, 6 Jan 2026 14:39:49 +0100 Subject: [PATCH] fix: only assign dummy data to the applicant --- .../PersonalDataSynchronizer.php | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/src/BusProNet/DataProcessor/PersonalDataSynchronizer.php b/src/BusProNet/DataProcessor/PersonalDataSynchronizer.php index 7d9d2c4..a98c6da 100644 --- a/src/BusProNet/DataProcessor/PersonalDataSynchronizer.php +++ b/src/BusProNet/DataProcessor/PersonalDataSynchronizer.php @@ -23,8 +23,9 @@ class PersonalDataSynchronizer * Processes all active participants (status 'F' or 'A'). Skips canceled participants (status 'S'). * Updates all personal data fields and communication information. * - * For the applicant (index 0), missing mandatory fields are filled with defaults - * to handle company applicants created by travel agencies. + * Also fills missing mandatory fields on the applicant object for company bookings + * created by travel agencies. The applicant is separate from participant 0 and may + * contain only company data without personal fields required by the BPN API. * * IMPORTANT: The applicant's address must never be modified. This method updates * participant addresses independently to ensure applicant data remains intact. @@ -34,17 +35,16 @@ class PersonalDataSynchronizer */ public function updateParticipantPersonalData(array $participants, Booking $bookingData): void { + // Fill missing mandatory fields on applicant (for company bookings by travel agencies) + // This is separate from participants - applicant may be a company while participants are real people + $this->fillMissingApplicantFields($bookingData); + foreach ($participants as $participant) { // Skip canceled participants (status 'S') if ('S' === $participant->status) { continue; } - // Fill missing mandatory fields for applicant (company bookings by travel agencies) - if (0 === $participant->index) { - $this->fillMissingMandatoryFields($participant); - } - $bookingData->participants[$participant->index]->firstName = $participant->firstName; $bookingData->participants[$participant->index]->name = $participant->lastName; $bookingData->participants[$participant->index]->dateOfBirth = $participant->dateOfBirth; @@ -78,32 +78,43 @@ class PersonalDataSynchronizer } /** - * Fills missing mandatory fields with defaults for company applicants. + * Fills missing mandatory fields on the applicant for company bookings. * * Travel agencies often create bookings with company data as the applicant, * which lacks personal data fields. These fields are mandatory for the BPN - * API, so we fill them with sensible defaults. + * API, so we fill them with sensible defaults. The applicant is separate from + * participants - participant 0 is a real person and must not be modified here. */ - private function fillMissingMandatoryFields(ParticipantDto $participant): void + private function fillMissingApplicantFields(Booking $bookingData): void { - if (null === $participant->firstName || '' === $participant->firstName) { - $participant->firstName = 'Anmelder'; + if (null === $bookingData->applicant) { + return; } - if (null === $participant->gender || '' === $participant->gender) { - $participant->gender = 'D'; + $applicant = $bookingData->applicant; + + if (null === $applicant->firstName || '' === $applicant->firstName) { + $applicant->firstName = 'Anmelder'; } - if (null === $participant->nationality || '' === $participant->nationality) { - $participant->nationality = 'D'; + if (null === $applicant->gender || '' === $applicant->gender) { + $applicant->gender = 'D'; } - if (null === $participant->dateOfBirth) { - $participant->dateOfBirth = new \DateTimeImmutable('-20 years'); + if (null === $applicant->nationality || '' === $applicant->nationality) { + $applicant->nationality = 'D'; } - if (null === $participant->mobile || '' === $participant->mobile) { - $participant->mobile = '12345'; + if (null === $applicant->dateOfBirth) { + $applicant->dateOfBirth = new \DateTimeImmutable('-20 years'); + } + + if (null === $applicant->communication) { + $applicant->communication = new Communication(); + } + + if (null === $applicant->communication->mobile || '' === $applicant->communication->mobile) { + $applicant->communication->mobile = '12345'; } } }