将magento管理报价转换为多地址订单
假设我有一个来自管理员创建订单的报价,所有产品都已输入,我如何编写一些代码来添加多个发货地址并将商品分配到该地址 我有一些代码在工作,它是基于前端多芯片模型的。我遇到的问题是添加多个地址并将项目分配给报价。如果我有一个标准报价,我如何添加多个地址 我已经试过了:将magento管理报价转换为多地址订单,magento,Magento,假设我有一个来自管理员创建订单的报价,所有产品都已输入,我如何编写一些代码来添加多个发货地址并将商品分配到该地址 我有一些代码在工作,它是基于前端多芯片模型的。我遇到的问题是添加多个地址并将项目分配给报价。如果我有一个标准报价,我如何添加多个地址 我已经试过了: $address = Mage::getModel('customer/address')->load($addressID); $quote->addShippingAddress($address); 似乎只有一个
$address = Mage::getModel('customer/address')->load($addressID);
$quote->addShippingAddress($address);
似乎只有一个地址
整个功能:
public function createMultiOrders() {
// print_r($_POST);
$items = $_POST['item'];
$itemsByAddress = array();
$billingInfo = array();
$session = Mage::getSingleton('adminhtml/session_quote');
$quote = $session->getQuote();
//first we are reorganizing the data provided by javascript into an array based on address ID's
foreach ($items as $key => $item) {
$addID = $item['addressID'];
$itemID = $key;
$qty = $item['qty'];
$itemsByAddress[$addID][] = array('itemID' => $itemID, 'qty' => $qty);
}
// print_r($itemsByAddress);
//now that we have an array of items, seperated by which addressid they goto, we can create the order for each address
foreach ($itemsByAddress as $addressID => $items) {
$address = Mage::getModel('customer/address')->load($addressID);
$quote->addShippingAddress($address);
echo"<br/>address id is $addressID, items are: <br/>";
foreach ($items as $item) {
// $address->addItem($_item);
///add items to order
// echo"id before is $item<br/>";
$itemID = explode('-_', $item['itemID']);
$itemID = $itemID[0];
$qty = $item['qty'];
echo "itemid is $itemID, qty is " . $qty . " <br/><br/><br/><br/>";
}
}
//print_r(get_class_methods($quote));
$shippingAddresses = $quote->getAllShippingAddresses();
try {
foreach ($shippingAddresses as $address) {
$order = $this->_prepareOrder($address);
$orders[] = $order;
Mage::dispatchEvent(
'checkout_type_multishipping_create_orders_single', array('order' => $order, 'address' => $address)
);
}
foreach ($orders as $order) {
$order->place();
$order->save();
if ($order->getCanSendNewEmailFlag()) {
$order->sendNewOrderEmail();
}
$orderIds[$order->getId()] = $order->getIncrementId();
}
Mage::getSingleton('core/session')->setOrderIds($orderIds);
Mage::getSingleton('checkout/session')->setLastQuoteId($quote->getId());
$quote->setIsActive(false)->save();
Mage::dispatchEvent('checkout_submit_all_after', array('orders' => $orders, 'quote' => $quote));
return $this;
} catch (Exception $e) {
Mage::dispatchEvent('checkout_multishipping_refund_all', array('orders' => $orders));
throw $e;
}
公共函数createMultiOrders(){
//打印(邮政美元);
$items=$_POST['item'];
$itemsByAddress=array();
$billingInfo=array();
$session=Mage::getSingleton('adminhtml/session_quote');
$quote=$session->getQuote();
//首先,我们根据地址ID将javascript提供的数据重新组织成一个数组
foreach($key=>$item的项目){
$addID=$item['addressID'];
$itemID=$key;
$qty=$item['qty'];
$itemsByAddress[$addID][]=数组('itemID'=>$itemID,'qty'=>$qty);
}
//打印地址($itemsByAddress);
//现在我们有了一个项目数组,按它们转到的地址ID分开,我们可以为每个地址创建订单
foreach($itemsByAddress作为$addressID=>$items){
$address=Mage::getModel('customer/address')->load($addressID);
$quote->addShippingAddress($address);
echo“
地址id为$addressID,项目为:
”;
foreach($items作为$item){
//$address->addItem($\项);
///向订单添加项目
//echo“前面的id是$item
”;
$itemID=explode('-\',$item['itemID']);
$itemID=$itemID[0];
$qty=$item['qty'];
echo“itemid是$itemid,qty是“$qty”。
;
}
}
//打印(获取类方法($quote));
$shippingAddresses=$quote->getAllShippingAddresses();
试一试{
foreach($shippingAddresses作为$address){
$order=$this->\u prepareOrder($address);
$orders[]=$order;
Mage::dispatchEvent(
“签出类型多发货创建订单单”,数组('order'=>$order,'address'=>$address)
);
}
foreach($orders作为$order){
$order->place();
$order->save();
如果($order->getCanSendNewEmailFlag()){
$order->sendNewOrderEmail();
}
$orderIds[$order->getId()]=$order->getIncrementId();
}
Mage::getSingleton('core/session')->setOrderIds($orderIds);
Mage::getSingleton('checkout/session')->setLastQuoteId($quote->getId());
$quote->setIsActive(false)->save();
Mage::dispatchEvent('checkout\u submit\u all\u after',数组('orders'=>$orders,'quote'=>$quote));
退还$this;
}捕获(例外$e){
Mage::dispatchEvent('checkout\u multishipping\u return\u all',数组('orders'=>$orders));
扔$e;
}
好的,我解决了这个问题,并成功地编写了一个脚本,将普通的管理订单转换为多地址订单。一直困扰我的一个错误是我加载管理报价的方式:
我是这样加载会话的
$session = Mage::getSingleton('adminhtml/session_quote');
应该是这样
$session = Mage::getModel('adminhtml/session_quote');
现在,将每个报价项分配到一个地址,最终代码如下所示:
$address = Mage::getModel('customer/address')->load($addressID);
echo"<br/>address id is $addressID<br/>";
echo"quote address not set, adding shipping address <br/>";
$quoteAddress = Mage::getModel('sales/quote_address')->importCustomerAddress($address);
$quote->addShippingAddress($quoteAddress);
$quoteAddressItem = $quoteAddress->getItemByQuoteItemId($quoteItem->getId());
if ($quoteAddressItem) {
echo"increasing item quantitiy for quote address<br/>";
// $quoteAddressItem->setQty((int) ($quoteAddressItem->getQty() + $qty));
} else {
echo"setting customer id for quote item<br/>";
$quoteItem->setCustomerAddressId($quoteAddress->getCustomerAddressId());
echo"adding item to quote address<br/>";
$quoteAddress->addItem($quoteItem)->setQuote($quote);
echo"adding item to quote collection<br/>";
if (!$quoteAddress->getItemsCollection()->getItemById($quoteItem->getId())) {
$quoteAddress->getItemsCollection()->addItem($quoteItem)->save();
}
$quoteAddress->setCollectShippingRates(TRUE);
$quoteAddress->collectShippingRates();
$quoteAddress->save();
$quoteItem->save();
$quote->save();
$address=Mage::getModel('customer/address')->load($addressID);
echo“
地址id为$addressID
”;
echo“未设置报价地址,添加发货地址
”;
$quoteAddress=Mage::getModel('sales/quote_address')->导入客户地址($address);
$quote->addShippingAddress($quoteAddress);
$QuotedAddressItem=$QuotedAddress->getItemByQuoteItemId($quoteItem->getId());
如果($quoteAddressItem){
回显“增加报价地址的项目数量
”;
//$QuotedDressItem->setQty((int)($QuotedDressItem->getQty()+$qty));
}否则{
echo“为报价项设置客户id
”;
$quoteItem->setCustomerAddressId($quoteAddress->getCustomerAddressId());
echo“将项目添加到报价地址
”;
$quoteAddress->addItem($quoteItem)->setQuote($quote);
echo“将项目添加到报价集合
”;
如果(!$quoteAddress->getItemsCollection()->getItemById($quoteItem->getId()){
$quoteAddress->getItemsCollection()->addItem($quoteItem)->save();
}
$quoteAddress->setCollectShippingRates(真);
$quoteAddress->collectShippingRates();
$quoteadress->save();
$quoteItem->save();
$quote->save();
}我只是想澄清一下,您实际上是在试图为管理员复制前端多地址订单功能吗?是的,没错。我实际上可以通过其他方式完成这项工作。我们将其作为一个扩展发布。该扩展为magento admin添加了多地址订单功能,但目前该功能不存在。@MSD您是否能够创建e此扩展?它是否也考虑购物车规则?我们是否可以有相同的地址,并且仍然按照我的情况将订单分为两部分?某些产品可以使用特定的装运方式装运,因此我需要有两个订单,每个订单具有单独的装运方式,但装运地址相同。