2016-03-22 6 views
0

おはようございます、スタックオーバーフロー!PrestaShop - actionOrderStatusPostUpdateフック:それは本当に始まるべきか?

クイック質問。フックのドキュメント(http://doc.prestashop.com/display/PS15/Hooks+in+PrestaShop+1.5)によれば、 "actionOrderStatusPostUpdate"という名前のフックは、私が正しく理解していれば、オブジェクトの注文状況が既に変更された後に起動されることを意味していますか?

したがって、私はorderStatusがすでに変更されていると思っていました。問題なく、コード内で安全に変更することができました。私のコードには、「支払いを受け取った」ステータスに行く瞬間に商品をスキャンする条件付きブロックが含まれています。注文に「制限されたアイテム」が含まれていると、ユーザーに通知し、注文ステータスを「Restricted:理由)」(ID:15)コードを実行してフックが起動すると、状態が終了してすぐに「支払い受領済み」に置き換えられます。

https://www.dropbox.com/s/uc4ebr2ybytx2ks/Screenshot%202016-03-15%2012.52.47.jpg

POST更新フックのために、この正常な動作ですか?ステータスは既に変更されているはずですので、どうして変更されるのですか?

... 
$history = new OrderHistory(); 
$history->id_order = (int) $order_id; 
$history->changeIdOrderState(15, (int) $order_id); 
... 

私はそれが正常に変更さを保証できるようにこれを行うには別の方法があります:

... 
} else { 
// Restricted order... 
    $order->setCurrentState(15, 1); 
... 

私もこれは試してみましたか?

EDIT

私は同じことを尋ねるこの質問を認識しています:Prestashop - Change order status when payment is validatedを、それもまだ応答されるべきであり、私にはこれがないの助けのです。

EDIT私ができる最善を試してみて、コードの論理的な流れを説明することである

:ユーザーまたは他の何かが、注文のステータスを変更し

  1. 、フック火災(hookActionOrderStatusPostUpdate)をモジュールから削除します。
  2. 注文のステータスが「お支払い受諾済み」の場合は、次のセクションに進みます。
  3. 次に、私が使用する特定のフラグの順序で注文、配送先住所、
  4. 注文が制限されている場合、この後に制限を解決するために会社に顧客に連絡できるケースが他のシステムで登録されています(「配送先住所、請求書住所、特定の製品機能など」)注文が注文状態に設定されるべきである:規制が適用されることを示すために「制限付き」(id。15)。順序が制限されていない場合、それは処理のために別のシステムに渡されます
  5. など
+0

をあなたはどの支払いモジュールを使用していますか? – prestarocket

+0

コードはPost Order State Changeフックで実行されているため、支払モジュールには無関係ですが、テストのために私はちょうど "銀行振込"を使用します... –

+1

[Prestashop - 支払いの有効性が確認されたときの注文ステータスの変更] (https://stackoverflow.com/questions/28408612/prestashop-change-order-status-when-payment-is-validated) –

答えて

0

フックactionOrderStatusPostUpdateは一番最後に機能OrderHistory->changeIdOrderState()内部で実行されます。あなたは(また、在庫管理などを送信する電子メールを含みます)機能OrderHistory->changeIdOrderState()であなたのorder statusを変更しているのであれば、フックactionOrderStatusPostUpdateが実行されます

あなただけorder statusのIDを変更したい場合は、次のようにいくつかのコードを使用することができます。

$order = new Order((int)$id_order);   
$order->current_state = (int)$id_order_state; 
if ($order->update() && $order->setCurrentState((int)$id_order_state)) 
{ 
    // proceed 
} 
else 
{ 
    // report error 
} 
+0

上記のコードを実行すると、まったく何も起こりません。 Orderオブジェクトをダンプすると、Order Statusが実際に変更されたことが明らかになりますが、バックオフィスは変更を反映していません。 –

+0

コードを実装しましたが、行っていません。 "Restricted"を設定し、 "Payment Accepted"を設定します。したがって、注文ページでは、ステータスに「Payment Accepted」と表示されます。/ –

+0

...「支払い受諾済み」 - 何が間違っていますか?最後に割り当てられたステータスが表示されます。 –

関連する問題