moysklad-extension-positions-smart-update
v0.0.1
Published
Оптимизация обновлений документов с позициями (расширение для библиотеки moysklad)
Downloads
4
Readme
moysklad-extension-positions-smart-update
Расширение для библиотеки moysklad
Оптимизирует процесс создания/обновления документов с большим числом позиций.
В зависимости от кол-ва позиций в документе выбирается один из вариантов:
если кол-во позиций в документе <= 100, то создание/обновление документа происходит стандартными методами
если кол-во позиций в документе > 100, то создание/обновление документа автоматически разбивается на несколько отдельных запросов (для обновление/создания/удаления позиций используются специальные сервисы
/positions
и/positions/delete
)
Установка
$ npm install moysklad-extension-positions-smart-update
Зависимости
- moysklad
>=0.2.0
Использование
Подключение
const Moysklad = require('moysklad').compose(
require('moysklad-extension-positions-smart-update'))
const moysklad = Moysklad()
Создание документа
moysklad.POST('entity/customerorder', {
name: 'order-0123',
description: 'Создание документа с позициями',
positions: [
{
assortment: {
meta: {
type: 'product'
href: moysklad.buildUrl('entity/product/1c18973b-674f-11e5-7a07-673d000524d7')
}
},
quantity: 1
},
// ... остальные позиции
]
})
Если в документе более 100 позиций, то создание документа пройдет за два этапа:
- создание документа с первыми 100 позициями
- остальные позиции будут добавлены в созданный документ отдельным запросом(ами)
Метод вернет созданный документ с полным списком позиций в формате коллекции МойСклад
Обновление документа
// идентификатор обновляемого документа
let orderId = '191ebffa-45df-11e6-7a69-93a7000513f8'
moysklad.PUT(['entity/customerorder', orderId], {
description: 'Обновление документа и позиций',
positions: [
// БЕЗ ИЗМЕНЕНИЙ - указан только id (позиция не будет обновлена)
{
id: 'd022cba8-fe90-11e6-7a69-97110014817c'
},
// ОБНОВЛЕНИЕ - указан id и обновляемые поля
{
id: 'd022c8a2-fe90-11e6-7a69-97110014817b',
quantity: 2
},
// СОЗДАНИЕ - id не указан
{
assortment: {
meta: {
type: 'product'
href: moysklad.buildUrl('entity/product/1c18973b-674f-11e5-7a07-673d000524d7')
}
},
quantity: 1
},
// УДАЛЕНИЕ - указано meta (или id) и поле deleted со значением true
// Внимание! Если позиций в документе больше 100 и удаляемые позиции не указаны явно, то позиции из документа могут быть не удалены.
{
meta: {
type: 'customerorderposition'
href: moysklad.buildUrl(['entity/customerorder', orderId, 'positions',
'd022cf90-fe90-11e6-7a69-97110014817e'])
},
id: 'd022cf90-fe90-11e6-7a69-97110014817e',
deleted: true
}
]
})
Правила работы с позициями в рамках текущего расширения не отличаются от правил установленных в стандартном API, за тем исключением, что нет ограничений на кол-во позиций в массиве и при обновлении позиций в рамках текущего документа необходимо явно указывать удаляемые позиции (см. пример с удалением позиции).