feat: extended pricing breakdown on confirmation page

This commit is contained in:
Björn Fromme
2025-10-18 17:59:42 +02:00
parent e6c47019d5
commit ee69346eb4
3 changed files with 176 additions and 30 deletions
+23 -4
View File
@@ -8,7 +8,11 @@
1. **Step 1**: Room selection and dates (`Create\Step1Controller`)
2. **Step 2**: Participant details with card-based UI (`Create\Step2Controller`)
3. **Step 3**: Payment method selection (`Create\Step3Controller`)
4. **Step 4**: Final confirmation and submission to BPN API (`Create\Step4Controller`)
4. **Step 4**: Final confirmation with comprehensive pricing breakdown and submission to BPN API (`Create\Step4Controller`)
- Displays complete pricing breakdown by category (rooms, services grouped by type)
- Shows per-participant total pricing in card headers
- Displays individual service prices inline with each booked service
- Three-level pricing transparency: aggregate, participant, and service-level
5. **Edit Flow**: Similar card-based UI for existing bookings (`Edit\IndexController`)
### Card-Based UI Pattern (Production)
@@ -46,7 +50,12 @@
### Service Layer (`src/Service/`)
- `BookingService` - Core booking workflow
- `BookingPriceCalculatorService` - Real-time pricing
- `BookingPriceCalculatorService` - Comprehensive pricing calculations
- `getPricingBreakdown()` - Complete pricing breakdown with rooms and services grouped by type
- `calculateAllParticipantIndividualPrices()` - Per-participant total pricing
- `calculateIndividualParticipantPrice()` - Single participant total (room + all services)
- `calculateServicePricing()` - Service aggregation with grouping by subtype
- Powers sidebar summary and Step 4 confirmation pricing display
- `BookingFingerprintService` - Dirty state detection for edit mode
- `TravelDataService` - API integration and caching
- `ParticipantCardDataService` - Card display data
@@ -285,7 +294,12 @@ Edit mode session requires proper cleanup to prevent dirty state persistence:
- `Step1Controller.php` - Room selection and dates
- `Step2Controller.php` - Participant details with card-based UI
- `Step3Controller.php` - Payment method selection
- `Step4Controller.php` - Final confirmation and API submission
- `Step4Controller.php` - Final confirmation with comprehensive pricing display and API submission
- Integrates `BookingPriceCalculatorService` for complete pricing breakdown
- Calculates per-participant individual prices via `calculateAllParticipantIndividualPrices()`
- Template displays three-level pricing: aggregate breakdown, per-participant totals, and inline service prices
- All service prices shown in blue (text-blue-700) with German formatting
- Zero prices hidden per project standards
- `SuccessController.php` - Success page after booking completion
**Edit Namespace** (`src/Controller/Booking/Edit/`):
@@ -312,7 +326,12 @@ Edit mode session requires proper cleanup to prevent dirty state persistence:
- `templates/booking/create/step_1.html.twig` - Room selection
- `templates/booking/create/step_2.html.twig` - Participant cards
- `templates/booking/create/step_3.html.twig` - Payment method
- `templates/booking/create/step_4.html.twig` - Confirmation
- `templates/booking/create/step_4.html.twig` - Final confirmation with comprehensive pricing display
- **Aggregate pricing breakdown**: Rooms and services grouped by type with totals
- **Per-participant cards**: Individual total price in header, all personal details and service selections
- **Inline service pricing**: Each service shows price in blue (€X,XX format) next to label
- **Payment summary**: Selected payment method and bank details (if debit)
- **Confirmation checkbox**: Final acceptance before API submission
- `templates/booking/create/success.html.twig` - Success page
- `templates/booking/create/error.html.twig` - Error page