【问题标题】:How to Cancel an Order and Restore Products into Cart without removing existing products in Cart如何在不删除购物车中现有产品的情况下取消订单并将产品恢复到购物车
【发布时间】:2015-03-20 10:55:39
【问题描述】:

我有这样的情况,

我试图下订单,去了支付网关我就这样离开了那笔交易。

在我的 Magento 中,订单状态为待付款,我在管理面板中创建了一个按钮,单击该按钮会发生以下事情。

我想将这些产品恢复到客户购物车中,而不从购物车中删除任何其他产品(如果有的话)。

请查看我的代码。

      <?php $order_id = 224;
      $_order = Mage::getModel('sales/order')->load($order_id);
      if (!$_order->isCanceled() && !$_order->hasInvoices()) {
          $_order->cancel();
          $_order->addStatusToHistory(Mage_Sales_Model_Order::STATE_CANCELED, $message);
          $_order->save();
          $quote = Mage::getModel('sales/quote')->load($_order->getQuoteId());
          $session1 = Mage::getSingleton('checkout/session');
          if ($quote->getId()) {
             $quote->setIsActive(true)->save();
             $session1->setQuoteId($_order->getQuoteId());
          }
          Mage::getSingleton('core/session')->setFailureMsg('order_failed');
          Mage::getSingleton('checkout/session')->setFirstTimeChk('0');
      } ?>

由于此代码,如果我的购物车中有任何产品,我将从购物车中取出这些产品。

但我担心的是不会丢失购物车中的任何产品,我想恢复客户购物车中的这些产品。

有什么想法吗?

我怎样才能完成它?

【问题讨论】:

    标签: php magento


    【解决方案1】:

    您可以将此作为独立文件使用,也可以在您希望复制现有客户报价并将其设置为对该客户有效的任何地方调用其方法:

    require_once( 'app/Mage.php' );
    
    umask(0);
    Mage::app('default');
    
    $sCustomerId = 1;
    $oCustomer   = Mage::getModel( 'customer/customer' )->load( $sCustomerId );
    $sStoreId    = $oCustomer->getData( 'store_id' );
    $oQuotes     = Mage::getModel( 'sales/quote' )->getCollection();
    $oQuotes->addFieldToFilter( 'customer_id', $sCustomerId );
    foreach( $oQuotes as $oQuote )
    {
        var_dump( $oQuote->getData( 'is_active' ) );
        $oOrders = Mage::getModel( 'sales/order' )->getCollection();
        $oOrders->addFieldToFilter( 'quote_id', $oQuote->getId() );
        var_dump( $oOrders->count() );
    
        foreach( $oOrders as $oOrder )
        {
            // If an order is in status...
            if( $oOrder->getData( 'status' ) == 'pending' )
            {
                // Copy the quote over and make it active for your customer.
                $oRevertedQuote = Mage::getModel( 'sales/quote' );
                $oRevertedQuote->merge( $oQuote );
                $oRevertedQuote->setStoreId( $sStoreId );
                $oRevertedQuote->setData( 'is_active', 1 );
                $oRevertedQuote->assignCustomer( $oCustomer );
                $oRevertedQuote->collectTotals()->save();
    
                // Limit to one conversion at a time?
                break 2;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 2022-08-23
      • 2022-06-16
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多