마 젠토 2 : 커스텀 모듈에서 프로그래밍 방식으로 주문 상태를 업데이트하는 방법?


11
$orderId = 1;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$order = $objectManager->create('\Magento\Sales\Model\Order')->load($orderId); 
$order->setState("processing")->setStatus("processing");
$order->save();

Magento 2에서 주문 상태를 어떻게 업데이트합니까?

답변:


20

다음과 같은 방법으로 할 수 있습니다

네임 스페이스 아래에 선언

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_PROCESSING;
$order->setState($orderState)->setStatus(Order::STATE_PROCESSING);
$order->save();

도움이 되었기를 바랍니다


답장을 보내 주셔서 감사합니다 @Dhaval Drcsystems 난 업데이트 주문 상태를 원합니다
Rahul Katoch

Magento \ Sales \ Model \ Order \ Payment 더 나은 아이디어를 얻을 수 있도록이 모델을 참조 할 수 있습니다. 코드로 주문을 처리하는 방법을 확인하십시오.
Dhaval Solanki

위의 코드는 \ Magento \ Sales \ Model \ Order not found 오류
Jaisa

파일을 보여 주시겠습니까?
다발 솔란 키

맞춤 주문 상태를 업데이트하는 방법은 무엇입니까? 'sent_to_print'라는 상태가 있다면?
jafar pinjar

12

주문 상태 업데이트

순서대로 상태 및 상태를 프로그래밍 방식으로 업데이트하려면이 형식으로 상태 및 상태를 정의하십시오. 구성 함수에서 주문 오브젝트를 시작하고 사용자 정의 함수에서 해당 주문 오브젝트를 사용하여 업데이트하십시오. 모델에서 프로그래밍 방식으로 주문 상태를 업데이트하려면 construct 함수에서 주문 객체를 가져옵니다.

public function __construct(
    \Magento\Sales\Model\Order $order
){
    $this->order = $order;
}
public function updateorder(){
    $order = $this->order;
    $order->setState(\Magento\Sales\Model\Order::STATE_PROCESSING, true);
    $order->setStatus(\Magento\Sales\Model\Order::STATE_PROCESSING);
    $order->addStatusToHistory($order->getStatus(), 'Order processed successfully with reference');
    $order->save();
}

새로운 주문 이메일

$orderid = '10000000';
$order = $this->_objectManager->get('Magento\Sales\Model\Order')->loadByIncrementId($orderid);
$this->_objectManager->get('Magento\Sales\Model\Order\Email\Sender\OrderSender')->send($order);

@calypso 답장을 보내 주셔서 감사하지만 주문 상태 만 업데이트하고 싶습니다
Rahul Katoch

@Rahulocodewire 또한 주석입니다.
gelanivishal

@
calypso

컨트롤러에서 보류 상태를 어떻게 표시합니까?
Rahul Katoch

5

이후 부하 ()저장 () 지금은 사용되지 않습니다 (때문에 :)

* @deprecated 100.1.0 because entities must not be responsible for their own loading.
* Service contracts should persist entities. Use resource model "load" or collections to implement
* service contract model loading operations.

OrderRepositoryInterface 를 사용하여 주문 을로드하고 저장했습니다.

use Magento\Sales\Api\OrderRepositoryInterface;

public function __construct(
    OrderRepositoryInterface $orderRepository,
    ...
) {
    $this->orderRepository = $orderRepository;
}

...
$order = $this->orderRepository->get($orderId);
$order->setState(\Magento\Sales\Model\Order::STATE_PAYMENT_REVIEW);
$order->setStatus(\Magento\Sales\Model\Order::STATE_PAYMENT_REVIEW);

try {
    $this->orderRepository->save($order);
} catch (\Exception $e) {
    $this->logger->error($e);
    $this->messageManager->addExceptionMessage($e, $e->getMessage());
}

그것이 도움이되기를 바랍니다.


맞춤 주문 상태를 업데이트하는 방법은 무엇입니까?
jafar pinjar

3

@medmek 및 @ prince-patel 답변 감사합니다. 사용자 정의 주문 상태에 관한 @ jafar-pinjar의 질문으로 setState 및 setStatus 호출은 상태 코드를 취할 수 있습니다. 예를 들어, 사용자 정의 상태 코드 "유료"가 작성됩니다. 상태 / 상태를 주문으로 업데이트하려면 :

...
use \Magento\Sales\Api\OrderRepositoryInterface;

class nameOfTheClass {
    ...
    protected $_orderRepository;
    ...
    public function __construct(..., OrderRepositoryInterface $orderRepository, ...){

        $this->_orderRepository = $orderRepository;
        ...
    }
    ...
    public function setOrderStatus($orderID, $statusCode){
        try{
            // obtain the order with the order ID
            $order = $this->_orderRepository->get($orderID);
            $order->setState($statusCode)->setStatus($statusCode);
            $this->_orderRepository->save($order);
            return true;
        } catch (\Exception $e){
            // add some logging here
            return false;
        }
    }
    ...
}

주문 상태를 업데이트하려면

$orderID = 1234; // this is the order ID
$code = 'paid';
$this->setOrderStatus($orderID, $code);

그것이 누군가를 도울 수 있기를 바랍니다.


1
증분 ID는 1234가 아닌 # 3000001469-1과 같습니다. 1234는 주문 ID입니다.
Greck

@Greck을 지적 해 주셔서 감사합니다. 응답을 업데이트했습니다.
qgor

2

마 젠토 2.2.2 이것은 다음과 같은 방식으로 만 작동합니다!

    $order = $this->order->loadByIncrementId('000000001');
    //$order = $this->order;
    $order->setState(\Magento\Sales\Model\Order::STATE_PROCESSING, true)->save();
    $order->setStatus(\Magento\Sales\Model\Order::STATE_PROCESSING, true)->save();
    $order->addStatusToHistory($order->getStatus(), 'Order processed successfully with reference again and again');
    //$order->save();

그러나 내가 가진 유일한 문제는 완전히 상태를 업데이트하지 않는다는 것입니다. 여기에 이미지 설명을 입력하십시오

그리드와 다음을 업데이트합니다. 여기에 이미지 설명을 입력하십시오

또한 새로운 송장, 배송 및 대변 메모를 작성할 수 없습니다. 감사

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.