Phase 14 complete (2 plans):
- 14-01: CRUD szablonów, Quill.js editor, system zmiennych {{grupa.pole}}, podgląd, toggle
- 14-02: Select "Załącznik nr 1" z mapą ATTACHMENT_TYPES, kolumna w liście, migracja attachment_1
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
7.4 KiB
7.4 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous
| phase | plan | type | wave | depends_on | files_modified | autonomous | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 14-email-templates | 02 | execute | 1 |
|
|
false |
Purpose
Przygotowanie infrastruktury załączników na poziomie szablonu — faza 15 (wysyłka e-mail) odczyta tę konfigurację i automatycznie dołączy PDF paragonu do wiadomości, jeśli istnieje.
Output
- Migracja SQL dodająca kolumnę
attachment_1 - Repository/Controller obsługujący nowe pole
- Select w widoku z opcjami "— brak —" / "Paragon"
- Zaktualizowany DB_SCHEMA.md
Prior Work
@.paul/phases/14-email-templates/14-01-PLAN.md — CRUD szablonów, Quill.js, system zmiennych
Source Files
@src/Modules/Settings/EmailTemplateController.php @src/Modules/Settings/EmailTemplateRepository.php @resources/views/settings/email-templates.php @DOCS/DB_SCHEMA.md
## Required Skills (from SPECIAL-FLOWS.md)| Skill | Priority | When to Invoke | Loaded? |
|---|---|---|---|
| sonar-scanner | required | Po APPLY, przed UNIFY | ○ |
<acceptance_criteria>
AC-1: Kolumna attachment_1 w bazie danych
Given tabela email_templates istnieje
When migracja 20260316_000001 zostanie wykonana
Then kolumna attachment_1 VARCHAR(50) DEFAULT NULL istnieje w tabeli email_templates
AC-2: Zapis i odczyt attachment_1 przez formularz
Given użytkownik edytuje szablon e-mail
When wybierze "Paragon" w polu "Załącznik nr 1" i zapisze
Then wartość 'receipt' jest zapisana w kolumnie attachment_1
And przy ponownej edycji select pokazuje "Paragon" jako wybraną opcję
AC-3: Opcja "brak" czyści attachment_1
Given szablon ma ustawiony attachment_1 = 'receipt'
When użytkownik zmieni select na "— brak —" i zapisze
Then wartość attachment_1 w bazie to NULL
AC-4: Lista szablonów pokazuje informację o załączniku
Given szablon ma attachment_1 = 'receipt'
When użytkownik otwiera listę szablonów
Then w kolumnie "Załącznik" widoczne jest "Paragon"
And dla szablonów bez załącznika kolumna pokazuje "—"
</acceptance_criteria>
Task 1: Migracja DB + aktualizacja Repository i Controller database/migrations/20260316_000001_add_attachment1_to_email_templates.sql, src/Modules/Settings/EmailTemplateRepository.php, src/Modules/Settings/EmailTemplateController.php 1. Utworzyć migrację SQL: ```sql ALTER TABLE email_templates ADD COLUMN attachment_1 VARCHAR(50) DEFAULT NULL AFTER mailbox_id; ```2. EmailTemplateRepository — dodać `attachment_1` do:
- `listAll()` — dodać do SELECT (i do listActive() też)
- `findById()` — dodać do SELECT
- `save()` — dodać do INSERT i UPDATE, wartość: NULL gdy puste/'none', string gdy wybrane
3. EmailTemplateController — dodać stałą ATTACHMENT_TYPES jako centralną mapę:
```php
private const ATTACHMENT_TYPES = [
'receipt' => 'Paragon',
];
```
Dodanie nowego typu w przyszłości = jedna linia w tej tablicy.
4. EmailTemplateController::index() — przekazać `'attachmentTypes' => self::ATTACHMENT_TYPES` do widoku.
5. EmailTemplateController::save() — pobrać `attachment_1` z requestu:
- Jeśli wartość to '' → null
- Jeśli wartość istnieje w kluczach ATTACHMENT_TYPES → zapisz
- Inaczej → null (walidacja)
- Przekazać do repository
- Migracja wykonana na serwerze bez błędów
- DESCRIBE email_templates pokazuje kolumnę attachment_1
- Zapis szablonu z attachment_1 = 'receipt' widoczny w DB
AC-1, AC-2, AC-3 satisfied
Task 2: Select w widoku + kolumna w liście + aktualizacja DB_SCHEMA
resources/views/settings/email-templates.php,
DOCS/DB_SCHEMA.md
1. Widok — formularz: dodać select "Załącznik nr 1" w nowym wierszu form-grid-2 (pod tematem/aktywny).
Select generowany dynamicznie z `$attachmentTypes` (przekazane z kontrolera):
```php
— brak —
<?php foreach ($attachmentTypes as $key => $label): ?>
<?php endforeach; ?>
```
Drugi slot w tym wierszu zostawić pusty lub użyć na przyszły attachment_2.
2. Widok — tabela listy: dodać kolumnę "Załącznik" między "Skrzynka" a "Status":
- Odczytać label z `$attachmentTypes[$tpl['attachment_1']]` jeśli klucz istnieje
- W przeciwnym razie → "—"
3. DOCS/DB_SCHEMA.md — dodać opis kolumny attachment_1 w sekcji email_templates.
- Formularz wyświetla select z dwoma opcjami
- Przy edycji szablonu z attachment_1='receipt' select zaznacza "Paragon"
- Lista szablonów pokazuje kolumnę "Załącznik"
AC-2, AC-3, AC-4 satisfied
Select "Załącznik nr 1" w formularzu szablonu + kolumna "Załącznik" w liście
1. Wejdź na /settings/email-templates
2. Sprawdź czy lista ma kolumnę "Załącznik"
3. Edytuj istniejący szablon — sprawdź select "Załącznik nr 1" z opcjami "— brak —" i "Paragon"
4. Wybierz "Paragon", zapisz
5. Ponownie edytuj — select powinien mieć "Paragon" zaznaczony
6. W liście przy tym szablonie kolumna "Załącznik" powinna pokazywać "Paragon"
7. Zmień na "— brak —", zapisz — kolumna powinna pokazywać "—"
Type "approved" to continue, or describe issues to fix
DO NOT CHANGE
- resources/views/layouts/app.php — sidebar already configured in 14-01
- Logika wysyłania maili — to jest faza 15
- Quill.js editor i system zmiennych — bez zmian
SCOPE LIMITS
- Tylko konfiguracja załącznika na poziomie szablonu (jaki typ)
- NIE implementować generowania/dołączania pliku — to faza 15
- Tylko jeden slot załącznika (attachment_1), bez dynamicznego dodawania
<success_criteria>
- Kolumna attachment_1 w DB
- Formularz szablonu pozwala wybrać "Paragon" lub "brak"
- Lista szablonów informuje o skonfigurowanym załączniku
- Faza 15 może odczytać attachment_1 z szablonu i na tej podstawie dołączyć PDF </success_criteria>