当我从第三方服务获得某个回复时,我正在尝试将“处理”订单标记为完成。我已为此设置了所有设置,但唯一的问题是订单处于处理状态。
我正在生成发票(我不认为我需要这个,因为每个项目在Magento后端都标记为“已开发票”)和这样的货件:
$order = Mage::getModel('sales/order')... (etc)
$shipment = $order->prepareShipment($quantities);
$shipment->register();
$shipment->setOrder($order);
$shipment->save();
$invoice = $order->prepareInvoice($quantities);
$invoice->register();
$invoice->setOrder($order);
$invoice->save();
这似乎并没有这样做 - 我从这段代码中得不到任何错误,但订单仍然是处理。在后端,我仍然可以看到订单顶部的“发货”按钮,每个项目都处于“已开发票”状态。
任何提示都将不胜感激。
答案 0 :(得分:17)
尝试
$order->setStateUnprotected('complete',
'complete',
'Order marked as complete automatically',
false);
此方法位于app/code/local/Mage/Sales/Model/Order.php
(在v1.6.1中)
938: public function setStateUnprotected($state, $status = false, $comment = '', $isCustomerNotified = null)
在Magento 1.7.0.0中,此方法已被删除。试试这个:
$order->setData('state', "complete");
$order->setStatus("complete");
$history = $order->addStatusHistoryComment('Order marked as complete automatically.', false);
$history->setIsCustomerNotified(false);
$order->save();
答案 1 :(得分:5)
你可以看看this article(俄语)。
以下是文章中的代码:
$order = $observer->getEvent()->getOrder();
if (!$order->getId()) {
return false;
}
if (!$order->canInvoice()) {
return false;
}
$savedQtys = array();
$invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice($savedQtys);
if (!$invoice->getTotalQty()) {
return false;
}
$invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE);
$invoice->register();
$invoice->getOrder()->setCustomerNoteNotify(false);
$invoice->getOrder()->setIsInProcess(true);
$transactionSave = Mage::getModel('core/resource_transaction')
->addObject($invoice)
->addObject($invoice->getOrder());
$transactionSave->save();
答案 2 :(得分:3)
我这样做:
$order->setState('complete', true, $this->__('Your Order History Message Here.'))
->save();
答案 3 :(得分:1)
以编程方式处理订单的代码。 可以成功举办活动或cron
$order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
$order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE);
$order->setStatus(Mage_Sales_Model_Order::STATE_COMPLETE);
$history = $order->addStatusHistoryComment('Order is complete', false);
$history->setIsCustomerNotified(false);
$order->save();
答案 4 :(得分:0)
如果出现以下情况,Magento会自动将订单标记为完成:
如果您不能这样做,请尝试创建自定义“状态”并进行设置。在此期间,要将订单设置为处理,请尝试以下操作:
$order = Mage::getModel('sales/order')->load($id);
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true)->save();
应该没有错误地工作。在Magento 1.7.0.2中测试
答案 5 :(得分:0)
在我的情况下,我需要最终用户在订单网格中看到已完成,但订单状态确实没有区别。所以我刚刚去了
系统 - >订单状态 创建一个名为Completed的新状态(注意d以便于区分) 将该状态分配给处理/待处理状态,无论如何。
这适用于我们的客户 - 但如果您严重依赖订单状态(不同于订单状态)则无效。