=== BuddyPilot Odstąpienie dla WooCommerce ===

Plugin umożliwiający klientowi odstąpienie od umowy w WooCommerce (dyrektywa 2023/2673). Dodaje przycisk w panelu klienta i formularz dla gości.

== Opis ==

**BuddyPilot Odstąpienie dla WooCommerce** implementuje obowiązek wynikający z **Artykułu 11a dyrektywy UE 2023/2673**. Od **19 czerwca 2026 r.** każdy sklep internetowy sprzedający konsumentom w UE musi udostępniać wyraźnie widoczną, łatwo dostępną funkcję odstąpienia od umowy, umieszczoną obok pozostałych informacji o prawie do odstąpienia.

= Co robi wtyczka =

**Po stronie klienta**

* **Przycisk "Odstąp od umowy tutaj"** zgodny z Artykułem 11a, widoczny na stronie szczegółów zamówienia w Moim koncie
* **Dwuetapowy formularz odstąpienia**: wybór pozycji, podgląd deklaracji, potwierdzenie jednym kliknięciem
* **Pełna obsługa produktów z wariantami**: każdy wariant (rozmiar, kolor itp.) wyświetlany jest z pełnymi atrybutami jako osobna pozycja w formularzu
* **Obsługa zamówień gości**: weryfikacja tożsamości przez e-mail + numer zamówienia, bez logowania
* **Historia odstąpień w Moim koncie**: lista deklaracji i strona szczegółów każdej deklaracji
* **Zbieranie zgody z Artykułu 16(m)** w zamówieniu dla produktów cyfrowych i wirtualnych (trzy tryby: wymagana, opcjonalna lub ukryta)
* **E-mail potwierdzający deklarację** pełniący rolę potwierdzenia na trwałym nośniku zgodnie z Artykułem 11a(3)
* **E-mail o rozpatrzeniu odstąpienia** wysyłany do klienta po tym jak operator zamknie deklarację

**Po stronie operatora**

* **Metabox na stronie edycji zamówienia** do rejestrowania deklaracji złożonych przez telefon, pocztą lub osobiście
* **Osobna strona "Dodaj nową deklarację"** dla operatorów obsługujących wiele kanałów bez opuszczania listy odstąpień
* **Lista deklaracji** z wyszukiwaniem, filtrowaniem i sortowaniem w panelu WooCommerce
* **Strona szczegółów deklaracji** z pełną historią zmian statusów i zarządzaniem stanem
* **E-mail do operatora** wysyłany natychmiast po złożeniu deklaracji przez klienta

**Prawne i zgodność**

* **Dodatkowy status zamówienia** `wc-withdrawal` (opcjonalny, rejestrowany przez wtyczkę) z historią zmian zapisywaną jako notatki zamówienia WooCommerce
* **Strona informacyjna o prawie odstąpienia (Załącznik I(A))** możliwa do wygenerowania jednym kliknięciem w ustawieniach wtyczki
* **Wzór formularza odstąpienia (Załącznik I(B))** możliwy do wygenerowania jednym kliknięciem w ustawieniach wtyczki; publikowany jako strona WordPress i automatycznie linkowany z e-maili zamówieniowych
* **Konfigurowalny termin zwrotu** (domyślnie 14 dni, zgodny z warunkami umowy)
* **Konfigurowalne statusy "dostarczono"** uruchamiające bieg terminu odstąpienia
* **Określenie kto ponosi koszty zwrotu** (konsument lub sprzedawca, zgodnie z wymogami Załącznika I(A))
* **Eksport i anonimizacja danych osobowych** zgodne z narzędziami prywatności WordPress (RODO)
* **Kompatybilność z HPOS** (High-Performance Order Storage) i trybem klasycznym
* **Zgodność z WCAG 2.2 AA** dla wszystkich formularzy widocznych dla klientów
* **Tłumaczenia: polski i angielski** dołączone do wtyczki

= Wersja Pro =

