Helper/Order.php
private function setOrderState($order, $state)
    {
        $prevState = $order->getState();
        if ($state == OrderModel::STATE_HOLDED) {
            // Ensure order is in one of the "can hold" states [STATE_NEW | STATE_PROCESSING]
            // to avoid no state on admin order unhold
            if ($prevState != OrderModel::STATE_NEW) {
                $order->setState(OrderModel::STATE_PROCESSING);
                $order->setStatus($order->getConfig()->getStateDefaultStatus(OrderModel::STATE_PROCESSING));
            }
            try {
                $order->hold();
            } catch (\Exception $e) {
                // Put the order in "on hold" state even if the previous call fails
                $order->setState(OrderModel::STATE_HOLDED);
                $order->setStatus($order->getConfig()->getStateDefaultStatus(OrderModel::STATE_HOLDED));
            }
        } elseif ($state == OrderModel::STATE_CANCELED) {
            try {
                $order->cancel();
                $order->setState(OrderModel::STATE_CANCELED);
                $order->setStatus($order->getConfig()->getStateDefaultStatus(OrderModel::STATE_CANCELED));
            } catch (\Exception $e) {
                // Put the order in "canceled" state even if the previous call fails
                $order->setState(OrderModel::STATE_CANCELED);
                $order->setStatus($order->getConfig()->getStateDefaultStatus(OrderModel::STATE_CANCELED));
            }
        } else {
            $order->setState($state);
            $order->setStatus($order->getConfig()->getStateDefaultStatus($state));
        }
    }
private function setOrderState($order, $state)
    {
        $prevState = $order->getState();
        if ($state == OrderModel::STATE_HOLDED) {
            // Ensure order is in one of the "can hold" states [STATE_NEW | STATE_PROCESSING]
            // to avoid no state on admin order unhold
            if ($prevState != OrderModel::STATE_NEW) {
                $order->setState(OrderModel::STATE_PROCESSING);
                $order->setStatus($order->getConfig()->getStateDefaultStatus(OrderModel::STATE_PROCESSING));
            }
            try {
                $order->hold();
            } catch (\Exception $e) {
                // Put the order in "on hold" state even if the previous call fails
                $order->setState(OrderModel::STATE_HOLDED);
                $order->setStatus($order->getConfig()->getStateDefaultStatus(OrderModel::STATE_HOLDED));
            }
        } elseif ($state == OrderModel::STATE_CANCELED) {
            try {
                $order->cancel();
                $order->setState(OrderModel::STATE_CANCELED);
                $order->setStatus($order->getConfig()->getStateDefaultStatus(OrderModel::STATE_CANCELED));
            } catch (\Exception $e) {
                // Put the order in "canceled" state even if the previous call fails
                $order->setState(OrderModel::STATE_CANCELED);
                $order->setStatus($order->getConfig()->getStateDefaultStatus(OrderModel::STATE_CANCELED));
            }
        } else {
            $order->setState($state);
            $order->setStatus($order->getConfig()->getStateDefaultStatus($state));
        }
    }
private function setOrderState ( $ order , $ state ) { $ prevState = $ order -> getState ( ) ; if ( $ state == OrderModel :: STATE_HOLDED ) { // Ensure order is in one of the "can hold" states [STATE_NEW | STATE_PROCESSING] // to avoid no state on admin order unhold if ( $ prevState != OrderModel :: STATE_NEW ) { $ order -> setState ( OrderModel :: STATE_PROCESSING ) ; $ order -> setStatus ( $ order -> getConfig ( ) -> getStateDefaultStatus ( OrderModel :: STATE_PROCESSING ) ) ; } try { $ order -> hold ( ) ; } catch ( \ Exception $ e ) { // Put the order in "on hold" state even if the previous call fails $ order -> setState ( OrderModel :: STATE_HOLDED ) ; $ order -> setStatus ( $ order -> getConfig ( ) -> getStateDefaultStatus ( OrderModel :: STATE_HOLDED ) ) ; } } elseif ( $ state == OrderModel :: STATE_CANCELED ) { try { $ order -> cancel ( ) ; $ order -> setState ( OrderModel :: STATE_CANCELED ) ; $ order -> setStatus ( $ order -> getConfig ( ) -> getStateDefaultStatus ( OrderModel :: STATE_CANCELED ) ) ; } catch ( \ Exception $ e ) { // Put the order in "canceled" state even if the previous call fails $ order -> setState ( OrderModel :: STATE_CANCELED ) ; $ order -> setStatus ( $ order -> getConfig ( ) -> getStateDefaultStatus ( OrderModel :: STATE_CANCELED ) ) ; } } else { $ order -> setState ( $ state ) ; $ order -> setStatus ( $ order -> getConfig ( ) -> getStateDefaultStatus ( $ state ) ) ; } }
Change order state taking transition constraints into account.

@param OrderModel $order
@param string $state
Change order state taking transition constraints into account .