File size: 5,723 Bytes
6106f83
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c9c08a8
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150


import gradio as gr
from datetime import datetime

# Ürün fiyatları ve stok durumu
urun_bilgileri = {
    "Pantolon": {"fiyat": 1350, "stok": 20, "kategori": "Giyim"},
    "Gömlek": {"fiyat": 850, "stok": 30, "kategori": "Giyim"},
    "Ayakkabı": {"fiyat": 1500, "stok": 15, "kategori": "Ayakkabı"},
    "Tişört": {"fiyat": 250, "stok": 50, "kategori": "Giyim"},
    "Çorap": {"fiyat": 150, "stok": 100, "kategori": "Aksesuar"},
    "Mont": {"fiyat": 850, "stok": 10, "kategori": "Dış Giyim"},
    "Şapka": {"fiyat": 200, "stok": 25, "kategori": "Aksesuar"},
    "Atkı": {"fiyat": 120, "stok": 40, "kategori": "Aksesuar"},
    "Eldiven": {"fiyat": 100, "stok": 35, "kategori": "Aksesuar"},
    "Forma": {"fiyat": 500, "stok": 45, "kategori": "Spor Giyim"},
    "Kazak": {"fiyat": 400, "stok": 30, "kategori": "Giyim"},
    "Ceket": {"fiyat": 1500, "stok": 20, "kategori": "Dış Giyim"}
}

def sepet_ozeti_olustur(sepet):
    if not sepet:
        return "Sepetiniz boş"
    
    kategori_toplam = {}
    urun_sayilari = {}
    
    # Ürün sayılarını hesapla
    for urun in sepet:
        if urun not in urun_sayilari:
            urun_sayilari[urun] = 0
        urun_sayilari[urun] += 1
        
        kategori = urun_bilgileri[urun]["kategori"]
        if kategori not in kategori_toplam:
            kategori_toplam[kategori] = []
        if urun not in kategori_toplam[kategori]:
            kategori_toplam[kategori].append(urun)
    
    ozet = []
    for kategori, urunler in kategori_toplam.items():
        ozet.append(f"\n🏷️ {kategori}:")
        for urun in urunler:
            fiyat = urun_bilgileri[urun]["fiyat"]
            kalan_stok = urun_bilgileri[urun]["stok"]
            adet = urun_sayilari[urun]
            ozet.append(f"  • {urun} ({fiyat} TL) - {adet} adet - Stokta: {kalan_stok} adet")
    
    return "\n".join(ozet)

def siparis_hesapla(sepet, urun_adi, ekle, mesaj_gecmisi):
    alinan_urunler = sepet.copy()
    zaman = datetime.now().strftime("%H:%M:%S")
    uyari = None
    
    if ekle:
        if urun_bilgileri[urun_adi]["stok"] > 0:
            alinan_urunler.append(urun_adi)
            urun_bilgileri[urun_adi]["stok"] -= 1
            mesaj = f"{zaman} - {urun_adi} sepete eklendi"
        else:
            mesaj = f"{zaman} - {urun_adi} stokta kalmadı!"
            uyari = f"⚠️ {urun_adi} stokta kalmadı!"
    else:
        if urun_adi in alinan_urunler:
            alinan_urunler.remove(urun_adi)
            urun_bilgileri[urun_adi]["stok"] += 1
            mesaj = f"{zaman} - {urun_adi} sepetten çıkarıldı"
        else:
            mesaj = f"{zaman} - {urun_adi} sepette bulunmuyor!"
            uyari = f"⚠️ {urun_adi} sepetinizde bulunmuyor!"

    # Toplam fiyat hesaplama
    toplam_fiyat = sum(urun_bilgileri[urun]["fiyat"] for urun in alinan_urunler)

    # Sepet özeti oluşturma
    sepet_ozeti = sepet_ozeti_olustur(alinan_urunler)
    
    # İşlem geçmişi güncelleme
    mesaj_gecmisi = mesaj_gecmisi + "\n" + mesaj if mesaj_gecmisi else mesaj

    sonuc_metni = (
        f"🛍️ SEPET DETAYI:\n{sepet_ozeti}\n\n"
        f"💰 Toplam Tutar: {toplam_fiyat} TL"
    )
    
    if uyari:
        sonuc_metni = uyari + "\n\n" + sonuc_metni

    return alinan_urunler, sonuc_metni, mesaj_gecmisi

def islem_gecmisi_goster(mesaj_gecmisi):
    if not mesaj_gecmisi:
        return "Henüz işlem yapılmadı."
    return "📝 İŞLEM GEÇMİŞİ:\n" + mesaj_gecmisi

# Gradio arayüzü
with gr.Blocks(theme=gr.themes.Soft()) as arayuz:
    gr.Markdown("# 🛍️ Alışveriş Sepeti")
    
    with gr.Row():
        with gr.Column(scale=2):
            sepet = gr.State(value=[])
            mesaj_gecmisi = gr.State(value="")
            sonuc = gr.Textbox(label="Sepet Detayları", interactive=False, lines=10)
            
            with gr.Accordion("📝 İşlem Geçmişi", open=False):
                gecmis = gr.Textbox(label="", interactive=False, lines=5)
                gr.Button("Geçmişi Göster").click(
                    fn=islem_gecmisi_goster,
                    inputs=[mesaj_gecmisi],
                    outputs=[gecmis]
                )

        with gr.Column(scale=3):
            gr.Markdown("### 📦 Ürünler")
            with gr.Row():
                for urun_adi, bilgi in urun_bilgileri.items():
                    with gr.Column():
                        fiyat = bilgi["fiyat"]
                        stok = bilgi["stok"]
                        
                        gr.Markdown(f"""
                        **{urun_adi}**  
                        {fiyat} TL
                        Stok: {stok}
                        """)
                            
                        with gr.Row():
                            ekle_btn = gr.Button(
                                "+", 
                                size="sm",
                                scale=1
                            ).click(
                                fn=lambda s, m, u=urun_adi, e=True: siparis_hesapla(s, u, e, m),
                                inputs=[sepet, mesaj_gecmisi],
                                outputs=[sepet, sonuc, mesaj_gecmisi]
                            )
                            cikar_btn = gr.Button(
                                "-",
                                size="sm",
                                scale=1
                            ).click(
                                fn=lambda s, m, u=urun_adi, e=False: siparis_hesapla(s, u, e, m),
                                inputs=[sepet, mesaj_gecmisi],
                                outputs=[sepet, sonuc, mesaj_gecmisi]
                            )

arayuz.launch(share=True)