我如何将订单分成两个不同的部分(一个用于可下载,第二个用于物理)并立即授权总量并在订购时捕获可下载的产品数量,并在产品准备好时从管理面板手动物理捕获装运。
有谁能够帮我.............
先谢谢了
我如何将订单分成两个不同的部分(一个用于可下载,第二个用于物理)并立即授权总量并在订购时捕获可下载的产品数量,并在产品准备好时从管理面板手动物理捕获装运。
有谁能够帮我.............
先谢谢了
您需要在方法OnePageController
下创建一个自定义事件(如果您使用的是 Onepage 结帐)saveOrderAction()
。
并使用以下代码从当前购物车中删除商品并为实体产品创建新订单。
class CompanyName_ModuleName_Model_Order extends Mage_Core_Model_Abstract {
public function createOrder() {
$quoteID = Mage::getSingleton("checkout/session")->getQuote()->getId();
$quote = Mage::getModel("sales/quote")->load($quoteID);
foreach($quote->getAllItems() as $item){
$itemId = $item->getId();
$productId = $item->getProductId();
if(put your condition here){
/* remove the item fro which need to split the order */
$quote->removeItem($itemId)->save();
}
}
$id = Mage::getSingleton('customer/session')->getCustomer()->getId();
$customer = Mage::getModel('customer/customer')->load($id);
$transaction = Mage::getModel('core/resource_transaction');
$storeId = $customer->getStoreId();
$reservedOrderId = Mage::getSingleton('eav/config')->getEntityType('order')->fetchNewIncrementId($storeId);
$order = Mage::getModel('sales/order')
->setIncrementId($reservedOrderId)
->setStoreId($storeId)
->setQuoteId(0)
->setGlobal_currency_code('USD')
->setBase_currency_code('USD')
->setStore_currency_code('USD')
->setOrder_currency_code('USD');
/* set Customer data */
$order->setCustomer_email($customer->getEmail())
->setCustomerFirstname($customer->getFirstname())
->setCustomerLastname($customer->getLastname())
->setCustomerGroupId($customer->getGroupId())
->setCustomer_is_guest(0)
->setCustomer($customer);
/* set Billing Address */
$billing = $customer->getDefaultBillingAddress();
$billingAddress = Mage::getModel('sales/order_address')
->setStoreId($storeId)
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING)
->setCustomerId($customer->getId())
->setCustomerAddressId($customer->getDefaultBilling())
->setCustomer_address_id($billing->getEntityId())
->setPrefix($billing->getPrefix())
->setFirstname($billing->getFirstname())
->setMiddlename($billing->getMiddlename())
->setLastname($billing->getLastname())
->setSuffix($billing->getSuffix())
->setCompany($billing->getCompany())
->setStreet($billing->getStreet())
->setCity($billing->getCity())
->setCountry_id($billing->getCountryId())
->setRegion($billing->getRegion())
->setRegion_id($billing->getRegionId())
->setPostcode($billing->getPostcode())
->setTelephone($billing->getTelephone())
->setFax($billing->getFax());
$order->setBillingAddress($billingAddress);
$shipping = $customer->getDefaultShippingAddress();
$shippingAddress = Mage::getModel('sales/order_address')
->setStoreId($storeId)
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
->setCustomerId($customer->getId())
->setCustomerAddressId($customer->getDefaultShipping())
->setCustomer_address_id($shipping->getEntityId())
->setPrefix($shipping->getPrefix())
->setFirstname($shipping->getFirstname())
->setMiddlename($shipping->getMiddlename())
->setLastname($shipping->getLastname())
->setSuffix($shipping->getSuffix())
->setCompany($shipping->getCompany())
->setStreet($shipping->getStreet())
->setCity($shipping->getCity())
->setCountry_id($shipping->getCountryId())
->setRegion($shipping->getRegion())
->setRegion_id($shipping->getRegionId())
->setPostcode($shipping->getPostcode())
->setTelephone($shipping->getTelephone())
->setFax($shipping->getFax());
$order->setShippingAddress($shippingAddress)
->setShipping_method('freeshipping')
->setShippingDescription('Free Shipping - Free');
/*set payment details here for example */
$orderPayment = Mage::getModel('sales/order_payment')
->setStoreId($storeId)
->setCustomerPaymentId(0)
->setMethod('cybersource_soap')
->setCcType('VI')
->setCcNumber('4111111111111111')
->setCcLast4('1111')
->setCcExpMonth('2')
->setCcExpYear('2013')
->setCcCid('123');
$order->setPayment($orderPayment);
/* let say, we have 2 products */
$subTotal = 0;
/* pass the product id and quantity here e.g. */
$products = array(
'2' => array(
'qty' => 1
)
);
foreach ($products as $productId => $product) {
$_product = Mage::getModel('catalog/product')->load($productId);
$rowTotal = $_product->getPrice() * $product['qty'];
$orderItem = Mage::getModel('sales/order_item')
->setStoreId($storeId)
->setQuoteItemId(0)
->setQuoteParentItemId(NULL)
->setProductId($productId)
->setProductType($_product->getTypeId())
->setQtyBackordered(NULL)
->setTotalQtyOrdered($product['qty'])
->setQtyOrdered($product['qty'])
->setName($_product->getName())
->setSku($_product->getSku())
->setPrice($_product->getPrice())
->setBasePrice($_product->getPrice())
->setOriginalPrice($_product->getPrice())
->setRowTotal($rowTotal)
->setBaseRowTotal($rowTotal);
$subTotal += $rowTotal;
$order->addItem($orderItem);
}
$order->setSubtotal($subTotal)
->setBaseSubtotal($subTotal)
->setGrandTotal($subTotal)
->setBaseGrandTotal($subTotal);
$transaction->addObject($order);
$transaction->addCommitCallback(array($order, 'place'));
$transaction->addCommitCallback(array($order, 'save'));
$transaction->save();
}
}
并且不要忘记根据您的配置等修改此代码。