update
This commit is contained in:
@@ -216,7 +216,7 @@ PLAN ──▶ APPLY ──▶ UNIFY
|
||||
- **Delivery mapping "Szukaj..." layout** — JS `attachSelectFilter()` w allegro.php tworzy input search dla InPost/Apaczka selectów, wizualnie wygląda jakby należał do wiersza powyżej. Pre-existing bug, do naprawy osobno.
|
||||
|
||||
### Git State
|
||||
Last commit: e379557 — feat(24-shipment-presets-ui): kolorowe przyciski presetów, popup, autofill
|
||||
Last commit: 91963d5 — feat(25-shipment-presets-management): edycja, usuwanie, zarządzanie presetami
|
||||
Branch: main
|
||||
Feature branches merged: none
|
||||
|
||||
|
||||
162
.paul/phases/21-order-source-display/21-01-PLAN.md
Normal file
162
.paul/phases/21-order-source-display/21-01-PLAN.md
Normal file
@@ -0,0 +1,162 @@
|
||||
---
|
||||
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
|
||||
---
|
||||
|
||||
<objective>
|
||||
## 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
|
||||
</objective>
|
||||
|
||||
<context>
|
||||
## 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
|
||||
</context>
|
||||
|
||||
<skills>
|
||||
No specialized flows required for this plan.
|
||||
</skills>
|
||||
|
||||
<acceptance_criteria>
|
||||
|
||||
## 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: <source_order_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: <source_order_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: <identyfikator>"
|
||||
```
|
||||
|
||||
</acceptance_criteria>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Dodac integration name do query listy i szczegulow</name>
|
||||
<files>src/Modules/Orders/OrdersRepository.php</files>
|
||||
<action>
|
||||
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.
|
||||
</action>
|
||||
<verify>Sprawdzic ze query nie rzuca bledu — otworzyc liste zamowien w przegladarce.</verify>
|
||||
<done>AC-1, AC-2 — dane integration_name dostepne w wynikach query</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: Wyswietlic integration name w UI (lista + show)</name>
|
||||
<files>src/Modules/Orders/OrdersController.php, resources/views/orders/show.php</files>
|
||||
<action>
|
||||
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.
|
||||
</action>
|
||||
<verify>Otworzyc liste zamowien — zamowienia shopPRO pokazuja nazwe integracji. Allegro pokazuje "Allegro". Otworzyc szczegoly zamowienia — naglowek pokazuje nazwe integracji.</verify>
|
||||
<done>AC-1, AC-2, AC-3, AC-4 satisfied</done>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<boundaries>
|
||||
|
||||
## 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
|
||||
|
||||
</boundaries>
|
||||
|
||||
<verification>
|
||||
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
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- Todo #15 i #17 zrealizowane
|
||||
- Brak regresji na liscie zamowien i stronie szczegulow
|
||||
- Kod uzywa prepared statements (medoo/PDO) — brak SQL injection
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
After completion, create `.paul/phases/21-order-source-display/21-01-SUMMARY.md`
|
||||
</output>
|
||||
100
.paul/phases/21-order-source-display/21-01-SUMMARY.md
Normal file
100
.paul/phases/21-order-source-display/21-01-SUMMARY.md
Normal file
@@ -0,0 +1,100 @@
|
||||
---
|
||||
phase: 21-order-source-display
|
||||
plan: 01
|
||||
subsystem: ui
|
||||
tags: [orders, integrations, display]
|
||||
|
||||
requires:
|
||||
- phase: none
|
||||
provides: n/a
|
||||
provides:
|
||||
- integration name display on orders list
|
||||
- integration name display on order detail page
|
||||
affects: []
|
||||
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns: [integration name fallback pattern]
|
||||
|
||||
key-files:
|
||||
created: []
|
||||
modified:
|
||||
- src/Modules/Orders/OrdersRepository.php
|
||||
- src/Modules/Orders/OrdersController.php
|
||||
- resources/views/orders/show.php
|
||||
|
||||
key-decisions:
|
||||
- "Fallback: integration_name → sourceLabel() dla Allegro/Erli/starych danych"
|
||||
|
||||
patterns-established:
|
||||
- "Integration name resolution: prefer integrations.name, fallback to sourceLabel(source)"
|
||||
|
||||
duration: 5min
|
||||
started: 2026-03-22T00:00:00Z
|
||||
completed: 2026-03-22T00:00:00Z
|
||||
---
|
||||
|
||||
# Phase 21 Plan 01: Order Source Display Summary
|
||||
|
||||
**LEFT JOIN integrations w query zamowien — lista i szczegoly pokazuja nazwe integracji zamiast generycznego "shopPRO"**
|
||||
|
||||
## Performance
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Duration | ~5min |
|
||||
| Tasks | 2 completed |
|
||||
| Files modified | 3 |
|
||||
|
||||
## Acceptance Criteria Results
|
||||
|
||||
| Criterion | Status | Notes |
|
||||
|-----------|--------|-------|
|
||||
| AC-1: Integration name on list | Pass | LEFT JOIN integrations, fallback na sourceLabel |
|
||||
| AC-2: Integration name on detail | Pass | show.php uzywa integration_name z order row |
|
||||
| AC-3: Allegro/Erli unaffected | Pass | Fallback na sourceLabel() gdy integration_name puste |
|
||||
| AC-4: Source first, ID second | Pass | Kod listy juz mial poprawna kolejnosc; show.php poprawiony |
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- Query listy zamowien i szczegulow dolacza tabele `integrations` (LEFT JOIN) i zwraca `integration_name`
|
||||
- Lista zamowien wyswietla nazwe integracji (np. "Moj Sklep") zamiast generycznego "shopPRO"
|
||||
- Strona szczegulow zamowienia rozdzielona na dwa spany z prefiksem "ID:"
|
||||
|
||||
## Files Created/Modified
|
||||
|
||||
| File | Change | Purpose |
|
||||
|------|--------|---------|
|
||||
| `src/Modules/Orders/OrdersRepository.php` | Modified | LEFT JOIN integrations w buildListSql + findDetails; integration_name w transformOrderRow |
|
||||
| `src/Modules/Orders/OrdersController.php` | Modified | toTableRow uzywa integration_name z fallbackiem na sourceLabel |
|
||||
| `resources/views/orders/show.php` | Modified | Naglowek: osobne spany, nazwa integracji + prefiks "ID:" |
|
||||
|
||||
## Decisions Made
|
||||
|
||||
| Decision | Rationale | Impact |
|
||||
|----------|-----------|--------|
|
||||
| Fallback na sourceLabel() gdy integration_name puste | Allegro/Erli nie maja wpisow w integrations dla kazdego zamowienia; stare zamowienia moga miec NULL integration_id | Brak regresji |
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
None — plan executed exactly as written.
|
||||
|
||||
## Issues Encountered
|
||||
|
||||
None.
|
||||
|
||||
## Next Phase Readiness
|
||||
|
||||
**Ready:**
|
||||
- Todo #15 i #17 zrealizowane
|
||||
- Milestone v0.8 gotowy do zamkniecia
|
||||
|
||||
**Concerns:**
|
||||
- None
|
||||
|
||||
**Blockers:**
|
||||
- None
|
||||
|
||||
---
|
||||
*Phase: 21-order-source-display, Plan: 01*
|
||||
*Completed: 2026-03-22*
|
||||
Reference in New Issue
Block a user