B2B Plattform
Firmenkonten, Mitarbeiter, Rollen, Budgets und Firmenadressen direkt im Checkout
Überblick
Die Bronn B2B-Plattform ist das zentrale Plugin der Bronner B2B Suite. Sie erweitert Shopware 6 um vollständige Firmenkonten-Verwaltung mit Mitarbeitern, Rollen, Budgets, Kostenstellen, Firmenadressen, Produktbeschränkungen und mehrstufigen Freigabeprozessen.
Das Plugin bildet komplexe B2B-Organisationsstrukturen direkt im Shop ab. Firmenkunden verwalten ihre eigene Hierarchie selbstständig, ohne dass der Shop-Betreiber bei jeder Personaländerung manuell eingreifen muss.
Das Plugin verfuegt ueber vollstaendige Lifecycle-Methoden: install, update, activate, deactivate und uninstall. Bei der Deinstallation werden alle Plugin-Daten sauber entfernt (Tabellen, Mail-Templates, Flows, Event-Actions). Beim Install und Update werden Mail-Templates und Flow-Builder-Flows automatisch angelegt bzw. aktualisiert.
Aktuelle Version: 1.8.1. Mit v1.8.0 wurde die komplette interne API durch vier BackedEnums (B2bPermission, BudgetPeriod, ApprovalStatus, RestrictionType) typsicher gemacht. Zwei Unique-Indizes verhindern Duplikate auf Datenbankebene (Permission pro Rolle, Mitarbeiter-Cost-Center-Mapping). Zwei XOR-Validatoren erzwingen saubere Datenmodelle (Budget: Abteilung XOR Cost-Center, ProductRestriction: Produkt-IDs XOR Kategorien). Eine Legacy-Bridge mappt bestehende String-Werte transparent in Enums — keine Breaking-Changes. v1.8.1 ist der UX-Hotfix dazu: spezifische Snippet-Texte bei XOR-Verletzungen statt generischem businessError-Flash.
Änderungen v1.8.1 (Hotfix XOR-Flash):
Änderungen v1.8.0 (Type-Design ab v1.8.0):
- B2bPermission (alle Permission-Strings — shop.purchase, approvals.submit, approvals.decide, employees.manage, roles.manage, budgets.manage, costCenters.manage, addresses.manage, productRestrictions.manage)
- BudgetPeriod (monthly, quarterly, yearly, one_time)
- ApprovalStatus (pending, approved, rejected, withdrawn)
- RestrictionType (product, category)
Änderungen v1.7.9 (Admin-UI-Polish):
Änderungen v1.7.8 (Audit-Log-Sichtbarkeit):
Änderungen v1.7.7 (Hotfix):
Änderungen v1.7.6 (Observability + Hygiene):
Änderungen v1.7.5 (Security-Hardening):
Änderungen v1.7.3:
Änderungen v1.7.2 (Hotfix):
Änderungen v1.7.1 (Should-Fix-Sammelrelease):
Änderungen v1.7.0 (Breaking — Permission-Konsolidierung):
Änderungen v1.6.0:
1. /account/address leitet Mitarbeiter automatisch auf das Firmenadressen-Modul um.
2. Im Checkout öffnet der Adress-Wechsler das BronnB2bAddressManager-Modal (Tabs Liefer-/Rechnungsadresse, gefüllt aus Firmenadressen-Pool).
3. Direkte Standard-Save-Routen (/account/address/create, /account/address/edit) werden serverseitig mit HTTP 403 geblockt.
Änderungen v1.5.2 (Hotfix):
Änderungen v1.5.1 (Hotfix):
Änderungen v1.5.0:
Vorherige Aenderungen (v1.3.28):
Systemvoraussetzungen
Installation
custom/plugins/BronnB2bPlatform ablegenphp bin/console cache:clearDas Plugin enthaelt vorkompiliertes Admin-JS und funktioniert ohne build-administration.sh – eine reine Installation ueber den Shopware Plugin-Manager im Admin ist ausreichend.
Konfiguration
Die Plugin-Konfiguration befindet sich unter Erweiterungen > Meine Erweiterungen > Bronn B2B Plattform > Konfiguration (config.xml).
Allgemeine Einstellungen:
Genehmigungen:
Budget:
Funktionen:
Funktionen
Firmenkonten-Verwaltung
Jedes Firmenkonto (bronn_b2b_company) enthält Stammdaten (Firmenname, Firmennummer, USt-IdNr., Ansprechpartner), zugeordnete Mitarbeiter und Abteilungen. Firmenkunden können ihre Daten im Storefront selbst verwalten. Ein Dashboard zeigt Firmenübersicht, Mitarbeiterzahl, Budget-Auslastung und offene Genehmigungen.
Mitarbeiter-Management
Mitarbeiter (bronn_b2b_employee) werden einem Firmenkonto zugeordnet. Jeder Mitarbeiter hat eine Rolle, die seine Berechtigungen steuert. Mitarbeiter können vom Firmenkonto-Administrator direkt im Storefront angelegt, bearbeitet und deaktiviert werden.
Rollen und Berechtigungen
Rollen (bronn_b2b_role) definieren, was ein Mitarbeiter darf. Berechtigungen (bronn_b2b_permission) werden granular pro Rolle konfiguriert: Produkte ansehen, Warenkorb befüllen, Bestellungen auslösen, Freigaben erteilen, Mitarbeiter verwalten.
Budgets
Budgets (bronn_b2b_budget) können pro Mitarbeiter gesetzt werden. Der Budgetzeitraum ist konfigurierbar (monatlich, quartalsweise, jährlich, einmalig). Bei Überschreitung wird die Bestellung automatisch in den Freigabeprozess überführt.
Freigabeprozesse
Bestellungen, die das Budget übersteigen oder immer eine Genehmigung erfordern, landen als Freigabeanfrage (bronn_b2b_order_approval) beim Vorgesetzten. Dieser kann im Storefront-Account genehmigen oder ablehnen.
Kostenstellen
Kostenstellen (bronn_b2b_cost_center) können pro Firma angelegt werden. Mitarbeiter werden über die Mapping-Tabelle (bronn_b2b_employee_cost_center) zugeordnet und können bei der Bestellung eine Kostenstelle auswählen.
Firmenadressen
Firmenadressen (bronn_b2b_company_address) ermöglichen die Verwaltung mehrerer Liefer- und Rechnungsadressen pro Firma.
Produktbeschränkungen
Produktbeschränkungen (bronn_b2b_product_restriction) erlauben es, bestimmte Produkte für einzelne Firmen oder Mitarbeiter zu sperren.
Events & Hooks
Das Plugin löst folgende Flow-Builder-fähige Events aus (alle implementieren FlowEventAware, MailAware, CustomerAware, ScalarValuesAware):
Zusätzliche Cart-Fehler-Events:
Flow Builder Events
Alle fünf Plugin-Events sind im Shopware Flow Builder verfügbar und können für automatische Workflows genutzt werden:
| Event-Name | Klasse | Beschreibung |
|---|---|---|
| bronn_b2b.approval_requested | ApprovalRequestedEvent | Trigger bei neuer Freigabeanfrage |
| bronn_b2b.approval_approved | ApprovalApprovedEvent | Trigger bei Genehmigung |
| bronn_b2b.approval_rejected | ApprovalRejectedEvent | Trigger bei Ablehnung |
| bronn_b2b.employee_invited | EmployeeInvitedEvent | Trigger bei Mitarbeiter-Einladung |
| bronn_b2b.budget_exceeded | BudgetExceededEvent | Trigger bei Budgetüberschreitung |
Alle Events stellen ShopwareSalesChannelEvent-Daten bereit und können mit Mail-Aktionen, Webhooks oder eigenen Flow-Actions kombiniert werden.
Textbausteine (Snippets)
Das Plugin registriert Storefront-Snippets unter dem Namespace bronn-b2b-platform in DE und EN:
Storefront-Snippets (src/Resources/snippet/de_DE/bronn-b2b-platform.de-DE.json):
Admin-Snippets (src/Resources/app/administration/src/module/bronn-b2b-platform/snippet/de-DE.json, en-GB.json)
Scheduled Tasks
Datenbank-Tabellen
Das Plugin erstellt folgende Datenbank-Tabellen über 8 Migrationen:
| Tabelle | Entity-Name | Beschreibung |
|---|---|---|
| bronn_b2b_company | bronn_b2b_company | Firmenkonten mit Stammdaten |
| bronn_b2b_role | bronn_b2b_role | Berechtigungsrollen |
| bronn_b2b_employee | bronn_b2b_employee | Mitarbeiter-Zuordnungen |
| bronn_b2b_permission | bronn_b2b_permission | Granulare Berechtigungen pro Rolle |
| bronn_b2b_budget | bronn_b2b_budget | Budget-Definitionen |
| bronn_b2b_order_approval | bronn_b2b_order_approval | Freigabeanfragen |
| bronn_b2b_cost_center | bronn_b2b_cost_center | Kostenstellen |
| bronn_b2b_company_address | bronn_b2b_company_address | Firmenadressen |
| bronn_b2b_employee_cost_center | bronn_b2b_employee_cost_center | Zuordnung Mitarbeiter zu Kostenstellen |
| bronn_b2b_product_restriction | bronn_b2b_product_restriction | Produktbeschränkungen pro Firma/Mitarbeiter |
Migrationen:
Admin-Integration
Das Plugin registriert ein eigenes Admin-Modul bronn-b2b-platform unter dem Menüpunkt B2B:
Seiten:
Detail-Views (Tabs):
Die Admin-Module liegen unter:
src/Resources/app/administration/src/module/bronn-b2b-platform/Storefront-Integration
Das Plugin erweitert den Account-Bereich im Storefront um folgende Seiten und Templates:
Account-Seiten (src/Resources/views/storefront/page/account/b2b/):
Sidebar-Erweiterung:
Checkout-Erweiterung:
Adressverwaltungs-Override (ab v1.6.0):
Produkt-Erweiterungen:
JavaScript-Plugins:
Berechtigungs-Modell
Ab v1.7.0 nutzt das Plugin eine konsolidierte Permission shop.purchase anstelle der vorher getrennten Permissions cart.add und product.view_prices.
Permission-Liste (Auszug):
| Permission-Key | Bedeutung |
|---|---|
| shop.purchase | Mitarbeiter darf Preise sehen UND Produkte in den Warenkorb legen (konsolidiert seit v1.7.0). |
| company.manage | Firmen-Stammdaten und -Verwaltung. |
| employees.manage | Mitarbeiter anlegen, bearbeiten, deaktivieren. |
| roles.manage | Rollen und Permissions verwalten. |
| budgets.manage | Budgets definieren und zuweisen. |
| approvals.decide | Freigaben erteilen oder ablehnen. |
| costcenters.manage | Kostenstellen verwalten. |
| addresses.manage | Firmenadressen verwalten. |
| restrictions.manage | Produktbeschränkungen pflegen. |
Hintergrund Konsolidierung:
In der Praxis ergab die Trennung cart.add vs. product.view_prices keine sinnvollen Kombinationen — Cart-Add ohne Preis-Sicht erzeugte UI-Inkonsistenzen, Preis-Sicht ohne Cart war ein seltenes Edge-Case-Setup. Beide Capabilities werden jetzt gemeinsam vergeben.
Migration `Migration1762000000MergeCartAndPriceViewPermissions`:
Die Migration läuft beim Plugin-Update automatisch und konsolidiert bestehende Rollen via Batch-INSERT-SELECT (v1.7.1):