注文のステータスを完了に強制する


11

次のステータスを必要とするカスタムモジュールを使用しています: "complete"(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を使用するすべての人に役立つことを願っています<br/>ありがとう@ ctrl-z pls

回答:


12

注文の状態を手動で「完了」に設定することはできません。setState「完了」の状態で注文を呼び出すと、この例外が発生します。

注文状態「完了」は手動で設定しないでください。

この理由は単純です。「完了」状態(およびステータスは「完了」の唯一の状態であるため、ステータス)は、注文が完全に満たされていることを示すことを目的としています。つまり、配置、請求、および顧客への発送が完了しています。

注文の請求と発送が完了すると、Magentoはこの状態を注文に自動的に設定します。

お支払いシステムが「完了」ステータスを「許可しない」場合、私はそれを信頼しません。特に、ionCubeエンコードされているためです。ただし、それがMagentoの外部で請求を処理しているためである場合は、注文の「オフライン」請求書を手動で生成して、Magentoが支払い済みであることを認識できるようにする必要があります。

通常のように注文が完了状態に達しないという問題を回避することで、自分自身を短期的に変更しようとしないでください。代わりに、注文が請求され、Magentoで出荷されることを確認して、実際の問題を修正し、システムによって完了としてマークされるようにします。


これは質問に答えません。これは実行されるべきではない理由に対処しますが、それはすべての問題を網羅するものではありません。私自身、注文処理のMagentoのほとんどがスキップされ、注文を完全なステータスに設定する必要がある状況を取得しました。
Navarr 2015年

1
@Navarrは実際にそれを行います...注文のオフライン請求書を手動で生成することに関する部分を参照してください。それを行うと、使用されている支払い処理業者に関係なく、注文は完了まで移動します。
davidalger 2015年

3
または、ご存知のとおり:stackoverflow.com/a/8906785/43790
Navarr '26 / 03/15

2
@Navarrもちろん、SQLを介してdbに直接書き込むこともできますが、モデルの実装ごとに保護された状態であることを否定するものではありません。最良の答えは、根本的な問題に対処せずに「xを達成しましょう」に盲目的に答えることではありません。とにかく、これは私がこれに関してここでコメントする最後のものです。
davidalger 2015年

車のダッシュボードにあるEngin Checkライトが点灯しました。私は問題を修正する方法を知りませんでした。次に、その小さなライトをオンにするヒューズを取り外しました。エンジンは正常に動作していると思います。
Mohammed Joraid

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?
Bob van Luijt 2013

いいえ注文を読み込み、新しいステータスと状態を注文に割り当てました。
クルディープ2013

これは状態/ステータスが新しい/保留中ですが、問題ありません。実際の問題は、手動で「完了」に設定する方法です。
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を直接実行することはお勧めしません。MagentoORMの実装に依存します。
7ochem
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.