Таблица oc_affiliate_transaction
Таблица oc_affiliate_transaction используется для записи всех финансовых транзакций, связанных с партнерской программой. Каждая запись представляет собой операцию пополнения (начисление комиссии) или списания (вывод средств) на балансе аффилиата.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
affiliate_transaction_id |
int |
Уникальный идентификатор транзакции (первичный ключ, автоинкремент). |
affiliate_id |
int |
Внешний ключ, связывающий транзакцию с конкретным партнером. Ссылается на oc_affiliate.affiliate_id.
|
order_id |
int |
Идентификатор заказа, к которому привязана комиссия (для начислений). Ссылается на oc_order.order_id. Для списаний или ручных операций может быть равен 0.
|
description |
text |
Описание транзакции. Например, "Комиссия с заказа #123", "Вывод средств через PayPal" или "Корректировка администратором". |
amount |
decimal(15,4) |
Сумма транзакции. Для начислений - положительное число, для списаний - отрицательное. |
date_added |
datetime |
Дата и время добавления транзакции. |
Как это работает
Когда заказ, совершенный по партнерской ссылке, переходит в статус, который считается завершенным (это настраивается в админ-панели), система автоматически создает запись в этой таблице. Сумма комиссии рассчитывается на основе настроек партнерской программы (процент от суммы заказа или фиксированная плата).
Партнер может запросить выплату накопленных средств. Когда администратор одобряет запрос и производит выплату, в таблицу добавляется новая транзакция с отрицательной суммой, которая уменьшает общий баланс аффилиата.
Администратор также может вручную добавлять или вычитать средства с баланса партнера через админ-панель (например, за бонусную активность или, наоборот, за нарушение правил). Каждая такая операция также фиксируется в oc_affiliate_transaction.
Текущий баланс партнера НЕ хранится в этой таблице в виде отдельного поля. Он вычисляется динамически как сумма всех значений в поле amount для данного affiliate_id. Это гарантирует, что баланс всегда актуален и соответствует полной истории операций.
Пример SQL-запроса
Получить полную историю транзакций и рассчитать текущий баланс для партнера с ID 10:
SELECT
at.*,
o.order_id,
CONCAT(a.firstname, ' ', a.lastname) AS affiliate_name
FROM oc_affiliate_transaction at
LEFT JOIN oc_affiliate a ON (at.affiliate_id = a.affiliate_id)
LEFT JOIN oc_order o ON (at.order_id = o.order_id)
WHERE at.affiliate_id = 10
ORDER BY at.date_added DESC;
Рассчитать текущий баланс (сумму всех транзакций) для всех партнеров:
SELECT
affiliate_id,
CONCAT(a.firstname, ' ', a.lastname) AS affiliate_name,
SUM(amount) AS current_balance
FROM oc_affiliate_transaction at
LEFT JOIN oc_affiliate a ON (at.affiliate_id = a.affiliate_id)
GROUP BY at.affiliate_id;
Смотрите также
-
таблицу
oc_affiliate,
которая хранит основную информацию о партнерах -
таблицу
oc_affiliate_activity,
которая регистрирует активность аффилиатов -
таблицу
oc_order,
так как транзакции часто привязаны к заказам -
таблицу
oc_customer_transaction,
которая имеет схожую структуру для транзакций клиентов