Reputation: 67
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
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