fix: ensure loyalty card points are reset to zero when transferring levels or archiving cards

This commit is contained in:
Suherdy Yacob 2026-06-02 16:51:01 +07:00
parent fc63dda464
commit 9768a3795c

View File

@ -33,6 +33,7 @@ class ResPartner(models.Model):
old_cards = self.env['loyalty.card'].sudo().search([ old_cards = self.env['loyalty.card'].sudo().search([
('partner_id', '=', partner.id), ('partner_id', '=', partner.id),
('program_id', '=', old_level_id), ('program_id', '=', old_level_id),
('active', '=', True),
]) ])
if old_cards and new_level_id: if old_cards and new_level_id:
new_card = self.env['loyalty.card'].sudo().search([ new_card = self.env['loyalty.card'].sudo().search([
@ -52,6 +53,7 @@ class ResPartner(models.Model):
pts = old_card.points pts = old_card.points
if abs(pts) > 0.0001: if abs(pts) > 0.0001:
new_card.points += pts new_card.points += pts
old_card.points = 0.0
# 2. Transfer loyalty history (point transactions) # 2. Transfer loyalty history (point transactions)
old_histories = self.env['loyalty.history'].sudo().search([ old_histories = self.env['loyalty.history'].sudo().search([
@ -76,5 +78,5 @@ class ResPartner(models.Model):
# Archive old-level cards # Archive old-level cards
if old_cards: if old_cards:
old_cards.write({'active': False}) old_cards.write({'active': False, 'points': 0.0})
return super().write(vals) return super().write(vals)