fix: prevent program state resets during module installation or specific context operations in loyalty rules and rewards

This commit is contained in:
Suherdy Yacob 2026-06-10 09:35:18 +07:00
parent f9233da337
commit d6d9fba49a
2 changed files with 30 additions and 0 deletions

View File

@ -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']:

View File

@ -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']: