Files
Odoo-Modules/fusion_clock/views/clock_menus.xml
gsinghpal 3f78f652e7 feat(fusion_clock): bi-weekly attendance filter — pay-period filters + picker
Reuse the existing Pay Period setting (Frequency + Anchor) as the single
source of truth via a shared pure helper (models/pay_period.py); fusion.clock.report
delegates to it. Add Current/Previous/Next Pay Period filters to the attendance
search view (search-method computed booleans on hr.attendance), a Bi-Weekly Period
picker wizard (pick start -> auto +2 weeks, editable; Apply opens the filtered list)
reachable from an Attendance menu item and a dashboard tile. Window follows the
configured frequency; TZ-correct via local-day boundaries. Bump 3.14.4 -> 3.15.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 11:20:06 -04:00

193 lines
7.7 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Top-Level Menu -->
<menuitem id="menu_fusion_clock_root"
name="Fusion Clock"
web_icon="fusion_clock,static/description/icon.png"
sequence="45"
groups="group_fusion_clock_user"/>
<!-- Dedicated kiosk app: a separate top-level icon (same artwork) that opens
the NFC kiosk. Gated to Kiosk Operator so shared tablet accounts see ONLY
this app, not the full Fusion Clock backend. -->
<record id="action_fusion_clock_kiosk_nfc" model="ir.actions.act_url">
<field name="name">Fusion Clock Kiosk</field>
<field name="url">/fusion_clock/kiosk/nfc</field>
<field name="target">self</field>
</record>
<menuitem id="menu_fusion_clock_kiosk_app_root"
name="Fusion Clock Kiosk"
web_icon="fusion_clock,static/description/icon.png"
action="action_fusion_clock_kiosk_nfc"
sequence="46"
groups="group_fusion_clock_kiosk_app"/>
<!-- Dashboard — layered & role-aware: personal band for everyone,
team band for leads (direct reports), org band for managers.
Gated to the base clock-user group (lead/manager imply it). -->
<menuitem id="menu_fusion_clock_dashboard"
name="Dashboard"
parent="menu_fusion_clock_root"
action="action_fusion_clock_dashboard"
sequence="5"
groups="group_fusion_clock_user"/>
<!-- ============================================================
Attendance — day-to-day operational records
============================================================ -->
<menuitem id="menu_fusion_clock_attendance"
name="Attendance"
parent="menu_fusion_clock_root"
sequence="10"/>
<menuitem id="menu_fusion_clock_attendance_list"
name="All Attendances"
parent="menu_fusion_clock_attendance"
action="hr_attendance.hr_attendance_action"
sequence="10"
groups="group_fusion_clock_manager,group_fusion_clock_team_lead"/>
<menuitem id="menu_fusion_clock_biweekly_period"
name="Bi-Weekly Period"
parent="menu_fusion_clock_attendance"
action="action_fusion_clock_period_picker"
sequence="15"
groups="group_fusion_clock_manager,group_fusion_clock_team_lead"/>
<menuitem id="menu_fusion_clock_leaves"
name="Leave Requests"
parent="menu_fusion_clock_attendance"
action="action_fusion_clock_leave_request"
sequence="20"
groups="group_fusion_clock_manager"/>
<menuitem id="menu_fusion_clock_corrections"
name="Correction Requests"
parent="menu_fusion_clock_attendance"
action="action_fusion_clock_correction"
sequence="30"
groups="group_fusion_clock_manager"/>
<menuitem id="menu_fusion_clock_penalties"
name="Penalties"
parent="menu_fusion_clock_attendance"
action="action_fusion_clock_penalty"
sequence="40"
groups="group_fusion_clock_manager,group_fusion_clock_team_lead"/>
<!-- ============================================================
Scheduling — building and posting schedules
============================================================ -->
<menuitem id="menu_fusion_clock_scheduling"
name="Scheduling"
parent="menu_fusion_clock_root"
sequence="20"
groups="group_fusion_clock_manager"/>
<menuitem id="menu_fusion_clock_shift_planner"
name="Shift Planner"
parent="menu_fusion_clock_scheduling"
action="action_fusion_clock_shift_planner"
sequence="5"
groups="group_fusion_clock_manager"/>
<menuitem id="menu_fusion_clock_scheduled_shifts"
name="Scheduled Shifts"
parent="menu_fusion_clock_scheduling"
action="action_fusion_clock_schedule"
sequence="10"
groups="group_fusion_clock_manager"/>
<menuitem id="menu_fusion_clock_shifts"
name="Shifts"
parent="menu_fusion_clock_scheduling"
action="action_fusion_clock_shift"
sequence="15"
groups="group_fusion_clock_manager"/>
<menuitem id="menu_fusion_clock_schedule_audit"
name="Schedule Audit"
parent="menu_fusion_clock_scheduling"
action="action_fusion_clock_schedule_audit"
sequence="20"
groups="group_fusion_clock_manager"/>
<!-- Activity Logs — cross-cutting audit trail -->
<menuitem id="menu_fusion_clock_activity_logs"
name="Activity Logs"
parent="menu_fusion_clock_root"
action="action_fusion_clock_activity_log"
sequence="30"
groups="group_fusion_clock_manager,group_fusion_clock_team_lead"/>
<!-- Reports Sub-Menu -->
<menuitem id="menu_fusion_clock_reports_parent"
name="Reports"
parent="menu_fusion_clock_root"
sequence="40"
groups="group_fusion_clock_manager"/>
<menuitem id="menu_fusion_clock_reports"
name="All Reports"
parent="menu_fusion_clock_reports_parent"
action="action_fusion_clock_report"
sequence="10"
groups="group_fusion_clock_manager"/>
<menuitem id="menu_fusion_clock_generate_historical"
name="Generate Historical Reports"
parent="menu_fusion_clock_reports_parent"
action="action_server_generate_historical"
sequence="20"
groups="group_fusion_clock_manager"/>
<!-- Employees -->
<menuitem id="menu_fusion_clock_employees"
name="Employees"
parent="menu_fusion_clock_root"
action="hr.open_view_employee_list_my"
sequence="50"
groups="group_fusion_clock_manager,group_fusion_clock_team_lead"/>
<!-- ============================================================
Configuration — setup
============================================================ -->
<menuitem id="menu_fusion_clock_config"
name="Configuration"
parent="menu_fusion_clock_root"
sequence="90"
groups="group_fusion_clock_manager"/>
<record id="action_fusion_clock_config_settings" model="ir.actions.act_window">
<field name="name">Fusion Clock Settings</field>
<field name="res_model">res.config.settings</field>
<field name="view_mode">form</field>
<field name="target">current</field>
<field name="context">{'module': 'fusion_clock', 'bin_size': False}</field>
</record>
<menuitem id="menu_fusion_clock_settings"
name="Settings"
parent="menu_fusion_clock_config"
action="action_fusion_clock_config_settings"
sequence="10"
groups="group_fusion_clock_manager"/>
<menuitem id="menu_fusion_clock_locations_config"
name="Locations"
parent="menu_fusion_clock_config"
action="action_fusion_clock_location"
sequence="20"
groups="group_fusion_clock_manager"/>
<menuitem id="menu_fusion_clock_nfc_enrollment"
name="Enroll NFC Card"
parent="menu_fusion_clock_config"
action="action_fusion_clock_nfc_enrollment_wizard"
sequence="30"
groups="group_fusion_clock_manager"/>
</odoo>