Spaces:
Running
Running
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) |