Zapytania ofertowe - wyceny B2B i ukrywanie cen. Moduł Quote Requests pozwala klientom poprosić o wycenę zamiast kupować od razu. Opcjonalnie można ukrywać ceny według grupy, kategorii lub produktu, obsługiwać przychodzące zapytania w menedżerze wycen w panelu administracyjnym (z indywidualnymi cenami, terminem ważności, plikiem PDF i e-mailem) oraz pozwolić klientowi zaakceptować wycenę, aby zamienić ją w zamówienie.
Moduł Quote Requests pozwala klientom poprosić o wycenę zamiast kupować od razu. Opcjonalnie można ukrywać ceny według grupy, kategorii lub produktu, obsługiwać przychodzące zapytania w menedżerze wycen w panelu administracyjnym (z indywidualnymi cenami, terminem ważności, plikiem PDF i e-mailem) oraz pozwolić klientowi zaakceptować wycenę, aby zamienić ją w zamówienie.
1. Instalacja
- W panelu administracyjnym (back office) należy przejść do Modules → Module Manager → Upload a module i wybrać plik ZIP modułu.
- Po zainstalowaniu należy kliknąć Configure, aby otworzyć kreator konfiguracji.
.local, .test, localhost) są zawsze dozwolone. Gdy dostępna jest nowa wersja, informacja o niej wyświetla się bezpośrednio w module.Jeśli zamiast potwierdzenia pojawi się komunikat „Upload failed”, PrestaShop mógł wyłączyć moduł bez powiadomienia: ustawienia i dane pozostają na miejscu. Jak zaktualizować moduł i co zrobić, gdy pojawia się komunikat „Upload failed”.
2. Konfiguracja krok po kroku
Moduł ma trzy karty: Quotes (menedżer, do którego trafia każde zapytanie, z uzgodnionymi cenami dla poszczególnych pozycji, terminem ważności, plikiem PDF i e-mailem), New quote (utworzenie wyceny dla klienta według jego identyfikatora) oraz Settings. Wszystko, co opisano poniżej, znajduje się na karcie Settings.
Settings
Karta Settings określa, gdzie wyświetla się przycisk wyceny, czy ceny są ukrywane, kto może składać zapytania ofertowe i jak zachowują się wystawione wyceny. Najlepiej zacząć od grup Quote button i scope.
- Enable quote requests: główny przełącznik całej funkcji w sklepie.
- Show the button on the product page: dodaje przycisk wyceny na kartach produktów.
- Show "request a quote from this cart" on the cart page: pozwala klientom zamienić cały koszyk w zapytanie ofertowe.
- Button label per language: ustawia brzmienie przycisku dla każdego języka; pozostawienie pustego pola oznacza przetłumaczony tekst domyślny („Request a quote”).
- Apply to (scope): do wyboru All products, Selected categories, Selected customer groups lub Selected products. To ustawienie określa, gdzie wyświetla się przycisk i gdzie obowiązuje opcjonalne ukrywanie cen.
- Category / Customer group / Product IDs: identyfikatory oddzielone przecinkami lub spacjami, używane przez odpowiedni zakres.

Dolna część formularza obejmuje ukrywanie cen, kontrolę dostępu, zachowanie wystawionych wycen i obsługę danych.
- Hide price and add-to-cart in scope: po włączeniu produkty objęte zakresem pokazują tylko przycisk wyceny (bez ceny i bez przycisku dodania do koszyka), co sprawdza się w katalogach B2B.
- Allowed customer group IDs: tylko te grupy mogą składać zapytania ofertowe; puste pole oznacza zgodę dla wszystkich, także dla gości.
- Default validity (days): wstępnie wypełnia termin ważności przy wystawianiu wyceny.
- New-request notification email: adres, na który wysyłane są powiadomienia o nowych zapytaniach; puste pole oznacza adres e-mail sklepu.
- Attach a PDF to the quote email: dołącza plik PDF z wyceną do wysyłanego e-maila.
- Drop data on uninstall: po włączeniu odinstalowanie modułu usuwa wszystkie wyceny. Aby zachować historię, opcję należy pozostawić wyłączoną.