Rozszerzona funkcjonalność dostępna w dodatku [BuddyPilot Odstąpienie Pro](https://buddypilot.pl/wtyczki/odstapienie-pro/):

* Automatyczny zwrot zatwierdzony przez operatora: tworzony na podstawie zadeklarowanych pozycji, jednym kliknięciem z ekranu deklaracji
* Weryfikacja liczby pobrań: przywraca prawo odstąpienia gdy klient nie pobrał produktu cyfrowego, ograniczając bezzasadne odmowy zwrotu
* Obsługa WooCommerce Subscriptions: anulowanie przyszłych odnowień, proporcjonalne rozliczenie bieżącego okresu zgodnie z Artykułem 9(2)(b)(iii)
* Obsługa WooCommerce Product Bundles: automatyczna obsługa zależnie od typu zestawu; dla zestawów wycenianych per-pozycja z rabatem, wybór czy przy zwrocie częściowym zachować zapłaconą kwotę, czy potrącić cały rabat zestawu
* Eksport PDF deklaracji odstąpienia
* Generowanie Załącznika I(B) z uwzględnieniem prawa krajowego

== Instalacja ==

1. Wgraj folder wtyczki do `/wp-content/plugins/` lub zainstaluj przez **Wtyczki > Dodaj nową**.
2. Aktywuj wtyczkę w menu **Wtyczki**.
3. Przejdź do **WooCommerce > Ustawienia > Odstąpienie** i skonfiguruj:
   * **Ogólne**: okres odstąpienia, statusy "dostarczono"
   * **Dane sprzedawcy**: nazwa, adres, adres zwrotów, kto ponosi koszty zwrotu
   * **Doświadczenie klienta**: tryb zgody dla produktów cyfrowych, strona informacyjna
4. W sekcji **Doświadczenie klienta** kliknij **"Utwórz stronę informacyjną o odstąpieniu"** aby opublikować zgodną z dyrektywą UE informację (Załącznik I(A)) oraz wzór formularza (Załącznik I(B)). URL tej strony jest automatycznie linkowany z e-maili zamówieniowych i strony zamówienia w Moim koncie.
5. Klienci uprawnieni do odstąpienia zobaczą przycisk **"Odstąp od umowy tutaj"** na stronie zamówienia. Formularz działa bez JavaScript.

== Najczęstsze pytania ==

= Czy wtyczka działa dla zamówień złożonych bez rejestracji? =

Tak. Klienci-goście weryfikują tożsamość przez e-mail + numer zamówienia na publicznej stronie odstąpienia. Logowanie nie jest wymagane.

= Czy wtyczka automatycznie przetwarza zwroty? =

Wersja bezpłatna rejestruje deklarację odstąpienia i zmienia status zamówienia na `wc-withdrawal`. Zwrot operator realizuje narzędziami WooCommerce. Automatyczny zwrot budowany na podstawie zadeklarowanych pozycji jest dostępny w wersji Pro.

= Czego wtyczka NIE robi? =

Wtyczka rejestruje deklaracje odstąpienia jako dokumenty prawne i powiadamia klienta oraz operatora. Nie przetwarza automatycznie zwrotów pieniędzy, nie weryfikuje odesłania towarów, nie egzekwuje terminów zwrotu ani nie obsługuje księgowości i VAT. Operator odpowiada za realizację zwrotu w ustawowym terminie (domyślnie 14 dni, konfigurowane w WooCommerce > Ustawienia > Odstąpienie > Ogólne).

= Czy wtyczka obsługuje produkty z wariantami? =

Tak, bez żadnej dodatkowej konfiguracji. Produkty wariantowe (różne rozmiary, kolory itp.) obsługiwane są w wersji bezpłatnej. W formularzu odstąpienia każdy wariant wyświetlany jest jako osobna pozycja z pełną nazwą atrybutów (np. Koszulka — rozmiar: L, kolor: czarny), dzięki czemu klient precyzyjnie wskazuje co zwraca, a operator widzi te same szczegóły na liście deklaracji i stronie szczegółów.

= Czy wtyczka obsługuje WooCommerce Subscriptions i Product Bundles? =

Obsługa subskrypcji, zestawów i produktów złożonych (anulowanie odnowień, proporcjonalne rozliczenia, tryby zwrotu zestawów) jest częścią wersji Pro. Wersja bezpłatna traktuje je jak standardowe produkty.

= Czy wtyczka realizuje zbieranie zgody z Artykułu 16(m) dla produktów cyfrowych? =

Tak. Wtyczka dodaje jawną zgodę przy kasie gdy koszyk zawiera produkty do pobrania lub wirtualne. Operator wybiera tryb: "wymagana przed zakupem", "opcjonalna" lub "ukryta" (sprzedawca rezygnuje z wyłączenia). Zgoda jest zapisywana na zamówieniu i wyświetlana w formularzu odstąpienia.

= Kiedy zaczyna biec termin odstąpienia? =

Termin biegnie od chwili zmiany statusu zamówienia na jeden ze statusów "dostarczono" skonfigurowanych w WooCommerce > Ustawienia > Odstąpienie > Ogólne. Wtyczka zapisuje dokładny znacznik czasu tej zmiany. Dopóki termin nie upłynął, klient widzi w formularzu odstąpienia ile dni pozostało — po upływie terminu przycisk odstąpienia przestaje być dostępny. Skonfigurować można dowolny wbudowany lub niestandardowy status WooCommerce (np. "Zrealizowane", własny "Dostarczone" itp.). Pozostawienie listy pustej oznacza, że termin nigdy nie zacznie biec — przydatne podczas testów lub gdy odstąpienie ma być dostępne bezterminowo.

= Czy wtyczka jest zgodna z HPOS? =

Tak. Wtyczka jest w pełni zgodna z WooCommerce High-Performance Order Storage (HPOS) i automatycznie korzysta z trybu klasycznego gdy HPOS jest nieaktywny.

== Dziennik zmian ==

= 1.0.2 =
* Kod: zmieniono wszystkie krotkie prefiksy `bpw_` / `bpw-` na pelny prefiks `buddypilot_withdrawal_` / `buddypilot-withdrawal-` — dotyczy nazw akcji AJAX/admin-post, uchwytow skryptow, obiektu JavaScript, ID metaboxa, typu pola WooCommerce, nazw nonce, kluczy blokad i parametrow GET. Spelnia wymog unikalnych prefiksow WordPress.org.

= 1.0.1 =
* Bezpieczenstwo: wszystkie handlery requestow admin i AJAX weryfikuja teraz uprawnienia uzytkownika przed weryfikacja nonce, zgodnie z wytycznymi bezpieczenstwa WordPress.
* Bezpieczenstwo: sciezka AJAX w handlerze rejestracji operatora uzywa teraz `check_ajax_referer()` zamiast `check_admin_referer()`, zwracajac poprawna odpowiedz AJAX przy nieprawidlowym nonce.
* Bezpieczenstwo: dodano brame `current_user_can()` do handlera powiadomien admina dla statusu tworzenia strony informacyjnej.
* Bezpieczenstwo: symbol waluty i separatory z danych formatu ceny sa teraz escapowane po stronie JavaScript przed wstawieniem do DOM.
* Kod: przenieisono inline JavaScript z szablonu rejestracji operatora do osobnego pliku (`assets/js/admin/operator-registration.js`); ciagi tekstowe przekazywane przez `wp_localize_script()`.
* Kod: usunieto wywolanie `load_plugin_textdomain()`; WordPress 4.6 i wyzszy laduje tlumaczenia automatycznie dla wtyczek hostowanych na WordPress.org.

= 1.0.0 =
* Pierwsze stabilne wydanie. Pełna implementacja funkcji odstąpienia z Artykułu 11a: dwuetapowy formularz, weryfikacja gości, ręczna rejestracja przez operatora, lista deklaracji w panelu admina, konfigurowalny termin i statusy dostarczenia, zbieranie zgody z Artykułu 16(m), generator stron Załącznika I(A)/(B), e-maile do klienta i operatora, historia odstąpień w Moim koncie, obsługa HPOS, integracja z RODO, zgodność z WCAG 2.2 AA, tłumaczenia: polski i angielski.
