fix: only assign dummy data to the applicant

This commit is contained in:
Björn Fromme
2026-03-16 12:01:09 +01:00
parent 48572812a9
commit 06e64bd3b8
@@ -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';
}
}
}