Основные положения
Скидка на заказ учитывается не в общей сумме заказа, а распределяется между товарами и учитывается в сумме каждой отдельной позиции товара в заказе. При этом распределенная скидка заказа не затрагивает скидки на товары, которые можно так же, как и раньше отдельно указывать.
Покажем на примере. Допустим есть следующий заказ:
| Название | Цена | Скидка | Кол-во | Итого |
| | | | | |
| Шорты | 600 руб | 50 руб (на товар) | 2 | 1100 руб |
| | | | | |
| Сланцы | 300 руб | 0 руб (на товар) | 3 | 900 руб |
| | |
| Итого | 2000 руб |
Мы дали скидку на заказ 300 рублей.
В версии 6.0 и выше
скидка заказа распределится между товарами и будет учтена в их стоимости:
| Название | Цена | Скидка | Кол-во | Итого |
| | | | | |
| Шорты | 600 руб | 50 руб (на товар) | 2 | 980 руб |
| | | 60 руб (на заказ) | | |
| | | | | |
| Сланцы | 300 руб | 0 руб (на товар) | 3 | 720 руб |
| | | 60 руб (на заказ) | | |
| | |
| Итого | 1700 руб |
Стоимость заказа в таком случае рассчитывается так: (600 – 50 – 60) x 2 + (300 – 60) x 3 = 1700
API
API v4
В API v4 и ниже поля скидок order[discount]
, order[discountPercent]
, order[items][][discount]
, order[items][][discountPercent]
в заказе остаются без изменений и доступны как на запись, так и на чтение.
На примере заказа выше при создании заказа значения нужно передавать в следующем виде:
order = {
// ...
"discount": 300,
"items": [
{
"offer": { "externalId": "1" },
"initialPrice": 600,
"discount": 50,
"quantity": 2
},
{
"offer": { "externalId": "2" },
"initialPrice": 300,
"quantity": 3
}
],
// ...
}
В API-методах получения заказов состав и значения полей будут аналогичными:
{
// ...
"discount": 300,
"items": [
{
"offer": { "externalId": "1" },
"initialPrice": 600,
"discount": 50,
"quantity": 2
},
{
"offer": { "externalId": "2" },
"initialPrice": 300,
"quantity": 3
}
],
// ...
}
API v5
В методах создания и редактирования заказа /api/v5/orders/create
, /api/v5/orders/{externalId}/edit
, /api/v5/orders/upload
можно передавать скидки на заказ и товары в полях order[discountManualAmount]
, order[discountManualPercent]
, order[items][][discountManualAmount]
, order[items][][discountManualPercent]
, при этом скидки на заказ будут распределяться между товарами.
На примере заказа выше при создании заказа значения нужно передавать в следующем виде:
order = {
// ...
"discountManualAmount": 300,
"items": [
{
"offer": { "externalId": "1" },
"initialPrice": 600,
"discountManualAmount": 50,
"quantity": 2
},
{
"offer": { "externalId": "2" },
"initialPrice": 300,
"quantity": 3
}
],
// ...
}
В методах получения заказов /api/v5/orders
, /api/v5/orders/{externalId}
возвращается итоговая расчетная денежная скидка на единицу товара для каждой позиции товара в поле order[items][][discountTotal]
, которая учитывает и скидки на текущий товар, и скидки на заказ, распределенные между товарами.
{
// ...
"items": [
{
"offer": { "externalId": "1" },
"initialPrice": 600,
"discountTotal": 110,
"quantity": 2
},
{
"offer": { "externalId": "2" },
"initialPrice": 300,
"discountTotal": 60,
"quantity": 3
}
],
// ...
}
Крайние случаи при распределении скидки на заказ между товарами
В некоторых случаях система не может распределить скидку заказ между товарами. Покажем на примере.
Допустим, есть заказ со следующим составом:
| Название | Цена | Скидка | Кол-во | Итого |
| | | | | |
| Шорты | 600 руб | – | 3 | 1800 руб |
| | |
| Итого | 1800 руб |
Мы добавляем скидку на заказ 10 рублей. Системе нужно распределить скидку заказа между всеми единицами товаров, которых в заказе 3 штуки.
По умолчанию при попытке указания такой скидки для заказа системой будет выдано сообщение об ошибке. Что важно, ошибка будет выдаваться, как если вы оформляете такой заказ в системе, так и через API, независимо от версии API'.
Если же в системе включена настройка «Корректировать скидку на заказ» в разделе Настройки > Заказы, то система скорректирует скидку на заказ до ближайшего делимого значения (в данном случае изменит скидку на заказ с 10 рублей на 9,99 рублей). В случае, если вы передаете скидку по API - корректировка применяться не будет.
Округление
В версии 6.0 добавлена функция округления, которую можно включить в разделе Настройки > Заказы. Округление, если его включить, применяется к позициям товаров в заказе. Та стоимость, что откидывается от суммы товара в результате округления, идет в скидку товара.
В настройках также есть опция округления стоимости товара с учетом стоимости заказа, которая выставлена по умолчанию при включенном округлении. С данной опцией округление стоимости товаров производится таким образом, чтобы результирующая стоимость заказа была максимально близка к стоимости заказа без округления.