Создать новую позицию заказа на единицу товара в Magento - PullRequest
1 голос
/ 21 февраля 2012

Мне нужно создать новую строку order_item для каждой единицы товара в Magento. Я имею в виду, что если кто-то покупает две единицы одного и того же продукта, мне нужен заказ для создания двух строк в таблице sales_flat_order_item, каждая из которых имеет количество «1».

Это возможно?

Спасибо!

1 Ответ

1 голос
/ 23 февраля 2012

Вот обходной путь, чтобы сделать это. Это ограничено, и это должно быть исправлено, потому что я не знаю, принимает ли это во внимание акции и другие специальные правила. Он взрывает элементы порядка с 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 / qty и удаляет элементы текущего заказа. Затем он создает новые с параметрами, которые мы получили:

    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();
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...