Memaksa pesanan untuk pergi ke status selesai


11

Kami menggunakan modul khusus yang memerlukan status: "selesai" (Saya tidak dapat mengubah modul karena menggunakan ioncube)

Kami juga menggunakan sistem pembayaran yang tidak menawarkan opsi status: "selesai"

Jadi pertanyaan saya adalah: Bagaimana saya bisa memaksa pesanan untuk pergi ke status selesai?

PS: Ini tidak berhasil:

$order = Mage::getSingleton('sales/order');
$order->loadByIncrementId('12345');
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE, true);
$order->save();

Solusi yang disediakan di sini: magento.stackexchange.com/a/244601/15769 Ini berfungsi untuk saya. <br/> Saya harap ini akan bermanfaat bagi siapa pun yang menggunakan Magento 1.9.2.4 <br/> Terima kasih @ ctrl-z mohon

Jawaban:


12

Ini tidak diizinkan untuk secara manual mengatur status pesanan ke 'selesai' dan Anda harus mendapatkan pengecualian ini saat Anda menelepon setStatepesanan dengan status 'lengkap':

Status Pesanan "selesai" tidak boleh diatur secara manual.

Alasannya sederhana: Status 'lengkap' (dan status, karena ini adalah satu-satunya negara dengan status 'lengkap') dimaksudkan untuk menunjukkan bahwa pesanan telah sepenuhnya diisi. Yaitu telah ditempatkan, ditagih dan dikirim ke pelanggan.

Setelah pesanan ditagih dan dikirimkan, Magento akan menetapkan keadaan ini pada pesanan secara otomatis.

Jika sistem pembayaran Anda "tidak mengizinkan" status 'lengkap', maka saya tidak akan mempercayainya, terutama dengan itu yang disandikan ionCube. Namun, jika itu karena menangani faktur di luar Magento, maka Anda harus secara manual membuat faktur "Offline" untuk pesanan sehingga Magento akan mengetahui bahwa itu telah dibayar.

Jangan mencoba mengubah diri Anda dengan mengatasi masalah pesanan yang tidak sesuai dengan keadaan yang seharusnya. Alih-alih, perbaiki masalah yang sebenarnya dengan memastikan bahwa pesanan ditagih dan dikirimkan di Magento sehingga ditandai sebagai lengkap oleh sistem.


Ini tidak menjawab pertanyaan. Meskipun ini membahas alasan mengapa hal ini tidak boleh dilakukan, itu bukan masalah untuk semuanya. Saya sendiri telah memperoleh situasi di mana sebagian besar Magento untuk pemrosesan pesanan dilewati dan pesanan harus diatur ke status lengkap.
Navarr

1
@Navarr sebenarnya tidak ... lihat bagian tentang membuat faktur offline untuk pesanan secara manual. Lakukan itu, dan pesanan akan berpindah untuk menyelesaikan terlepas dari prosesor pembayaran yang digunakan.
davidalger


2
@ Navarr Tentu, orang bisa menulis langsung ke db via SQL juga, tapi itu tidak meniadakan itu menjadi negara yang dilindungi per implementasi model. Jawaban terbaik tidak secara membabi buta menjawab "mari kita capai x" tanpa membahas masalah yang mendasarinya. Bagaimanapun, ini adalah yang terakhir yang akan saya komentari di sini mengenai hal ini.
davidalger

Engin Periksa lampu yang menyala di dasbor mobil. Saya tidak tahu cara memperbaiki masalah ini. Saya kemudian melepas sekering yang menyalakan lampu kecil itu. Saya pikir mesin saya berfungsi dengan baik sekarang.
Mohammed Joraid

0

Untuk mengubah status:

$order->setData('state', Mage_Sales_Model_Order::STATE_COMPLETE);

Untuk mengubah status:

$order->addStatusToHistory(Mage_Sales_Model_Order::STATE_COMPLETE);

Lalu $order->save();

Anda harus mengubah status menggunakan setDatauntuk menghindari pengecualian yang memberi tahu Anda bahwa Anda tidak dapat menelepon secara manualsetState


-3

Coba ini.

$order = Mage::getModel('sales/order')->load(Mage::getSingleton('checkout/session')->getLastOrderId());
$order_id=$order->getData('entity_id');
$order2 = Mage::getModel('sales/order')->load($order_id); 
$order2->setData('state', "new");
    $order2->setStatus("pending");
$order2->save();

Ini bekerja untuk saya di proyek saya ..


Aha, jadi Anda sudah 'me-restart' pesanan dan kemudian mengaturnya ke: new-> pending-> selesai?
Bob van Luijt

tidak, saya memuat pesanan dan kemudian menetapkan status dan status baru ke pesanan.
Kuldeep

Ini status / status baru / tertunda, yang tidak ada masalah. Masalah sebenarnya adalah bagaimana mengaturnya menjadi 'selesai' secara manual.
7ochem

-3
$oResource = Mage::getSingleton('core/resource'); 

$oConnection = $oResource->getConnection('core_write'); 

$sSql = "UPDATE " . ' ' . $oResource->getTableName('sales_flat_order') .
        " SET status = '" . Mage_Sales_Model_Order::STATE_COMPLETE . "', state = '" . Mage_Sales_Model_Order::STATE_COMPLETE . "' WHERE
entity_id = " . $oOrder->getId();

$oConnection->query($sSql);

Saya akan mencegah penggunaan eksekusi SQL langsung dan bergantung pada implementasi Magento ORM.
7ochem
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.