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

@@ -10,8 +10,7 @@ class ResCompany(models.Model):
x_fclk_nfc_kiosk_location_id = fields.Many2one(
'fusion.clock.location',
string='NFC Kiosk Location',
string='Kiosk Location',
domain="[('company_id', '=', id)]",
help="Designates which fusion.clock.location is bound to the NFC kiosk "
"for this company. Required when NFC kiosk is enabled.",
help="Clock location bound to the on-site kiosk (NFC and PIN) for this company.",
)

View File

@@ -151,11 +151,6 @@ class ResConfigSettings(models.TransientModel):
default=False,
help="Allow employees to clock in/out from a shared device using their PIN code.",
)
fclk_kiosk_pin_required = fields.Boolean(
string='Require PIN for Kiosk',
default=True,
help="Require employees to enter a PIN when using kiosk mode.",
)
fclk_enable_correction_requests = fields.Boolean(
string='Enable Correction Requests',
default=True,
@@ -276,7 +271,6 @@ class ResConfigSettings(models.TransientModel):
('fclk_enable_ip_fallback', 'fusion_clock.enable_ip_fallback', True),
('fclk_enable_photo_verification', 'fusion_clock.enable_photo_verification', False),
('fclk_enable_kiosk', 'fusion_clock.enable_kiosk', False),
('fclk_kiosk_pin_required', 'fusion_clock.kiosk_pin_required', True),
('fclk_enable_correction_requests', 'fusion_clock.enable_correction_requests', True),
('fclk_enable_sounds', 'fusion_clock.enable_sounds', True),
('fclk_auto_generate_reports', 'fusion_clock.auto_generate_reports', True),