Magento 如何将订单状态设置为';完成';在马根托

Magento 如何将订单状态设置为';完成';在马根托,magento,Magento,如何手动将订单状态设置为“完成” 我正在使用下面的代码,但它给出的错误是, 订单状态“完成”不能手动设置。 $order = Mage::getModel('sales/order')->loadByIncrementId($order_id); $order->setState(Mage_Sales_Model_Order::STATE_COMPLETE); $order->save(); 我为自己找到了解决办法 $order = Mage

如何手动将订单状态设置为“完成”

我正在使用下面的代码,但它给出的错误是, 订单状态“完成”不能手动设置。

$order = Mage::getModel('sales/order')->loadByIncrementId($order_id);
        $order->setState(Mage_Sales_Model_Order::STATE_COMPLETE);
        $order->save(); 

我为自己找到了解决办法

$order = Mage::getModel('sales/order')->loadByIncrementId($order_id);
        $order->setData('state', "complete");
        $order->setStatus("complete");       
        $history = $order->addStatusHistoryComment('Order was set to Complete by our automation tool.', false);
        $history->setIsCustomerNotified(false);
        $order->save();

好的,使订单状态
完成
的实际方法是创建
发票
发货
,之后订单状态自动获得
完成
状态。比如:

//create invoice for the order
$invoice = $order->prepareInvoice()
                   ->setTransactionId($order->getId())
                   ->addComment("Invoice created from cron job.")
                   ->register()
                   ->pay();

$transaction_save = Mage::getModel('core/resource_transaction')
                            ->addObject($invoice)
                            ->addObject($invoice->getOrder());

$transaction_save->save();
//now create shipment
//after creation of shipment, the order auto gets status COMPLETE
$shipment = $order->prepareShipment();
if( $shipment ) {
     $shipment->register();
     $order->setIsInProcess(true);

     $transaction_save = Mage::getModel('core/resource_transaction')
                                ->addObject($shipment)
                                ->addObject($shipment->getOrder())
                                ->save();
}
以编程方式设置订单状态:


在不同的网站上有很多关于这个的q/a,所以这是我唯一可以去工作的网站。Magento 1.9.0.1就工作流程而言,这是正确的方法。但如果失败(有时创建装运时出现问题),则您可能需要使用user2629419的答案。小心:这将导致通过电子邮件通知客户-如果您希望跳过通知,则必须使用setIsCustomerNotified(null)-
change order status to 'Completed'
$orderIncrementId = YOUR_ORDER_INCREMENT_ID;
$order = Mage::getModel('sales/order')
                ->loadByIncrementId($orderIncrementId);

 $order->setState(Mage_Sales_Model_Order::STATE_COMPLETE,true)->save();