diff --git a/docs/sprint3-progress.md b/docs/sprint3-progress.md index 0d0051c..c467e03 100644 --- a/docs/sprint3-progress.md +++ b/docs/sprint3-progress.md @@ -9,10 +9,14 @@ Multi-tenant: все запросы фильтруются по `OrganizationId` ## Чек-лист -1. [ ] **P1-8 Отчёт «Продажи»** — `/api/reports/sales` с группировкой по период +1. [x] **P1-8 Отчёт «Продажи»** — `/api/reports/sales` с группировкой по период (день/неделя/месяц), товар, кассир, касса, способ оплаты; фильтры (от/до, магазин, группа товаров). Web `/reports/sales`: фильтр периода, табы по группировкам, экспорт CSV+XLSX. + ✅ Реализация: проекция в плоский ряд на сервере + агрегация в C# + (EF8 не переводит «distinct count» в group-проекции с nullable-ключами). + `CsvHelper` + `ClosedXML`. Bonus: исправлен баг `RetailSalesController.Update` + (DbUpdateConcurrency на свеже-созданном возврате). 5 интеграционных тестов. 2. [ ] **P1-9 Отчёт «Остатки на дату»** — `/api/reports/stock` восстанавливает остатки на произвольную дату через журнал `StockMovement` (Σ движений до даты по продукту). Web `/reports/stock`: выбор даты, фильтр магазин/группа,