# -*- coding: utf-8 -*- # Copyright 2026 Nexa Systems Inc. # License OPL-1 (Odoo Proprietary License v1.0) from odoo import api, SUPERUSER_ID def migrate(cr, version): """Retire the single-threshold break param (superseded by per-rule break1_after_hours), and force-recompute the now-computed break field so existing closed attendances reflect the province rule + their penalties.""" cr.execute( "DELETE FROM ir_config_parameter WHERE key = %s", ('fusion_clock.break_threshold_hours',), ) env = api.Environment(cr, SUPERUSER_ID, {}) Attendance = env['hr.attendance'] closed = Attendance.search([('check_out', '!=', False)]) if closed: # Recompute the break AND everything that derives from it, in dependency # order (break -> net hours -> overtime). Recomputing break alone leaves # stored x_fclk_net_hours / x_fclk_overtime_hours stale, because # add_to_compute + flush of one field does not cascade to its dependents. for fname in ('x_fclk_break_minutes', 'x_fclk_net_hours', 'x_fclk_overtime_hours'): env.add_to_compute(Attendance._fields[fname], closed) closed.flush_recordset([fname])