2012-02-22 8 views
4

特定の商品にグローバル注文限度額を適用したいと思います。これは、特定の製品でバックオーダーを有効にし、これらの個々の製品の数に制限があるいくつかの期間を定義することです。Magento - カスタム基準に基づく注文限度の実装

現在、私のカスタムモデルを選択した日付の期間に関連する情報をロードし、それらは、これらのイベントに$product->setMyModel(...)としてロードされたときの製品モデルに添付されています

  • catalog_product_load_after
  • catalog_product_collection_load_after
  • sales_quote_item_collection_products_after_load

特定の製品のデータでマイモデルにアクセスするのはsimp私は私のモデルと呼んでいるので、私は$product->getMyModel()と呼んでいます。

は、これは私が何をしたいです:

1.製品はカート/引用に追加、または順に配置されるたびに、私はこの(擬似コード)のような何かをしたいです:

// Somehow get $product and $requestedQty (most likely from an event) 
$myModel = $product->getMyModel(); 
if($myModel->applyOrderLimit()) { 
    // ($orderedQty + $requestedQty) <= $orderLimit 
    if($myModel->isRequestedQtyAvailable($requestedQty)) { 
     // Issue an error and prevent the item from being ordered 
     return; 
    } 
    // $orderedQty += $requestedQty 
    $myModel->addToQtyOrdered($requestedQty); 
} 
// Continue Magentos default behaviour 

1.1。私はMage_CatalogInventory_Item::checkQuoteItemQty()がここで$requestedQtyをキャプチャするためにオーバーライドされるべきだと思う。

更新$myModel::ordered_qty注文がキャンセル、払い戻されるなどの場合はいつでも。

私はこのコードをどこで実行すればいいのでしょうか?そのような注文制限を実装し、私が実現した数量を把握するために何かがありますか?

私にとってこれはかなり複雑な作業のようです。だから、私は経験豊富なMagento開発者からの支援が必要です!

注:私は、番号付きリストやコードブロックを混在させる方法を見つけ出すcouldntのが、私はあなたがあなたの目標を達成するためにMage_CatalogInventory_Model_Stock_Item:.checkQty()方法を書き換えるに頼る必要はありません

+0

sales_quote_save_beforeに対してオブザーバーを開発し、セッション内のaddErrorメッセージだけを使用して、自動的にロールバックします。 – ShaunOReilly

+0

私が行ったテストでは、 'Mage_CatalogInventory_Item :: checkQty()'をオーバーライドしてqtyを検証するだけで問題なく動作することがわかりました。私は何か見落としているかもしれない。とにかく、自分のモデル 'ordered_items'に追加/削除するのがいつ、どのように適切なのか、まだ分かりません。例えば、管理者がqtyを更新するときなど、特定の条件の下でのみ行いたいのです。投稿) – Vitamin

答えて

8

十分にその読みを願っています。

イベントオブザーバをイベントsales_quote_item_qty_set_afterに追加すると、カタログインベントリチェックに加えてオブザーバがトリガされます。

public function salesQuoteItemQtySetAfter(Varien_Event_Observer $observer) 
{ 
    $quoteItem = $observer->getItem(); 
    $qty = $quoteItem->getQty(); 
    $myModel = $quoteItem->getProduct()->getMyModel() 

    // Your Logic 

    // If not salable set error for the quote item 
    $quoteItem->addErrorInfo(
     'mymodule', // origin code 
     'currently_not_salable', // error code 
     'The Error Message' 
    ); 
} 

sales_quote_item_qty_set_afterイベントもcheckQty()を呼び出すためにcataloginventoryモジュールによって使用されているので、あなたもどのような機能が利用できるかに、追加の可能性をMage_CatalogInventory_Model_Observer::checkQuoteItemQty()を調べることができます。

+0

あなたの答えをありがとう。あなたが注文数や注文商品をどのように追跡していると思いますか?私は払い戻し/クレジットメモを考慮する必要があると思うし、注文が並べ替えられたときにバックエンドの数量も変えたのだろうか? – Vitamin

+0

'$ myModel :: ordered_qty'は、商品の在庫量とは関係ありません。それは単なる製品ごとの追加カウンターですか? – Vinai

+0

個々の商品のカウンターです。はい。顧客が '$ myModel :: order_limit'を超えるアイテムを注文しようとすると、エラーを発行する必要があります。 'if(($ myModel-> getOrderedItems()+ $ requestedQty)> $ myModel-> getOrderLimit()){/ *エラー! * /} ' – Vitamin

関連する問題