Abonnementangebot – Systembeschreibung
Parameter der Angebotsseite, Auswahl der angebotenen Tarife, der Kontingentzweig sowie die Endpunkte für Tarif- und Funktionsbestellung und Zahlung.
Überblick
Bei einer gesperrten Funktion führt der Upsell-Wächter des Startschritts, der Link der Zugriffsverweigerungsseite oder eine Direktadresse hierher. Der Menüpunkt ist ausgeblendet. Parameter: locked_route, locked_action, reason (need_credit, need_plan, overage), feature_id, back, return_url, required_quantity, required_object, beneficiary_client_id, store_id. Ganze Seite: upsell; Modal: upsell.modal.
Was angezeigt wird
- Bei gesperrter Funktion Name und Beschreibung; Tarife nach
Dlbtentitlement::plansFor(): Paare aus Definition und Tarif, deren Positionen die Funktion enthalten (mit Tarifvererbung); hat die Zeile des Benutzers eineoffer_definition_id, nur diese Definition. - Empfohlener Tarif: der günstigste oberhalb der aktuellen Ebene; Einzelpreis:
list_priceder Funktion. - Bei Schuld (
debt) wird kein Tarif angeboten. - Kontingentzweig: Limitblock (benötigt, enthalten, verbraucht, fehlend, Kosten) und Optionen: Aufladen, Paket, Tarifwechsel (zum Katalog), zurück.
- Ohne Sperre die vollständige Matrix: aktive Definitionen × Tarife × Funktionen.
- Die Adresse
backmuss eine eigene Route des Systems sein (safeBack).
Bestell-Endpunkte
| Endpunkt | Verhalten |
|---|---|
upsell.order | prüft eine aktive Definition und einen zugehörigen Tarif; ohne Dlbtbilling Abbruch (protokolliert); quotePlan() – ohne Preis Ablehnung; gate(): pay → payment_required (Betrag, Guthaben, Fehlbetrag), ok → charge(); danach materialise(..., 'order', false) im HINZUFÜGE-Modus und syncCoreRouteAccess() |
upsell.orderfeature | quoteFeature(), gleiche Deckungsprüfung; addMeteredOrder() (source = 'order', metered); ist sie schon vorhanden, wird der abgebuchte Betrag erstattet |
upsell.pay | Dlbtbilling::payIn(..., 'testpay'): Guthaben + Rechnung + Belegentwurf |
Berechtigungen
list und order: SYSTEM – für jeden angemeldeten Benutzer; index() und modal() rufen kein canAction auf. Betroffene Daten: Definitions- und Tariftabellen, feature, user_feature, subscription_credit, invoice, transaction.