Как управлять доступностью товара (на складе или на складе) с отменой отмены заказа
Я пытаюсь разработать расширение отмены отмененного заказа. Для этого я расширяю OrderController.php .
class Extension_Undocancel_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Controller_Action
{
public function undocancelAction()
{
$id = $this->getRequest()->getParam('order_id');
$order = Mage::getModel('sales/order')->load($id);
$items = $order->getItemsCollection();
try {
foreach($items as $item) {
$canceled = $item->getQtyCanceled();
if($canceled>0) {
$productUpdates[$item->getProductId()] = array('qty' => $canceled);
}
$item->setData('qty_canceled',0);
}
Mage::getSingleton('cataloginventory/stock')->registerProductsSale($productUpdates);
$items->save();
$order->setBaseDiscountCanceled(0)
->setBaseShippingCanceled(0)
->setBaseSubtotalCanceled(0)
->setBaseTaxCanceled(0)
->setBaseTotalCanceled(0)
->setDiscountCanceled(0)
->setShippingCanceled(0)
->setSubtotalCanceled(0)
->setTaxCanceled(0)
->setTotalCanceled(0);
$state = 'new';
$status = 'processing';
$order->setStatus($status)
->setState($state)
->save();
$this->_getSession()->addSuccess($this->__('Order was successfully uncancelled.'));
}
catch (Mage_Core_Exception $e) {
$this->_getSession()->addError($e->getMessage());
}
catch (Exception $e) {
$this->_getSession()->addError($this->__('Order was not uncancelled.'));
}
$this->_redirect('*/sales_order/view', array('order_id' => $order->getId()));
}
}
Он отлично работает, даже обновляя запасы продуктов в соответствии с отмененным количеством, но если количество продукта станет равным нулю, оно все равно будет отображаться на складе.
Как я могу обновить наличие на складе, если количество становится равным нулю?
1
1 answers
После обновления кода отсортируйте проблему, упомянутую выше. Я надеюсь, что это кому-то поможет. (Если у вас есть изменения или ошибки, пожалуйста, прокомментируйте)
class Extension_Undocancel_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Controller_Action{
public function undocancelAction()
{
$id = $this->getRequest()->getParam('order_id');
$order = Mage::getModel('sales/order')->load($id);
$items = $order->getItemsCollection();
try {
foreach($items as $item) {
$canceled = $item->getQtyCanceled();
if($canceled>0) {
$productUpdates[$item->getProductId()] = array('qty' => $canceled);
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($item->getProductId());
if (((int)$stockItem->getQty() - (int)$canceled) <= (int)$stockItem->getMinQty()) {
$stockItem->setIsInStock(false)
->setStockStatusChangedAutomaticallyFlag(true);
}
$stockItem->save();
}
$item->setData('qty_canceled',0);
}
Mage::getSingleton('cataloginventory/stock')->registerProductsSale($productUpdates);
$items->save();
$order->setBaseDiscountCanceled(0)
->setBaseShippingCanceled(0)
->setBaseSubtotalCanceled(0)
->setBaseTaxCanceled(0)
->setBaseTotalCanceled(0)
->setDiscountCanceled(0)
->setShippingCanceled(0)
->setSubtotalCanceled(0)
->setTaxCanceled(0)
->setTotalCanceled(0);
$state = 'processing';
$status = 'processing';
$order->setStatus($status)
->setState($state)
->save();
$this->_getSession()->addSuccess($this->__('Order was successfully uncancelled.'));
}
catch (Mage_Core_Exception $e) {
$this->_getSession()->addError($e->getMessage());
}
catch (Exception $e) {
$this->_getSession()->addError($this->__('Order was not uncancelled.'));
}
$this->_redirect('*/sales_order/view', array('order_id' => $order->getId()));
}
}
2
Author: ganesh, 2013-07-29 12:25:49