Перейти к содержанию

Частичные скидки в заказе

Частичная скидка применяется к выбранным строкам заказа. Для выбора строки используйте её идентификатор order_lines[].id. Идентификаторы товара product_id и варианта variant_id для этого не подходят.

Один товар может занимать несколько строк заказа. Например, комплект K из товаров A и B при сохранении заказа разбивается на строки A и B. Если покупатель добавил товар A ещё и отдельно, в заказе будет две строки с одинаковыми product_id и variant_id. У каждой строки свой id, поэтому скидку можно назначить только одной из них.

Поля строки заказа full_total_price и full_sale_price уже учитывают скидки. Используйте их, если нужны итоговые суммы без самостоятельного распределения скидок по строкам.

Как назначить скидку

PUT /admin/orders/:id.json принимает discounts_attributes. Поля из справочника Order:

  • discount — размер скидки
  • type_id — тип скидки: 1 — процент (по умолчанию), 2 — сумма
  • description — описание скидки
  • discount_order_lines_ids — идентификаторы строк заказа, к которым применяется скидка. Если не передать массив, скидка применяется ко всем строкам
{
  "order": {
    "discounts_attributes": [
      {
        "discount": 10,
        "description": "10% only for first order line",
        "discount_order_lines_ids": [1]
      }
    ]
  }
}

В ответе скидки заказа возвращаются в массиве discounts. Поле discount содержит первую скидку из этого массива и сохранено для совместимости с существующими интеграциями. У объекта скидки два массива:

  • discount_order_lines_ids — строки заказа
  • discount_products_ids — товары этих строк

Оба приходят заполненными, когда скидка частичная. Для записи передавайте только discount_order_lines_ids.

Чтобы удалить скидку, отправьте тот же PUT и передайте её id вместе с _destroy:

{
  "order": {
    "discounts_attributes": [
      { "id": 1, "_destroy": 1 }
    ]
  }
}

Справочник не описывает создание заказа с discount_order_lines_ids: идентификаторы строк появляются только после создания. Поэтому назначайте частичную скидку при обновлении уже созданного заказа. Создание заказа, строки и статусы — в заказах и клиентах.