Korzystamy z niestandardowego modułu, który wymaga statusu: „ukończony” (nie mogę go zmienić, ponieważ używa modułu jonowego)
Korzystamy również z systemu płatności, który nie oferuje opcji statusu: „zakończony”
Więc moje pytanie brzmi: jak mogę zmusić zamówienie, aby przejść do statusu ukończonego?
PS: To nie działa:
$order = Mage::getSingleton('sales/order');
$order->loadByIncrementId('12345');
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true);
$order->save();
order-status
Bob van Luijt
źródło
źródło
Odpowiedzi:
Niedozwolone jest ręczne ustawianie stanu zamówienia na „ukończone” i powinieneś otrzymywać ten wyjątek, gdy wywołujesz
setState
zamówienie ze stanem „zakończonym”:Powód tego jest prosty: stan „kompletny” (i status, ponieważ jest to jedyny stan o statusie „kompletny”) ma oznaczać, że zamówienie zostało całkowicie zrealizowane. Oznacza to, że został umieszczony, zafakturowany i wysłany do klienta.
Gdy zamówienie zostanie zafakturowane i wysłane, Magento automatycznie ustawi ten stan na zamówieniu.
Jeśli twój system płatniczy „nie zezwala” na status „ukończony”, nie ufałbym temu, zwłaszcza że jest zakodowany w ionCube. Jeśli jednak dzieje się tak dlatego, że obsługuje fakturowanie poza Magento, musisz ręcznie wygenerować fakturę „offline” dla zamówienia, aby Magento rozpoznał, że została opłacona.
Nie próbuj zmieniać siebie przez obejście problemu polegającego na tym, że zamówienia nie osiągają stanu ukończonego tak, jak powinny. Zamiast tego napraw rzeczywisty problem, upewniając się, że zamówienia są zarówno fakturowane, jak i wysyłane w Magento, tak aby zostały oznaczone przez system jako zrealizowane.
źródło
Aby zmienić stan:
Aby zmienić status:
I wtedy
$order->save();
Musisz zmienić stan za pomocą,
setData
aby uniknąć wyjątku informującego, że nie możesz ręcznie zadzwonićsetState
źródło
Spróbuj tego.
Działa dla mnie w moim projekcie.
źródło
źródło