Files
Odoo-Modules/fusion_clock/__manifest__.py
gsinghpal 9001b6fc51 feat(fusion_clock): USB HID reader support + desktop-tolerant kiosk setup
The NFC kiosk previously required Web NFC, which is Android-Chrome-only.
This blocked desktop testing and locked us to a single hardware path.

Add a keyboard-wedge listener that captures keystrokes from USB HID NFC
readers (the standard Sycreader/Yanzeo class). The listener buffers hex
chars + separators, flushes on Enter (or 600ms idle as fallback for
readers without a terminator), and routes the UID through the same
handleTap()/_onEnrollTap() codepath as Web NFC. Photo verification,
penalty calc, and activity logging all fire identically.

Make the setup button tolerant: try Web NFC, but treat its absence as
non-fatal. USB HID always activates. Only hard-fail when photoRequired
is True AND the camera is unavailable.

Result: same kiosk page now works on Android Chrome (Web NFC), desktop
Chrome with a USB reader, or both at once.

Bump manifest to 19.0.3.2.0.
2026-05-15 19:30:51 -04:00

106 lines
4.5 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.3.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/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',
# Wizards (must load before clock_menus.xml since menu references wizard action)
'wizard/clock_nfc_enrollment_views.xml',
'views/clock_menus.xml',
# Views - Portal
'views/portal_clock_templates.xml',
'views/portal_timesheet_templates.xml',
'views/portal_report_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/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.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_location_map.js',
'fusion_clock/static/src/js/fusion_clock_location_places.js',
'fusion_clock/static/src/xml/fusion_clock_location.xml',
],
},
'installable': True,
'auto_install': False,
'application': True,
}