Buộc một lệnh để đi đến trạng thái hoàn thành


11

Chúng tôi đang sử dụng một mô-đun tùy chỉnh yêu cầu trạng thái: "hoàn thành" (Tôi không thể thay đổi mô-đun vì nó sử dụng ioncube)

Chúng tôi cũng đang sử dụng một hệ thống thanh toán không cung cấp tùy chọn trạng thái: "hoàn thành"

Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể buộc một đơn đặt hàng để đi đến trạng thái hoàn thành?

PS: Điều này không hoạt động:

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

Giải pháp được cung cấp tại đây: magento.stackexchange.com/a/244601/15769 Nó hiệu quả với tôi. <br/> Tôi hy vọng rằng nó sẽ hữu ích cho bất kỳ ai sử dụng Magento 1.9.2.4 <br/> Cảm ơn @ ctrl-z xin vui lòng

Câu trả lời:


12

Bạn không được phép đặt thủ công trạng thái đơn hàng thành 'hoàn thành' và bạn sẽ nhận được ngoại lệ này khi bạn gọi setStatetheo đơn đặt hàng với trạng thái 'hoàn thành':

Trạng thái Đặt hàng "hoàn thành" không được đặt thủ công.

Lý do cho điều này rất đơn giản: Trạng thái 'hoàn thành' (và trạng thái, vì đó là trạng thái duy nhất có trạng thái 'hoàn thành') nhằm chỉ ra rằng một đơn hàng đã được điền đầy đủ. Tức là nó đã được đặt, lập hóa đơn và vận chuyển cho khách hàng.

Khi đơn hàng đã được lập hóa đơn và giao hàng, Magento sẽ tự động đặt trạng thái này trên đơn đặt hàng.

Nếu hệ thống thanh toán của bạn "không cho phép" trạng thái 'hoàn thành', thì tôi sẽ không tin tưởng nó, đặc biệt là nó được mã hóa ionCube. Tuy nhiên, nếu đó là vì nó xử lý việc lập hóa đơn bên ngoài Magento, thì bạn sẽ cần phải tạo hóa đơn "Ngoại tuyến" theo cách thủ công cho đơn đặt hàng để Magento nhận ra rằng nó đã được thanh toán.

Đừng cố gắng thay đổi bản thân bằng cách giải quyết vấn đề đơn hàng không đạt trạng thái hoàn thành như bình thường. Thay vào đó, hãy khắc phục sự cố thực tế bằng cách đảm bảo rằng các đơn đặt hàng được lập hóa đơn và vận chuyển trong Magento để chúng được hệ thống đánh dấu là hoàn thành.


Điều này không trả lời câu hỏi. Mặc dù nó giải quyết những lý do không nên làm, nhưng đó không phải là tất cả cho tất cả mọi thứ. Bản thân tôi đã có được một tình huống trong đó hầu hết Magento để xử lý đơn hàng bị bỏ qua và đơn hàng cần được đặt thành trạng thái hoàn chỉnh.
Navarr

1
@Navarr thực sự nó ... xem phần về cách tạo thủ công hóa đơn ngoại tuyến cho đơn đặt hàng. Làm điều đó và đơn hàng sẽ chuyển sang hoàn thành bất kể bộ xử lý thanh toán đang được sử dụng.
davidalger

3
hoặc, bạn biết: stackoverflow.com/a/8906785/43790
Navarr

2
@Navarr Chắc chắn, người ta cũng có thể viết trực tiếp vào db thông qua SQL, nhưng điều đó không phủ nhận nó là trạng thái được bảo vệ theo triển khai mô hình. Các câu trả lời tốt nhất không trả lời một cách mù quáng cho "hãy hoàn thành x" mà không giải quyết vấn đề cơ bản. Nhưng dù sao, đây là lần cuối cùng tôi sẽ bình luận ở đây về vấn đề này.
davidalger

Engin Kiểm tra đèn sáng trên bảng điều khiển của xe. Tôi không biết làm thế nào để khắc phục vấn đề. Sau đó tôi tháo cầu chì bật đèn nhỏ đó ra. Tôi nghĩ rằng động cơ của tôi đang làm việc tốt bây giờ.
Mohammed Joraid 17/2/18

0

Để thay đổi trạng thái:

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

Để thay đổi trạng thái:

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

Và sau đó $order->save();

Bạn phải thay đổi trạng thái bằng cách sử dụng setDatađể tránh ngoại lệ cho bạn biết rằng bạn không thể gọi thủ côngsetState


-3

Thử đi.

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

Nó làm việc cho tôi trong dự án của tôi ..


Aha, vậy là bạn đã 'khởi động lại' đơn hàng rồi đặt thành: mới-> đang chờ xử lý-> đã hoàn tất?
Bob van Luijt

không tôi đã tải đơn đặt hàng và sau đó gán trạng thái và trạng thái mới cho đơn đặt hàng.
Kuldeep

Đây là trạng thái / trạng thái mới / đang chờ xử lý, không có vấn đề gì. Vấn đề thực tế là làm thế nào để đặt nó thành 'hoàn thành' theo cách thủ công.
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);

Tôi sẽ không khuyến khích việc sử dụng thực thi SQL trực tiếp và dựa vào triển khai ORM Magento.
7ochem
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.