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();
Bob van Luijt
sumber
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.

davidalger
sumber
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
3
atau, Anda tahu: stackoverflow.com/a/8906785/43790
Navarr
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

ctrl-z tolong
sumber
-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 ..

Kuldeep
sumber
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);
orang dgn nama yg tdk dikenal
sumber
Saya akan mencegah penggunaan eksekusi SQL langsung dan bergantung pada implementasi Magento ORM.
7ochem