Herzlich willkommen

Entwickler

Die Erweiterung lässt sich über zwei Adapter-Interfaces an Drittmodule anbinden – etwa für Gutscheine, Guthaben, Bonuspunkte oder zusätzliche Rabatte. Adapter werden per Dependency Injection in einen Pool registriert und automatisch berücksichtigt.

Unterstützte Drittmodule

Modul Integration Behandlung
Aheadworks Gift Cards PrepaidAdapter BT-113 (Vorauszahlung)
Standard-PDF (Magento Core), Magetrend, Mageplaza PDF-Einbettung Hybrides ZUGFeRD-PDF mit eingebettetem XML

AllowanceAdapterInterface

Für Beträge, die als Nachlass auf Belegebene abgebildet werden sollen.

namespace Geissweb\ElectronicInvoicing\Api;

use Magento\Sales\Api\Data\InvoiceInterface;
use Magento\Sales\Api\Data\CreditmemoInterface;

interface AllowanceAdapterInterface
{
    public function isEnabled(): bool;

    /**
     * @return array<int, array<string, mixed>>
     */
    public function extractAllowances(InvoiceInterface|CreditmemoInterface $document): array;

    public function getModuleName(): string;

    public function getPriority(): int;
}

extractAllowances() liefert je Nachlass ein Array mit den Schlüsseln amount (float, ohne USt.), vat_category (EN-16931-Kategorie, z. B. S), vat_rate (float, z. B. 19.0), reason (Text) und reason_code (z. B. DISCOUNT).

PrepaidAdapterInterface

Für bereits gezahlte Beträge (BT-113) wie Gutscheine, Guthaben oder Bonuspunkte.

namespace Geissweb\ElectronicInvoicing\Api;

use Magento\Sales\Api\Data\CreditmemoInterface;
use Magento\Sales\Api\Data\InvoiceInterface;

interface PrepaidAdapterInterface
{
    public function isEnabled(): bool;

    /**
     * @return array{amount: float, reference: string}
     */
    public function extractPrepaidAmount(InvoiceInterface|CreditmemoInterface $document): array;

    public function getModuleName(): string;

    public function getPriority(): int;
}

Beide Interfaces liegen im Namespace Geissweb\ElectronicInvoicing\Api. getPriority() steuert die Ausführungsreihenfolge – kleinere Werte = höhere Priorität (Standard 100).

Eigenen Adapter registrieren

Implementieren Sie das passende Interface und registrieren Sie die Klasse im jeweiligen Pool in der etc/di.xml Ihres Moduls:

<type name="Geissweb\ElectronicInvoicing\Model\Adapter\AllowanceAdapterPool">
    <arguments>
        <argument name="adapters" xsi:type="array">
            <item name="custom" xsi:type="object">Vendor\Module\Model\Adapter\CustomAllowanceAdapter</item>
        </argument>
    </arguments>
</type>

Für Vorauszahlungs-Adapter verwenden Sie analog Geissweb\ElectronicInvoicing\Model\Adapter\PrepaidAdapterPool.

Über isEnabled() kann der Adapter prüfen, ob das Zielmodul installiert/aktiv und in der Konfiguration freigeschaltet ist. So bleibt die Integration inaktiv, solange sie nicht gebraucht wird.