SamiKoen Claude commited on
Commit
8b524c1
·
1 Parent(s): 7f4bc6f

Add smart model fallback for out-of-stock products

Browse files

- When searching for a generic product (e.g., "marlin 4"), show newer models with stock
- Prioritize models by year/generation (2026/GEN 3 > 2025/GEN 2 > 2024/GEN)
- If older model is out of stock, automatically suggest the newer available model
- Example: "marlin 4" now shows MARLIN 4 GEN 3 (2026) when original is out of stock

This ensures customers always see available products instead of "out of stock" messages

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>

Files changed (1) hide show
  1. combined_api_search.py +51 -0
combined_api_search.py CHANGED
@@ -376,6 +376,57 @@ def get_warehouse_stock_combined_api(query):
376
  if not results:
377
  return ["Ürün bulunamadı"]
378
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
379
  # Önce ana ürünleri filtrele
380
  main_products = []
381
  variant_products = []
 
376
  if not results:
377
  return ["Ürün bulunamadı"]
378
 
379
+ # Akıllı model geçişi - eski model stokta yoksa yeni modeli öner
380
+ # Örn: "marlin 4" arandığında MARLIN 4 yoksa MARLIN 4 GEN 3'ü göster
381
+ query_normalized = normalize_turkish(query.upper())
382
+
383
+ # Genel ürün adı aranıyorsa (model numarası yok)
384
+ if not any(year in query_normalized for year in ['GEN', '2024', '2025', '2026', '(20']):
385
+ # Stokta olan modelleri kontrol et
386
+ stocked_alternatives = []
387
+
388
+ for product in results:
389
+ name_normalized = normalize_turkish(product['name'].upper())
390
+ # Ana ürün adıyla eşleşiyor mu?
391
+ if query_normalized in name_normalized:
392
+ # Ana ürün mü?
393
+ if is_main_product(product['name']):
394
+ # Stokta mı veya varyantları var mı?
395
+ if product['stock_found'] and product['total_stock'] > 0:
396
+ stocked_alternatives.append(product)
397
+ else:
398
+ # Ana ürün stokta yok, varyantları kontrol et
399
+ has_stocked_variants = False
400
+ for variant in results:
401
+ if (product['name'].upper() in variant['name'].upper() and
402
+ variant['stock_found'] and
403
+ variant['total_stock'] > 0 and
404
+ not is_main_product(variant['name'])):
405
+ has_stocked_variants = True
406
+ break
407
+ if has_stocked_variants:
408
+ stocked_alternatives.append(product)
409
+
410
+ # Eğer alternatifler varsa, en yenisini seç (genelde GEN 3, 2026 vs.)
411
+ if stocked_alternatives:
412
+ # Model yılı/versiyonu olanları öncelikle
413
+ def get_model_priority(product):
414
+ name = product['name'].upper()
415
+ if '2026' in name or 'GEN 3' in name:
416
+ return 3
417
+ elif '2025' in name or 'GEN 2' in name:
418
+ return 2
419
+ elif '2024' in name or 'GEN' in name:
420
+ return 1
421
+ else:
422
+ return 0
423
+
424
+ stocked_alternatives.sort(key=lambda x: get_model_priority(x), reverse=True)
425
+
426
+ # En yeni modeli öncelikle kullan
427
+ if stocked_alternatives:
428
+ results = [stocked_alternatives[0]] + [r for r in results if r != stocked_alternatives[0]]
429
+
430
  # Önce ana ürünleri filtrele
431
  main_products = []
432
  variant_products = []