PS PrestaShop Średnio zaawansowany

DataFirefly Wynajem Produktów

Instalacja, konfiguracja i obsługa wynajmu produktów: kalendarz dostępności, kaucja, taryfa degresywna lub procentowa, wniosek o rezerwację bez płatności, packi i API REST, ze śledzeniem rezerwacji dla PrestaShop 8 i 9.

Zaktualizowano Wersja modułu 1.5.7

Prezentacja

Moduł Wynajem Produktów (dfproductrental) dodaje tryb wynajmu aktywowany produkt po produkcie w Twoim sklepie PrestaShop. Na karcie produktu do wynajęcia klient wybiera zakres dat w kalendarzu, który automatycznie wyszarza już zarezerwowane dni, a cena liczy się za dzień według degresywnej taryfy progowej, w kwotach stałych lub jako procent ceny sprzedaży. Moduł obsługuje kaucję per produkt, ogranicza czas trwania minimalną i maksymalną liczbą dni, przyjmuje wnioski o rezerwację bez płatności, synchronizuje dostępność packów i ich komponentów, udostępnia API REST dla Twojego oprogramowania do zarządzania oraz śledzi każdą rezerwację w dedykowanym zapleczu, od koszyka aż po zwrot artykułu.

Idealny dla sprzętu, mebli, wyposażenia eventowego, instrumentów, pojazdów czy narzędzi: każdego artykułu, który się wynajmuje, zamiast sprzedawać raz na zawsze. Tryb wynajmu aktywuje się tylko na wskazanych przez Ciebie produktach, bez naruszania reszty katalogu.

Zgodność

  • PrestaShop 8.0 do 9.x
  • PHP 7.4 do 8.3
  • Jeden sklep i multisklep
  • 5 języków: FR, EN, ES, DE, IT
  • Motyw Classic i motywy własne
  • Brak zależności: bez Composera, ręczny autoloader PSR-4, kalendarz flatpickr wbudowany lokalnie (locale FR w zestawie)

Instalacja

  1. W zapleczu otwórz Moduły > Menedżer modułów.
  2. Kliknij Zainstaluj moduł, a następnie wybierz plik dfproductrental.zip.
  3. Po instalacji kliknij Konfiguruj.

Przy instalacji moduł tworzy trzy tabele (df_rental_product, df_rental_tier, df_rental_booking), rejestruje hooki, inicjalizuje ustawienia domyślne i dodaje dwie pozycje w menu Katalog: Wynajem – Produkty oraz Wynajem – Rezerwacje. Aktualizację z wersji 1.2.0 lub 1.3.0 pokrywają tolerancyjne skrypty upgrade: po prostu zainstaluj nowy ZIP na wierzch.

Ustawienia ogólne

Strona konfiguracji modułu zbiera opcje globalne stosowane domyślnie do wszystkich produktów do wynajęcia.

  • Bufor czasowy (dni): liczba dni blokowanych po każdym zwrocie, na przygotowanie, czyszczenie lub kontrolę artykułu przed kolejnym wynajmem. Wartość globalna, nadpisywana na poziomie każdego produktu.
  • Horyzont rezerwacji (dni): ogranicza, do jakiej daty w przyszłości klient może rezerwować (domyślnie 365 dni).
  • Wygasanie oczekujących koszyków (minuty): czas, po którym niepotwierdzona rezerwacja zwalnia swoje daty (domyślnie 60 minut).
  • Zintegruj kaucję z pozycją koszyka: gdy aktywna, kaucja jest dodawana do ceny pozycji i zwracana notą kredytową przy zwrocie.
  • Ukryj natywny przycisk „Dodaj do koszyka”: na produktach do wynajęcia ukrywa klasyczny przycisk zakupu na rzecz przycisku rezerwacji.
  • Domyślna kaucja: kwota proponowana domyślnie przy tworzeniu nowego produktu do wynajęcia.
  • Synchronizacja packów: włącza lub wyłącza automatyczną propagację rezerwacji packów na ich wynajmowalne komponenty (domyślnie włączona).
  • Wygasanie wniosków (godziny): po tym czasie wniosek o rezerwację pozostawiony bez odpowiedzi jest anulowany, a jego daty zwalniane (0 = nigdy, wartość domyślna).
  • API: przełącznik aktywacji, token odczytu i zapisu oraz token tylko do odczytu, każdy regenerowalny jednym kliknięciem. Dokumentacja endpointów wyświetla się bezpośrednio pod tym panelem.

