From d6d9fba49ad802ae83ef4fd8a0bb6888b56773d1 Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Wed, 10 Jun 2026 09:35:18 +0700 Subject: [PATCH] fix: prevent program state resets during module installation or specific context operations in loyalty rules and rewards --- models/loyalty_reward.py | 15 +++++++++++++++ models/loyalty_rule.py | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/models/loyalty_reward.py b/models/loyalty_reward.py index 4cdabc9..1d0dba9 100644 --- a/models/loyalty_reward.py +++ b/models/loyalty_reward.py @@ -37,6 +37,11 @@ class LoyaltyReward(models.Model): @api.model_create_multi def create(self, vals_list): records = super().create(vals_list) + if (self.env.context.get('install_mode') + or self.env.context.get('module') + or self.env.context.get('no_marketing_reset')): + return records + for record in records: if record.program_id and record.program_id.state in ['pending', 'approved']: record.program_id.write({'state': 'draft'}) @@ -44,6 +49,11 @@ class LoyaltyReward(models.Model): return records def write(self, vals): + if (self.env.context.get('install_mode') + or self.env.context.get('module') + or self.env.context.get('no_marketing_reset')): + return super().write(vals) + programs_to_reset = self.env['loyalty.program'] for record in self: if record.program_id and record.program_id.state in ['pending', 'approved']: @@ -63,6 +73,11 @@ class LoyaltyReward(models.Model): return res def unlink(self): + if (self.env.context.get('install_mode') + or self.env.context.get('module') + or self.env.context.get('no_marketing_reset')): + return super().unlink() + programs_to_reset = self.env['loyalty.program'] for record in self: if record.program_id and record.program_id.state in ['pending', 'approved']: diff --git a/models/loyalty_rule.py b/models/loyalty_rule.py index 5270c52..d5978e2 100644 --- a/models/loyalty_rule.py +++ b/models/loyalty_rule.py @@ -8,6 +8,11 @@ class LoyaltyRule(models.Model): @api.model_create_multi def create(self, vals_list): records = super().create(vals_list) + if (self.env.context.get('install_mode') + or self.env.context.get('module') + or self.env.context.get('no_marketing_reset')): + return records + for record in records: if record.program_id and record.program_id.state in ['pending', 'approved']: record.program_id.write({'state': 'draft'}) @@ -15,6 +20,11 @@ class LoyaltyRule(models.Model): return records def write(self, vals): + if (self.env.context.get('install_mode') + or self.env.context.get('module') + or self.env.context.get('no_marketing_reset')): + return super().write(vals) + programs_to_reset = self.env['loyalty.program'] for record in self: if record.program_id and record.program_id.state in ['pending', 'approved']: @@ -34,6 +44,11 @@ class LoyaltyRule(models.Model): return res def unlink(self): + if (self.env.context.get('install_mode') + or self.env.context.get('module') + or self.env.context.get('no_marketing_reset')): + return super().unlink() + programs_to_reset = self.env['loyalty.program'] for record in self: if record.program_id and record.program_id.state in ['pending', 'approved']: