Magento 2: Làm thế nào để cập nhật trạng thái đơn hàng theo chương trình trong mô-đun tùy chỉnh?


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();

Xin vui lòng cho tôi biết làm thế nào tôi cập nhật trạng thái đơn hàng trong Magento 2?

Câu trả lời:


18

Bạn có thể làm như cách sau

khai báo không gian tên bên dưới

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();

Hi vọng điêu nay co ich


cảm ơn vì đã trả lời @Dhaval Drcsystems tôi chỉ muốn cập nhật trạng thái đơn hàng
Rahul Katoch

Bạn có thể tham khảo mô hình này để bạn có ý tưởng tốt hơn Magento \ Sales \ Model \ Order \ Payment Kiểm tra ở đây cách họ xử lý đơn hàng với mã.
Dhaval Solanki

đoạn mã trên hiển thị \ Magento \ Sales \ Model \ Lỗi không tìm thấy đơn hàng
Jaisa

Bạn có thể vui lòng cho tôi xem tập tin của bạn?
Dhaval Solanki

Làm thế nào để cập nhật trạng thái đơn hàng tùy chỉnh? Nếu tôi có trạng thái gọi là 'sent_to_print'?
jafar pinjar

12

Đặt hàng cập nhật trạng thái

Để cập nhật trạng thái đơn hàng và trạng thái theo ngữ pháp theo thứ tự để xác định trạng thái và trạng thái theo định dạng này. Bắt đầu đối tượng thứ tự trong hàm xây dựng và sử dụng đối tượng thứ tự đó trong hàm tùy chỉnh để cập nhật nó. Để cập nhật trạng thái trật tự theo chương trình trong mô hình, hãy lấy đối tượng thứ tự từ hàm xây dựng.

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();
}

Email đặt hàng mới

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

cảm ơn rất nhiều vì đã trả lời @calypso nhưng tôi chỉ muốn cập nhật trạng thái đơn hàng
Rahul Katoch

@Rahulocodewire Nó cũng trong bình luận.
gelanivishal

@ calypso vui lòng giải thích nơi tôi đặt mã này trong mô-đun của mình
Rahul Katoch

Làm thế nào tôi hiển thị trạng thái chờ xử lý trong bộ điều khiển?
Rahul Katoch

5

load ()save () không được dùng nữa (vì :)

* @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.

Tôi đã sử dụng OrderRep repositoryInterface để tải và lưu đơn hàng:

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());
}

Hy vọng nó giúp


Làm thế nào để cập nhật trạng thái đơn hàng tùy chỉnh?
jafar pinjar

3

Cảm ơn câu trả lời @medmek và @ prince-patel. Như câu hỏi từ @ jafar-pinjar liên quan đến trạng thái đơn hàng tùy chỉnh, các cuộc gọi setState và setStatus có thể nhận Mã trạng thái. Ví dụ: mã trạng thái tùy chỉnh "đã thanh toán" được tạo. Để cập nhật trạng thái / trạng thái cho một đơn đặt hàng:

...
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;
        }
    }
    ...
}

Để cập nhật trạng thái đơn hàng:

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

Hy vọng rằng sẽ giúp được ai đó ngoài kia.


1
id gia tăng giống như # 3000001469-1, không phải 1234. 1234 là id đơn hàng
Greck

Cảm ơn bạn đã chỉ ra rằng @Greck. Cập nhật các phản ứng.
qgor

2

Magento 2.2.2 Điều này chỉ hoạt động theo cách sau!

    $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();

Nhưng vấn đề duy nhất mà tôi gặp phải là nó không cập nhật trạng thái đầy đủ: nhập mô tả hình ảnh ở đây

Nó chỉ cập nhật trong lưới và sau: nhập mô tả hình ảnh ở đây

Cũng không thể tạo hóa đơn mới, vận chuyển và ghi nhớ tín dụng. Cảm ơn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.