НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
38 of 152 menu

Таблица 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,
    которая предназначена для учета бонусных баллов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить