SamiKoen Claude commited on
Commit
2a09017
·
1 Parent(s): c8f893c

Genel stok arama algoritması - spesifik ürün adı yok

Browse files

- Tüm ürünleri tara, eşleşeni bul
- Dinamik pattern matching
- Her ürün için çalışır, sadece Madone değil

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

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

Files changed (1) hide show
  1. app.py +65 -49
app.py CHANGED
@@ -29,9 +29,9 @@ from enhanced_features import (
29
  )
30
  from image_renderer import extract_product_info_for_gallery, format_message_with_images
31
 
32
- # ULTRA FAST warehouse stock finder - regex based
33
  def get_warehouse_stock(product_name):
34
- """Find warehouse stock instantly using regex - no XML parsing"""
35
  try:
36
  import re
37
  import requests
@@ -58,59 +58,75 @@ def get_warehouse_stock(product_name):
58
  size = next((w for w in words if w in sizes), None)
59
  product_words = [w for w in words if w not in sizes and w not in ['beden', 'size', 'boy']]
60
 
61
- # Build exact search pattern
62
- if 'madone' in product_words and 'sl' in product_words and '6' in product_words:
63
- pattern = 'MADONE SL 6 GEN 8'
64
- elif 'madone' in product_words and 'slr' in product_words:
65
- pattern = 'MADONE SLR 7 GEN 8'
66
- else:
67
- pattern = ' '.join(product_words).upper()
68
 
69
- print(f"DEBUG - Fast search: {pattern}, Size: {size}")
 
70
 
71
- # Search with size filter
72
- if size:
73
- size_pattern = f'{size.upper()}-'
 
 
 
 
 
74
 
75
- # Find product with specific size variant
76
- product_regex = f'<Product>.*?<ProductName><!\\[CDATA\\[{re.escape(pattern)}\\]\\]></ProductName>.*?<ProductVariant><!\\[CDATA\\[{size_pattern}[^\\]]*\\]\\]></ProductVariant>.*?</Product>'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
 
78
- match = re.search(product_regex, xml_text, re.DOTALL)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
 
80
- if match:
81
- product_block = match.group(0)
82
-
83
- # Extract warehouses
84
- warehouse_info = []
85
- warehouse_regex = r'<Warehouse>.*?<Name><!\[CDATA\[(.*?)\]\]></Name>.*?<Stock>(.*?)</Stock>.*?</Warehouse>'
86
- warehouses = re.findall(warehouse_regex, product_block, re.DOTALL)
87
-
88
- for wh_name, wh_stock in warehouses:
89
- try:
90
- stock = int(wh_stock.strip())
91
- if stock > 0:
92
- # Format name
93
- if "CADDEBOSTAN" in wh_name:
94
- display = "Caddebostan mağazası"
95
- elif "ORTAKÖY" in wh_name:
96
- display = "Ortaköy mağazası"
97
- elif "ALSANCAK" in wh_name:
98
- display = "İzmir Alsancak mağazası"
99
- elif "BAHCEKOY" in wh_name or "BAHÇEKÖY" in wh_name:
100
- display = "Bahçeköy mağazası"
101
- else:
102
- display = wh_name
103
-
104
- warehouse_info.append(f"{display}: Mevcut")
105
- except:
106
- pass
107
-
108
- return warehouse_info if warehouse_info else ["Hiçbir mağazada mevcut değil"]
109
- else:
110
- return ["Hiçbir mağazada mevcut değil"]
111
  else:
112
- # No size - return general availability
113
- return None # Let the bot check normally
114
 
115
  except Exception as e:
116
  print(f"Warehouse error: {e}")
 
29
  )
30
  from image_renderer import extract_product_info_for_gallery, format_message_with_images
31
 
32
+ # SMART warehouse stock finder - general algorithm
33
  def get_warehouse_stock(product_name):
34
+ """Smart warehouse stock finder with general algorithm"""
35
  try:
36
  import re
37
  import requests
 
58
  size = next((w for w in words if w in sizes), None)
59
  product_words = [w for w in words if w not in sizes and w not in ['beden', 'size', 'boy']]
60
 
61
+ print(f"DEBUG - Searching: {' '.join(product_words)}, Size: {size}")
62
+
63
+ # Find all Product blocks in XML
64
+ product_pattern = r'<Product>(.*?)</Product>'
65
+ all_products = re.findall(product_pattern, xml_text, re.DOTALL)
66
+
67
+ print(f"DEBUG - Total products in XML: {len(all_products)}")
68
 
69
+ # Search through products
70
+ best_match = None
71
 
72
+ for product_block in all_products:
73
+ # Extract product name
74
+ name_match = re.search(r'<ProductName><!\[CDATA\[(.*?)\]\]></ProductName>', product_block)
75
+ if not name_match:
76
+ continue
77
+
78
+ product_name_in_xml = name_match.group(1)
79
+ normalized_xml_name = normalize(product_name_in_xml)
80
 
81
+ # Check if all product words are in the name
82
+ if all(word in normalized_xml_name for word in product_words):
83
+ # Product name matches, now check variant if needed
84
+
85
+ if size:
86
+ # Check if variant matches the size
87
+ variant_match = re.search(r'<ProductVariant><!\[CDATA\[(.*?)\]\]></ProductVariant>', product_block)
88
+ if variant_match:
89
+ variant = variant_match.group(1)
90
+ # Check if variant starts with the size (e.g., "S-BEYAZ")
91
+ if variant.upper().startswith(f'{size.upper()}-'):
92
+ print(f"DEBUG - Found match: {product_name_in_xml} - {variant}")
93
+ best_match = product_block
94
+ break # Found exact match, stop searching
95
+ else:
96
+ # No size specified, take first match
97
+ best_match = product_block
98
+ break
99
+
100
+ if best_match:
101
+ # Extract warehouse info from the matched product
102
+ warehouse_info = []
103
+ warehouse_regex = r'<Warehouse>.*?<Name><!\[CDATA\[(.*?)\]\]></Name>.*?<Stock>(.*?)</Stock>.*?</Warehouse>'
104
+ warehouses = re.findall(warehouse_regex, best_match, re.DOTALL)
105
 
106
+ for wh_name, wh_stock in warehouses:
107
+ try:
108
+ stock = int(wh_stock.strip())
109
+ if stock > 0:
110
+ # Format store names
111
+ if "CADDEBOSTAN" in wh_name:
112
+ display = "Caddebostan mağazası"
113
+ elif "ORTAKÖY" in wh_name:
114
+ display = "Ortaköy mağazası"
115
+ elif "ALSANCAK" in wh_name:
116
+ display = "İzmir Alsancak mağazası"
117
+ elif "BAHCEKOY" in wh_name or "BAHÇEKÖY" in wh_name:
118
+ display = "Bahçeköy mağazası"
119
+ else:
120
+ display = wh_name
121
+
122
+ warehouse_info.append(f"{display}: Mevcut")
123
+ except:
124
+ pass
125
 
126
+ return warehouse_info if warehouse_info else ["Hiçbir mağazada mevcut değil"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  else:
128
+ print(f"DEBUG - No match found for {' '.join(product_words)}")
129
+ return ["Hiçbir mağazada mevcut değil"]
130
 
131
  except Exception as e:
132
  print(f"Warehouse error: {e}")