https://modulbank.ru/tariffs
Смотрите, на бесплатном тарифе, вы можете выпустить карту себе банковскую, сколько налички нужно - можете перевести на свою дебетовую любую карту. 0.75%.
Или тратить без комиссии в магазинах с карты.
Т.е. тут уже все будет зависеть от вашего подхода.
lavezzi1, в модуль банке зато есть бесплатное обслуживание. но если вам только тратить в магазине и не выводить наличку - то оно идеально. ну и дешевле валютный контроль стоит. плюс можете себе сделать карточку за 300 р в год.
Например, делает запрос, и знаете, что у пользователя доступно 500 бонусов например.
Из них, человек например хочет потратить 300.
При генерации заказа, мы делаем выборку доступных бонусов у человека, и получаем следующий список
Бонус1 - доступно 40 бонусов
Бонус2 - доступно 50 бонусов
и тд
И по порядку делаем транзакции, чтобы покрыть 300 бонусов.
select i.* , o.sum_paid, transaction_id from bonus i
right join (select sum(value) as sum_paid, transaction_id from bonus where transaction_id is not null group by transaction_id ) o on i.id=o.transaction_id
если вам нужны только актуальные бонусы, которые можно потратить, то добавляете
where date_end>'2017-09-12'
having sum>sum_paid
Или же вы можете отображать все бонусы, даже сгоревшие в ЛК пользователя. Просто делаете проверку на дату и на кол-во потраченных бонусов.
Логика проста:
1) вы создаете чек для погашения
2) вы постепенно погашаете заказ доступными чеками (на уровне сервера), маркируя, что транзакция относится к основной записи (как раз это и есть метка родительского элемента). для понимания, вы можете в родительский элемент насильно записать id транзакции. тогда расчеты будет делать немного проще.
3) вы закрываете, или ничего не трогаете с чеками, которые пропали.
Ну хорошо, добавляете сколько бонусов потрачено из какого билета. не думаю что это проблема на стороне сервера вытащить карточки, доступные клиенту, и рассчитать на сервере все.
ид | бонусов пришло | родительский ид | дата создания | дата сгорания | тип транзакции
Например, создаете бонусные чеки
1 | 100 | null | 1 дек | 15 дек | бонусы
2 | 100 | null | 3 дек | 16 дек | бонусы
Далее, рассчитываетесь этими чеками , причем вам нужно будет указывать, к какому заказу это списание относится. нужно будет добавить в таблицу поля. 4 и 5 транзакции считаются на стороне сервера, и заполняются по мере списания определенных бонусов .
3 | -30 | null | 1 дек | 1 | оплата бонусами | заказ 1
4 | -70 | null | 1 дек | 1 | оплата бонусами | заказ 2
5 | -30 | null | 1 дек | 1 | оплата бонусами | заказ 2
Далее, мы можем выбрать доступные бонусные баллы, сделав join на таблицу, и получив сумму бонусов, дата которых еще не закончилась.