- PWA manifest on the NFC kiosk page so it installs as a full-screen home-screen app (Chrome "Install" / Safari "Add to Home Screen"). - Dedicated "Kiosk Operator" permission + gated "Fusion Clock Kiosk" top-level app (act_url -> /fusion_clock/kiosk/nfc). Kiosk controllers accept Manager OR Kiosk Operator; all kiosk data ops already run sudo. - Fix 403: read the company kiosk location via sudo on page-load and tap (Kiosk Operator has no fusion.clock.location ACL). - Odoo 19 permissions UX: ir.module.category + res.groups.privilege so User/Team Lead/Manager and Kiosk Operator appear as application-access dropdowns on the user form (no developer mode). Short group display names. - Docs: note res.groups.privilege as the Odoo 19 category_id replacement. Deployed live to entech (odoo-entech / LXC 111 on pve-worker5). v19.0.3.6.0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
189 lines
7.1 KiB
XML
189 lines
7.1 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 -->
|
|
<menuitem id="menu_fusion_clock_dashboard"
|
|
name="Dashboard"
|
|
parent="menu_fusion_clock_root"
|
|
action="action_fusion_clock_dashboard"
|
|
sequence="5"
|
|
groups="group_fusion_clock_manager,group_fusion_clock_team_lead"/>
|
|
|
|
<!-- Scheduling -->
|
|
<menuitem id="menu_fusion_clock_scheduling"
|
|
name="Scheduling"
|
|
parent="menu_fusion_clock_root"
|
|
sequence="8"
|
|
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_schedule_audit"
|
|
name="Schedule Audit"
|
|
parent="menu_fusion_clock_scheduling"
|
|
action="action_fusion_clock_schedule_audit"
|
|
sequence="20"
|
|
groups="group_fusion_clock_manager"/>
|
|
|
|
<!-- Attendance Sub-Menu -->
|
|
<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_corrections"
|
|
name="Correction Requests"
|
|
parent="menu_fusion_clock_attendance"
|
|
action="action_fusion_clock_correction"
|
|
sequence="20"
|
|
groups="group_fusion_clock_manager"/>
|
|
|
|
<!-- Activity Logs -->
|
|
<menuitem id="menu_fusion_clock_activity_logs"
|
|
name="Activity Logs"
|
|
parent="menu_fusion_clock_root"
|
|
action="action_fusion_clock_activity_log"
|
|
sequence="15"
|
|
groups="group_fusion_clock_manager,group_fusion_clock_team_lead"/>
|
|
|
|
<!-- Locations Sub-Menu -->
|
|
<menuitem id="menu_fusion_clock_locations"
|
|
name="Locations"
|
|
parent="menu_fusion_clock_root"
|
|
action="action_fusion_clock_location"
|
|
sequence="20"
|
|
groups="group_fusion_clock_manager"/>
|
|
|
|
<!-- Penalties Sub-Menu -->
|
|
<menuitem id="menu_fusion_clock_penalties"
|
|
name="Penalties"
|
|
parent="menu_fusion_clock_root"
|
|
action="action_fusion_clock_penalty"
|
|
sequence="30"
|
|
groups="group_fusion_clock_manager,group_fusion_clock_team_lead"/>
|
|
|
|
<!-- Leave Requests -->
|
|
<menuitem id="menu_fusion_clock_leaves"
|
|
name="Leave Requests"
|
|
parent="menu_fusion_clock_root"
|
|
action="action_fusion_clock_leave_request"
|
|
sequence="35"
|
|
groups="group_fusion_clock_manager"/>
|
|
|
|
<!-- 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"/>
|
|
|
|
<!-- NFC Card Enrollment Wizard -->
|
|
<menuitem id="menu_fusion_clock_nfc_enrollment"
|
|
name="Enroll NFC Card"
|
|
parent="menu_fusion_clock_root"
|
|
action="action_fusion_clock_nfc_enrollment_wizard"
|
|
sequence="55"
|
|
groups="group_fusion_clock_manager"/>
|
|
|
|
<!-- Configuration Sub-Menu -->
|
|
<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_shifts"
|
|
name="Shifts"
|
|
parent="menu_fusion_clock_config"
|
|
action="action_fusion_clock_shift"
|
|
sequence="15"
|
|
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"/>
|
|
|
|
</odoo>
|