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?

Rahul Katoch
sumber

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

Dhaval Solanki
sumber
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);
gelanivishal
sumber
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

medmek
sumber
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

Juliano Vargas
sumber
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.

qgor
sumber
1
incremental id seperti # 3000001469-1, bukan 1234. 1234 adalah nomor pesanan
Greck
Terima kasih telah menunjukkannya @Greck. Memperbarui respons.
qgor