Erscheinungsbild
Ablauf & Reservierungen
Dieser Abschnitt erklärt, was im Hintergrund passiert, wenn ein Gutschein eingelöst wird.
Reservierungsprinzip
Das Plugin arbeitet mit einem Reservierungssystem, um Gutscheinguthaben zu schützen:
Warenkorb → Reservierung → Bestellung → Buchung1. Reservierung (Warenkorb)
Wenn ein Kunde einen Gutscheincode im Warenkorb einlöst:
- Das Plugin prüft den Code bei der JTL Vouchers API
- Eine Reservierung wird erstellt (Betrag wird vorgemerkt)
- Der reservierte Betrag steht anderen Transaktionen nicht zur Verfügung
- Die Reservierung wird im Warenkorb gespeichert
2. Buchung (Bestellabschluss)
Wenn der Kunde die Bestellung abschließt:
- Die Reservierung wird in eine endgültige Buchung umgewandelt
- Der Gutscheinbetrag wird endgültig abgezogen
- Die Buchung wird mit der Bestellnummer verknüpft
- Die Verarbeitung erfolgt asynchron über die Message Queue
3. Gutschein-Produkt-Erstellung (nach Zahlung)
Bei Gutschein-Produkten im Warenkorb:
- Gutscheincodes werden erst nach bestätigter Zahlung erstellt (Transaktionsstatus „bezahlt")
- Für jede bestellte Einheit wird ein neuer Gutschein bei JTL erstellt
- Der Gutscheincode wird per E-Mail an den Kunden gesendet
- Der Versand erfolgt asynchron mit PDF-Anhang
Automatischer Versand deaktivierbar
Dieses Verhalten kann in der Plugin-Konfiguration deaktiviert werden (→ „Gutschein-Code nach Zahlungseingang sofort erstellen und versenden"). Wenn deaktiviert, passiert nach der Zahlung nichts — die Code-Erstellung und der Versand müssen manuell erfolgen, z.B. über JTL WaWi.
Reservierungs-Bereinigung
Falls ein Kunde den Warenkorb verlässt, ohne zu bestellen, bleibt die Reservierung bestehen. Das Plugin bereinigt diese automatisch:
- Ein Hintergrundjob läuft stündlich
- Reservierungen, die älter als der konfigurierte Zeitraum sind (Standard: 24 Stunden), werden storniert
- Das Guthaben wird wieder freigegeben
Siehe Konfiguration für die Anpassung des Zeitraums.
Warenkorb-Verhalten
Währungsprüfung
Der Gutschein muss in der gleichen Währung ausgestellt sein wie der aktuelle Verkaufskanal. Ein EUR-Gutschein kann nicht in einem USD-Shop eingelöst werden.
Betragsbegrenzung
Wenn der Gutscheinwert den Warenkorbwert übersteigt:
- Es wird nur der benötigte Betrag reserviert
- Das übrige Guthaben bleibt verfügbar
- Bei mehreren Gutscheinen wird der Restbetrag korrekt auf die Gutscheine verteilt
Steuerbehandlung
Gutscheinrabatte werden steuerlich korrekt behandelt:
- Der Rabatt wird anteilig auf alle Steuersätze im Warenkorb verteilt
- Die Steuerberechnung folgt den Shopware-Standards
- Rundungsdifferenzen werden automatisch kompensiert
Message Queue
Die Buchung und der E-Mail-Versand laufen über Shopwares Message Queue:
Wichtig
Stellen Sie sicher, dass der Message-Queue-Worker aktiv ist, damit Buchungen und E-Mails zeitnah verarbeitet werden:
bash
bin/console messenger:consume async --time-limit=300Oder konfigurieren Sie einen Cronjob/Supervisor für den dauerhaften Betrieb.