3. Sprawdzenie działania
- Należy otworzyć w sklepie produkt objęty wybranym zakresem: powinien pojawić się przycisk wyceny (a jeśli ukrywanie cen jest włączone, cena i przycisk dodania do koszyka powinny być ukryte).
- Należy złożyć w sklepie zapytanie ofertowe: powinno trafić na kartę Quotes i wywołać powiadomienie e-mail.
- Należy otworzyć wycenę, ustawić uzgodnione ceny i termin ważności, a następnie użyć Send to customer: trzeba sprawdzić, czy e-mail (oraz plik PDF, jeśli ta opcja jest włączona) dotarł.
- Zalogowany klient akceptuje wycenę (albo w panelu administracyjnym używa się Build cart with agreed prices); należy potwierdzić, że zamówienie zostało utworzone po uzgodnionych cenach.
4. FAQ
Czy mogę ukrywać ceny tylko dla niektórych klientów?
Tak. Należy ustawić zakres na Selected customer groups (lub kategorie/produkty) i włączyć Hide price and add-to-cart in scope.
Czy goście mogą składać zapytania ofertowe?
Tak, jeśli pole Allowed customer group IDs pozostanie puste. Warto pamiętać, że wycenę online mogą zaakceptować tylko zarejestrowani klienci.
Czy muszę edytować motyw?
Nie. Quote Requests działa przez standardowe hooki i jest zgodny z każdym motywem.
Jak wycena zamienia się w zamówienie?
Klient akceptuje wycenę albo w panelu administracyjnym używa się Build cart with agreed prices, aby utworzyć koszyk po wynegocjowanych cenach.
5. Co naprawdę ukrywa funkcja „ukryte” i pułapka SEO w danych strukturalnych
Wizualne ukrywanie cen (Hide price and add-to-cart in scope powyżej) działa dzięki regule CSS dla bloku z ceną, uruchamianej przez klasę dodawaną po stronie serwera, gdy spełniony jest warunek ukrycia. Cena pozostaje w kodzie źródłowym strony, tylko nie jest wyświetlana na ekranie: każdy, kto zajrzy do źródła strony lub uruchomi prosty skrypt do scrapingu, nadal może ją odczytać. Aby przypadkowy konkurent nie porównał cen wzrokowo, w zupełności to wystarcza; aby powstrzymać systematyczne, zautomatyzowane pobieranie całego cennika, samo wizualne ukrycie nie wystarczy, a prawdziwa ochrona pochodzi wtedy skądinąd (uwierzytelnianie, ograniczanie liczby zapytań), a nie z samej klasy CSS.
Karta produktu zwykle udostępnia cenę w danych strukturalnych (schema.org, blok offers), aby wyszukiwarki mogły pokazywać ją w wynikach rozszerzonych. Wizualne ukrycie ceny bez dostosowania tych danych strukturalnych sprawia, że cena, potencjalnie nieaktualna już w chwili zmiany, jest widoczna bezpośrednio w wynikach wyszukiwania, poza jakąkolwiek stroną, którą odwiedzający faktycznie otwiera. To jeden z najczęstszych niedopatrzeń przy szybko wdrożonym maskowaniu cen: przełącznik wizualny jest gotowy, ale dane strukturalne zasilające Google nigdy nie zostały o tym poinformowane.
Gdzie stosowana jest wynegocjowana cena
Gdy klient B2B ma uzgodnioną cenę z wyceny, jest ona stosowana po stronie serwera przez regułę koszykową powiązaną z zaakceptowaną wyceną (patrz Build cart with agreed prices powyżej), a nigdy na podstawie wartości przesłanej z formularza w przeglądarce: wszystko, co jest obliczane lub przesyłane po stronie klienta, może zostać zmienione przez wystarczająco zdeterminowanego klienta jeszcze przed wysłaniem żądania.
