Magento 2: Özel modülde sipariş durumunu programlı olarak nasıl güncelleyebilirim?


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

Lütfen bana Magento 2'deki sipariş durumunu nasıl güncellediğimi söyle?

Yanıtlar:


20

Aşağıdaki gibi yapabilirsiniz

ad alanının altında beyan et

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

Bu yardımcı olur umarım


cevap için teşekkürler @Dhaval Drcsystems sadece güncelleme sipariş durumunu istiyorum
Rahul Katoch

Magento \ Sales \ Model \ Order \ Payment daha iyi bir fikir edinebilmeniz için bu modele başvurabilirsiniz.
Dhaval Solanki

Yukarıdaki kod \ Magento \ Sales \ Model \ Sipariş bulunamadı hatasını gösteriyor
Jaisa

Bana dosyanızı gösterebilir misiniz?
Dhaval Solanki

Özel sipariş durumu nasıl güncellenir? 'Sent_to_print' adında bir durumum varsa?
jafar pinjar

12

Sipariş durumu güncellemesi

Sipariş durumunu ve durumunu programa göre güncellemek için, durumu ve durumu bu biçimde tanımlayın. Yapım işlevinde sipariş nesnesini başlatın ve güncellemek için özel işlevde bu sipariş nesnesini kullanın. Sipariş durumunu modelde programlı olarak güncellemek için, yapı nesnesinden sipariş nesnesini alın.

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

Yeni sipariş e-postası

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

Cevap @calypso için çok teşekkürler ama sadece sipariş durumunu güncellemek istiyorum
Rahul Katoch

@Rahulocodewire Ayrıca yorumda.
gelanivishal

@ calypso lütfen bu kodu
modülüme

denetleyicide bekleyen durumu nasıl gösterebilirim?
Rahul Katoch

5

Yana yüke () ve save () şimdi artık yok (çünkü :)

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

Sipariş yüklemek ve kaydetmek için OrderRepositoryInterface kullandım :

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

Umarım yardımcı olur


özel sipariş durumu nasıl güncellenir?
jafar pinjar

3

@Medmek ve @ prince-patel yanıtına teşekkürler. @ Jafar-pinjar'dan özel sipariş durumuyla ilgili soru olarak, setState ve setStatus çağrıları Durum Kodu'nu alabilir. Örneğin, "ücretli" özel durum kodu oluşturulur. Durumu / durumu bir siparişle güncellemek için:

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

Sipariş durumunu güncellemek için:

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

Orada birine yardım umuyoruz.


1
artımlı kimlik 1234 değil, # 3000001469-1 gibidir. 1234, sipariş kimliği
Greck

@Greck'i işaret ettiğiniz için teşekkürler. Yanıt güncellendi.
qgor

2

Magento 2.2.2 Bu sadece şu şekilde çalışır!

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

Ama sahip olduğum tek sorun, tam durumu güncellememesi: resim açıklamasını buraya girin

Yalnızca ızgaradaki ve aşağıdakileri günceller: resim açıklamasını buraya girin

Ayrıca yeni fatura, gönderim ve alacak dekontu oluşturmak mümkün değildir. Teşekkürler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.