Exemplo n.º 1
0
 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;
 }
Exemplo n.º 2
0
 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;
 }