fix: archive old loyalty cards when updating partner membership level to prevent duplication
This commit is contained in:
parent
2fbce808fd
commit
a2fa0304d8
@ -18,3 +18,24 @@ class ResPartner(models.Model):
|
||||
# Add custom field for customer membership level
|
||||
fields_list.append('membership_level_id')
|
||||
return fields_list
|
||||
|
||||
def write(self, vals):
|
||||
"""
|
||||
When a partner's membership level changes, delete their loyalty cards
|
||||
from the OLD level's program so they don't accumulate cards across levels.
|
||||
"""
|
||||
if 'membership_level_id' in vals:
|
||||
new_level_id = vals['membership_level_id']
|
||||
for partner in self:
|
||||
old_level_id = partner.membership_level_id.id if partner.membership_level_id else False
|
||||
# Only act when the level is actually changing to a different value
|
||||
if old_level_id and old_level_id != new_level_id:
|
||||
old_cards = self.env['loyalty.card'].search([
|
||||
('partner_id', '=', partner.id),
|
||||
('program_id', '=', old_level_id),
|
||||
])
|
||||
if old_cards:
|
||||
# Archive instead of delete — loyalty cards may be referenced
|
||||
# by pos_order_line.coupon_id (FK), so unlink() would fail.
|
||||
old_cards.write({'active': False})
|
||||
return super().write(vals)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user