Custom order creation | Magento create order on fly
Custom order creation using script is one of the tricky part of the magento development but some tweaks on magento will allow you to place order programmaticaly, its something like a custom checkout in single file, I have created the script to place order programmaticaly, it will just place the order as a sample in backed, you can add everything like billing address, shipping address, custom shipping methods and magento payment method also which will allow you to place order through little magento customization , just use below script, which is flexible in use, you just need to pass product id, website id, store id, billing address, shipping methods, payment method if applicable.. That all, just place order and it will be visible in admin order list as well as a mail will be sent to the customer who place order.
$id=1; // get Customer Id
$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(\'flatrate_flatrate\')
->setShippingDescription($this->getCarrierName(\'flatrate\'));
$orderPayment = Mage::getModel(\'sales/order_payment\')
->setStoreId($storeId)
->setCustomerPaymentId(0)
->setMethod(\'purchaseorder\')
->setPo_number(\' - \');
$order->setPayment($orderPayment);
// let say, we have 2 products
$subTotal = 0;
$products = array(
\'1001\' => array(
\'qty\' => 1
),
\'1002\' ->array(
\'qty\' => 3
),
);
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[\'rqty\'])
->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();














Excellent blog! I genuinely love how it’ s easy on my eyes as marvellously as the info are ooze written. I am wondering how I may be notified whenever a new brief has been made. I suffer with subscribed to your rss gratified which should do the frolic! Get a exacting day!
As I am not a programmers, I am not able to understand it that effectively. But I am using Magento for nearly 3 years now. Thanks for this information. Hope this will be useful for me.