From f6a56826927a67c85aaae0acc3218fd4bbe857a9 Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Mon, 8 Jun 2026 17:38:12 +0700 Subject: [PATCH] feat: implement tiered loyalty program lookup with prioritized mapping and fallback logic --- app.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app.py b/app.py index af5d915..6e3f17d 100644 --- a/app.py +++ b/app.py @@ -234,7 +234,21 @@ def migrate_customer(customer_id): # 2. Find loyalty.program based on level level = customer.get('level', '') - program_ids = models.execute_kw(ODOO_DB, uid, ODOO_PASS, 'loyalty.program', 'search', [[('name', 'ilike', level)]]) + level_map = { + 'Silver': 'Membership Silver', + 'Gold': 'Membership Gold', + 'Platinum': 'Membership Platinum' + } + target_program_name = level_map.get(level, f"Membership {level}") + + # 1. Search by exact mapped name + program_ids = models.execute_kw(ODOO_DB, uid, ODOO_PASS, 'loyalty.program', 'search', [[('name', '=', target_program_name)]]) + if not program_ids: + # 2. Search by exact level name + program_ids = models.execute_kw(ODOO_DB, uid, ODOO_PASS, 'loyalty.program', 'search', [[('name', '=', level)]]) + if not program_ids: + # 3. Fallback to ilike + program_ids = models.execute_kw(ODOO_DB, uid, ODOO_PASS, 'loyalty.program', 'search', [[('name', 'ilike', level)]]) if not program_ids: return jsonify({"success": False, "message": f"Loyalty program containing '{level}' not found in Odoo."}), 404