78fa8f07ee36dc10287d7ed545f8170eb8cd209a
The "explain your missed clock-out" dialog (driven by hr.employee. x_fclk_pending_reason) was set by the absence + auto-clock-out crons but only cleared by the systray reason dialog -- never by the kiosk/NFC clock paths that staff actually use. During the kiosk rollout the absence cron flagged the whole company (hundreds of "absent" logs); those stale flags then nagged everyone forever, even while currently clocked in. Fixes: - Clear x_fclk_pending_reason on every successful clock-in (portal, systray, PIN kiosk, NFC kiosk). Back on the clock => no nag. - get_status / dashboard never report pending while checked-in or exempt; the systray also guards the dialog client-side. - Absence detection no longer sets x_fclk_pending_reason (an absence has no "departure time" to explain). It still logs 'absent' + notifies the office. - One-time migration (19.0.4.2.0) clears existing stale flags. Owner / attendance exemption: - New "Owner" role (top of the Fusion Clock access dropdown, implies Manager) plus a per-employee "Exempt from Attendance" checkbox. - hr.employee._fclk_is_attendance_exempt(); the absence, auto-clock-out, reminder and weekly-summary crons all skip exempt employees, and the dialog is suppressed for them. Tests: tests/test_pending_reason_exempt.py (13 cases). Full fusion_clock suite green except pre-existing env-sensitive failures. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Description
Odoo 19 custom modules
Languages
Python
57.7%
HTML
23.9%
JavaScript
14.8%
SCSS
2.3%
CSS
0.8%
Other
0.4%