Issue #3612148: Seating configurations: open or close venue sections (and half-sections) per resource

Adds seating configurations: a venue can be opened in several ways (full house, reduced capacity, choir on stage) and a resource runs under one, with no seats duplicated.

Model

  • New content entity yoyaku_seat_configuration (venue-scoped) storing only what it closes: closed_sections (multi-ref) and closed_subsections (int multi). A configuration that closes nothing is the full venue.
  • Seats gain an optional integer subsection (a numeric slice of a section), so a configuration can shut half a section, not just whole sections.
  • A seat is open when its section is not closed and its subsection, if any, is not closed.
  • The venue gains an optional default_configuration; a resource keeps its venue field and gains an optional configuration override. Active config = resource's, else the venue default, else none (whole venue, unchanged).

Behaviour

  • SeatAvailability resolves the active configuration and drops closed seats; SeatMapBuilder omits them from the map (emitting subsection).
  • SeatBookable refuses a hold on a closed seat under the slot lock, so no booking path can take one (the authoritative guard behind the map hiding it).
  • Admin: a venue Configurations tab (list/add) plus a bespoke form presenting the venue's sections and subsections as enable checkboxes (checked = open); only the unchecked are stored as closed.

Additive: no data migration, existing venues/resources unchanged. Price grade stays on the seat for now.

Includes a kernel test (accessors, availability filtering, venue-default fallback, closed-seat booking refusal), French translations and docs.

Follow-ups: io round-trip of subsection/configurations, a graphical configuration editor, per-configuration grade overrides.

Merge request reports

Loading