Files
orderPRO/.paul/phases/101-aged-orders-row-highlight/101-01-PLAN.md
2026-04-13 22:31:06 +02:00

7.3 KiB

phase, plan, type, wave, depends_on, files_modified, autonomous, delegation
phase plan type wave depends_on files_modified autonomous delegation
101-aged-orders-row-highlight 01 execute 1
src/Modules/Orders/OrdersController.php
resources/views/components/table-list.php
resources/scss/app.scss
public/assets/css/app.css
true off
## Goal Na liscie zamowien (`/orders/list`) wiersze tabeli zamowien z wiekiem 4-7 dni maja widoczna czerwona ramke. Im starsze zamowienie, tym bardziej intensywna (ciemniejsza / grubsza) ramka.

Purpose

Sprzedawca na pierwszy rzut oka widzi stare zamowienia, ktore wymagaja uwagi, bez potrzeby sortowania lub filtrowania po dacie. Skraca czas reakcji na zalegajace zamowienia.

Output

  • Row-level highlight w table-list.php oparty o _row_class z danych wiersza
  • OrdersController::prepareTableRows (lub metoda buildujaca $tableRows) ustawia _row_class na podstawie wieku zamowienia w dniach
  • Style SCSS dla 4 wariantow intensywnosci (4, 5, 6, 7 dni)
## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md

Source Files

@src/Modules/Orders/OrdersController.php @resources/views/components/table-list.php @resources/views/orders/list.php @resources/scss/app.scss

<acceptance_criteria>

AC-1: Zamowienie mlodsze niz 4 dni bez ramki

Given zamowienie zostalo zlozone dzisiaj, wczoraj, 2 lub 3 dni temu
When uzytkownik otwiera /orders/list
Then wiersz zamowienia nie ma czerwonej ramki (brak klasy aged-*)

AC-2: Zamowienie 4-7 dni z rosnaca intensywnoscia

Given zamowienia o wieku 4, 5, 6 i 7 dni
When uzytkownik otwiera /orders/list
Then kazdy z tych wierszy ma czerwona ramke (border 2px solid), a intensywnosc koloru rosnie wraz z wiekiem (4d = najjasniejsza, 7d = najciemniejsza / najintensywniejsza)

AC-3: Zamowienie starsze niz 7 dni

Given zamowienie zlozone 8+ dni temu
When uzytkownik otwiera /orders/list
Then wiersz ma maksymalna intensywnosc ramki (poziom aged-7) — nie wraca do stanu bez ramki

AC-4: Wiek liczony od daty zamowienia

Given pole `order_date` (lub rownowazne) istnieje w danych zamowienia
When controller buduje wiersze tabeli
Then wiek dnia wyliczany jest jako floor((now - order_date) / 86400), z uwzglednieniem strefy czasowej aplikacji

</acceptance_criteria>

