5

How to Order status change Processing to complete in magento 2.3

Amit Bera
77.8k21 gold badges127 silver badges240 bronze badges
asked Feb 11, 2019 at 8:33

4 Answers 4

8

You can Change status this way..

 $orderId = 1; // here order id
 $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 $order = $objectManager->create('\Magento\Sales\Model\Order')
 ->load($orderId); 
 $order->setState("complete")->setStatus("complete");
 $order->save();
answered Feb 11, 2019 at 8:34
1
  • can u please help me solve this issue @rakesh Commented Feb 18, 2019 at 10:07
6

You can Change the order status to complete using repository Class of order entity \Magento\Sales\Api\OrderRepositoryInterface

 $order = $this->orderRepository->get($orderiId);
 $order->setStatus($completeStatus)->setState($completeStatus);
 $this->orderRepository->save($order); 

Code Looks Like:

<?php
namespace {ClassNameSpace};
use Magento\Framework\Exception\NoSuchEntityException;
class Test {
 /**
 * @var \Magento\Sales\Api\OrderRepositoryInterface
 */
 private $orderRepository;
 public function __construct(
 \Magento\Sales\Api\OrderRepositoryInterface $orderRepository 
 ) {
 $this->orderRepository = $orderRepository;
 }
 public function ChangeOrderStatusToComplete()
 {
 $completeStatus = \Magento\Sales\Model\Order::STATE_COMPLETE;
 $id = 2;
 try{
 $order = $this->orderRepository->get($id);
 $order->setStatus($completeStatus)->setState($completeStatus);
 $this->orderRepository->save($order); 
 } catch (NoSuchEntityException $ex) {
 // error Happen
 }
 }
}
answered Feb 11, 2019 at 9:03
3
  • 1
    Sir If I want to change it Hold to Processing how can we set it on Processing or any other status??? like in your code it is only for Complete. Commented Sep 18, 2019 at 13:29
  • @Amit How does this work? i have a user and the order id = 2 how does this update it? how do i run it Commented Nov 21, 2019 at 16:30
  • Once payment is done, the order status showing as "Processing" by default but I wanted to show as "Pending/New" similar to "Cash On Delivery". If I want to set the order status as "Pending/New" programmatically once the order is placed. What should I do? Please advise. Commented Jan 14, 2020 at 15:04
2

This is duplicated from this Link

use Magento\Sales\Model\Order;
$orderId = 1;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$order = $objectManager->create('\Magento\Sales\Model\Order') ->load($orderId);
$orderState = Order::STATE_COMPLETE;
$order->setState($orderState)->setStatus(Order::STATE_COMPLETE);
$order->save();
answered Feb 11, 2019 at 9:27
0

kindly change object manager to di

 $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 $orderRepository = $objectManager->create('\Magento\Sales\Api\OrderRepositoryInterface');
 $order = $orderRepository->get($orderId);
 $order->setState('awaiting_stock');
 $order->setStatus('awaiting_stock');
 $orderRepository->save($order);
answered Jun 24, 2021 at 13:37

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.