주문을 견적으로 변환하고 현재 카트로로드


10

주문을 견적으로 변환 할 수는 있지만 현재 장바구니에로드 할 수 없습니다. 몇 가지 방법을 시도했지만 아무 소용이 없습니다. 가장 간단한 방법은 다음과 같습니다.

$_quote = Mage::getModel('sales/convert_order')->toQuote($order)->save();
$_quote = Mage::getModel('sales/quote')->load($_quote->getId());
$_quote->setIsActive(true)->save();

견적 ID를 얻을 수 있었지만 견적 객체가 현재 장바구니에로드되지 않습니다.

나는 또한 시도했다

$_quote = Mage::getModel('sales/convert_order')->toQuote($order)->save();
$_quote = Mage::getModel('sales/quote')->load($_quote->getId());

if ($_checkoutQuote->getId() != $_quote->getId() && $_quote->getId()) {
    $_checkoutQuote->merge($_quote)->save();
    Mage::getModel('checkout/session')
                    ->setQuote($_checkoutQuote)
                    ->init();
    Mage::getSingleton('checkout/session')->getQuote()->setIsActive(true)->save();
}

비슷한 접근법이지만 여전히 따옴표를로드하지 않습니다. 대단히 감사합니다!

답변:


9

user

아래 코드를 사용하십시오. 도움이 될 것입니다.

마법사 :: getSingleton ( 'checkout / session')-> setQuoteId ($ _ quote-> getId ());

아래의 코드를 사용하여 견적을 주문하십시오 :

   $quote = Mage::getModel('sales/quote')->load($order->getQuoteId());
    if ($quote->getId()) {
        $quote->setIsActive(1)
            //->setReservedOrderId(null)
            ->save();
        Mage::getSingleton('checkout/session')
            ->replaceQuote($quote);
           // ->unsLastRealOrderId();
    }

여기에 과정 :

현재 견적 받기

$currenQuoteId=Mage::getSingleton('checkout/session')->getQuoteId();

주문을 견적으로 변환

$OrderQuote = Mage::getModel('sales/quote')->load($order->getQuoteId());

활성 견적

if ($OrderQuote>getId()) {
    $OrderQuote>setIsActive(1)
        //->setReservedOrderId(null)
        ->save();
}

현재 견적을 병합하고 역 견적을 주문하십시오

if ($OrderQuote->getId() && $currenQuoteId != $OrderQuote->getId()) {
    if ($currenQuoteId) {
    $OrderQuote->merge(Mage::getSingleton('checkout/session')->getQuote())
        ->collectTotals()
        ->save();
    }

결제 세션에 견적 설정

Mage::getSingleton('checkout/session')->setQuoteId($OrderQuote->getId());

 if (Mage::getSingleton('checkout/session')->_quote) {
            Mage::getSingleton('checkout/session')->delete();
        }
       Mage::getSingleton('checkout/session') = $OrderQuote;
    } else {
        Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress();
        Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress();
        Mage::getSingleton('checkout/session')->getQuote()->setCustomer(Mage::getSingleton('customer/session')->getCustomer())
            ->setTotalsCollectedFlag(false)
            ->collectTotals()
            ->save();
    }

와이? 무슨 일이야? 아무도 우리에게 말 해주세요?
Keyul Shah

그것이 어떻게 다운 보트되었는지 모릅니다. 그러나 나는 그것이 작동하는지 확인했지만 불행히도 트릭을 수행하지 않았습니다.
user1240207

@KeyulShah, 나는 왜 어떤 사람들이 어떤 이유없이 투표를 중단했는지 몰랐습니다
Amit Bera

@AmitBera : 다음에 더 나은 행운을 빕니다.
Keyul Shah

3

이전 답변은 DB에서 여전히 견적을 사용할 수있는 경우에만 작동합니다. 더 이상 그렇지 않은 상황이 발생 하여이 코드가 작동하지 않습니다.

$quote = Mage::getModel('sales/quote')->load($order->getQuoteId());
$quote->getId() => This is empty, in fact the whole model is empty!

대신, 메소드를 Mage_Sales_Model_Convert_Order사용하여 기존 주문을 다시 새로운 견적으로 변환 할 수 있습니다 toQuote(Mage_Sales_Model_Order $order). 주문을 입력으로 받아 새 견적 오브젝트를 출력합니다.

청구서 / 배송지 주소, 품목 등을 변환하기 위해 추가 함수를 호출해야합니다. 각 객체에 대해이 클래스에서 함수를 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.