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.

  1. 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.
  2. 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.
  3. 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

Command icon 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

mably created an issue. See original summary.

  • mably committed f4d25f08 on 1.x
    feat: #3612598 Individual vs collective booking mode: one booking per...
mably’s picture

Status: Active » Fixed

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.