强制订单进入完成状态


11

我们使用的自定义模块要求状态为:“完整”(我无法更改该模块,因为它使用ioncube)

我们还使用了不提供状态选项的付款系统:“完成”

所以我的问题是:我如何强制订单转为完成状态?

PS:这不起作用:

$order = Mage::getSingleton('sales/order');
$order->loadByIncrementId('12345');
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true);
$order->save();

此处提供的解决方案:magento.stackexchange.com/a/244601/15769对我有用。<br/>我希望它对使用Magento 1.9.2.4的任何人都有用。谢谢@ ctrl-z请

Answers:


12

不允许将订单状态手动设置为“完成”,并且当您setState以“完成”状态调用订单时,应该会遇到此异常:

订单状态“完成”不得手动设置。

原因很简单:“完成”状态(以及状态,因为它是唯一具有“完成”状态的状态)旨在指示订单已完全完成。即已将其放置,开具发票并运送给客户。

开票并发货后,Magento将自动在订单上设置此状态。

如果您的付款系统“不允许”“完成”状态,那么我将不信任它,尤其是使用ionCube编码的情况。但是,如果是因为它正在Magento之外处理发票,那么您将需要为订单手动生成“脱机”发票,以便Magento能够识别出已付款。

不要尝试通过解决订单未达到正常状态的问题来缩短自己的时间。相反,请确保通过Magento开具发票并装运订单来解决实际问题,以便系统将其标记为已完成。


这不能回答问题。尽管它确实解决了不应该执行的原因,但这并不是所有内容的全部。我本人已经遇到这样一种情况,即大多数Magento订单处理都被跳过了,需要将订单设置为完整状态。
Navar'Mar

1
@Navarr实际上确实有...请参阅有关手动为订单生成脱机发票的部分。这样做,无论使用哪种付款处理器,订单都将完成。
davidalger

3
或者,您知道:stackoverflow.com/a/8906785/43790
Navarr

2
@Navarr当然,也可以通过SQL直接写入db,但这并不能否认它是模型实现中的一种受保护状态。最好的答案不要盲目地回答“让我们完成x”,而无需解决基础问题。无论如何,这是我最后要在此发表评论的地方。
davidalger

发动机检查灯在汽车的仪表板上点亮。我不知道如何解决该问题。然后,我拆下了保险丝,使那一点点的灯点亮。我认为我的引擎现在运转良好。
Mohammed Joraid '18

0

更改状态:

$order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE);

更改状态:

$order->addStatusToHistory(Mage_Sales_Model_Order::STATE_COMPLETE);

然后 $order->save();

您必须使用来更改状态,setData以避免异常告诉您无法手动调用setState


-3

尝试这个。

$order = Mage::getModel('sales/order')->load(Mage::getSingleton('checkout/session')->getLastOrderId());
$order_id=$order->getData('entity_id');
$order2 = Mage::getModel('sales/order')->load($order_id); 
$order2->setData('state', "new");
    $order2->setStatus("pending");
$order2->save();

它对我的项目有效。


啊哈,所以您已经“重新启动”了订单,然后将其设置为:new-> pending-> completed?
鲍勃·范·路易特

否,我加载了订单,然后为订单分配了新的状态和状态。
Kuldeep

这是状态/状态为新/待处理,这没问题。实际的问题是如何手动将其设置为“完成”。
7ochem

-3
$oResource = Mage::getSingleton('core/resource'); 

$oConnection = $oResource->getConnection('core_write'); 

$sSql = "UPDATE " . ' ' . $oResource->getTableName('sales_flat_order') .
        " SET status = '" . Mage_Sales_Model_Order::STATE_COMPLETE . "', state = '" . Mage_Sales_Model_Order::STATE_COMPLETE . "' WHERE
entity_id = " . $oOrder->getId();

$oConnection->query($sSql);

我不鼓励使用直接SQL执行,而是依靠Magento ORM实现。
7ochem
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.