Enable backorders for a customer group in Magento 1.9
-
09-10-2020 - |
Pregunta
I am trying to create functionality that allows backorders for a specific customer group only. I've searched the Magento code for something like if ($backorders_enabled){...}
with no success/luck. I'm starting to think about checking each cart item quantity and and changing the value to it's inventory's value if the user is not logged and in the specific group.
Any idea what is the right way to enable backorders for a specific customer group ?
Solución 2
The solution was overriding the method Mage_CatalogInventory_Model_Stock_Item::checkQty
if ($this->getQty() - $this->getMinQty() - $qty < 0) {
switch ($this->getBackorders()) {
case Mage_CatalogInventory_Model_Stock::BACKORDERS_YES_NONOTIFY:
case Mage_CatalogInventory_Model_Stock::BACKORDERS_YES_NOTIFY:
//////////// new code
$customer = Mage::getSingleton('customer/session')->getCustomer();
if ($customer && $customer->getGroupId() == '2') { //if the customer is logged in an in the correct group then allow it
break;
}
else { //otherwise don't allow it
return false;
}
break; }
}
return true;
`
Otros consejos
I found a method that identifies an item on stock
app/code/core/Mage/CatalogInventory/Model/Stock/Item.php
class Mage_CatalogInventory_Model_Stock_Item
public function verifyStock($qty = null)
{
if ($qty === null) {
$qty = $this->getQty();
}
if ($this->getBackorders() == Mage_CatalogInventory_Model_Stock::BACKORDERS_NO && $qty <= $this->getMinQty()) {
return false;
}
return true;
}
You can try to change it to the following:
/**
* Chceck if item should be in stock or out of stock based on $qty param of existing item qty
*
* @param float|null $qty
* @return bool true - item in stock | false - item out of stock
*/
public function verifyStock($qty = null)
{
if ($qty === null) {
$qty = $this->getQty();
}
if ($this->getBackorders() == Mage_CatalogInventory_Model_Stock::BACKORDERS_NO
&& $qty <= $this->getMinQty()) {
return false;
}
$backorderedCustomerGoupsIds = array(2, 3); // move admin to config better
if ($this->getBackorders() != Mage_CatalogInventory_Model_Stock::BACKORDERS_NO &&
!in_array($this->getCustomerGroupId(), $backorderedCustomerGoupsIds)
) {
return false;
}
return true;
}
Copy file app/code/core/Mage/CatalogInventory/Model/Stock/Item.php to app/code/local/Mage/CatalogInventory/Model/Stock/Item.php.