Privacy/space housekeeping for the kiosk verification selfies. A new daily cron
(_cron_fusion_wipe_old_photos) deletes the photo attachments on attendances
whose clock-in is older than fusion_clock.photo_retention_days (default 60).
Only the images are removed — attendance records, worked hours and penalties
are kept. Clearing the attachment-backed binary reclaims filestore space.
- Configurable in Settings → Fusion Clock → NFC Kiosk ("Auto-Wipe Photos After
(days)"); set 0 to disable.
- Wipes all three photo fields (NFC check-in/out + legacy portal photo),
batched with per-batch savepoints.
- tests/test_photo_retention.py covers wipe-old / keep-recent / retention=0.
Verified live on entech (19.0.3.11.7) via a rollback-only dry run: a 70-day
shift's photos were wiped (record + 8h hours preserved) while a 5-day shift's
photo was kept; nothing persisted. 0 attendances currently exceed 60 days.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
77 lines
3.4 KiB
XML
77 lines
3.4 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo noupdate="1">
|
|
|
|
<!-- Auto Clock-Out Cron: runs every 15 minutes -->
|
|
<record id="cron_auto_clock_out" model="ir.cron">
|
|
<field name="name">Fusion Clock: Auto Clock-Out</field>
|
|
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
|
|
<field name="state">code</field>
|
|
<field name="code">model._cron_fusion_auto_clock_out()</field>
|
|
<field name="interval_number">15</field>
|
|
<field name="interval_type">minutes</field>
|
|
<field name="active">True</field>
|
|
<field name="priority">50</field>
|
|
</record>
|
|
|
|
<!-- Report Generation Cron: runs daily at 1:00 AM -->
|
|
<record id="cron_generate_reports" model="ir.cron">
|
|
<field name="name">Fusion Clock: Generate Period Reports</field>
|
|
<field name="model_id" ref="fusion_clock.model_fusion_clock_report"/>
|
|
<field name="state">code</field>
|
|
<field name="code">model._cron_generate_period_reports()</field>
|
|
<field name="interval_number">1</field>
|
|
<field name="interval_type">days</field>
|
|
<field name="active">True</field>
|
|
<field name="priority">60</field>
|
|
</record>
|
|
|
|
<!-- Absence Check Cron: runs daily at midnight -->
|
|
<record id="cron_check_absences" model="ir.cron">
|
|
<field name="name">Fusion Clock: Daily Absence Check</field>
|
|
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
|
|
<field name="state">code</field>
|
|
<field name="code">model._cron_fusion_check_absences()</field>
|
|
<field name="interval_number">1</field>
|
|
<field name="interval_type">days</field>
|
|
<field name="active">True</field>
|
|
<field name="priority">55</field>
|
|
</record>
|
|
|
|
<!-- Employee Reminder Cron: runs every 15 minutes -->
|
|
<record id="cron_employee_reminders" model="ir.cron">
|
|
<field name="name">Fusion Clock: Employee Reminders</field>
|
|
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
|
|
<field name="state">code</field>
|
|
<field name="code">model._cron_fusion_employee_reminders()</field>
|
|
<field name="interval_number">15</field>
|
|
<field name="interval_type">minutes</field>
|
|
<field name="active">True</field>
|
|
<field name="priority">70</field>
|
|
</record>
|
|
|
|
<!-- Weekly Summary Cron: runs daily (checks if Monday internally) -->
|
|
<record id="cron_weekly_summary" model="ir.cron">
|
|
<field name="name">Fusion Clock: Weekly Summary</field>
|
|
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
|
|
<field name="state">code</field>
|
|
<field name="code">model._cron_fusion_weekly_summary()</field>
|
|
<field name="interval_number">1</field>
|
|
<field name="interval_type">days</field>
|
|
<field name="active">True</field>
|
|
<field name="priority">80</field>
|
|
</record>
|
|
|
|
<!-- Photo Wipe Cron: runs daily, deletes clock photos past the retention window -->
|
|
<record id="cron_wipe_old_photos" model="ir.cron">
|
|
<field name="name">Fusion Clock: Wipe Old Clock Photos</field>
|
|
<field name="model_id" ref="hr_attendance.model_hr_attendance"/>
|
|
<field name="state">code</field>
|
|
<field name="code">model._cron_fusion_wipe_old_photos()</field>
|
|
<field name="interval_number">1</field>
|
|
<field name="interval_type">days</field>
|
|
<field name="active">True</field>
|
|
<field name="priority">65</field>
|
|
</record>
|
|
|
|
</odoo>
|