Magento: Buyurtma holati uchun kuzatuvchi tugadi

Magento'da men komissiya modulini ishlab chiqyapman, chunki men buyurtma berilganda emas, sotish tugagach agentlarimga to'lashim kerak.

Ideal holda, buyurtma holati "to'la" bo'lganda uni qo'lga olishni xohlayman, biroq kuzatuvchi buni topa olmaganmi?

Buni yuklarni kuzatuvchiga qo'shishim mumkin, ammo buyurtma bir nechta jo'natilishga ega bo'lishi mumkin va shuning uchun noto'g'ri.

Shu bilan bir qatorda men oxirgi marta buyurtmani hisoblash uchun doimo cron ishini olaman, lekin yana to'g'ri yo'l ko'rinmaydi.

Buni amalga oshirishning to'g'ri yo'llari haqida har qanday taklif.

6

2 javoblar

Kuzatuvchidan "sales_order_save_commit_after" yoki "sales_order_invoice_pay" dan foydalaning, keyin siz buyurtma ahvolini va kerakli narsani amalga oshirgan holatiga qarab olishingiz mumkin. Mana bir misol:

// fyokievent sales_order_save_commit_after
public function commissionCalculationOnComplete($observer)
{
    $order = $observer->getOrder();
    if($order->getState() == Mage_Sales_Model_Order::STATE_COMPLETE){
   //do your order complete stuff
    }
}

yoki

// Event sales_order_invoice_pay
public function triggerProvisionCalculation ($observer)
{
    $invoice = $observer->getEvent()->getInvoice();
    switch ($invoice->getState()) {
        case Mage_Sales_Model_Order_Invoice::STATE_PAID :
            //do your stuff
            break;
    }
    return $this;
}

Hisobni ikki marotaba bajarmasligingizni tekshirishingiz kerak, chunki bu buyruq har safar buyurtma saqlanganida bu usul ishga tushiriladi.

23
qo'shib qo'ydi
sales_order_invoice_save_after hodisasi ehtimol bu foydalanish uchun yaxshi tanlovdir.
qo'shib qo'ydi muallif Jongosi, manba
Taqsizlik voqea Abstract Model'dan tejab tursa, keyin kommentdan keyin() Mage :: dispatchEvent ($ this -> _ eventPrefix .'_ save_commit_after '& zwnj;, $ this -> _ getEventData ()) usulida;/code>.
qo'shib qo'ydi muallif Sylvain Rayé, manba
Ikkala hodisaning orasidagi farq ham hodisaning sodir bo'lishi uchun amalga oshirilsa, ma'lumotlar bazasida bajarilganingizdan keyin o'z mantig'ingizni qilishingiz mumkin. Agar siz buyurtmani saqlab qolsangiz va bu majburiyatdan keyin hodisadan foydalansangiz, ma'lumotlar bazasi yangilanadi. Ma'lumotlar bazasidan kerakli ma'lumotni to'g'ridan-to'g'ri ob'ektdan emas, agar siz dbda hamma narsa yaxshi ekanligiga ishonch hosil qilishni istasangiz foydali bo'ladi. Agar siz 'eventsales_order_save_after'-dan foydalansangiz, ob'ekt $ buyurtmasi yaxshi bo'lishi mumkin, lekin ma'lumotlar bazasi bayonoti hali ham bitim bilan qulflanadi va xato bo'lishi mumkin va ma'lumotlaringizning yaxlitligi beqaror bo'lishi mumkin.
qo'shib qo'ydi muallif Sylvain Rayé, manba
@Jongosi Buyurtmani mantiqan bajarish uchun bajarilganligini bilishingiz kerak bo'lsa, nima qilish kerak? Men hisob-fakturani to'lash o'rniga buyurtma holatini kuzatish xavfsiz deb o'ylayman. Buyurtmani bekor qilib, mijozni qaytarib olishni tanlashim mumkin. Buning ma'nosi, hamma narsani uy-joyga qaytarish uchun ko'plab uy-joylarni saqlash kerak.
qo'shib qo'ydi muallif burntblark, manba
Rahmat. Tez savol: sales_order_save_commit_after yoki sales_order_save_after foydalanarmidim? "Grep -ri" ilovasida/app/code/yadroda men ularni qidirib topolmadim.
qo'shib qo'ydi muallif TheVyom, manba
Rahmat Diglin. Expanats ko'p yordam beradi. Siz taklif qilganingizdek, ma'lumotlar bazasi qulflanmaganligiga ishonch hosil qilish uchun commit_after'dan foydalanish maksimal darajada bo'ladi. Tez va qulay javob uchun ko'p rahmat.
qo'shib qo'ydi muallif TheVyom, manba

** magento buyurtma bazasi kuzatuvchisining sonini oshirish va kamaytirish miqdorini o'zgartiradi va bekor qiladi ** Zero/SalesOderafter/config.xml

    
    
   
    0.1.0
  
  
  
   
   
            
                 
                    singleton
                    Zero_SalesOrderafter_Model_Observer
                    canCancelOrder
                 
            
     
   
   
    

 path:Zero/SalesOrderafter/Observer.php
  class Wli_SalesOrderafter_Model_Observer 
   {
  public function canCancelOrder( Varien_Event_Observer $observer )
  { 
     $data = $observer->getEvent()->getOrder();
   if($data->getId())
    {
     $ProdustIds=array();
    foreach ($data->getAllVisibleItems() as $item)
     {
      $ProdustIds= $item->getProductId();
      }        
     } 
      $qty = $data->getData('total_qty_ordered');
      $order_status = $data->getStatus();
      $incrementId = $data->getData('increment_id');
    }       

     }
     ?>
0
qo'shib qo'ydi
men uchun ish !!!!!
qo'shib qo'ydi muallif B.dinesh, manba