feat: bulk insurance booking by applicant

This commit is contained in:
Björn Fromme
2025-10-01 17:52:21 +02:00
parent 372490ed5a
commit b4eaf695c7
10 changed files with 402 additions and 24 deletions
+32 -2
View File
@@ -6,6 +6,7 @@ namespace App\Form\Service;
use App\BusProNet\Utility\DirectionMapper;
use App\Form\Service\Abstract\AbstractFieldStateProvider;
use App\Form\Service\Condition\BulkInsuranceBookingCondition;
use App\Form\Service\Condition\CompositeCondition;
use App\Form\Service\Condition\DateOfBirthProvidedCondition;
use App\Form\Service\Condition\FieldValueCondition;
@@ -87,9 +88,38 @@ class CreateFieldStateProvider extends AbstractFieldStateProvider
'hidden' => CompositeCondition::not($dateOfBirthProvidedCondition),
];
// Hide insurance field until date of birth is provided
// Bulk insurance booking conditions
$bulkInsuranceBookingCondition = new BulkInsuranceBookingCondition();
// Show bulk insurance booking checkbox ONLY for applicant (index 0) and when insurance field is visible
$this->fieldStateConditions['bulkInsuranceBooking'] = [
'hidden' => CompositeCondition::or(
CompositeCondition::not($dateOfBirthProvidedCondition), // Hide until date of birth provided
new class() implements \App\Form\Service\Contract\FieldConditionInterface {
public function evaluate(\App\Form\Model\BookingDtoInterface $bookingDto, int $participantIndex, array $formData): bool
{
return $participantIndex > 0; // Hide for all participants except applicant
}
public function getDependentFields(): array
{
return [];
}
public function getDescription(): string
{
return 'Participant is not the applicant';
}
}
),
];
// Hide insurance field until date of birth is provided OR when bulk insurance booking is active for dependent participants
$this->fieldStateConditions['insurance'] = [
'hidden' => CompositeCondition::not($dateOfBirthProvidedCondition),
'hidden' => CompositeCondition::or(
CompositeCondition::not($dateOfBirthProvidedCondition),
$bulkInsuranceBookingCondition
),
];
// Room-specific field conditions