Таблица oc_product_reward
Таблица oc_product_reward является связующей таблицей между товарами и группами покупателей. Она определяет, сколько бонусных баллов (reward points) будет начислено клиенту за покупку определенного товара, в зависимости от его группы.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
product_reward_id |
int |
Уникальный идентификатор записи в таблице. Автоинкрементное поле. |
product_id |
int |
Внешний ключ, который связывает запись с конкретным товаром. Ссылается на oc_product.
|
customer_group_id |
int |
Внешний ключ, который определяет группу покупателей. Ссылается на oc_customer_group. Указывает, для какой группы действует это правило начисления баллов.
|
points |
int |
Количество бонусных баллов, которые будут начислены покупателю из указанной группы за покупку одной единицы этого товара. Может быть 0.
|
Как это работает
В админ-панели OpenCart, в карточке редактирования товара, есть вкладка Баллы. В этой вкладке можно задать различное количество начисляемых баллов для разных групп покупателей.
Например, можно сделать так, чтобы за покупку дорогого товара VIP-клиенты (группа 2) получали 100 баллов, а обычные покупатели (группа 1) - только 50. Если для какой-то группы значение не указано, баллы за этот товар начисляться не будут.
Когда клиент оформляет заказ, система для каждой позиции в корзине проверяет, сколько баллов положено за данный product_id и для customer_group_id этого клиента. Общее количество баллов за весь заказ суммируется и записывается в поле reward таблицы oc_order.
После успешного завершения заказа (перехода в статус, который отмечен для начисления баллов в настройках) эти баллы добавляются на счет клиента в таблице oc_customer_reward. В дальнейшем клиент может использовать накопленные баллы для оплаты следующих покупок.
Важно: Количество баллов, указанное в этой таблице, начисляется за 1 единицу товара. Если клиент покупает 2 единицы товара, за который положено 10 баллов, он получит 20 баллов.
Пример SQL-запроса
Посмотреть, сколько баллов начисляется за все товары для группы покупателей с ID 1:
SELECT pr.product_reward_id, pr.points, p.product_id, pd.name as product_name, cg.name as customer_group
FROM oc_product_reward pr
LEFT JOIN oc_product p ON (pr.product_id = p.product_id)
LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id AND pd.language_id = 1)
LEFT JOIN oc_customer_group_description cg ON (pr.customer_group_id = cg.customer_group_id AND cg.language_id = 1)
WHERE pr.customer_group_id = 1
ORDER BY pr.points DESC;
Смотрите также
-
таблицу
oc_customer_reward,
которая хранит историю начисления и списания баллов для каждого клиента -
таблицу
oc_customer_group,
которая определяет группы покупателей -
таблицу
oc_order,
в которой полеrewardхранит общее количество баллов за весь заказ -
таблицу
oc_product,
которая содержит основную информацию о товарах