2012-09-13 80 views
1

我必须通过从订单中删除一些商品来更新订单,如果它有多个。然后必须更新订单。Magento已订购商品删除

现在我找到了表格:sales_flat_order_item,其中包含所有订单商品。

$ items = $ order-> getAllItems();

foreach($items as $item){ 

     if($item->getParentItemId() == '' || $item->getParentItemId() == null){ 

      $product_id = $item->getProductId(); 
      if($product_id == $booking_product_id){    

         // this item have to be deleted 

      } 

     } 

    } 

$ order-> save();

有什么建议吗?

+0

什么是总体目标,你为什么要从订单中删除一件物品? –

+0

这是客户的要求,他可以从他的订单中取消物品,我将单独显示所有订单物品。 –

+0

我正在尝试一些东西,像$ item-> delete()。现在这样好了。然后我通过扣除最近从订单中删除的这个项目价格来更新订单总价格。 –

回答

3

这样我就成功了。

$base_grand_total = $order->getBaseGrandTotal(); 
    $base_subtotal = $order->getBaseSubtotal(); 
    $grand_total = $order->getGrandTotal(); 
    $subtotal = $order->getSubtotal(); 

    $base_subtotal_incl_tax = $order->getBaseSubtotalInclTax(); 
    $subtotal_incl_tax = $order->getSubtotalInclTax(); 
    $total_item_count = $order->getTotalItemCount(); 

    $items = $order->getAllItems(); 
    foreach($items as $item){  

     if($item->getParentItemId() == '' || $item->getParentItemId() == null){ 

      $product_id = $item->getProductId(); 
      if($product_id == $booking_product_id){    

      //remove item price from total price of order 
      $item_price = $item->getPrice(); 
      $item->delete(); 

      $order->setBaseGrandTotal($base_grand_total-$item_price); 
      $order->setBaseSubtotal($base_subtotal-$item_price); 
       $order->setGrandTotal($grand_total-$item_price); 
      $order->setSubtotal($subtotal-$item_price); 

      $order->setBaseSubtotalInclTax($base_subtotal_incl_tax-$item_price); 
      $order->setSubtotalInclTax($subtotal_incl_tax-$item_price); 
      $order->setTotalItemCount($total_item_count-1); 
      $order->save(); 
      } 

     } 

    } 
+0

通过使用$ item-> delete(),我删除该项目,然后通过从订单价格中删除此项目的价格,我更新订单总计。可能对任何人都有帮助。 –

0

删除现有订单中的项目。

  1. 另存为 'order_item_remove.php'
  2. 运行它作为http://example.com/order_item_remove.php

代码块如下:下面从根的magento作为外部代码的代码行

运行

<?php 

require_once('app/Mage.php'); //Path to Magento 
umask(0); 
Mage::app(); 

try{ 
$_order = Mage::getModel('sales/order')->loadByIncrementId('100000011'); // Order Increment Id 
$items = $_order->getAllItems(); 

foreach ($items as $item){ 
    Mage::log('All items ' . print_r($item->getData(), true), null, 'items_data.log'); 
    $base_grand_total = $_order->getBaseGrandTotal(); 

    $base_subtotal = $_order->getBaseSubtotal(); 
    $base_tva = $_order->getBaseTaxAmount(); 

    $grand_total = $_order->getGrandTotal(); 

    $subtotal = $_order->getSubtotal(); 
    $tva = $_order->getTaxAmount(); 


    $base_subtotal_incl_tax = $_order->getBaseSubtotalInclTax(); 

    $subtotal_incl_tax = $_order->getSubtotalInclTax(); 

    $total_item_count = $_order->getTotalItemCount(); 
Mage::log('Items ' . $item->getSku(), null, 'items_data.log'); 


    if($item->getSku()=='SAMPLEKIT'){ 
     $item_price = $item->getPrice(); 
     $item_tva = $item->getTaxAmount(); 
     Mage::log('Item deleted ' . $item->getSku(), null, 'items_data.log'); 
     $item->delete(); 
     $_order->setBaseGrandTotal($base_grand_total-$item_price-$item_tva); 

     $_order->setBaseSubtotal($base_subtotal-$item_price); 

     $_order->setBaseTaxAmount($base_tva-$item_tva); 

     $_order->setGrandTotal($grand_total-$item_price-$item_tva); 

     $_order->setSubtotal($subtotal-$item_price); 

     $_order->setTaxAmount($tva-$item_tva); 


     $_order->setBaseSubtotalInclTax($base_subtotal_incl_tax-$item_price); 

     $_order->setSubtotalInclTax($subtotal_incl_tax-$item_price); 

     $_order->setTotalItemCount(count($items)-1); 

     $_order->save(); 
    } 

} 
echo "success"; 
} catch(Exception $e) { 
    echo "failed"; 
}