Issue #3611710: Seating admin UI: manage venues, sections, grades and seats, with a bulk seat generator
Adds the admin UI for the seating entities from #3611662, in yoyaku_seating itself (as yoyaku_order does), so yoyaku_ui stays core-only and nothing is forced to install seating.
What this adds
- CRUD for
yoyaku_venue,yoyaku_section,yoyaku_seat_gradeandyoyaku_seatunder/admin/booking(list builders + core content-entity forms +AdminHtmlRouteProvider), attached bySeatingHooks::entity_type_alter. - Bulk seat generator at
/admin/booking/seat/generate: pick a section (which fixes the venue) and an optional grade, enter rows (a comma list, each a label or a range likeA-For1-10) and seats per row; seats are labelled by row and position and existing ones are skipped, so it is re-runnable. - Form widgets, typed
getVenue()accessors, menu links under the Booking menu (soft parent, orphan-safe withoutyoyaku_ui) and action links.
Testing
Kernel GenerateSeatsTest (row expansion + dedupe) and functional SeatingAdminUiTest (the whole admin flow, with yoyaku_ui NOT enabled, proving the UI is standalone). phpcs, phpstan, cspell clean; kernel green locally on 11.4.