1. 程式人生 > >50.magento 訂單狀態

50.magento 訂單狀態

1.cash on delivery

新訂單:
state:new
status:pending

發貨後:
state:processing
status:processing

invoices:
state:complete
status:complete
新訂單:
state:new
status:pending

invoices:
state:processing
status:processing

發貨後:
state:complete
status:complete

2.線上支付:

新訂單:
state:new
status:pending

付款後:
state
:processing status:processing 付款後發貨: state:complete status:complete

這裡寫圖片描述

新訂單:
state:new
status:pending

沒付款後發貨:
state:processing
status:processing

建立發票:
state:complete
status:complete

這裡寫圖片描述

新訂單:
state:new
status:pending

建立發票:
state:processing
status:processing

發貨:
state:complete
status:complete

這裡寫圖片描述

新訂單:
state:new
status:pending

直接取消:
state:canceled
status:canceled

完成後,就不能取消
訂單掛起
state  : holded
status : holded

訂單關閉
state  : closed
status : closed
支付(Paypal, Amazon Pay)過程中引入的訂單狀態
state  : pending_payment
status :payment_review 
我們拿Paypal付款作為例子,當然任意第三方的付款介面均適用。我們知道,當用戶下單之後,後臺立刻
收到“未付款”的訂單,此時,如果使用者在Paypal付款成功,Paypal會向Magento返回支付成功程式碼。
一切正常的話,之前處於“未付款”狀態的訂單,
會被更新為“正在處理”(Processing)狀態。
那麼這裡,需要注意一個情況,如果是線下收款,如支票收款,該如何讓Magento知道
該訂單已經收到付款了呢?很多朋友會非常迷惑這個地方,
因為Magento並未有一個明確的方式將“等待付款”的訂單狀態
修改為“正在處理”。那麼,這裡需要了解下Invoice。
一旦客戶從線上渠道,或者是其它途徑收到了付款,
但是並未向Magento傳送收款成功資料。
則可以通過列印訂單Invoice將“未付款”狀態的訂單修改為“正在處理”狀態。
此時,當用戶付款成功,並且商家也已經完成貨物打包,交付物流發貨之後,是時候在後臺填寫運單號,
通知使用者已經發貨,準備接收了。此時,我們可以通過後臺訂單中點選運送,
並填寫物流商及運單號,告知使用者已經發貨,
及具體的物流資訊。
完成訂單僅僅是一個開始

不出意外,當按照上述流程完成訂單的支付及物流操作之後,
你會發現,該訂單的狀態已經變成了“已完成”(complete)。
貌似,Magento系統內建的訂單流程非常簡單。
當然這裡的非常簡單有幾個前提。
1,你已經非常瞭解Magento的這套基本訂單流程,
以及如何在新訂單出現之後,處理通過線上及線下的付款方式,
以及物流流程。2,沒有碰到任何特殊情況。
那麼什麼是特殊情況呢?例如,已完成的訂單,客戶退款了怎麼辦?
處於Pending狀態的訂單,客戶是否可以繼續付款?
(答案是不能,需要通過外掛擴充套件)。等等這些問題。

最後,為下一篇關於Magento訂單狀態的文章留一個問題。從付款成功,到商家備貨並交付物流發貨,
是一個可長可短的過程,這個過程,只通過Processing這一個訂單狀態來解釋,會不會讓客戶感到不知所措呢?
比如說在此新增一個“已付款”,“正在備貨”,“已傳送”這樣的狀態呢?
在婚紗B2C這個垂直領域中,客戶下單之後,工廠才會進行生產,
這個階段可能會持續兩週或者更長時間,是否能夠新增一個“婚紗製作中”的訂單狀態呢?

3.Difference between order state and status

State is used by Magento to tell if the order is new, processing, complete, holded, closed,
 canceled etc.; while Statuses are the one that YOU would be defining at the back-end 
detail page to let you know which status is assigned as per your mapping. Remember, multiple 
statuses can be mapped with one state,
 while vice verse is not possible.

magento 顯示的是 status,而不是state 。
多 status 對映 一個 state,反之不行。

這裡寫圖片描述

<order>
                <statuses>
                    <pending translate="label"><label>Pending</label></pending>
                    <pending_payment translate="label"><label>Pending Payment</label></pending_payment>
                    <processing translate="label"><label>Processing</label></processing>
                    <holded translate="label"><label>On Hold</label></holded>
                    <complete translate="label"><label>Complete</label></complete>
                    <closed translate="label"><label>Closed</label></closed>
                    <canceled translate="label"><label>Canceled</label></canceled>
                    <fraud translate="label"><label>Suspected Fraud</label></fraud>
                </statuses>
                <states>
                    <new translate="label">
                        <label>New</label>
                        <statuses>
                            <pending default="1"/>
                        </statuses>
                        <visible_on_front/>
                    </new>
                    <pending_payment translate="label">
                        <label>Pending Payment</label>
                        <statuses>
                            <pending_payment default="1"/>
                        </statuses>
                    </pending_payment>
                    <processing translate="label">
                        <label>Processing</label>
                        <statuses>
                            <processing default="1"/>
                        </statuses>
                        <visible_on_front/>
                    </processing>
                    <complete translate="label">
                        <label>Complete</label>
                        <statuses>
                            <complete default="1"/>
                        </statuses>
                        <visible_on_front/>
                    </complete>
                    <closed translate="label">
                        <label>Closed</label>
                        <statuses>
                            <closed default="1"/>
                        </statuses>
                        <visible_on_front/>
                    </closed>
                    <canceled translate="label">
                        <label>Canceled</label>
                        <statuses>
                            <canceled default="1"/>
                        </statuses>
                        <visible_on_front/>
                    </canceled>
                    <holded translate="label">
                        <label>On Hold</label>
                        <statuses>
                            <holded default="1"/>
                            <fraud/>
                        </statuses>
                        <visible_on_front/>
                    </holded>
                </states>
 </order>

4.改變訂單狀態

$orderId = 3226; //order id
$order = Mage::getModel('sales/order')->load($orderId); //load order             
$state = 'complete';
$status = $state;
$comment = "Changing state to $state and status to $status Status";
$isCustomerNotified = false; //whether customer to be notified
$order->setState($state, $status, $comment, $isCustomerNotified);    
//$order->setStatus($status);    //can also use this to change only status
try { 
$order->save();
echo "<br />State and Status Updated";

}catch (Exception $e)
{
    echo $e->getMessage();
}

這裡寫圖片描述

這個方法不能通過手動設定:complete 與 closed 為保護狀態,不能手動設定
The Order State "complete" must not be set manually

這裡寫圖片描述

或者:

Try

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

$order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE);
$order->save();
You can't set Order state to COMPLETE or CLOSED manually with setState() method AFAIK.
Magento Order State  is used to define processing order .

Magento Order Status is used by the administrator to know the exact order flow .