บังคับให้คำสั่งซื้อเพื่อไปที่สถานะเสร็จสมบูรณ์


11

เรากำลังใช้โมดูลที่กำหนดเองที่ต้องการสถานะ: "สมบูรณ์" (ฉันไม่สามารถเปลี่ยนโมดูลได้เพราะมันใช้ ioncube)

นอกจากนี้เรายังใช้ระบบการชำระเงินที่ไม่มีตัวเลือกสถานะ: "สมบูรณ์"

ดังนั้นคำถามของฉันคือ: ฉันจะบังคับคำสั่งให้ไปที่สถานะสมบูรณ์ได้อย่างไร

PS: มันไม่ทำงาน:

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

ทางออกที่มีให้ที่นี่: magento.stackexchange.com/a/244601/15769มันเหมาะกับฉัน <br/> ฉันหวังว่ามันจะมีประโยชน์สำหรับทุกคนที่ใช้ Magento 1.9.2.4 <br/> ขอบคุณ @ ctrl-z ได้โปรด

คำตอบ:


12

ไม่อนุญาตให้ตั้งค่าสถานะการสั่งซื้อด้วยตนเองเป็น 'เสร็จสมบูรณ์' และคุณควรได้รับข้อยกเว้นนี้เมื่อคุณโทรsetStateสั่งซื้อด้วยสถานะ 'สมบูรณ์':

สถานะการสั่งซื้อ "สมบูรณ์" จะต้องไม่ถูกตั้งค่าด้วยตนเอง

เหตุผลนี้ง่ายมาก: สถานะ 'สมบูรณ์' (และสถานะเนื่องจากเป็นสถานะเดียวที่มีสถานะ 'สมบูรณ์') มีวัตถุประสงค์เพื่อระบุว่าคำสั่งซื้อได้รับการเติมเต็มแล้ว นั่นคือมันได้รับการวางใบแจ้งหนี้และจัดส่งให้กับลูกค้า

เมื่อใบสั่งซื้อได้รับใบแจ้งหนี้และจัดส่งแล้ววีโอไอพีจะตั้งสถานะนี้ตามคำสั่งซื้อโดยอัตโนมัติ

หากระบบการชำระเงินของคุณ "ไม่อนุญาต" สถานะ "เสร็จสมบูรณ์" ฉันจะไม่เชื่อถือโดยเฉพาะอย่างยิ่งเมื่อมีการเข้ารหัส ionCube อย่างไรก็ตามหากเป็นเพราะการจัดการการแจ้งหนี้นอก Magento คุณจะต้องสร้างใบแจ้งหนี้ "ออฟไลน์" ด้วยตนเองสำหรับการสั่งซื้อเพื่อที่ Magento จะรับรู้ว่าได้รับการชำระเงินแล้ว

อย่าพยายามเปลี่ยนแปลงตัวเองในระยะสั้นโดยแก้ไขปัญหาของคำสั่งซื้อที่ไม่ส่งผลกระทบต่อสถานะที่เสร็จสมบูรณ์ตามปกติ แต่ให้แก้ไขปัญหาจริงด้วยการทำให้แน่ใจว่าคำสั่งซื้อนั้นได้รับใบแจ้งหนี้และจัดส่งใน Magento เพื่อให้ระบบได้รับการทำเครื่องหมายว่าสมบูรณ์แล้ว


สิ่งนี้ไม่ตอบคำถาม ในขณะที่ใช้เหตุผลที่อยู่สิ่งนี้ไม่ควรทำ แต่นั่นก็ไม่ใช่ทั้งหมดสำหรับทุกสิ่ง ฉันเองได้รับสถานการณ์ที่ Magento ส่วนใหญ่สำหรับการประมวลผลคำสั่งถูกข้ามและคำสั่งซื้อต้องถูกตั้งค่าเป็นสถานะสมบูรณ์
Navarr

1
@Navarr จริง ๆ แล้ว ... ดูส่วนเกี่ยวกับการสร้างใบแจ้งหนี้ออฟไลน์ด้วยตนเองสำหรับการสั่งซื้อ ทำเช่นนั้นและคำสั่งจะย้ายให้เสร็จสมบูรณ์โดยไม่คำนึงถึงหน่วยประมวลผลการชำระเงินที่ใช้
davidalger

3
หรือคุณรู้ว่า: stackoverflow.com/a/8906785/43790
Navarr

2
@Navarr แน่นอนว่าสามารถเขียนโดยตรงไปยัง db ผ่าน SQL ได้เช่นกัน แต่นั่นก็ไม่ได้ปฏิเสธว่ามันเป็นสถานะที่ได้รับการป้องกันตามการใช้งานโมเดล คำตอบที่ดีที่สุดอย่าสุ่มสี่สุ่มห้าเพื่อ "ทำให้สำเร็จ x" โดยไม่ต้องพูดถึงเรื่องพื้นฐาน อย่างไรก็ตามนี่เป็นครั้งสุดท้ายที่ฉันจะแสดงความคิดเห็นที่นี่เกี่ยวกับเรื่องนี้
davidalger

Engin ตรวจสอบแสงไฟที่แผงหน้าปัดรถยนต์ ฉันไม่ทราบวิธีการแก้ไขปัญหา จากนั้นฉันก็ถอดฟิวส์ที่เปิดไฟเล็ก ๆ นั้น ฉันคิดว่าเครื่องยนต์ของฉันทำงานได้ดีในขณะนี้
Mohammed Joraid

0

ในการเปลี่ยนสถานะ:

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

วิธีเปลี่ยนสถานะ:

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

และจากนั้น $order->save();

คุณต้องเปลี่ยนสถานะการใช้setDataเพื่อหลีกเลี่ยงข้อยกเว้นที่บอกคุณว่าคุณไม่สามารถโทรด้วยตนเองได้setState


-3

ลองสิ่งนี้

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

มันเหมาะกับฉันในโครงการของฉัน ..


อ๊ะคุณได้ 'รีสตาร์ท' คำสั่งซื้อแล้วตั้งเป็น: ใหม่ -> รอดำเนินการ -> เสร็จสมบูรณ์หรือไม่
Bob van Luijt

ไม่ฉันโหลดคำสั่งซื้อแล้วกำหนดสถานะและสถานะใหม่ให้กับคำสั่งซื้อ
Kuldeep

นี่คือสถานะ / สถานะใหม่ / รอดำเนินการซึ่งไม่มีปัญหา ปัญหาที่แท้จริงคือวิธีการตั้งค่าให้ 'สมบูรณ์' ด้วยตนเอง
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);

ฉันจะกีดกันการใช้การดำเนินการ SQL โดยตรงและพึ่งพา Magento ORM
7ochem
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.