--- phase: 17-receipt-duplicate-guard plan: 01 type: execute wave: 1 depends_on: [] files_modified: - src/Modules/Accounting/ReceiptController.php - resources/views/orders/receipt-create.php autonomous: true --- ## Goal Zablokować wystawienie kolejnego paragonu do zamówienia, które już ma paragon — nie całkowicie, ale z wyraźnym potwierdzeniem (alert) przed wysłaniem formularza. ## Purpose Ochrona przed przypadkowym wystawieniem duplikatu paragonu. Użytkownik widzi ostrzeżenie z listą istniejących paragonów i musi świadomie potwierdzić, że chce kontynuować. ## Output - Zmodyfikowany `ReceiptController::create()` — przekazuje istniejące paragony do widoku - Zmodyfikowany widok `receipt-create.php` — alert z potwierdzeniem + lista istniejących paragonów ## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md ## Source Files @src/Modules/Accounting/ReceiptController.php @src/Modules/Accounting/ReceiptRepository.php @resources/views/orders/receipt-create.php ## Required Skills (from SPECIAL-FLOWS.md) | Skill | Priority | When to Invoke | Loaded? | |-------|----------|----------------|---------| | sonar-scanner | required | Po APPLY, przed UNIFY | ○ | No specialized flows configured for this plan type. ## AC-1: Formularz pokazuje ostrzeżenie gdy zamówienie ma paragon ```gherkin Given zamówienie ma już wystawiony co najmniej jeden paragon When użytkownik otwiera formularz wystawiania paragonu (GET /orders/{id}/receipt/create) Then widzi ostrzeżenie z informacją o istniejących paragonach (numer, data, kwota) ``` ## AC-2: Submit wymaga potwierdzenia gdy istnieją paragony ```gherkin Given zamówienie ma już wystawiony paragon i użytkownik jest na formularzu When użytkownik kliknie przycisk "Wystaw paragon" Then pojawia się OrderProAlerts.confirm z pytaniem o potwierdzenie And formularz wysyła się dopiero po potwierdzeniu "Tak" And formularz NIE wysyła się po kliknięciu "Anuluj" ``` ## AC-3: Brak ostrzeżenia gdy zamówienie nie ma paragonów ```gherkin Given zamówienie nie ma żadnych wystawionych paragonów When użytkownik otwiera formularz wystawiania paragonu Then NIE widzi żadnego ostrzeżenia And przycisk "Wystaw paragon" działa normalnie bez dodatkowego potwierdzenia ``` Task 1: Przekazanie istniejących paragonów z kontrolera do widoku src/Modules/Accounting/ReceiptController.php W metodzie `create()` (linia ~36-72): 1. Po walidacji istnienia zamówienia (linia 36-39), dodać zapytanie o istniejące paragony: `$existingReceipts = $this->receipts->findByOrderId($orderId);` 2. Przekazać `existingReceipts` do widoku w tablicy `render()` (linia 58-70): `'existingReceipts' => $existingReceipts,` Nie zmieniać: metody `store()`, logiki walidacji, żadnych innych metod. Otworzyć formularz paragonu dla zamówienia z istniejącym paragonem — zmienna $existingReceipts dostępna w widoku z poprawną liczbą wpisów. AC-1 częściowo: dane o istniejących paragonach przekazane do widoku Task 2: Ostrzeżenie i potwierdzenie w widoku formularza resources/views/orders/receipt-create.php 1. Na początku pliku dodać zmienną: `$existingReceiptsList = is_array($existingReceipts ?? null) ? $existingReceipts : [];` 2. Po nagłówku (po linii ~19, przed `
`), jeśli `$existingReceiptsList !== []`, wyświetlić box ostrzeżenia: - Klasa CSS: `alert alert--warning mt-12` (reuse istniejącego stylu alertów) - Ikona + tekst: "Do tego zamówienia wystawiono już N paragon(ów):" - Lista paragonów: numer (`receipt_number`), data (`issue_date`), kwota (`total_gross`), config (`config_name`) - Tekst: "Czy na pewno chcesz wystawić kolejny?" 3. Na formularzu `` dodać `id="receipt-create-form"` 4. Zmienić `