A cross-surface booking cart: whatever surface (the calendar, the seat map) fills the session basket, one cart page reviews it and checks out, starting one workflow for the whole order.

New yoyaku_cart module (core-only dependency):

  • BasketSummary: the session order as events, each with its priced tickets (a ticket per line, seat or places, priced when yoyaku_payment is installed).
  • CartForm at /booking/cart: event cards with numbered ticket rows, a per-ticket Remove, and a Checkout button.
  • CartCheckoutEvent: the seam. Checkout dispatches it; a consumer redirects where the order goes next. The cart knows nothing of workflows.
  • hook_yoyaku_cart_line_alter(): the extension point. A ticket starts as a plain places line; the module owning the line names it. yoyaku_seating labels a seated line with its seat, with no dependency either way.

yoyaku_cart_orchestra submodule: a CartCheckoutEvent subscriber that starts the order workflow (WorkflowStarter) and redirects to its first interaction step. Named _orchestra, not _interaction, as it implements no interaction component.

Also: BookingCart::releaseLine() for per-line removal, and yoyaku_seating contributes seat labels via the hook. Kernel-tested (summary shape, the describe hook, releaseLine). Surface wiring (links from the slot and seating pages, dropping the per-slot checkout button) is a follow-up.

Issue fork yoyaku-3611985

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’s picture

Status: Active » Needs review

  • mably committed 4e7a2785 on 1.x
    feat: #3611985 Add a yoyaku_cart module: a cross-surface basket and...
mably’s picture

Status: Needs review » 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.