C этим все понятно, а как поставить ограничение на оплату бонусами, к примеру чтобы бонусы составляли только 20% от покупки, или к примеру чтобы сгорали через 3 месяца
1. Ограничение на оплату.
Клиентская часть -
На этапе оплаты надо получить сумму заказа, сумму бонусов, ну и на JS ограничить ввод количества бонусов БОЛЬШЕ, чем 20% суммы заказа.
Самый простой способ - взять это из emarket::basket() - udata://emarket/basket, это можно сделать на JS. Если у пользователя есть бонусы, то они будут доступны в customer//property[@name='bonus'].
Серверная часть -
Предположим, что наши пользователи хитрожопые и могут обойти JS код на клиентской стороне, которые не даёт ввести более 20% бонусов от суммы заказа.
Бонусы для заказа устанавливаются методом order::setBonusDiscount($bonus) , в котором уже снова получаем сумму заказа, количество указанных бонусов и проверяем, что бы нас не нагрели. В случае, если это происходит, то устанавливаем процент бонуса - 20% от заказа + отсылаем уведомление менеджеру, а пользователя добавляем в группу "хитрожопые".
2. Бонусы сгорают через 3 месяца
Тут надо понимать как именно должно работать.
К примеру, в 1-ый месяц я получил 100 бонусов, во 2-ой - ещё 100, в 3-ий - ещё 100. Вопрос: на 4-ый месяц у меня сгорят 100 бонусов от 1-ого месяца или нет?
Или всё зависит от времени последнего заказа? От факты оплата бонусами?... От факта пополнения бонусами?.....