Magento 2: Bagaimana cara memperbarui status pesanan secara terprogram dalam modul khusus?


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

Tolong beritahu saya bagaimana saya memperbarui status pesanan di Magento 2?

Jawaban:


19

Anda bisa melakukannya dengan cara berikut

mendeklarasikan namespace di bawah ini

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

Semoga ini membantu


terima kasih atas balasan @Dhaval Drcsystems saya hanya ingin memperbarui status pesanan
Rahul Katoch

Anda dapat merujuk model ini sehingga Anda akan mendapatkan ide yang lebih baik Magento \ Sales \ Model \ Order \ Pembayaran Periksa di sini bagaimana mereka memproses pesanan dengan kode.
Dhaval Solanki

kode di atas menunjukkan \ Magento \ Sales \ Model \ Order tidak ditemukan kesalahan
Jaisa

Bisakah Anda tunjukkan file Anda?
Dhaval Solanki

Bagaimana cara memperbarui status pesanan khusus? Jika saya memiliki status yang disebut 'sent_to_print'?
jafar pinjar

12

Pembaruan status pesanan

Untuk memperbarui status pesanan dan status secara pro-gramatikal untuk menentukan status dan status dalam format ini. Memulai objek pesanan dalam fungsi konstruksi dan menggunakan objek pesanan dalam fungsi kustom untuk memperbaruinya. Untuk memperbarui status pesanan secara terprogram dalam model, dapatkan objek pesanan dari fungsi konstruk.

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 pesanan baru

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

terima kasih banyak untuk balasan @calypso tetapi saya hanya ingin memperbarui status pesanan
Rahul Katoch

@Rahulocodewire Ini juga dalam komentar.
gelanivishal

@ calypso tolong jelaskan di mana saya meletakkan kode ini dalam modul saya
Rahul Katoch

bagaimana saya menunjukkan status tertunda di controller?
Rahul Katoch

5

Karena memuat () dan menyimpan () sudah tidak digunakan lagi sekarang (karena :)

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

Saya menggunakan OrderRepositoryInterface untuk memuat dan menyimpan pesanan:

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

Semoga ini bisa membantu


bagaimana cara memperbarui status pesanan khusus?
jafar pinjar

3

Magento 2.2.2 Ini hanya bekerja dengan cara berikut!

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

Tetapi satu-satunya masalah yang saya miliki adalah tidak memperbarui status sepenuhnya: masukkan deskripsi gambar di sini

Itu hanya memperbarui di grid dan ikuti: masukkan deskripsi gambar di sini

Juga tidak mungkin membuat faktur, pengiriman, dan memo kredit baru. Terima kasih


3

Terima kasih pada @medmek dan @ pangeran-patel jawaban. Sebagai pertanyaan dari @ jafar-pinjar tentang status pesanan khusus, panggilan setState dan setStatus dapat menggunakan Kode Status. Misalnya, kode status khusus "berbayar" dibuat. Untuk memperbarui status / status ke pesanan:

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

Untuk memperbarui status pesanan:

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

Semoga itu bisa membantu seseorang di luar sana.


1
incremental id seperti # 3000001469-1, bukan 1234. 1234 adalah nomor pesanan
Greck

Terima kasih telah menunjukkannya @Greck. Memperbarui respons.
qgor
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.