Last modified by Admin User on 2026/09/02 09:31

Show last authors
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.