From d5a406e56690fa6972959b343d9b3c89a74441aa Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Fri, 5 Jun 2026 08:48:19 +0700 Subject: [PATCH] feat: synchronize active status for loyalty subscriptions and refine card validation logic in POS --- models/loyalty_card.py | 2 +- models/loyalty_program.py | 13 +++++++++---- static/src/app/models/pos_order.js | 6 +++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/models/loyalty_card.py b/models/loyalty_card.py index 8c19660..43e61a1 100644 --- a/models/loyalty_card.py +++ b/models/loyalty_card.py @@ -33,5 +33,5 @@ class LoyaltyCard(models.Model): @api.model def _load_pos_data_fields(self, config): fields_list = super()._load_pos_data_fields(config) - fields_list.extend(['subscription_start_date', 'subscription_end_date', 'subscription_usage_count']) + fields_list.extend(['subscription_start_date', 'subscription_end_date', 'subscription_usage_count', 'active']) return fields_list diff --git a/models/loyalty_program.py b/models/loyalty_program.py index 13719cb..6e0a231 100644 --- a/models/loyalty_program.py +++ b/models/loyalty_program.py @@ -44,8 +44,13 @@ class LoyaltyProgram(models.Model): def write(self, vals): if vals.get('program_type') == 'subscription' or (not vals.get('program_type') and any(p.program_type == 'subscription' for p in self)): - vals['manual_membership'] = True - vals['trigger'] = 'auto' - vals['applies_on'] = 'both' - vals['portal_visible'] = True + if any(not p.manual_membership for p in self): + vals['manual_membership'] = True + if any(p.trigger != 'auto' for p in self): + vals['trigger'] = 'auto' + if any(p.applies_on != 'both' for p in self): + vals['applies_on'] = 'both' + if any(not p.portal_visible for p in self): + vals['portal_visible'] = True return super().write(vals) + diff --git a/static/src/app/models/pos_order.js b/static/src/app/models/pos_order.js index 7ebf33a..defc633 100644 --- a/static/src/app/models/pos_order.js +++ b/static/src/app/models/pos_order.js @@ -38,7 +38,11 @@ patch(PosOrder.prototype, { return cardPartnerId === partner.id && cardProgramId === program.id; }); - if (!card || !card.active) { + if (!card) { + return true; + } + + if (card.id < 0 || !card.active) { return false; }