Konfiguracja produktu do wynajęcia

Przejdź do Katalog > Wynajem – Produkty, a następnie Dodaj.

  • Produkt: wybierz produkt z katalogu, który ma być wynajmowany.
  • Aktywny: włącza lub wstrzymuje wynajem tego produktu.
  • Tryb taryfikacji: kwoty stałe lub procent ceny sprzedaży produktu (patrz niżej).
  • Bazowa cena za dzień: stawka dzienna stosowana, gdy żaden próg nie odpowiada wybranemu czasowi.
  • Kaucja: kwota kaucji wymaganej dla tego produktu.
  • Minimalna / maksymalna liczba dni: ogranicza zakres dat, jaki klient może wybrać.
  • Dostępne jednostki: liczba posiadanych egzemplarzy. Data jest blokowana dopiero wtedy, gdy wszystkie jednostki są wynajęte jednocześnie.
  • Bufor czasowy: pozostaw wartość globalną lub zdefiniuj bufor właściwy dla tego produktu.
  • Zezwól na wniosek bez płatności: wyświetla przycisk wniosku o rezerwację na karcie produktu, obok klasycznej ścieżki zakupu lub zamiast niej.
  • Wnioski blokują stan: określa, czy oczekujące wnioski tego produktu rezerwują daty do czasu Twojej decyzji.

Progi degresywnej taryfy

Pod formularzem dodaj tyle progów, ile potrzebujesz. Każdy próg definiują: dzień minimalny, dzień maksymalny i cena za dzień.

Moduł stosuje próg, którego przedział zawiera wybrany czas trwania. Próg z dniem maksymalnym równym 0 jest traktowany jako nieograniczony. Jeśli żaden próg nie pasuje, obowiązuje bazowa cena za dzień.

Przykład: 39 € za dzień od 1 do 3 dni, 32 € za dzień od 4 do 7 dni, 26 € za dzień od 8 dni wzwyż (dzień maksymalny 0).

Tryb procentowy

W trybie procentowym bazowa cena za dzień, kaucja i progi nie są już kwotami w walucie, lecz procentami ceny sprzedaży netto produktu. Produkt sprzedawany za 1000 € z kaucją ustawioną na 10 wymaga wtedy 100 € kaucji; stawka dzienna 2 daje 20 € za dzień. Kwoty automatycznie podążają za cenami katalogu: to najszybszy sposób na zastosowanie jednolitej siatki cenowej dla dużej liczby produktów do wynajęcia.

Użycie po stronie sklepu

Kalendarz dostępności

Na karcie produktu wyświetla się selektor zakresu dat. Dni już zarezerwowane są automatycznie wyszarzane i niewybieralne, podobnie jak dni bufora po każdym zwrocie. Klient wybiera datę początkową i końcową w granicach czasu trwania, które ustaliłeś.

Obliczanie ceny

Gdy tylko wybrany zostanie prawidłowy zakres, podsumowanie wyszczególnia liczbę dni, zastosowaną cenę za dzień (według progu), sumę wynajmu, kaucję i sumę ogólną. Klient dokładnie wie, ile płaci, zanim doda do koszyka.

Rezerwacja

Przycisk Zarezerwuj te daty dodaje wynajem do koszyka. Cena wynajmu jest wstrzykiwana przez rabat specyficzny powiązany z koszykiem: oryginalna cena produktu pozostaje nietknięta w katalogu i dla wszystkich pozostałych sprzedaży. Rezerwacja jest tworzona w stanie oczekującym i blokuje wybrane daty.

