--- phase: 63-order-item-personalization plan: 01 subsystem: orders tags: [personalization, shopPRO, import, custom_fields] requires: - phase: none provides: n/a provides: - Kolumna personalization w order_items - Ekstrakcja custom_fields z shopPRO API przy imporcie - Wyswietlanie personalizacji w widoku zamowienia affects: [] tech-stack: added: [] patterns: [extractPersonalization HTML-to-text w mapperze] key-files: created: - database/migrations/20260401_000075_add_personalization_to_order_items.sql modified: - src/Modules/Settings/ShopproOrderMapper.php - src/Modules/Orders/OrderImportRepository.php - resources/views/orders/show.php - resources/scss/app.scss - public/assets/css/app.css key-decisions: - "Personalizacja jako plain text (nie JSON) — prostosc, wystarczajaca dla wyswietlania" - "date_order dodane do readPath mapper — naprawa brakujacej daty zamowienia" patterns-established: - "extractPersonalization: HTML strip + br-to-newline dla danych z shopPRO" duration: ~45min started: 2026-04-01T19:00:00Z completed: 2026-04-01T19:45:00Z --- # Phase 63 Plan 01: Order Item Personalization Summary **Import i wyswietlanie danych personalizacji produktow z shopPRO (custom_fields) w szczegolach zamowienia orderPRO.** ## Performance | Metric | Value | |--------|-------| | Duration | ~45min | | Started | 2026-04-01 | | Completed | 2026-04-01 | | Tasks | 2 completed | | Files modified | 7 | ## Acceptance Criteria Results | Criterion | Status | Notes | |-----------|--------|-------| | AC-1: Personalizacja zapisana w DB | Pass | custom_fields ekstrakcja z HTML na tekst, zapis w kolumnie personalization | | AC-2: Personalizacja wyswietlana w UI | Pass | Blok pod nazwa produktu z etykieta i liniami tekstu | | AC-3: Brak personalizacji nie powoduje bledow | Pass | NULL w kolumnie, brak sekcji w UI | ## Accomplishments - Kolumna `personalization TEXT NULL` w `order_items` + ekstrakcja `custom_fields` z shopPRO API - Wyswietlanie personalizacji w widoku zamowienia z escape XSS - Naprawa brakujacej daty zamowienia (`date_order` dodane do mapper readPath) - Usuniecie zbednego pola `item_type` z widoku i duplikatu `source_order_id` - Dodanie `margin-bottom` do section-title dla lepszego odstepy pod kreska ## Files Created/Modified | File | Change | Purpose | |------|--------|---------| | `database/migrations/20260401_000075_add_personalization_to_order_items.sql` | Created | Kolumna personalization w order_items | | `src/Modules/Settings/ShopproOrderMapper.php` | Modified | extractPersonalization() + date_order w readPath | | `src/Modules/Orders/OrderImportRepository.php` | Modified | personalization w INSERT query | | `resources/views/orders/show.php` | Modified | Wyswietlanie personalizacji, usuniecie item_type i source_order_id | | `resources/scss/app.scss` | Modified | Style .item-personalization + section-title margin-bottom | | `public/assets/css/app.css` | Modified | Skompilowany CSS | | `DOCS/DB_SCHEMA.md` | Modified | Dokumentacja kolumny personalization | | `DOCS/TECH_CHANGELOG.md` | Modified | Wpis Phase 63 | ## Decisions Made | Decision | Rationale | Impact | |----------|-----------|--------| | Plain text zamiast JSON dla personalizacji | Prostosc — dane sa read-only, nie wymagaja struktury klucz-wartosc | Wystarczajace dla wyswietlania | | date_order w readPath mappera | shopPRO API zwraca date_order, mapper nie mial tego klucza | Naprawia brakujaca date zamowienia | | Usuniecie item_type z widoku | Zawsze "product", zero informacji | Czystszy UI | | Usuniecie source_order_id z widoku | Duplikat external_order_id | Czystszy UI | ## Deviations from Plan ### Summary | Type | Count | Impact | |------|-------|--------| | Scope additions | 3 | Drobne poprawki UI wykryte przy testowaniu | | Deferred | 0 | - | **Total impact:** Drobne poprawki UI (date_order mapping, item_type/source_order_id cleanup, section-title spacing) — naturalne odkrycia przy testowaniu na zywo. ## Issues Encountered | Issue | Resolution | |-------|------------| | Lokalna DB offline | Migracja uruchomiona na zdalnej DB przez mysql CLI | | Cron nie pobral zamowienia (stary updated_at) | Touch updated_at w shopPRO DB + reset kursora sync | | marianek.pl to osobna instancja shopPRO | Znaleziony config.php z danymi DB | ## Next Phase Readiness **Ready:** - Personalizacja importowana i wyswietlana - Mapper rozszerzalny o kolejne pola shopPRO API **Concerns:** - Brak **Blockers:** - None --- *Phase: 63-order-item-personalization, Plan: 01* *Completed: 2026-04-01*