Частичные скидки в заказе
Частичная скидка применяется к выбранным строкам заказа. Для выбора строки используйте её идентификатор 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: идентификаторы строк появляются только после создания. Поэтому назначайте частичную скидку при обновлении уже созданного заказа. Создание заказа, строки и статусы — в заказах и клиентах.