Some checks failed
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Docker Web / Build + push Web (push) Has been cancelled
Docker Web / Deploy Web on stage (push) Has been cancelled
1. Bulk-обновление товаров — Product.IsArchived + IsAvailableForSale
(Phase19a миграция), POST /api/catalog/products/bulk-update {ids, op, params}
с операциями price-adjust (% / абсолют), change-group, archive/unarchive,
toggle-sale. Одной транзакцией, multi-tenant через query-filter.
Frontend: checkbox-колонка, sticky bulk-bar, модалка.
2. SavedPresets — domain UserPreset (Phase19b: jsonb ConfigJson,
unique по OrgId+UserId+PageKey+Name). /api/user/presets CRUD per-user.
<SavedPresets> компонент с chip-bar и сохранением. Применено к /reports/
sales/stock/profit + /catalog/products.
3. QuickActionsPalette — Cmd+J открывает отдельную палитру с 14 действиями
+ история topa-10 в localStorage.fm.quickActions.recent. ↑↓/Enter/Esc
keyboard nav. Cmd+K (поиск) и Cmd+J (действия) — разные палитры.
4. Inline-edit цены — PATCH /api/catalog/products/{id}/price новый endpoint
с RoundIfNeeded. <InlinePriceCell> с dblclick → input, optimistic update
+ revert при ошибке.
5. CSV import товаров — POST /api/catalog/products/import-csv (rows[]).
Клиент парсит CSV (auto-detect разделитель ,/;), сервер commit'ит
транзакцией. autoCreateGroup для новых групп. <ProductsCsvImport>
модалка с preview и подсветкой ошибочных строк.
6. CSV/XLSX export — endpoint'ы /export на 5 контроллерах (products,
counterparties, stock, retail-sales, supplies). Reuse существующего
ReportExport.Csv/Xlsx. <ExportButton> dropdown с двумя форматами.
7. Keyboard-first nav в DataTable — ↑↓/Home/End/Enter/Space/Delete props
keyboardNav/onSelect/onDelete. Подсветка focused-строки. Документация
в src/help/keyboard-shortcuts.md + 2 новые HelpTopic'a.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
49 lines
2.9 KiB
Markdown
49 lines
2.9 KiB
Markdown
# Sprint 19 — bulk-операции + сохранённые пресеты + power-user UX
|
||
|
||
Цель: розничный админ работает быстрее в 2-3 раза за счёт массовых
|
||
операций, сохранённых пресетов фильтров, keyboard-first UX, inline-edit
|
||
и CSV import/export.
|
||
|
||
Старт: 2026-06-07 (после Sprint 18). Исполнитель: Claude Opus 4.7.
|
||
|
||
## Принципы
|
||
|
||
- Bulk-операции — одной транзакцией; multi-tenant guard в каждом endpoint'е.
|
||
- Пресеты — per-user в org (cross-org нельзя видеть).
|
||
- Inline-edit с optimistic update, fallback на revert + toast.
|
||
- НЕ трогать: `global.json`, prod admin.food-market.kz, POS WPF.
|
||
|
||
## Чек-лист
|
||
|
||
- [ ] **1. Bulk-обновление товаров** — checkbox-колонка + sticky панель
|
||
на /catalog/products. Операции: «+%/+₸ к цене», «Сменить группу»,
|
||
«Архивировать», «Снять с продажи». Endpoint
|
||
`POST /api/catalog/products/bulk-update {ids, op, params}` — одна
|
||
транзакция, query-filter гарантирует tenant-isolation.
|
||
- [ ] **2. Сохранённые фильтры (presets)** — domain `UserPreset`
|
||
(UserId+OrgId+PageKey+Name+ConfigJson). `<SavedPresets>` chips
|
||
сверху списка. CRUD endpoint'ы. Применено к /reports/sales,
|
||
/reports/stock, /reports/profit, /catalog/products.
|
||
- [ ] **3. Quick-actions (Cmd+J)** — отдельная палитра от Cmd+K.
|
||
Меню недавних действий пользователя; хранится в localStorage
|
||
per-user (по userId). Топ-10 пунктов.
|
||
- [ ] **4. Inline-edit в таблицах** — dblclick по цене на
|
||
/catalog/products → input → Enter сохраняет (`PATCH
|
||
/api/catalog/products/{id}/price`). То же для остатка (admin
|
||
only, через `enter` корректирующий). Optimistic + revert.
|
||
- [ ] **5. Импорт CSV для товаров** — модалка с upload, preview
|
||
таблицы (валидация на клиенте + на сервере), коммит транзакцией.
|
||
Колонки: name,price,unit,group,barcode. Ошибки строк показаны
|
||
в preview.
|
||
- [ ] **6. Экспорт CSV/XLSX** — кнопка «Экспорт» в списках:
|
||
/catalog/products, /catalog/counterparties, /sales/retail,
|
||
/purchases/supplies, /inventory/stock. CSV — серверная генерация
|
||
с теми же фильтрами что и поиск.
|
||
- [ ] **7. Keyboard-first навигация по таблицам** — ↑/↓/Enter/Delete/
|
||
Space в DataTable + документация на /help.
|
||
|
||
## Журнал
|
||
|
||
### 2026-06-07 старт
|
||
Sprint 18 закрыт (7/7 ✓ + 1 hotfix). Поехали по power-user UX.
|