문제

API를 통해 주문을 수행하는 시나리오가 있습니다. 이전에 논리가 인보이스 처리 프로세스에 연결되어 송장이 생성되면 이행 논리가 실행됩니다. API 오류가 발생한 경우 순서 속성이 설정되어 순서 그리드에 API 오류가 발생했음을 나타내는 API 오류가 발생했음을 나타냅니다.

이 지저분한 코드를 리팩토링하고 정리 한 후 "API 오류"열을 제거했습니다. 우리는 이행 프로세스를 시작할 때 주문 상태를 "진행중인 이행"또는 이와 유사하게 설정하고 있으며, 고객 서비스 부서에 오류가 있고 설명서가 필요하다는 오류가 있음을 나타 내기 위해 오류가 발생할 경우 순서가 유지되기를 바랬습니다. 개입은 이행을 다시 시도합니다.

우리는 프로그래밍 방식으로 "이행 실패"상태로 명령을 유지하려고 시도했지만 Magento는 주문을 완료하는 것으로 인해 작동하지 않았습니다. API 오류가 발생하면 "이행 실패"상태가 설정됩니다. 그러나 Magento는 여전히 주문을 완료합니다. 우리의 이행 기능이 sales_order_invoice_pay 이벤트를 듣고 있기 때문에 Invoice가 이미 작성 되었기 때문에 API 오류가 있더라도 Magento가 주문이 완료되었다고 가정합니다.

여기에 이미지 설명

질문은 다음과 같습니다. Magento는 주문을 완료하고 "이행 실패"상태로 남겨두고 수동으로 검토 할 수 있습니까?

지금까지 우리가 일어난 아이디어가 있습니다. + 부분적으로 송장 각 주문 항목은 성공합니다 (실제로이 작업을 수행하는 방법을 확신하지 못합니다) + Magento가 완료 한 후 프로그래밍 방식으로 상태를 변경하십시오. 불행히도 이것은 또한 주문이 완료된 후에도 보이지 않습니다. 수동으로 완료된 후에 상태를 변경할 수 없으면 프로그래밍 방식으로 우리가 할 수 없을 것으로 추측합니다. + API 오류 열을 되돌리십시오

우리가 뭔가를 간청하고 시나리오를위한 솔루션을 구현하는 것이 훨씬 간단해질 수 있기를 바랍니다.

도움이 되었습니까?

해결책

우리는 상태 "이행 오류"를 만들고 상태 완료에 할당되었습니다.우리는 주문이 모든 항목에 대해 실패한 경우 세션에서 "이행 오류"플래그를 설정합니다.checkout_onepage_controller_success_action 이벤트에 대한 이벤트 리스너를 만들어 "이행 오류"플래그를 확인하십시오.

/**
 * Set order status to Fulfillment Failed if an error flag is set in the session
 * Inspiration from: http://www.atwix.com/magento/auto-invoice-and-custom-order-status-upon-checkout/
 *
 * @param Varien_Event_Observer
 * @event checkout_onepage_controller_success_action
 */
public function checkFulfillmentErrors($observer)
{
    // Get order from observer
    $orderId = $observer->getEvent()->getOrderIds();
    $order = Mage::getModel('sales/order')->load($orderId);

    // Get and unset fulfillment errors flag from core session
    $fulfillmentErrors = Mage::getSingleton('core/session')->getFulfillmentErrors();
    Mage::getSingleton('core/session')->unsFulfillmentErrors();

    // Set status to Fulfillment Error(s) if flag was set in session
    if ($fulfillmentErrors) {
        //$order->setStatus('fulfillment_failed');
        $order->addStatusHistoryComment('Fulfillment failed for one or more items', 'fulfillment_errors');
        $order->save();
    }

    return $observer;
}
.

이 시점에서 Magento는 이미 완전한 상태로 주문을합니다.Magento가 "완료된"이제는 주문을 완료 한 "완료된"이후의 "이행 오류"상태를 설정합니다.

나는 주문 상태 기록이 Magento가 주문을 완료 한 것처럼 (이미 생성 된 송장이 있기 때문에) 최상의 솔루션이라고 생각하지 않는다.우리가 더 나은 해결책을 찾을 때까지는 지금해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top