mirror of
https://github.com/frappe/frappe_docker.git
synced 2026-06-22 15:55:09 +00:00
docs: add МойСклад orders sync design spec
This commit is contained in:
parent
9067451ec7
commit
0f6efacf11
1 changed files with 66 additions and 0 deletions
|
|
@ -0,0 +1,66 @@
|
||||||
|
# МойСклад: синхронизация заказов покупателей
|
||||||
|
|
||||||
|
**Дата:** 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()`
|
||||||
|
1. Читает `ms_order_state` из `Picking Settings` (fallback: `"Подтверждён"`)
|
||||||
|
2. Тянет `customerorder` из МС:
|
||||||
|
```
|
||||||
|
GET /entity/customerorder
|
||||||
|
expand=state,positions.assortment,positions.assortment.uom
|
||||||
|
limit=100
|
||||||
|
order=moment,desc
|
||||||
|
```
|
||||||
|
3. Фильтрует на клиенте: `order["state"]["name"] == ms_order_state`
|
||||||
|
4. `to_warehouse` берётся из `store` объекта заказа (склад отгрузки); `from_warehouse` — пустой
|
||||||
|
5. Создаёт/обновляет `Picking List` с `source_type = "Order"` по той же логике что `sync_picking_list()`
|
||||||
|
|
||||||
|
### `sync_all()` — новая публичная функция (`@frappe.whitelist`)
|
||||||
|
Вызывает последовательно `sync_picking_list()` и `sync_picking_orders()`, возвращает суммарный результат:
|
||||||
|
```json
|
||||||
|
{"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` у заказов не заполняется
|
||||||
Loading…
Reference in a new issue