3.6 KiB
МойСклад: синхронизация заказов покупателей
Дата: 2026-03-20
Приложение: picking_app
Цель
Расширить существующую интеграцию с МойСкладом: добавить синхронизацию заказов покупателей (customerorder) в очередь комплектации наравне с перемещениями (move).
Контекст
В picking_app уже реализована синхронизация перемещений (sync_picking_list()), хранение токена в Picking Settings, пагинация через nextHref. Заказы должны попасть в ту же очередь с минимальными изменениями в UI и логике комплектации.
Модель данных
Picking Settings — новое поле
| Поле | Тип | Значение по умолчанию |
|---|---|---|
ms_order_state |
Data | "Подтверждён" |
Picking List — новое поле
| Поле | Тип | Значение |
|---|---|---|
source_type |
Select | "Move" / "Order" |
Для существующих записей source_type не проставляется (остаётся пустым — UI трактует как Move).
Логика синхронизации
sync_picking_orders()
- Читает
ms_order_stateизPicking Settings(fallback:"Подтверждён") - Тянет
customerorderиз МС:GET /entity/customerorder expand=state,positions.assortment,positions.assortment.uom limit=100 order=moment,desc - Фильтрует на клиенте:
order["state"]["name"] == ms_order_state to_warehouseберётся изstoreобъекта заказа (склад отгрузки);from_warehouse— пустой- Создаёт/обновляет
Picking Listсsource_type = "Order"по той же логике чтоsync_picking_list()
sync_all() — новая публичная функция (@frappe.whitelist)
Вызывает последовательно sync_picking_list() и sync_picking_orders(), возвращает суммарный результат:
{"status": "ok", "moves": {"created": N, "updated": N}, "orders": {"created": N, "updated": N}}
Существующая sync_picking_list() при создании новых записей проставляет source_type = "Move".
UI
В попап-диалоге выбора позиций:
- Добавить колонку Тип (
source_type): отображает "Перемещение" / "Заказ" - Добавить фильтр по типу: табы или кнопки Все / Перемещения / Заказы
- Логика добавления позиций в
Picking Document— без изменений
Что не меняется
- Структура
Picking List Item - Логика
add_items_from_picking_list() - Логика
get_picking_list_items()— добавить опциональный параметрsource_typeдля фильтрации - Статусная машина Picking List (Draft → Partial → Added)
Ограничения
- Фильтрация по статусу происходит на стороне клиента (МС API не поддерживает фильтр по
state.nameнапрямую через query params без знания UUID состояния) from_warehouseу заказов не заполняется