注文ステータスが処理中の場合
'order_cancel_before'のオブザーバーを使用してカスタムモジュールを作成します(例を参照@重複製品のMagentoのデフォルトステータスの変更<catalog_model_product_duplicate> to <order_cancel_before>
<order_cancel_before>
app / code / core / Mage / Sales / Model/Order.phpで定義されていないため
注文モデルクラスをオーバーライド/書き換えることができます。例: http: //phprelated.myworks.ro/how-to-override-rewrite-model-class-in-magento/
ローカルモジュールで
public function cancel()
{
if ($this->canCancel()) {
Mage::dispatchEvent('order_cancel_before', array('order' => $this));
$this->getPayment()->cancel();
$this->registerCancellation();
Mage::dispatchEvent('order_cancel_after', array('order' => $this));
}
return $this;
}
または、モデルに新しいメソッドincreaseProductQty()を作成し、以下のコードをモデルにコピーすることもできます(この方法では、オブザーバーは必要ありません)。次に、行Mage :: dispatchEvent('order_cancel_before'...を$this-> beginProductQty()に置き換えます。
オブザーバーメソッド(擬似コード)
$curr_date = date('Y-m-d H:i:s');
$order = $observer->getEvent()->getOrder();
foreach ($order->getItemsCollection() as $item)
{
$productId = $item->getProductId();
$qty = $item->getQty();
// you need to check order status to make sure it processing
//$order->getStatus() (assuming you are canceling entire order)
//$order->getPayment();
$product = Mage::getModel('catalog/product')->load($product_id);
$stock_obj = Mage::getModel('cataloginventory/stock_item')->load($product_id);
$stockData = $stock_obj->getData();
$product_qty_before = (int)$stock_obj->getQty();
$product_qty_after = (int)($product_qty_before + $qty);
$stockData['qty'] = $product_qty_after;
$productInfoData = $product->getData();
$productInfoData['updated_at'] = $curr_date;
$product->setData($productInfoData);
$product->setStockData($stockData);
$product->save();
}
在庫の更新に問題がある場合は、Magento1.7で新製品を追加するときにデフォルトの製品値を設定するを参照してください。
参照http://pragneshkaria.com/programatically-change-products-quantity-after-order-cancelled-magento/
注文ステータスが保留中の場合
[システム]>[構成]>[インベントリ]をご覧ください
注文がキャンセルされたときにアイテムのステータスを在庫に設定する—注文がキャンセルされた場合に、保留中の注文の商品が自動的に在庫に戻るかどうかを制御します。スコープ:ストアビュー。
続きを読む @
Magentoストアの在庫を管理する方法は?
管理者:[システム]→[構成]→[インベントリ]タブ