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