From 4e26b8acc0137ef454c4331996289c3cf04155d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Tue, 23 Jun 2026 12:08:18 +0200 Subject: [PATCH] fix: reload booking data from API when no user edits are pending --- src/Controller/Booking/Edit/IndexController.php | 7 ++++++- src/Service/BookingEditDataLoader.php | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Controller/Booking/Edit/IndexController.php b/src/Controller/Booking/Edit/IndexController.php index 43e18a9..f4d5ea6 100644 --- a/src/Controller/Booking/Edit/IndexController.php +++ b/src/Controller/Booking/Edit/IndexController.php @@ -238,9 +238,14 @@ class IndexController extends AbstractController // Clear session state $this->bookingSessionService->clearBookingDto($request, BookingDto::MODE_EDIT); - // Check if a draft exists to show appropriate message /** @var User $user */ $user = $this->getUser(); + + // Invalidate booking cache so a direct re-entry to /edit (bypassing /start) + // still loads live data rather than the 5-minute cached response. + $this->dataLoader->invalidateBookingCache($bookingId, $user); + + // Check if a draft exists to show appropriate message $draft = $this->draftService->findDraft($user, $bookingId); if (null !== $draft) { diff --git a/src/Service/BookingEditDataLoader.php b/src/Service/BookingEditDataLoader.php index 0a7ad73..41a3452 100644 --- a/src/Service/BookingEditDataLoader.php +++ b/src/Service/BookingEditDataLoader.php @@ -85,6 +85,17 @@ class BookingEditDataLoader return $this->initializeFromApi($request, $bookingId, $user); } + // No user edits pending — discard the session and reload live from API so that + // BusPro-side changes (participant data, status, surcharges) are immediately + // visible. isDirty() also returns false when originalFingerprint is null + // (inconsistent session state), which is equally safe to reload. + if (!$this->fingerprintService->isDirty($formData)) { + $this->bookingSessionService->clearBookingDto($request, BookingDto::MODE_EDIT); + $this->invalidateBookingCache($bookingId, $user); + + return $this->initializeFromApi($request, $bookingId, $user); + } + // Refresh availability and mutability data to ensure current state. // Availability is refreshed on every load; mutability is patched from cache. $this->travelDataService->enrichWithFreshAvailabilities($formData->travel);