Maintenance Blocks (PL-T185)
En bref
Time-based blocks that take a resource off the bookable inventory. Supports one-off blocks (resurfacing a court next Tuesday) and recurring blocks (weekly league night every Wednesday) using an RFC 5545 RRULE subset with BYDAY filter, UNTIL/COUNT limits, a hard two-year horizon, and an on-demand expansion service consumed by the booking engine for conflict detection.
Comment ça fonctionne
MaintenanceBlock is a Beanie document attached to a resource with a start datetime, an end datetime, and a free-text reason that surfaces in the admin calendar and on the customer wizard's unavailability message. One-off blocks store a single interval. Recurring blocks add a FREQ field (DAILY, WEEKLY, MONTHLY) plus optional BYDAY filter (e.g.
WEEKLY × MO,WE,FR for Monday/Wednesday/Friday league nights), an UNTIL date or COUNT cap, and a max two-year recurring horizon to keep expansion bounded and predictable. The block-expansion service exposes get_blocked_intervals(resource_id, range_start, range_end) that materializes recurring blocks into concrete intervals on demand — the booking engine calls this during conflict detection so a customer trying to book Lane 3 next Wednesday at 19:00 sees the slot as unavailable rather than getting a confusing 409 after submit. To cancel a recurring series mid-flight, operators set cancelled_from to a date — every occurrence on or after that date stops appearing without losing the historical record of past blocks.
The API surface is GET /chain/maintenance-blocks/expanded for ranged queries, POST to create, and DELETE to remove. The admin UI provides a dedicated maintenance-blocks page where operators can scan upcoming and active blocks, filter by resource, and create new blocks with a wizard that handles both one-off and recurring patterns with sensible field defaults.
Capacités clés
- One-off and recurring blocks (DAILY / WEEKLY / MONTHLY)
- BYDAY filter for weekly recurrence (e.g. MO,WE,FR)
- UNTIL and COUNT limits with hard two-year horizon
- cancelled_from to truncate a recurring series at a date
- On-demand expansion service consumed by the booking engine
- Admin UI with filter-by-resource and wizard for new blocks
En pratique
Tuesday morning the head of grounds tells the venue manager that Lanes 5-8 need resurfacing this Friday from 09:00 to 17:00. The manager opens Maintenance → New Block, picks the four resources, sets the interval, types "Resurfacing — supplier on site" as the reason, and saves. Within seconds the booking calendar greys out the affected slots, online customers attempting to book those lanes see them as unavailable with a polite "closed for maintenance" message, and the operator console excludes them from drop-in walk-in assignment.
Two months later, when the venue introduces a Wednesday-night corporate league, the manager creates a recurring WEEKLY block on lanes 1-4 from 18:00-22:00 with UNTIL set to next year — every Wednesday until then is automatically protected.
Fonctionnalités de ce sous-système
9| ID | Status | Fonctionnalités |
|---|---|---|
| F22.02.01 | Livré | MaintenanceBlock Beanie document ✅ |
| F22.02.02 | Livré | One-off block with start/end/reason ✅ |
| F22.02.03 | Livré | Recurring block with FREQ=DAILY/WEEKLY/MONTHLY ✅ |
| F22.02.04 | Livré | BYDAY filter for weekly recurrence ✅ |
| F22.02.05 | Livré | UNTIL and COUNT limits; max 2-year recurring horizon ✅ |
| F22.02.06 | Livré | cancelled_from field to cancel recurring series from a date ✅ |
| F22.02.07 | Livré | Block expansion service: get_blocked_intervals() ✅ |
| F22.02.08 | Livré | API: GET expanded intervals, POST create, DELETE block ✅ |
| F22.02.09 | Livré | Admin UI: maintenance blocks management page ✅ |
Sous-systèmes liés
Parties prenantes qui ont besoin de ce sous-système
Apparaît dans 1 analyses de parties prenantes