Эпик 16: корзина+заказ-агрегат (backend+API) + восстановленный фронт-WIP выдачи/склада #58

Merged
ant merged 37 commits from feat/E16-korzina-zakaz-agregat into marketplace2 2026-06-05 06:55:12 +00:00
Owner

PR несёт ДВЕ части — смотреть/тестировать вместе по просьбе (чтобы не плодить PR).

Часть 1 — Эпик 16 (задача 598-33): корзина + заказ-агрегат, backend + клиентский API

Коммиты 16e304…→c00f192. База — marketplace2 (после merge Эпика 15 #53).

  • 16.5 модель: checkout_id (uuid, nullable) на marketplace_order сквозь все слои + индекс (coopname, orderer_account, checkout_id). Миграции нет — synchronize.
  • 16.1 корзина (backend): off-chain marketplace_cart + marketplace_cart_item (одна на orderer, слияние позиций по unique (cart_id, offer_id)), domain/repo/adapter/mapper/DTO, сервис (инвариант «одна корзина — один КУ»), резолвер (getCart + add/update/remove/clear/setDeliveryPoint). Ресурс Cart: ['manage:own'] у orderer.
  • 16.3 КУ-фильтр каталога: OfferListFilter.delivery_braname (jsonb @>), проброс в marketplaceListCatalog.
  • 16.2 checkout: marketplaceCheckoutCart — предвалидация баланса, построчное создание заказов с общим checkout_id + КУ, частичный сбой не откатывает (остаток в корзине для повтора).
  • codegen + SDK: регенерён ZEUS; обёртки cartSelector/checkoutResult, query GetCart, mutations AddToCart/UpdateCartItem/RemoveFromCart/ClearCart/SetCartDeliveryPoint/CheckoutCart; заодно заведена ожидавшая в дереве схема marketplaceBindInventoryBarcode.
  • Валидация: controller tsc EXIT=0, sdk tsc EXIT=0; DI/access/zeus согласованы.

Часть 2 — ВОССТАНОВЛЕННЫЙ ФРОНТ-WIP (это НЕ Эпик 16!) — коммит 7a92f1a

Незакоммиченные фронт-правки из прошлых сессий, найденные в рабочем дереве mono-ai-4 и забытые без коммита/PR. Относятся к Эпикам 6/9 (выдача/склад), не к корзине. Внесены сюда для совместного ревью. ВНИМАНИЕ: это WIP — сборку фронта (vue-tsc) не гонял, может быть незакончено; на тест как есть.

Что и куда относится:

  • Сводная подпись получения (Эпик 6, продолжение merged-коммита «выдача сгруппирована по заказчику»):
    • MyOrdersPage: selectedOrder → selectedOrders[]; startFinalize сводит все READY_TO_RECEIVE одного КУ — пайщик подтверждает разом.
    • OrdererFinalizeIssuanceDialog: переведён с :order на :orders (массив).
    • OperatorIssuancePage: группировка выдачи (IssuanceGroup) по статусам/пайщику.
    • IssueActOpenDialog: правки логики подписания акта выдачи.
  • Удаление страницы «Сводный стол КУ» (BranchChairmanBranchOrders): удалены страница + роут в market/install.ts + док (branch-orders.md) + harness-сценарий (.mjs) + ссылки в PLAN.md/mkdocs.yml. Битых ссылок не осталось (проверено grep). Роут «Склад моего КУ» поднят выше.
  • OperatorInventoryLabelingPage: крупная переработка раскладки/полок/маркировки склада (Эпик 5/9).
  • OffererSupplyPreparationPage: добавлен PageHint + правки.
  • Канон-паддинги (MarketplaceCatalogPage, MyOrdersPage): padding 0… → var(--p-6) — «воздух сверху как на столе поставщика», единый канон столов.
  • CLAUDE.md: дизайн-канон-секция переписана со скилла /mono-desktop-canon (источник истины — repo tokens.css + _dev/ui, а не внешний HTML). Это doc/инструкции — если не хочешь в marketplace2-PR, скажу, вынесу в dev отдельно.

Бэкап WIP (на всякий): ветка origin/wip/pre-e16-desktop-docs + патч на диске билд-машины.

Осталось вне PR

Desktop-фаза Эпика 16 (страница корзины, КУ в шапке, оформление, группировка MyOrders/выдачи по checkout_id) + доки PRD/UX.

PR несёт ДВЕ части — смотреть/тестировать вместе по просьбе (чтобы не плодить PR). ## Часть 1 — Эпик 16 (задача 598-33): корзина + заказ-агрегат, backend + клиентский API Коммиты 16e304…→c00f192. База — marketplace2 (после merge Эпика 15 #53). - 16.5 модель: checkout_id (uuid, nullable) на marketplace_order сквозь все слои + индекс (coopname, orderer_account, checkout_id). Миграции нет — synchronize. - 16.1 корзина (backend): off-chain marketplace_cart + marketplace_cart_item (одна на orderer, слияние позиций по unique (cart_id, offer_id)), domain/repo/adapter/mapper/DTO, сервис (инвариант «одна корзина — один КУ»), резолвер (getCart + add/update/remove/clear/setDeliveryPoint). Ресурс Cart: ['manage:own'] у orderer. - 16.3 КУ-фильтр каталога: OfferListFilter.delivery_braname (jsonb @>), проброс в marketplaceListCatalog. - 16.2 checkout: marketplaceCheckoutCart — предвалидация баланса, построчное создание заказов с общим checkout_id + КУ, частичный сбой не откатывает (остаток в корзине для повтора). - codegen + SDK: регенерён ZEUS; обёртки cartSelector/checkoutResult, query GetCart, mutations AddToCart/UpdateCartItem/RemoveFromCart/ClearCart/SetCartDeliveryPoint/CheckoutCart; заодно заведена ожидавшая в дереве схема marketplaceBindInventoryBarcode. - Валидация: controller tsc EXIT=0, sdk tsc EXIT=0; DI/access/zeus согласованы. ## Часть 2 — ВОССТАНОВЛЕННЫЙ ФРОНТ-WIP (это НЕ Эпик 16!) — коммит 7a92f1a Незакоммиченные фронт-правки из прошлых сессий, найденные в рабочем дереве mono-ai-4 и забытые без коммита/PR. Относятся к Эпикам 6/9 (выдача/склад), не к корзине. Внесены сюда для совместного ревью. ВНИМАНИЕ: это WIP — сборку фронта (vue-tsc) не гонял, может быть незакончено; на тест как есть. Что и куда относится: - **Сводная подпись получения (Эпик 6, продолжение merged-коммита «выдача сгруппирована по заказчику»):** - MyOrdersPage: selectedOrder → selectedOrders[]; startFinalize сводит все READY_TO_RECEIVE одного КУ — пайщик подтверждает разом. - OrdererFinalizeIssuanceDialog: переведён с :order на :orders (массив). - OperatorIssuancePage: группировка выдачи (IssuanceGroup) по статусам/пайщику. - IssueActOpenDialog: правки логики подписания акта выдачи. - **Удаление страницы «Сводный стол КУ» (BranchChairmanBranchOrders):** удалены страница + роут в market/install.ts + док (branch-orders.md) + harness-сценарий (.mjs) + ссылки в PLAN.md/mkdocs.yml. Битых ссылок не осталось (проверено grep). Роут «Склад моего КУ» поднят выше. - **OperatorInventoryLabelingPage:** крупная переработка раскладки/полок/маркировки склада (Эпик 5/9). - **OffererSupplyPreparationPage:** добавлен PageHint + правки. - **Канон-паддинги** (MarketplaceCatalogPage, MyOrdersPage): padding 0… → var(--p-6) — «воздух сверху как на столе поставщика», единый канон столов. - **CLAUDE.md:** дизайн-канон-секция переписана со скилла /mono-desktop-canon (источник истины — repo tokens.css + _dev/ui, а не внешний HTML). Это doc/инструкции — если не хочешь в marketplace2-PR, скажу, вынесу в dev отдельно. Бэкап WIP (на всякий): ветка origin/wip/pre-e16-desktop-docs + патч на диске билд-машины. ## Осталось вне PR Desktop-фаза Эпика 16 (страница корзины, КУ в шапке, оформление, группировка MyOrders/выдачи по checkout_id) + доки PRD/UX.
claude added 4 commits 2026-06-02 09:50:38 +00:00
claude added 1 commit 2026-06-02 10:44:22 +00:00
claude changed title from Эпик 16: Корзина и заказ-агрегат — backend + клиентский API to Эпик 16: корзина+заказ-агрегат (backend+API) + восстановленный фронт-WIP выдачи/склада 2026-06-02 10:45:09 +00:00
claude added 2 commits 2026-06-02 11:51:10 +00:00
claude added 1 commit 2026-06-02 11:55:45 +00:00
Author
Owner

Часть 3 — desktop-фаза Эпика 16 (КУ-first), коммиты 79c7525→6dfd826

Реализована вся функциональная desktop-фаза по полевой модели 2026-06-02 «сначала КУ → отфильтрованная витрина → корзина → заказ-агрегат».

16.4 — выбор КУ с картой при онбординге + КУ в шапке. На экране «Присоединение к Столу заказов» первый шаг — выбор пункта выдачи (КУ) из списка + карта (виджет KUSelector на KUMapWithList). КУ выбирается ДО подписи оферты (held локально), подпись без выбранного КУ заблокирована; persist через setCartDeliveryPoint сразу после синка подписи (до неё нет orderer-прав на Cart). КУ виден/меняется в шапке стола (KUHeaderBar: текущий пункт + «Сменить» → диалог список+карта; смена видна только если активных КУ >1). OnboardingCPPGate переписан на канон (BaseCard/BaseButton/BaseCheckbox/BaseChip, Material-иконки, --p-*).

16.3 — КУ-scoped каталог. Витрина фильтруется по текущему КУ (delivery_braname). Пока КУ не выбран — каталог скрыт, показывается стартовый выбор КУ. Смена КУ в шапке перегружает витрину.

16.1 — корзина. Новая entity MarketplaceCart (api + Pinia-стор; «текущий КУ» = cart.delivery_braname). В каталоге/детали оффера действие — «В корзину» (AddToCartDialog, только количество — КУ глобальный); per-order выбор КУ удалён (OrderCreateDialogAddToCartDialog). Страница корзины /market/cart (пункт меню «Корзина») + индикатор корзины с числом позиций в шапке каталога.

16.2 — оформление. «Оформить заказ» → marketplaceCheckoutCart; показ числа созданных заказов + непрошедшего остатка (failed_lines с причинами) + «Повторить оформление остатка» тем же checkout_id.

16.6 — MyOrders по заказу-агрегату. Многопозиционные заказы (общий checkout_id) — одной группой с шапкой (дата/пункт/позиции/сумма); одиночные/легаси — плоско.

16.7 — OperatorIssuance уже сгруппирован по заказчику со списком единиц (переработка Эпика 6/9) = целевая «единицы по заказам пайщика»; рабочий экран не трогал.

Плюс отдельным коммитом — фикс L1 CouncilOnboardingCard (ровный ритм шагов вместо «гармошки», солидные кнопки навигации).

⚠️ Type-check: локальный vue-tsc не гонялся (канон: делегируется CI; vite-plugin-checker выключен, полный vue-tsc при живом quasar dev вешает машину ~час). CI typecheck.yaml триггерится только на PR в dev — на PR в marketplace2 НЕ запускается; vue-tsc этого кода пройдёт на гейте marketplace2 → dev. Все правки выверены по реальным API компонентов, ESLint зелёный по всем затронутым файлам.

⚠️ Известный мелкий GAP: счётчики категорий каталога (CategoryOfferCounts) пока не фильтруются по КУ — число во вкладке может превышать показанное под КУ (фикс — отдельным backend-изменением).

## Часть 3 — desktop-фаза Эпика 16 (КУ-first), коммиты 79c7525→6dfd826 Реализована вся функциональная desktop-фаза по полевой модели 2026-06-02 «сначала КУ → отфильтрованная витрина → корзина → заказ-агрегат». **16.4 — выбор КУ с картой при онбординге + КУ в шапке.** На экране «Присоединение к Столу заказов» первый шаг — выбор пункта выдачи (КУ) из списка + карта (виджет `KUSelector` на `KUMapWithList`). КУ выбирается ДО подписи оферты (held локально), подпись без выбранного КУ заблокирована; persist через `setCartDeliveryPoint` сразу после синка подписи (до неё нет orderer-прав на Cart). КУ виден/меняется в шапке стола (`KUHeaderBar`: текущий пункт + «Сменить» → диалог список+карта; смена видна только если активных КУ >1). `OnboardingCPPGate` переписан на канон (BaseCard/BaseButton/BaseCheckbox/BaseChip, Material-иконки, `--p-*`). **16.3 — КУ-scoped каталог.** Витрина фильтруется по текущему КУ (`delivery_braname`). Пока КУ не выбран — каталог скрыт, показывается стартовый выбор КУ. Смена КУ в шапке перегружает витрину. **16.1 — корзина.** Новая entity `MarketplaceCart` (api + Pinia-стор; «текущий КУ» = `cart.delivery_braname`). В каталоге/детали оффера действие — «В корзину» (`AddToCartDialog`, только количество — КУ глобальный); per-order выбор КУ удалён (`OrderCreateDialog` → `AddToCartDialog`). Страница корзины `/market/cart` (пункт меню «Корзина») + индикатор корзины с числом позиций в шапке каталога. **16.2 — оформление.** «Оформить заказ» → `marketplaceCheckoutCart`; показ числа созданных заказов + непрошедшего остатка (failed_lines с причинами) + «Повторить оформление остатка» тем же checkout_id. **16.6 — MyOrders по заказу-агрегату.** Многопозиционные заказы (общий checkout_id) — одной группой с шапкой (дата/пункт/позиции/сумма); одиночные/легаси — плоско. **16.7 — OperatorIssuance** уже сгруппирован по заказчику со списком единиц (переработка Эпика 6/9) = целевая «единицы по заказам пайщика»; рабочий экран не трогал. Плюс отдельным коммитом — фикс L1 `CouncilOnboardingCard` (ровный ритм шагов вместо «гармошки», солидные кнопки навигации). ⚠️ **Type-check:** локальный vue-tsc не гонялся (канон: делегируется CI; `vite-plugin-checker` выключен, полный vue-tsc при живом quasar dev вешает машину ~час). CI `typecheck.yaml` триггерится только на PR в `dev` — на PR в `marketplace2` НЕ запускается; vue-tsc этого кода пройдёт на гейте `marketplace2 → dev`. Все правки выверены по реальным API компонентов, ESLint зелёный по всем затронутым файлам. ⚠️ **Известный мелкий GAP:** счётчики категорий каталога (`CategoryOfferCounts`) пока не фильтруются по КУ — число во вкладке может превышать показанное под КУ (фикс — отдельным backend-изменением).
claude added 1 commit 2026-06-02 13:01:12 +00:00
claude added 1 commit 2026-06-02 13:16:12 +00:00
claude added 1 commit 2026-06-02 13:30:44 +00:00
claude added 1 commit 2026-06-02 13:44:30 +00:00
claude added 1 commit 2026-06-02 13:54:06 +00:00
claude added 1 commit 2026-06-02 13:55:00 +00:00
claude added 1 commit 2026-06-02 14:04:23 +00:00
claude added 1 commit 2026-06-02 14:13:14 +00:00
Author
Owner

Часть 3 — desktop-фаза Эпика 16 (КУ-first), коммиты 79c7525→6dfd826

Реализована вся функциональная desktop-фаза по полевой модели 2026-06-02 «сначала КУ → отфильтрованная витрина → корзина → заказ-агрегат».

16.4 — выбор КУ с картой при онбординге + КУ в шапке. На экране «Присоединение к Столу заказов» первый шаг — выбор пункта выдачи (КУ) из списка + карта (виджет KUSelector на KUMapWithList). КУ выбирается ДО подписи оферты (held локально), подпись без выбранного КУ заблокирована; persist через setCartDeliveryPoint сразу после синка подписи (до неё нет orderer-прав на Cart). КУ виден/меняется в шапке стола (KUHeaderBar: текущий пункт + «Сменить» → диалог список+карта; смена видна только если активных КУ >1). OnboardingCPPGate переписан на канон (BaseCard/BaseButton/BaseCheckbox/BaseChip, Material-иконки, --p-*).

16.3 — КУ-scoped каталог. Витрина фильтруется по текущему КУ (delivery_braname). Пока КУ не выбран — каталог скрыт, показывается стартовый выбор КУ. Смена КУ в шапке перегружает витрину.

16.1 — корзина. Новая entity MarketplaceCart (api + Pinia-стор; «текущий КУ» = cart.delivery_braname). В каталоге/детали оффера действие — «В корзину» (AddToCartDialog, только количество — КУ глобальный); per-order выбор КУ удалён (OrderCreateDialogAddToCartDialog). Страница корзины /market/cart (пункт меню «Корзина») + индикатор корзины с числом позиций в шапке каталога.

16.2 — оформление. «Оформить заказ» → marketplaceCheckoutCart; показ числа созданных заказов + непрошедшего остатка (failed_lines с причинами) + «Повторить оформление остатка» тем же checkout_id.

16.6 — MyOrders по заказу-агрегату. Многопозиционные заказы (общий checkout_id) — одной группой с шапкой (дата/пункт/позиции/сумма); одиночные/легаси — плоско.

16.7 — OperatorIssuance уже сгруппирован по заказчику со списком единиц (переработка Эпика 6/9) = целевая «единицы по заказам пайщика»; рабочий экран не трогал.

Плюс отдельным коммитом — фикс L1 CouncilOnboardingCard (ровный ритм шагов вместо «гармошки», солидные кнопки навигации).

⚠️ Type-check: локальный vue-tsc не гонялся (канон: делегируется CI; vite-plugin-checker выключен, полный vue-tsc при живом quasar dev вешает машину ~час). CI typecheck.yaml триггерится только на PR в dev — на PR в marketplace2 НЕ запускается; vue-tsc этого кода пройдёт на гейте marketplace2 → dev. Все правки выверены по реальным API компонентов, ESLint зелёный по всем затронутым файлам.

⚠️ Известный мелкий GAP: счётчики категорий каталога (CategoryOfferCounts) пока не фильтруются по КУ — число во вкладке может превышать показанное под КУ (фикс — отдельным backend-изменением).

## Часть 3 — desktop-фаза Эпика 16 (КУ-first), коммиты 79c7525→6dfd826 Реализована вся функциональная desktop-фаза по полевой модели 2026-06-02 «сначала КУ → отфильтрованная витрина → корзина → заказ-агрегат». **16.4 — выбор КУ с картой при онбординге + КУ в шапке.** На экране «Присоединение к Столу заказов» первый шаг — выбор пункта выдачи (КУ) из списка + карта (виджет `KUSelector` на `KUMapWithList`). КУ выбирается ДО подписи оферты (held локально), подпись без выбранного КУ заблокирована; persist через `setCartDeliveryPoint` сразу после синка подписи (до неё нет orderer-прав на Cart). КУ виден/меняется в шапке стола (`KUHeaderBar`: текущий пункт + «Сменить» → диалог список+карта; смена видна только если активных КУ >1). `OnboardingCPPGate` переписан на канон (BaseCard/BaseButton/BaseCheckbox/BaseChip, Material-иконки, `--p-*`). **16.3 — КУ-scoped каталог.** Витрина фильтруется по текущему КУ (`delivery_braname`). Пока КУ не выбран — каталог скрыт, показывается стартовый выбор КУ. Смена КУ в шапке перегружает витрину. **16.1 — корзина.** Новая entity `MarketplaceCart` (api + Pinia-стор; «текущий КУ» = `cart.delivery_braname`). В каталоге/детали оффера действие — «В корзину» (`AddToCartDialog`, только количество — КУ глобальный); per-order выбор КУ удалён (`OrderCreateDialog` → `AddToCartDialog`). Страница корзины `/market/cart` (пункт меню «Корзина») + индикатор корзины с числом позиций в шапке каталога. **16.2 — оформление.** «Оформить заказ» → `marketplaceCheckoutCart`; показ числа созданных заказов + непрошедшего остатка (failed_lines с причинами) + «Повторить оформление остатка» тем же checkout_id. **16.6 — MyOrders по заказу-агрегату.** Многопозиционные заказы (общий checkout_id) — одной группой с шапкой (дата/пункт/позиции/сумма); одиночные/легаси — плоско. **16.7 — OperatorIssuance** уже сгруппирован по заказчику со списком единиц (переработка Эпика 6/9) = целевая «единицы по заказам пайщика»; рабочий экран не трогал. Плюс отдельным коммитом — фикс L1 `CouncilOnboardingCard` (ровный ритм шагов вместо «гармошки», солидные кнопки навигации). ⚠️ **Type-check:** локальный vue-tsc не гонялся (канон: делегируется CI; `vite-plugin-checker` выключен, полный vue-tsc при живом quasar dev вешает машину ~час). CI `typecheck.yaml` триггерится только на PR в `dev` — на PR в `marketplace2` НЕ запускается; vue-tsc этого кода пройдёт на гейте `marketplace2 → dev`. Все правки выверены по реальным API компонентов, ESLint зелёный по всем затронутым файлам. ⚠️ **Известный мелкий GAP:** счётчики категорий каталога (`CategoryOfferCounts`) пока не фильтруются по КУ — число во вкладке может превышать показанное под КУ (фикс — отдельным backend-изменением).
claude added 1 commit 2026-06-02 18:06:03 +00:00
claude added 1 commit 2026-06-02 18:08:24 +00:00
claude added 1 commit 2026-06-02 18:16:19 +00:00
claude added 1 commit 2026-06-02 18:19:34 +00:00
claude added 1 commit 2026-06-02 18:23:13 +00:00
claude added 1 commit 2026-06-02 18:32:15 +00:00
claude added 1 commit 2026-06-02 18:33:51 +00:00
claude added 1 commit 2026-06-02 18:39:35 +00:00
claude added 1 commit 2026-06-02 18:41:35 +00:00
claude added 1 commit 2026-06-02 18:47:21 +00:00
claude added 2 commits 2026-06-02 19:07:00 +00:00
Пункт меню «Сканировать QR» (последний, всплывающий — через действие
marketplaceUniversalScan, как кнопка «Поддержка»; держатель
UniversalScannerHost в layout). Оператор сканирует ЛЮБОЙ код, не зная заранее,
кто пришёл: код поставщика/ТТН → приёмка, код заказчика → выдача. Маршрут несёт
код в query handoff, целевой стол сам открывает сценарий. Кнопки на самих
столах приёмки/выдачи больше не ругаются «код не предназначен», а ведут на
нужный стол (сквозная маршрутизация). Кнопку «Сканировать QR заказа» на выдаче
вынес в шапку (канон Teleport), как на приёмке.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
На столе ПВЗ «Доверенные лица» вместо ручного ввода аккаунта пайщика — поиск
по фамилии (UserSearchSelector, тот же компонент, что в модуле собраний). В
модель остаётся username выбранного пайщика; оператору не нужно знать
технический аккаунт.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
claude added 1 commit 2026-06-02 19:15:09 +00:00
claude added 1 commit 2026-06-02 19:28:29 +00:00
Бэкенд: orderer_name резолвится на read-пути списка склада (как лента заказов).
Фронт: q-table → canon .table-wrap; убраны плитки-счётчики и колонка «Возраст»;
заказчик показывается ФИО; единое поле поиска по заказчику/товару/полке/штрих-коду;
инлайн-правка полки и выпуск штрих-кода в строке.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
claude added 1 commit 2026-06-03 06:09:36 +00:00
claude added 1 commit 2026-06-03 06:15:53 +00:00
- AccountBadge: opt-in prop plain (прозрачный фон) — для вторичного аккаунта под ФИО
- BaseInput: проброс blur/focus — для сохранения инлайн-правки по уходу фокуса
- Склад: полка = всегда-редактируемое поле (save по blur/Enter, только при изменении);
  товар получил фикс-ширину, сумма колонок = min-width таблицы → нет схлопывания и наезда

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
claude added 1 commit 2026-06-03 08:15:06 +00:00
flat: outlined→borderless, reserve-hint-space выключен; на hover мягкий фон,
на фокусе нижняя линия акцентом. Полка на складе теперь читается как текст,
клик делает поле активным — без outline-рамки в ячейке.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
claude added 1 commit 2026-06-03 08:26:36 +00:00
- AccountBadge: серый фон убран в самом компоненте (везде сразу) — был opt-in plain, теперь дефолт; имя аккаунта = вторичный текст под ФИО
- Убраны Quasar Loading.show оверлеи (приёмка/отмена заказа/раскладка) — лоадер на кнопке (Сформировать акты, Разложить) либо alert; экран не перекрываем (кроме тех.работ)
- Приёмка: Кол-во и Цена/ед. — один горизонтальный ряд, оба с label, top-align (не прыгают)
- Склад: обновление в шапку (Teleport), поиск отдельной строкой (не дерётся по высоте с чипами)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
claude added 1 commit 2026-06-03 08:36:25 +00:00
Бэкенд: marketplaceClearInventoryLabel (сервис clearLabel + repo.clearLabel сбрасывает
barcode/format/labeled_* и возвращает статус RECEIVED; гард: только промаркированную).
SDK: мутация ClearInventoryLabel + regen.
Фронт: пункт «Снять штрих-код» в kebab-меню карточки маркировки (когда промаркировано) → переклейка.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
claude added 1 commit 2026-06-03 12:07:24 +00:00
claude added 1 commit 2026-06-03 13:19:27 +00:00
Председатель (trustee) уже имеет полные права участка; добавление его в trusted дублирует роль. Проверка b.trustee != trusted с ошибкой.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ant approved these changes 2026-06-05 06:55:07 +00:00
ant merged commit a0228949b9 into marketplace2 2026-06-05 06:55:12 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: C9S/mono#58