Павел Новицкий

Нерегулярные заметки

Отчёт о купонах в Magento

8 сентября 2013, 17:40

Как это ни печально, но не смотря на всю развитую систему маркетинга, до сих пор основным методом привлечения клиентов и повышения продаж являются всякие промо-акции, скидки и системы купонов. 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

Вконтакте
0 комментариев


Ваш комментарий
(обязательно)
(не показывается)
(HTML не работает)
© 2013-2024