Task 1: Rozszerz table-list.php o row-level class resources/views/components/table-list.php W petli `foreach ($rows as $row)` (linia ~219) zamiast `` renderuj: ``. Nie zmieniaj nic innego. Klucz `_row_class` traktuj jako opcjonalny — jesli brak, atrybut class ma byc pusty (nie renderowac pustego atrybutu jest OK, ale najprosciej zawsze go wypisac). Avoid: zmiany w innych petlach, zmiany struktury columns/rows, zmiany JS. Otworz /orders/list w przegladarce — DOM tabeli nadal renderuje sie, wiersze maja atrybut class (pusty lub z wartoscia). AC-1..AC-4 czesc wspolna: mechanizm row-class dostepny. Task 2: OrdersController ustawia _row_class wg wieku zamowienia src/Modules/Orders/OrdersController.php Zlokalizuj miejsce budowy `$tableRows` (przekazywane do `tableList.rows`, linia ~128). Dla kazdego zamowienia: - Pobierz date zamowienia (pole uzywane obecnie do wyswietlenia daty w kolumnie — zweryfikuj w kontrolerze / repozytorium, najczesciej `order_date`). - Wylicz wiek w dniach: `$ageDays = (int) floor((time() - strtotime($orderDate)) / 86400);` (pomin jesli data pusta). - Przypisz: - ageDays < 4 → brak klasy - ageDays == 4 → `order-row-aged order-row-aged-4` - ageDays == 5 → `order-row-aged order-row-aged-5` - ageDays == 6 → `order-row-aged order-row-aged-6` - ageDays >= 7 → `order-row-aged order-row-aged-7` - Zapisz w `$row['_row_class']`. Avoid: modyfikacji zapytan DB, dodawania nowych kolumn, logiki w widoku, zmian w repozytorium. Zrob testowe zamowienia (lub uzyj istniejacych) z roznym wiekiem; w HTML `/orders/list` wiersze maja odpowiednie klasy order-row-aged-N. AC-1, AC-2, AC-3, AC-4 satisfied: wiersze otrzymuja poprawne klasy wg wieku. Task 3: Style SCSS dla intensywnosci ramki + build CSS resources/scss/app.scss, public/assets/css/app.css Dodaj w `resources/scss/app.scss` (lub w dedykowanym partialu jesli projekt tak robi — sprawdz istniejace wzorce) reguly: ``` .table-list-table tbody tr.order-row-aged > td { border-top-width: 2px; border-bottom-width: 2px; border-top-style: solid; border-bottom-style: solid; } .table-list-table tbody tr.order-row-aged > td:first-child { border-left: 2px solid; } .table-list-table tbody tr.order-row-aged > td:last-child { border-right: 2px solid; }
tr.order-row-aged-4 > td { border-color: #f8b4b4; }
tr.order-row-aged-5 > td { border-color: #f28282; }
tr.order-row-aged-6 > td { border-color: #e74c3c; }
tr.order-row-aged-7 > td { border-color: #b91c1c; }
```
Zbuduj SCSS → CSS tak jak dotychczas w projekcie (sprawdz czy jest npm skrypt, Gulp, czy recznie — jesli brak pipeline, rownolegle zaktualizuj `public/assets/css/app.css` dopisujac te same reguly).
CSS ma zadzialac razem z istniejacym kolorem tla statusu — ramka nie moze ukrywac tla komorek.
Avoid: dodawania styli inline w list.php, duplikowania selektorow w innych plikach SCSS, zmian w innych komponentach.
Wizualnie /orders/list: wiersze 4-dniowe najjasniejsza ramka, 7-dniowe najciemniejsza. Starsze niz 7 dni dalej na poziomie aged-7. Tla komorek / kolory statusow bez zmian. AC-2, AC-3 satisfied: ramka rosnaco intensywna, klamrowana przez table.

DO NOT CHANGE

  • src/Modules/Orders/OrdersRepository.php (brak nowych SQL/kolumn)
  • database/migrations/** (brak migracji)
  • Logika sortowania, filtrowania i paginacji w OrdersController
  • Inne widoki / inne listy korzystajace z components/table-list.php — musza nadal dzialac (klasa _row_class jest opcjonalna)
  • Kolumny / zawartosc komorek wiersza (tylko wrapper + CSS)

SCOPE LIMITS

  • Tylko strona /orders/list — nie dotyczy innych list (ksiegowosc, automatyzacja, print queue)
  • Ramka oparta wylacznie o wiek w dniach; nie mieszaj tego z statusem zamowienia
  • Brak konfigurowalnosci progow w ustawieniach — wartosci zakodowane (4..7)
Przed zamknieciem planu: - [ ] /orders/list laduje sie bez bledow PHP i JS - [ ] Wiersze z zamowieniami <4 dni nie maja ramki - [ ] Wiersze z zamowieniami 4,5,6,7+ dni maja coraz ciemniejsza czerwona ramke - [ ] Inne listy korzystajace z components/table-list.php nadal renderuja sie poprawnie - [ ] Brak naruszenia zasad z CLAUDE.md (brak styli w widokach, medoo prepared, SCSS → CSS build) - [ ] All acceptance criteria met

<success_criteria>

  • Wszystkie taski zakonczone
  • Wizualna weryfikacja potwierdza rosnaca intensywnosc ramki
  • Brak regresji na innych listach opartych o table-list.php </success_criteria>
Po ukonczeniu utworz `.paul/phases/101-aged-orders-row-highlight/101-01-SUMMARY.md`