food-market/docs/sprint19-progress.md
nns 6940aa40df
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
feat(s19): bulk-операции + presets + power-user UX (7 пунктов)
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>
2026-06-07 21:08:48 +05:00

49 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.