2012-01-18 6 views
7

Tôi đang cố đánh dấu một lệnh "Đang xử lý" là Hoàn thành khi tôi nhận được phản hồi nhất định từ dịch vụ của bên thứ ba. Tôi đã có tất cả mọi thứ thiết lập cho điều này, nhưng vấn đề duy nhất là các đơn đặt hàng đang ở trong trạng thái xử lý.Đánh dấu một trật tự Magento là hoàn thành theo lập trình

tôi là tạo ra một hóa đơn (Tôi không nghĩ rằng tôi cần điều này mặc dù, như mỗi mục được đánh dấu là "hóa đơn" trong backend Magento) và một lô hàng như vậy:

$order = Mage::getModel('sales/order')... (etc) 
$shipment = $order->prepareShipment($quantities); 
$shipment->register(); 
$shipment->setOrder($order); 
$shipment->save(); 

$invoice = $order->prepareInvoice($quantities); 
$invoice->register(); 
$invoice->setOrder($order); 
$invoice->save(); 

này doesn dường như không làm điều đó mặc dù - Tôi không nhận được lỗi nào từ mã này, nhưng thứ tự vẫn là xử lý. Trong chương trình phụ trợ, tôi vẫn có thể thấy nút "Giao hàng" ở đầu đơn đặt hàng và mỗi mục nằm trong trạng thái "được lập hóa đơn".

Mọi mẹo sẽ được đánh giá cao.

Trả lời

5

Bạn có thể xem this article (bằng tiếng Nga).

Đây là mã từ bài viết:

$order = $observer->getEvent()->getOrder(); 

if (!$order->getId()) { 
    return false; 
} 

if (!$order->canInvoice()) { 
    return false; 
} 

$savedQtys = array(); 
$invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice($savedQtys); 
if (!$invoice->getTotalQty()) { 
    return false; 
} 
$invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE); 
$invoice->register(); 

$invoice->getOrder()->setCustomerNoteNotify(false); 
$invoice->getOrder()->setIsInProcess(true); 

$transactionSave = Mage::getModel('core/resource_transaction') 
    ->addObject($invoice) 
    ->addObject($invoice->getOrder()); 

$transactionSave->save(); 
+0

Cảm ơn, mã trong bài viết đã làm các trick sau khi tôi thay đổi để cho một lô hàng chứ không phải hóa đơn. – gregdev

+0

Thật không may, liên kết đã bị hỏng. – Mike

+0

Sẽ thực sự tốt đẹp khi có liên kết được cập nhật. archive.org vẫn có phiên bản liên kết trong trường hợp ai đó quan tâm. http://web.archive.org/web/20110414102634/http://snowcore.net/magento-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0 % BC% D0% BC% D0% BD% D0% B0% D1% 8F-% D0% B0% D0% BA% D1% 82% D0% B8% D0% B2% D0% B0% D1% 86% D0% B8% D1% 8F-% D0% B7% D0% B0% D0% BA% D0% B0% D0% B7% D0% B0. Sử dụng google chrome để nhận bản dịch. – shaune

16

Hãy thử

$order->setStateUnprotected('complete', 
    'complete', 
    'Order marked as complete automatically', 
    false); 

Phương pháp này là trong app/code/local/Mage/Sales/Model/Order.php (trong v1.6.1)

938: public function setStateUnprotected($state, $status = false, $comment = '', $isCustomerNotified = null) 

Trong Magento 1.7.0.0 Phương pháp này đã được gỡ bỏ. Hãy thử thay thế này:

$order->setData('state', "complete"); 
    $order->setStatus("complete"); 
    $history = $order->addStatusHistoryComment('Order marked as complete automatically.', false); 
    $history->setIsCustomerNotified(false); 
    $order->save(); 
+0

Cảm ơn bạn đã trả lời. Điều này dường như không có bất kỳ tác dụng trong Magento 1.4 – gregdev

+0

Threw lỗi, 'Gọi cho một thành viên chức năng getMethodInstance() trên một đối tượng không' trong 1.7.0.2 – jfreak53

2

tôi đang làm điều này theo cách đó:

$order->setState('complete', true, $this->__('Your Order History Message Here.')) 
     ->save(); 
+3

Cảm ơn bạn đã phản hồi. Điều này đưa ra lỗi "Trạng thái đơn hàng" hoàn thành "không được đặt thủ công." – gregdev

0

Magento sẽ tự động đánh dấu một thứ tự như hoàn chỉnh nếu:

  • Thanh toán đã được thực hiện.
  • Hóa đơn tồn tại.
  • Lô hàng tồn tại.

Nếu bạn không thể làm điều đó, hãy thử tạo 'trạng thái' tùy chỉnh và đặt điều đó. Trong thời gian chờ đợi, để đặt đơn đặt hàng để xử lý, hãy thử cách này:

Nên hoạt động không có lỗi. Thử nghiệm trong Magento 1.7.0.2

0

Trong trường hợp của tôi, tôi cần người dùng cuối xem được hoàn thành trong lưới thứ tự, nhưng trạng thái đơn đặt hàng thực sự không có sự khác biệt. Vì vậy, tôi đã đi đến

Hệ thống-> Trạng thái đơn hàng Tạo trạng thái mới được gọi là Đã hoàn thành (lưu ý d để dễ phân biệt) Chỉ định trạng thái đó cho trạng thái Đang xử lý/đang chờ xử lý.

Điều này làm việc cho khách hàng của chúng tôi - nhưng sẽ không hoạt động nếu bạn phụ thuộc nhiều vào trạng thái đơn đặt hàng (Khác với trạng thái đơn đặt hàng).

1

Mã cho đơn đặt hàng xử lý theo chương trình. Có thể được đặt vào sự kiện thành công hoặc cron

$order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId); 

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

$history = $order->addStatusHistoryComment('Order is complete', false); 
$history->setIsCustomerNotified(false); 

$order->save();