Magento のデフォルト ワークフローを変更する必要があります。そのため、顧客が何かを購入するとすぐに (顧客が領収書ページを見たとき)、自動的に配送を作成する必要があります。どこから始めればよいかわかりません。いくつかの拡張機能を探し始めましたが、今のところ運がありません。それが私がここに来た理由です。この問題の解決をどこから始めればよいか考えている人はいますか? ありがとう!
3 に答える
この種のコードをビュー ファイルに入れるべきではありません。@ user2729065が述べたように、一般的に悪い習慣であることに加えて、支払い後に顧客がサンキューページに戻らない場合、コードは実行されません. オブザーバーを使用してカスタム モジュールを作成することをお勧めします。これを行うには、次のコードをモジュールの etc/config.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 をモジュール名に変更します。これは、請求書が支払われたときにトリガーされます。
次に、My/Module/Model/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;
}
}
これにより、注文がまだ処理中であるかどうかがチェックされます (支払い後の状態)。その場合は、出荷を作成してみてください。出荷が作成されると、注文の状態が自動的に完了に変わります。
注文直後 (請求書の作成と支払いの前) に出荷を作成する場合は、次のように変更します。
<sales_order_invoice_pay>
の
<sales_order_place_after>
config.xml で。また、このオブザーバーは請求書ではなく注文を返すため、以下も変更します。
$order = $observer->getEvent()->getInvoice()->getOrder();
に
$order = $observer->getEvent()->getOrder();
コードはInhooの例に基づいているため、ほとんどのクレジットはそれらに当てはまります。
解決策を見つけました。これは最善の方法ではないと思いますが、うまくいきます。
ファイル your_theme_name/template/checkout/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);
}
?>
これにより、領収書ページで注文の送料が追加されます。
テンプレートにコードを入れるのは本当に悪い考えです:それはあなたのテンプレート/ビューに配送コードを追加します. この機能はそこに属していません。(例: 支払いが 5 分後に確認された場合は機能しません)。
解決策は、オブザーバーを Payment-Success イベントに書き込むことです: http://inchoo.net/ecommerce/magento/magento-orders/automatically-invoice-ship-complete-order-in-magento/