feat(02-product-actions-fixes): Phase 02 complete — customization, price label, structure fix

Plan 02-03: Customization save + success modal (5/5 AC)
- 26-field squaremeter POST payload (verbose PL dim, qty_alt/qty_alth)
- Chain POST /module/ps_shoppingcart/ajax -> Bootstrap #blockcart-modal
- Critical fix: moved {/block} so inline script actually renders
- __p02p02InFlight re-entrancy guard

Plan 02-04: Live cena per-sqm label obok "Dodaj do koszyka" (5/5 AC)
- .p02p04-total-price label, gorna .current-price static
- Separate __p02p04Bound + setInterval reconciliation
- Poll-retry prestashop.on registration

Plan 02-05: Struktura materialu w POST payload (4/4 AC)
- Enumerate [name^="group["] spoza formy, doklej do payload
- Fix: group_5 select w .product-bar-box nie trafial do koszyka

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-24 00:55:05 +02:00
parent 7ac795ba3f
commit ac03f807c1
13 changed files with 1583 additions and 64 deletions

View File

@@ -0,0 +1,43 @@
# 2026-04-24
## Co zrobiono
- [Phase 02, Plan 02-03] Customization save + success modal w nowym layoucie — 5/5 AC pass, milestone production-ready
- Task 1: Playwright capture OLD layout payload (26 fields, verbose PL dim format) — IP gate temporary flip do `255.255.255.255`, restored
- Task 2: Injection squaremeter fields (`discretion=on`, `dim` VERBOSE, `qty_alt`/`qty_alth`, `calculated_total`, `product_total_price_calc`) w POST do `/pl/koszyk`
- Task 3: Chain POST do `/module/ps_shoppingcart/ajax` → render Bootstrap `#blockcart-modal` z "Kontynuuj zakupy" + "Przejdź do kasy"
- Krytyczny fix: przeniesiono `{/block}` tak żeby inline script rzeczywiście renderował (Smarty `{extends}` renderuje tylko blocki — Plan 02-02 mirror był dead code)
- Dodano `__p02p02InFlight` re-entrancy guard (fix double POST)
- basePrice fallback przez `meta[property="product:price:amount"]` (w NEW layout brak `#product_base_price`)
- AC-5 regression test OLD layout: zero zmian, handler inert (`p02p02Bound=false` w OLD)
- [Phase 02, Plan 02-04] Live cena per-sqm labelka obok "Dodaj do koszyka" w nowym layoucie — 5/5 AC pass
- Task 1: `__p02p04EnsureLabel` + `__p02p04RecalcPrice` + delegated input bindings (custom.js + inline mirror w product.tpl)
- Task 2: FTP deploy iteracyjny (iterations: 226/226 na każdym deployu)
- Task 3: Live Playwright verification wszystkich 5 AC — user pivot mid-task: label obok buttona zamiast nadpisywania `.current-price` (gorna cena "Od XXX zł / m²" zostaje statyczna)
- Scope pivot: label obok buttona zamiast nadpisywania `.current-price` — user request
- Fix: separate `__p02p04Bound` guard (stale-cache custom.js nie blokuje inline mirror rejestracji)
- Fix: synchronous IIFE init zamiast `jQuery(document).ready` (ready nie firuje konsekwentnie w inline Smarty block)
- Fix: `setInterval 10×500ms` initial render retry (squaremeter init overwrituje `.current-price` post pierwszy recalc)
- Fix: poll-retry rejestracja `prestashop.on('updatedProduct')` (prestashop bundle loads after inline script parse)
- [Phase 02, Plan 02-05] Struktura materiału w POST payload (production bug fix) — 4/4 AC pass
- Diagnoza Playwright: `<select id="group_5" name="group[5]">` (Tekstura materiału) POZA formą `#add-to-cart-or-refresh` w `.product-bar-box``$form.serialize()` nie łapie → PS saves default
- Task 1: Enumerate `[name^="group["]` spoza formy, encodeURI + doklej do payload (custom.js + inline mirror, identyczna logika)
- Task 2: FTP deploy 226/226
- Task 3: Playwright network capture: `group%5B5%5D=16` w payload, `id_product_attribute=4175` (new combination), cart pokazuje "Extra fine"
- Future-proof: enumeracja wszystkich grup (nie hardcode group[5]) — kolejne atrybuty automatycznie pokryte
## Zmienione pliki
- `themes/ayon/assets/js/custom.js` (+175 linii handler update, +55 linii Plan 02-04 block, +13 linii Plan 02-05 externalGroups)
- `themes/ayon/templates/catalog/product.tpl` (block move fix + inline mirror update + 50 linii Plan 02-04 IIFE + 13 linii Plan 02-05 mirror)
- `.paul/STATE.md` (Plan 02-03/02-04/02-05 decisions + loop position + phase 02 COMPLETE)
- `.paul/PROJECT.md` (evolved: Phase 02 requirements shipped, Established Patterns aggregated, Key Decisions table)
- `.paul/ROADMAP.md` (Plan 02-05 added + Phase 02 COMPLETE)
- `.paul/phases/02-product-actions-fixes/02-03-SUMMARY.md` (created)
- `.paul/phases/02-product-actions-fixes/02-04-SUMMARY.md` (created)
- `.paul/phases/02-product-actions-fixes/02-04-PLAN.md` (created)
- `.paul/phases/02-product-actions-fixes/02-05-PLAN.md` (created)
- `.paul/phases/02-product-actions-fixes/02-05-SUMMARY.md` (created)
- `.claude/memory/feedback_ftp_autoupload.md` (created)
- `.claude/memory/project_newwalls_layout_context.md` (created)
- `.claude/memory/MEMORY.md` (2 new entries)