Proje: Okul Platform · Hub: Okul Platform — Decisions
Saha checkout sepetinde yeni okul satırları artık “tahmini” değil
Karar
saha.checkout.basket (/teklif/sepet) ekranında listede yok / yeni okul checkbox’ı ile eklenen satırlar (is_new) artık lokal “tahmini” toplam olarak gösterilmez. Bu satırlar da saha.checkout.calculate endpoint’ine school_id: null, school_name: "..." payload’u ile gönderilir; özet API’nın döndüğü tek hesaba göre güncellenir.
Eşlik eden UI değişiklikleri:
- ”↳ Yeni okullar (tahmini, kampanyasız)” özet satırı kaldırıldı.
- Manuel okul adı input’unun altındaki “Bu satır tahmini fiyatla özete eklenir…” amber uyarısı kaldırıldı.
estimateNewSchoolsTotals()veapplySummary(data, newTotals)newTotalsparametresi tamamen kaldırıldı.collectPayload(forSubmit)→ parametresizcollectPayload(); aynı payload hem calculate hem submit için kullanılır.custom_school_nameinput’unda@input.debounce.300ms="calculate()"kaldırıldı. Okul ismi hesabı etkilemez (fiyatproduct_price_id’ye bağlı), her harfte API çağrısı yapılmamalı. Calculate yalnız fiyatı etkileyen alanlardan (şehir, kademe, ürün, adet, kampanya, indirim kodu, peşin ödeme, satır ekle/kaldır, is_new toggle) tetiklenir.
Ek olarak removeRow(idx) artık satırda doldurulmuş veri varsa native confirm() dialog gösterir (quantity=1 default değeri “boş” sayılır — prefilled school_id veya kullanıcı girişi olan herhangi bir alan tetikler).
Why
Kullanıcı geri bildirimi: saha rep yeni şube/okul eklerken fiyatın özet’te lokal hesaplanması, sonra teklif kaydedildiğinde API’dan farklı bir net tutar dönmesi karışıklık yaratıyordu. okul-api admin/checkouts/calculate zaten school_name’li satırı destekliyor — gereksiz iki kaynaklı (lokal tahmin + API hesabı) UI mantığı kaldırıldı. Tek doğruluk kaynağı API.
Confirm dialog ise yanlışlıkla satır kaldırma kazalarını engellemek için; özellikle Şehir/Kademe/Ürün üçlüsü doldurulmuş bir satırı kaldırmak rep için maliyetli (yeniden seçim).
How to apply
- Saha checkout UI’ında lokal fiyat tahmini yapma; her zaman API’dan al.
calculate()çağrıldığında en az bir bilinen okul (school_id) yoksa API’a gitme (controllerresolveCustomerId422 verir), bu durumda özet boş gösterilir. - Yeni satır tipi eklerken ya da fiyat değişen kampanya/indirim mantığı geliştirirken: API’nın
discount_detailsformatı tek belirleyici — Frontend’de paralel tahmin tablosu kurma. - Veri kaybı potansiyeli olan kaldırma işlemlerinde (sepet, form satırları): confirm dialog default; “boş” tanımı sayfaya özgü yazılır (saha sepette quantity=1 boş sayılır, bkz
isRowFilled).
Related
- 2026-05-06-saha-checkout-okulcom-api-gecisi — saha checkout’un okul-api’ye taşınması; bu karar onun UX rötuşu