Magento 1 remove item do pedido

Aug 25 2020

Abaixo está o código que estou usando agora, mas não está funcionando.

  <?php
    define('MAGENTO', realpath(dirname(__FILE__) . "/.."));
    require_once MAGENTO . '/app/Mage.php';
    umask(0);
    Mage::init();
    Mage::app()->addEventArea('global');
    Mage::getSingleton('core/session', array('name' => 'frontend'));
    
    $orders = Mage::getModel('sales/order')->getCollection() ->addFieldToFilter('created_at', array( 'from' => strtotime('-1 day', time()), 'to' => time(), 'datetime' => true, ))->load(); $orders_to_check = array();
    foreach ($orders as $order) {
        $order_id = $order->getRealOrderId();
        foreach ($order->getAllItems() as $item) {
            echo $item->getSku(); if($item->getSku() == 'S343697'){
               $item->delete(); $orders->save();
            } 
        }
    }
    print_r($orders_to_check);exit;

alguma ideia de como remover o item do pedido?

Respostas

1 BhaumikUpadhyay Aug 25 2020 at 17:30

Experimente o código abaixo e verifique se ajuda! Também adicionei o código para remover o preço do item do total do pedido.

<?php

define('MAGENTO', realpath(dirname(__FILE__) . "/.."));
require_once MAGENTO . '/app/Mage.php';
umask(0);
Mage::init();
Mage::app()->addEventArea('global');
Mage::getSingleton('core/session', array('name' => 'frontend'));

$orders = Mage::getModel('sales/order')->getCollection(); $orders->addFieldToFilter('created_at', array(
    'from'     => strtotime('-1 day', time()),
    'to'       => time(),
    'datetime' => true,
));

//return count($orders); //return count($orders->getData());

foreach ($orders as $order) {
    $order_id = $order->getRealOrderId();

    $base_grand_total = $order->getBaseGrandTotal();
    $base_subtotal = $order->getBaseSubtotal();
    $grand_total = $order->getGrandTotal();
    $subtotal = $order->getSubtotal();
    $tax_amount = $order->getTaxAmount();
    $base_subtotal_incl_tax = $order->getBaseSubtotalInclTax();
    $subtotal_incl_tax = $order->getSubtotalInclTax();
    $total_item_count = $order->getTotalItemCount();

    foreach ($order->getAllItems() as $item) {
        //echo $item->getSku(); if($item->getSku() == 'S343697'){
            
            $item_price = $item->getPrice();
            $item_tax_amount = $item->getTaxAmount();
            $item->delete(); //remove item price from Order price and update the Order totals. $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->setTaxAmount($tax_amount-$item_tax_amount);
            $order->setBaseSubtotalInclTax($base_subtotal_incl_tax-$item_price); $order->setSubtotalInclTax($subtotal_incl_tax-$item_price);
            $order->setTotalItemCount($total_item_count-1);

            $orders->save();
        } 
    }
}
?>

Espero que isto ajude!