/** * Filter collection by removing not available product types * * @param Mage_Core_Model_Mysql4_Collection_Abstract $collection * @return Mage_Core_Model_Mysql4_Collection_Abstract */ public function applySalableProductTypesFilter($collection) { $productTypes = Mage::getConfig()->getNode('adminhtml/sales/order/create/available_product_types')->asArray(); $productTypes = array_keys($productTypes); foreach ($collection->getItems() as $key => $item) { if ($item instanceof Mage_Catalog_Model_Product) { $type = $item->getTypeId(); } else { if ($item instanceof Mage_Sales_Model_Order_Item) { $type = $item->getProductType(); } else { if ($item instanceof Mage_Sales_Model_Quote_Item) { $type = $item->getProductType(); } else { $type = ''; } } } if (!in_array($type, $productTypes)) { $collection->removeItemByKey($key); } } return $collection; }
/** * Add Customer segment relations to Rule Resource Collection * * @param Enterprise_TargetRule_Model_Mysql4_Rule_Collection $collection * @return Enterprise_TargetRule_Model_Mysql4_Rule */ public function addCustomerSegmentRelationsToCollection(Mage_Core_Model_Mysql4_Collection_Abstract $collection) { $ruleIds = array_keys($collection->getItems()); $segments = array(); if ($ruleIds) { $adapter = $this->_getReadAdapter(); $select = $adapter->select()->from($this->_getCustomerSegmentRelationsTable())->where('rule_id IN(?)', $ruleIds); $rowSet = $adapter->fetchAll($select); foreach ($rowSet as $row) { $segments[$row['rule_id']][$row['segment_id']] = $row['segment_id']; } } foreach ($collection->getItems() as $rule) { /* @var $rule Enterprise_TargetRule_Model_Rule */ if ($rule->getUseCustomerSegment()) { $data = isset($segments[$rule->getId()]) ? $segments[$rule->getId()] : array(); $rule->setCustomerSegmentRelations($data); } } return $this; }