Как это ни печально, но не смотря на всю развитую систему маркетинга, до сих пор основным методом привлечения клиентов и повышения продаж являются всякие промо-акции, скидки и системы купонов. Magento, конечно, и так предоставляет достаточно богатый функционал для анализа и статистики. Но много инструментов не бывает (лишь бы рук хватило). Так что сделаем нашим менеджерам по продажам очередной подарочек.
В принципе, существует и стандартный отчёт об использованных купоках в Reports - Sales - Coupons. Но мы пойдём дальше. Для начала создадим модуля с кастомным гридом (подробней о создании модуля).
Рассмотрим только основную часть — создание грида.
/** * Prepare grid collection * * @return Mage_Adminhtml_Block_Widget_Grid */ protected function _prepareCollection() { $collection = Mage::getModel('sales/order')->getCollection(); $collection->addAttributeToFilter('coupon_code', array('notnull' => TRUE)); $collection->addAttributeToFilter('coupon_code', array('neq' => '')); $collection->getSelect()->joinLeft( array('salesrule_coupon'=>$collection->getTable('salesrule/coupon')), 'main_table.coupon_code = salesrule_coupon.code', array('salesrule_coupon.rule_id')); $collection->getSelect()->joinLeft( array('salesrule_rule'=>$collection->getTable('salesrule/rule')), 'salesrule_coupon.rule_id = salesrule_rule.rule_id', array('salesrule_rule.name')); $this->setCollection($collection); return parent::_prepareCollection(); }
Основной запрос — найти все заказы у которых указан coupon_code. Это нам сразу же даёт номер, сумму, статус заказа и, собственно, сам использованный купон. Однако, код купона недостаточно информативен. Добавим так же название купона — просто джойним модели salesrule/coupon и salesrule/rule и получаем информацию об использованнм правиле.
Кажется, уже достаточно информативно и функционально:
На этом, собственно, можно было бы и остановиться, если бы не классический вопрос нашего времени: «и что теперь с этим делать?». Добавим возможность сразу перейти на страницы заказа и купона.
Чтобы не перепечатывать весь листинг приведу пример для название правила. Укажем в блоке грида свой рендерер:
$this->addColumn('name', array( 'header' => Mage::helper('salesrule')->__('Rule Name'), 'align' => 'left', 'index' => 'name', 'renderer' => $this->getNoRenderer()?'':'belvg_couponusage/adminhtml_couponsusage_grid_renderer_rule', 'filter_index' => 'salesrule_rule.name' ));
На этом, пожалуй, действительно всё. Посмотрим, как модуль пройдёт обкатку в боевых условиях.
Весь модуль на гитхабе: CouponUsage