Таблица oc_customer_transaction
Таблица oc_customer_transaction используется для ведения учета финансовых операций клиентов интернет-магазина. Она позволяет администратору начислять бонусы, возвращать средства или списывать их со счета клиента, а также автоматически записывает транзакции, связанные с заказами.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
customer_transaction_id |
int |
Уникальный идентификатор транзакции (первичный ключ, автоинкремент). |
customer_id |
int |
Внешний ключ, который связывает транзакцию с конкретным клиентом. Ссылается на oc_customer.
|
order_id |
int |
ID заказа, связанного с данной транзакцией (например, если это возврат средств). Может быть 0, если транзакция не привязана к заказу. Ссылается на oc_order.
|
description |
text |
Описание транзакции. Содержит текст, поясняющий причину начисления или списания средств (например, "Начисление бонусов", "Возврат по заказу #55", "Оплата бонусами"). |
amount |
decimal(15,4) |
Сумма транзакции. Положительное число означает пополнение баланса (начисление), отрицательное - списание средств. |
date_added |
datetime |
Дата и время добавления транзакции. |
Как это работает
Администратор может вручную управлять балансом клиента через админ-панель OpenCart в разделе "Клиенты" → "Редактирование клиента" → вкладка "Транзакции". Здесь можно добавить новую транзакцию, указав её описание и сумму.
Кроме ручного управления, система может автоматически создавать записи в этой таблице. Например, если клиент оплачивает часть заказа накопленными бонусами, создается транзакция на отрицательную сумму. А если магазин предусматривает начисление бонусов за покупки, то после смены статуса заказа на "Выполнен" может быть создана транзакция с положительной суммой.
Общий баланс клиента не хранится в этой таблице как отдельное поле. Он всегда вычисляется динамически как сумма всех значений в поле amount для данного customer_id. Это позволяет избежать ошибок синхронизации и всегда иметь актуальные данные.
Поле order_id является необязательным и служит для связи финансовой операции с конкретным заказом, что упрощает аудит и отслеживание истории платежей.
Пример SQL-запроса
Получить полную историю транзакций и рассчитать текущий баланс для клиента с ID 10 можно следующим запросом:
SELECT
ct.*,
o.invoice_no,
SUM(ct.amount) OVER (PARTITION BY ct.customer_id ORDER BY ct.date_added) AS running_balance
FROM oc_customer_transaction ct
LEFT JOIN oc_order o ON (ct.order_id = o.order_id)
WHERE ct.customer_id = 10
ORDER BY ct.date_added DESC;
Смотрите также
-
таблицу
oc_customer,
которая хранит основную информацию о клиентах -
таблицу
oc_order,
которая хранит информацию о заказах -
таблицу
oc_customer_reward,
которая предназначена для учета бонусных баллов