extractPersonalization() now reads both 'attributes' and 'custom_fields' fields from the shopPRO API response, joining non-empty values with newline separator. Previously only custom_fields was imported, causing product attributes like "Woreczek jutowy", "Kolor koperty", "Zakrętka" to be lost during sync. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4.2 KiB
4.2 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous
| phase | plan | type | wave | depends_on | files_modified | autonomous | |
|---|---|---|---|---|---|---|---|
| 71-attributes-import | 01 | execute | 1 |
|
true |
Purpose
Klienci nie widza pelnych danych produktu z zamowienia shopPRO. Atrybuty takie jak wariant produktu, kolor, dodatkowe opcje sa tracone przy imporcie.
Output
Zmodyfikowany ShopproOrderMapper::extractPersonalization() ktory laczy attributes i custom_fields w jedno pole personalization.
Source Files
@src/Modules/Settings/ShopproOrderMapper.php (linie 590-602 - extractPersonalization)
<acceptance_criteria>
AC-1: Atrybuty produktu importowane do personalizacji
Given zamowienie w shopPRO ma produkt z polem attributes = "<b>Woreczek jutowy</b>: Nie"
When zamowienie jest synchronizowane do orderPRO
Then pole personalization zawiera "Woreczek jutowy: Nie"
AC-2: Polaczenie attributes i custom_fields
Given produkt ma attributes = "<b>Kolor tekstu</b>: Bialy<br><b>Zakretka</b>: Zlota" i custom_fields = "<b>Imiona</b>: Jan i Anna"
When zamowienie jest synchronizowane
Then personalization zawiera oba bloki oddzielone nowa linia (najpierw attributes, potem custom_fields)
AC-3: Puste pola nie generuja pustych linii
Given produkt ma attributes = "" i custom_fields = "<b>Imie</b>: Jan"
When zamowienie jest synchronizowane
Then personalization zawiera tylko "Imie: Jan" (bez pustych linii na poczatku)
AC-4: Oba pola puste zwracaja null
Given produkt ma attributes = "" i custom_fields = ""
When zamowienie jest synchronizowane
Then personalization = null (bez zmian wzgledem obecnego zachowania)
</acceptance_criteria>
Task 1: Rozszerzenie extractPersonalization o pole attributes src/Modules/Settings/ShopproOrderMapper.php W metodzie `extractPersonalization()` (linia 590): 1. Odczytaj pole `attributes` z $row (readPath z kluczem 'attributes') 2. Odczytaj pole `custom_fields` z $row (juz istniejace) 3. Dla kazdego niepustego pola: zamien <br> na \n, strip_tags, html_entity_decode, trim 4. Polacz niepuste czesci separatorem "\n" (attributes first, potem custom_fields) 5. Zwroc polaczony tekst lub null jesli oba pusteNie zmieniac logiki parsowania HTML (str_replace br, strip_tags, html_entity_decode) - tylko rozszerzyc o drugie pole.
Nie dodawac naglowkow "Atrybuty:" / "Personalizacja:" - traktowac dane jednorodnie.
Sprawdzenie w bazie danych po resync zamowienia 11776:
SELECT personalization FROM order_items WHERE order_id = (SELECT id FROM orders WHERE source_order_id = '11776')
Powinno zwrocic "Woreczek jutowy: Nie"
AC-1, AC-2, AC-3, AC-4 satisfied
DO NOT CHANGE
- Logika
mapItems()poza wywolaniemextractPersonalization() - Struktura bazy danych (kolumna
personalizationjuz istnieje) - Widok wyswietlania personalizacji (show.php)
- ShopproOrdersSyncService, ShopproApiClient
SCOPE LIMITS
- Tylko zmiana parsera - bez migracji DB
- Bez zmian w widoku (wyswietlanie juz dziala)
- Bez resyncu wszystkich zamowien (to recznie po deploy)
<success_criteria>
- extractPersonalization() czyta zarowno attributes jak i custom_fields
- Istniejace zamowienia z custom_fields nie tracą danych
- Pole attributes jest poprawnie parsowane (HTML stripped, br -> newline) </success_criteria>