Tüm varyantları göster ve Alsancak filtrelemesini düzelt
Browse files- smart_warehouse.py +48 -55
smart_warehouse.py
CHANGED
@@ -10,7 +10,7 @@ def get_warehouse_stock_smart(user_message, previous_result=None):
|
|
10 |
|
11 |
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
12 |
|
13 |
-
# Check if user is asking about specific warehouse
|
14 |
warehouse_keywords = {
|
15 |
'caddebostan': 'Caddebostan',
|
16 |
'ortaköy': 'Ortaköy',
|
@@ -28,16 +28,6 @@ def get_warehouse_stock_smart(user_message, previous_result=None):
|
|
28 |
asked_warehouse = warehouse
|
29 |
break
|
30 |
|
31 |
-
# If asking about warehouse and we have previous result, filter it
|
32 |
-
if asked_warehouse and previous_result and isinstance(previous_result, list):
|
33 |
-
filtered = []
|
34 |
-
for line in previous_result:
|
35 |
-
if asked_warehouse in line or "Bulunan" in line or "varyant" in line:
|
36 |
-
filtered.append(line)
|
37 |
-
|
38 |
-
if len(filtered) > 2: # Has actual warehouse data
|
39 |
-
return filtered
|
40 |
-
|
41 |
# Get XML data with retry
|
42 |
xml_text = None
|
43 |
for attempt in range(3): # Try 3 times
|
@@ -146,9 +136,9 @@ Examples:
|
|
146 |
# Parse multiple indices
|
147 |
indices = [int(idx.strip()) for idx in indices_str.split(',')]
|
148 |
|
149 |
-
#
|
150 |
-
|
151 |
-
|
152 |
|
153 |
for idx in indices:
|
154 |
if 0 <= idx < len(all_products):
|
@@ -162,6 +152,13 @@ Examples:
|
|
162 |
product_name = name_match.group(1)
|
163 |
variant = variant_match.group(1) if variant_match else ""
|
164 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
# Get warehouse stock
|
166 |
warehouse_regex = r'<Warehouse>.*?<Name><!\[CDATA\[(.*?)\]\]></Name>.*?<Stock>(.*?)</Stock>.*?</Warehouse>'
|
167 |
warehouses = re.findall(warehouse_regex, product_block, re.DOTALL)
|
@@ -170,61 +167,57 @@ Examples:
|
|
170 |
try:
|
171 |
stock = int(wh_stock.strip())
|
172 |
if stock > 0:
|
173 |
-
# Format warehouse name
|
174 |
display_name = format_warehouse_name(wh_name)
|
|
|
|
|
|
|
|
|
175 |
|
176 |
-
#
|
177 |
-
if
|
178 |
-
|
179 |
-
|
180 |
-
'name': product_name,
|
181 |
-
'variant': variant,
|
182 |
-
'warehouse': display_name,
|
183 |
-
'stock': stock
|
184 |
-
})
|
185 |
-
else:
|
186 |
-
if display_name not in all_warehouses:
|
187 |
-
all_warehouses[display_name] = []
|
188 |
-
all_warehouses[display_name].append({
|
189 |
-
'variant': variant,
|
190 |
-
'stock': stock
|
191 |
-
})
|
192 |
except:
|
193 |
pass
|
|
|
|
|
|
|
194 |
|
195 |
# Format result
|
196 |
result = []
|
197 |
|
198 |
if asked_warehouse:
|
199 |
-
#
|
200 |
-
|
201 |
-
|
202 |
-
for
|
203 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
204 |
else:
|
205 |
-
result.append(f"{asked_warehouse} mağazasında bu ürün mevcut değil")
|
206 |
else:
|
207 |
-
# Show all warehouses
|
208 |
-
if
|
209 |
-
result.append(f"Bulunan {
|
210 |
-
|
211 |
-
# Show a sample of variants
|
212 |
-
shown = 0
|
213 |
-
for warehouse, variants in all_warehouses.items():
|
214 |
-
for v in variants[:2]: # Show max 2 per warehouse
|
215 |
-
if shown < 5:
|
216 |
-
variant_text = f" ({v['variant']})" if v['variant'] else ""
|
217 |
-
result.append(f"• {product_name}{variant_text}")
|
218 |
-
shown += 1
|
219 |
|
220 |
-
|
221 |
-
|
|
|
|
|
222 |
|
223 |
result.append("")
|
224 |
-
result.append("
|
225 |
-
for warehouse,
|
226 |
-
|
227 |
-
result.append(f"{warehouse}: {total} adet")
|
228 |
else:
|
229 |
result.append("Hiçbir mağazada stok yok")
|
230 |
|
|
|
10 |
|
11 |
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
12 |
|
13 |
+
# Check if user is asking about specific warehouse
|
14 |
warehouse_keywords = {
|
15 |
'caddebostan': 'Caddebostan',
|
16 |
'ortaköy': 'Ortaköy',
|
|
|
28 |
asked_warehouse = warehouse
|
29 |
break
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
# Get XML data with retry
|
32 |
xml_text = None
|
33 |
for attempt in range(3): # Try 3 times
|
|
|
136 |
# Parse multiple indices
|
137 |
indices = [int(idx.strip()) for idx in indices_str.split(',')]
|
138 |
|
139 |
+
# Collect all matching products
|
140 |
+
all_variants = []
|
141 |
+
warehouse_stock = {}
|
142 |
|
143 |
for idx in indices:
|
144 |
if 0 <= idx < len(all_products):
|
|
|
152 |
product_name = name_match.group(1)
|
153 |
variant = variant_match.group(1) if variant_match else ""
|
154 |
|
155 |
+
# Track this variant
|
156 |
+
variant_info = {
|
157 |
+
'name': product_name,
|
158 |
+
'variant': variant,
|
159 |
+
'warehouses': []
|
160 |
+
}
|
161 |
+
|
162 |
# Get warehouse stock
|
163 |
warehouse_regex = r'<Warehouse>.*?<Name><!\[CDATA\[(.*?)\]\]></Name>.*?<Stock>(.*?)</Stock>.*?</Warehouse>'
|
164 |
warehouses = re.findall(warehouse_regex, product_block, re.DOTALL)
|
|
|
167 |
try:
|
168 |
stock = int(wh_stock.strip())
|
169 |
if stock > 0:
|
|
|
170 |
display_name = format_warehouse_name(wh_name)
|
171 |
+
variant_info['warehouses'].append({
|
172 |
+
'name': display_name,
|
173 |
+
'stock': stock
|
174 |
+
})
|
175 |
|
176 |
+
# Track total stock per warehouse
|
177 |
+
if display_name not in warehouse_stock:
|
178 |
+
warehouse_stock[display_name] = 0
|
179 |
+
warehouse_stock[display_name] += stock
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
except:
|
181 |
pass
|
182 |
+
|
183 |
+
if variant_info['warehouses']: # Only add if has stock
|
184 |
+
all_variants.append(variant_info)
|
185 |
|
186 |
# Format result
|
187 |
result = []
|
188 |
|
189 |
if asked_warehouse:
|
190 |
+
# Filter for specific warehouse
|
191 |
+
warehouse_variants = []
|
192 |
+
for variant in all_variants:
|
193 |
+
for wh in variant['warehouses']:
|
194 |
+
if asked_warehouse in wh['name']:
|
195 |
+
warehouse_variants.append({
|
196 |
+
'name': variant['name'],
|
197 |
+
'variant': variant['variant'],
|
198 |
+
'stock': wh['stock']
|
199 |
+
})
|
200 |
+
|
201 |
+
if warehouse_variants:
|
202 |
+
result.append(f"{format_warehouse_name(asked_warehouse)} mağazasında mevcut:")
|
203 |
+
for v in warehouse_variants:
|
204 |
+
result.append(f"• {v['name']} ({v['variant']}): {v['stock']} adet")
|
205 |
else:
|
206 |
+
result.append(f"{format_warehouse_name(asked_warehouse)} mağazasında bu ürün mevcut değil")
|
207 |
else:
|
208 |
+
# Show all variants and warehouses
|
209 |
+
if all_variants:
|
210 |
+
result.append(f"Bulunan {len(all_variants)} varyant:")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
211 |
|
212 |
+
# Show ALL variants (not just first 5)
|
213 |
+
for variant in all_variants:
|
214 |
+
variant_text = f" ({variant['variant']})" if variant['variant'] else ""
|
215 |
+
result.append(f"• {variant['name']}{variant_text}")
|
216 |
|
217 |
result.append("")
|
218 |
+
result.append("Mağaza stok durumu:")
|
219 |
+
for warehouse, total_stock in sorted(warehouse_stock.items()):
|
220 |
+
result.append(f"{warehouse}: {total_stock} adet")
|
|
|
221 |
else:
|
222 |
result.append("Hiçbir mağazada stok yok")
|
223 |
|