01 Апр Прокачиваем бонусную систему в 1С-Битрикс: лимиты, сгорание баллов и правильная выгрузка в 1С:УНФ
Бонусная система в 1С-Битрикс
Стандартные модули лояльности для 1С-Битрикс часто решают лишь базовые задачи — начислить баллы и списать их. Но когда бизнес начинает считать деньги, появляются более сложные требования: нельзя оплачивать баллами доставку, нельзя списывать бонусы на акционные товары, а старые баллы должны «сгорать», чтобы не висеть мертвым грузом в базе.
И самое главное — бухгалтерия и менеджеры в 1С:УНФ должны четко видеть, сколько реальных денег должен заплатить клиент.
В этой статье мы шаг за шагом кастомизируем модуль лояльности (на примере itsector.bonus) и настроим правильный обмен с 1С.
Задача 1. Жесткие лимиты на списание баллов в корзине
Что нужно сделать:
-
Ограничить оплату баллами до 30% от стоимости заказа.
-
Запретить оплачивать баллами стоимость доставки.
-
Исключить из расчета лимита товары, на которые уже действует скидка (акционные).
Бэкенд-защита (Ядро компонента)
Переопределяем логику в файле class.php компонента sale.order.ajax. Находим метод, отвечающий за внутренний счет (getInnerPaySystemInfo), и внедряем наш расчет лимитов:
Передача лимита во фронтенд
В том же class.php обновляем метод getBonusSettings, чтобы передать правильную максимальную сумму в браузер пользователя:
Фронтенд-защита (UX)
Чтобы покупатель физически не мог вписать в поле ввода цифру больше положенной, добавляем небольшой JS-скрипт в самый конец шаблона корзины (template.php):
Задача 2. Справедливое начисление бонусов (Без акций)
Несправедливо давать клиенту кэшбэк за товары, которые он и так купил с огромной скидкой. Идем в ядро бонусного модуля (BonusService.php) и правим метод расчета начислений calculateChargeForOrder.
Находим цикл перебора товаров в корзине и добавляем проверку:
Теперь база для начисления бонусов считается только из товаров за полную стоимость.
Задача 3. Сгорание бонусов при неактивности
Баллы — это отложенная скидка, и они должны мотивировать покупать чаще. Добавим агента, который будет аннулировать баланс клиента, если тот ничего не покупал больше 12 месяцев.
Добавляем этот метод в конец класса BonusService в файле BonusService.php:
Для запуска агента нужно выполнить команду регистрации CAgent::AddAgent(...) в командной PHP-строке Битрикса.
Задача 4. Вывод реальной суммы к оплате в 1С:УНФ
Проблема: При обмене с сайтом 1С считает колонку «Сумма» как базовую стоимость документа. Списанные баллы приходят как частичная оплата или внутренний счет. Из-за этого менеджеры в общем списке заказов в 1С видят полную стоимость (например, 5000 руб.), хотя клиент оплатил половину бонусами и должен отдать курьеру всего 2500 руб.
Решение: Заставим Битрикс считать сумму без баллов и передавать её как отдельное текстовое свойство заказа, которое мы затем выведем в 1С.
Шаг 1. Создаем свойство в Битриксе
В админке переходим в свойства заказа и создаем служебное свойство (Тип: Строка) с символьным кодом TO_PAY_RUBLES.
Шаг 2. Пишем обработчик в init.php
В файл /local/php_interface/init.php добавляем код, который перед сохранением заказа посчитает разницу:
Шаг 3. Настройка обмена и 1С
-
В Битриксе в профиле экспорта заказов связываем это свойство со свободным реквизитом.
-
Делаем тестовый заказ и запускаем синхронизацию.
-
В 1С:УНФ заходим в общий список заказов, нажимаем «Еще -> Изменить форму», находим наш новый дополнительный реквизит
Сумма к оплате (руб)и выводим его отдельной колонкой рядом со стандартной.
Итог
Мы получили гибкую и защищенную от «хитрецов» корзину на стороне Битрикса, автоматизировали очистку базы от старых долгов по программе лояльности и сделали жизнь менеджеров в 1С:УНФ намного проще!
Нет комментариев