2013-06-14 3 views
0

나는 magento 1.6.1.0 버전을 연구 중이다. 배송 완료 후 주문 상황을 완료 한 후 전화 할 수있는 일정을 찾지 못했습니다. 그러면 주문 상태가 완료되면 모듈 관찰자에게 전화합니다.Magento 이벤트를 찾을 수 없음

주문 상태가 완료되면 고객 속성 값을 업데이트하고 싶습니다.

제게이 문제의 답을주십시오.

나는 다양한 것을 검색하고 수행하지만 유용하지는 않습니다.

+0

어떤 이벤트가 효과가 없었습니까? 아니요. 어떤 이벤트를 시도 했습니까? – benmarks

+0

@benmarks 주문 상태가 완료된 후에 실행되는 이벤트를 찾지 못했습니다. 나는 "sales_order_payment_pay"를 시도했다. 그러나 지불이 완료되지 않은 후에 주문이 완료되었다. –

답변

0

첫 번째 시작 위치는 sales_order_save_after입니다. 이것은 확실히 작동하지만 주문이 업데이트되고 저장 될 때마다 호출됩니다. 따라서 로직은 주문이 새로 생성 된 시점을 즉시 완료해야하며, 주문이 나중에 완료로 표시되는 경우 (후자가 가장 일반적 임) 고려해야합니다.

/** 
* Update customer attribute when order is completed. 
* 
* Need to catch two conditions: 
* 1) Order is new AND `status` = complete 
* 2) Order exists but `status` is changed to complete 
* 
* @param $obs Varien_Event_Observer 
*/ 
public function adjustCustomerAfterComplete($obs) 
{ 
    /* @var $order Mage_Sales_Model_Order */ 
    $order = $obs->getOrder(); 

    if ($order->getStatus() === $order::STATE_COMPLETE 
     && $order->getOrigData('status' !== $order::STATE_COMPLETE)) 
    { 
     Mage::getModel('customer/customer') 
       ->load($order->getCustomerId()) 
       ->setCustomAttr('new val') //custom attr code 
       ->save(); 

     //Another approach if you don't need events, etc.: 
     /* 
     $obj = new Varien_Object(
      array(
       'entity_id'=>$order->getCustomerId(), 
       'custom_attr'=>'new val' 
      ) 
     ); 

     Mage::getResourceModel('customer/customer') 
       ->saveAttribute($obj,'custom_attr'); 
     */ 
    } 
}