Skip to content

[18.0][ADD] website_appointment_booking: public appointment booking pages#204

Open
dnplkndll wants to merge 1 commit into
OCA:18.0from
ledoent:18.0-add-website_appointment_booking
Open

[18.0][ADD] website_appointment_booking: public appointment booking pages#204
dnplkndll wants to merge 1 commit into
OCA:18.0from
ledoent:18.0-add-website_appointment_booking

Conversation

@dnplkndll
Copy link
Copy Markdown
Contributor

@dnplkndll dnplkndll commented Mar 6, 2026

Summary

  • Adds a new module website_appointment_booking that provides Calendly-like public booking pages for resource booking types
  • Builds on the existing resource_booking availability engine — no new models, just extends resource.booking.type with website fields
  • Zero-AJAX design: slot data is server-rendered into a data-* attribute, JS handles day/slot selection client-side

Features

  • Public booking page at /book/<slug> with monthly calendar grid
  • Two-column layout: calendar on the left, available time slots on the right
  • Booking confirmation with automatic partner creation and calendar event generation
  • Race condition handling via cr.savepoint() for double-booking scenarios
  • Backend form extension with published toggle, auto-generated slug, and website description

Dependencies

  • resource_booking (this repo)
  • website (Odoo CE)

Test plan

  • 5 model unit tests (slug generation, uniqueness constraint, defaults, special chars)
  • 15 HTTP controller tests (page rendering, navigation, booking flow, error handling, race conditions, partner reuse)
  • All 20 tests pass locally against Odoo 18.0
  • OCA CI

🤖 Generated with Claude Code

@dnplkndll dnplkndll force-pushed the 18.0-add-website_appointment_booking branch 2 times, most recently from d4937b0 to 54fc8a4 Compare March 6, 2026 03:34
@dnplkndll
Copy link
Copy Markdown
Contributor Author

@dnplkndll dnplkndll force-pushed the 18.0-add-website_appointment_booking branch 2 times, most recently from 152b99e to 36837c8 Compare March 6, 2026 04:03
Comment thread website_appointment_booking/README.rst Outdated
Comment thread website_appointment_booking/README.rst Outdated
@brenden-eshbach
Copy link
Copy Markdown

Status on this PR? thanks

@dnplkndll dnplkndll requested a review from JordiBForgeFlow May 15, 2026 01:15
@OCA-git-bot OCA-git-bot added series:18.0 mod:website_appointment_booking Module website_appointment_booking labels May 20, 2026
@dnplkndll dnplkndll force-pushed the 18.0-add-website_appointment_booking branch 3 times, most recently from 0bf7ecd to 1feaec0 Compare May 21, 2026 00:34
Calendly-like public appointment booking pages for resource_booking
types. Builds on the existing resource_booking availability engine —
no new models, just extends resource.booking.type with website fields
and adds a public controller.

Design:
- Zero-AJAX: slot data is server-rendered into a data-* attribute;
  JS handles day/slot selection client-side.
- Per-booking-type slug + website_published flag (m2m exclusion of
  resource_booking_type from /book/* sitemap when unpublished).
- Visitor tz override via ?tz= query param; slots re-bucketed in the
  visitor's tz so the calendar grid shows local dates. iso identifiers
  normalized to UTC so they stay stable across tz views.
- Out-of-hours fallback: when ?tz= differs from resource tz AND no
  slots fall within the visitor's 9-17 local window over the next
  7 days, render a "request a custom slot" banner that creates a
  tagged crm.lead.
- ntfy push notification on out-of-hours request (configurable).

Tests cover: slug uniqueness, sitemap exclusion, tz select reset,
visitor-tz bucketing, pytz alias acceptance, invalid tz fallback,
display_tz on success page, malicious tz offset rejection, request
banner gating, ntfy publishing, race condition on simultaneous
confirms.
@dnplkndll dnplkndll force-pushed the 18.0-add-website_appointment_booking branch from 29415c5 to d14da0d Compare May 28, 2026 18:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

mod:website_appointment_booking Module website_appointment_booking series:18.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants