So I’ve been looking for a way to change the Stock Availability back to In Stock when the quantity field is greater than 0. The system already automatically changes the Stoc
Just create cron job with that code snippet:
public function setBackInStock()
{
$collection = Mage::getResourceModel('cataloginventory/stock_item_collection');
$outQty = Mage::getStoreConfig('cataloginventory/item/options_min_qty');
$collection->addFieldToFilter('qty', array('gt' => $outQty));
$collection->addFieldToFilter('is_in_stock', 0);
foreach($collection as $item) {
$item->setData('is_in_stock', 1);
}
$collection->save();
}
Small note, you can set cron job for every minute, because if there are no results job won't be consuming time/resources
I believe you can use Magento event catalog_product_save_after. Create an observer method that does the following on event catalog_product_save_after.
public function catalog_product_save_after($observer) {
$product = $observer->getProduct();
$stockData = $product->getStockData();
if ( $product && $stockData['qty'] ) {
$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getEntityId()); // Load the stock for this product
$stock->setData('is_in_stock', 1); // Set the Product to InStock
$stock->save(); // Save
}
}
This is what I had to do
var stock_data = new catalogInventoryStockItemUpdateEntity()
{
qty = quantity,
is_in_stock = inStock,
manage_stock = stockManaged,
is_in_stockSpecified = true,
};
is_in_stockSpecified is important
I used SOAP API to update stock status.
The Stock Availability text can be handled in the Inventory Tab of the Product settings, same tab as the stock quantity field. Since you have to input your stock qty manually anyway, I would suggest to just change the Stock Availability setting back to 'In Stock' as you enter the new QTY for your product.
Another simple solution is to create a stored procedure on DB and call it with with an event
############################################# START : Enable Stock Status
DELIMITER //
CREATE PROCEDURE EnableStock()
BEGIN
-- UPDATE
UPDATE cataloginventory_stock_status
SET stock_status=1
WHERE qty>0;
-- UPDATE
UPDATE cataloginventory_stock_status
SET stock_status=0
WHERE qty<0;
END; //
DELIMITER ;
############################################# END : Enable Stock Status
#Create event
CREATE EVENT CallEnableStock
ON SCHEDULE EVERY 1 HOUR
DO
CALL EnableStock();