Skip to content

Перемещения ​

Перемещение товаров между складами, в том числе между компанией и её филиалами. До подтверждения товар остаётся на складе-отправителе, но уже недоступен; остатки переносятся при «Принять товар».

МетодАдресНазначение
GET/company/trade/transfer/statsСтатистика перемещений
GET/company/trade/transfer/download-exampleШаблон импорта перемещения
POST/company/trade/transfer/importИмпорт перемещения из Excel
PATCH/company/trade/transfer/{model}/completeПринять товар
PATCH/company/trade/transfer/{model}/cancelОтменить перемещение
GET/company/trade/transferСписок перемещений
GET/company/trade/transfer/{model}Детали перемещения
POST/company/trade/transferСоздать перемещение
PUT/company/trade/transfer/{model}Изменить перемещение

Статистика перемещений ​

GET/company/trade/transfer/stats

Карточки раздела: всего перемещений total_count, в пути in_transit_count, принято completed_count и перемещённое количество moved_quantity.

Заголовки ​

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

Ответ · 200 ​

Поля ответа
ПолеТипОписание
total_countinteger
in_transit_countinteger
completed_countinteger
moved_quantityinteger
json
{
    "total_count": 1,
    "in_transit_count": 1,
    "completed_count": 0,
    "moved_quantity": 0
}

Шаблон импорта перемещения ​

GET/company/trade/transfer/download-example

Скачивает пример Excel-файла для импорта перемещения.

Заголовки ​

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

Ответ · 200 ​

Ответ — файл или текст, не JSON.

Импорт перемещения из Excel ​

POST/company/trade/transfer/import

Создаёт перемещение из файла (до 500 строк: товар, вариация, количество). Товар ищется по названию на складе-отправителе, количество не больше остатка; товары из активной продажи перемещать нельзя. Ошибки указывают ячейку.

Заголовки ​

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

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

ПолеТипОбязательноОписание
company_from_idintegerДаИз компании. ID существующей записи, доступной пользователю
company_to_idintegerДаВ компанию. ID существующей записи, доступной пользователю
stock_from_idintegerДаИз склада. ID существующей записи, доступной пользователю
stock_to_idintegerДаВ склад. Отличается от stock_from_id. ID существующей записи, доступной пользователю
commentstringНетКомментарий. Макс. 1000 символов
filefileДаФайл. Форматы: xlsx. Макс. 1024 КБ
json
{
    "company_from_id": 1,
    "company_to_id": 1,
    "stock_from_id": 1,
    "stock_to_id": 2,
    "comment": "Comment 3"
}
bash
curl -X POST "https://api.wasyt.uz/company/trade/transfer/import" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"company_from_id":1,"company_to_id":1,"stock_from_id":1,"stock_to_id":2,"comment":"Comment 3"}'

Ответ · 200 ​

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

Принять товар ​

PATCH/company/trade/transfer/{model}/complete

Завершает перемещение: остатки переносятся на склад-получатель, цены товаров устанавливаются в компании-получателе. receiver_id — кто принял (по умолчанию текущий пользователь). Подтвердить может любая сторона с доступом к одному из складов, только в статусе waiting_for_confirmation.

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

Заголовки ​

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

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

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

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

ПолеТипОбязательноОписание
receiver_idstringНетДопустимые значения: 2, 3, 5, 6, 7, 4

Ответ · 200 ​

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

Отменить перемещение ​

PATCH/company/trade/transfer/{model}/cancel

Отменяет перемещение с необязательной причиной cancel_reason; зарезервированное количество снова становится доступным на складе-отправителе. Только в статусе waiting_for_confirmation и пользователем с доступом к одному из складов.

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

Заголовки ​

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

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

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

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

ПолеТипОбязательноОписание
cancel_reasonstringНетПричина отмены. Макс. 1000 символов
json
{
    "cancel_reason": "Cancel reason 1"
}
bash
curl -X PATCH "https://api.wasyt.uz/company/trade/transfer/1/cancel" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"cancel_reason":"Cancel reason 1"}'

Ответ · 200 ​

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

Список перемещений ​

GET/company/trade/transfer

Перемещения с пагинацией и фильтрами, с кодом документа TR-…, складами, подписантами и водителем.

Заголовки ​

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

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

ПараметрОписание
filter[id]ID — точное значение
filter[code]Код — поиск по части строки
filter[creator_id]Создатель — точное значение
filter[updater_id]Обновитель — точное значение
filter[sender_id]точное значение
filter[receiver_id]точное значение
filter[company_from_id]Из компании — точное значение
filter[company_to_id]В компанию — точное значение
filter[stock_from_id]Из склада — точное значение
filter[stock_to_id]В склад — точное значение
filter[driver_id]точное значение
filter[driver.car_number]поиск по части строки
filter[status]Статус — точное значение
filter[created_at]Создано — период: [0] — с, [1] — по (Y-m-d)
filter[completed_at]период: [0] — с, [1] — по (Y-m-d)
sort[]Сортировка, - — по убыванию: id, -id, code, -code, created_at, -created_at
with[]Подгрузить связи: creator.profile, updater.profile, sender.profile, receiver.profile, company_from, company_to, stock_from, stock_to, driver, products, products.product, products.product.unit, products.sale_price
pageНомер страницы, с 1
page-sizeЗаписей на странице, не больше 20
http
GET /company/trade/transfer?sort[0]=id&sort[1]=-id&sort[2]=code&sort[3]=-code&sort[4]=created_at&sort[5]=-created_at

