Menu Close
    Convert your store into Magento Multi Vendor Marketplace

    Create Quote And Order Programmatically In Magento2

    Create Quote And Order Programmatically In Magento2

    Here we learn  how to create quote and order programmatically in  Magento2

    I’ll use following data for create quote and order

    $tempOrder=[
         'currency_id'  => 'USD',
         'email'        => '[email protected]', //buyer email id
         'shipping_address' =>[
    		    'firstname'	   => 'jhon', //address Details
    		    'lastname'	   => 'Deo',
                        'street' => 'xxxxx',
                        'city' => 'xxxxx',
    		    'country_id' => 'IN',
    		    'region' => 'xxx',
    		    'postcode' => '43244',
    		    'telephone' => '52332',
    		    'fax' => '32423',
    		    'save_in_address_book' => 1
                     ],
       'items'=> [ //array of product which order you want to create
                  ['product_id'=>'1','qty'=>1],
                  ['product_id'=>'2','qty'=>2]
                ]
    ];

    I’ll write order create function in module helper file

    <?php
    namespace YourNameSpace\ModuleName\Helper;
    
    class Data extends \Magento\Framework\App\Helper\AbstractHelper
    {
       /**
        * @param Magento\Framework\App\Helper\Context $context
        * @param Magento\Store\Model\StoreManagerInterface $storeManager
        * @param Magento\Catalog\Model\Product $product,
        * @param Magento\Quote\Api\CartRepositoryInterface $cartRepositoryInterface,
        * @param Magento\Quote\Api\CartManagementInterface $cartManagementInterface,
        * @param Magento\Customer\Model\CustomerFactory $customerFactory,
        * @param Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
        * @param Magento\Sales\Model\Order $order
        */
        public function __construct(
            \Magento\Framework\App\Helper\Context $context,
            \Magento\Store\Model\StoreManagerInterface $storeManager,
            \Magento\Catalog\Model\Product $product,
            \Magento\Quote\Api\CartRepositoryInterface $cartRepositoryInterface,
            \Magento\Quote\Api\CartManagementInterface $cartManagementInterface,
            \Magento\Customer\Model\CustomerFactory $customerFactory,
            \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
            \Magento\Sales\Model\Order $order
        ) {
            $this->_storeManager = $storeManager;
            $this->_product = $product;
            $this->cartRepositoryInterface = $cartRepositoryInterface;
            $this->cartManagementInterface = $cartManagementInterface;
            $this->customerFactory = $customerFactory;
            $this->customerRepository = $customerRepository;
            $this->order = $order;
            parent::__construct($context);
        }
    
        /**
         * Create Order On Your Store
         * 
         * @param array $orderData
         * @return array
         * 
        */
        public function createMageOrder($orderData) {
            $store=$this->_storeManager->getStore();
            $websiteId = $this->_storeManager->getStore()->getWebsiteId();
            $customer=$this->customerFactory->create();
            $customer->setWebsiteId($websiteId);
            $customer->loadByEmail($orderData['email']);// load customet by email address
            if(!$customer->getEntityId()){
            	//If not avilable then create this customer 
                $customer->setWebsiteId($websiteId)
                        ->setStore($store)
                        ->setFirstname($orderData['shipping_address']['firstname'])
                        ->setLastname($orderData['shipping_address']['lastname'])
                        ->setEmail($orderData['email']) 
                        ->setPassword($orderData['email']);
                $customer->save();
            }
            
            $cartId = $this->cartManagementInterface->createEmptyCart(); //Create empty cart
            $quote = $this->cartRepositoryInterface->get($cartId); // load empty cart quote
            $quote->setStore($store);
          	// if you have allready buyer id then you can load customer directly 
            $customer= $this->customerRepository->getById($customer->getEntityId());
            $quote->setCurrency();
            $quote->assignCustomer($customer); //Assign quote to customer
    
            //add items in quote
            foreach($orderData['items'] as $item){
                $product=$this->_product->load($item['product_id']);
                $product->setPrice($item['price']);
                $quote->addProduct($product, intval($item['qty']));
            }
    
            //Set Address to quote
            $quote->getBillingAddress()->addData($orderData['shipping_address']);
            $quote->getShippingAddress()->addData($orderData['shipping_address']);
    
            // Collect Rates and Set Shipping & Payment Method
    
            $shippingAddress=$quote->getShippingAddress();
            $shippingAddress->setCollectShippingRates(true)
                            ->collectShippingRates()
                            ->setShippingMethod('freeshipping_freeshipping'); //shipping method
            $quote->setPaymentMethod('checkmo'); //payment method
            $quote->setInventoryProcessed(false); //not effetc inventory
    
            // Set Sales Order Payment
            $quote->getPayment()->importData(['method' => 'checkmo']);
            $quote->save(); //Now Save quote and your quote is ready
    
            // Collect Totals
            $quote->collectTotals();
    
            // Create Order From Quote
            $quote = $this->cartRepositoryInterface->get($quote->getId());
            $orderId = $this->cartManagementInterface->placeOrder($quote->getId());
            $order = $this->order->load($orderId);
           
            $order->setEmailSent(0);
            $increment_id = $order->getRealOrderId();
            if($order->getEntityId()){
                $result['order_id']= $order->getRealOrderId();
            }else{
                $result=['error'=>1,'msg'=>'Your custom message'];
            }
            return $result;
        }
    }
    
    ?>

    Now using this method you can crate quote and order in magento2 programmatically.
    Thanks 🙂 .

    . . .
    Discuss on Helpdesk

    Leave a Comment

    Your email address will not be published. Required fields are marked*


    18 comments

  • vivek singh
    how to order products with custom options .
    • Webkul Support
      Hi Vivek,
      Thanks for your query, for sure we will update it in our future blogs.
  • Guhan Seenivasagam
    Orders were successfully imported. But the order items were not taken properly. It takes only the last item from item’s array. However quantity calculates properly. Why is it happening?
  • Rob Conings
    @disqus_dNfTZE7fUf:disqus I’m currently doing this for another customer. Are you intrested in outsourcing this ?
  • VijayaLakshmi M
    Where to insert this code and how to call, please show me some example.

    And i need an assistance in get shipping method process in Rest API in magento2.1.6
    If you are interest, pls let me .. and mail me

    thanks in advance

    – vijikannan

    • Webkul Support
      Thanks for the contact. For any requirement, you can contact us at [email protected]
  • Rustam Zinnatullin
    What is the use of `$quote->setInventoryProcessed(false)`?
    I guess `InventoryProcessed` is false by default, because inventory wasn’t processed. It’ll be processed in `submit` operation.
  • Ankit Shah
    Can we create order with product’s Manage Stock -> No?
  • Phuong LÊ
    L:65 $quote->assignCustomer($customer);
    This method required a MagentoCustomerApiDataCustomerInterface param.
    Here you give MagentoCustomerModelCustomer . It should not work imo.
  • Mohammad Mujassam
    tried the code but unable to add multiple items, instead its adding quantity for only one product.
    please suggest
  • Azher Uddin Farooqi
    Hi,

    In which table will I find the quote and order entry ?

    Thanks.

  • Niteen Barde
    Not able to use “MagentoQuoteModelQuoteFactory $quote” as QuoteFactory is deprecated in magento 2.1. So what is an alternate option to use this?
    • Kirti Nariya
      Hi Niteen,
      I have found same issue. Did found any solution?

      Thanks!

  • Shinichi
    Thanks
    How i can add the disscount?
  • poongudivanan
    HI i have tried this code, We found the issues in cart item.

    run the Order item with 2 products but it adding only one item added Quote and order.

    Kindly advice.

    • Mohammad Mujassam
      @poongudivanan:disqus did you get some solution for adding the multiple products
      • Kirti Nariya
        Hi Mohammad Mujassam,

        I have found same issue. Did found any solution?

        Thanks!

  • Back to Top