feat: Implement booking package and flow mappings with review page

This commit is contained in:
2026-05-22 23:40:22 +02:00
parent df30cee1a2
commit beb9cb34f4
3 changed files with 229 additions and 26 deletions
+20 -11
View File
@@ -483,7 +483,7 @@
</div>
<div class="package-card__price">
<span>150 €</span>
<small>/ Jahr</small>
<small>/ Jahr ab 400 Schüler</small>
</div>
</div>
<p class="package-card__description">Ein spezialisiertes Modul für Bibliotheken und Medienzentren mit Ausleihprozessen, Medienbeständen und historischer Transparenz.</p>
@@ -520,37 +520,46 @@
<div class="custom-modal-backdrop" onclick="closeBookingModal()"></div>
<div class="custom-modal-content">
<h3>Buchung bestätigen</h3>
<p>Möchten Sie dieses Paket wirklich anfragen?</p>
<p style="font-size: 0.95rem;">Ein Administrator wird sich innerhalb von ca. 48 Stunden über das Portal mit Ihnen in Verbindung setzen. Dort wird dann ein Termin ausgemacht, um die Buchung persönlich vor Ort zu besprechen oder einen direkten Start zu vereinbaren.</p>
<p>Möchten Sie dieses Paket jetzt direkt buchen oder zuerst einen Gesprächstermin vereinbaren?</p>
<p style="font-size: 0.95rem;">In beiden Fällen werden Ihre Angaben noch einmal geprüft, bevor die Buchung per POST an /booking/payment gesendet wird.</p>
<div class="custom-modal-actions">
<button class="btn secondary" type="button" onclick="closeBookingModal()">Abbrechen</button>
<button class="btn" type="button" id="confirmBookingBtn">Anfrage bestätigen</button>
<button class="btn secondary" type="button" onclick="goToBookingReview('consultation')">Gesprächstermin vereinbaren</button>
<button class="btn" type="button" onclick="goToBookingReview('payment')">Buchen</button>
</div>
</div>
</div>
<script>
let currentFormToSubmit = null;
const bookingReviewBaseUrl = "{{ url_for('booking_payment') }}";
let currentBookingForm = null;
function openBookingModal(formElement) {
currentFormToSubmit = formElement;
currentBookingForm = formElement;
const modal = document.getElementById('bookingModal');
modal.classList.add('active');
modal.setAttribute('aria-hidden', 'false');
}
function closeBookingModal() {
currentFormToSubmit = null;
currentBookingForm = null;
const modal = document.getElementById('bookingModal');
modal.classList.remove('active');
modal.setAttribute('aria-hidden', 'true');
}
document.getElementById('confirmBookingBtn').addEventListener('click', function() {
if (currentFormToSubmit) {
currentFormToSubmit.submit();
function goToBookingReview(flow) {
if (!currentBookingForm) {
return;
}
});
const packageInput = currentBookingForm.querySelector('input[name="package"]');
const packageValue = packageInput ? packageInput.value : '';
const reviewUrl = new URL(bookingReviewBaseUrl, window.location.origin);
reviewUrl.searchParams.set('package', packageValue);
reviewUrl.searchParams.set('flow', flow);
window.location.href = reviewUrl.toString();
}
document.addEventListener('keydown', function(event) {
if (event.key === 'Escape') {