From cc9289ef754a12e76f12d9a13260c37cdd3c9aa9 Mon Sep 17 00:00:00 2001 From: nns Date: Thu, 28 May 2026 09:51:16 +0500 Subject: [PATCH] docs(sprint2): P1-6 done Co-Authored-By: Claude Opus 4.7 --- docs/sprint2-progress.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/sprint2-progress.md b/docs/sprint2-progress.md index 271f69c..dcd1fdc 100644 --- a/docs/sprint2-progress.md +++ b/docs/sprint2-progress.md @@ -41,9 +41,15 @@ query filter. Stock-инвариант: после каждого Post/Unpost только по строкам с diff != 0 (400 если нет расхождений). Unpost блочит при «излишек уже расходован». Web с CSV-импортом (productId|article;qty). Тесты: 3 интеграционных. -5. [ ] **P1-6 Возврат от покупателя (CustomerReturn)** — расширение `RetailSale` +5. [x] **P1-6 Возврат от покупателя (CustomerReturn)** — расширение `RetailSale` опцией возврата (referenceSaleId или без). Контроллер: создание возврата из проведённой продажи, `CustomerReturn` тип уже есть. Web: кнопка «Создать возврат». + ✅ RetailSale.IsReturn + ReferenceSaleId; RetailSaleLine.QtyReturned + (агрегация для защиты от over-return). `POST /create-return` копирует + проведённый чек в Draft-возврат с qty = (Quantity - QtyReturned). + Post return через `CustomerReturn`-движение с +Quantity, инкрементит + QtyReturned на исходных строках. Запрещён unpost оригинала при активных + возвратах. Тесты: 3 интеграционных. 6. [ ] **P1-7 Возврат поставщику (SupplierReturn)** — по аналогии для Supply. Domain `SupplierReturn`+`Line` (referenceSupplyId). Контроллер. Web. 7. [ ] **P1-16 Hangfire dashboard + cleanup** — `Hangfire.Dashboard` с