|
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
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) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
Основное:
* Program.cs: SuppressImplicitRequiredAttributeForNonNullableReferenceTypes=true
+ InvalidModelStateResponseFactory → ValidationProblemDetails + Serilog Warning.
Пустые необязательные строковые поля в InvoiceLine (Note, BarcodeSource и т.п.)
больше не роняют запрос в 400. humanizeError на фронте уже умеет этот формат.
* InvoiceModels.cs: Name/Source/FilePath → string?.
* Validators.cs: InvoiceSaveLinesValidator (Lines NotNull), InvoiceApplyValidator
(Guid.Empty на Store/Currency = ошибка, SupplierId опционален).
Служебный «Поставщик не указан» (адаптация sklad §11 под multi-tenant):
* Phase32b миграция добавляет Counterparty.IsPlaceholder bool + partial index
по IsPlaceholder=true.
* InvoicesController.Apply: supplierId опционален; если не указан —
ResolvePlaceholderCounterpartyAsync ищет/создаёт одного служебного per org.
Имя из накладной в комментарий документа НЕ пишется.
* CounterpartiesController: служебный всегда последним в List сортировках,
Update и Delete при IsPlaceholder → 409 Conflict.
* CounterpartyDto.IsPlaceholder + Mapster-config обновлены.
* Автоподбора/автозаведения контрагентов нигде не было — специально проверили.
Applied-накладная readOnly (§10):
* InvoiceDetailDto: добавлены supplyNumber + processedAt.
* InvoiceReviewPage: applied-режим — плашка «Черновик приёмки № … создан …»
со ссылкой на приёмку, шапка и строки readOnly, скан-блок и apply-кнопка
скрыты. После успешного apply — invalidateQueries, экран сразу readOnly.
Текст ошибки apply (§5) и список накладных (§6):
* ApplyDialog: error → detail → title → (код), __silent на axios.
* Invoices list: parseServerDate подшивает «Z» если его нет, «Загружена DD.MM.YY HH:MM»
в бейдже статуса (видимо в десктоп-таблице и в мобильной карточке — у нас общая).
Тесты + проверки:
* tests/food-market.IntegrationTests/InvoiceApplySklad0610Tests.cs — 5 кейсов:
SaveLines со всеми null, apply без поставщика с idempotency по placeholder'у,
Delete/Update placeholder → 409, applied detail содержит processedAt +
hasFiles=false, apply с Guid.Empty storeId → ValidationProblemDetails.
Все 5 ✓.
* stage retest на https://test.admin.food-market.kz: upload+SaveLines(null-fields)+
apply(без поставщика)+apply(с ИП Бегимбаев)+DELETE placeholder → весь flow
зелёный, служебный один на орг, hasFiles=false после apply.
* quality-watchdog step 9 (menu-walk): 3/3 passed (3.7m).
* Фото-накладная через Claude CLI не гонял — пайплайн apply→DeleteStored
закрыт через hasFiles=false в тестах и реальный stage smoke.
docs/supply-inventory.md — шаг 7 расписан под необязательного поставщика,
новый шаг 8 (applied → readOnly), миграция Phase32b в таблице «Файлы».
docs/sklad-0610-progress.md — финал 9/9 с подробным журналом решений.
Пред-существующие (не трогал):
* OrgAuditLogTests.Counterparty_update_diff_contains_before_after → 403 от
[RequiresAdvancedMode] на /api/admin/audit-log (commit
|
||
|---|---|---|
| .. | ||
| sprint17-screenshots | ||
| 24x7.md | ||
| analytics.md | ||
| api-reference.md | ||
| ARCHITECTURE.md | ||
| architecture.md | ||
| audit-2026-04-27.md | ||
| audit-2026-05-06.md | ||
| audit-moysklad.md | ||
| backup-restore.md | ||
| catalog-import-progress.md | ||
| DEVELOPER-GUIDE.md | ||
| error-codes.md | ||
| flaky-tests.md | ||
| food-market-server-postgres-role.md | ||
| forgejo.md | ||
| glossary.md | ||
| hotfix-invoice500-403-progress.md | ||
| imports.md | ||
| logging.md | ||
| menu-links-progress.md | ||
| menu-orphans-report.md | ||
| MULTI-TENANCY.md | ||
| observability.md | ||
| ofd-integration.md | ||
| ONBOARDING.md | ||
| openapi.md | ||
| openiddict-keys.md | ||
| performance-baseline.md | ||
| public-test-url-progress.md | ||
| quality-status.md | ||
| quick-login-progress.md | ||
| quick-login.md | ||
| release-checklist.md | ||
| RUNBOOK.md | ||
| secrets.md | ||
| seeder-noise-progress.md | ||
| shared-postgres-followup-progress.md | ||
| simple-mode-progress.md | ||
| simple-mode.md | ||
| sklad-0610-progress.md | ||
| sklad-port-20261005-progress.md | ||
| sprint-incident-1780974301.md | ||
| sprint-incident-1780985101.md | ||
| sprint-ui-deep-progress.md | ||
| sprint1-progress.md | ||
| sprint2-progress.md | ||
| sprint3-progress.md | ||
| sprint4-progress.md | ||
| sprint5-progress.md | ||
| sprint6-progress.md | ||
| sprint7-progress.md | ||
| sprint8-progress.md | ||
| sprint9-progress.md | ||
| sprint10-progress.md | ||
| sprint11-progress.md | ||
| sprint12-progress.md | ||
| sprint13-progress.md | ||
| sprint14-progress.md | ||
| sprint15-progress.md | ||
| sprint16-progress.md | ||
| sprint17-progress.md | ||
| sprint18-progress.md | ||
| sprint19-progress.md | ||
| sprint20-progress.md | ||
| sprint21-progress.md | ||
| sprint22-progress.md | ||
| sprint23-progress.md | ||
| sprint24-progress.md | ||
| sprint25-progress.md | ||
| sprint26-progress.md | ||
| sprint27-progress.md | ||
| sprint28-progress.md | ||
| sso.md | ||
| stage-access.md | ||
| stage-prod-isolation-progress.md | ||
| stage-setup.md | ||
| stage-testing-progress.md | ||
| supplier-invoice-template.xlsx | ||
| supply-inventory-mobile-progress.md | ||
| supply-inventory.md | ||
| telegram-bridge.md | ||
| TZ-доработка.md | ||
| TZ-тестирование.md | ||
| verify-progress.md | ||