Élő előfizetések és életciklus – rendszerleírás

Az előfizetés-tábla és kapcsolatai, a mentés, az állapotváltás, a tételkorlátok felhasználókra írása, a kredit és a lemondás, valamint az éjjeli életciklus-futás.

Áttekintés

A felhasználóhoz és clienthez tartozó élő előfizetések kezelése. A táblanevek a telepítés saját előtagjával állnak az adatbázisban.

Adatmodell

TáblaSzerep
subscriptionelőfizetés: felhasználó, client, csomag, állapot (trial, active, past_due, suspended, canceled, expired), ciklus, ülésszám, próbaidő vége, időszak vége, lemondás az időszak végén
subscription_itemaz előfizetés egyedi tételei korláttal
subscription_accounta felhasználó folyószámlája és házi clientje
subscription_eventállapot-napló
payment_transactionfizetési tranzakciók
subscription_creditkredit-napló

Mentés és állapotváltás

  1. Form: canAction(edit); mentés: canSave. Csomag kötelező; új előfizetésnél létező felhasználó és aktív csomag; a client csak tartalmi jog szerinti; a számlázási cég csak a getBillableCompanies() listából (különben némán kimarad).
  2. Új előfizetés: a felhasználó folyószámla-sorának biztosítása (ensureAccount), számlázási cég, majd Dlbtpayment::startTrial() (7 nap).
  3. Meglévő: saveSubscription(), számlázási cég, cache-ürítés.
  4. Tételek: saveItems() törlés-újraírással, majd materialiseLimits() – a tétel-korlátot a tulajdonos felhasználó MEGLÉVŐ hozzárendelés-sorára írja.
  5. setstate: Dlbtpayment::setState() (+ állapot-napló + syncGrants()); trial, active, past_due állapotnál syncClientPlan() a client minden felhasználójára.

Tétel-választás (item, SYSTEM): a funkció-lista csak a SUBSCRIPTION besorolású aktív funkciókat kínálja; a plantemplate egy csomag régi tartalom-tételeit adja. A form tétel- és korlát-blokkja item vagy edit, illetve limit vagy edit joggal jelenik meg; mivel ezek SYSTEM kulcsok, a tényleges korlát az edit.

Kredit, lemondás, törlés

  • credit: Dlbtcredit::grant(), visszaadja az új egyenleget; account_id > 0, amount > 0.
  • cancel: Dlbtpayment::requestCancel(), időszak végére vagy azonnal; hibák not_found, already_ended.
  • delete: fizetési tranzakció esetén tilt (error_in_use); különben fizikai törlés az állapot-naplóval.
  • autocomplete: findUsers(), legfeljebb 8 találat, edit nélkül üres.

Háttérfeladat: subscription_lifecycle

Globális seed-job a katalógus oldali cron-sor feldolgozóban. Lépései: Dlbtpayment::runLifecycle() (lejárt próbaidő és lemondás → expired; lejárt próbaidő vagy időszak → terhelés, sikeresen active, sikertelenül past_due; tartósan fizetetlen → suspended; lemondott, lejárt időszak → lezárás), majd Dlbtbilling::applyPendingPlans() (esedékes lefelé-váltás) és Dlbtbilling::invoiceMonthlyUsage() (havi túlhasználat-számla). Napló-előtag: subscription_lifecycle.

Jogosultság és korlátok

  • list: UNMAPPED; item, limit: SYSTEM; edit, add, credit, cancel, delete, debug: nincs besorolva.
  • A lista tartalmi hatókör nélkül minden előfizetést mutat.
  • A credit nem ellenőrzi a folyószámla tartalmi hatókörét.
Kapcsolódó témák: előfizetés háttérfeladat jogosultság