Изменяет поставку. Меняются только переданные поля, остальные остаются прежними. Подробнее о частичном редактировании в статье Общие правила.
v1/purchases/edit.php
Параметры
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| purchase_id | int | Да | ID поставки |
| supplier_id | int | Нет | ID поставщика |
| supplier_name | string | Нет | Имя поставщика и поля supplier_* |
| materials | array | Нет | Строки материалов. Заменяют текущие строки целиком |
| products | array | Нет | Строки продуктов. Заменяют текущие строки целиком |
| date_placed | string | Нет | Дата заказа поставки |
| date_received | string | Нет | Дата получения. Пустая строка очищает ее |
| materials_storage_id | int | Нет | Склад материалов |
| products_storage_id | int | Нет | Склад продуктов |
| delivery_price | float | Нет | Стоимость доставки |
| discount | float | Нет | Скидка |
| notes | string | Нет | Заметки |
Статус и статус оплаты этим методом не меняются, для них есть v1/purchases/update_status и v1/purchases/update_payment.
Как работает
- Строки. Если передан materials или products, состав заменяется целиком, а непереданный массив считается пустым. Строки из ответа v1/purchases/get_entry можно отправить обратно без изменений.
- Строки не переданы. Controlata восстанавливает суммы строк такими, какими их ввели, до распределения доставки и скидки. Поэтому, если изменить только delivery_price или discount, суммы строк останутся прежними, а себестоимость строк распределится заново.
- Скидка на всю сумму. Если итог поставки равен 0 (скидка равна сумме строк и доставке), исходные суммы строк восстановить нельзя. Тогда передайте materials и products явно, иначе запрос будет отклонен.
- Цены. Цены материалов и себестоимость продуктов без состава обновляются только по строкам, у которых изменились количество, сумма или себестоимость. Изменение доставки или скидки меняет себестоимость всех строк, поэтому обновит цены всех позиций поставки.
- Поставщик. Без supplier_id и supplier_name поставщик остается прежним. supplier_name с тем же именем, что у текущего поставщика, не создает дубль. Другое имя создает нового поставщика. Текущего поставщика можно передать по supplier_id, даже если он уже удален.
- Склады. При смене склада поступление переносится на новый склад, остатки пересчитываются на обоих складах.
- Статус сохраняется. Если поставка уже получена, новые строки сразу поступают на склад. Если поставка получалась частями, изменение количества сначала затрагивает неполученную часть.
Пример запроса
Изменить стоимость доставки, не передавая строки:
{
"purchase_id": 29645,
"delivery_price": 3000
}
Суммы строк останутся 26000 и 4000, а себестоимость станет 28600 и 4400. Цены материалов обновятся по новой себестоимости.
Заменить состав поставки:
{
"purchase_id": 29645,
"materials": [
{
"sku": "M010",
"amount": 0.25,
"total": 32500
}
]
}
Пример ответа
{
"success": true
}
Ошибки
| Ошибка | Причина |
|---|---|
| No purchase_id in input | Не передан purchase_id |
| Purchase not found or access denied | Поставка не найдена или удалена |
| The purchase total is 0, so line totals cannot be restored. Pass materials and products explicitly | Итог поставки равен 0, а строки не переданы |
| Storage ID is not set | Передан пустой склад |
| Storage ID not found | Склад не найден или удален |
| Date is not a valid date in format YYYY-MM-DD | Неверная дата. Пустая date_placed тоже отклоняется |
| Materials is not an array | materials не массив (так же для products) |
| No products or materials in input | Переданы пустые materials и products |
| Material with SKU "M010" not found | Позиция не найдена или удалена |
| Supplier not found or access denied | Поставщик supplier_id не найден или удален |
| Supplier name must not be empty | Пустое supplier_name |
| Invalid supplier_type value. Must be one of: 1, 2, 3 | Неверный тип нового поставщика |
Остальные ошибки в строках те же, что в v1/purchases/add.