/** * Callback method for applying price filter. * @param Mage_Catalog_Model_Resource_Product_Collection $_collection * @param Mage_Adminhtml_Block_Widget_Grid_Column $_column */ public function _filterPrice($_collection, $_column) { $_field = $_column->getFilterIndex() ? $_column->getFilterIndex() : $_column->getIndex(); $_condition = $_column->getFilter()->getCondition(); if (!$_field || !is_array($_condition)) { return; } if (!array_key_exists('type', $_condition) || !is_numeric($_condition['type'])) { $_collection->addFieldToFilter($_field, $_condition); } else { $_storeId = (int) $this->getRequest()->getParam('store', 0); $_store = Mage::app()->getStore($_storeId); $_joinCondition = array('`e`.`entity_id` = `at_reservation_price`.`entity_id`', '`at_reservation_price`.`store_id` = ' . $_store->getId(), '`at_reservation_price`.`ptype` = ' . $_condition['type']); if (array_key_exists('from', $_condition)) { $_joinCondition[] = '`at_reservation_price`.`price` >= ' . $_condition['from']; } if (array_key_exists('to', $_condition)) { $_joinCondition[] = '`at_reservation_price`.`price` <= ' . $_condition['to']; } $_joinCondition[] = '`at_reservation_price`.`date_from` = \'0000-00-00 00:00:00\' OR DATE(`at_reservation_price`.`date_from`) <= DATE(\'' . date('Y-m-d H:i:s', Mage::getModel('core/date')->gmtTimestamp(time())) . '\')'; $_joinCondition[] = '`at_reservation_price`.`date_to` = \'0000-00-00 00:00:00\' OR DATE(`at_reservation_price`.`date_to`) >= DATE(\'' . date('Y-m-d H:i:s', Mage::getModel('core/date')->gmtTimestamp(time())) . '\')'; $_collection->getSelect()->joinInner(array('at_reservation_price' => $_collection->getTable('payperrentals/reservationprices')), '(' . implode(') AND (', $_joinCondition) . ')', array('price_type' => 'at_reservation_price.ptype', 'reservation_price' => 'at_reservation_price.price', 'reservation_number' => 'at_reservation_price.numberof')); /** TODO Check collection count calculation with group. I think need change join for use distinct */ $_collection->getSelect()->group('e.entity_id'); } }
/** * Add filtering * * @param string $field * @param string $condition * @return Mage_Reports_Model_Resource_Product_Downloads_Collection */ public function addFieldToFilter($field, $condition = null) { if ($field == 'link_title') { $conditionSql = $this->_getConditionSql('l.title', $condition); $this->getSelect()->where($conditionSql); } else { parent::addFieldToFilter($field, $condition); } return $this; }
/** * * @param Mage_Catalog_Model_Resource_Product_Collection $collection * @return Mage_Catalog_Model_Resource_Product_Collection */ protected function _prepareCollection($collection) { foreach ($this->getConditions() as $condition) { $collection->addFieldToFilter($condition['attribute'], array($condition['operator'] => $condition['value'])); } foreach ($this->_columns as $attr => $width) { $collection->addAttributeToSelect($attr); } return $collection; }