Problem/Motivation
For individually-ticketed events (a concert seat, a conference pass), each attendee needs their own booking: one QR, its own lifecycle state, so a ticket cannot be reused. Today the core engine books a requested quantity as ONE booking of quantity N. The seating submodule already books one booking per seat, but there is no general individual mode for non-seated resources.
Proposed resolution
Introduce a booking mode owned by the core engine, plus a placement seam.
- Add booking_mode (collective or individual) on the resource type and the resource (resource overrides type; default collective). A placed or venue resource forces individual.
- A placement composer turns a request (slot, category, quantity, resource) into hold lines: collective yields one quantity-N line; individual yields N quantity-1 lines. A default anonymous provider lives in core; a tagged provider interface lets the placement module assign seats or standing zones.
- Route the non-seated booking paths (cart, webform, calendar) through the composer.
Capacity stays a number, since it also expresses unlimited and collective, which per-place entities cannot. A conference pass is then simply an individual resource with a capacity and no venue.
Remaining tasks
- booking_mode property and resolver.
- Placement composer and provider seam with the core anonymous provider.
- Wire the booking entry points through the composer.
- Tests.
Phase 1 of the placement generalization. Phase 2 renames yoyaku_seating to yoyaku_placement and adds standing sections; a separate change adds a per-resource ticketing opt-in.
Issue fork yoyaku-3612598
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #4
mably commented