2012-02-21 13 views
1

Magentoで製品単位ごとに新しいorder_itemラインを作成する必要があります。つまり、誰かが同じ製品を2つ購入した場合、sales_flat_order_itemテーブルに2つの行を作成する必要があります。それぞれ、数量「1」です。Magentoで製品単位ごとに新規注文アイテムを作成

これは可能ですか?

ありがとうございます!

+0

あなたはこれを実現するためにコアを書き換える必要があります。 "Item_1、Item_2、Item_3、..."である製品の複製を作成することもできます。次に、カタログに保存する前に、qtyをカウンターとして使用してイテレーターをループし、各製品を "Item_n"製品に置き換えます元の数量を1に変更しますか? – ShaunOReilly

+0

答えをくれてありがとう、Shaunoreilly、しかし、私はこれのためにコアモジュールを書き直すことを避けたかった...とにかく感謝! – PauGNU

+0

私は、コアモジュールを物理的に変更しないで自分の新しいモジュールを使用して、コアモジュールを拡張するのと同じように書き直すことを意味しました。 – ShaunOReilly

答えて

1

これを行うには、これを回避する方法があります。それは限られており、是正処置が必要です。なぜなら、それがアカウントのプロモーションや他の特別なルールを考慮しているかどうかわからないからです。 qty> 1の注文アイテムを分解し、qty = 1の新しい行を作成します。

  1. sales_order_place_afterをチェックオブザーバでモジュールを作成:

    <events> 
    <sales_order_place_after> 
         <observers> 
          <explodeitems> 
           <type>singleton</type> 
           <class>Company_OrderObservers_Model_ExplodeOrderItem</class> 
           <method>explodeOrderItems</method> 
          </explodeitems> 
         </observers> 
        </sales_order_place_after> 
        <events> 
    
  2. 観察者は、IDS /数量を取得し、現在の注文のアイテムを削除します。そして、それは我々が得たパラメータで新しいものを作成します。

    function explodeOrderItems($observer) 
    { 
    
    $order= $observer->getEvent()->getOrder(); 
    
    
    $items = $order->getAllVisibleItems(); 
    $products = array(); 
    
    foreach ($items as $k => $item) 
    { 
        if ($item->getProductType() == Mage_Catalog_Model_Product_Type::TYPE_SIMPLE) 
        { 
         $itemqty = $item->getQtyOrdered(); 
         if ($itemqty > 1) 
         { 
          for ($i=0; $i < $itemqty; $i++) 
          { 
           $products[$i]['id'] = $item->getProductId(); 
           $products[$i]['qty'] = 1; 
          } 
          $item->delete(); 
         } 
        } 
        else 
         $item->delete(); 
    } 
    
    $customer = Mage::getSingleton('customer/session')->getCustomer(); 
    $storeId = $customer->getStoreId(); 
    
    if ($products) 
    { 
        foreach ($products as $product) 
        { 
         $_product = Mage::getModel('catalog/product')->load($product['id']); 
         $price = $_product->getPrice(); 
         $orderItem = Mage::getModel('sales/order_item') 
            ->setStoreId($storeId) 
            ->setQuoteItemId(0) 
            ->setQuoteParentItemId(NULL) 
            ->setProductId($product['id']) 
            ->setProductType($_product->getTypeId()) 
            ->setQtyBackordered(NULL) 
            ->setTotalQtyOrdered(1) 
            ->setQtyOrdered(1) 
            ->setName($_product->getName()) 
            ->setSku($_product->getSku()) 
            ->setPrice($price) 
            ->setBasePrice($price) 
            ->setOriginalPrice($price) 
            ->setRowTotal($price) 
            ->setBaseRowTotal($price); 
    
         $order->addItem($orderItem); 
        } 
        $order->save(); 
    } 
    
関連する問題