File size: 6,768 Bytes
4fa4ebe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/usr/bin/env python3
import requests
import xml.etree.ElementTree as ET

def get_warehouse_stock(product_name):
    """B2B API'den mağaza stok bilgilerini çek - İyileştirilmiş versiyon"""
    try:
        import re
        warehouse_url = 'https://video.trek-turkey.com/bizimhesap-warehouse-xml.php'
        response = requests.get(warehouse_url, verify=False, timeout=15)
        
        if response.status_code != 200:
            return None
            
        root = ET.fromstring(response.content)
        
        # Turkish character normalization function
        turkish_map = {'ı': 'i', 'ğ': 'g', 'ü': 'u', 'ş': 's', 'ö': 'o', 'ç': 'c', 'İ': 'i', 'I': 'i'}
        
        def normalize_turkish(text):
            import unicodedata
            text = unicodedata.normalize('NFD', text)
            text = ''.join(char for char in text if unicodedata.category(char) != 'Mn')
            for tr_char, en_char in turkish_map.items():
                text = text.replace(tr_char, en_char)
            return text
        
        # Normalize search product name
        search_name = normalize_turkish(product_name.lower().strip())
        search_name = search_name.replace('(2026)', '').replace('(2025)', '').replace(' gen 3', '').replace(' gen', '').strip()
        search_words = search_name.split()
        
        print(f"DEBUG: Aranan ürün: '{product_name}' -> normalize: '{search_name}' -> kelimeler: {search_words}")
        
        best_matches = []
        exact_matches = []
        
        # İlk geçiş: Tam eşleşmeleri bul
        for product in root.findall('Product'):
            product_name_elem = product.find('ProductName')
            if product_name_elem is not None and product_name_elem.text:
                xml_product_name = product_name_elem.text.strip()
                normalized_xml = normalize_turkish(xml_product_name.lower())
                normalized_xml = normalized_xml.replace('(2026)', '').replace('(2025)', '').replace(' gen 3', '').replace(' gen', '').strip()
                xml_words = normalized_xml.split()
                
                # Tam eşleşme kontrolü - ilk iki kelime tam aynı olmalı
                if len(search_words) >= 2 and len(xml_words) >= 2:
                    search_key = f"{search_words[0]} {search_words[1]}"
                    xml_key = f"{xml_words[0]} {xml_words[1]}"
                    
                    if search_key == xml_key:
                        exact_matches.append((product, xml_product_name, normalized_xml))
                        print(f"DEBUG: TAM EŞLEŞME bulundu: '{xml_product_name}'")
        
        # Eğer tam eşleşme varsa, sadece onları kullan
        candidates = exact_matches if exact_matches else []
        
        # Eğer tam eşleşme yoksa, fuzzy matching yap
        if not candidates:
            print("DEBUG: Tam eşleşme yok, fuzzy matching yapılıyor...")
            for product in root.findall('Product'):
                product_name_elem = product.find('ProductName')
                if product_name_elem is not None and product_name_elem.text:
                    xml_product_name = product_name_elem.text.strip()
                    normalized_xml = normalize_turkish(xml_product_name.lower())
                    normalized_xml = normalized_xml.replace('(2026)', '').replace('(2025)', '').replace(' gen 3', '').replace(' gen', '').strip()
                    xml_words = normalized_xml.split()
                    
                    # Ortak kelime sayısını hesapla
                    common_words = set(search_words) & set(xml_words)
                    
                    # En az 2 ortak kelime olmalı VE ilk kelime aynı olmalı (marka kontrolü)
                    if (len(common_words) >= 2 and 
                        len(search_words) > 0 and len(xml_words) > 0 and 
                        search_words[0] == xml_words[0]):
                        best_matches.append((product, xml_product_name, normalized_xml, len(common_words)))
                        print(f"DEBUG: FUZZY EŞLEŞME: '{xml_product_name}' (ortak: {len(common_words)})")
            
            # En çok ortak kelimeye sahip olanları seç
            if best_matches:
                max_common = max(match[3] for match in best_matches)
                candidates = [(match[0], match[1], match[2]) for match in best_matches if match[3] == max_common]
        
        print(f"DEBUG: Toplam {len(candidates)} aday ürün bulundu")
        
        # Stok bilgilerini topla ve tekrarları önle
        warehouse_stock_map = {}  # warehouse_name -> total_stock
        
        for product, xml_name, _ in candidates:
            warehouses = product.find('Warehouses')
            if warehouses is not None:
                for warehouse in warehouses.findall('Warehouse'):
                    name_elem = warehouse.find('Name')
                    stock_elem = warehouse.find('Stock')
                    
                    if name_elem is not None and stock_elem is not None:
                        warehouse_name = name_elem.text if name_elem.text else "Bilinmeyen"
                        try:
                            stock_count = int(stock_elem.text) if stock_elem.text else 0
                            if stock_count > 0:
                                # Aynı mağaza için stokları topla
                                if warehouse_name in warehouse_stock_map:
                                    warehouse_stock_map[warehouse_name] += stock_count
                                else:
                                    warehouse_stock_map[warehouse_name] = stock_count
                                print(f"DEBUG: STOK BULUNDU - {warehouse_name}: {stock_count} adet ({xml_name})")
                        except (ValueError, TypeError):
                            pass
        
        if warehouse_stock_map:
            # Mağaza stoklarını liste halinde döndür
            all_warehouse_info = []
            for warehouse_name, total_stock in warehouse_stock_map.items():
                all_warehouse_info.append(f"{warehouse_name}: {total_stock} adet")
            return all_warehouse_info
        else:
            print("DEBUG: Hiçbir mağazada stok bulunamadı")
            return ["Hiçbir mağazada stokta bulunmuyor"]
        
    except Exception as e:
        print(f"Mağaza stok bilgisi çekme hatası: {e}")
        return None

if __name__ == "__main__":
    # Test the function with different inputs
    test_cases = [
        "MARLIN 6 (2026)",
        "Marlin 6"
    ]
    
    for test_case in test_cases:
        print(f"=== Testing: {test_case} ===")
        result = get_warehouse_stock(test_case)
        print(f"Result: {result}")
        print()