StartseiteDokumentationKaufmodelle & Tickets & Abo

    Kaufmodelle & Tickets & Abo

    Flexible Preismodelle, Abo-Verwaltung und Support-Tickets in einem Plugin

    Überblick

    Das Plugin vereint drei Module in einem: Flexible Kaufmodelle pro Produkt (Kauf, Monatlich, Jährlich), eine vollständige Abo-Verwaltung mit automatischer Verlängerung über einen täglichen Scheduled Task und ein produktbezogenes Support-Ticket-System im Kundenkonto.

    Jedes Modul lässt sich einzeln aktivieren oder deaktivieren. Das Plugin eignet sich besonders für Software-Lizenzen, SaaS-Produkte, Wartungsverträge und Verbrauchsmaterialien im Abo-Modell.

    Systemvoraussetzungen

  1. Shopware 6.7 oder höher
  2. PHP 8.1 oder höher
  3. MySQL 8.0 oder höher
  4. Installation

  5. 1.Plugin über den Shopware Plugin-Manager installieren oder manuell in custom/plugins/BcProductLicensing ablegen
  6. 2.Plugin im Plugin-Manager aktivieren
  7. 3.Cache leeren:
  8. php bin/console cache:clear
  9. 4.Vier Datenbank-Migrationen werden automatisch ausgeführt für bc_pricing_model, bc_support_ticket, bc_support_ticket_message und bc_subscription.
  10. 5.Der Scheduled Task für die tägliche Abo-Verlängerung wird automatisch registriert.
  11. Konfiguration

    Die Plugin-Konfiguration befindet sich unter Erweiterungen > Meine Erweiterungen > BC Kaufmodelle, Tickets & Abo > Konfiguration (config.xml).

    Allgemein:

  12. **Plugin aktivieren?** (`BcProductLicensing.config.active`, Typ: `bool`, Standard: `true`): Globaler Schalter.
  13. Kaufmodelle:

  14. **Kaufmodell-Auswahl auf der Produktdetailseite anzeigen?** (`BcProductLicensing.config.pricingModelEnabled`, Typ: `bool`, Standard: `true`): Zeigt die Auswahl zwischen Kauf, Monatlich und Jährlich.
  15. **Standard-Label: Kauf** (`BcProductLicensing.config.defaultLabelPurchase`, Typ: `text`, Standard: `Kauf`)
  16. **Standard-Label: Monatlich** (`BcProductLicensing.config.defaultLabelMonthly`, Typ: `text`, Standard: `Monatlich`)
  17. **Standard-Label: Jährlich** (`BcProductLicensing.config.defaultLabelYearly`, Typ: `text`, Standard: `Jährlich`)
  18. Ticket-System:

  19. **Ticket-System im Kundenkonto aktivieren?** (`BcProductLicensing.config.ticketSystemEnabled`, Typ: `bool`, Standard: `true`): Zeigt "Meine Tickets" im Kundenkonto.
  20. **Maximale Anzahl offener Tickets pro Kunde** (`BcProductLicensing.config.maxTicketsPerCustomer`, Typ: `int`, Standard: `0`): 0 = unbegrenzt.
  21. Anzeige:

  22. **Kaufmodell-Badge im Warenkorb anzeigen?** (`BcProductLicensing.config.showPricingBadgeInCart`, Typ: `bool`, Standard: `true`): Badge neben dem Produkt im Warenkorb und Checkout.
  23. Funktionen

    Kaufmodelle

    Jedes Produkt kann über die bc_pricing_model-Entity bis zu drei Preismodelle haben: Kauf, Monatlich, Jährlich. Die Konfiguration erfolgt im Admin über die Produkt-Erweiterung (sw-product-detail Extension mit Tab bc-product-pricing). Auf der Produktdetailseite erscheint der BcPricingModelSelectorPlugin als Radio-Card-Selektor mit dynamischer Preisanpassung.

    Abo-Verwaltung

    Bei Bestellung mit Monats- oder Jahresmodell wird über den OrderPlacedSubscriber automatisch ein Abonnement (bc_subscription) angelegt. Der SubscriptionService verwaltet die Geschäftslogik. Im Kundenkonto unter "Meine Abos" sieht der Kunde alle Abonnements mit Verlängerungsdatum, Status und Kündigungsmöglichkeit.

    Support-Ticket-System

    Kunden erstellen Support-Tickets (bc_support_ticket) im Kundenkonto über den TicketController. Der TicketService und TicketNumberGenerator verarbeiten die Erstellung. Nachrichten (bc_support_ticket_message) ermöglichen einen chronologischen Dialog. Tickets haben die Status: Offen, In Bearbeitung, Wartend, Gelöst, Geschlossen.

    Automatische Abo-Verlängerung

    Der SubscriptionRenewalTask prüft täglich Abonnements und löst bei Fälligkeit eine Verlängerung aus.

    Cart Processor

    Der PricingModelCartProcessor passt den Warenkorbpreis basierend auf dem gewählten Kaufmodell an.

    Produkt-Extension

    Das Plugin erweitert die Product-Entity über ProductExtension, um Pricing-Models direkt am Produkt abrufbar zu machen.

    Events & Hooks

    Das Plugin verwendet keine eigenen Event-Klassen. Es reagiert auf folgende Shopware-Events über Subscriber:

  24. **`CheckoutOrderPlacedEvent`** (`OrderPlacedSubscriber`) -- Erstellt automatisch Abonnements bei Bestellungen mit Monats- oder Jahresmodell.
  25. **`ProductPageLoadedEvent`** (`ProductPageSubscriber`) -- Stellt Kaufmodell-Daten und Ticket-Informationen auf der Produktdetailseite bereit.
  26. Textbausteine (Snippets)

    Storefront-Snippets (src/Resources/snippet/de_DE/bc-product-licensing.de-DE.json):

    *Account:*

  27. `bc-product-licensing.account.ticketsTitle` -- "Meine Tickets"
  28. `bc-product-licensing.account.createTicket` -- "Neues Ticket"
  29. `bc-product-licensing.account.subscriptionsTitle` -- "Meine Abos"
  30. *Ticket-System:*

  31. `bc-product-licensing.ticket.number` / `product` / `subject` / `status` / `priority` / `date` -- Ticket-Felder
  32. `bc-product-licensing.ticket.selectProduct` -- "Produkt auswählen ..."
  33. `bc-product-licensing.ticket.submit` -- "Ticket absenden"
  34. `bc-product-licensing.ticket.replyTitle` -- "Antwort schreiben"
  35. `bc-product-licensing.ticket.you` / `support` -- Nachrichtenabsender
  36. *Abonnements:*

  37. `bc-product-licensing.subscription.title` -- "Meine Abonnements"
  38. `bc-product-licensing.subscription.product` / `type` / `price` / `status` / `nextRenewal` / `startDate` -- Spalten
  39. `bc-product-licensing.subscription.monthly` / `yearly` -- Typen
  40. `bc-product-licensing.subscription.statusActive` / `statusCancelled` / `statusExpired` -- Status
  41. `bc-product-licensing.subscription.cancel` -- "Kündigen"
  42. `bc-product-licensing.subscription.confirmCancel` -- Bestätigungsdialog
  43. `bc-product-licensing.subscription.messages.cancelled` / `cancelFailed` -- Statusmeldungen
  44. *Ticket-Status:*

  45. `bc-product-licensing.status.open` / `in_progress` / `waiting` / `resolved` / `closed`
  46. *Kaufmodell:*

  47. `bc-product-licensing.pricing.chooseModel` -- "Modell wählen"
  48. `bc-product-licensing.pricing.purchase` -- "Kauf"
  49. Admin-Snippets (src/Resources/app/administration/src/module/bc-product-licensing/snippet/de-DE.json, en-GB.json)

    Scheduled Tasks

  50. **`bc_product_licensing.subscription_renewal`** (`BcProductLicensing\ScheduledTask\SubscriptionRenewalTask`): Wird täglich ausgeführt (Intervall: 86400 Sekunden / 24 Stunden). Prüft fällige Abonnements und löst automatische Verlängerungen aus. Der zugehörige Handler ist `SubscriptionRenewalTaskHandler`.
  51. Datenbank-Tabellen

    Das Plugin erstellt folgende Datenbank-Tabellen über 4 Migrationen:

    | Tabelle | Entity-Name | Beschreibung |

    |---|---|---|

    | bc_pricing_model | bc_pricing_model | Kaufmodelle pro Produkt (Kauf/Monatlich/Jährlich mit Preisen) |

    | bc_support_ticket | bc_support_ticket | Support-Tickets mit Kundenreferenz, Produktbezug, Status |

    | bc_support_ticket_message | bc_support_ticket_message | Nachrichten zu Tickets |

    | bc_subscription | bc_subscription | Abonnements mit Kundenbezug, Produktbezug, Status, Verlängerungsdatum |

    Migrationen:

  52. `Migration1743552010PricingModel`
  53. `Migration1743552011SupportTicket`
  54. `Migration1743552012SupportTicketMessage`
  55. `Migration1743552013Subscription`
  56. Admin-Integration

    Das Plugin registriert ein Admin-Modul bc-product-licensing (Farbe: #ff6b35, Icon: regular-comments) sowie eine Produkt-Erweiterung:

    Admin-Modul:

  57. `bc-product-licensing-list` -- Liste aller Tickets/Abonnements
  58. `bc-product-licensing-detail` -- Detail-Ansicht
  59. Produkt-Erweiterung (src/Resources/app/administration/src/extension/sw-product-detail/):

  60. Erweitert die Shopware-Produkt-Detailseite um einen Tab `bc-product-pricing`
  61. Template: `view/bc-product-pricing/bc-product-pricing.html.twig`
  62. Ermöglicht die Konfiguration der Kaufmodelle (Preise für Kauf, Monatlich, Jährlich) direkt am Produkt
  63. Die Admin-Module liegen unter:

    src/Resources/app/administration/src/module/bc-product-licensing/
    src/Resources/app/administration/src/extension/sw-product-detail/

    Storefront-Integration

    Das Plugin erweitert den Storefront um:

    Account-Seiten (src/Resources/views/storefront/page/account/):

  64. `subscription/index.html.twig` -- Abo-Übersicht mit Status, Verlängerungsdatum, Kündigungsoption
  65. `ticket/index.html.twig` -- Ticket-Übersicht
  66. `ticket/create.html.twig` -- Ticket-Erstellungsformular
  67. `ticket/detail.html.twig` -- Ticket-Detail mit Nachrichtenverlauf
  68. Sidebar-Erweiterung:

  69. `page/account/sidebar.html.twig` -- Menüpunkte "Meine Abos" und "Meine Tickets"
  70. Produkt-Erweiterungen:

  71. `component/buy-widget/buy-widget.html.twig` -- Kauf-Widget mit Kaufmodell-Selektor
  72. `component/buy-widget/buy-widget-form.html.twig` -- Kaufformular mit Modell-Auswahl
  73. `component/ticket/status-badge.html.twig` -- Wiederverwendbare Status-Badge-Komponente
  74. JavaScript-Plugins (src/Resources/app/storefront/src/):

  75. `pricing-model/bc-pricing-model-selector.plugin.js` -- Radio-Card-Selektor für Kaufmodelle
  76. `ticket/bc-ticket-form.plugin.js` -- Ticket-Formular-Plugin
  77. Storefront-Controller:

  78. `TicketController` -- Ticket-Verwaltung
  79. `SubscriptionController` -- Abo-Verwaltung
  80. Kompatibilität

  81. Kompatibel mit dem Plugin **B2B Plattform** (Ticket-Erstellung durch Firmenmitarbeiter)
  82. Kompatibel mit allen anderen Plugins der Bronner B2B Suite
  83. Kompatibel mit Standard-Shopware-Themes
  84. Getestet mit Shopware 6.7.x
  85. Unterstützt Multi-Language (DE/EN)
  86. FAQ