Produktvermietung — Vollständige Anleitung
Produktvermietung installieren, konfigurieren und betreiben: Kalender, Planung, Einheiten mit Seriennummern, Check-in/Check-out, Saisons, Festpakete, Kaution als eigene Position oder Stripe-Hinterlegung, zahlungsfreie Anfragen, Packs, REST-API, Webhooks und Erinnerungsmails, für PrestaShop 8 und 9.
Überblick
Das Modul Produktvermietung (dfproductrental) fügt Ihrem PrestaShop-Shop einen pro Produkt aktivierbaren Mietmodus hinzu und deckt anschließend den gesamten Parkbetrieb ab. Auf der Seite eines mietbaren Produkts wählt der Kunde seine Daten in einem Kalender, der gebuchte Tage ausgraut, als Bereich, in zwei Feldern mit Uhrzeiten oder als Startdatum plus Wochenanzahl. Der Preis berechnet sich pro Tag über degressive Staffeln, einen Prozentsatz des Verkaufspreises oder Dauerkoeffizienten, moduliert durch Saisonpreise und Festpakete. Die Kaution liegt auf einer eigenen Warenkorbposition, per Gutschrift erstattbar, oder wird zur Stripe-Kartenhinterlegung. Im Backoffice: monatliche Planung, Einheiten mit Seriennummern, Check-in und Check-out mit Zustandsprotokollen und Einbehalt, Statistiken, zahlungsfreie Anfragen, synchronisierte Packs, REST-API, ausgehende Webhooks und Cron-Erinnerungsmails.
Ideal für Geräte, Möbel, Eventausstattung, Instrumente, Fahrzeuge oder Werkzeug: alles, was vermietet statt ein für alle Mal verkauft wird. Der Mietmodus aktiviert sich nur auf den von Ihnen bestimmten Produkten.
Kompatibilität
- PrestaShop 8.0 bis 9.x
- PHP 7.4 bis 8.3
- Einzelshop und Multistore
- 5 Sprachen: FR, EN, ES, DE, IT (Kalender auch in NL, PT und PL)
- Classic-Theme und individuelle Themes
- Keine Abhängigkeiten: kein Composer, manueller PSR-4-Autoloader, flatpickr-Kalender lokal eingebettet
Installation
- Öffnen Sie im Backoffice Module > Modul-Manager.
- Klicken Sie auf Modul hochladen und wählen Sie die Datei
dfproductrental.zip. - Klicken Sie nach der Installation auf Konfigurieren.
Bei der Installation legt das Modul seine fünf Tabellen an (df_rental_product, df_rental_tier, df_rental_booking, df_rental_unit, df_rental_unit_assign), registriert seine Hooks, initialisiert seine Einstellungen und fügt fünf Einträge unter Katalog > Vermietung hinzu: Mietprodukte, Buchungen, Planung, Einheiten und Statistiken. Das Upgrade von jeder früheren Version übernehmen tolerante Skripte: Laden Sie einfach das neue ZIP darüber und leeren Sie den PrestaShop-Cache.
Allgemeine Einstellungen
- Pufferzeit (Tage): nach jeder Rückgabe gesperrte Tage zur Vorbereitung des Artikels. Globaler Wert, pro Produkt überschreibbar.
- Buchungshorizont (Tage): bis zu welchem Datum in der Zukunft gebucht werden kann (Standard 365).
- Ablauf wartender Warenkörbe (Minuten): danach gibt eine unbestätigte Buchung ihre Daten frei (Standard 60).
- Kaution berechnen: aktiviert die Kautionsposition des Warenkorbs; deaktiviert wird die Kaution angezeigt, ohne eingezogen zu werden (Hinterlegungsmodus).
- Rückgabetag berechnen: ja, Kalenderzählung, der Rückgabetag ist ein Miettag (14. bis 20. = 7 Tage); nein, Rotationsmodell, die Rückgabe erfolgt am Tag nach dem berechneten Zeitraum (14. bis 21. = 7 Tage, eine Woche läuft von Montag bis Montag), dieser Tag bleibt für eine weitere Ausgabe gesperrt.
- Wöchentliche Schließtage: Tage ohne mögliche Ausgabe oder Rückgabe (0 = Sonntag bis 6 = Samstag, kommagetrennt). Eine Miete kann einen geschlossenen Tag überspannen.
- Schließdaten: ein Datum pro Zeile, JJJJ-MM-TT (einmalig) oder MM-TT (jährlich wiederkehrend, z. B. 12-25).
- Saisonpreise: eine Saison pro Zeile,
Beginn|Ende|Multiplikator|Bezeichnung(siehe unten). - Automatische Erinnerungsmails und Tage im Voraus: Erinnerungen vor Beginn und Rückgabe, Mahnung bei Verspätung, ausgelöst über die unter dem Formular angezeigte Cron-URL.
- Ausgehende Webhooks und Webhook-URL: benachrichtigen Ihre Software bei jedem Buchungsereignis (siehe unten).
- Kaution per Stripe-Hinterlegung, veröffentlichbarer Schlüssel, geheimer Schlüssel, Hinterlegung vor Ausgabe verpflichtend und Einwilligungstext: siehe Abschnitt Kaution.
- Datumsauswahl, warenkorbweite Daten, Datumsauswahl nur im Warenkorb, Abhol- und Rückgabezeiten, Blockposition, Ausblenden des nativen Kaufbuttons.
- Kautionsmodus (pro Produkt, automatisch gesamt, deaktiviert), gesamter Katalog als Vermietung, Koeffizientenraster, Pack-Synchronisation, Anfragenablauf, API.
Ein mietbares Produkt konfigurieren
Gehen Sie zu Katalog > Vermietung > Mietprodukte, dann Hinzufügen: Produkt, Aktivierung, Preismodus (Festbeträge, Prozent des Verkaufspreises oder Koeffizient), Tagesbasispreis, Kaution, Mindest- und Höchstdauer, verfügbare Einheiten, Pufferzeit, zahlungsfreie Anfrage und Bestandssperre durch Anfragen.
Degressive Staffeln
Jede Staffel besteht aus Mindesttag, Höchsttag und Tagespreis. Das Modul wendet die Staffel an, deren Bereich die gewählte Dauer enthält; ein Höchsttag von 0 bedeutet unbegrenzt; ohne passende Staffel gilt der Basispreis. Beispiel: 39/Tag für 1 bis 3 Tage, 32/Tag für 4 bis 7 Tage, 26/Tag ab 8 Tagen.
Festpakete
Unter den Staffeln akzeptiert der Bereich Festpakete ein Paket pro Zeile im Format Tage|Preis netto|Bezeichnung, zum Beispiel 7|199|Wochenpaket. Stimmt die gewählte Dauer exakt überein, ersetzt dieser runde Preis die gesamte Berechnung: keine Staffeln, keine Koeffizienten, keine Saisons. Kombiniert mit dem Wochenmodus macht er das Angebot perfekt lesbar.
Prozentmodus
Tagesbasispreis, Kaution und Staffeln werden als Prozentsatz des Netto-Verkaufspreises des Produkts ausgedrückt. Ein für 1000 verkauftes Produkt mit Kaution 10 verlangt 100 Kaution. Die Beträge folgen automatisch Ihren Katalogpreisen.
Nutzung im Shop
Datumswahl
Drei global eingestellte Auswahlmodi: ein einzelner Bereich auf einem Zwei-Monats-Kalender, zwei Start- und Endfelder (mit optionalen Abhol- und Rückgabezeiten) oder Startdatum plus Wochenanzahl, wobei Rückgabedatum und Gesamtpreis automatisch berechnet werden. Gebuchte Tage sind ausgegraut; Schließtage können weder Ausgabe noch Rückgabe sein. Warenkorbweite Daten wenden einen einzigen Zeitraum auf die ganze Bestellung an, änderbar aus dem Warenkorb.
Preis und Buchung
Eine Zusammenfassung zeigt Tageszahl, angewandten Tagespreis, Mietsumme, Kaution und Gesamtsumme. Der Buchungsbutton legt die Miete in den Warenkorb: Der Mietpreis wird über einen warenkorbgebundenen Spezialpreis injiziert, der Katalogpreis bleibt unberührt, und die etwaige Kaution erscheint auf ihrer eigenen Position. Eine wartende Buchung sperrt die Daten; unbestätigte Warenkörbe laufen ab; die Bestellbestätigung bestätigt die Buchung.
Kaution: eigene Position oder Stripe-Hinterlegung
Berechnete Kaution
Bei aktivem Kaution berechnen erscheint die Kaution als eigene Warenkorbposition: Ein technisches Produkt Mietkaution, steuerfrei, im Katalog unsichtbar, trägt die Gesamtkaution der Bestellung. Die Preise der gemieteten Produkte enthalten nur die Miete. Auf der Rechnung ist die Kaution eine eigene Position; ihre Erstattung bei Rückgabe des Materials ist eine Gutschrift auf diese Position aus der Bestellansicht. Entfernt der Kunde die Kautionsposition aus dem Warenkorb, wird sie automatisch neu angelegt. Der Betrag stammt aus dem gewählten Modus: Kaution pro Produkt oder automatische Gesamtkaution (multiplizierter Basisbetrag inkl. MwSt., mit Minimum und Rundung, im Backoffice änderbar).
Stripe-Kartenhinterlegung
Mit deaktiviertem Kaution berechnen und aktivem Kaution per Stripe-Hinterlegung (Schlüssel pk_ und sk_ eingetragen) wird nichts eingezogen. Nach der Bestellung wird der Kunde von der Bestätigungsseite aus eingeladen, seine Karte zu hinterlegen, auf einer gesicherten, von Stripe Elements betriebenen Seite: Keine Kartendaten laufen über den Shop, kein Betrag wird abgebucht oder gesperrt.
Bei einem bei der Rückgabe festgestellten Schaden: Öffnen Sie die Buchung, tragen Sie die einbehaltene Kaution und den Grund ein, speichern Sie und klicken Sie auf Einbehalt über Stripe abbuchen. Der Betrag wird außerhalb der Sitzung in der Bestellwährung abgebucht, die Zahlungskennung wird an der Buchung gespeichert. Eine Bankablehnung (3-D Secure) wird unverändert angezeigt; der Einbehalt muss dann anderweitig eingezogen werden.
Hinterlegung vor Ausgabe verpflichtend
Eine eigene Option knüpft die Übergabe des Materials an die hinterlegte Karte: Eine bezahlte Buchung ohne Hinterlegung wird in der Buchungsliste als Ausstehend (Ausgabe blockiert) markiert (eigenes Abzeichen und Filter), und der Button Ausgabe verweigert, bis die Karte hinterlegt ist. Keine bezahlte Bestellung wird automatisch storniert: Sie behalten die Kontrolle. Der Kunde wird begleitet: Button Meine Karte hinterlegen auf seiner Seite Meine Mieten, tägliche E-Mail-Erinnerung mit dem gesicherten Link (über die Cron-URL, auch wenn die übrigen Erinnerungen deaktiviert sind), und ein aus der Buchung kopierbarer Link für den manuellen Versand. Ein mehrsprachiges Feld der Konfiguration erlaubt schließlich, den Einwilligungstext der Hinterlegungsseite durch Ihre eigene, an Ihre Mietbedingungen angepasste Formulierung zu ersetzen; der Standardtext nennt bereits die Ermächtigung zur Abbuchung bis zur Höhe der Kaution bei Schaden.
Für einen mit dem Kunden vereinbarten Fall (B2B, Verein, alternative Sicherheit) nimmt der Schalter Ausgabe ohne Hinterlegung erlauben auf der Buchung nur diese eine Miete aus: Die Ausgabe ist freigegeben, die Erinnerungen stoppen, der Button verschwindet von Meine Mieten und die Liste zeigt das Abzeichen Ausnahme. Alle anderen Buchungen bleiben geschützt.
Warum keine klassische Vorautorisierung? Die Kartennetzwerke lassen Vorautorisierungen nach 7 Tagen verfallen: Eine längere Miete lässt sich damit nicht abdecken. Die Kartenhinterlegung verfällt nicht; es ist das Modell der Vermietplattformen. Das genutzte Stripe-Konto ist unabhängig vom Zahlungsmodul des Shops.
Einheiten und Seriennummern
Legen Sie unter Katalog > Vermietung > Einheiten pro physischem Exemplar einen Eintrag an: Produkt, Referenz oder Seriennummer, Zustand (verfügbar oder in Wartung), Aktivierung, interne Notiz. Sobald ein Produkt mindestens eine Einheit hat, wird seine Mietkapazität zur Zahl der aktiven und verfügbaren Einheiten: Die konfigurierte Menge wird nicht mehr genutzt, und eine Einheit in Wartung verlässt den Bestand, ohne die Konfiguration zu berühren.
An jeder Buchung bietet das Feld Zugewiesene Einheiten die im Zeitraum freien Einheiten (inklusive Pufferzeit) plus die bereits zugewiesenen an: Wählen Sie die dem Kunden übergebenen Seriennummern. Eine von einer anderen Buchung belegte Einheit wird mit einer Meldung abgelehnt. Die Referenzen erscheinen in Buchungsliste, Bestellansicht und Webhook.
Check-out und Check-in
- Ausgabe, an einer bestätigten Buchung: Das Material wird dem Kunden übergeben, die Miete wird laufend und die Ausgabezeit gespeichert.
- Rückgabe, an einer laufenden Miete: Das Material wird zurückgegeben, die Miete wird zurückgegeben und die Zeit gespeichert. Die Daten werden nach der etwaigen Pufferzeit frei.
Die Buchung nimmt das Zustandsprotokoll bei Ausgabe und bei Rückgabe auf, dazu den einbehaltenen Kautionsbetrag und den Grund bei Schaden, bereit für die Stripe-Abbuchung oder eine Teilgutschrift.
Planung
Katalog > Vermietung > Planung zeigt die Monatsauslastung, eine Zeile pro Produkt und eine Spalte pro Tag: weiße Zelle frei, gelbe teilweise belegt mit Menge, rote voll. Beim Überfahren einer Zelle werden die Buchungen gelistet (Nummer, Status, Menge, Kunde, Pack-Marker). Schließtage und der aktuelle Tag sind markiert, die Navigation läuft von Monat zu Monat, und die Pufferzeit jedes Produkts zählt zur Auslastung.
Statistiken
Katalog > Vermietung > Statistiken analysiert den Zeitraum Ihrer Wahl (Standard: letzte 12 Monate): pro Produkt die Zahl der Buchungen, vermietete Tage mal Menge und auf den Zeitraum begrenzt, Kapazität, Auslastung, Mietumsatz netto dem Mietbeginn zugeordnet, einbehaltene Kautionen, mit Summenzeile. Berücksichtigte Status: bestätigt, laufend, zurückgegeben.
Saisonpreise
Das Konfigurationsraster akzeptiert eine Saison pro Zeile: Beginn|Ende|Multiplikator|Bezeichnung. Zwei Grenzformate: vollständige Daten 2026-06-15|2026-09-15|1.3|Hochsaison (einmalig) oder Monat-Tag 12-20|01-05|1.5|Feiertage (jährlich wiederkehrend, Jahreswechsel berücksichtigt). Jeder Miettag wird zum Tagessatz mal Saisonkoeffizient berechnet; außerhalb jeder Saison ist der Koeffizient 1; bei Überlappung gewinnt die letzte Zeile. Festpakete ignorieren Saisons: Das ist der Sinn eines runden Preises.
Lebenszyklus-E-Mails (Cron)
Drei automatische E-Mails begleiten jede bezahlte Miete: Erinnerung vor Beginn, Erinnerung vor der Rückgabe (konfigurierbarer Vorlauf, 1 = am Vortag) und Mahnung bei Verspätung, wenn das Material nicht zum geplanten Datum zurück ist. Aktivieren Sie den Schalter und rufen Sie die token-gesicherte Cron-URL unter dem Konfigurationsformular einmal täglich auf. Jede E-Mail wird nur einmal pro Buchung versandt, in der Sprache der Bestellung des Kunden, in fünf Sprachen. Der Cron-Aufruf bereinigt auch abgelaufene Anfragen.
Buchungsanfrage ohne Zahlung
Auf Produkten mit aktiver Option zeigt die Produktseite einen Anfrage-Button: Der Kunde wählt seine Daten, hinterlässt Kontaktdaten (bei Anmeldung automatisch erkannt) und eine Nachricht, ohne zur Kasse zu gehen. Die Anfrage erscheint in den Buchungen mit Status Anfrage wartend: Annehmen prüft die Verfügbarkeit erneut, bestätigt und benachrichtigt den Kunden; Ablehnen gibt die Daten frei und benachrichtigt den Kunden. Die Bestandssperre wird pro Produkt und pro Anfrage eingestellt, ein Ablauf kann unbeantwortete Anfragen stornieren.
Produktpacks
Native PrestaShop-Packs sind synchronisiert: Die Buchung eines Packs sperrt die Verfügbarkeit jeder mietbaren Komponente im selben Zeitraum (Packmengen inklusive), die Buchung einer einzelnen Komponente macht das Pack nicht verfügbar, und jede Änderung an der Pack-Buchung wird an die Komponenten weitergegeben. Komponentenbuchungen sind für den Kunden unsichtbar und im Backoffice mit einem Pack-Abzeichen sichtbar. Eine globale Einstellung deaktiviert den Mechanismus.
REST-API
Aktivieren Sie die API in der Konfiguration: zwei erneuerbare Token (Lese-Schreib und Nur-Lese), übergeben via X-Api-Key oder Authorization: Bearer.
GET ping: Authentifizierung und Version.GET products: mietbare Produkte und ihre Konfiguration.GET availability: tagesgenaue Verfügbarkeit, verbleibende Einheiten inklusive.GET bookings: Buchungen, filterbar nachstatus,id_product,from,to,updated_since,external_reference.POST bookings: Erstellung, idempotent überexternal_reference.POST bookings&id=N: Änderung;DELETE bookings&id=N: Stornierung.
Ausgehende Webhooks
Aktivieren Sie die Webhooks und tragen Sie die URL Ihrer Software ein: Bei jedem Ereignis erhält sie einen JSON-POST mit der vollständigen Buchung (Daten, Menge, Preis, Status, Kunde, zugewiesene Einheiten, Check-in- und Check-out-Zeitstempel, Einbehalt). Zwei Header begleiten jeden Aufruf: X-DfRental-Event (Ereignisname) und X-DfRental-Signature (HMAC-SHA256 des Rumpfs mit dem im Panel angezeigten, erneuerbaren Geheimnis). Ereignisse: booking.requested, booking.confirmed, booking.declined, booking.cancelled, booking.active, booking.returned, plus booking.created und booking.updated für die API. Der Versand ist best effort mit kurzem Timeout: Ein ausgefallener Empfänger blockiert nie den Shop.
Webhooks und API ergänzen sich: Webhooks benachrichtigen in Echtzeit, die API mit updated_since holt die Historie nach einem Empfängerausfall nach.
Buchungsverfolgung
Katalog > Vermietung > Buchungen listet alle Buchungen mit Produkt, Kunde, Bestellung, Daten, zugewiesenen Einheiten und farbigem Status: Anfrage wartend, wartend, bestätigt, laufend, zurückgegeben, abgelehnt, storniert. Die Aktionen Annehmen, Ablehnen, Ausgabe und Rückgabe erscheinen je nach Status. Details erscheinen auch im Warenkorb, auf der Bestellbestätigung, in der Bestellansicht des Backoffice und auf der Seite Meine Mieten des Kundenkontos.
FAQ und Fehlerbehebung
Ändert der Mietpreis den Preis meines Produkts?
Nein. Der Preis wird über einen an den aktuellen Warenkorb gebundenen Spezialpreis injiziert, und die Kaution liegt auf ihrer eigenen Position. Der Katalogpreis bleibt unverändert.
Der Wochenmodus gibt Sonntag als Rückgabe, ich will Montag bis Montag
Deaktivieren Sie Rückgabetag berechnen: Eine Woche läuft dann von Montag bis Montag, 7 berechnete Tage, die Rückgabe erfolgt am Tag nach dem berechneten Zeitraum. Dieser Tag bleibt für eine weitere Ausgabe gesperrt.
Der Kunde hat seine Stripe-Hinterlegung nicht abgeschlossen
Solange keine Karte hinterlegt ist, wird der Link auf der Bestellbestätigungsseite angeboten und ein Button Meine Karte hinterlegen erscheint auf der Seite Meine Mieten des Kundenkontos. Mit der Option Hinterlegung vor Ausgabe verpflichtend wird der Kunde zusätzlich täglich per E-Mail mit dem gesicherten Link erinnert, und der Button Ausgabe bleibt blockiert. Der Link kann außerdem aus der Buchung kopiert und manuell versandt werden; die Buchung zeigt Karte nicht hinterlegt, bis der Ablauf abgeschlossen ist.
Die Stripe-Abbuchung wird abgelehnt
Die Bank des Kunden kann eine Abbuchung außerhalb der Sitzung ablehnen (3-D Secure). Die Stripe-Meldung wird unverändert im Backoffice angezeigt. Der Einbehalt muss dann über einen anderen Kanal eingezogen werden; die Buchung behält Betrag und Grund.
Die Kapazität meines Produkts folgt nicht mehr der konfigurierten Menge
Das ist das erwartete Verhalten, sobald eine Einheit für dieses Produkt existiert: Die Kapazität wird zur Zahl der aktiven und verfügbaren Einheiten. Löschen Sie die Einheiten, um zur konfigurierten Menge zurückzukehren.
Erzeugt eine angenommene Anfrage eine Bestellung?
Nein. Die Annahme bestätigt die Buchung und sperrt die Daten, ohne eine PrestaShop-Bestellung anzulegen. Sie ziehen die Zahlung über den Kanal Ihrer Wahl ein und verfolgen die Miete im Buchungsbildschirm.
Die Erinnerungsmails gehen nicht raus
Prüfen Sie, dass der Schalter aktiv ist und die Cron-URL täglich aufgerufen wird: Sie antwortet in JSON mit der Zahl der Sendungen. Jede E-Mail wird nur einmal pro Buchung versandt, nur für Buchungen mit Bestellung.
Der Kalender erscheint nicht auf der Produktseite
Prüfen Sie, dass das Produkt in Mietprodukte konfiguriert und aktiv ist. Leeren Sie den PrestaShop-Cache (Erweiterte Einstellungen > Leistung) und deaktivieren Sie während der Tests die Dateikombination (CCC).
Die API antwortet mit 401
Prüfen Sie, dass die API aktiviert ist und das gesendete Token dem angezeigten entspricht. Aktualisieren Sie nach einer Erneuerung Ihre Integrationen. Das Nur-Lese-Token wird nur auf GET-Endpunkten akzeptiert.
Ist es PrestaShop-9-kompatibel?
Ja. Das Modul ist mit PrestaShop 8 und 9 kompatibel, in Multistore- und Mehrsprachumgebungen. Die Preisformatierung nutzt das aktuelle Locale, gemäß den PrestaShop-9-Praktiken.