/**
  * 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;
 }
Exemple #2
0
 /**
  * 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;
 }