Ответ · 200 ​

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

Поля ответа
ПолеТипОписание
dataobject[]Данные
data[].idintegerID
data[].creator_idintegerСоздатель
data[].updater_idintegerОбновитель
data[].company_from_idintegerИз компании
data[].company_to_idintegerВ компанию
data[].stock_from_idintegerИз склада
data[].stock_to_idintegerВ склад
data[].codestringКод
data[].sender_idinteger
data[].receiver_idnull
data[].driver_idinteger
data[].commentstringКомментарий
data[].statusstringСтатус
data[].completed_atnull
data[].cancel_reasonstringПричина отмены
data[].created_atstringСоздано
data[].updated_atstringОбновлено
json
{
    "data": [
        {
            "id": 1,
            "creator_id": 2,
            "updater_id": 2,
            "company_from_id": 1,
            "company_to_id": 1,
            "stock_from_id": 1,
            "stock_to_id": 2,
            "code": "TR-0001",
            "sender_id": 2,
            "receiver_id": null,
            "driver_id": 1,
            "comment": "Comment 1",
            "status": "waiting_for_confirmation",
            "completed_at": null,
            "cancel_reason": "Cancel reason 1",
            "created_at": "2026-09-30 12:47:59",
            "updated_at": "2026-09-30 12:47:59"
        }
    ],
    "links": {
        "first": "https://api.wasyt.uz/company/trade/transfer?page=1",
        "last": "https://api.wasyt.uz/company/trade/transfer?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [],
        "path": "https://api.wasyt.uz/company/trade/transfer",
        "per_page": 20,
        "to": 1,
        "total": 1
    }
}

Детали перемещения ​

GET/company/trade/transfer/{model}

Один документ перемещения: код, склады отправителя и получателя, кто отправил и принял, водитель, статус.

Заголовки ​

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

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

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

Ответ · 200 ​

Поля ответа
ПолеТипОписание
idintegerID
creator_idintegerСоздатель
updater_idintegerОбновитель
company_from_idintegerИз компании
company_to_idintegerВ компанию
stock_from_idintegerИз склада
stock_to_idintegerВ склад
codestringКод
sender_idinteger
receiver_idnull
driver_idinteger
commentstringКомментарий
statusstringСтатус
completed_atnull
cancel_reasonstringПричина отмены
created_atstringСоздано
updated_atstringОбновлено
json
{
    "id": 1,
    "creator_id": 2,
    "updater_id": 2,
    "company_from_id": 1,
    "company_to_id": 1,
    "stock_from_id": 1,
    "stock_to_id": 2,
    "code": "TR-0001",
    "sender_id": 2,
    "receiver_id": null,
    "driver_id": 1,
    "comment": "Comment 1",
    "status": "waiting_for_confirmation",
    "completed_at": null,
    "cancel_reason": "Cancel reason 1",
    "created_at": "2026-09-30 12:47:59",
    "updated_at": "2026-09-30 12:47:59"
}

Создать перемещение ​

POST/company/trade/transfer

Создаёт перемещение в статусе waiting_for_confirmation с кодом TR-…. Количество проверяется по доступному остатку склада-отправителя (за вычетом других незавершённых перемещений и открытых корзин продажи). Отправитель по умолчанию — директор компании; водитель выбирается по driver_id или создаётся из заполненных полей.

Заголовки ​

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

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

