user1929687
user1929687

Reputation: 67

How to edit and update the Item Status of an Order Item in an order in magento

As soon an order is placed in magento, the order item has Item Status as 'Ordered'. I am able to fetch this status. But I need to edit this status,something like 'creating'.

Tried Using the code below but the changes are not reflected

$order = Mage::getModel("sales/order")->loadByIncrementId($orderId); 
$ordered_items = $order->getAllVisibleItems();
foreach($ordered_items as $item){  
      $item->getStatus();
      $item->setStatus('Creating');
      $order->save();
      }

Even tried with an option suggested here Howto update order item's custom option in Magento? which is also not working. Please add your suggestions here. Thanks in advance

Upvotes: 3

Views: 7519

Answers (1)

Dmitry Kovalev
Dmitry Kovalev

Reputation: 171

Order item don't have a separate field - status. To understand how to determine status you can see method Mage_Sales_Model_Order_Item :: getStatusId

/**
 * Retrieve item status identifier
 *
 * @return int
 */
public function getStatusId()
{
    $backordered = (float)$this->getQtyBackordered();
    if (!$backordered && $this->getHasChildren()) {
        $backordered = (float)$this->_getQtyChildrenBackordered();
    }
    $canceled    = (float)$this->getQtyCanceled();
    $invoiced    = (float)$this->getQtyInvoiced();
    $ordered     = (float)$this->getQtyOrdered();
    $refunded    = (float)$this->getQtyRefunded();
    $shipped     = (float)$this->getQtyShipped();

    $actuallyOrdered = $ordered - $canceled - $refunded;

    if (!$invoiced && !$shipped && !$refunded && !$canceled && !$backordered) {
        return self::STATUS_PENDING;
    }
    if ($shipped && $invoiced && ($actuallyOrdered == $shipped)) {
        return self::STATUS_SHIPPED;
    }

    if ($invoiced && !$shipped && ($actuallyOrdered == $invoiced)) {
        return self::STATUS_INVOICED;
    }

    if ($backordered && ($actuallyOrdered == $backordered) ) {
        return self::STATUS_BACKORDERED;
    }

    if ($refunded && $ordered == $refunded) {
        return self::STATUS_REFUNDED;
    }

    if ($canceled && $ordered == $canceled) {
        return self::STATUS_CANCELED;
    }

    if (max($shipped, $invoiced) < $actuallyOrdered) {
        return self::STATUS_PARTIAL;
    }

    return self::STATUS_MIXED;
}

and available statuses:

/**
 * Retrieve order item statuses array
 *
 * @return array
 */
public static function getStatuses()
{
    if (is_null(self::$_statuses)) {
        self::$_statuses = array(
            //self::STATUS_PENDING        => Mage::helper('sales')->__('Pending'),
            self::STATUS_PENDING        => Mage::helper('sales')->__('Ordered'),
            self::STATUS_SHIPPED        => Mage::helper('sales')->__('Shipped'),
            self::STATUS_INVOICED       => Mage::helper('sales')->__('Invoiced'),
            self::STATUS_BACKORDERED    => Mage::helper('sales')->__('Backordered'),
            self::STATUS_RETURNED       => Mage::helper('sales')->__('Returned'),
            self::STATUS_REFUNDED       => Mage::helper('sales')->__('Refunded'),
            self::STATUS_CANCELED       => Mage::helper('sales')->__('Canceled'),
            self::STATUS_PARTIAL        => Mage::helper('sales')->__('Partial'),
            self::STATUS_MIXED          => Mage::helper('sales')->__('Mixed'),
        );
    }
    return self::$_statuses;
}

Upvotes: 7

Related Questions