---
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*
