pos_loyalty_marketing_access/models/loyalty_rule.py

64 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
from odoo import _, api, fields, models
class LoyaltyRule(models.Model):
_inherit = 'loyalty.rule'
@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'})
record.program_id.message_post(body=_("A loyalty rule was added, resetting the program to Draft status for re-approval."))
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']:
programs_to_reset |= record.program_id
res = super().write(vals)
if 'program_id' in vals:
new_program = self.env['loyalty.program'].browse(vals['program_id'])
if new_program and new_program.state in ['pending', 'approved']:
programs_to_reset |= new_program
for program in programs_to_reset:
program.write({'state': 'draft'})
program.message_post(body=_("A loyalty rule was modified, resetting the program to Draft status for re-approval."))
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']:
programs_to_reset |= record.program_id
res = super().unlink()
for program in programs_to_reset:
program.write({'state': 'draft'})
program.message_post(body=_("A loyalty rule was deleted, resetting the program to Draft status for re-approval."))
return res