Wir verwenden ein benutzerdefiniertes Modul, für das der Status "abgeschlossen" erforderlich ist (ich kann das Modul nicht ändern, da es ioncube verwendet).
Wir verwenden auch ein Zahlungssystem, das die Statusoption "vollständig" nicht bietet.
Meine Frage lautet also: Wie kann ich eine Bestellung erzwingen, um zum Status "Vollständig" zu gelangen?
PS: Das funktioniert nicht:
$order = Mage::getSingleton('sales/order');
$order->loadByIncrementId('12345');
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true);
$order->save();
order-status
Bob van Luijt
quelle
quelle
Antworten:
Es ist nicht zulässig, den Bestellstatus manuell auf "Abgeschlossen" zu setzen. Diese Ausnahme sollte auftreten, wenn Sie
setState
die Bestellung mit dem Status "Abgeschlossen" aufrufen :Der Grund dafür ist einfach: Der Status "vollständig" (und der Status, da dies der einzige Status mit dem Status "vollständig" ist) soll anzeigen, dass eine Bestellung vollständig ausgeführt wurde. Dh es wurde platziert, in Rechnung gestellt und an den Kunden versendet.
Sobald die Bestellung in Rechnung gestellt und versendet wurde, setzt Magento diesen Status automatisch auf die Bestellung.
Wenn Ihr Zahlungssystem den Status "vollständig" nicht "zulässt", würde ich ihm nicht vertrauen, insbesondere wenn es ionCube-codiert ist. Wenn dies jedoch darauf zurückzuführen ist, dass die Rechnungsstellung außerhalb von Magento erfolgt, müssen Sie manuell eine "Offline" -Rechnung für die Bestellung erstellen, damit Magento erkennt, dass sie bezahlt wurde.
Versuchen Sie nicht, sich zu verändern, indem Sie das Problem umgehen, dass die Bestellungen nicht den abgeschlossenen Zustand erreichen, wie sie normalerweise sollten. Beheben Sie stattdessen das eigentliche Problem, indem Sie sicherstellen, dass Bestellungen in Magento in Rechnung gestellt und versendet werden, damit sie vom System als vollständig markiert werden.
quelle
So ändern Sie den Status:
So ändern Sie den Status:
Und dann
$order->save();
Sie müssen den Status mit ändern
setData
, um die Ausnahme zu vermeiden, dass Sie nicht manuell anrufen könnensetState
quelle
Versuche dies.
Es funktioniert für mich bei meinem Projekt ..
quelle
quelle