Стажировка на реальных проектах:
наполнение портфолио, помощь с работой и заказами, пробные собеседования. Жми для подробностей→
137 of 152 menu
Внимание! Репетиторство по Python! Осталось последнее место! Стоимость: 20$ за занятие 1.5 часа. Жми для подробностей!

Таблица 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,
    которая имеет схожую структуру для транзакций клиентов