Wszystkie operacje na zgłoszeniach zwrotu — zmiany statusu, refundy, notki — wykonujesz z dedykowanej strony w panelu admin, bez wchodzenia w edycję zamówienia WooCommerce.
Lista zgłoszeń
WooCommerce → Zgłoszenia zwrotu (slug: wpnest-rfw-requests). Tabela z kolumnami: ID zgłoszenia, ID zamówienia (link), klient (imię + email), status (badge), data zgłoszenia, ilość pozycji, akcje (View →).
- Filtrowanie po statusie (pending/accepted/rejected/refunded)
- Paginacja 20/strona
- Inline dropdown statusu dla szybkiej zmiany
- Export CSV (wszystkie kolumny + per-item)
W menu admin obok „Zgłoszenia zwrotu” pojawia się czerwona kropla z liczbą nierozpatrzonych zgłoszeń (status = pending). Jest aktualizowana w czasie rzeczywistym (przez transient cache, TTL 5 min).
Strona szczegółów zgłoszenia
Klikając „View →” przy zgłoszeniu trafiasz na ?page=wpnest-rfw-requests&request_id=ID — pełna strona ze wszystkimi sekcjami potrzebnymi do obsługi zwrotu w jednym miejscu.
Layout (CSS grid 1fr 320px)
Prawa kolumna (sticky na desktop, 320px): Customer & order summary
- Imię, email (mailto:), telefon (tel:)
- Pełny adres rozliczeniowy
- Adres dostawy (tylko gdy różny od rozliczeniowego)
- Data zamówienia, kwota total, kwota już zrefundowana
- Metoda płatności (label)
- Aktualny status WooCommerce
Lewa kolumna (main work area):
- Returned items — per-item karta z thumbnail, nazwa + wariant, qty zwracane / ordered, reason label + reason_text, refundable balance + „X left” qty
- Status & quick actions — dropdown z aktualnym statusem, checkbox „Notify customer”, textarea „Internal note”, przyciski Accept / Reject / Mark refunded
- Issue refund — per-line qty + refund_total inputs, total auto-computes, reason input, restock toggle
- Notes — textarea + radio „Visible to customer” / „Internal only”, thread istniejących notek (via
wc_get_order_notes) - Status history — timeline z tabeli
wpnest_rfw_status_log: old → new, by user, when, optional note
Wystawianie refundu
Wpisz amount per linia (default = unit_price × qty), opcjonalny reason, toggle „Restock items” → Issue refund. Wywołuje wc_create_refund() w-process (bez external HTTP), gateway-aware (sprawdza $gateway->supports('refunds')).
W Free refund_payment=false — refund jest zarejestrowany w WooCommerce i widoczny w panelu, ale samo zwrócenie pieniędzy musisz zatwierdzić ręcznie przez przycisk „Refund” w bramce płatności lub w edycji zamówienia WC. Automatyczny refund przez bramkę (Stripe, PayU, Przelewy24) to feature Pro.
Idempotencja
Każdy refund i każda notka są idempotentne: ponowne wysłanie tego samego payloadu w ciągu 60 sekund zwraca cached wynik (nie tworzy duplikatu). Status update loguje każdą zmianę (nawet gdy status się nie zmienił) — to celowe dla auditability.