From 371d72887e9e46d7f5859c60cefd7d9c27ab5c4b Mon Sep 17 00:00:00 2001 From: consultoria-as Date: Fri, 1 May 2026 07:03:04 +0000 Subject: [PATCH] refactor: centralize QWEN fitment saving via save_qwen_fitment() - Added save_qwen_fitment() in inventory_vehicle_compat.py to centralize inserting QWEN results into inventory_vehicle_compat - Simplified inventory_bp.py create_item() and auto_match_item_vehicles() to use the centralized function, removing duplicated INSERT logic --- pos/blueprints/inventory_bp.py | 32 ++++------------------ pos/services/inventory_vehicle_compat.py | 34 ++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/pos/blueprints/inventory_bp.py b/pos/blueprints/inventory_bp.py index a68483e..64c816c 100644 --- a/pos/blueprints/inventory_bp.py +++ b/pos/blueprints/inventory_bp.py @@ -301,23 +301,13 @@ def create_item(): if compat_source in ('qwen', 'both'): try: from services.qwen_fitment import get_vehicle_fitment + from services.inventory_vehicle_compat import save_qwen_fitment fitment = get_vehicle_fitment( data['part_number'], data['name'], data.get('brand', '') ) - for v in fitment.get('vehicles', []): - if v.get('mye_id'): - cur = conn.cursor() - cur.execute(""" - INSERT INTO inventory_vehicle_compat - (inventory_id, model_year_engine_id, source, confidence, created_at) - VALUES (%s, %s, %s, %s, NOW()) - ON CONFLICT (inventory_id, model_year_engine_id) DO NOTHING - """, (item_id, v['mye_id'], 'qwen_ai', fitment.get('confidence', 0))) - cur.close() - qwen_added += 1 - conn.commit() + qwen_added = save_qwen_fitment(conn, item_id, fitment) except Exception as qwen_err: print(f"[qwen_fitment] Error for item {item_id}: {qwen_err}") @@ -1385,22 +1375,10 @@ def auto_match_item_vehicles(item_id): if compat_source == 'qwen': try: from services.qwen_fitment import get_vehicle_fitment + from services.inventory_vehicle_compat import save_qwen_fitment fitment = get_vehicle_fitment(part_number, name, brand) - # Insert results - inserted = 0 - cur2 = conn.cursor() - for v in fitment.get('vehicles', []): - if v.get('mye_id'): - cur2.execute(""" - INSERT INTO inventory_vehicle_compat - (inventory_id, model_year_engine_id, source, confidence, created_at) - VALUES (%s, %s, %s, %s, NOW()) - ON CONFLICT (inventory_id, model_year_engine_id) DO NOTHING - """, (item_id, v['mye_id'], 'qwen_ai', fitment.get('confidence', 0))) - if cur2.rowcount > 0: - inserted += 1 - conn.commit() - cur2.close() + inserted = save_qwen_fitment(conn, item_id, fitment) + conn.close() return jsonify({ 'matched': inserted > 0, 'matches': [], diff --git a/pos/services/inventory_vehicle_compat.py b/pos/services/inventory_vehicle_compat.py index ae87da8..720c5b8 100644 --- a/pos/services/inventory_vehicle_compat.py +++ b/pos/services/inventory_vehicle_compat.py @@ -369,3 +369,37 @@ def batch_add_compatibilities(tenant_conn, inventory_id, mye_ids, source='manual tenant_conn.commit() cur.close() return inserted + + +def save_qwen_fitment(tenant_conn, inventory_id, fitment_result): + """Save QWEN fitment results into inventory_vehicle_compat. + + Args: + tenant_conn: Connection to tenant DB. + inventory_id: The inventory item ID. + fitment_result: Dict from get_vehicle_fitment() with 'vehicles' list. + + Returns: + int: Number of compatibilities inserted. + """ + vehicles = fitment_result.get('vehicles', []) + if not vehicles: + return 0 + + inserted = 0 + cur = tenant_conn.cursor() + for v in vehicles: + mye_id = v.get('mye_id') + if not mye_id: + continue + cur.execute(""" + INSERT INTO inventory_vehicle_compat + (inventory_id, model_year_engine_id, source, confidence, created_at) + VALUES (%s, %s, 'qwen_ai', %s, NOW()) + ON CONFLICT (inventory_id, model_year_engine_id) DO NOTHING + """, (inventory_id, mye_id, fitment_result.get('confidence', 0))) + if cur.rowcount > 0: + inserted += 1 + tenant_conn.commit() + cur.close() + return inserted