--- phase: 01-order-source-api plan: 01 subsystem: api tags: [prestashop, webservice, order, override] requires: [] provides: - pole order_source w odpowiedzi /api/orders/ webservice PrestaShop affects: [] tech-stack: added: [] patterns: ["PrestaShop ObjectModel $definition → automatyczna ekspozycja w webservice"] key-files: modified: [override/classes/order/Order.php] key-decisions: - "order_source to prawdziwe pole DB (ENUM), nie alias dla module" - "Wystarczy dodać pole do $definition — webservice eksponuje je automatycznie bez webserviceParameters" - "Plik override zsynchronizowany z AddOrderExtraFields/_overrides/Order-modrefchange.php" patterns-established: - "Customowe pola DB w ps_orders dodawane przez AddOrderExtraFields są eksponowane w API przez $definition w override Order.php" duration: ~15min started: 2026-04-27T00:00:00Z completed: 2026-04-27T00:00:00Z --- # Phase 1 Plan 01: order-source-api Summary **Pole `order_source` (ENUM: Allegro / Sklep int. / Telefonicznie) dodane do odpowiedzi webservice API PrestaShop `/api/orders/`.** ## Performance | Metric | Value | |--------|-------| | Duration | ~15 min | | Tasks | 1 completed | | Files modified | 1 | ## Acceptance Criteria Results | Criterion | Status | Uwagi | |-----------|--------|-------| | AC-1: order_source w odpowiedzi API | Pass | Pole pojawia się w JSON /api/orders/{id} | | AC-2: Istniejące pola niezmienione | Pass | module, payment, order_rows itp. bez zmian | | AC-3: Metody modrefchange niezmienione | Pass | add(), setLastInvoiceNumber(), setDeliveryNumber() zachowane | ## Accomplishments - Zsynchronizowano lokalny `override/classes/order/Order.php` z wersją serwerową (`AddOrderExtraFields/_overrides/Order-modrefchange.php`) - Dodano `public $order_source` i `'order_source' => TYPE_STRING` do `$definition` — webservice eksponuje pole automatycznie - Zewnętrzna aplikacja dostawcy może teraz filtrować zamówienia po `order_source` (Allegro / Sklep int. / Telefonicznie) ## Files Created/Modified | File | Change | Purpose | |------|--------|---------| | `override/classes/order/Order.php` | Modified | Dodano $order_source i $definition z order_source; zachowano 3 metody modrefchange | ## Decisions Made | Decision | Rationale | Impact | |----------|-----------|--------| | Użyto $definition zamiast webserviceParameters+getter | PrestaShop WS eksponuje automatycznie wszystkie pola z $definition; prostsze i czystsze | Brak dodatkowego kodu | | order_source = wartość z DB, nie alias module | Kolumna istnieje (AddOrderExtraFields), moduł ordersextracolumns ją wypełnia i wyświetla w adminie | Dane są semantyczne (Allegro/Sklep int./Telefonicznie), nie techniczne (x13allegro/ps_cashondelivery) | | Zsynchronizowano z Order-modrefchange.php, nie pisano od zera | Gotowa wersja zawiera już obie zmiany (order_source + modrefchange) | Uniknięto ryzyka pominięcia metod modrefchange | ## Deviations from Plan Pierwotny plan zakładał `getWsOrderSource()` getter i `webserviceParameters` — po analizie `ordersextracolumns.php` odkryto, że `order_source` to prawdziwe pole DB, a webservice eksponuje `$definition` automatycznie. Plan uproszczono przed APPLY. **Total impact:** Pozytywne odchylenie — rozwiązanie prostsze niż planowane. ## Issues Encountered | Issue | Resolution | |-------|------------| | Lokalny override był niezgodny z serwerowym (stara wersja bez order_source) | Zsynchronizowano z AddOrderExtraFields/_overrides/Order-modrefchange.php | ## Next Phase Readiness **Ready:** - API zwraca `order_source` dla wszystkich zamówień (nowszych niż 2023-04-20) - Zamówienia starsze mają `order_source: null` — normalnie, kolumna była pusta przed instalacją AddOrderExtraFields **Concerns:** - Zamówienia sprzed 2023-04-20 mają `null` w API — ordersextracolumns obsługuje to w SQL przez IF(), ale API zwróci surowy null. Dostawca powinien to uwzględnić po stronie swojej aplikacji. **Blockers:** Brak --- *Phase: 01-order-source-api, Plan: 01* *Completed: 2026-04-27*