Wiki source code of How-To: Bulk/Group Subscriptions
Last modified by Admin User on 2026/09/02 09:31
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | = 1. Overview = | ||
| 2 | |||
| 3 | Group and bulk licenses allow an organization to purchase multiple subscriptions under a single agreement. The purchaser pays once for N seats, and those seats are distributed to individual recipients. | ||
| 4 | |||
| 5 | Two license models are supported: | ||
| 6 | |||
| 7 | * Managed seats — The organization buys N seats. A group admin assigns and unassigns members. Seats can be transferred between users. Think: corporate site license with a roster. | ||
| 8 | * Bulk individual — The purchaser provides a recipient list. Each recipient gets a standalone subscription. Think: a school buying 200 copies for students. | ||
| 9 | |||
| 10 | [[image:fulfillment-group-bulk-licenses_a6f51be53df57a8d.png||height="430" width="586"]] | ||
| 11 | |||
| 12 | //The Group Licenses list showing four demo licenses with seat utilization bars and status indicators.// | ||
| 13 | |||
| 14 | In this example, Skyward Aviation Academy has a managed-seat license with 4 of 10 seats assigned (green bar). Clearwater Flight School has a fully provisioned bulk license at 25/25 (red bar). AeroTech Corp is at full capacity (5/5). Sunset Wings LLC is an expired license. | ||
| 15 | |||
| 16 | = 2. License Types = | ||
| 17 | |||
| 18 | == 2.1 Managed Seats == | ||
| 19 | |||
| 20 | When a managed-seat license is created, the system pre-creates N unassigned seat rows. A group admin can then assign each seat to a specific user (OCID). Key characteristics: | ||
| 21 | |||
| 22 | * Seats can be assigned, unassigned, and transferred | ||
| 23 | * The purchaser is automatically made the group admin (owner role) | ||
| 24 | * Additional admins can be added with “manager” role | ||
| 25 | * Seat counts can be increased or decreased (resize) | ||
| 26 | * Each assignment creates a real subscription for the assignee | ||
| 27 | |||
| 28 | == 2.2 Bulk Individual == | ||
| 29 | |||
| 30 | Bulk individual licenses create standalone subscriptions for a list of recipients. Once provisioned, each recipient has an independent subscription. Key characteristics: | ||
| 31 | |||
| 32 | * Recipients can be provisioned via CSV upload or OCID list | ||
| 33 | * Each recipient gets their own gcn_transactionlog entry | ||
| 34 | * Subscriptions are independent — cancelling the license does not affect already-provisioned recipients | ||
| 35 | * The license tracks seat counts for administrative purposes | ||
| 36 | |||
| 37 | = 3. Creating a Group License = | ||
| 38 | |||
| 39 | Navigate to Fulfillment › Group Licenses. Click the red “Create License” button to open the creation modal. | ||
| 40 | |||
| 41 | [[image:fulfillment-group-bulk-licenses_ba0c4d5b8a553f45.png||height="411" width="586"]] | ||
| 42 | |||
| 43 | //The Create License modal with license type, organization name, seat count, and product-or-package selection.// | ||
| 44 | |||
| 45 | |**Field**|**Required**|**Description** | ||
| 46 | |**License type**|Yes|Managed seats or Bulk individual | ||
| 47 | |**Organization name**|No|Display name for the organization (e.g., “Skyward Aviation Academy”) | ||
| 48 | |**Purchaser OCID**|Yes|The OCID of the person/organization paying | ||
| 49 | |**Total seats**|Yes|Number of seats to create | ||
| 50 | |**Product or Package**|Yes|Select a product or package from the dropdown (grouped by type) | ||
| 51 | |**Term**|Yes|Select the term — cascades from the selected product or package | ||
| 52 | |**Publication**|No|The fulfillment publication | ||
| 53 | |**Start date**|Yes|License start date (defaults to today) | ||
| 54 | |**End date**|No|License end date (empty = perpetual) | ||
| 55 | |**Auto-renew**|No|Whether to auto-renew when the license expires | ||
| 56 | |||
| 57 | = 4. Seat Management = | ||
| 58 | |||
| 59 | Click the seat management icon (≡) on any managed-seat license row to open the seat detail page. This page shows all seats, their assignment status, and available actions. | ||
| 60 | |||
| 61 | [[image:fulfillment-group-bulk-licenses_ea2f270345ce269.png||height="430" width="586"]] | ||
| 62 | |||
| 63 | //Seat management for Skyward Aviation Academy — 4 assigned seats and 6 unassigned, with assign/unassign controls.// | ||
| 64 | |||
| 65 | == 4.1 Assigning a Seat == | ||
| 66 | |||
| 67 | For unassigned seats, enter the recipient’s OCID and click the assign button. The system will: | ||
| 68 | |||
| 69 | * Create a subscription record for the recipient | ||
| 70 | * Update the seat status to “assigned” | ||
| 71 | * Increment the used_seats counter on the license | ||
| 72 | * Log an adds/removals event with reason code GROUP_SEAT_ASSIGNED | ||
| 73 | |||
| 74 | == 4.2 Unassigning a Seat == | ||
| 75 | |||
| 76 | For assigned seats, click the unassign button. The seat returns to the available pool and the used_seats counter decrements. An adds/removals event is logged with reason code GROUP_SEAT_REMOVED. | ||
| 77 | |||
| 78 | == 4.3 Transferring a Seat == | ||
| 79 | |||
| 80 | Enter a new OCID and click the transfer button. This atomically unassigns the old user and assigns the new one. Two adds/removals events are logged: GROUP_SEAT_TRANSFER (removal) and GROUP_SEAT_ASSIGNED (addition). | ||
| 81 | |||
| 82 | == 4.4 Resizing == | ||
| 83 | |||
| 84 | The license can be resized (total seats increased or decreased). The system will not allow reducing below the current used_seats count. New seats are pre-created as unassigned rows for managed-seat licenses. | ||
| 85 | |||
| 86 | = 5. Bulk Individual Provisioning = | ||
| 87 | |||
| 88 | For bulk individual licenses, use the bulk seat assignment endpoint to provision recipients in batch. Two input methods are supported: | ||
| 89 | |||
| 90 | * CSV file upload — The CSV must have an “ocid” column header. Each row creates a subscription. | ||
| 91 | * Comma-separated OCID list — Enter OCIDs directly in the input field. | ||
| 92 | |||
| 93 | Each provisioned recipient is logged with reason code BULK_GROUP_NEW. | ||
| 94 | |||
| 95 | = 6. Group Admins = | ||
| 96 | |||
| 97 | Group admins are users authorized to manage seat assignments for a specific license. There are two roles: | ||
| 98 | |||
| 99 | |**Role**|**Description** | ||
| 100 | |**Owner**|Full management access. The purchaser is automatically added as owner. Cannot be removed from the admin panel. | ||
| 101 | |**Manager**|Can assign, unassign, and transfer seats. Can be added or removed by other admins. | ||
| 102 | |||
| 103 | Group admins are managed from the seat detail page under the “Group Admins” section. | ||
| 104 | |||
| 105 | = 7. License Lifecycle = | ||
| 106 | |||
| 107 | |**Status**|**Description** | ||
| 108 | |**Active**|License is in effect. Seats can be assigned/unassigned. | ||
| 109 | |**Expired**|License end_date has passed. A daily cron job (group_license_expiry.php) transitions active licenses to expired and unassigns all seats. | ||
| 110 | |**Cancelled**|Manually cancelled by an admin. All active seats are unassigned. | ||
| 111 | |**Suspended**|Temporarily suspended (e.g., for non-payment). Seats remain assigned but may not grant new access. | ||
| 112 | |||
| 113 | Auto-renewal: If the auto_renew flag is enabled, the expiry cron job will attempt to renew the license via Stripe using the purchaser’s stored payment method. | ||
| 114 | |||
| 115 | = 8. Reporting = | ||
| 116 | |||
| 117 | Group license recipients have real subscriptions and appear in all standard fulfillment reports. The subscription_source field distinguishes group subscriptions from individual ones: | ||
| 118 | |||
| 119 | * RPT-01 — Group recipients counted by classification. Optional source breakdown available. | ||
| 120 | * RPT-09 — Group-specific reason codes appear in the adds/removals report. | ||
| 121 | * RPT-19 — Group recipients with valid addresses appear in the mail file. | ||
| 122 | |||
| 123 | = 9. Setup & Configuration = | ||
| 124 | |||
| 125 | Navigate to Fulfillment › Setup › Group License Settings to configure: | ||
| 126 | |||
| 127 | |**Setting**|**Default**|**Description** | ||
| 128 | |**Enable group licenses**|Off|Master toggle for the group license feature | ||
| 129 | |**Maximum seats per license**|1000|Upper limit on seats per license | ||
| 130 | |**Default license duration (days)**|365|Default duration when end_date is not specified | ||
| 131 | |||
| 132 | = 10. Permissions = | ||
| 133 | |||
| 134 | Group license management requires the FULFILLMENT_GROUP_MANAGE permission module. Superadmin users automatically have access. | ||
| 135 | |||
| 136 | FULFILLMENT_VIEW is sufficient for read-only access to the license list. Creating, cancelling, and managing seats requires FULFILLMENT_GROUP_MANAGE. | ||
| 137 | |||
| 138 | Group admins (non-backend users) can manage seats for their own license without needing the FULFILLMENT_GROUP_MANAGE backend permission. This is controlled by the fulfillment_group_license_admin table. | ||
| 139 | |||
| 140 | = 11. Subscriber Self-Service (Seat Manager Portal) = | ||
| 141 | |||
| 142 | Group admins do not need access to the ONEcount admin panel to manage their organization’s seats. A dedicated subscriber-facing page lets them log in with their regular ONEcount credentials and manage seats directly. | ||
| 143 | |||
| 144 | == 11.1 Accessing the Seat Manager == | ||
| 145 | |||
| 146 | The seat manager portal is located at: | ||
| 147 | |||
| 148 | //https:~/~/yoursite.onecount.net/onecount/flexreg/manage-seats.php?brand=YOURBRAND// | ||
| 149 | |||
| 150 | Group admins can be directed to this URL via email, a link on your website, or from their subscriber profile page. They must be logged in with the same ONEcount account that was designated as a group admin (owner or manager role) for the license. | ||
| 151 | |||
| 152 | == 11.2 My Group Licenses == | ||
| 153 | |||
| 154 | After logging in, the group admin sees a list of all licenses they manage. Each license shows the organization name, license type, seat utilization, status, and date range. | ||
| 155 | |||
| 156 | [[image:fulfillment-group-bulk-licenses_d2aa6c02ee324f44.png||height="366" width="586"]] | ||
| 157 | |||
| 158 | //The subscriber-facing “My Group Licenses” view showing Skyward Aviation Academy with 4/10 seats used.// | ||
| 159 | |||
| 160 | Click “Manage Seats” to open the seat assignment page for that license. | ||
| 161 | |||
| 162 | == 11.3 Managing Seats == | ||
| 163 | |||
| 164 | The seat detail page shows every seat in the license with its current assignment status and available actions: | ||
| 165 | |||
| 166 | [[image:fulfillment-group-bulk-licenses_fe51b9919ebd7117.png||height="366" width="586"]] | ||
| 167 | |||
| 168 | //Seat management for Skyward Aviation Academy — 4 assigned seats with Unassign/Transfer controls, 6 unassigned seats with Assign controls.// | ||
| 169 | |||
| 170 | Available actions for group admins: | ||
| 171 | |||
| 172 | |**Action**|**How**|**What Happens** | ||
| 173 | |**Assign**|Enter the recipient’s OCID in an empty seat row and click Assign|A subscription is created for the recipient. The seat status changes to “Assigned.” | ||
| 174 | |**Unassign**|Click Unassign on an occupied seat (confirmation required)|The seat returns to the available pool. The used-seats counter decrements. | ||
| 175 | |**Transfer**|Enter a new OCID next to an occupied seat and click Transfer|The old assignee is removed and the new assignee gets the subscription in one step. | ||
| 176 | |||
| 177 | == 11.4 What Group Admins Cannot Do == | ||
| 178 | |||
| 179 | The subscriber self-service portal intentionally omits certain actions that are reserved for backend administrators: | ||
| 180 | |||
| 181 | * Resize the license (change total seat count) | ||
| 182 | * Cancel the license | ||
| 183 | * Add or remove group admins | ||
| 184 | * Change the license type, product, or dates | ||
| 185 | |||
| 186 | These operations require the FULFILLMENT_GROUP_MANAGE backend permission and are performed from the admin panel’s Group Licenses page. | ||
| 187 | |||
| 188 | == 11.5 Security == | ||
| 189 | |||
| 190 | The seat manager uses the standard ONEcount subscriber authentication (cookie-based via ~_~_ocid). Authorization is checked on every request by verifying that the logged-in OCID appears in the fulfillment_group_license_admin table for the requested license. A subscriber who is not a designated group admin for a license cannot view or modify its seats. |