1

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.

3
  • @richard i have already tried the code link that you had shared. But it not worked for me . Commented Nov 9, 2015 at 16:31
  • thanks vishwas i will try your shared code and let u know . Commented Nov 9, 2015 at 16:32
  • did the code worked if yes please aceppt the question Commented Nov 10, 2015 at 11:11

1 Answer 1

1

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.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.