I want to spilt the orders by product. If the customer place an order with the two products eg:- Product A and Product B in his orders then while checkout that specific order is split into two orders eg:- Product A in one order and Product B in second order.
- @richard i have already tried the code link that you had shared. But it not worked for me .Rahul– Rahul2015-11-09 16:31:24 +00:00Commented Nov 9, 2015 at 16:31
- thanks vishwas i will try your shared code and let u know .Rahul– Rahul2015-11-09 16:32:56 +00:00Commented Nov 9, 2015 at 16:32
- did the code worked if yes please aceppt the questionVishwas Bhatnagar– Vishwas Bhatnagar2015-11-10 11:11:21 +00:00Commented Nov 10, 2015 at 11:11
Add a comment |
1 Answer
You need to create a custom event in OnePageController (if you are using Onepage checkout) under saveOrderAction() method.
and use the below code to remove the item from current cart and create a new order for Product B.
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(); } } and don't forget to modify this code according your configuration etc.