Magento 2: Wie aktualisiere ich den Bestellstatus programmgesteuert im benutzerdefinierten Modul?


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

Bitte sagen Sie mir, wie ich den Bestellstatus in Magento 2 aktualisiere.

Antworten:


18

Sie können es wie folgt tun

Deklarieren Sie unter dem Namespace

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

Hoffe das hilft


danke für die Antwort @Dhaval Drcsystems Ich möchte nur den
Bestellstatus

Sie können auf dieses Modell verweisen, um eine bessere Vorstellung von Magento \ Sales \ Model \ Order \ Payment zu erhalten. Überprüfen Sie hier, wie Bestellungen mit Code verarbeitet werden.
Dhaval Solanki

Der obige Code zeigt \ Magento \ Sales \ Model \ Order nicht gefunden Fehler
Jaisa

Können Sie mir bitte Ihre Akte zeigen?
Dhaval Solanki

Wie aktualisiere ich den Status einer benutzerdefinierten Bestellung? Wenn ich den Status 'sent_to_print' habe?
Jafar Pinjar

12

Aktualisierung des Bestellstatus

Um den Auftragsstatus und den Status programmgesteuert zu aktualisieren, definieren Sie den Status und den Status in diesem Format. Initiieren Sie das Bestellobjekt in der Konstruktfunktion und verwenden Sie dieses Bestellobjekt in der benutzerdefinierten Funktion, um es zu aktualisieren. Um den Auftragsstatus programmgesteuert im Modell zu aktualisieren, rufen Sie das Auftragsobjekt aus der Konstruktionsfunktion ab.

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

Neue Bestell-E-Mail

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

Vielen Dank für die Antwort @calypso, aber ich möchte nur den Bestellstatus aktualisieren
Rahul Katoch

@ Rahulocodewire Es ist auch in Kommentar.
Gelanivishal

@ Calypso bitte erklären, wo ich diesen Code in mein Modul
eingefügt

Wie zeige ich den Status "Ausstehend" im Controller an?
Rahul Katoch

5

Da load () und save () jetzt veraltet sind (weil :)

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

Ich habe das OrderRepositoryInterface verwendet, um die Bestellung zu laden und zu speichern:

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

Ich hoffe es hilft


Wie aktualisiere ich den Status einer benutzerdefinierten Bestellung?
Jafar Pinjar

3

Danke an @medmek und @ prince-patel Antwort. Als Frage von @ jafar-pinjar zum Status der benutzerdefinierten Bestellung können setState- und setStatus-Aufrufe den Statuscode annehmen. Beispielsweise wird der benutzerdefinierte Statuscode "bezahlt" erstellt. So aktualisieren Sie den Status / Status auf eine Bestellung:

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

So aktualisieren Sie den Bestellstatus:

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

Hoffe das hilft jemandem da draußen.


1
Inkrementelle ID ist wie # 3000001469-1, nicht 1234. 1234 ist eher Bestell-ID
Greck

Vielen Dank für den Hinweis auf @Greck. Die Antwort wurde aktualisiert.
Qgor

2

Magento 2.2.2 Dies funktioniert nur folgendermaßen!

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

Das einzige Problem, das ich habe, ist, dass der Status nicht vollständig aktualisiert wird: Geben Sie hier die Bildbeschreibung ein

Es werden nur die im Raster und die folgenden aktualisiert: Geben Sie hier die Bildbeschreibung ein

Es ist auch nicht möglich, eine neue Rechnung, einen neuen Versand und eine neue Gutschrift zu erstellen. Vielen Dank

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.