Sipariş Kalemleri ve Opsiyonlar¶
Bu sayfa, sipariş kalemleri (items) ve ürün opsiyonlarının (options) nasıl işlendiğini detaylı olarak açıklar.
Item Yaşam Döngüsü¶
flowchart TD
A["POS: Item gönderimi"] --> B{"options var mı?"}
B -->|Evet| C["options → JSON serialize"]
C --> D["features = JSON string"]
B -->|Hayır| E{"features var mı?"}
E -->|Evet| F["features = düz metin"]
E -->|Hayır| G["features = null"]
D --> H["OrderItem.features alanına kaydet"]
F --> H
G --> H
Features vs Options¶
Features (Düz Metin)¶
Basit modifikatörler için string olarak gönderilebilir:
{
"productName": "Margarita Pizza",
"features": "BOYUT: Büyük | EKSTRA: Ekstra Peynir, Mantar | ÇIKARILACAK: Soğan"
}
Options (Yapısal Veri)¶
Detaylı opsiyonlar için nested JSON yapısı kullanılır. Bu yapı daha zengin veri içerir ve MuditaKurye tarafında JSON olarak serialize edilip features alanına yazılır.
{
"productName": "Margarita Pizza",
"options": [
{
"optionId": "SIZE-L",
"optionHeaderId": "SIZE",
"headerName": "Boyut",
"name": "Büyük Boy",
"quantity": 1,
"unitPrice": 10.00,
"totalPrice": 10.00,
"type": "OPTION",
"excluded": false
},
{
"optionId": "TOPPING-CHEESE",
"optionHeaderId": "TOPPING",
"headerName": "Ekstralar",
"name": "Ekstra Peynir",
"quantity": 1,
"unitPrice": 5.00,
"totalPrice": 5.00,
"type": "OPTION",
"subOptions": [
{
"optionId": "CHEESE-TYPE-MOZZ",
"name": "Mozzarella",
"type": "OPTION"
}
]
}
]
}
Opsiyon Tipleri¶
| Tip | Açıklama | Örnek |
|---|---|---|
OPTION |
Standart seçenek | Büyük Boy, Ekstra Peynir |
EXCLUDED |
Çıkarılan malzeme | Soğansız, Ketçapsız |
INGREDIENT |
Malzeme ekleme | Nar Ekşili, Acı Sos |
PRODUCT |
İç ürün / set menü | Menu içindeki içecek seçimi |
Alt Opsiyonlar (Recursive Nesting)¶
Opsiyonlar sınırsız derinlikte iç içe geçebilir:
{
"name": "Set Menü",
"type": "PRODUCT",
"subOptions": [
{
"name": "İçecek Seçimi",
"type": "OPTION",
"subOptions": [
{
"name": "Buzlu",
"type": "OPTION"
}
]
}
]
}
Fiyat Hesaplama¶
Item Düzeyinde¶
Sipariş Düzeyinde¶
subtotal = Σ(item.totalAmount)
effectiveDiscount = max(0, order.discount - Σ(item.discountAmount))
total = subtotal - effectiveDiscount + serviceFee
Çift İndirim Koruması
Sistem, item bazlı indirimlerin sipariş bazlı indirimle çift sayılmasını önler. order.discount değerinden item-level indirimlerin toplamı düşülür. Negatife düşerse sıfır olarak kabul edilir.
Ürün Notu (productNote)¶
Her kaleme özel not ekleyebilirsiniz:
Ürün notları MuditaKurye panelinde ve kurye uygulamasında sipariş detayında görünür.
Sonraki Adım¶
API detayları için Sipariş Oluşturma sayfasına dönün.