diff --git a/models/res_partner.py b/models/res_partner.py index 7456b27..fe58603 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -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)