Jeśli zamówienie nie zostanie zatwierdzone w skonfigurowanym czasie wygasania, koszyk wygasa, a daty są automatycznie zwalniane dla innych klientów. Przy zatwierdzeniu zamówienia rezerwacja przechodzi w stan potwierdzony i wiąże się z klientem oraz zamówieniem.

Wniosek o rezerwację bez płatności

Na produktach z aktywną opcją Zezwól na wniosek bez płatności karta produktu wyświetla przycisk Poproś o rezerwację. Klient wybiera daty i ilość jak przy zwykłej rezerwacji, a następnie podaje dane kontaktowe: zalogowani klienci są identyfikowani automatycznie, odwiedzający wpisują imię i nazwisko, e-mail oraz, opcjonalnie, telefon. Wnioskowi towarzyszy pole dowolnej wiadomości.

Wniosek pojawia się w Katalog > Wynajem – Rezerwacje ze statusem Oczekujący wniosek. Na każdym wierszu dostępne są dwie akcje:

  • Akceptuj: moduł ponownie sprawdza dostępność okresu (łącznie z konkurencyjnymi wnioskami), po czym przełącza rezerwację na potwierdzoną. Klient otrzymuje e-mail o akceptacji.
  • Odrzuć: rezerwacja przechodzi w stan odrzucony, jej daty są zwalniane, a klient otrzymuje e-mail o odrzuceniu.

Ścieżce towarzyszą trzy automatyczne e-maile: potwierdzenie odbioru dla klienta w momencie wysłania wniosku, powiadomienie sprzedawcy z danymi kontaktowymi i wiadomością klienta, a następnie e-mail z decyzją. Szablony istnieją w pięciu językach modułu i można je dostosować jak każdy e-mail PrestaShop.

Blokowanie stanu przez wnioski reguluje się precyzyjnie: domyślna wartość per produkt (Wnioski blokują stan) i indywidualny przełącznik na każdym wniosku na liście rezerwacji. Wniosek, który nie blokuje stanu, pozostawia daty do rezerwacji przez innych klientów, dopóki nie zostanie zaakceptowany. Konfigurowalny czas wygasania (w godzinach) może automatycznie anulować wnioski bez odpowiedzi i zwolnić ich daty.

Packi produktów

Moduł obsługuje natywne packi PrestaShop. Gdy pack zawiera komponenty skonfigurowane jako wynajmowalne, rezerwacja packa automatycznie tworzy powiązane rezerwacje na każdym z jego komponentów, z uwzględnieniem ilości packa. W praktyce:

  • Rezerwacja packa blokuje dostępność każdego z jego wynajmowalnych komponentów w tym samym okresie.
  • Rezerwacja samego komponentu czyni pack niedostępnym w tych datach, gdy tylko nie zostaje wystarczająco jednostek.
  • Każda zmiana rezerwacji packa (daty, ilość, status, anulowanie) jest automatycznie propagowana na rezerwacje jego komponentów.

Rezerwacje komponentów są ukryte po stronie klienta (klient widzi tylko swój pack), ale widoczne w zapleczu z odznaką Pack #N wskazującą rezerwację nadrzędną. Nie można ich edytować bezpośrednio: to rezerwacja packa jest wiążąca. Ustawienie globalne pozwala wyłączyć cały mechanizm, jeśli wolisz zarządzać packami jak niezależnymi produktami.

API REST

API udostępnia wynajem w JSON dla Twojego oprogramowania do zarządzania flotą, harmonogramem lub fakturowaniem. Włącz je w konfiguracji modułu: generowane są dwa tokeny, regenerowalne jednym kliknięciem: token odczytu i zapisu oraz token tylko do odczytu, akceptowany wyłącznie na endpointach GET. Każde żądanie musi przedstawić jeden z tych tokenów w nagłówku X-Api-Key lub Authorization: Bearer.

