Booking Groups
Booking groups let you manage multi-activity events as a single unit. A group coordinates multiple bookings across sites with shared payment, notifications, and lifecycle management.
Overview
Use booking groups when a customer wants to book multiple activities as one event — for example, a corporate team day with Hohtogolf and Laserareena at Redi, or a birthday party with climbing and a party room.
Creating a Booking Group
Navigate to Operations → Booking Groups in the admin panel.
From a Package
- Click Create Group
- Select From Package as the group type
- Choose a package from the dropdown
- Enter the party size (must be within the package's min/max range)
- Enter customer information (name, email, phone)
- Add internal notes if needed
- Click Create
The group is created in DRAFT status. On the detail page the package's activities are pre-seeded — one "Package activities" row per package item, with the site and product already fixed. Click Pick slot on each row to choose a time; once added, the row shows an Added badge.
Custom Group
- Click Create Group
- Select Custom as the group type
- Enter party size and customer information
- Click Create
- On the group detail page, click Add Activity
- In the picker dialog, choose site → product → time slot for the activity
- Confirm to link the activity to the group; repeat for all desired activities
Adding Activities to a Group
Activities are added in-page from the group detail page (not through the standalone new-booking wizard). Clicking Add Activity opens a slot-picker dialog:
- Select the site, then the product, then a time slot from the embedded calendar
- Confirming links a new DRAFT child booking to the group and reloads the group
Notes:
- Activities can only be added while the group is in DRAFT — once holds are created the activity list is locked
- For package groups, the pre-seeded rows open the dialog with site + product already filled and locked; you only pick the slot
- The group's Create Holds action stays disabled until at least one activity is linked
Group Detail Page
The group detail page shows:
- Header — group reference (GRP-YYYYMMDD-NNN), status badge, party size
- Customer info — name, email, phone
- Pricing — grand total, subtotal, tax breakdown
- Hold expiry — countdown when holds are active
- Activities table — each child booking with product, site, time, status
- Internal notes — staff-only notes
Lifecycle Actions
Calculate Pricing (DRAFT)
Calculates the group total based on the package pricing or individual product prices. Updates all child bookings with their allocated amounts.
Create Holds (DRAFT → HOLD)
Creates holds for all activities in a single atomic operation:
- All holds share the same expiry time
- If any slot has insufficient capacity, the entire operation fails
- No partial holds are created
Confirm (HOLD → CONFIRMED)
Confirms all activities with the selected payment method:
| Method | Behavior |
|---|---|
| Invoice | All bookings confirmed immediately, payment marked as PENDING |
| Comp | All bookings confirmed with €0 total |
| Stripe | Payment Intent created, bookings confirmed after webhook |
A single confirmation email is sent listing all activities.
Deposits / partial payments: if the group is confirmed with a partial payment (a deposit, or a partial Paytrail capture), the captured amount is split across child bookings by their share of the group total (largest-remainder rounding, so the parts sum exactly). Children whose share is fully covered are marked paid; the rest are marked partially paid with the balance due later. A full payment marks every child paid.
Cancel All (→ CANCELED)
Cancels all active bookings in the group, releases capacity, and optionally adds a cancellation note to each booking.
Individual Cancellation
Click through to an individual booking from the activities table to cancel it independently. The group status updates to PARTIALLY_CANCELED.
Notifications
The system sends group-level emails rather than per-booking emails:
- Confirmation — lists all activities, group reference, QR code, pricing summary
- Cancellation — full group cancel or partial cancel with remaining activities highlighted
- Reminder — sent before the earliest activity, lists all upcoming activities
Filtering and Search
On the booking groups list page, filter by:
- Status — DRAFT, HOLD, CONFIRMED, PARTIALLY_CANCELED, CANCELED, COMPLETED
- Groups are sorted by creation date (newest first)
Tips
- Calculate pricing before creating holds — this ensures the group total is correct before the hold timer starts
- Use INVOICE for corporate clients — invoicing is handled separately, so INVOICE marks the payment as pending
- Check hold expiry — default is 15 minutes, packages can have custom hold durations
- Add internal notes — useful for tracking event details, contact preferences, or special requirements