diff --git a/odex25_hr/exp_hr_appraisal/models/appraisal.py b/odex25_hr/exp_hr_appraisal/models/appraisal.py index 753634aa2..4527f002e 100644 --- a/odex25_hr/exp_hr_appraisal/models/appraisal.py +++ b/odex25_hr/exp_hr_appraisal/models/appraisal.py @@ -273,15 +273,20 @@ class StandardAppraisalLines(models.Model): ('5', '5'), ], string='Priority', - compute='_compute_priority', - inverse='_inverse_priority', - store=True, + store=True ) - @api.depends('greed', 'great_level') + from_greed = fields.Boolean(default=False) + from_priority = fields.Boolean(default=False) + + @api.onchange('greed', 'great_level') def _compute_priority(self): for rec in self: - rec.priority = '0' + if rec.from_priority: + # Reset and skip to avoid circular trigger + rec.from_priority = False + continue + rec.from_greed = True if rec.great_level: value = rec.greed / (rec.great_level / 5) if 1 <= value < 2: @@ -295,10 +300,18 @@ class StandardAppraisalLines(models.Model): elif value >= 5: rec.priority = '5' else: - rec.priority = '0' # fallback + rec.priority = '0' + else: + rec.priority = '0' + @api.onchange('priority') def _inverse_priority(self): for rec in self: + if rec.from_greed: + # Reset and skip to avoid circular trigger + rec.from_greed = False + continue + rec.from_priority = True if rec.great_level and rec.priority: rec.greed = int(rec.priority) * (rec.great_level / 5)