Endpointy

  • GET ping: weryfikacja uwierzytelniania i wersji.
  • GET products: lista produktów do wynajęcia z ich konfiguracją (cena, kaucja, progi, jednostki, tryb taryfikacji).
  • GET availability: dostępność produktu dzień po dniu między dwiema datami, łącznie z pozostałymi jednostkami.
  • GET bookings: lista rezerwacji, filtrowana po status, id_product, from, to, updated_since i external_reference, stronicowana przez limit i offset.
  • POST bookings: tworzenie rezerwacji w statusie requested lub confirmed, z kontrolą dostępności (omijalna przez force). Pole external_reference (maks. 64 znaki) czyni tworzenie idempotentnym: jeśli rezerwacja nosi już tę referencję, jest aktualizowana zamiast duplikowana.
  • POST bookings&id=N: modyfikacja rezerwacji (daty, ilość, status), propagowana na komponenty packa.
  • DELETE bookings&id=N: anulowanie rezerwacji.

Filtr updated_since umożliwia synchronizację przyrostową: Twoje oprogramowanie zapamiętuje datę ostatniego przebiegu i pobiera tylko rezerwacje zmienione od tego czasu. API nie wysyła wychodzących webhooków: synchronizacja odbywa się przez okresowe odpytywanie. Dokładne adresy URL i przykłady żądań są wyświetlane na stronie konfiguracji modułu.

Śledzenie rezerwacji

W Katalog > Wynajem – Rezerwacje znajdziesz wszystkie rezerwacje z produktem, klientem, zamówieniem, datami i statusem, oznaczonym kolorową odznaką.

  • Oczekujący wniosek: wniosek bez płatności w oczekiwaniu na Twoją decyzję.
  • Oczekująca: dodana do koszyka, w oczekiwaniu na zatwierdzenie zamówienia.
  • Potwierdzona: zamówienie zatwierdzone lub wniosek zaakceptowany, daty zarezerwowane.
  • W trakcie: trwający okres wynajmu.
  • Zwrócona: artykuł oddany.
  • Odrzucony: wniosek odrzucony, daty zwolnione.
  • Anulowana: rezerwacja anulowana, daty zwolnione.

Szczegóły każdego wynajmu pojawiają się też w koszyku, na stronie potwierdzenia zamówienia i w karcie zamówienia w zapleczu. Po stronie klienta strona Moje wynajmy w sekcji Moje konto wymienia wszystkie jego wynajmy z okresem, czasem trwania, kaucją i statusem.

Zwrot kaucji odbywa się przez notę kredytową przy zwrocie artykułu, z poziomu karty zamówienia PrestaShop. To najprostsza i najbardziej przejrzysta metoda dla księgowości większości wypożyczalni.

Opcje wersji 1.5

Wersja 1.5 rozszerza wybór dat, wycenę i zarządzanie kaucją. Wszystkie opcje ustawia się w konfiguracji modułu.

Wybór dat

Dwa tryby wyświetlania: jedno pole okresu z kalendarzem dwumiesięcznym lub dwa osobne pola początku i końca. Godziny odbioru i zwrotu można włączyć; są zapisywane na rezerwacji i udostępniane w API. Pozycja bloku wynajmu na karcie produktu jest konfigurowalna spośród siedmiu hooków, z hookiem zapasowym dla motywów bez displayProductAdditionalInfo.

Globalne daty koszyka

Włączone domyślnie, stosują jeden okres do wszystkich pozycji zamówienia. Karty produktów są wstępnie wypełnione okresem koszyka, a koszyk oferuje edytor do zmiany dat całego zamówienia, z ponowną weryfikacją dostępności i przeliczeniem cen każdej pozycji. Opcja przenosi wybór dat całkowicie do koszyka: karta produktu pyta tylko o ilość, a pierwszy dostępny okres jest proponowany automatycznie przy pierwszym dodaniu.

Cały katalog na wynajem

Dla sklepów w 100 % wynajmowych: każdy aktywny produkt staje się wynajmowalny bez indywidualnej konfiguracji. Kwota bazowa pochodzi z ceny sprzedaży, stan wynajmu podąża za stanem PrestaShop, a zapytania rezerwacyjne można dopuścić globalnie.

Współczynniki czasu trwania

