我在使用Magento 1.7.0.2。我正在使用“货到付款”作为我的付款方式。我会告诉您我在任何订单上遵循的步骤。当下订单(数量减少1项)时,我为它创建一个货件,如果客户支付订单总价。我为该订单创建了发票。
我的问题,如果下订单(数量减少1件),我会为此订单创建一个货件。如果客户拒绝付款,我打开此订单并“取消”它,在这种情况下,“数量”不会增加,所以如何才能增加?
答案 0 :(得分:2)
如果订单状态为处理
使用'order_cancel_before'的观察者创建自定义模块(请参阅示例@ Change Magento default status for duplicated products更改<catalog_model_product_duplicate> to <order_cancel_before>
因为{/ 1}}未在app / code / core / Mage / Sales / Model / Order.php中定义
您可以覆盖/重写订单模型类,请参阅例如http://phprelated.myworks.ro/how-to-override-rewrite-model-class-in-magento/
在您的本地模块中执行
<order_cancel_before>
或者您可以在模型中创建一个新方法increaseProductQty()并将下面的代码复制到其中(这样您就不需要观察者)。然后替换行Mage :: dispatchEvent('order_cancel_before'... with $ this-&gt; increaseProductQty()
在您的观察者方法(伪代码)
中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;
}
如果您在更新库存时遇到问题,请参阅Set default product values when adding new product in Magento 1.7
参考http://pragneshkaria.com/programatically-change-products-quantity-after-order-cancelled-magento/
如果订单状态为待处理
看看系统&gt;配置&gt;库存
订单取消时将物料的状态设置为库存 - 控制待处理订单中的产品是否在订单取消时自动返回库存。范围:商店视图。
了解更多@
答案 1 :(得分:1)
感谢R.S,因为他帮助了我更多&amp;更多。
我按照R.S的回复https://stackoverflow.com/a/13330543/1794834的所有说明进行操作,我只更改了观察者代码。这是在Magento 1.7.0.2上与我合作的观察者代码。
$curr_date = date('Y-m-d H:i:s');
$order = $observer->getEvent()->getOrder();
foreach ($order->getItemsCollection() as $item)
{
$productId = $item->getProductId();
$qty = (int)$item->getQtyOrdered();
$product = Mage::getModel('catalog/product')->load($productId);
$stock_obj = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
$stockData = $stock_obj->getData();
$product_qty_before = (int)$stock_obj->getQty();
$product_qty_after = (int)($product_qty_before + $qty);
$stockData['qty'] = $product_qty_after;
/*
* it may be case that admin has enabled product add in stock, after product sold,
* he set is_in_stock = 0 and if order cancelled then we need to update only qty not is_in_stock status.
* make a note of it
*/
if($product_qty_after != 0) {
$stockData['is_in_stock'] = 1;
}else{
$stockData['is_in_stock'] = 0;
}
$productInfoData = $product->getData();
$productInfoData['updated_at'] = $curr_date;
$product->setData($productInfoData);
$product->setStockData($stockData);
$product->save();
}