Files
Odoo-Modules/fusion_clock/__manifest__.py
gsinghpal 78fa8f07ee fix(fusion_clock): stop stale missed-clock-in nag; add Owner role + attendance exemption
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>
2026-06-02 17:54:00 -04:00

119 lines
5.2 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2026 Nexa Systems Inc.
# License OPL-1 (Odoo Proprietary License v1.0)
# Part of the Fusion Clock product family.
{
'name': 'Fusion Clock',
'version': '19.0.4.2.0',
'category': 'Human Resources/Attendances',
'summary': 'Complete Employee T&A with Geofencing, Shifts, Penalties, Overtime, Kiosk, Dashboard & Payroll Export',
'description': """
Fusion Clock - Complete Employee Time & Attendance
====================================================
A modern, mobile-first attendance module that provides:
* **Geofenced Clock-In/Out** - GPS and IP whitelist verification
* **Shift Scheduling** - Per-employee shift assignment with break management
* **Auto Clock-Out** - Automatic clock-out after shift + grace period
* **Penalty Tracking** - Auto-deduction for late clock-in and early clock-out
* **Overtime Tracking** - Daily and weekly overtime with configurable thresholds
* **Activity Logging** - Comprehensive audit trail of every attendance event
* **Absence Tracking** - Automatic detection with monthly/yearly counters
* **Leave Requests** - Portal-based leave requests with auto-approval
* **Timesheet Corrections** - Employee correction requests with approval workflow
* **Manager Dashboard** - Live status, alerts, and team overview
* **Kiosk Mode** - Shared-device clock-in/out with PIN verification
* **Photo Verification** - Optional selfie capture at clock-in
* **On-Time Streak** - Gamification with milestone tracking
* **CSV Export** - Configurable payroll-compatible export
* **Team Lead Views** - Filtered read-only access for direct reports
* **Pay Period Reports** - PDF reports with email automation
* **Employee Notifications** - Clock-in/out reminders and weekly summaries
* **Portal UI** - Dark-themed mobile-first portal with FAB and modals
* **Systray Widget** - Backend users can clock in/out from any Odoo page
Integrates natively with Odoo's hr.attendance module for full payroll compatibility.
""",
'author': 'Nexa Systems Inc.',
'website': 'https://nexasystems.io',
'license': 'OPL-1',
'depends': [
'hr_attendance',
'hr',
'portal',
'mail',
'resource',
],
'data': [
# Security
'security/security.xml',
'security/ir.model.access.csv',
# Data
'data/ir_config_parameter_data.xml',
'data/clock_break_rule_data.xml',
'data/ir_cron_data.xml',
# Reports (must load before mail templates that reference them)
'report/clock_report_template.xml',
'report/clock_employee_report.xml',
# Mail templates
'data/mail_template_data.xml',
# Views - Backend
'views/clock_location_views.xml',
'views/hr_attendance_views.xml',
'views/clock_report_views.xml',
'views/clock_penalty_views.xml',
'views/res_config_settings_views.xml',
'views/clock_activity_log_views.xml',
'views/clock_leave_request_views.xml',
'views/clock_shift_views.xml',
'views/clock_correction_views.xml',
'views/clock_dashboard_views.xml',
'views/hr_employee_views.xml',
'views/clock_schedule_views.xml',
'views/clock_break_rule_views.xml',
# Wizards (must load before clock_menus.xml since menu references wizard action)
'wizard/clock_nfc_enrollment_views.xml',
'wizard/clock_period_picker_views.xml',
'views/clock_menus.xml',
# Views - Portal
'views/portal_clock_templates.xml',
'views/portal_timesheet_templates.xml',
'views/portal_report_templates.xml',
'views/portal_payslip_templates.xml',
'views/kiosk_templates.xml',
'views/kiosk_nfc_templates.xml',
],
'assets': {
'web.assets_frontend': [
'fusion_clock/static/src/css/portal_clock.css',
'fusion_clock/static/src/scss/nfc_kiosk.scss',
'fusion_clock/static/src/scss/pin_kiosk.scss',
'fusion_clock/static/src/js/fusion_clock_portal.js',
'fusion_clock/static/src/js/fusion_clock_kiosk.js',
'fusion_clock/static/src/js/fusion_clock_nfc_kiosk.js',
],
'web.assets_backend': [
'fusion_clock/static/src/scss/_fusion_clock_shift_planner_tokens.scss',
'fusion_clock/static/src/scss/fusion_clock_shift_planner.scss',
'fusion_clock/static/src/scss/fusion_clock.scss',
'fusion_clock/static/src/js/fusion_clock_systray.js',
'fusion_clock/static/src/xml/systray_clock.xml',
'fusion_clock/static/src/js/fusion_clock_dashboard.js',
'fusion_clock/static/src/xml/fusion_clock_dashboard.xml',
'fusion_clock/static/src/js/fusion_clock_shift_planner.js',
'fusion_clock/static/src/xml/fusion_clock_shift_planner.xml',
'fusion_clock/static/src/js/fusion_clock_location_map.js',
'fusion_clock/static/src/js/fusion_clock_location_places.js',
'fusion_clock/static/src/xml/fusion_clock_location.xml',
],
'web.assets_web_dark': [
'fusion_clock/static/src/scss/fusion_clock_shift_planner.dark.scss',
],
},
'installable': True,
'auto_install': False,
'application': True,
}