Фильтр

Правила добавления скидок к заказам в InSales

В InSales предусмотрено несколько режимов добавления скидок к заказам. Способы их применения к заказам несколько различаются, поэтому кратко опишем эти режимы и правила работы с ними. Данный текст не претендует на полноту изложения всей системы скидок InSales и служит для прояснения общих элементов её архитектуры.

 Перед непосредственным описанием режимов, обозначим основные термины.

  • Скидка - это сущность, привязанная к конкретному заказу. Она содержит в себе: тип скидки (процентная или абсолютная); величину скидки (соответственно в процентах или в ед. изм. валюты); признак того, была ли она создана автоматически по заданному заранее правилу, либо же менеджером магазина; тип и идентификатор правила (если есть); текстовое описание; массив идентификаторов позиций заказа, к которым применяется данная скидка. Каждый раз при добавлении скидки к заказу в системе создается экземпляр этой сущности с перечисленными атрибутами.
  • Частичная скидка - это скидка, которая действует не на все позиции заказа. Позиции, на которые она действует перечислены в соответствующем массиве discount_order_lines_ids, о котором было сказано в предыдущем пункте. Если массив не заполнен (либо атрибут имеет пустое значение NULL), то считается, что скидка действует на все позиции заказа. В процессе редактирования заказа (например, добавления или удаления позиций) общая скидка, действующая на весь заказ, может стать частичной и наоборот.
  • Скидочное правило - это сущность, описывающая, при каких условиях к заказу может быть добавлена скидка. Скидочные правила не привязаны к заказам, а служат лишь для создания скидок, описанных в предыдущем пункте. В InSales предусмотрено несколько типов скидочных правил: скидка по группе клиента (например, скидка для VIP-клиентов); скидка по сумме заказа (например, добавляется скидка на заказ с общей стоимостью более 5000 руб.); накопительная скидка (например, для покупателей, у которых общая стоимость всех сделанных заказов более 5000 руб.); внешняя скидка (рассчитывается внешним сервисом); скидка по купону (добавляется к заказу при введении покупателем или менеджером магазина кодового слова).
  • Ограничения на применение скидок - это набор правил, которые запрещают применение скидочного правила к товару. В их число входит запрет применения скидочного правила к уцененным товарам (т.е. к тем товарам, у которых есть старая цена); к товарам не из определенных категорий (или групп категорий); к комплектам. В каждом скидочном правиле отражается наличие или отсутствие каждого из перечисленных ограничений. Ограничения привязываются к правилу в целом и учитываются при каждом срабатывании данного правила. Кроме этого, у товаров есть флаг "не применять скидки", который запрещает применение скидочных правил.
  • Применение нескольких скидок к одному заказу возможно (при ручном вводе скидок и через API), при этом к заказу привязывается массив discounts скидок (сущностей). Величины всех скидок суммируются при расчете итоговой стоимости заказа.

Теперь опишем доступные режимы добавления скидок к заказам.

  • Автоматическое применение скидочного правила. Данный случай подразумевает, что в магазине уже заведены некоторые скидочные правила. Эти правила учитывают ограничения. Если правило не может применяться к какой-либо из позиций, то создаётся частичная скидка с заполненным массивом discount_order_lines_ids идентификаторов тех позиций, на которые скидка подействовала. При этом данный массив является результатом вычисления скидочного правила и не подлежит изменению каким-либо способом. (Т.е. нельзя вручную перераспределить частичную скидку между позициями заказа). Если к заказу может быть применено несколько скидочных правил, то выбирается то, которое дает максимальный размер скидки на заказ. Купон также является скидочным правилом, однако для его добавления необходимо его ввести самостоятельно (либо менеджеру магазина, либо покупателю на сайте). Покупателю на сайте доступно только автоматическое применение скидочных правил и купоны. Все последующие режимы покупателям недоступны.
  • Ручное применение скидочных правил позволяет выбрать из списка, какое скидочное правило следует применить к заказу. Этот режим работает так же, как и автоматическое применение с той разницей, что менеджер магазина сам решает, какое правило применить (например, если по какой-то причине нужно применить правило, дающее не максимальную величину скидки).
  • Ручной ввод скидки позволяет создать скидку без использования скидочного правила, вручную указав необходимые атрибуты (величина скидки, процентная или абсолютная и т.д.). Такие скидки не могут быть частичными и всегда действуют на весь заказ, игнорируя все ограничения на применение скидочных правил.
  • Создание скидок через API. В настоящий момент через API можно добавлять скидки только двумя способами: по купону или через вложенные атрибуты (nested attributes) заказа. Второй случай во-многом аналогичен ручному вводу скидки через бэк-офис. Применение скидок по остальным скидочным правилам в принципе возможно, но в API нет возможности создания и редактирования этих правил, поэтому данная возможность в данный момент времени имеет сомнительную практическую ценность. Применение купона через API работает так же, как и через бэк-офис, то есть учитывает все ограничения, выставленные для этого купона, а так же флаг "не применять скидки", который может быть выставлен у товаров. В результате применения купона может быть создана частичная скидка, которая будет возвращать непустой массив discount_order_lines_ids идентификаторов позиций, к которым применился данный купон. При этом редактировать этот массив нельзя, т.к. он вычисляется автоматически. Если купон применится ко всему заказу, то соответствующий массив будет пустым. Скидки, созданные через атрибуты заказа без привязки к скидочному правилу работают иначе. Такая скидка игнорирует (как и скидки введённые вручную в бэк-офисе) все ограничения. Как следствие, она не пытается сама вычислять массив discount_order_lines_ids идентификаторов позиций, к которым должна применяться, и по умолчанию применяется ко всему заказу. Но через API можно задать этот массив вручную, создав, тем самым, частичную скидку, которая не будет изменять свои атрибуты и состав массива даже при редактировании заказа или при последующем применении купона. Важно понимать, что если в заказе есть как скидка по купону, так и скидка добавленная через атрибуты, то скидки, оказавшиеся в одно массиве discounts, ведут себя по-разному. Массив discount_order_lines_ids идентификаторов позиций, получившихся в результате применения купонов, можно только читать, а массивы discount_order_lines_ids для скидок, созданных через вложенные атрибуты заказа доступны для как для чтения, так и для записи.


 

Полезная статья?
Остались вопросы?
Отправь тикет в техподдержку!
Недавно просмотренные статьи