Skip to content

Бонус за товар ​

Правила бонуса продавцу за продажу конкретных товаров: для каждого товара задаётся процент или фиксированная сумма бонуса.

МетодАдресНазначение
GET/company/bonus/product-ruleСписок правил бонуса за товар
GET/company/bonus/product-rule/{model}Правило бонуса за товар
POST/company/bonus/product-ruleСоздать правило бонуса за товар
PUT/company/bonus/product-rule/{model}Изменить правило бонуса за товар
DELETE/company/bonus/product-rule/{model}Удалить правило бонуса за товар

Список правил бонуса за товар ​

GET/company/bonus/product-rule

Постраничный список правил доступных компаний; фильтры по названию, активности и дате, товары правила подгружаются через with[]=items.product.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры запроса ​

ПараметрОписание
filter[id]ID — точное значение
filter[company_id]Компания — точное значение
filter[name]Название — поиск по части строки
filter[is_active]Активен — точное значение
filter[created_at]Создано — период: [0] — с, [1] — по (Y-m-d)
sort[]Сортировка, - — по убыванию: id, -id, name, -name, created_at, -created_at
with[]Подгрузить связи: creator.profile, company, items.product.brand, items.product.unit, items.product.price
pageНомер страницы, с 1
page-sizeЗаписей на странице, не больше 20
http
GET /company/bonus/product-rule?with[0]=items.product.price

Ответ · 200 ​

Постраничный ответ: записи в data[], пагинация в links и meta.

