Sipariş Durum Kancaları

1.7k görüntülenme Markdown

Sipariş kaydının ömrü boyunca dokuz kanca: kurulum, durum geçişleri, yapılandırma, süre dolumu ve silme.

Genel Bakış

Sipariş, sepetin kalıcı kaydıdır. Durumu hizmetlerin ne zaman açılacağını belirler: bekleyen sipariş hiçbir şey açmaz, etkin sipariş hizmetleri kurar.

Ödenmeden bırakılan sepetler bir süre sonra kendiliğinden düşer. O akışın kendi kancası vardır ve zamanlanmış görevden çalışır.

Referans

Sipariş kaydını durdurma

gateorder.create
Orders::create() kayıt yazılmadan

Sipariş kaydı yazılmadan önce çalışır.

Parametreler 1
$dataarrayYazılacak sipariş verisi: sahip, tutar, para birimi, kalemler, vergiler, indirimler, durum, ödeme yöntemi.
Dönüş 1
stringBoş olmayan bir string işlemi durdurur; metin hata olarak fırlatılır.
Dinleyici
Hook::add('gate:order.create', 10, function ($data) {
    if (Acme::blocked((int) ($data['user_id'] ?? 0)))
        return 'Bu hesap yeni siparis veremez.';

    return null;
});

Sipariş kaydını izleme

actionorder.created
Orders::create():215 durum bekliyor olabilir

Sipariş satırı yazıldıktan sonra çalışır. Bağlı hizmetler bu noktada henüz kurulmamıştır.

Parametreler 1
$orderarraySipariş verisi ile yeni kimliğin birleşimi: sahip, tutar, para birimi, kalemler, vergiler, indirimler, durum, ödeme yöntemi, adres, notlar. Durum çoğu zaman bekliyordur.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:order.created', 10, function ($order) {
    // Hizmetler HENUZ kurulmadi: onlar durum etkine dondugunde acilir.
    Crm::orderRecord((int) ($order['id'] ?? 0), $order);
});

Sipariş durum geçişini durdurma

gateorder.status_change
Orders::change_status() modüle yansıma bilgisi

Sipariş durumu değişmeden önce çalışır.

Parametreler 3
$order_idintSipariş kimliği. Sipariş kaydı gelmez; gerekiyorsa kendiniz okuyun.
$statusstringHedef durum.
$apply_on_moduleboolDeğişikliğin sağlayıcı modülüne yansıtılıp yansıtılmayacağı. Yanlışsa hizmet kurulmaz; yalnız kayıt değişir.
Dönüş 1
stringBoş olmayan bir string işlemi durdurur; metin hata olarak fırlatılır.
Dinleyici
Hook::add('gate:order.status_change', 10,
    function ($order_id, $status, $apply_on_module) {
        // Modüle yansimayan gecis hizmet kurmaz: kurali ona gore yazin.
        if ($status === 'active' && $apply_on_module && !Acme::capacityFree())
            return 'Su an yeni hizmet acilamiyor; kapasite dolu.';

        return null;
    });

Sipariş durumunu izleme

actionorder.status_changed
Orders::change_status() eski durum boş olabilir

Sipariş durumu değiştikten sonra çalışır.

Parametreler 3
$idintSipariş kimliği.
$statusstringYeni durum: waiting, inprocess, active, cancelled.
$old_statusstringÖnceki durum. İlk yazımda boş string gelir; geçiş karşılaştırması yapıyorsanız bunu hesaba katın.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:order.status_changed', 10, function ($id, $status, $old_status) {
    // Ilk yazimda eski durum BOS gelir: dogrudan karsilastirma yaniltir.
    if ($old_status === '' || $status === $old_status) return;

    if ($status === 'active') Crm::orderActivated($id);
});

Sipariş güncellemesini izleme

actionorder.updated
AdminOrders operatör düzenledi

Sipariş kaydı güncellendikten sonra çalışır.

Parametreler 2
$idintSipariş kimliği.
$dataarrayYazılan güncelleme verisi.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:order.updated', 10, function ($id, $data) {
    Audit::orderEdited((int) $id, array_keys($data));
});

