Prowadząc sklep internetowy na WooCommerce, często trzeba dostosować proces wystawiania faktur do indywidualnych wymagań. Wiele firm oczekuje, że dokumenty sprzedaży będą zawierały nie tylko dane do faktury (billing), ale również dane odbiorcy przesyłki (shipping) – zwłaszcza gdy są one różne.
W tym studium przypadku pokazujemy, jak przy pomocy wtyczki Fakturownia WooCommerce rozwiązać problem braku danych wysyłki na automatycznie generowanych fakturach i proformach.
Dzięki temu artykułowi dowiesz się:
- jak krok po kroku wdrożyć nową funkcjonalność,
- jak wykorzystać filtry w WooCommerce do przesyłania dodatkowych danych do Fakturownii,
- jakie są korzyści z takiego rozwiązania.
Opis sytuacji
W sklepie internetowym opartym na WooCommerce wykorzystywano wtyczkę Fakturownia WooCommerce do automatycznego wystawiania faktur i proform.
Początkowo celem było dodanie dodatkowych pól do automatycznych faktur. W trakcie wdrożenia pojawił się nowy wymóg – faktury powinny zawierać również dane odbiorcy przesyłki (shipping), które pojawiają się po zaznaczeniu opcji „Wyślij na inny adres?” na stronie zamówienia WooCommerce.
Problem polegał na tym, że mimo uzupełnienia pól wysyłki, dane te nie pojawiały się na wygenerowanej proformie w Fakturownii.
Analiza przypadku i rozwiązanie
1. Identyfikacja przyczyny problemu
Podczas testów okazało się, że mechanizm sprawdzający dane wysyłki porównuje je z danymi do faktury. Jeśli adresy są identyczne – pola wysyłki nie są przesyłane do faktury. W przypadku, gdy w sekcji „Dane do faktury” i „Adres wysyłki” użyto tych samych informacji, kod nie dodawał dodatkowych pól.
2. Rozwiązanie problemu – użycie filtra fakturownia/invoice_proforma/data
Aby dane wysyłki pojawiły się w proformie, należało użyć odpowiedniego filtra dostępnego we wtyczce Fakturownia WooCommerce.
add_filter( 'fakturownia/invoice_proforma/data', 'wpdesk_fakturownia_shipping_client_data', 10, 2 );
function wpdesk_fakturownia_shipping_client_data( array $data, WPDesk\WooCommerceFakturownia\Data\DocumentData $document_data ) {
$shipping_address1 = $document_data->getOrder()->get_shipping_address_1();
$shipping_address2 = $document_data->getOrder()->get_shipping_address_2();
$shipping_company = $document_data->getOrder()->get_shipping_company();
$shipping_country = $document_data->getOrder()->get_shipping_country();
$shipping_first_name = $document_data->getOrder()->get_shipping_first_name();
$shipping_last_name = $document_data->getOrder()->get_shipping_last_name();
$shipping_city = $document_data->getOrder()->get_shipping_city();
$shipping_postcode = $document_data->getOrder()->get_shipping_postcode();
$data['recipient_name'] = $shipping_company . ' ' . $shipping_first_name . ' ' . $shipping_last_name;
$data['recipient_street'] = $shipping_address1 . ' ' . $shipping_address2;
$data['recipient_post_code'] = $shipping_postcode;
$data['recipient_city'] = $shipping_city;
$data['recipient_country'] = $shipping_country;
return $data;
}
Dzięki temu kodowi dane odbiorcy przesyłki są przekazywane do API Fakturownii i pojawiają się w wygenerowanym dokumencie.
3. Wersja z warunkiem – tylko gdy adresy są różne
Aby uniknąć sytuacji, w której dane wysyłki dublują dane fakturowe, można użyć filtra z warunkiem:
add_filter( 'fakturownia/invoice_proforma/data', 'wpdesk_fakturownia_shipping_client_data', 10, 2 );
function wpdesk_fakturownia_shipping_client_data( array $data, WPDesk\WooCommerceFakturownia\Data\DocumentData $document_data ) {
if ( $document_data->getOrder()->get_shipping_address_1() !== $document_data->getOrder()->get_billing_address_1() ) {
$shipping_address1 = $document_data->getOrder()->get_shipping_address_1();
$shipping_address2 = $document_data->getOrder()->get_shipping_address_2();
$shipping_company = $document_data->getOrder()->get_shipping_company();
$shipping_country = $document_data->getOrder()->get_shipping_country();
$shipping_first_name = $document_data->getOrder()->get_shipping_first_name();
$shipping_last_name = $document_data->getOrder()->get_shipping_last_name();
$shipping_city = $document_data->getOrder()->get_shipping_city();
$shipping_postcode = $document_data->getOrder()->get_shipping_postcode();
$shipping_phone = '';
$shipping_email = '';
$data['recipient_name'] = $shipping_company . ' ' . $shipping_first_name . ' ' . $shipping_last_name;
$data['recipient_street'] = $shipping_address1 . '' . $shipping_address2;
$data['recipient_post_code'] = $shipping_postcode;
$data['recipient_city'] = $shipping_city;
$data['recipient_country'] = $shipping_country;
$data['recipient_email'] = $shipping_email;
$data['recipient_phone'] = $shipping_phone;
}
return $data;
}
4. Rozszerzenie rozwiązania – faktury właściwe
Aby dane odbiorcy wysyłki były dodawane również do faktur VAT, wystarczy zmienić filtr na:
fakturownia/invoice/data
Ostateczny kształt filtra, który będzie działać dla proformy oraz zwykłej faktury, oraz będzie usuwać pola odbiorca, kiedy dane odbiorcy i sprzedawcy są te same, prezentuje się następująco:
add_filter( 'fakturownia/invoice_proforma/data', 'wpdesk_fakturownia_shipping_client_data', 10, 2 );
add_filter( 'fakturownia/invoice/data', 'wpdesk_fakturownia_shipping_client_data', 10, 2 );
function wpdesk_fakturownia_shipping_client_data( array $data, WPDesk\WooCommerceFakturownia\Data\DocumentData $document_data ) {
if ( $document_data->getOrder()->get_shipping_address_1() !== $document_data->getOrder()->get_billing_address_1() ) {
$shipping_address1 = $document_data->getOrder()->get_shipping_address_1();
$shipping_address2 = $document_data->getOrder()->get_shipping_address_2();
$shipping_company = $document_data->getOrder()->get_shipping_company();
$shipping_country = $document_data->getOrder()->get_shipping_country();
$shipping_first_name = $document_data->getOrder()->get_shipping_first_name();
$shipping_last_name = $document_data->getOrder()->get_shipping_last_name();
$shipping_city = $document_data->getOrder()->get_shipping_city();
$shipping_postcode = $document_data->getOrder()->get_shipping_postcode();
$shipping_phone = '';
$shipping_email = '';
$data['recipient_name'] = $shipping_company . ' ' . $shipping_first_name . ' ' . $shipping_last_name;
$data['recipient_street'] = $shipping_address1 . '' . $shipping_address2;
$data['recipient_post_code'] = $shipping_postcode;
$data['recipient_city'] = $shipping_city;
$data['recipient_country'] = $shipping_country;
$data['recipient_email'] = $shipping_email;
$data['recipient_phone'] = $shipping_phone;
}
return $data;
}
Praktyczne wskazówki
- Testuj na różnych danych – jeśli adresy wysyłki i faktury są identyczne, warunek może zablokować dodanie pól.
- Sprawdzaj dokumentację wtyczki – wiele przydatnych filtrów i akcji jest opisanych w oficjalnych materiałach.
Korzyści z wdrożenia
- Pełna zgodność dokumentów z wymaganiami – faktury zawierają wszystkie potrzebne dane.
- Automatyzacja – dane przesyłane są automatycznie, bez potrzeby ręcznej edycji faktur.
- Profesjonalny wygląd dokumentów – spójne dane w fakturach i proformach poprawiają wizerunek sklepu.
Podsumowanie
Wtyczka Fakturownia WooCommerce daje możliwości personalizacji dokumentów sprzedażowych w sklepie WooCommerce. Dzięki prostemu filtrowi w kodzie można rozwiązać problem braku danych wysyłki na fakturach.
Najważniejsze wnioski:
- zawsze warto upewnić się, czy dane fakturowe i wysyłkowe różnią się, jeśli stosujemy warunki w kodzie,
- filtry
fakturownia/invoice_proforma/data
orazfakturownia/invoice/data
pozwalają dodawać dane o odbiorcy do dokumentów, - korzystanie z dokumentacji i wsparcia technicznego przyspiesza proces rozwiązywania problemów.