2012-11-16 4 views
1

Magento 기본 워크 플로우를 변경해야합니다. 따라서 고객이 무언가를 사 자마자 자동으로 배송을 생성해야합니다 (고객이 영수증 페이지를 볼 때). 나는 어디에서 시작해야할지 모르겠습니다. 나는 약간의 확장을 위해 인터넷 검색을 시작했다. 그러나 지금은 행운이 없다. 그래서 내가 여기 온거야. 누구든지이 문제를 해결하기 위해 어디에서 아이디어를 얻을 수 있습니까? 감사!Magento에서 자동 배송 방법

+0

이 문제를 해결하지는 않지만 기존 시스템을 개선하십시오. UpVote 좋은 생각! – Karma

+0

감사합니다. 나는 이것이 Magento에게 정말로 중요한 재료라고 생각합니다. – bla0009

답변

1

:

솔루션은 지불-성공 이벤트에 옵저버를 작성하는 것입니다. @ user2729065에 언급 된 바와 같이 일반적으로 나쁜 습관이긴하지만, 고객이 결제 후 감사 페이지로 돌아 가지 않으면 코드가 실행되지 않습니다. 옵저버를 사용하여 맞춤 모듈을 만드는 것이 더 좋습니다. 이렇게하려면 모듈/etc.xml 파일에 다음 코드를 추가하십시오.

<global> 
    <events> 
     <sales_order_invoice_pay> 
      <observers> 
       <[my]_[module]_automatically_complete_order> 
        <class>[module]/observer</class> 
        <method>automaticallyShipCompleteOrder</method> 
       </[my]_[module]_automatically_complete_order> 
      </observers> 
     </sales_order_invoice_pay> 
    </events> 
</global> 

my_module을 모듈 이름으로 변경하십시오. 이것은 인보이스가 지불 될 때 트라이 거입니다.

그런 다음 내/모듈/모델에 옵저버를 생성/Observer.php

<?php 

class My_Module_Model_Observer 
{ 
/** 
* Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData()); 
* protected $_eventPrefix = 'sales_order'; 
* protected $_eventObject = 'order'; 
* event: sales_order_invoice_pay 
*/ 
public function automaticallyShipCompleteOrder($observer) 
{ 
    $order = $observer->getEvent()->getInvoice()->getOrder(); 

    if ($order->getState() == Mage_Sales_Model_Order::STATE_PROCESSING) { 

     try { 
      $shipment = $order->prepareShipment(); 
      $shipment->register(); 

      $order->setIsInProcess(true); 
      $order->addStatusHistoryComment('Shippment automatically created.', false); 

      Mage::getModel('core/resource_transaction') 
       ->addObject($shipment) 
       ->addObject($shipment->getOrder()) 
       ->save(); 
     } catch (Exception $e) { 
      $order->addStatusHistoryComment('Could not automaticly create shipment. Exception message: '.$e->getMessage(), false); 
      $order->save(); 
     } 
    } 

    return $this; 
} 

}

순서가 처리 (이 지불 한 후에는 도착 상태에서 여전히 경우이 확인됩니다). 그렇다면 선적을 만들어보십시오. 발송물이 생성 된 후 주문은 자동으로 상태가 완료로 변경됩니다.

당신은 주문이 접수 된 후 출하가 직접 만든 얻을 (송장이 생성 및 지불하기 전에.) 원하는 경우

, Config.xml의

<sales_order_invoice_pay> 

에서

<sales_order_place_after> 

변경 . 이 관찰자가 주문하지 송장을 반환하기 때문에, 또한 변경 :

$order = $observer->getEvent()->getInvoice()->getOrder(); 

$order = $observer->getEvent()->getOrder(); 

Inchoo 그래서 대부분의 크레딧이 그들에게 이동에서 코드가 예를 기반으로합니다.

0

해결책을 찾았습니다. 나는 이것이 최선의 방법은 아니라고 생각하지만 작동한다. 파일 your_theme_name/템플릿/체크 아웃/success.phtml

에서

는 영수증 페이지에서 주문 배송 추가합니다이 코드

<?php 
$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
$order = Mage::getModel('sales/order') -> loadByIncrementId($orderId); 

if ($order -> canShip()) { 
    $itemQty = $order -> getItemsCollection() -> count(); 
    $shipment = Mage::getModel('sales/service_order', $order) -> prepareShipment($itemQty); 
    $shipment = new Mage_Sales_Model_Order_Shipment_Api(); 
    $shipmentId = $shipment -> create($orderId); 
} 
?> 

를 추가합니다.

+0

해보세요! 대신 관측자가있는 사용자 정의 모듈을 사용하십시오. –

+0

좋은 지적은이 솔루션이 전혀 좋지 않다는 것입니다. 나는 이것을 정답이 아닌 것으로 표시 할 것이다. 단계를 설명하는 정답을 추가하십시오. @DennisvanSchaik – bla0009

+0

결코 늦지 않는 것이 좋으며 코드 예가 ​​추가되었습니다. –

0

템플릿에 코드를 삽입하는 것은 정말 나쁜 생각입니다. 템플릿 /보기에 배송 코드가 추가됩니다. 이 기능은 여기에 속하지 않습니다. 예를 들어, 5 분 후에 지불이 확인되면 작동하지 않습니다. 당신은보기 파일에 이러한 종류의 코드를 넣어해서는 안 http://inchoo.net/ecommerce/magento/magento-orders/automatically-invoice-ship-complete-order-in-magento/

+0

스택 오버플로에 오신 것을 환영합니다! 이것은 이론적으로 질문에 대답 할 수 있지만 여기에 답의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 바람직합니다 (http://meta.stackexchange.com/q/8259). –

관련 문제