Таблица oc_voucher_history
Таблица oc_voucher_history является журналом операций для подарочных сертификатов системы OpenCart. Каждая запись в этой таблице соответствует одному действию, изменяющему статус или баланс ваучера: активация, использование при заказе, частичное списание или полное использование.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
voucher_history_id |
int |
Уникальный идентификатор записи в истории ваучера. Первичный ключ с автоинкрементом. |
voucher_id |
int |
Внешний ключ, связывающий запись с конкретным подарочным сертификатом. Ссылается на oc_voucher.
|
order_id |
int |
Внешний ключ на заказ, в котором был использован данный сертификат. Ссылается на oc_order. Может быть 0, если запись не связана с заказом (например, при активации).
|
amount |
decimal(15,4) |
Сумма операции. Может быть как положительной (при активации, пополнении), так и отрицательной (при списании средств с баланса сертификата для оплаты заказа). |
date_added |
datetime |
Дата и время совершения операции. Записывается автоматически. |
Как это работает
Когда администратор создает или покупатель приобретает подарочный сертификат, в таблице oc_voucher создается основная запись с его номиналом (amount), кодом (code) и статусом. При первой активации сертификата в таблицу oc_voucher_history добавляется запись, где amount равно номиналу сертификата, а order_id может быть 0.
Когда клиент применяет код ваучера при оформлении заказа, система выполняет несколько действий:
1. Проверяет действительность кода и доступный остаток на сертификате.
2. Рассчитывает сумму, которую можно списать с ваучера для оплаты текущего заказа (но не более остатка на сертификате).
3. Создает запись в oc_voucher_history, где amount является отрицательным числом (например, -25.0000), а order_id содержит ID заказа, в котором сертификат был использован.
4. Обновляет текущий остаток (balance) сертификата в таблице oc_voucher, вычитая из него использованную сумму.
Один сертификат может быть использован частично в нескольких заказах, пока его баланс не станет равным нулю. Для каждой операции использования будет создана отдельная запись в истории.
Пример SQL-запроса
Получить полную историю операций по конкретному сертификату вместе с информацией о заказах можно следующим запросом:
SELECT
vh.voucher_history_id,
vh.amount,
vh.date_added,
v.code as voucher_code,
o.order_id,
o.invoice_no,
o.total as order_total
FROM oc_voucher_history vh
LEFT JOIN oc_voucher v ON (vh.voucher_id = v.voucher_id)
LEFT JOIN oc_order o ON (vh.order_id = o.order_id)
WHERE vh.voucher_id = 7
ORDER BY vh.date_added ASC;
Смотрите также
-
таблицу
oc_voucher,
в которой хранятся основные данные подарочных сертификатов -
таблицу
oc_voucher_theme,
которая содержит шаблоны дизайна сертификатов -
таблицу
oc_order,
которая хранит информацию о заказах, где применялись сертификаты -
таблицу
oc_order_total,
где также фиксируется применение ваучера в рамках заказа