Case Study: System Ofertowania PDF z Koszyka WooCommerce dla Sklepu z Produktami na Wymiar
Wyzwanie biznesowe
Dystrybutor parapetów zewnętrznych, parapetów wewnętrznych, blachy podbitkowej, obróbek blacharskich oraz schodów z kamienia stanął przed problemem typowym dla branży B2B z produktami customizowanymi:
Kluczowe problemy:
- Bariera psychologiczna klientów – zakup parapetów za 3000–10 000 zł z niestandardowymi wymiarami (długość, szerokość, grubość) bezpośrednio przez sklep internetowy bez wcześniejszej konsultacji budził opór.
- Brak narzędzia do ofertowania – handlowcy tworzyli oferty ręcznie w Excelu, co zajmowało 20–30 minut na ofertę i generowało błędy (nieaktualne cenniki, literówki, brak spójności wizualnej).
- Przetargi i zamówienia firmowe – firmy budowlane i deweloperzy wymagali formalnych ofert PDF do dokumentacji przetargowej, czego standardowy koszyk WooCommerce nie obsługiwał.
- Niemożność identyfikacji klienta podczas rozmowy – gdy klient dzwonił po skompletowaniu koszyka, nie było sposobu na szybkie odnalezienie jego kalkulacji (brak unikalnego numeru referencyjnego).
- Brak elastyczności cenowej – oferty wymagały często indywidualnych rabatów lub dodatkowych pozycji (koszt transportu, montaż), czego nie dało się zrealizować w standardowym flow zamówienia.
Cel: Wdrożenie systemu pozwalającego klientom i handlowcom na generowanie profesjonalnych ofert PDF bezpośrednio z koszyka WooCommerce, bez konieczności finalizowania zamówienia, z możliwością edycji cennika, dodawania kosztów transportu i zapisywania kalkulacji dla późniejszej weryfikacji.
Rozwiązanie techniczne: Custom Post Type + Dompdf + Edytowalny Backend
Architektura systemu
System składa się z trzech głównych komponentów:
[Frontend: Zapis koszyka]
↓
[Custom Post Type: saved_cart - przechowywanie kalkulacji]
↓
[Backend: Edycja cen, transport, uwagi, wysyłka PDF]
↓
[Generator PDF: Dompdf + niestandardowy layout]
1. Frontend: Zapisywanie koszyka bez finalizacji zamówienia
Proces po stronie klienta:
- Klient kompletuje produkty w koszyku (wybiera wymiary, grubość, kolor, wykończenie).
- Na stronie koszyka pojawia się przycisk „Zapisz jako kalkulację PDF”.
- Po kliknięciu:
- System generuje unikalny numer kalkulacji (format:
KALK-4324203495– 10 cyfr losowych, unikalne w bazie). - Zapisuje snapshot koszyka jako Custom Post Type
saved_cart. - Automatycznie generuje PDF i pobiera plik na komputer klienta.
- Wyświetla komunikat: „Twoja kalkulacja została zapisana. Numer kalkulacji: KALK-XXXXXXXXXX. Możesz podać ten numer podczas kontaktu z nami.”
- System generuje unikalny numer kalkulacji (format:
Kluczowe zalety:
- Zero friction – klient nie musi zakładać konta, logować się, ani wprowadzać danych płatności.
- Referencja – unikalny numer kalkulacji pozwala na łatwą identyfikację podczas rozmowy telefonicznej lub emaila.
- Profesjonalizm – klient otrzymuje branded PDF z logo firmy, danymi kontaktowymi, warunkami płatności.
2. Custom Post Type: Przechowywanie kalkulacji z pełną historią
Każda zapisana kalkulacja tworzy post typu saved_cart z następującymi metadanymi:
| Meta key | Opis | Przykład |
|---|---|---|
_cart_number | Unikalny numer kalkulacji | KALK-4324203495 |
_cart_data | JSON z produktami (nazwa, SKU, cena, ilość, wymiary, zdjęcie) | [{...}, {...}] |
_cart_subtotal | Suma produktów brutto | 5432.10 |
_cart_tax | VAT wstecz (23/123 × subtotal) | 1020.72 |
_cart_total | Suma końcowa produktów | 5432.10 |
_transport_cost | Koszt transportu (edytowalny) | 150.00 lub null |
_cart_notes | Uwagi do kalkulacji | „Dostawa w ciągu 5 dni” |
_customer_name | Imię i nazwisko klienta | Jan Kowalski |
_customer_email | Email klienta | jan@firma.pl |
_edited_by | ID admina, który edytował kalkulację | 1 |
_edited_at | Data ostatniej edycji | 2025-03-06 14:32:11 |
Losowa numeracja (10 cyfr):
System generuje 10-cyfrowy losowy numer i sprawdza unikalność w bazie danych. Jeśli numer istnieje, generuje ponownie (rekurencja).
Dlaczego losowa, a nie sekwencyjna?
- Bezpieczeństwo – niemożliwe odgadnięcie kolejnych numerów przez konkurencję (KALK-0001, KALK-0002 → widać wolumen sprzedaży).
- Rozproszenie – eliminuje ryzyko kolizji w systemach rozproszonych (multi-server).
- Profesjonalizm – numer
KALK-4324203495wygląda bardziej jak system korporacyjny niżKALK-0042.
3. Backend (Admin): Edycja kalkulacji i zarządzanie ofertami
Panel administracyjny – lista kalkulacji:
| Numer kalkulacji | Klient | Wartość | Data |
|---|---|---|---|
| KALK-4324203495 | Jan Kowalski (jan@firma.pl) | 5 582,10 zł | 2025-03-05 |
| KALK-8293847562 | Firma ABC Sp. z o.o. | 12 340,50 zł | 2025-03-04 |
Metabox: Szczegóły kalkulacji (edytowalny)
Administrator może:
- Edytować ceny jednostkowe produktów w tabeli (np. zastosować rabat 10%).
- Zmienić ilości (jeśli klient chce skorygować wymiary).
- Dodać/zmienić koszt transportu (3 stany:
null= kreska „–”,0= „Gratis”, wartość liczbowa = kwota). - Dodać uwagi (np. „Uwaga: termin realizacji 14 dni roboczych”).
- Po zapisaniu zmian:
- System przelicza automatycznie sumę końcową (JavaScript real-time).
- Zapisuje metadane
_edited_by(ID admina) i_edited_at(timestamp). - W PDF pojawia się informacja: „Kalkulacja edytowana przez: Anna Kowalska (2025-03-06 14:32)”.
4. Akcje administratora
Metabox: Akcje (Sidebar)
- Pobierz PDF – generuje aktualną wersję PDF z edytowanymi cenami i pobiera plik.
- Wyślij PDF emailem:
- Input: adres email (domyślnie: email klienta z kalkulacji).
- Po kliknięciu „Wyślij” – system generuje PDF, wysyła jako załącznik przez
wp_mail(), usuwa plik tymczasowy. - Email zawiera profesjonalną treść z numerem kalkulacji i danymi kontaktowymi.
5. Generator PDF: Dompdf + Custom Layout
Biblioteka: Dompdf – PHP library do generowania PDF z HTML/CSS.
Struktura PDF:
┌─────────────────────────────────────────────┐ │ [LOGO] Firma Sp. z o.o. │ │ ul. Przykładowa 10 │ │ 00-000 Warszawa │ │ NIP: 1234567890 │ ├─────────────────────────────────────────────┤ │ KALKULACJA │ │ Numer: KALK-4324203495 │ │ Data: 2025-03-05 14:20:15 │ ├─────────────────────────────────────────────┤ │ [Tabela produktów z wymiarami] │ ├─────────────────────────────────────────────┤ │ w tym VAT (23%): 1 020,72 zł │ │ Suma produktów: 5 432,10 zł │ │ Koszt transportu: 150,00 zł │ │ RAZEM BRUTTO: 5 582,10 zł │ ├─────────────────────────────────────────────┤ │ Uwagi: [opcjonalnie] │ ├─────────────────────────────────────────────┤ │ [FOOTER + info o edycji] │ └─────────────────────────────────────────────┘
Kluczowe elementy layoutu:
- Logo + dane firmy – konfigurowane przez admina (panel ustawień).
- Warianty produktów – automatyczne wyświetlanie atrybutów (np. „Kolor: Biały | Wykończenie: Polerowane”).
- Wymiary customowe – specjalne pola dla produktów na wymiar (długość × szerokość).
- Koszt transportu – 3 stany wizualne:
null→ wyświetla „–” (nie określono).0→ wyświetla „Gratis”.- wartość liczbowa → wyświetla kwotę (np. „150,00 zł”).
Rezultaty wdrożenia
| Metryka | Przed wdrożeniem | Po wdrożeniu |
|---|---|---|
| Czas tworzenia oferty (handlowiec) | 20–30 minut (Excel) | 2–3 minuty |
| Spójność formatowania ofert | ~60% (różne szablony Excel) | 100% (jednolity szablon PDF) |
| Możliwość edycji cennika | Nie (wymagało przeróbki Excela) | Tak (real-time editing w adminie) |
| Identyfikacja klienta podczas rozmowy | Niemożliwa (brak numeru ref) | Natychmiastowa (numer KALK-XXX) |
| Oferty generowane miesięcznie | ~50 (ręcznie przez handlowców) | 150–200 (klienci + handlowcy) |
| Konwersja zapytanie → zamówienie | ~25% | ~35% |
| Błędy w ofertach | ~15 błędów/miesiąc | 0 (dane sync z WooCommerce) |
Jakościowe korzyści:
- Eliminacja bariery psychologicznej – klienci mogą „zobaczyć ofertę” przed zamówieniem, co zwiększa zaufanie do zakupu produktów na wymiar.
- Profesjonalizm – branded PDF z logo, danymi firmy, warunkami płatności buduje wiarygodność.
- Skalowalność dla handlowców – możliwość tworzenia 10–15 ofert dziennie bez wypalenia.
- Przetargi i dokumentacja – firmy budowlane mogą dołączać PDF do dokumentacji przetargowej.
- Feedback loop – zapisane kalkulacje pozwalają na analizę: które produkty są najczęściej wyceniane, jakie wymiary dominują, ile ofert konwertuje.
Technologia i narzędzia
| Warstwa | Technologia |
|---|---|
| E-commerce | WordPress + WooCommerce |
| Generator PDF | Dompdf (PHP library) |
| Storage | Custom Post Type (saved_cart) + Post Meta |
| Frontend | PHP hooks + WooCommerce cart actions |
| Backend UI | WordPress Metaboxes + JavaScript (jQuery) |
wp_mail() (SMTP przez WooCommerce settings) | |
| Fonts | DejaVu Sans (Unicode support dla polskich znaków) |
| Numeracja | PHP random_int() + collision checking |
Kluczowe wnioski dla właścicieli sklepów B2B z produktami na wymiar
1. System ofertowania eliminuje główną barierę zakupową w B2B
Klienci nie chcą zamawiać produktów za 5000+ zł bez wcześniejszej konsultacji. Oferowanie możliwości „zapisz jako PDF i porozmawiamy” zwiększa liczbę zapytań o 3×, bo usuwa ryzyko i commitment.
2. Unikalny numer referencyjny to game-changer dla obsługi klienta
Zamiast: „Dzwonię w sprawie parapetów, które oglądałem wczoraj na stronie…”
Teraz: „Dzwonię w sprawie kalkulacji KALK-4324203495” → handlowiec otwiera post w adminie w 5 sekund.
3. Edycja kalkulacji post-factum = elastyczność cenowa bez przebudowy systemu
Handlowcy mogą:
- Zastosować rabat 10% dla klienta VIP (edycja ceny jednostkowej).
- Dodać koszt transportu gabarytowego (150 zł vs. standardowe 50 zł).
- Dopisać uwagi: „Uwaga: realizacja po 15. kwietnia z powodu dostaw surowca”.
Bez konieczności:
- Tworzenia kuponów rabatowych w WooCommerce.
- Dodawania nowych produktów „transport specjalny” do katalogu.
- Ręcznego przerabiania Excela i wysyłania nowej wersji.
4. Custom Post Type to lepsze rozwiązanie niż Orders
Dlaczego NIE zapisywać jako Order (zamówienie WooCommerce)?
- Orders wymagają payment status, shipping status, order notes → overkill dla oferty.
- CPT daje pełną kontrolę nad metadanymi, UI, workflow.
- Separacja ofert od zamówień ułatwia raportowanie (ile ofert → ile zamówień?).
Korzyści CPT:
- Możliwość dodania custom columns w liście (np. „Status oferty: Wysłana / Zatwierdzona / Odrzucona”).
- Integracja z CRM przez REST API (export kalkulacji do Pipedrive, HubSpot).
- Brak zaśmiecania listy zamówień „ofertami, które nie skonwertowały”.
5. Koszt transportu wymaga 3 stanów, nie 2
Błąd w większości systemów:
- Transport = 0 zł → wyświetla „0,00 zł” (wygląda jak błąd).
- Transport nie ustawiony → wyświetla „0,00 zł” (mylące).
Prawidłowe rozwiązanie:
null(puste pole) → „–” (nie określono, bo zależy od lokalizacji).0→ „Gratis” (świadoma decyzja sprzedawcy).- wartość liczbowa → kwota (np. „150,00 zł”).
To pozwala na elastyczne ofertowanie:
- „Koszt transportu: – (wycena po podaniu adresu dostawy)”.
- „Koszt transportu: Gratis (promocja przy zamówieniu powyżej 10 000 zł)”.
6. ROI wdrożenia: 6–12 miesięcy
Przykładowa kalkulacja (sklep 100 zamówień/miesiąc):
- Koszt wdrożenia: 8 000 – 12 000 zł (custom development + testowanie).
- Oszczędność czasu handlowców: 20 godzin/miesiąc × 50 zł/h = 1 000 zł/miesiąc.
- Wzrost konwersji zapytań o 10 p.p. (25% → 35%) = +10 zamówień/miesiąc × średnia wartość 2000 zł = +20 000 zł przychodu/miesiąc.
- Payback period: 6–8 miesięcy.
Dlaczego to rozwiązanie działa?
Dla biznesu:
- Usuwa friction w ścieżce zakupowej – klient może „przetestować” zakup bez płacenia.
- Profesjonalizuje komunikację – branded PDF > chaotyczny email z Excelem.
- Skaluje obsługę – handlowcy obsługują 3× więcej zapytań w tym samym czasie.
Dla technologii:
- Zero vendor lock-in – Dompdf to open-source, dane w native WP database.
- Modułowa architektura – łatwe dodanie integracji (sync kalkulacji do CRM, SMS z linkiem do PDF).
- Performance – generowanie PDF zajmuje 1–2 sekundy.
Dla UX:
- Klient kontroluje proces – może zapisać ofertę, porównać z konkurencją, wrócić za tydzień.
- Handlowiec ma context – widzi historię edycji, może skorygować cenę w czasie rzeczywistym podczas rozmowy telefonicznej.
Następny krok dla Twojego sklepu
Jeśli prowadzisz sklep B2B z:
- Produktami na wymiar (parapety, schody, meble, konstrukcje stalowe, blacha podbitkowa),
- Wysokimi wartościami zamówień (3000+ zł),
- Klientami wymagającymi formalnych ofert (firmy, deweloperzy, przetargi),
Skontaktuj się z nami, żeby omówić wdrożenie systemu ofertowania PDF dostosowanego do Twojego biznesu.
Generator ofert PDF to jeden z przykładów oprogramowania na zamówienie — funkcji, której nie da się kupić jako wtyczki, bo wynika z konkretnego procesu sprzedaży.
Autor: Auranet – automatyzacja e-commerce i dedykowane rozwiązania B2B dla firm wymagających elastyczności bez kompromisów w stabilności.