From 27320bc0ac9494fa2c1d779d0d17639f5e1e0ca9 Mon Sep 17 00:00:00 2001 From: metatroncubeswdev Date: Mon, 31 Aug 2026 19:00:17 -0400 Subject: [PATCH] Add workplace handbook and improve appointment booking --- .../mcs_appointment_booking/__manifest__.py | 5 + .../static/src/scss/appointment_booking.scss | 320 ++++++++++++++++++ .../views/appointment_templates.xml | 116 ++++--- .../mcs_corporate_website/controllers/main.py | 7 + .../mcs-operating-system-handbook.html | 194 +++++++++++ .../static/src/scss/corporate_website.scss | 90 ++++- .../views/workplace_templates.xml | 99 ++++++ 7 files changed, 780 insertions(+), 51 deletions(-) create mode 100644 addons/mcs_appointment_booking/static/src/scss/appointment_booking.scss create mode 100644 addons/mcs_corporate_website/static/handbook/mcs-operating-system-handbook.html diff --git a/addons/mcs_appointment_booking/__manifest__.py b/addons/mcs_appointment_booking/__manifest__.py index efabfc3..e31f401 100644 --- a/addons/mcs_appointment_booking/__manifest__.py +++ b/addons/mcs_appointment_booking/__manifest__.py @@ -14,6 +14,11 @@ "views/appointment_templates.xml", "views/menu.xml", ], + "assets": { + "web.assets_frontend": [ + "mcs_appointment_booking/static/src/scss/appointment_booking.scss", + ], + }, "installable": True, "application": True, } diff --git a/addons/mcs_appointment_booking/static/src/scss/appointment_booking.scss b/addons/mcs_appointment_booking/static/src/scss/appointment_booking.scss new file mode 100644 index 0000000..39c0fa0 --- /dev/null +++ b/addons/mcs_appointment_booking/static/src/scss/appointment_booking.scss @@ -0,0 +1,320 @@ +.mcs-appointment { + --mcs-appt-ink: #111827; + --mcs-appt-muted: #667085; + --mcs-appt-line: #d9e0ea; + --mcs-appt-soft: #f5f7fb; + --mcs-appt-panel: #ffffff; + --mcs-appt-blue: #1c4ed8; + --mcs-appt-navy: #071426; + --mcs-appt-teal: #0f766e; + + min-height: calc(100vh - 76px); + padding: 42px 18px 72px; + background: linear-gradient(180deg, #f8fafc 0%, #eef3f8 100%); + color: var(--mcs-appt-ink); + font-family: Inter, Manrope, "Segoe UI", sans-serif; + + h1, + h2 { + letter-spacing: 0; + } +} + +.mcs-appt-shell { + display: grid; + grid-template-columns: minmax(280px, 380px) minmax(0, 1fr); + gap: 0; + max-width: 1180px; + margin: 0 auto; + overflow: hidden; + border: 1px solid var(--mcs-appt-line); + border-radius: 16px; + background: var(--mcs-appt-panel); + box-shadow: 0 24px 70px rgba(17, 24, 39, 0.12); +} + +.mcs-appt-info { + padding: 34px; + background: var(--mcs-appt-navy); + color: #ffffff; + + h1 { + margin: 18px 0 18px; + font-size: clamp(2rem, 5vw, 3.45rem); + line-height: 1.04; + font-weight: 820; + } +} + +.mcs-appt-back { + display: inline-flex; + margin-bottom: 28px; + color: rgba(255, 255, 255, 0.82); + font-weight: 800; + text-decoration: none; +} + +.mcs-appt-kicker { + color: #f1b94d; + font-size: 0.78rem; + font-weight: 900; + text-transform: uppercase; + letter-spacing: 0.12em; +} + +.mcs-appt-meta { + display: grid; + gap: 8px; + color: rgba(255, 255, 255, 0.78); + font-weight: 700; +} + +.mcs-appt-description { + margin-top: 24px; + color: rgba(255, 255, 255, 0.78); + + p { + color: inherit; + } +} + +.mcs-appt-note { + margin-top: 28px; + padding: 16px; + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: 10px; + background: rgba(255, 255, 255, 0.07); + color: rgba(255, 255, 255, 0.82); +} + +.mcs-appt-booking { + min-width: 0; + padding: 32px; +} + +.mcs-appt-section-head { + display: flex; + align-items: end; + justify-content: space-between; + gap: 16px; + margin-bottom: 14px; + + span { + color: var(--mcs-appt-blue); + font-size: 0.76rem; + font-weight: 900; + text-transform: uppercase; + letter-spacing: 0.12em; + } + + h2 { + margin: 0; + font-size: 1.24rem; + line-height: 1.25; + font-weight: 840; + } +} + +.mcs-appt-section-head--spaced { + margin-top: 30px; +} + +.mcs-appt-date-strip { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(82px, 1fr)); + gap: 10px; +} + +.mcs-appt-date { + display: grid; + min-height: 82px; + place-items: center; + padding: 10px; + border: 1px solid var(--mcs-appt-line); + border-radius: 10px; + background: #ffffff; + color: var(--mcs-appt-muted); + text-align: center; + text-decoration: none; + transition: border-color 160ms ease-out, background 160ms ease-out, color 160ms ease-out, transform 160ms ease-out; + + strong, + span, + small { + display: block; + } + + span { + color: var(--mcs-appt-ink); + font-size: 1.35rem; + line-height: 1; + font-weight: 850; + } + + small { + font-weight: 800; + } + + &.active { + border-color: var(--mcs-appt-blue); + background: #eef4ff; + color: var(--mcs-appt-blue); + } + + &:active { + transform: scale(0.98); + } +} + +@media (hover: hover) and (pointer: fine) { + .mcs-appt-date:hover { + border-color: var(--mcs-appt-blue); + color: var(--mcs-appt-blue); + } +} + +.mcs-appt-empty { + padding: 18px; + border: 1px dashed var(--mcs-appt-line); + border-radius: 10px; + color: var(--mcs-appt-muted); + background: var(--mcs-appt-soft); +} + +.mcs-appt-slot-list { + display: grid; + gap: 10px; +} + +.mcs-appt-slot { + input[type="radio"] { + position: absolute; + opacity: 0; + pointer-events: none; + } + + label { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + min-height: 56px; + padding: 12px 14px; + border: 1px solid var(--mcs-appt-line); + border-radius: 10px; + background: #ffffff; + color: var(--mcs-appt-ink); + cursor: pointer; + transition: border-color 160ms ease-out, background 160ms ease-out, transform 160ms ease-out; + + span { + font-size: 1.05rem; + font-weight: 850; + } + + small { + color: var(--mcs-appt-teal); + font-weight: 800; + } + } + + label:active { + transform: scale(0.99); + } + + input[type="radio"]:checked + label { + border-color: var(--mcs-appt-blue); + background: #eef4ff; + } + + input[type="radio"]:checked ~ .mcs-appt-form { + display: grid; + } +} + +.mcs-appt-form { + display: none; + gap: 16px; + margin-top: 10px; + padding: 18px; + border: 1px solid #cbd8f7; + border-radius: 12px; + background: #f8fbff; +} + +.mcs-appt-form-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 14px; + + label { + display: grid; + gap: 7px; + color: var(--mcs-appt-muted); + font-weight: 800; + } + + input, + textarea { + width: 100%; + min-height: 46px; + border: 1px solid var(--mcs-appt-line); + border-radius: 10px; + padding: 11px 12px; + background: #ffffff; + color: var(--mcs-appt-ink); + } + + textarea { + min-height: 104px; + resize: vertical; + } +} + +.mcs-appt-form-wide { + grid-column: 1 / -1; +} + +.mcs-appt-form button { + justify-self: start; + min-height: 46px; + border: 0; + border-radius: 10px; + padding: 0 18px; + background: var(--mcs-appt-blue); + color: #ffffff; + font-weight: 850; + box-shadow: 0 10px 24px rgba(28, 78, 216, 0.2); + transition: transform 160ms ease-out, background 160ms ease-out; + + &:active { + transform: scale(0.98); + } +} + +@media (max-width: 900px) { + .mcs-appt-shell { + grid-template-columns: 1fr; + } + + .mcs-appt-info, + .mcs-appt-booking { + padding: 24px; + } +} + +@media (max-width: 560px) { + .mcs-appointment { + padding: 18px 12px 42px; + } + + .mcs-appt-date-strip, + .mcs-appt-form-grid { + grid-template-columns: 1fr; + } + + .mcs-appt-section-head { + align-items: flex-start; + flex-direction: column; + } +} diff --git a/addons/mcs_appointment_booking/views/appointment_templates.xml b/addons/mcs_appointment_booking/views/appointment_templates.xml index ae68fd6..b740468 100644 --- a/addons/mcs_appointment_booking/views/appointment_templates.xml +++ b/addons/mcs_appointment_booking/views/appointment_templates.xml @@ -32,60 +32,76 @@