Поля ответа
ПолеТипОписание
dataobject[]Данные
data[].idintegerID
data[].creator_idintegerСоздатель
data[].updater_idintegerОбновитель
data[].company_idintegerКомпания
data[].namestringНазвание
data[].is_activebooleanАктивен
data[].is_discounted_excludedbooleanНе начисляется при продаже со скидкой
data[].is_return_deductedbooleanВозврат вычитается из бонуса
data[].items_countinteger
data[].created_atstringСоздано
data[].updated_atstringОбновлено
data[].itemsobject[]Состав
data[].items[].idintegerID
data[].items[].company_idintegerКомпания
data[].items[].rule_idinteger
data[].items[].product_idintegerПродукт
data[].items[].percentintegerПроцент
data[].items[].amountnullСумма
data[].items[].created_atstringСоздано
data[].items[].updated_atstringОбновлено
data[].items[].productobject
data[].items[].product.idintegerID
data[].items[].product.parent_idnullРодитель
data[].items[].product.creator_idintegerСоздатель
data[].items[].product.company_idintegerКомпания
data[].items[].product.category_idintegerКатегория
data[].items[].product.brand_idintegerБренд
data[].items[].product.unit_idintegerЕдиница измерения
data[].items[].product.namestringНазвание
data[].items[].product.full_textstringПолный текст
data[].items[].product.plustringАртикул (PLU)
data[].items[].product.descriptionstringОписание
data[].items[].product.is_free_pricebooleanПродажа по свободной цене
data[].items[].product.is_favoriteboolean
data[].items[].product.min_quantitynull
data[].items[].product.barcodestringШтрих-код
data[].items[].product.images_listarrayИзображения
data[].items[].product.images_list_thumbsobject[]
data[].items[].product.images_list_thumbs[].widen_100object
data[].items[].product.images_list_thumbs[].widen_500object
data[].items[].product.images_list_thumbs[].originalobject
data[].items[].product.created_atstringСоздано
data[].items[].product.updated_atstringОбновлено
data[].items[].product.is_deletedboolean
data[].items[].product.priceobjectЦена
data[].items[].product.price.idintegerID
data[].items[].product.price.updater_idintegerОбновитель
data[].items[].product.price.company_idintegerКомпания
data[].items[].product.price.product_idintegerПродукт
data[].items[].product.price.source_typestringИсточник
data[].items[].product.price.source_idintegerИсточник
data[].items[].product.price.priceintegerЦена
data[].items[].product.price.currencystringВалюта
data[].items[].product.price.min_pricenull
data[].items[].product.price.min_price_percentnull
data[].items[].product.price.created_atstringСоздано
data[].items[].product.price.updated_atstringОбновлено
data[].items[].product.price.effective_min_priceinteger
data[].items[].product.price.price_uzsinteger
data[].items[].product.price.effective_min_price_uzsinteger
data[].items[].product.price.price_usdnumber
data[].items[].product.price.effective_min_price_usdinteger
data[].items[].product.price.price_eurnumber
data[].items[].product.price.effective_min_price_eurinteger
data[].items[].product.price.price_rubnumber
data[].items[].product.price.effective_min_price_rubinteger
json
{
    "data": [
        {
            "id": 4,
            "creator_id": 2,
            "updater_id": 2,
            "company_id": 1,
            "name": "Rule",
            "is_active": true,
            "is_discounted_excluded": false,
            "is_return_deducted": false,
            "items_count": 1,
            "created_at": "2026-09-30 12:51:06",
            "updated_at": "2026-09-30 12:51:06",
            "items": [
                {
                    "id": 6,
                    "company_id": 1,
                    "rule_id": 4,
                    "product_id": 1,
                    "percent": 5,
                    "amount": null,
                    "created_at": "2026-09-30 12:51:06",
                    "updated_at": "2026-09-30 12:51:06",
                    "product": {
                        "id": 1,
                        "parent_id": null,
                        "creator_id": 1,
                        "company_id": 1,
                        "category_id": 4,
                        "brand_id": 1,
                        "unit_id": 1,
                        "name": "Product 1",
                        "full_text": "Product 1",
                        "plu": "0001",
                        "description": "Description 1",
                        "is_free_price": false,
                        "is_favorite": false,
                        "min_quantity": null,
                        "barcode": "0000000000001",
                        "images_list": [
                            "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
                            "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
                        ],
                        "images_list_thumbs": [
                            {
                                "widen_100": {
                                    "raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
                                    "webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png"
                                },
                                "widen_500": {
                                    "raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
                                    "webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png"
                                },
                                "original": {
                                    "raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
                                    "webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png"
                                }
                            },
                            {
                                "widen_100": {
                                    "raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png",
                                    "webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
                                },
                                "widen_500": {
                                    "raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png",
                                    "webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
                                },
                                "original": {
                                    "raw": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png",
                                    "webp": "https://api-minio.icangroup.uz/wasyt/test_data/images/2.png"
                                }
                            }
                        ],
                        "created_at": "2026-09-30 12:47:59",
                        "updated_at": "2026-09-30 12:51:06",
                        "is_deleted": false,
                        "price": {
                            "id": 1,
                            "updater_id": 2,
                            "company_id": 1,
                            "product_id": 1,
                            "source_type": "purchase",
                            "source_id": 1,
                            "price": 1100,
                            "currency": "uzs",
                            "min_price": null,
                            "min_price_percent": null,
                            "created_at": "2026-09-30 12:47:59",
                            "updated_at": "2026-09-30 12:47:59",
                            "effective_min_price": 0,
                            "price_uzs": 1100,
                            "effective_min_price_uzs": 0,
                            "price_usd": 1.1,
                            "effective_min_price_usd": 0,
                            "price_eur": 1.1,
                            "effective_min_price_eur": 0,
                            "price_rub": 1.1,
                            "effective_min_price_rub": 0
                        }
                    }
                }
            ]
        }
    ],
    "links": {
        "first": "https://api.wasyt.uz/company/bonus/product-rule?page=1",
        "last": "https://api.wasyt.uz/company/bonus/product-rule?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [],
        "path": "https://api.wasyt.uz/company/bonus/product-rule",
        "per_page": 20,
        "to": 1,
        "total": 1
    }
}

Правило бонуса за товар ​

GET/company/bonus/product-rule/{model}

Одно правило по ID вместе с запрошенными связями.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Ответ ​

Пример ответа пока не записан тестами.

Создать правило бонуса за товар ​

POST/company/bonus/product-rule

Создаёт правило со списком товаров; у каждого товара должен быть задан процент или сумма бонуса, но не оба сразу. Товары берутся из каталога семьи компаний. Флаги: is_active (по умолчанию true), is_discounted_excluded — не начислять за товары со скидкой, is_return_deducted — вычитать бонус при возврате.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Тело запроса ​