Düşen sepeti yakalama

actionorder.expired
cronjobs/OrderCleanup zamanlanmış görev

Ödenmeden bırakılan sipariş süresi dolup iptal edildikten sonra çalışır.

Parametreler 3
$order_idintİptal edilen siparişin kimliği.
$ordernumstringMüşterinin gördüğü sipariş numarası.
$user_idintSepetin sahibi.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:order.expired', 10, function ($order_id, $ordernum, $user_id) {
    // Terk edilmis sepet: geri kazanim icin en dogru an.
    Retention::abandoned((int) $user_id, $ordernum);
});

Sipariş silmeyi durdurma

gateorder.delete
AdminOrders liste gelir, tek kayıt değil

Sipariş silinmeden önce çalışır.

Parametreler 1
$idsarraySilinecek sipariş kimlikleri. Tek sipariş silinirken de dizi gelir; tek kimlik beklemeyin.
Dönüş 1
stringBoş olmayan bir string işlemi durdurur; metin hata olarak fırlatılır.
Dinleyici
Hook::add('gate:order.delete', 10, function ($ids) {
    // Tekil silmede bile DIZI gelir.
    foreach ($ids as $id)
        if (Acme::hasPaidInvoice((int) $id))
            return 'Odenmis faturasi olan siparis silinemez.';

    return null;
});

Sipariş silmeyi izleme

actionorder.deleted
Orders::delete() son anlık görüntü

Sipariş silindikten sonra çalışır.

Parametreler 2
$idintSilinen siparişin kimliği.
$orderarraySilme öncesi anlık görüntü; kalemler, vergiler, indirimler ve ayrıntılar çözülmüş hâldedir.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:order.deleted', 10, function ($id, $order) {
    // Kalemler cozulmus gelir: JSON ayristirmaya gerek yok.
    Accounting::orderRemoved((int) $id, $order['items'] ?? []);
});

Sipariş toplamını değiştirme

filterorder.total
Orders faturaya giden tutar

Sipariş toplamları hesaplandıktan sonra çalışır.

Parametreler 4
$tax_calcarrayrefToplamlar: total, tax_amount, ek vergi ayrıntıları, gösterim ara toplamı. total siparişe kalıcı olarak yazılan tutardır.
$subtotalfloatİndirim ve vergi öncesi ara toplam.
$total_discountfloatBayilik ve kupon indirimlerinin toplamı.
$itemsarrayNihai sepet kalemleri.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:order.total', 10,
    function (&$tax_calc, $subtotal, $total_discount, $items) {
        // total siparise KALICI yazilir; vergi anahtarlarina dokunursaniz
        // fatura satirlari da ona gore kesilir.
        if (Acme::roundUp()) $tax_calc['total'] = ceil((float) $tax_calc['total']);
    });

Tuzaklar

Sipariş kaydı hizmet demek değildir

Sipariş oluşturuldu kancasında durum çoğunlukla bekliyordur ve bağlı hizmetler henüz kurulmamıştır. Hizmete dair iş yapan bir dinleyici burada boş bulur; doğru an durumun etkine döndüğü andır.

İlk yazımda eski durum boştur

Durum olayında önceki durum boş string olabilir: sipariş ilk kez yazılıyordur. "Eskisi şuydu, yenisi bu" diye karşılaştıran bir dinleyici bu durumda yanlış sonuç üretir. Boş değeri ayrı ele alın.

Silme kapısı liste alır

Tek bir sipariş silinirken bile kapı dizi alır. Tek kimlik bekleyen bir dinleyici diziyi sayıya çevirmeye çalışır ve kural hiçbir zaman tutmaz. Her zaman döngüyle gezin.

Modüle yansımayan geçiş hizmet kurmaz

Durum kapısının üçüncü parametresi, değişikliğin sağlayıcı modülüne yansıtılıp yansıtılmayacağını söyler. Yanlışsa yalnız kayıt değişir: sunucuda hiçbir şey açılmaz. Kapasiteye, sunucuya ya da sağlayıcıya bakan bir kural bu parametreyi okumalıdır.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.