Skip to content

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

Частичная скидка действует не на все позиции заказа, а на выбранные. Позиция задаётся id строки заказа, order_lines[].id, а не product_id и не variant_id.

Один и тот же товар может стоять в заказе несколькими строками. Так бывает после расщепления комплекта: комплект K из товаров A и B превращается в отдельные строки A и B, и рядом может лежать ещё одна строка A, купленная отдельно. У строк совпадают product_id и даже variant_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 — id строк, на которые скидка действует. Без массива скидка идёт на все строки
{
  "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 справочник не описывает: строки получают id уже после создания. Частичную скидку добавляют обновлением готового заказа.