Basisklasse
Innerhalb der Basisklasse Deines Moduls solltest Du die folgenden Funktionen einbinden, um den Rechnungssynchronisierer zu erstellen und zu verwalten
Erstelle den Synchronisierer in Install()
public function install(ModuleLifecycleContext $lifecycleContext) {
// create the invoice synchronizer
InvoiceSynchronizer::create([
"module_name" => "HwSevdeskIntegration", // <-- Change this depending on your module Name
"name" => "Sevdesk Integration",
"handler" => HwSevdeskIntegrationHandler::class,
]);
}Lösche den Synchronisierer in Uninstall()
public function uninstall(ModuleLifecycleContext $lifecycleContext) {
InvoiceSynchronizer::query()
->where("module_name", "HwSevdeskIntegration") // <-- Change this depending on your module Name
->delete();
}Aktiviere den Synchronisierer in activate()
Die Sache wird interessant bei der Aktivierung eines Rechnungssynchronisierers. Wie Du bereits weißt, wird activate() ausgelöst, sobald der Administrator das Modul für einen bestimmten Vertriebskanal aktiviert. Wir müssen alle anderen Synchronisierer für den angeforderten Vertriebskanal deaktivieren und dann unseren Synchronisierer aktivieren.
Ein Vertriebskanal kann immer nur einen aktiven Synchronisierer haben
public function activate(ModuleLifecycleContext $lifecycleContext) {
// deactivate the other active module for the requested sales channel.
InvoiceSynchronizersSalesChannel::query()
->where('sales_channel_id', $lifecycleContext->getSalesChannel()->id)
->update([
'active' => false,
'activated_at' => null,
]);
// activate for the selected sales channel
InvoiceSynchronizer::query()
->where('module_name', 'HwSevdeskIntegration') // <- Change this depending on your module Name
->first()
->salesChannelInvoiceSynchronizer()
->where('sales_channel_id', $lifecycleContext->getSalesChannel()->id)
->update([
'active' => true,
'activated_at' => Carbon::now(),
]);
}Deaktiviere den Synchronisierer in deactivate()
Umgekehrt müssen wir, wenn der Admin den Synchronisierer für einen bestimmten Vertriebskanal deaktiviert, den Synchronisierer in der Datenbank deaktivieren. Wir müssen keinen anderen Synchronisierer aktivieren, da der Vertriebskanal dann ohne Buchhaltungsintegration bleibt, bis der Admin ein anderes Modul aktiviert.
public function deactivate(ModuleLifecycleContext $lifecycleContext) {
InvoiceSynchronizer::query()
->where('module_name', 'HwSevdeskIntegration') // <- Change this depending on your module Name
->first()
->salesChannelInvoiceSynchronizer()
->where('sales_channel_id', $lifecycleContext->getSalesChannel()->id)
->update([
'active' => false,
'activated_at' => null,
]);
}Dies ist die grundlegende Logik in der Basisklasse Deines Moduls, um die Aktivierung und Installation Deines Synchronisierers zu handhaben.