Mehrstufige Preise pro Kurs — einmal konfiguriert, überall live
Mit Frühbucher-Pricing kann pro Buchungsoption gestaffelt werden, was ein Kurs zu welchem Zeitpunkt kostet. Eine Stunde Kurs muss heute nicht denselben Preis haben wie in vier Wochen — das System rechnet den jeweils gültigen Preis automatisch aus, zeigt ihn im Frontend mit Streichpreis und Ablauf-Hinweis, und nutzt ihn auch beim tatsächlichen Buchungsvorgang.
Wie es funktioniert
Pro Buchungsoption werden Tier-Stufen definiert — jede mit einem Schwellenwert "Tage vor Kursstart" und einem Preis. Beispiel:
- 28+ Tage vor Kursstart: 80 € (Frühbucher)
- 7–27 Tage: 100 € (regulärer Preis)
- 0–6 Tage: 120 € (Last-Minute-Aufschlag)
Beliebig viele Stufen, beliebige Schwellen, beliebige Bezeichnungen. Beim Anzeigen oder Buchen entscheidet das System anhand des Kursstarts und des aktuellen Datums, welche Stufe greift — sekundengenau.
Wo es überall ankommt
- Öffentliche Kursliste & Detailseite (Web): Streichpreis + Frühbucher-Badge + "Noch X Tage zu diesem Preis — danach Y €"-Hinweis
- Mobile-Apps: Catalog, Kurs-Detail, Buchungsflow, Bundle-Detail, Event-Detail nutzen denselben zentralen Resolver
- Buchungsflow: Der Tier-Preis wird beim tatsächlichen Buchen verrechnet — nicht nur angezeigt
- Customer-Portal: Beim Wechseln der Buchungsoption sieht der Kunde den korrekten Tier-Preis
- Newsletter-Editor: Beim Auswählen eines Kurses werden Frühbucher-Preise automatisch übernommen, mit Streichpreis und Badge im Layout
- Stammdaten: Buchungsoptions-Übersicht und Profil-Sheets zeigen einen Tier-Indikator (Sparkles-Icon mit Tooltip), so dass auf einen Blick klar ist welche Optionen Tiers haben
- Anmelde-Editor (Admin): Preisänderung, Buchungsoption-Wechsel und Tier-Auswahl alle tier-aware
- Bundles, Shop-Produkte, Events (Komplettpakete + Tagestickets): alles tier-fähig
Konfiguration
Tiers werden im Tier-Editor pro Buchungsoption verwaltet (Buchungsoptionen → [Option] → Tier-Preise). Jede Option behält ihren regulären Preis als Fallback — wenn keine Tier-Konfiguration existiert oder das Datum außerhalb aller Schwellen liegt, gilt der Standardpreis.
Was unter der Haube passiert ist
- Zentraler Resolver in den Public-RPCs: Eine einzige Funktion (
resolve_booking_option_price) entscheidet überall, welcher Preis greift — Web, Mobile und externe Frontends teilen sich dieselbe Wahrheit - Resolver mit Course-Kontext: Auch profile-geteilte Buchungsoptionen ohne direkte Course-Verknüpfung können jetzt Tier-Preise anzeigen, weil die RPCs den Kurs-Kontext durchreichen
- Einstufige Tiers: Wenn nur ein Tier konfiguriert ist (typisch: nur Frühbucher), fällt der nächste Preis automatisch auf den Pricelist-Default zurück — der Hinweis "danach steigt es auf X €" funktioniert ohne extra Standard-Tier
- Bug-Fix für moderne Tenants: Kurse ohne klassisches Pricelist-Item zeigten in der Liste keinen Preis. Jetzt wird der niedrigste Tier-Preis aus den aktiven Buchungsoptionen genommen
- 48 Snapshot-Tests sichern alle Tier-Pfade ab (Frühbucher, Regulär, Last-Minute, profile-geteilt, no-tier-Default, einstufig, mehrstufig)
Member-Vorteil
Membership-Inhaber profitieren weiterhin automatisch — der Member-Preis greift unabhängig vom Tier-System (Schedule "Memberships gehen vor Tier"). Wer eine aktive Mitgliedschaft hat, sieht und zahlt den Member-Preis, auch wenn ein Frühbucher-Tier konfiguriert ist.
Wo finde ich es
Bestehende Buchungsoptionen funktionieren weiter wie bisher. Tiers werden optional ergänzt unter Buchungsoptionen → [Option] → Tier-Preise — sobald mindestens ein Tier definiert ist, übernimmt die zentrale Resolver-Logik die Anzeige und Verrechnung in allen Frontends.