I think that's because the delivered status is set after the order is shipped, which makes the order complete. To remove this behavior, you need to comment or remove this line in app/code/core/Mage/Sales/Model/Order.php:
$this->_setState(self::STATE_COMPLETE, true, '', $userNotification);
You can find it in the function _checkState()
, which is called just before the order is saved.
Having said that, it is a big NO-NO to modify core file directly. You have to bear all the risks that come with it.
For achieve thing you need to understand magento Default order Flow:
Please check the below image for understand magento order flow
As per as my thought,You need to do coding for achieve this thing also need to create Some Order status basic of some Order state
.For create those You need to go admin>System>Order statuses.
Order status : new > processing > ready to deliver > delivered
or
For cod: new > processing > ready to deliver > pending payment > delivered
New: Make very payment method New Order Status=Pending[]
Processing: As per as,magento if you create invoice or Shipment of new order then order status goin to process and state goes to processing.
Ready to deliver or pending payment : you need to create new status for state:Processing. and manage this status status depend on payment method,you must need customization.
Prevent to stop order status order complete whenever order is already invoice or ship.
Delivered: For manage "delivered",you need to Make new Status delivered to state complete.And make Status delivered as default for state complete
Best Answer
Below are the status's you can use
Code for updating the status.
Above code will update all the status's except
COMPLETE
Status. As Order becomes complete only when invoice and shipment is created. Once invoice and shipment is created order will automatically changed to Complete.so for that you can use below code.
Create Invoice
create shipmnet