From db1de2653c9836b079a6a2330b1c833091a8e249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Tue, 6 Jan 2026 14:29:41 +0100 Subject: [PATCH] fix: assign dummy values to missing applicant data fields This fix avoids rejection of API requests due to missing data of the applicant. The current user most probably is not aware about this so they get confused about the error messages otherwise. --- .../PersonalDataSynchronizer.php | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/BusProNet/DataProcessor/PersonalDataSynchronizer.php b/src/BusProNet/DataProcessor/PersonalDataSynchronizer.php index b0b46b2..7d9d2c4 100644 --- a/src/BusProNet/DataProcessor/PersonalDataSynchronizer.php +++ b/src/BusProNet/DataProcessor/PersonalDataSynchronizer.php @@ -23,6 +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. + * * IMPORTANT: The applicant's address must never be modified. This method updates * participant addresses independently to ensure applicant data remains intact. * @@ -37,6 +40,11 @@ class PersonalDataSynchronizer 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; @@ -68,4 +76,34 @@ class PersonalDataSynchronizer } } } + + /** + * Fills missing mandatory fields with defaults for company applicants. + * + * 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. + */ + private function fillMissingMandatoryFields(ParticipantDto $participant): void + { + if (null === $participant->firstName || '' === $participant->firstName) { + $participant->firstName = 'Anmelder'; + } + + if (null === $participant->gender || '' === $participant->gender) { + $participant->gender = 'D'; + } + + if (null === $participant->nationality || '' === $participant->nationality) { + $participant->nationality = 'D'; + } + + if (null === $participant->dateOfBirth) { + $participant->dateOfBirth = new \DateTimeImmutable('-20 years'); + } + + if (null === $participant->mobile || '' === $participant->mobile) { + $participant->mobile = '12345'; + } + } }