所以,这是我的问题:
如果客户下了新订单并且他/她有一个带有延期交货商品的现有挂单,那么这两个订单必须合并。所以我在sales_model_service_quote_submit_before
事件中创建了一个观察者。我的想法是,在这个观察者中,我检查客户的电子邮件,并检查他/她是否有现有的挂单。如果存在这样的订单,我将旧订单的项目放在新订单中并删除/取消旧订单。这是我的功能:
public function salesQuoteSubmitBefore($observer){
$customerEmail = $observer->getQuote()->getData('customer_email');
$customer = Mage::getModel("customer/customer");
$customer->setWebsiteId(Mage::app()->getStore());
$customer->loadByEmail($customerEmail);
$oldOrder = Mage::getResourceModel('sales/order_collection')
->addFieldToSelect('increment_id')
->addFieldToFilter('customer_id', $customer->getId())
->addFieldToFilter('state', array('in' => array('new')))
->addFieldToFilter('status', array('in' => array('pending')))
->setOrder('created_at', 'desc')
->setPageSize(1);
$oldID = $oldOrder->getData();
if($oldID[0]['increment_id'] != '' && $oldID[0]['increment_id'] > 0){
$mergeOrder = false;
$order = Mage::getModel('sales/order')->loadByIncrementId($oldID[0]['increment_id']);
foreach($order->getAllItems() as $item){
$product = Mage::getModel('catalog/product')->load($item->getProduct()->getId());
if($product->getStockItem()->getQty() < 0){
$mergeOrder = true;
}
}
if($mergeOrder){
$newOrder = $observer->getOrder();
$quote = $newOrder->getQuote();
$tmp = array();
foreach($order->getAllItems() as $item){
$tmp[] = $item->getSku();
$product = Mage::getModel('catalog/product')->load($item->getProduct()->getId());
$qty = array('qty'=>$item->getQty());
$quote->addProduct($product, new Varien_object($qty));
}
foreach($quote->getAllAddresses() as $a){
$a->unsetData('cached_items_nonnominal');
$a->unsetData('cached_items_nominal');
}
$quote->setTotalsCollectedFlag(false)->collectTotals();
$quote->save();
$newOrder->setQuote($quote)->save();
$order->setState(Mage_Sales_Model_Order::STATE_CANCELED, true)->save();
//Mage::throwException('obs: '.json_encode($newOrder->getQuote()->getData()));
}
}
}
Mage:throwExeption打印新报价,所有都是正确的,数量,总数......如果我打印newOrder一切都是正确的!但是当下订单时,使用旧数据,因此新订单没有旧项目。
保存更改的订单/报价的内容或位置,以便将新数据用于订单创建?谢谢你的帮助!
答案 0 :(得分:0)
请尝试添加购物车,而不是在报价中添加产品。如下所示
$cart =Mage::getSingleton('checkout/cart');
$cart->addProduct($product, array('qty'=>$qty));
$cart->save();