---
phase: 101-aged-orders-row-highlight
plan: 01
subsystem: ui
tags: [orders-list, scss, php, visual-alert]
requires:
- phase: 44-inline-status-change
provides: table-list component used for /orders/list
provides:
- Wizualna flaga wiekowa na liscie zamowien (4-7+ dni)
- Opcjonalny `_row_class` na wierszach `components/table-list.php`
affects: []
tech-stack:
added: []
patterns:
- "Row-level class propagowana z controllera przez `_row_class` w danych wiersza `table-list`"
key-files:
created: []
modified:
- resources/views/components/table-list.php
- src/Modules/Orders/OrdersController.php
- resources/scss/app.scss
- public/assets/css/app.css
key-decisions:
- "Wiek liczony z `ordered_at` (to pole uzywa juz sortowanie/kolumna listy)"
- "Poziomy ramki 4..7 hardcoded, starsze niz 7 dni = poziom 7 (nie dalsza eskalacja)"
- "Ramka realizowana przez border na
— kompatybilna z kolorem tla statusu"
patterns-established:
- "Kontroler listy moze dodac `_row_class` do rekordu w danych `rows` — `table-list.php` honoruje to jako klase | "
duration: ~10min
started: 2026-04-13
completed: 2026-04-13
---
# Phase 101 Plan 01: Aged Orders Row Highlight Summary
**Wiersze zamowien na `/orders/list` starszych niz 4 dni dostaja czerwona ramke o rosnacej intensywnosci (4d=jasna → 7+d=bordowa).**
## Acceptance Criteria Results
| Criterion | Status | Notes |
|---|---|---|
| AC-1: <4 dni brak ramki | Pass | `agedRowClass()` zwraca `''` dla `$ageDays < 4` |
| AC-2: 4-7 dni rosnaca intensywnosc | Pass | Klasy `order-row-aged-4..7` z 4 odcieniami czerwieni (#f8b4b4 → #991b1b) |
| AC-3: >7 dni = poziom 7 | Pass | `$level = $ageDays >= 7 ? 7 : $ageDays` |
| AC-4: Wiek liczony z `ordered_at` | Pass | `floor((time() - strtotime($orderedAt)) / 86400)` |
## Accomplishments
- Dodano mechanizm row-class w uniwersalnym `components/table-list.php` (opcjonalny, nie lamie innych list)
- OrdersController liczy wiek zamowienia i wystawia klase na wierszu
- 4 poziomy SCSS + przebudowany `public/assets/css/app.css`
## Files Created/Modified
| File | Change | Purpose |
|---|---|---|
| `resources/views/components/table-list.php` | Modified | `
` honoruje `$row['_row_class']` |
| `src/Modules/Orders/OrdersController.php` | Modified | `agedRowClass()` + wpiecie w `toTableRow` |
| `resources/scss/app.scss` | Modified | Reguly `.order-row-aged-{4..7}` na `| ` |
| `public/assets/css/app.css` | Rebuild | `npm run build:css` |
## Decisions Made
| Decision | Rationale | Impact |
|---|---|---|
| Border na ` | ` zamiast ` |
` | `
` nie rysuje borderu spolnie z `border-collapse`; trzeba na komorkach | Wizualnie spojne, kompatybilne z tlem statusow |
| Klasy `order-row-aged-N` zamiast inline style | Zgodne z CLAUDE.md (brak styli w widokach) | Styl zyje w SCSS |
| Pole `ordered_at` jako data referencyjna | Uzywane juz w kolumnie listy i sortowaniu | Zero dodatkowego I/O |
## Deviations from Plan
| Type | Count | Impact |
|---|---|---|
| Auto-fixed | 0 | - |
| Scope additions | 0 | - |
| Deferred | 0 | - |
Plan wykonany 1:1.
## Issues Encountered
None.
## Next Phase Readiness
**Ready:**
- Lista zamowien z wizualnym sygnalem zalegajacych zamowien
- Wzorzec `_row_class` dostepny dla innych list w table-list.php
**Concerns:**
- Weryfikacja wizualna pozostaje po stronie uzytkownika (manualny test w przegladarce)
**Blockers:** None
---
*Phase: 101-aged-orders-row-highlight, Plan: 01*
*Completed: 2026-04-13*