feat(fusion_clock): PIN kiosk — polished photo-tile + PIN clock (opt-in)

A proper shared-device PIN kiosk for clients who don't want NFC: photo-tile grid
(+search) -> tap -> PIN (or first-use create) -> optional master-gated selfie ->
clock, in the NFC kiosk's dark glass + brand-gradient style. Built as an Odoo 19
Interaction; new pin_kiosk.scss (scoped); reworked clock_kiosk.py
(search +avatar/has_pin, verify_pin needs_setup, set_pin, clock via kiosk location).
Drops the redundant kiosk_pin_required (PIN always required); relabels the company
kiosk location; adds a PIN-kiosk app icon. Opt-in via enable_kiosk (off by default).
HttpCase tests added. Bump 19.0.4.0.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-05-31 21:25:32 -04:00
parent b61e159e6f
commit a5ec79013a
13 changed files with 672 additions and 393 deletions

View File

@@ -110,16 +110,23 @@ Location verification uses GPS when coordinates are available and geocoded locat
## 6. Kiosk And NFC
Classic kiosk:
PIN kiosk (opt-in alternative to NFC; v19.0.4.0.0+):
- Page: `/fusion_clock/kiosk`
- Page: `/fusion_clock/kiosk` — polished photo-tile → PIN flow (logo, brand-hue
gradient, live clock), matching the NFC kiosk style; built as an Odoo 19
Interaction (`#pin_kiosk_root`, `static/src/js/fusion_clock_kiosk.js`,
`static/src/scss/pin_kiosk.scss`, brand-hue var `--pk-h`).
- JSON routes:
- `/fusion_clock/kiosk/search`
- `/fusion_clock/kiosk/verify_pin`
- `/fusion_clock/kiosk/clock`
- Requires `fusion_clock.group_fusion_clock_manager`.
- Controlled by `fusion_clock.enable_kiosk` and `fusion_clock.kiosk_pin_required`.
- Uses `hr.employee.x_fclk_kiosk_pin`.
- `/fusion_clock/kiosk/search` (grid rows: +`avatar_url`, +`has_pin`; also used by the NFC kiosk's employee_search — keep additive)
- `/fusion_clock/kiosk/verify_pin` (returns `needs_setup` when the employee has no PIN)
- `/fusion_clock/kiosk/set_pin` (first-use PIN creation, 46 digits)
- `/fusion_clock/kiosk/clock` (uses the company kiosk location, no GPS geofence; optional master-gated selfie)
- Requires `group_fusion_clock_manager` or `group_fusion_clock_kiosk_app`; has its own app icon.
- Opt-in via `fusion_clock.enable_kiosk`. PIN is ALWAYS required (the old
`kiosk_pin_required` setting was removed). Selfie capture is gated by the
master `fusion_clock.enable_photo_verification`. Kiosk location =
`res.company.x_fclk_nfc_kiosk_location_id` (shared with the NFC kiosk).
- Uses `hr.employee.x_fclk_kiosk_pin` (manager-editable; created on first tap otherwise).
NFC kiosk:
@@ -264,7 +271,6 @@ fusion_clock.enable_ip_fallback
fusion_clock.enable_photo_verification
fusion_clock.google_maps_api_key
fusion_clock.enable_kiosk
fusion_clock.kiosk_pin_required
fusion_clock.enable_correction_requests
fusion_clock.enable_sounds
fusion_clock.pay_period_type