Ana içeriğe geç

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

item.totalAmount = (item.unitPrice × item.quantity) - item.discountAmount + Σ(option.totalPrice)

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:

{
  "productName": "Adana Kebap",
  "productNote": "Az acılı, yanında extra lavaş",
  "quantity": 2
}

Ü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.