ПолеТипОбязательноОписание
company_from_idintegerДаИз компании. ID существующей записи, доступной пользователю
company_to_idintegerДаВ компанию. ID существующей записи, доступной пользователю
stock_from_idintegerДаИз склада. ID существующей записи, доступной пользователю
stock_to_idintegerДаВ склад. Отличается от stock_from_id. ID существующей записи, доступной пользователю
sender_idstringНетДопустимые значения: 2, 3, 5, 6, 7, 4
driver_idintegerНетID существующей записи, доступной пользователю
car_numberstringНетМакс. 50 символов
driver_namestringНетМакс. 255 символов
driver_phonestringНетМакс. 50 символов
commentstringНетКомментарий. Макс. 1000 символов
productsobject[]ДаПродукты. Макс. 500 элементов
products[].idintegerНетID
products[].product_idintegerДаПродукт. Без повторов
products[].quantitynumberДаКоличество. До 4 знаков после запятой. Не меньше 0.0001
json
{
    "company_from_id": 1,
    "company_to_id": 1,
    "stock_from_id": 1,
    "stock_to_id": 2,
    "comment": "Comment 3",
    "car_number": "01 A 777 AA",
    "driver_name": "Rustamov Jasur",
    "driver_phone": "+998 90 123 45 67",
    "products": [
        {
            "product_id": 1,
            "quantity": 1
        },
        {
            "product_id": 2,
            "quantity": 2
        }
    ]
}
bash
curl -X POST "https://api.wasyt.uz/company/trade/transfer" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"company_from_id":1,"company_to_id":1,"stock_from_id":1,"stock_to_id":2,"comment":"Comment 3","car_number":"01 A 777 AA","driver_name":"Rustamov Jasur","driver_phone":"+998 90 123 45 67","products":[{"product_id":1,"quantity":1},{"product_id":2,"quantity":2}]}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
company_from_idintegerИз компании
company_to_idintegerВ компанию
stock_from_idintegerИз склада
stock_to_idintegerВ склад
commentstringКомментарий
driver_idinteger
updated_atstringОбновлено
created_atstringСоздано
updater_idintegerОбновитель
creator_idintegerСоздатель
codestringКод
sender_idinteger
idintegerID
json
{
    "company_from_id": 1,
    "company_to_id": 1,
    "stock_from_id": 1,
    "stock_to_id": 2,
    "comment": "Comment 3",
    "driver_id": 3,
    "updated_at": "2026-09-30 12:55:58",
    "created_at": "2026-09-30 12:55:58",
    "updater_id": 2,
    "creator_id": 2,
    "code": "TR-0002",
    "sender_id": 2,
    "id": 23
}

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

json
{
    "message": "Значение поля Количество не может быть больше 0.",
    "errors": {
        "products.0.quantity": [
            "Значение поля Количество не может быть больше 0."
        ]
    }
}

Изменить перемещение ​

PUT/company/trade/transfer/{model}

Перезаписывает перемещение и его строки по правилам создания; сам документ при проверке остатка не учитывается. Только в статусе waiting_for_confirmation; без полей транспорта водитель остаётся прежним.

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

Заголовки ​

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

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

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

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

ПолеТипОбязательноОписание
company_from_idintegerДаИз компании. ID существующей записи, доступной пользователю
company_to_idintegerДаВ компанию. ID существующей записи, доступной пользователю
stock_from_idintegerДаИз склада. ID существующей записи, доступной пользователю
stock_to_idintegerДаВ склад. Отличается от stock_from_id. ID существующей записи, доступной пользователю
sender_idstringНетДопустимые значения: 2, 3, 5, 6, 7, 4
driver_idintegerНетID существующей записи, доступной пользователю
car_numberstringНетМакс. 50 символов
driver_namestringНетМакс. 255 символов
driver_phonestringНетМакс. 50 символов
commentstringНетКомментарий. Макс. 1000 символов
productsobject[]ДаПродукты. Макс. 500 элементов
products[].idintegerНетID
products[].product_idintegerДаПродукт. Без повторов
products[].quantitynumberДаКоличество. До 4 знаков после запятой. Не меньше 0.0001
json
{
    "company_from_id": 1,
    "company_to_id": 1,
    "stock_from_id": 1,
    "stock_to_id": 2,
    "comment": "Comment 1",
    "products": [
        {
            "product_id": 1,
            "quantity": 1
        },
        {
            "product_id": 2,
            "quantity": 2
        }
    ]
}
bash
curl -X PUT "https://api.wasyt.uz/company/trade/transfer/1" \
  -H "Accept: application/json" \
  -H "Accept-Language: ru" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"company_from_id":1,"company_to_id":1,"stock_from_id":1,"stock_to_id":2,"comment":"Comment 1","products":[{"product_id":1,"quantity":1},{"product_id":2,"quantity":2}]}'

Ответ · 200 ​

Поля ответа
ПолеТипОписание
idintegerID
creator_idintegerСоздатель
updater_idintegerОбновитель
company_from_idintegerИз компании
company_to_idintegerВ компанию
stock_from_idintegerИз склада
stock_to_idintegerВ склад
codestringКод
sender_idinteger
receiver_idnull
driver_idinteger
commentstringКомментарий
statusstringСтатус
completed_atnull
cancel_reasonstringПричина отмены
created_atstringСоздано
updated_atstringОбновлено
json
{
    "id": 1,
    "creator_id": 2,
    "updater_id": 2,
    "company_from_id": 1,
    "company_to_id": 1,
    "stock_from_id": 1,
    "stock_to_id": 2,
    "code": "TR-0001",
    "sender_id": 2,
    "receiver_id": null,
    "driver_id": 1,
    "comment": "Comment 1",
    "status": "waiting_for_confirmation",
    "completed_at": null,
    "cancel_reason": "Cancel reason 1",
    "created_at": "2026-09-30 12:47:59",
    "updated_at": "2026-09-30 12:56:01"
}