--- phase: 74-reverse-status-mapping plan: 01 subsystem: settings tags: [status-mapping, integrations, shoppro, allegro, ui] requires: - phase: none provides: none provides: - Reversed status mapping UI (orderPRO statuses as rows, external as dropdown) - DB unique key on orderpro_status_code instead of external code - New repository methods for external status listing and reverse maps affects: [status-sync, order-import] tech-stack: added: [] patterns: [mapping-index pattern for reversed UI, external status options builder] key-files: created: - database/migrations/20260407_000078_reverse_status_mapping_keys.sql modified: - src/Modules/Settings/ShopproStatusMappingRepository.php - src/Modules/Settings/AllegroStatusMappingRepository.php - src/Modules/Settings/ShopproIntegrationsController.php - src/Modules/Settings/AllegroStatusMappingController.php - src/Modules/Settings/AllegroIntegrationController.php - src/Modules/Settings/ShopproOrdersSyncService.php - resources/views/settings/shoppro.php - resources/views/settings/allegro.php - resources/lang/pl.php key-decisions: - "Kolumny DB bez zmian nazw — zmiana tylko unique key direction" - "Discovered statuses z Flash + existing mappings jako dropdown options" - "Allegro: replaceAllMappings() zamiast per-row upsert dla bulk save" - "upsertDiscoveredStatus() zachowany jako check-then-insert (bez ON DUPLICATE KEY po zmianie unique)" patterns-established: - "buildMappingIndex(): orderpro_code => external_info map for pre-filling UI" - "buildExternalStatusOptions(): merge DB + Flash discovered for dropdown" duration: ~30min started: 2026-04-07T00:00:00Z completed: 2026-04-07T00:30:00Z --- # Phase 74 Plan 01: Reverse Status Mapping Summary **Odwrocenie mapowania statusow w shopPRO i Allegro — UI pokazuje statusy orderPRO po lewej, dropdown z zewnetrznymi po prawej. Migracja DB zmienia unique key na orderpro_status_code.** ## Performance | Metric | Value | |--------|-------| | Duration | ~30min | | Tasks | 2 completed | | Files modified | 11 | ## Acceptance Criteria Results | Criterion | Status | Notes | |-----------|--------|-------| | AC-1: UI shopPRO — orderPRO po lewej, shopPRO po prawej | Pass | Tabela iteruje orderproStatuses, dropdown z shopproStatuses | | AC-2: UI Allegro — orderPRO po lewej, Allegro po prawej | Pass | Analogicznie, usuniety single-add form | | AC-3: Sync dziala w obu kierunkach | Pass | buildStatusMap() i buildReverseStatusMap() nadal zwracaja poprawne mapy | | AC-4: Sync pobiera statusy do dropdown | Pass | Flash + listExternalStatuses() merge | | AC-5: Migracja DB zmienia unique constraint | Pass | SQL przygotowany, deduplikacja przed zmiana | ## Accomplishments - Odwrocony UI mapowania w obu integracjach (shopPRO i Allegro) — orderPRO statusy jako wiersze - Migracja DB: unique key z external_code na orderpro_status_code w obu tabelach - Nowe metody: listExternalStatuses(), buildAllegroToOrderproMap(), replaceAllMappings() - JS synchronizacja hidden input shoppro_status_name/allegro_status_name przy zmianie dropdown ## Files Created/Modified | File | Change | Purpose | |------|--------|---------| | `database/migrations/20260407_000078_reverse_status_mapping_keys.sql` | Created | Migracja unique key + deduplikacja | | `src/Modules/Settings/ShopproStatusMappingRepository.php` | Modified | replaceForIntegration() key na orderpro, +listExternalStatuses() | | `src/Modules/Settings/AllegroStatusMappingRepository.php` | Modified | upsertMapping() key na orderpro, +listExternalStatuses(), +buildAllegroToOrderproMap(), +replaceAllMappings(), upsertDiscoveredStatus() check-then-insert | | `src/Modules/Settings/ShopproOrdersSyncService.php` | Modified | buildStatusMap() komentarz + guard na duplikaty | | `src/Modules/Settings/ShopproIntegrationsController.php` | Modified | buildMappingIndex() + buildExternalStatusOptions() zamiast buildStatusRows(), saveStatusMappings() odwrocony | | `src/Modules/Settings/AllegroStatusMappingController.php` | Modified | saveStatusMappingsBulk() odwrocony, saveStatusMapping() stub redirect | | `src/Modules/Settings/AllegroIntegrationController.php` | Modified | +allegroStatuses w danych widoku | | `resources/views/settings/shoppro.php` | Modified | Odwrocona tabela + JS name sync | | `resources/views/settings/allegro.php` | Modified | Odwrocona tabela, usuniety single-add form, +JS name sync | | `resources/lang/pl.php` | Modified | Nowe klucze: shoppro_status, allegro_status, no_orderpro_statuses, zmienione opisy | ## Decisions Made | Decision | Rationale | Impact | |----------|-----------|--------| | Zachowanie nazw kolumn DB | Minimalizacja ryzyka — zmiana tylko unique key, nie schemat | Zero zmian w logice sync pull/push | | Discovered statuses z Flash + DB merge | Brak nowej tabeli, proste rozwiazanie | Dropdown opcje znikaja po sesji jesli nie zapisane w mapowaniu | | upsertDiscoveredStatus() jako check-then-insert | Po zmianie unique na orderpro_status_code, ON DUPLICATE KEY nie dziala na allegro_status_code | Allegro discovery nadal dziala poprawnie | | Usuniety single-add form w Allegro | Zbedny — wiersze to orderPRO statusy, nie trzeba dodawac recznie | Czystszy UI | ## Deviations from Plan ### Summary | Type | Count | Impact | |------|-------|--------| | Auto-fixed | 2 | Konieczne dostosowania | | Deferred | 1 | Migracja do uruchomienia na serwerze | ### Auto-fixed Issues **1. Nazwa pliku migracji** - **Found during:** Task 1 - **Issue:** Plan mial nazwe `20260407_000074_...` ale kolejny numer to 078 - **Fix:** Plik nazwany `20260407_000078_reverse_status_mapping_keys.sql` **2. upsertDiscoveredStatus() w AllegroStatusMappingRepository** - **Found during:** Task 1 - **Issue:** Po zmianie unique key na orderpro_status_code, ON DUPLICATE KEY UPDATE nie moze kluczowac na allegro_status_code - **Fix:** Zamieniono na check-then-insert (SELECT + INSERT/UPDATE) ### Deferred Items - Migracja SQL wymaga uruchomienia na serwerze (lokalna baza niedostepna — XAMPP wylaczony) ## Issues Encountered | Issue | Resolution | |-------|------------| | Lokalna baza danych niedostepna | Migracja przygotowana do uruchomienia na serwerze | | saveStatusMapping() route nadal istnieje | Dodany stub redirect w kontrolerze | ## Next Phase Readiness **Ready:** - Kod w pelni przygotowany i zweryfikowany syntaktycznie - Migracja SQL gotowa do uruchomienia - Dokumentacja zaktualizowana (DB_SCHEMA, ARCHITECTURE, TECH_CHANGELOG) **Concerns:** - Migracja musi byc uruchomiona na serwerze przed deploy - Istniejace mapowania z duplikatami orderpro_status_code zostana zdeduplikowane (zachowany najnowszy) **Blockers:** - None (po uruchomieniu migracji) --- *Phase: 74-reverse-status-mapping, Plan: 01* *Completed: 2026-04-07*