--- phase: 14-email-templates plan: 02 subsystem: database, ui tags: [email, templates, attachments, receipt] requires: - phase: 14-email-templates/14-01 provides: CRUD szablonów e-mail, Quill.js editor, system zmiennych provides: - Konfiguracja załącznika na poziomie szablonu (attachment_1) - Mapa typów załączników ATTACHMENT_TYPES w kontrolerze affects: [15-email-sending] tech-stack: added: [] patterns: [ATTACHMENT_TYPES const map for extensible attachment options] key-files: created: - database/migrations/20260316_000001_add_attachment1_to_email_templates.sql modified: - src/Modules/Settings/EmailTemplateController.php - src/Modules/Settings/EmailTemplateRepository.php - resources/views/settings/email-templates.php - DOCS/DB_SCHEMA.md key-decisions: - "ATTACHMENT_TYPES jako stała mapa w kontrolerze — rozszerzalność bez zmian DB/widoku" - "attachment_1 VARCHAR(50) zamiast ENUM — elastyczność dodawania nowych typów" patterns-established: - "Centralna mapa typów załączników: dodanie nowego typu = 1 linia w ATTACHMENT_TYPES" duration: ~15min started: 2026-03-16 completed: 2026-03-16 --- # Phase 14 Plan 02: Załączniki w szablonach e-mail — Summary **Select "Załącznik nr 1" w szablonach e-mail z opcją "Paragon", rozszerzalną mapą typów ATTACHMENT_TYPES, kolumną w liście i pełnym CRUD.** ## Performance | Metric | Value | |--------|-------| | Duration | ~15min | | Started | 2026-03-16 | | Completed | 2026-03-16 | | Tasks | 3 completed (2 auto + 1 checkpoint) | | Files modified | 5 | ## Acceptance Criteria Results | Criterion | Status | Notes | |-----------|--------|-------| | AC-1: Kolumna attachment_1 w DB | Pass | VARCHAR(50) DEFAULT NULL, zweryfikowane DESCRIBE | | AC-2: Zapis i odczyt przez formularz | Pass | receipt zapisywane/odczytywane poprawnie | | AC-3: Opcja "brak" czyści attachment_1 | Pass | Pusta wartość → NULL w DB | | AC-4: Kolumna "Załącznik" w liście | Pass | "Paragon" / "—" wyświetlane poprawnie | ## Accomplishments - Kolumna `attachment_1` w `email_templates` z migracją na serwerze - Centralna mapa `ATTACHMENT_TYPES` w kontrolerze — dodanie nowego typu załącznika = 1 linia PHP - Select w formularzu generowany dynamicznie z mapy (nie hardkodowany) - Kolumna "Zalacznik" w liście szablonów z rozwiązywaniem label z mapy - Walidacja po stronie serwera: tylko klucze z ATTACHMENT_TYPES akceptowane ## Files Created/Modified | File | Change | Purpose | |------|--------|---------| | `database/migrations/20260316_000001_add_attachment1_to_email_templates.sql` | Created | Migracja: kolumna attachment_1 | | `src/Modules/Settings/EmailTemplateController.php` | Modified | ATTACHMENT_TYPES const, walidacja, przekazanie do widoku | | `src/Modules/Settings/EmailTemplateRepository.php` | Modified | attachment_1 w SELECT, INSERT, UPDATE | | `resources/views/settings/email-templates.php` | Modified | Select w formularzu + kolumna w tabeli | | `DOCS/DB_SCHEMA.md` | Modified | Opis kolumny attachment_1 | ## Decisions Made | Decision | Rationale | Impact | |----------|-----------|--------| | ATTACHMENT_TYPES jako stała mapa | User request: w przyszłości inne typy niż paragon | Dodanie nowego typu = 1 linia w tablicy PHP | | VARCHAR(50) zamiast ENUM | Nowe typy bez ALTER TABLE | Elastyczność kosztem minimalnej walidacji (robiona w PHP) | | Walidacja przez array_key_exists | Tylko znane typy akceptowane | Bezpieczeństwo: nieznane wartości → NULL | ## Deviations from Plan None — plan executed exactly as written. ## Issues Encountered None. ## Next Phase Readiness **Ready:** - Faza 15 może odczytać `attachment_1` z szablonu (`listActive()` zawiera pole) - Jeśli `attachment_1 === 'receipt'` → dołączyć PDF paragonu (dompdf już dostępny z fazy 11) - Mapa ATTACHMENT_TYPES może być referencją dla logiki generowania załączników **Concerns:** - Brak — prosta konfiguracja, logika generowania w fazie 15 **Blockers:** - None --- *Phase: 14-email-templates, Plan: 02* *Completed: 2026-03-16*