--- phase: 21-order-source-display plan: 01 type: execute wave: 1 depends_on: [] files_modified: - src/Modules/Orders/OrdersRepository.php - src/Modules/Orders/OrdersController.php - resources/views/orders/show.php autonomous: true --- ## Goal Poprawic wyswietlanie zrodla zamowienia na liscie zamowien i stronie szczegulow: 1. (todo #15) Upewnic sie, ze w `orders-ref__meta` kolejnosc to: zrodlo, potem ID (weryfikacja — kod juz moze byc poprawny) 2. (todo #17) Zamiast generycznego "shopPRO" wyswietlac nazwe konkretnej integracji z tabeli `integrations` (np. "Moj Sklep 1"). Dotyczy listy zamowien i strony szczegulow. Dodac prefiks "ID:" przed identyfikatorem zamowienia. ## Purpose Sprzedawca z wieloma sklepami shopPRO musi wiedziec, z ktorego konkretnie sklepu pochodzi zamowienie. ## Output Zmodyfikowane pliki: OrdersRepository.php, OrdersController.php, show.php ## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md ## Source Files @src/Modules/Orders/OrdersRepository.php @src/Modules/Orders/OrdersController.php @resources/views/orders/show.php @DOCS/todo.md No specialized flows required for this plan. ## AC-1: Integration name displayed on orders list ```gherkin Given zamowienie pochodzi z integracji shopPRO o nazwie "Moj Sklep" When uzytkownik otwiera liste zamowien Then w kolumnie "Numer" w sekcji orders-ref__meta widzi "Moj Sklep" zamiast "shopPRO" And widzi "ID: " jako drugi element ``` ## AC-2: Integration name displayed on order detail page ```gherkin Given zamowienie pochodzi z integracji shopPRO o nazwie "Moj Sklep" When uzytkownik otwiera szczegoly zamowienia Then w naglowku pod numerem zamowienia widzi "Moj Sklep" i identyfikator zamowienia ``` ## AC-3: Allegro/Erli orders unaffected ```gherkin Given zamowienie pochodzi z Allegro When uzytkownik otwiera liste zamowien Then w sekcji orders-ref__meta widzi "Allegro" jako zrodlo (bez zmian) And widzi "ID: " jako identyfikator ``` ## AC-4: Source first, ID second in meta ```gherkin Given dowolne zamowienie na liscie When uzytkownik patrzy na kolumne "Numer" Then pierwszy span w orders-ref__meta to nazwa zrodla/integracji And drugi span to "ID: " ``` Task 1: Dodac integration name do query listy i szczegulow src/Modules/Orders/OrdersRepository.php 1. W `buildListSql()`: dodac LEFT JOIN do tabeli `integrations`: ``` LEFT JOIN integrations ig ON ig.id = o.integration_id ``` Dodac kolumne `ig.name AS integration_name` do SELECT. 2. W `transformOrderRow()`: dodac pole `'integration_name' => (string) ($row['integration_name'] ?? '')` do zwracanej tablicy. 3. W `findDetails()`: dodac LEFT JOIN do `integrations` i dodac `ig.name AS integration_name` do SELECT query. Avoid: Nie zmieniac countSql (nie potrzebuje JOIN do integrations). Nie zmieniac istniejacych kolumn — tylko dodac nowe. Sprawdzic ze query nie rzuca bledu — otworzyc liste zamowien w przegladarce. AC-1, AC-2 — dane integration_name dostepne w wynikach query Task 2: Wyswietlic integration name w UI (lista + show) src/Modules/Orders/OrdersController.php, resources/views/orders/show.php 1. W `OrdersController::toTableRow()`: - Odczytac `$integrationName = trim((string) ($row['integration_name'] ?? ''));` - Zmienic logike wyswietlania zrodla w `orders-ref__meta`: - Jesli `$integrationName !== ''` → uzyc `$integrationName` jako label - W przeciwnym razie → uzyc `$this->sourceLabel($source)` (fallback dla Allegro/Erli/starych danych) - Upewnic sie ze kolejnosc spanow to: [1] zrodlo/integracja, [2] ID: identyfikator - Obecny kod JUZ ma poprawna kolejnosc (source first), wiec tylko dodac logike integration_name 2. W `resources/views/orders/show.php` linia 48: - Zmienic wyswietlanie z `ucfirst(source) external_order_id` na: - Uzyc `$orderRow['integration_name']` jesli niepuste, inaczej `ucfirst(source)` - Dodac prefiks "ID:" przed identyfikatorem - Rozdzielic na dwa oddzielne spany (jak na liscie) dla spojnosci 3. Metoda `sourceLabel()` — pozostawic bez zmian (fallback). Avoid: Nie zmieniac CSS. Nie zmieniac filtrow zrodla (dropdown). Nie zmieniac logiki statusow. Otworzyc liste zamowien — zamowienia shopPRO pokazuja nazwe integracji. Allegro pokazuje "Allegro". Otworzyc szczegoly zamowienia — naglowek pokazuje nazwe integracji. AC-1, AC-2, AC-3, AC-4 satisfied ## DO NOT CHANGE - resources/scss/* (zadnych zmian CSS) - Filtry zrodla w dropdownie (sourceOptions) — poza zakresem - Logika statusow, platnosci, przesylek - Inne widoki niz show.php ## SCOPE LIMITS - Tylko wyswietlanie — bez zmian w logice importu zamowien - Bez zmian w bazie danych (kolumna integration_id juz istnieje w orders) - Bez nowych zaleznosci Before declaring plan complete: - [ ] Lista zamowien laduje sie bez bledow - [ ] Zamowienia shopPRO pokazuja nazwe integracji (nie "shopPRO") - [ ] Zamowienia Allegro pokazuja "Allegro" (bez regresji) - [ ] Strona szczegulow zamowienia pokazuje nazwe integracji - [ ] Kolejnosc w orders-ref__meta: zrodlo first, ID second - [ ] All acceptance criteria met - Todo #15 i #17 zrealizowane - Brak regresji na liscie zamowien i stronie szczegulow - Kod uzywa prepared statements (medoo/PDO) — brak SQL injection After completion, create `.paul/phases/21-order-source-display/21-01-SUMMARY.md`