feat(catalog): supplier catalog cleanup, fuzzy matching, and navigation fixes
- Cleaned 137+ fake engine-displacement models from supplier imports (v3/v4 scripts: Chevrolet, Ford, Chrysler, Dodge, Jeep, Nissan, etc.) - Removed 1,251+ corrupted models (INT. prefixes, year-suffix, torque specs, empty names, trailing-year variants) - Migrated supplier tables to master DB (supplier_catalog, supplier_catalog_compat, supplier_catalog_interchange) - Fixed _get_mye_ids_with_parts() to query supplier_catalog_compat from master DB so supplier-only vehicles appear for all tenants - Added fuzzy model matcher with parenthesis stripping, noise suffix removal, compact matching, prefix/substring fallback, model aliases, and ±3 year proximity - Matched compat rows: KEEP GREEN +14,152, KNADIAN +3,021, VAZLO +127,500, LUK +477, RAYBESTOS +1,743 - Added KNADIAN catalog importer with year-range expansion and future-year filtering - Added VAZLO catalog importer with position parsing and SKU-in-model cleanup - Added Keep Green, LUK, Yokomitsu, Raybestos catalog importers - Cache clearing after cleanups (_classify_cache_*, nexus:mye_ids:*, nexus:brand_mye_counts:*) Final match rates: - KEEP GREEN: 90.3% - VAZLO: 93.6% - YOKOMITSU: 100.0% - KNADIAN: 57.4% - LUK: 51.0% - RAYBESTOS: 55.9%
This commit is contained in:
@@ -447,6 +447,35 @@ def process_sale(conn, sale_data):
|
||||
except Exception:
|
||||
pass # Learning errors never block sales
|
||||
|
||||
# Dropshipping webhook hook (non-blocking)
|
||||
try:
|
||||
from services import dropshipping_service as ds_svc
|
||||
from services.webhook_service import dispatch_webhooks_bulk
|
||||
webhook_urls = ds_svc.get_webhook_targets(conn, 'sale_made')
|
||||
if webhook_urls:
|
||||
payload_items = []
|
||||
for item in enriched_items:
|
||||
remaining = item['stock_before'] - item['quantity']
|
||||
payload_items.append({
|
||||
'sku': item['part_number'],
|
||||
'name': item['name'],
|
||||
'quantity_sold': item['quantity'],
|
||||
'stock_remaining': remaining,
|
||||
'unit_price': item['unit_price'],
|
||||
})
|
||||
threading.Thread(
|
||||
target=dispatch_webhooks_bulk,
|
||||
args=(webhook_urls, 'sale_made', {
|
||||
'sale_id': sale_id,
|
||||
'items': payload_items,
|
||||
'total': totals['total'],
|
||||
'created_at': str(created_at),
|
||||
}),
|
||||
daemon=True
|
||||
).start()
|
||||
except Exception:
|
||||
pass # Webhook errors never block sales
|
||||
|
||||
return {
|
||||
'id': sale_id,
|
||||
'branch_id': branch_id,
|
||||
|
||||
Reference in New Issue
Block a user