feat: prefer discounted transportation services

addresses #869axbjbz
This commit is contained in:
Björn Fromme
2025-10-22 15:53:54 +02:00
parent 7ab60b1048
commit 1949bf9b97
4 changed files with 261 additions and 3 deletions
+10
View File
@@ -43,10 +43,18 @@
- **Field Handlers**: 15+ specialized handlers in `src/Form/Service/`
- Registered via service tags with dependency resolution
- Process in dependency order via `ParticipantFieldHandlerRegistry`
- `ParticipantDateOfBirthFieldHandler` handles array input from BirthdayType widget
- **Conditional Fields**: Universal condition system (`FieldConditionInterface`)
- Age-based, field-dependent, service-specific conditions
- Applied via `CreateFieldStateProvider` / `EditFieldStateProvider`
- **HTMX Integration**: Real-time updates for dynamic fields
- **Date of Birth Field**: Uses `BirthdayType` with three text inputs (day, month, year)
- Widget: `widget: 'text'` renders separate text fields instead of dropdowns
- Input format: `input: 'datetime_immutable'` for immutable date handling
- Custom theme: `birthday_widget` block in `templates/forms.html.twig` handles rendering
- German format: Day.Month.Year with hardcoded placeholders ("Tag", "Monat", "Jahr")
- Field order explicitly set to `['day', 'month', 'year']` for German date convention
- HTMX attributes applied to parent container for form refresh on change
### Service Layer (`src/Service/`)
- `BookingService` - Core booking workflow
@@ -213,6 +221,8 @@ Critical for correct pricing and auto-reassignment:
- Courses, additional services, board, insurance hidden until DOB provided
- Age evaluated at travel start date, not current date
- Dual constraint types: absolute_age, birth_year, mixed
- **Array input handling**: `ParticipantDateOfBirthFieldHandler` processes array `['day' => X, 'month' => Y, 'year' => Z]` from three-field widget
- **Date normalization**: Handler converts array to `DateTimeImmutable` using `sprintf()` with proper formatting
### Bulk Insurance Booking
- Applicant enables bulk → applies to all participants