Ich würde gerne den Checkout erweitern. Es gibt dort doch den Punkt „Kontotyp“ in dem man zwischen „Privat“ und „Gewerblich“ wählen kann.
Ich würde z.B. dort gerne einen Punkt „Behörde/Öffentliche Einrichtung“ ergänzen und diesen dann (z.B.) eine geeignete Kundengruppe zuordnen, damit ich solchen Kunden über den Rule-Builder die Zahlart Rechnung freigeben kann.
Hat jemand von euch schonmal etwas ähnliches umgesetzt? Oder hat jemand eine andere Idee, wie man das löst? Wichtig ist, das Kunden öffentlicher Einrichtungen sich dafür nicht erst registrieren müssen.
Das habe ich nämlich aktuell so gelöst, aber das ist den meisten Behörden bzw. öffentliche Einrichtungs-Käufern wohl zu schwer zum Lesen und anschließend umzusetzen… Also hätte ich gerne auch für Gastbesteller ohne Registrierung, die sich eindeutig einer öffentlichen Einrichtung/Behörde zuordnen die Möglichkeit jedoch nur diesen Kunden über den Rulebuilder direkt die Zahlart Rechnung anzeigen zu lassen, ohne dass diese sich erst registrieren und ich die Kundengruppe manuell freigeben müsste.
Hallo,
den nativen Kontotyp (accountType) würde ich nicht erweitern – in Shopware 6 kennt das Feld nur die festen Werte „private“ und „business“ und hängt an Kernlogik (Firmenfelder, USt-IdNr). Ein dritter Wert bricht an unerwarteter Stelle auf, und der Umweg über „business“ scheitert meist daran, dass Behörden keine USt-IdNr haben.
Sauber und ohne Pflichtregistrierung löst man das über ein eigenes Kundenfeld + Rule Builder:
1. Kundenfeld anlegen
Einstellungen → Zusatzfelder → neues Set für die Entität „Kunde“, Feld z. B. buyer_type als Auswahlfeld mit den Optionen privat / gewerblich / behoerde.
2. Auswahl ins Registrierungs-/Gastformular bringen – ohne eigenen PHP-Code
Die Registrierungs-Vorlage @Storefront/storefront/component/account/register.html.twig überschreiben und ein Select mit genau diesem Feldnamen rendern:
<select name="customFields[buyer_type]" class="form-select">
<option value="privat">Privatperson</option>
<option value="gewerblich">Unternehmen</option>
<option value="behoerde">Behörde / öffentliche Einrichtung</option>
</select>
Der Clou: Shopware mappt customFields[...] bei der Registrierung automatisch auf den Kunden – und zwar in der RegisterRoute noch vor der Verzweigung Gast/Konto. Der Wert landet damit bei normaler UND Gast-Registrierung in customer.customFields, ganz ohne Subscriber oder eigenes Event-Handling. Voraussetzung ist nur, dass das Kundenfeld aus Schritt 1 existiert.
3. Rechnungskauf konditional freischalten
Im Rule Builder eine Regel mit der Bedingung „Zusatzfeld“ (Custom field of customer) → buyer_type ist gleich behoerde. Diese Regel als Verfügbarkeits-Regel an die Zahlart „Rechnung“ hängen. Damit erscheint Rechnung nur, wenn im Checkout „Behörde“ gewählt wurde – ohne Registrierung, ohne manuelle Kundengruppe.
Wenn man Behörden zusätzlich segmentieren/reporten möchte, kann man sie später noch automatisiert einer Kundengruppe zuordnen – für die reine Zahlart-Freischaltung reicht das Zusatzfeld aber.
Danke für deine Idee, das klingt sehr gut, das schaue ich mir mal an!
Hast du es schonmal getestet? Was ist, wenn der Kunde im letzten Schritt beim Checkout seinen Kundentyp wieder zurückändert, von „Behörde“ z.B. auf „Unternehmen“? Greift der Rule-Builder dann zuverlässig und sperrt die Zahlart „Rechnung“ nun wieder für den Kunden?
Guter Einwand!
Ja, das greift zuverlässig, und zwar aus zwei Gründen. Die Verfügbarkeits-Regel wird bei jeder Warenkorb-Neuberechnung ausgewertet, und der Warenkorb wird in jedem Checkout-Schritt neu berechnet – ändert der Kunde seinen Typ von „Behörde" zurück auf „Unternehmen", verschwindet „Rechnung" damit wieder aus den verfügbaren Zahlarten.
Der eigentliche Schutz sitzt aber eine Ebene tiefer: Shopware prüft die Zahlart-Verfügbarkeit noch einmal bei der Bestellabgabe. Eine vorher gewählte, dann ungültig gewordene Zahlart wird nicht durchgelassen – die Bestellung mit „Rechnung" lässt sich gar nicht abschließen, wenn die Regel nicht mehr zutrifft. Ein Schlupfloch über „erst Behörde wählen, dann zurückändern" gibt es also nicht.
Das Einzige, was man einmal durchklicken sollte: dass das Zurückändern des Typs tatsächlich eine Neuberechnung auslöst – im Standard-Checkout ist das der Fall. Falls das Feld über eigene Logik gesetzt wird, würde ich genau diesen Wechsel einmal testen.