W trybie współczynnika cena jest liczona jako kwota bazowa pomnożona przez współczynnik. Siatka zakresów dni jest konfigurowalna (domyślnie 1 dzień: 1, 2 dni: 1,5, 3 dni: 2, od 4 do 7 dni: 3, od 8 do 14 dni: 5, od 15 do 21 dni: 7, od 22 do 30 dni: 9). Dwa priorytetowe wyjątki weekendowe są regulowane: sobota do poniedziałku (domyślnie współczynnik 1) i piątek do poniedziałku (domyślnie 1,5). Powyżej maksymalnego czasu trwania (domyślnie 30 dni) cena przechodzi na zapytanie: dodanie do koszyka jest blokowane, a zapytanie rezerwacyjne bez płatności przejmuje obsługę.

Kaucja

Trzy tryby: per produkt (zachowanie historyczne), globalna automatyczna lub wyłączona. W trybie globalnym liczona jest jedna kaucja dla całego zamówienia: kwota bazowa brutto pomnożona przez mnożnik (domyślnie 2), z minimum (domyślnie 500) i zaokrągleniem w górę do progu (domyślnie 100). Jest zapisywana na pierwszej rezerwacji zamówienia i pozostaje edytowalna w panelu. Pobieranie jest niezależne: kaucja pobierana przy płatności lub tylko wyświetlana do preautoryzacji karty. Kolumny kaucji znikają z podsumowań i faktury PDF, gdy żadna pozycja jej nie zawiera.

FAQ i rozwiązywanie problemów

Czy cena wynajmu zmienia cenę mojego produktu?

Nie. Cena jest wstrzykiwana przez rabat specyficzny powiązany wyłącznie z bieżącym koszykiem. Oryginalna cena produktu pozostaje niezmieniona w katalogu i dla innych klientów.

Jak działa degresywna taryfa?

Definiujesz progi (dzień minimalny, dzień maksymalny, cena za dzień). Moduł wybiera próg, którego przedział zawiera żądany czas trwania. Dzień maksymalny równy 0 oznacza „nieograniczony”. Bez pasującego progu obowiązuje bazowa cena za dzień.

Czy można wynająć kilka jednostek tego samego produktu?

Tak. Podaj liczbę dostępnych jednostek. Data jest wyszarzana dopiero wtedy, gdy wszystkie jednostki są już wynajęte w danym okresie.

Czy kaucja jest zwracana automatycznie?

Nie. Jest dodawana do pozycji koszyka w momencie wynajmu i zwracana notą kredytową przy zwrocie, z poziomu karty zamówienia w zapleczu.

Czy zaakceptowany wniosek tworzy zamówienie?

Nie. Akceptacja potwierdza rezerwację i blokuje daty, bez tworzenia zamówienia PrestaShop. Płatność pobierasz wybranym kanałem (na miejscu, przelewem, linkiem do płatności) i śledzisz wynajem z ekranu rezerwacji.

Kalendarz nie wyświetla się na karcie produktu

Sprawdź, czy produkt jest poprawnie skonfigurowany i aktywny w Wynajem – Produkty. Następnie wyczyść pamięć podręczną PrestaShop (Zaawansowane > Wydajność), a na czas testów wyłącz łączenie/kompresję plików (CCC).

Natywny przycisk „Dodaj do koszyka” pozostaje widoczny

Ukrywanie opiera się na selektorach motywu. Aktywuj opcję Ukryj natywny przycisk „Dodaj do koszyka” w ustawieniach; zależnie od motywu może być potrzebna drobna korekta selektorów.

API zwraca 401

Sprawdź, czy API jest włączone w konfiguracji i czy wysyłany token odpowiada wyświetlanemu tokenowi. Po regeneracji tokenu pamiętaj o aktualizacji swoich integracji.

Czy moduł jest zgodny z PrestaShop 9?

Tak. Moduł jest zgodny z PrestaShop 8 i 9, w multisklepie i wielojęzycznie (FR, EN, ES, DE, IT). Formatowanie cen używa bieżącego Locale, zgodnie z praktykami PrestaShop 9.

Czy ta strona była pomocna?

Nadal utknąłeś? Napisz do wsparcia