Reminders, absence detection, late/early penalties, and auto-clock-out are now driven by each employee's real schedule (posted planner entry -> recurring shift), never the global 9-5 default. Employees who aren't scheduled get no reminders/absence. Overtime past the scheduled end is never cut off — auto clock-out only fires at a max-shift safety cap (default raised 12 -> 16h). Team leads build the planner in draft and Post it (publishes + emails employees). - hr.employee._get_fclk_day_plan: explicit `scheduled` flag; posted-only planner entries (drafts ignored), else recurring shift covering that weekday, else not-scheduled; sources 'schedule'/'shift'/'none'. - fusion.clock.shift: day_mon..day_sun weekday pattern + covers_weekday(). - fusion.clock.schedule: draft/posted state + posted_date; planner edits reset to draft; fclk_email_posted_week notification. - Rewrote the reminder / absence / auto-clock-out crons: schedule-gated, per-employee savepoints, OT-aware cap, weekend hardcode removed. - Penalties + all three clock-in paths skip days the employee isn't scheduled. - shift_planner: Post Week route + planner Post button + draft count. - Migration backfills pre-existing schedule entries to 'posted' so they keep driving automation after upgrade. - Tests: resolver matrix, cron gating, OT cap; fixed the existing planner test for the new state/source semantics. Design: docs/superpowers/specs/2026-05-30-schedule-driven-attendance-design.md Frontend footprint kept at zero to avoid colliding with the concurrent employee-portal (payslips) work. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
115 lines
5.0 KiB
Python
115 lines
5.0 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.12.1',
|
|
'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',
|
|
'views/clock_schedule_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/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/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,
|
|
}
|