- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I want to create an order programmatically. My problem is when the qty i want is bigger than the magento stock.
The requested quantity for "xxx" is not available.
When quantity is avaible on stock this works well.
Is it possible to create order allowing more quantity than stock in magento?
- On backend i allow create orders when product stock quantity is below 0, on front end not.
$customer = Mage::getModel('customer/customer') ->setWebsiteId($websiteId) ->load($customer_id); $quote = Mage::getModel('sales/quote')->setStoreId($websiteId); $quote->assignCustomer($customer); $_prod = Mage::getModel('catalog/product')->load(1);
$quote->addProduct($_prod,new Varien_Object(array('qty' => $_POST['qty']))); ... ... ... $quote->collectTotals()->save(); $service = Mage::getModel('sales/service_quote', $quote); $service->submitAll();
Solved! Go to Solution.
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@dudesjoerd, thx for your answer, i tried to set quote as supermode but now i have the next error:
Not all products are available in the requested quantity
I was searching and I found this:
$quote->setInventoryProcessed(true);
This works good.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Re: Create Order Programmatically
When creating an order from the backend, the quote is set to supermode in the class Mage_Adminhtml_Model_Session_Quote (96)
$this->_quote->setIsSuperMode(true);
Then later, when Magento is checking the product inventory in Mage_CatalogInventory_Model_Observer in the function checkQuoteItemQty on line 303, the inventory checking is skipped if the supermode is set to true
if (!$quoteItem || !$quoteItem->getProductId() || !$quoteItem->getQuote() || $quoteItem->getQuote()->getIsSuperMode()) { return $this; }
If I copy your code, and add the supermode to the quote:
$quote = Mage::getModel('sales/quote')->setStoreId($websiteId); $quote->assignCustomer($customer);
$quote->setIsSuperMode(true);
then I don't get the quantity error anymore.
DudeSquare Web Development
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@dudesjoerd, thx for your answer, i tried to set quote as supermode but now i have the next error:
Not all products are available in the requested quantity
I was searching and I found this:
$quote->setInventoryProcessed(true);
This works good.