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

2.9 KiB
Raw Blame History

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.