ПолеТипОбязательноОписание
company_idintegerДаКомпания. ID существующей записи, доступной пользователю
namestringДаНазвание. Макс. 255 символов
is_activebooleanНетАктивен
is_discounted_excludedbooleanНетНе начисляется при продаже со скидкой
is_return_deductedbooleanНетВозврат вычитается из бонуса
itemsobject[]ДаСостав. Мин. 1 элементов. Макс. 1000 элементов
items[].product_idintegerДаТовар. Без повторов
items[].percentnumberНетБонус %. До 2 знаков после запятой. > 0. Не больше 100
items[].amountnumberНетFSM бонус. До 2 знаков после запятой. Не меньше 0.01. Не больше 999999999999.99. > 0
json
{
    "company_id": 1,
    "name": "Сентябрь — бонус за телевизоры",
    "is_discounted_excluded": 1,
    "is_return_deducted": 1,
    "items": [
        {
            "product_id": 1,
            "percent": 5
        },
        {
            "product_id": 2,
            "amount": 500
        }
    ]
}
bash
curl -X POST "https://api.wasyt.uz/company/bonus/product-rule" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"company_id":1,"name":"Сентябрь — бонус за телевизоры","is_discounted_excluded":1,"is_return_deducted":1,"items":[{"product_id":1,"percent":5},{"product_id":2,"amount":500}]}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
company_idintegerКомпания
namestringНазвание
is_discounted_excludedbooleanНе начисляется при продаже со скидкой
is_return_deductedbooleanВозврат вычитается из бонуса
is_activebooleanАктивен
updated_atstringОбновлено
created_atstringСоздано
updater_idintegerОбновитель
creator_idintegerСоздатель
idintegerID
items_countinteger
json
{
    "company_id": 1,
    "name": "Сентябрь — бонус за телевизоры",
    "is_discounted_excluded": true,
    "is_return_deducted": true,
    "is_active": true,
    "updated_at": "2026-09-30 12:51:05",
    "created_at": "2026-09-30 12:51:05",
    "updater_id": 2,
    "creator_id": 2,
    "id": 1,
    "items_count": 2
}

Пример ошибки · 422 ​

json
{
    "message": "Укажите либо процент бонуса, либо фиксированную сумму",
    "errors": {
        "items.0.percent": [
            "Укажите либо процент бонуса, либо фиксированную сумму"
        ]
    }
}

Изменить правило бонуса за товар ​

PUT/company/bonus/product-rule/{model}

Обновляет правило и полностью заменяет его список товаров переданным items. Компания правила не меняется, даже если передан другой company_id.

Из формы (multipart/form-data) метод PUT отправляется как POST с параметром ?_method=PUT.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Тело запроса ​

ПолеТипОбязательноОписание
company_idintegerДаКомпания. ID существующей записи, доступной пользователю
namestringДаНазвание. Макс. 255 символов
is_activebooleanНетАктивен
is_discounted_excludedbooleanНетНе начисляется при продаже со скидкой
is_return_deductedbooleanНетВозврат вычитается из бонуса
itemsobject[]ДаСостав. Мин. 1 элементов. Макс. 1000 элементов
items[].product_idintegerДаТовар. Без повторов
items[].percentnumberНетБонус %. До 2 знаков после запятой. > 0. Не больше 100
items[].amountnumberНетFSM бонус. До 2 знаков после запятой. Не меньше 0.01. Не больше 999999999999.99. > 0
json
{
    "company_id": 1,
    "name": "Сентябрь — бонус за телевизоры",
    "is_discounted_excluded": 1,
    "is_return_deducted": 1,
    "items": [
        {
            "product_id": 2,
            "amount": 700
        }
    ]
}
bash
curl -X PUT "https://api.wasyt.uz/company/bonus/product-rule/3" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"company_id":1,"name":"Сентябрь — бонус за телевизоры","is_discounted_excluded":1,"is_return_deducted":1,"items":[{"product_id":2,"amount":700}]}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
idintegerID
creator_idintegerСоздатель
updater_idintegerОбновитель
company_idintegerКомпания
namestringНазвание
is_activebooleanАктивен
is_discounted_excludedbooleanНе начисляется при продаже со скидкой
is_return_deductedbooleanВозврат вычитается из бонуса
items_countinteger
created_atstringСоздано
updated_atstringОбновлено
json
{
    "id": 3,
    "creator_id": 2,
    "updater_id": 2,
    "company_id": 1,
    "name": "Сентябрь — бонус за телевизоры",
    "is_active": true,
    "is_discounted_excluded": true,
    "is_return_deducted": true,
    "items_count": 1,
    "created_at": "2026-09-30 12:51:05",
    "updated_at": "2026-09-30 12:51:06"
}

Удалить правило бонуса за товар ​

DELETE/company/bonus/product-rule/{model}

Удаляет правило вместе с его товарами.

Из формы (multipart/form-data) метод DELETE отправляется как POST с параметром ?_method=DELETE.

Заголовки ​

ЗаголовокЗначениеОписание
AuthorizationBearer {token}Токен из POST /common/auth/login
Acceptapplication/jsonОтвет в JSON
Accept-LanguageruЯзык сообщений и названий: ru, uz, oz

Параметры пути ​

ПараметрОписание
modelID записи

Ответ · 200 ​

Поля ответа
ПолеТипОписание
messagestringСообщение
json
{
    "message": "Success"
}