주문 완료 상태로 이동


11

상태가 필요한 사용자 지정 모듈을 사용하고 있습니다. "완료"(이온 큐브를 사용하므로 모듈을 변경할 수 없음)

또한 '완료'상태 옵션을 제공하지 않는 결제 시스템을 사용하고 있습니다.

내 질문은 : 주문을 상태 완료로 강제로 보내려면 어떻게해야합니까?

추신 : 이것은 작동하지 않습니다 :

$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 pls

답변:


12

주문 상태를 '완료'로 수동으로 설정할 수 없으며 setState'완료'상태의 주문 을 호출 할 때이 예외가 발생합니다 .

주문 상태 "완료"는 수동으로 설정하지 않아야합니다.

그 이유는 간단합니다. '완료'상태 (및 상태가 '완료'인 유일한 상태이므로 상태)는 주문이 완전히 채워 졌음을 나타냅니다. 즉, 고객에게 배송, 송장 발행 및 배송되었습니다.

주문이 송장 및 배송되면 Magento는 주문에서이 상태를 자동으로 설정합니다.

귀하의 지불 시스템이 '완료'상태를 "허용하지 않는"경우, 특히 ionCube로 인코딩 된 상태에서는 신뢰하지 않습니다. 그러나 Magento 외부에서 인보이스를 처리하고 있기 때문에 Magento가 지불 한 것을 인식 할 수 있도록 주문에 대한 "오프라인"송장을 수동으로 생성해야합니다.

정상적으로 완료된 상태에 도달하지 않는 주문의 문제를 해결하여 자신을 단기적으로 바꾸려고하지 마십시오. 대신, 주문이 시스템에 의해 완료된 것으로 표시되도록 주문이 송장 및 Magento로 발송되도록하여 실제 문제점을 수정하십시오.


이것은 질문에 대답하지 않습니다. 이것이 수행되어서는 안되는 이유를 다루지 만 모든 것을 포괄하는 것은 아닙니다. 주문 처리를 위해 대부분의 Magento를 건너 뛰고 주문을 완료 상태로 설정 해야하는 상황을 스스로 얻었습니다.
Navarr

1
@Navarr 실제로는 ... 주문에 대한 오프라인 송장 수동 생성에 대한 부분을 참조하십시오. 그렇게하면 사용중인 결제 프로세서에 관계없이 주문이 완료됩니다.
davidalger

3
또는, 당신은 알고 있습니다 : stackoverflow.com/a/8906785/43790
Navarr

2
@Navarr 물론, SQL을 통해 db에 직접 쓸 수도 있지만 모델 구현에 따라 보호되는 상태를 부정하지는 않습니다. 가장 좋은 답변은 근본적인 문제를 해결하지 않고 "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();

그것은 내 프로젝트에서 나를 위해 작동합니다 ..


Aha, 주문을 '다시 시작'한 다음 new-> pending-> completed?
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.