This adds the seated booking experience and turns booking into a stateful, per-session order.
Node display: an upcoming-slots formatter and a per-node booking display render a resource's slots on a content node, without exposing the private booking entities.
Slots and schedule: a per-resource Slots tab and generator, plus a venue Schedule tab showing occupancy across the venue's resources.
Seat map: book a slot by category quantity or by picking seats on a map; seated slots auto-assign the best adjacent seats per category and price them; seats gain geometry (x, y, angle) and a venue gains a seat-map background and sprite ids.
Printed seat labels: a seat's identity is two printed strings, the row and the place (its seat number), concatenated for tickets, with a separate integer position for keyboard navigation and adjacency that need not match the printed place.
Stateful cart: the per-slot form is one accumulating order per session; fields prefill from what the session already holds and submitting reconciles the basket by delta.
Order state machine: a transaction moves through empty, pending, locked, placed, confirmed and cancelled through one chokepoint that emits an OrderStateEntered event. An order is born empty and enters pending on its first hold; releasing every line returns it to empty; cancelled is terminal.
Configurable workflow start: a resource names a workflow_start state (a constraint requires it whenever a workflow is named), so the workflow starts when the order enters that state instead of always on hold.
The changes span yoyaku core, yoyaku_calendar, yoyaku_seating and yoyaku_orchestra.
Issue fork yoyaku-3611785
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 #3
mably commentedComment #5
mably commented