Subscription — End-user view
There are two main roles: admin/staff (setup & management) and customer (enroll & book). Below is each role's journey.
A. Admin/Staff sets up a package
1. Create Subscription
Page
Admin Portal → Setup → Subscription(/product-service/subscription).
- Table is split into Current (not archived) and Archived.
- Create a new package: choose Site (one site), enter Subscription Name, choose type (Billing Only or default BookingAndBilling).
- Configure: price (Price), image, Booking Cut-Off (number of days), rich text content (Booking Info, Instructions, Discount Info, Payment Instructions, Important Notice), and period-selection permissions: Booking Start/End Selection (
Staff OnlyorStaff & Customer).
2. Link with Term
- Open linked-term confirmation popup: choose each SubscriptionProduct (no "Select All").
- If the package has no product → popup says "please add sessions in Program first".
- Link-term API validates product compatibility with term; missing items → show list of missing products.
3. Manage through Subscription Manager
Filter enrollment by Site/Subscription/tab. Changing tab → auto-refreshes data (no Apply needed).
- Each enrollment row expands to show applied add-ons and discounts.
- Actions: Manage Add-ons, Manage Discounts (only for periods booked by the enrollment).
4. Billing Details: invoice actions
Subscription Billing Details displays by invoice (one row/invoice), not internal logs.
Three main actions, all operating on invoice:
| Action | Result |
|---|---|
| Schedule | Creates InvoiceScheduler for each invoice; ScheduledOn = Invoice.Date (UTC). |
| Approve | Changes invoice to Approved + creates scheduler immediately (ScheduledOn = UtcNow). |
| Skip | Cancels active scheduler + resets invoice to Initialised (0). |
B. Customer enrolls & books
1. Browse & select package (Course List)
- Card shows: title, price (when present), weekday schedule (Mon–Sun), description, image, site info (map popup).
2. Subscription Booking (Step 1 → Step 2)
- Step 1: view package details (read-only), preview schedule by period (with closure days removed).
- Choose period/start from BillingSchedule (canonical source) — do not compute client-side.
- Start/end selection permission depends on package setting:
Staff Onlymeans customer cannot choose. - Step 2: enrichment / add-ons.
3. Booking is checked for schedule clash
On submit, the system checks for schedule clash against the attendee's existing enrollments/bookings. If there is a clash → the whole request fails (no partial state).
4. Portal: My Subscriptions
Customers view their subscriptions in Customer Portal → My Subscriptions.
Summary
| Role | Does |
|---|---|
| Admin | Create/configure package, link term, manage enrollment, invoice actions (schedule/approve/skip). |
| Staff | Manage add-ons/discounts for booked periods; direct-confirm booking. |
| Customer | Browse packages, choose period by BillingSchedule, submit booking (with clash check). |
Next: Core concepts.