Записи о заказах покупателей (так называемые расходные ордеры) хранятся в следующих таблицах базы данных Impera CMS, где первую таблицу можно назвать основной, вторую - ведомой в том смысле, что в своих записях содержит указатели принадлежности к записям первой таблицы:
-
orders - общая информация о заказе (грубо говоря, шапка документа)
-
orders_products - сведения о товарных позициях заказа
Рассмотрим структуру таблицы orders. Здесь указаны: имя поля таблицы, тип значения в этом поле и описание поля. Для удобства поля перечислим поблочно по целям.
-
относящиеся к идентификации записи
- order_id - integer - идентификатор заказа (он же номер заказа)
- code - string - код для url страницы заказа
-
date - datetime - дата оформления заказа
так как в Impera CMS пока не предусмотрено отдельное поле для номера заказа в произвольном формате, например 10-123/27/65-0023, то этим полем невольно вынуждено выступать поле идентификатора заказа, и как следствие номер заказа является обычным автоинкрементным числом
код для url страницы заказа - это та автоматически генерируемая системой правая часть адреса страницы, которая добавляется к имени сайта, чтобы впоследствии получился полный адрес страницы заказа, доступной для просмотра заказа покупателем (то есть с клиентской стороны сайта); например если code был сгенерирован равным dt78ug4werg8gew4hgre, то страница этого оформленного заказа будет доступна покупателю по адресу http://сайт/order/dt78ug4werg8gew4hgre
-
относящиеся к приватности
-
hidden - tinyint - признак "страница заказа скрыта от посторонних"
несмотря на то, что генерируемый код для url достаточно сложен для подбора, тем не менее создан специальный признак приватности, его значением может быть:
- 0 - заказ разрешено видеть любому, кто знает url страницы заказа
- 1 - покупатель пожелал закрыть страницу заказа своим логином/паролем
данный признак относится только к просмотру заказа с клиентской стороны; администратор видит заказ в любом случае
-
указывающие на пользователя
-
user_id - integer - идентификатор пользователя, если заказ оформлял авторизованный
данное поле содержит либо 0, либо указатель на конкретную запись в таблице users (зарегистрированные пользователи сайта)
-
информация о покупателе/получателе
- name - string - имя покупателя (хранится в формате фамилия|отчество|имя)
- country_id - integer - идентификатор страны покупателя (указатель на таблицу countries)
- region_id - integer - идентификатор области покупателя (указатель на таблицу regions)
- town_id - integer - идентификатор города покупателя (указатель на таблицу towns)
- address - string - адрес доставки (хранится в формате страна|область|город|улица|дом|корпус|подъезд|код_двери_подъезда|квартира|почтовый_индекс)
- address2 - string - адрес 2 доставки (хранится в аналогичном формате)
- phone - string - телефон покупателя
- phone2 - string - телефон 2 покупателя
- email - string - емейл покупателя
- email2 - string - емейл 2 покупателя
- icq - string - ICQ номер покупателя
- icq2 - string - ICQ номер 2 покупателя
- skype - string - Skype имя покупателя
-
skype2 - string - Skype имя 2 покупателя
в типичном случае для заказов авторизованных пользователей эти поля будут содержать (дублировать) сведения аналогичных полей записи из таблицы users, тем не менее эти поля существуют в записи заказа именно потому, что во-первых, заказ может оформляться не только авторизованным покупателем, а во-вторых, по воле авторизованного оформителя заказа адрес доставки и контактная информация получателя могут отличаться от его собственных
обратите также внимание, что поля name, address и address2 хранятся в собственном формате: по сути это строка со своей внутренней структурой, где "поля" структуры разделены символом вертикальной черты
-
заметки покупателя
- comment - string - комментарий покупателя к заказу
- to_date - string - к какой дате покупатель пожелал получить доставку
- to_time - string - к какому времени дня покупатель пожелал получить доставку
-
относящиеся к доставке
- delivery_method_id - integer - ИД способа доставки (указатель на таблицу delivery_methods)
- delivery_type - integer - ИД типа доставки (указатель на таблицу delivery_types)
- delivery_tracking - string - код отслеживания груза (трекинг номер посылки)
-
относящиеся к оплате
- desire_payment_id - integer - ИД желаемого способа оплаты (которым предполагал оплатить)
- payment_method_id - integer - ИД способа оплаты (которым реально воспользовался)
-
payment_status - integer - состояние оплаты
- 0 - заказ не оплачен
- 1 - заказ оплачен
- payment_date - datetime - дата оплаты
-
payment_details - text - детали платежа (что сообщил платежный сервис после платежа)
обратите внимание, детали платежа хранятся в формате serialize; поля идентификаторов способов оплаты указывают на таблицу payment_methods
-
относящиеся к кредиту
- credit_id - integer - ИД кредитной программы (указатель на таблицу credit_programs)
-
credit_details - text - детали кредита (что заполнил покупатель о себе в кредитной анкете)
обратите внимание, детали кредита хранятся в формате serialize; если покупатель прикреплял в свою кредитную анкету сканы паспорта, фотографии, скан налогового номера и прочие требуемые документы, эти файлы хранятся в папке http://сайт/files/orders/
-
ценовые
- delivery_price - float - цена доставки
-
discount_sum - float - сумма дополнительной скидки
в каждой записи о товарной позиции заказа существует информация о скидке на эту позицию, однако в определенных случаях менеджеру необходимо дать покупателю некую произвольную скидку; для этих целей и существует поле дополнительной скидки
-
относящиеся к состояниям
-
written_off - tinyint - признак списания товаров со склада по этому заказу
- 0 - еще не списывались
- 1 - товары списаны
-
status - integer - состояние заказа
- 0 - новый
- 1 - находится в обработке
- 2 - выполнен
- 3 - аннулирован
- state - integer - ИД стадии состояния заказа (указатель на таблицу orders_phases)
- comment_status - string - комментарий админа к состоянию
-
относящиеся к партнерке
-
affiliate_id - integer - идентификатор реферала (указатель на таблицу users)
согласно реализованной в движке партнерской программе, авторизованные пользователи могут приводить на сайт покупателей и в случае оформления и оплаты последними заказов, на внутренний счет зазывателя (реферала) будет автоматически перечислена комиссия, обозначенная в настройках партнерской программы; потому в заказе существует данное поле - кто из пользователей привел этого покупателя
-
докладные
- ip - string - с какого IP-адреса оформляли заказ (хранится в формате ip|имя_хоста)
Теперь рассмотрим структуру ведомой таблицы orders_products. Здесь точно так указаны: имя поля таблицы, тип значения и описание поля. И перечислены поблочно.
-
относящиеся к идентификации записи
- orderitem_id - integer - идентификатор записи
- order_id - integer - идентификатор заказа (указатель на таблицу orders)
- product_id - integer - идентификатор товара (указатель на таблицу products)
- variant_id - integer - ИД варианта товара (указатель на таблицу products_variants)
-
именующие товарную позицию
- product_name - string - название товара
- variant_name - string - название варианта товара
-
name_properties - text - список выбранных покупателем свойств
несмотря на то, что в записи уже хранятся указатели на товар и его вариант, здесь все же хранятся и сведения о том, как назывался этот товар на момент оформления заказа; чтобы при возможном дальнейшем удалении товара из базы или его переименовании в заказе продолжала сохраняться действительная информация о названии проданного на тот момент товара
-
количественно-ценовые
- quantity - integer - количество товара
- price - float - цена продажи (то есть с учетом скидок) единицы товара
- real_price - float - исходная цена единицы товара
- price_id - integer - ИД ценовой группы (из какой колонки бралась исходная цена)
-
позиционные
- position - integer - положение товарной позиции в листинге заказа