Spaces:
Running
Running
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
|
3 |
+
import gradio as gr
|
4 |
+
from datetime import datetime
|
5 |
+
|
6 |
+
# Ürün fiyatları ve stok durumu
|
7 |
+
urun_bilgileri = {
|
8 |
+
"Pantolon": {"fiyat": 1350, "stok": 20, "kategori": "Giyim"},
|
9 |
+
"Gömlek": {"fiyat": 850, "stok": 30, "kategori": "Giyim"},
|
10 |
+
"Ayakkabı": {"fiyat": 1500, "stok": 15, "kategori": "Ayakkabı"},
|
11 |
+
"Tişört": {"fiyat": 250, "stok": 50, "kategori": "Giyim"},
|
12 |
+
"Çorap": {"fiyat": 150, "stok": 100, "kategori": "Aksesuar"},
|
13 |
+
"Mont": {"fiyat": 850, "stok": 10, "kategori": "Dış Giyim"},
|
14 |
+
"Şapka": {"fiyat": 200, "stok": 25, "kategori": "Aksesuar"},
|
15 |
+
"Atkı": {"fiyat": 120, "stok": 40, "kategori": "Aksesuar"},
|
16 |
+
"Eldiven": {"fiyat": 100, "stok": 35, "kategori": "Aksesuar"},
|
17 |
+
"Forma": {"fiyat": 500, "stok": 45, "kategori": "Spor Giyim"},
|
18 |
+
"Kazak": {"fiyat": 400, "stok": 30, "kategori": "Giyim"},
|
19 |
+
"Ceket": {"fiyat": 1500, "stok": 20, "kategori": "Dış Giyim"}
|
20 |
+
}
|
21 |
+
|
22 |
+
def sepet_ozeti_olustur(sepet):
|
23 |
+
if not sepet:
|
24 |
+
return "Sepetiniz boş"
|
25 |
+
|
26 |
+
kategori_toplam = {}
|
27 |
+
urun_sayilari = {}
|
28 |
+
|
29 |
+
# Ürün sayılarını hesapla
|
30 |
+
for urun in sepet:
|
31 |
+
if urun not in urun_sayilari:
|
32 |
+
urun_sayilari[urun] = 0
|
33 |
+
urun_sayilari[urun] += 1
|
34 |
+
|
35 |
+
kategori = urun_bilgileri[urun]["kategori"]
|
36 |
+
if kategori not in kategori_toplam:
|
37 |
+
kategori_toplam[kategori] = []
|
38 |
+
if urun not in kategori_toplam[kategori]:
|
39 |
+
kategori_toplam[kategori].append(urun)
|
40 |
+
|
41 |
+
ozet = []
|
42 |
+
for kategori, urunler in kategori_toplam.items():
|
43 |
+
ozet.append(f"\n🏷️ {kategori}:")
|
44 |
+
for urun in urunler:
|
45 |
+
fiyat = urun_bilgileri[urun]["fiyat"]
|
46 |
+
kalan_stok = urun_bilgileri[urun]["stok"]
|
47 |
+
adet = urun_sayilari[urun]
|
48 |
+
ozet.append(f" • {urun} ({fiyat} TL) - {adet} adet - Stokta: {kalan_stok} adet")
|
49 |
+
|
50 |
+
return "\n".join(ozet)
|
51 |
+
|
52 |
+
def siparis_hesapla(sepet, urun_adi, ekle, mesaj_gecmisi):
|
53 |
+
alinan_urunler = sepet.copy()
|
54 |
+
zaman = datetime.now().strftime("%H:%M:%S")
|
55 |
+
uyari = None
|
56 |
+
|
57 |
+
if ekle:
|
58 |
+
if urun_bilgileri[urun_adi]["stok"] > 0:
|
59 |
+
alinan_urunler.append(urun_adi)
|
60 |
+
urun_bilgileri[urun_adi]["stok"] -= 1
|
61 |
+
mesaj = f"{zaman} - {urun_adi} sepete eklendi"
|
62 |
+
else:
|
63 |
+
mesaj = f"{zaman} - {urun_adi} stokta kalmadı!"
|
64 |
+
uyari = f"⚠️ {urun_adi} stokta kalmadı!"
|
65 |
+
else:
|
66 |
+
if urun_adi in alinan_urunler:
|
67 |
+
alinan_urunler.remove(urun_adi)
|
68 |
+
urun_bilgileri[urun_adi]["stok"] += 1
|
69 |
+
mesaj = f"{zaman} - {urun_adi} sepetten çıkarıldı"
|
70 |
+
else:
|
71 |
+
mesaj = f"{zaman} - {urun_adi} sepette bulunmuyor!"
|
72 |
+
uyari = f"⚠️ {urun_adi} sepetinizde bulunmuyor!"
|
73 |
+
|
74 |
+
# Toplam fiyat hesaplama
|
75 |
+
toplam_fiyat = sum(urun_bilgileri[urun]["fiyat"] for urun in alinan_urunler)
|
76 |
+
|
77 |
+
# Sepet özeti oluşturma
|
78 |
+
sepet_ozeti = sepet_ozeti_olustur(alinan_urunler)
|
79 |
+
|
80 |
+
# İşlem geçmişi güncelleme
|
81 |
+
mesaj_gecmisi = mesaj_gecmisi + "\n" + mesaj if mesaj_gecmisi else mesaj
|
82 |
+
|
83 |
+
sonuc_metni = (
|
84 |
+
f"🛍️ SEPET DETAYI:\n{sepet_ozeti}\n\n"
|
85 |
+
f"💰 Toplam Tutar: {toplam_fiyat} TL"
|
86 |
+
)
|
87 |
+
|
88 |
+
if uyari:
|
89 |
+
sonuc_metni = uyari + "\n\n" + sonuc_metni
|
90 |
+
|
91 |
+
return alinan_urunler, sonuc_metni, mesaj_gecmisi
|
92 |
+
|
93 |
+
def islem_gecmisi_goster(mesaj_gecmisi):
|
94 |
+
if not mesaj_gecmisi:
|
95 |
+
return "Henüz işlem yapılmadı."
|
96 |
+
return "📝 İŞLEM GEÇMİŞİ:\n" + mesaj_gecmisi
|
97 |
+
|
98 |
+
# Gradio arayüzü
|
99 |
+
with gr.Blocks(theme=gr.themes.Soft()) as arayuz:
|
100 |
+
gr.Markdown("# 🛍️ Alışveriş Sepeti")
|
101 |
+
|
102 |
+
with gr.Row():
|
103 |
+
with gr.Column(scale=2):
|
104 |
+
sepet = gr.State(value=[])
|
105 |
+
mesaj_gecmisi = gr.State(value="")
|
106 |
+
sonuc = gr.Textbox(label="Sepet Detayları", interactive=False, lines=10)
|
107 |
+
|
108 |
+
with gr.Accordion("📝 İşlem Geçmişi", open=False):
|
109 |
+
gecmis = gr.Textbox(label="", interactive=False, lines=5)
|
110 |
+
gr.Button("Geçmişi Göster").click(
|
111 |
+
fn=islem_gecmisi_goster,
|
112 |
+
inputs=[mesaj_gecmisi],
|
113 |
+
outputs=[gecmis]
|
114 |
+
)
|
115 |
+
|
116 |
+
with gr.Column(scale=3):
|
117 |
+
gr.Markdown("### 📦 Ürünler")
|
118 |
+
with gr.Row():
|
119 |
+
for urun_adi, bilgi in urun_bilgileri.items():
|
120 |
+
with gr.Column():
|
121 |
+
fiyat = bilgi["fiyat"]
|
122 |
+
stok = bilgi["stok"]
|
123 |
+
|
124 |
+
gr.Markdown(f"""
|
125 |
+
**{urun_adi}**
|
126 |
+
{fiyat} TL
|
127 |
+
Stok: {stok}
|
128 |
+
""")
|
129 |
+
|
130 |
+
with gr.Row():
|
131 |
+
ekle_btn = gr.Button(
|
132 |
+
"+",
|
133 |
+
size="sm",
|
134 |
+
scale=1
|
135 |
+
).click(
|
136 |
+
fn=lambda s, m, u=urun_adi, e=True: siparis_hesapla(s, u, e, m),
|
137 |
+
inputs=[sepet, mesaj_gecmisi],
|
138 |
+
outputs=[sepet, sonuc, mesaj_gecmisi]
|
139 |
+
)
|
140 |
+
cikar_btn = gr.Button(
|
141 |
+
"-",
|
142 |
+
size="sm",
|
143 |
+
scale=1
|
144 |
+
).click(
|
145 |
+
fn=lambda s, m, u=urun_adi, e=False: siparis_hesapla(s, u, e, m),
|
146 |
+
inputs=[sepet, mesaj_gecmisi],
|
147 |
+
outputs=[sepet, sonuc, mesaj_gecmisi]
|
148 |
+
)
|
149 |
+
|
150 |
+
arayuz.launch()
|