Owner calendar view + manual booking + owner cancel/reschedule #20
Notifications
Due Date
No due date set.
Blocks
Depends on
#25 Decommission Easy!Appointments + n8n booking-sync
BPPP/smb-online
#16 Availability engine + booking API (create/cancel/reschedule)
BPPP/smb-online
Reference: BPPP/smb-online#20
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
#14
What to build
The owner's day-to-day view of their bookings: an agenda-style calendar, the ability to add a
walk-in/phone booking manually, and the ability to cancel or reschedule any booking from the
dashboard.
grouped by day, showing customer name, service, time, status.
EXCLUDEconstraint always applies) but passed an explicit override flag that skips theopening-hours / min-notice / max-advance / buffer checks — the overlap constraint itself is never
overridable, for the owner or anyone else.
cancel/reschedule actions (owner-authenticated instead of token-authenticated).
Acceptance criteria
violating the buffer, and it succeeds.
the
EXCLUDEconstraint rejects it the same way it does for the public flow.overlap protection.
Blocked by
Implemented in commit
528a13con main.owner_booking.py: session-authenticated weekly agenda (GET /owner/agenda), grouped by day with today highlighted, plus a quick jump back to the current week.POST /owner/bookings) reusesbooking_api.create_booking_row(refactored out of the old inline route body) withskip_availability_check=True-- bypasses opening-hours/min-notice/max-advance/buffer, never the PostgresEXCLUDEoverlap constraint (still enforced viabooking_db.create_booking).POST /owner/bookings/<id>/cancel|reschedule) reuse the samecancel_booking_row/reschedule_booking_rowhelpers the token-authenticated customer routes call -- reschedule keeps the full business-rule slot check (only creation gets the override, per the ticket).client_idfrom the session only; cross-tenant resource/booking access returns not-found (covered by tests).tests/test_owner_booking.py-- agenda scoping, override-bypasses-hours, EXCLUDE-still-rejects-overlap, cross-tenant creation/cancel rejection, reschedule + reschedule-into-occupied-slot. Full suite (106 tests) green.