protected function _canShowQuantity($product, $mode, $data) { if (!$product->getData('stock_item')->is_in_stock) { return 'out'; } $quantity = 0; if ($product->isConfigurable()) { $model = new Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Type_Configurable(); $simpleProductIds = $model->getChildrenIds($product->getId()); foreach (current($simpleProductIds) as $productId) { $simpleProduct = Mage::getModel('catalog/product')->load($productId); $productQty = $simpleProduct->getData('stock_item')->qty; $quantity = $quantity + (int) $productQty; } } elseif ($product->getTypeInstance() instanceof Mage_Bundle_Model_Product_Type) { if ($mode = 'category') { $childIds = $product->getTypeInstance()->getChildrenIds($product->getId()); $sum = array(); foreach ($childIds as $childId) { foreach ($childId as $simpleId) { $simpleProduct = Mage::getModel('catalog/product')->load($simpleId); $simpleQty += $simpleProduct->getData('stock_item')->qty; } $sum[] = $simpleQty; $simpleQty = 0; } $quantity = min($sum); } else { $groupSum = array(); foreach ($product->getTypeInstance()->getOptions() as $option) { if (!$option->getData('required')) { continue; } foreach ($option->getSelections() as $simpleProduct) { $sum += $simpleProduct->getData('stock_item')->qty; } $groupSum[] = $sum; $sum = 0; } $quantity = min($groupSum); } } else { $quantity = $product->getData('stock_item')->qty; } if ($quantity > 0 && $quantity < (int) $data[$mode . '_min_stock']) { return $quantity; } return false; }
public function validateInStock($ruleId, $productId) { $result = array(); $model = Mage::getModel('catalog/product'); $out = Mage::getStoreConfig("prolabels/instock/out"); $minItems = (int) Mage::getStoreConfig("prolabels/instock/minitems"); try { $product = $model->load($productId); if ($product->getTypeInstance() instanceof Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Type_Configurable) { $model = new Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Type_Configurable(); $simpleProductIds = $model->getChildrenIds($product->getId()); foreach (current($simpleProductIds) as $productId) { $simpleProduct = Mage::getModel('catalog/product')->load($productId); $productQty = $simpleProduct->getData('stock_item')->qty; $quantity = $quantity + (int) $productQty; } } elseif ($product->getTypeInstance() instanceof Mage_Bundle_Model_Product_Type) { $groupSum = array(); foreach ($product->getTypeInstance()->getOptions() as $option) { if (!$option->getData('required')) { return $this; } $selections = $option->getSelections(); if (count($selections) < 1) { continue; } // $sum = 0; foreach ($selections as $simpleProduct) { $sum += $simpleProduct->getData('stock_item')->qty; } $groupSum[] = $sum; $sum = 0; } if (count($groupSum) < 1) { $quantity = 999999; } else { $quantity = min($groupSum); } } else { $quantity = $product->getData('stock_item')->qty; } if (!$product->getData('stock_item')->is_in_stock || $quantity == 0) { if ($out) { $result = array('rules_id' => $ruleId, 'product_id' => $product->getId()); } } else { if ($quantity > 0 && $quantity < $minItems) { $result = array('rules_id' => $ruleId, 'product_id' => $product->getId()); } } if (count($result) > 0) { $model = Mage::getModel('prolabels/index'); $model->addData($result); $model->save(); } } catch (Exception $e) { throw $e; } return $this; }