--- phase: 46-allegro-status-push plan: 01 type: execute wave: 1 depends_on: [] files_modified: - src/Modules/Settings/AllegroStatusSyncService.php - src/Modules/Settings/AllegroApiClient.php - src/Modules/Settings/AllegroStatusMappingRepository.php - src/Modules/Settings/AllegroOrderSyncStateRepository.php - src/Modules/Settings/AllegroIntegrationController.php - resources/views/settings/allegro.php - resources/lang/pl.php - tests/Unit/AllegroStatusSyncServiceTest.php - DOCS/ARCHITECTURE.md - DOCS/TECH_CHANGELOG.md autonomous: true --- ## Goal Wdrozyc dzialajaca synchronizacje statusow zamowien w kierunku `orderPRO -> Allegro` i aktywowac ten kierunek w konfiguracji integracji Allegro. ## Purpose Opcja kierunku `orderPRO -> Allegro` jest dostepna w UI, ale obecnie jest zablokowana i backend zwraca komunikat "jeszcze nie wdrozony". Operator nie moze wypchnac zmian statusu wykonanych recznie w orderPRO do Allegro. ## Output - Pelna obsluga push direction w `AllegroStatusSyncService` - Metoda API do aktualizacji statusu checkout form w Allegro - Reverse mapping statusow `orderpro_status_code -> allegro_status_code` - Aktywna opcja kierunku w UI ustawien Allegro - Testy jednostkowe krytycznej logiki push - Aktualizacja dokumentacji technicznej ## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md ## Prior Work @.paul/phases/45-shoppro-status-push/45-01-SUMMARY.md ## Source Files @src/Modules/Settings/AllegroStatusSyncService.php @src/Modules/Settings/AllegroApiClient.php @src/Modules/Settings/AllegroStatusMappingRepository.php @src/Modules/Settings/AllegroOrderSyncStateRepository.php @src/Modules/Settings/AllegroIntegrationController.php @resources/views/settings/allegro.php @resources/lang/pl.php @src/Modules/Cron/AllegroStatusSyncHandler.php ## Required Skills (from SPECIAL-FLOWS.md) | Skill | Priority | When to Invoke | Loaded? | |-------|----------|----------------|---------| | sonar-scanner | required | Po APPLY, przed UNIFY | o | **BLOCKING:** Required skills MUST be loaded before APPLY proceeds. ## Skill Invocation Checklist - [ ] sonar-scanner loaded (run command or confirm) ## AC-1: Cron pushuje reczne zmiany statusu orderPRO do Allegro ```gherkin Given integracja Allegro ma ustawiony kierunek synchronizacji statusow na orderPRO -> Allegro And zamowienie Allegro ma reczna zmiane statusu w orderPRO (order_status_history.change_source = manual) And istnieje mapowanie statusu orderPRO na status Allegro When uruchamia sie job cron allegro_status_sync Then AllegroStatusSyncService wykonuje push statusu do API Allegro And wynik synchronizacji zawiera licznik pushed i failed ``` ## AC-2: Brak mapowania nie zatrzymuje przetwarzania ```gherkin Given czesc zamowien nie ma reverse mapowania statusu orderPRO -> Allegro When cron przetwarza batch zmian statusow Then zamowienia bez mapowania sa oznaczone jako skipped And pozostale zamowienia sa dalej przetwarzane ``` ## AC-3: Ustawienie kierunku jest aktywne i zapisywalne w UI ```gherkin Given operator otworzy Ustawienia > Integracje > Allegro > Ustawienia When wybierze kierunek orderPRO -> Allegro i zapisze formularz Then opcja nie jest zablokowana jako disabled And wartosc jest zapisana w app_settings (allegro_status_sync_direction) ``` Task 1: Implementacja push direction w AllegroStatusSyncService i reverse mapowania src/Modules/Settings/AllegroStatusSyncService.php, src/Modules/Settings/AllegroStatusMappingRepository.php, src/Modules/Settings/AllegroOrderSyncStateRepository.php 1. Rozszerzyc `AllegroStatusSyncService::sync()` o realna sciezke dla `orderpro_to_allegro` zamiast zwracania "jeszcze nie wdrozony". 2. Dodac prywatna metode push (np. `syncOrderproToAllegro()`), ktora: - pobiera zamowienia Allegro z recznymi zmianami statusu (`order_status_history.change_source = manual`) od ostatniego kursora, - filtruje tylko zamowienia `source = allegro`, - buduje reverse mapowanie na podstawie `allegro_order_status_mappings` (`orderpro_status_code -> allegro_status_code`, first match wins), - dla brakow mapowania zwieksza `skipped`, bez przerywania petli, - aktualizuje kursor push po sukcesie batcha. 3. W `AllegroStatusMappingRepository` dodac metode zwracajaca reverse map dla push direction. 4. W `AllegroOrderSyncStateRepository` dodac obsluge kursora `last_status_pushed_at` (get/update), defensywnie wobec srodowisk bez kolumny. 5. Zachowac obecna logike `allegro_to_orderpro` bez regresji. Avoid: - nie pushowac zmian z `change_source = import` ani `sync` (petla synchronizacji), - nie modyfikowac flow importu zamowien Allegro. php -l src/Modules/Settings/AllegroStatusSyncService.php && php -l src/Modules/Settings/AllegroStatusMappingRepository.php && php -l src/Modules/Settings/AllegroOrderSyncStateRepository.php AC-1 i AC-2 satisfied: backend obsluguje push direction i bezpiecznie pomija brak mapowania Task 2: Dodanie metody API update statusu checkout-form w AllegroApiClient src/Modules/Settings/AllegroApiClient.php, src/Modules/Settings/AllegroStatusSyncService.php 1. Dodac do `AllegroApiClient` metode aktualizacji statusu realizacji zamowienia Allegro (checkout form fulfillment) z obsluga tokena i bledow HTTP analogiczna do istniejacych metod. 2. Uzyc tej metody w push direction serwisu sync, mapujac status orderPRO na docelowy kod Allegro. 3. Zapewnic czytelny wynik dla kazdego rekordu (success/fail) i agregacje w odpowiedzi crona. 4. Zachowac istniejace standardy: prepared flow, brak stringowego SQL, brak "magic values" bez stalej. Avoid: - nie dodawac natywnych `alert()/confirm()` ani zmian w warstwie widoku w tym tasku, - nie tlumic bledow API bez zapisu ich tresci do wyniku sync. php -l src/Modules/Settings/AllegroApiClient.php && php -l src/Modules/Settings/AllegroStatusSyncService.php AC-1 satisfied: service moze fizycznie zaktualizowac status po stronie Allegro API Task 3: Aktywacja opcji w UI + testy jednostkowe + dokumentacja resources/views/settings/allegro.php, src/Modules/Settings/AllegroIntegrationController.php, resources/lang/pl.php, tests/Unit/AllegroStatusSyncServiceTest.php, DOCS/ARCHITECTURE.md, DOCS/TECH_CHANGELOG.md 1. Usunac blokade `disabled` z opcji `orderPRO -> Allegro` w formularzu ustawien Allegro i pozostawic poprawny zapis przez istniejacy endpoint `saveImportSettings`. 2. Uzuplenic komunikaty i opisy w tlumaczeniach PL (jezeli wymagane), aby nie sugerowaly "wkrotce". 3. Dodac testy jednostkowe dla krytycznych sciezek push: - push sukces + increment `pushed`, - brak reverse mapping + increment `skipped`, - blad API + increment `failed` i brak przerwania batcha. 4. Zaktualizowac `DOCS/ARCHITECTURE.md` o dzialajacy kierunek `orderpro_to_allegro`. 5. Dopisac wpis do `DOCS/TECH_CHANGELOG.md` (co i dlaczego zostalo wdrozone). Avoid: - nie zmieniac schematu DB w tym planie, - nie rozszerzac zakresu o nowe endpointy UI poza aktywacja istniejacej opcji. php -l src/Modules/Settings/AllegroIntegrationController.php && php -l tests/Unit/AllegroStatusSyncServiceTest.php && C:/xampp/php/php.exe vendor/bin/phpunit tests/Unit/AllegroStatusSyncServiceTest.php AC-3 satisfied: opcja jest aktywna, testy i dokumentacja pokrywaja nowy kierunek ## DO NOT CHANGE - src/Modules/Settings/AllegroOrdersSyncService.php - src/Modules/Settings/AllegroOrderImportService.php - src/Modules/Orders/OrdersController.php - database/migrations/* ## SCOPE LIMITS - Zakres dotyczy tylko synchronizacji statusow, bez zmian importu zamowien i bez zmian mapowania dostaw. - Brak przebudowy UI zakladki Allegro poza aktywacja istniejacej opcji kierunku. - Brak nowych cron job types i brak zmian interwalow harmonogramu. Before declaring plan complete: - [ ] `php -l` przechodzi dla wszystkich zmienionych plikow PHP - [ ] Test jednostkowy `AllegroStatusSyncServiceTest` przechodzi lokalnie - [ ] Kierunek `orderpro_to_allegro` nie zwraca juz komunikatu "jeszcze nie wdrozony" - [ ] Wynik sync zawiera liczniki `pushed`, `skipped`, `failed` - [ ] UI pozwala zapisac kierunek `orderPRO -> Allegro` - [ ] `DOCS/ARCHITECTURE.md` i `DOCS/TECH_CHANGELOG.md` sa zaktualizowane - Wszystkie taski zakonczone - Wszystkie kryteria akceptacji spelnione - Brak regresji w kierunku `allegro_to_orderpro` - Nowy kierunek dziala z poziomu crona i jest aktywowalny w UI After completion, create `.paul/phases/46-allegro-status-push/46-01-SUMMARY.md`