---
phase: 85-status-group-filter
plan: 01
subsystem: ui
tags: [orders, status-panel, filtering, php]

requires:
  - phase: none
    provides: existing status groups and statuses in DB
provides:
  - clickable status group filtering on orders list
  - group count display in status panel
affects: []

tech-stack:
  added: []
  patterns: [group filter URL pattern with status_group param]

key-files:
  created: []
  modified:
    - src/Modules/Orders/OrdersController.php
    - src/Modules/Orders/OrdersRepository.php
    - resources/views/components/order-status-panel.php
    - resources/scss/app.scss

key-decisions:
  - "status_group and status params are mutually exclusive"
  - "Group ID used as filter value (not group name/code)"

patterns-established:
  - "groupFilterUrl() mirrors statusFilterUrl() pattern"

duration: ~10min
completed: 2026-04-07
---

# Phase 85 Plan 01: Status Group Filter Summary

**Klikalna nazwa grupy statusow na panelu bocznym filtruje zamowienia po wszystkich statusach z tej grupy, z licznikiem sumy i wizualnym wyroznieniem aktywnej grupy.**

## Performance

| Metric | Value |
|--------|-------|
| Duration | ~10min |
| Completed | 2026-04-07 |
| Tasks | 2 completed |
| Files modified | 5 (incl. compiled CSS) |

## Acceptance Criteria Results

| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: Klikniecie nazwy grupy filtruje zamowienia | Pass | status_group=ID w URL, IN (...) w SQL |
| AC-2: Grupa pokazuje sume zamowien | Pass | group_count sumowany z counts statusow |
| AC-3: Aktywna grupa wizualnie wyrozniiona | Pass | is-active class + border-left kolor grupy |
| AC-4: Filtr grupy i statusu wzajemnie wylaczne | Pass | statusFilterUrl usuwa status_group, groupFilterUrl usuwa status |

## Accomplishments

- Backend: nowy parametr `status_group` z filtrem `IN (...)` w repozytorium, metoda `statusCodesByGroupId()`
- Controller: `groupFilterUrl()`, rozszerzony `buildStatusPanel()` z URL/count/active dla grup
- Frontend: klikalna nazwa grupy jako `<a>` z badge licznika, hover effect, active state z border-left

## Files Created/Modified

| File | Change | Purpose |
|------|--------|---------|
| `src/Modules/Orders/OrdersRepository.php` | Modified | Filtr status_group z IN(), statusCodesByGroupId(), id w statusPanelConfig |
| `src/Modules/Orders/OrdersController.php` | Modified | Odczyt status_group, groupFilterUrl(), buildStatusPanel z grupami |
| `resources/views/components/order-status-panel.php` | Modified | Klikalna nazwa grupy z licznikiem |
| `resources/scss/app.scss` | Modified | Style klikalnej grupy: hover, count badge, is-active |
| `public/assets/css/app.css` | Modified | Skompilowany CSS |

## Decisions Made

| Decision | Rationale | Impact |
|----------|-----------|--------|
| Group ID jako parametr filtra (nie kod/nazwa) | Jednoznaczna identyfikacja, bezpieczne w URL | Prosty int w query string |
| status_group ma priorytet nad status | Wzajemna wylacznosc — klikniecie statusu czysci grupe i odwrotnie | Czyste UX bez konfliktow |
| "Wszystkie" aktywne tylko gdy oba filtry puste | Poprawna logika aktywnosci | Konsystentny stan panelu |

## Deviations from Plan

None - plan executed exactly as written.

## Issues Encountered

None.

## Next Phase Readiness

**Ready:**
- Filtrowanie po grupach dziala, gotowe do testow manualnych

**Concerns:**
- None

**Blockers:**
- None

---
*Phase: 85-status-group-filter, Plan: 01*
*Completed: 2026-04-07*
