如何取消订单并将产品还原到购物车而不删除购物车中的现有产品

时间:2015-03-20 10:55:39

标签: php magento

我有这种情况,

我试图下订单,去了支付网关我离开那个交易。

在我的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');
      } ?>

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

但是我的担心是没有从我的购物车中丢失任何产品我想在客户购物车中恢复这些产品。

有什么想法吗?

我怎样才能完成它?

1 个答案:

答案 0 :(得分: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;
        }
    }
}