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