Herzlich willkommen

Entwickler

Diese Seite richtet sich an Entwickler, die das Modul erweitern oder in eigene Abläufe einbinden möchten. Modul-Namespace: Geissweb\Euvat.

Events

Das Modul stellt einen eigenen Event-Hook bereit und übernimmt zugleich die Steuerung einiger Magento-Standard-Events.

Eigener Event: vat_validation_after

Wird nach jeder USt-IdNr.-Prüfung in Geissweb\Euvat\Validator\BaseValidator ausgelöst – unabhängig davon, ob die Nummer gültig, ungültig oder technisch fehlgeschlagen ist. Nutzen Sie ihn, um auf Prüfergebnisse zu reagieren (z. B. eigenes Logging, ERP-Sync, Benachrichtigungen).

Payload:

Schlüssel Typ
validation_result Geissweb\Euvat\Api\Data\ValidationResultInterface

Eigenen Observer registrieren (etc/events.xml):

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="vat_validation_after">
        <observer name="mycompany_vat_validation_after"
                  instance="MyCompany\Module\Observer\VatValidationAfter"/>
    </event>
</config>
declare(strict_types=1);

namespace MyCompany\Module\Observer;

use Geissweb\Euvat\Api\Data\ValidationResultInterface;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;

class VatValidationAfter implements ObserverInterface
{
    public function execute(Observer $observer): void
    {
        /** @var ValidationResultInterface $result */
        $result = $observer->getEvent()->getData('validation_result');

        if ($result->getVatIsValid()) {
            // z. B. registrierten Firmennamen weiterverarbeiten
            $name = $result->getVatTraderName();
        }
    }
}

Beobachtete Magento-Standard-Events

Event Observer Zweck
customer_login Observer\CustomerLogin Revalidierung beim Login.
sales_quote_address_save_before Observer\QuoteAddressSaveBefore Validierungsdaten an die Quote-Adresse schreiben.
estimate_tax_based_on_country Observer\AfterEstimateTaxBasedOnCountry Pseudo-Registry für das Steuerland.
customer_address_save_before Observer\BeforeAddressSaveObserver Ersetzt den Core-VIV-Observer.
customer_address_save_after Observer\AfterAddressSaveObserver Ersetzt den Core-VIV-Observer.
admin_system_config_changed_section_euvat Observer\Adminhtml\ConfigObserver Reaktion auf Konfigurationsänderungen.

Service Contracts (API)

Die öffentlichen Schnittstellen liegen unter Geissweb\Euvat\Api. Bevorzugen Sie diese gegenüber konkreten Modellklassen.

ValidationRepositoryInterface

Zugriff auf den Validierungs-Cache (vat_validation).

namespace Geissweb\Euvat\Api;

interface ValidationRepositoryInterface
{
    public function save(Data\ValidationInterface $validation): Data\ValidationInterface;
    public function get(int $validationId): Data\ValidationInterface;
    public function getList(SearchCriteriaInterface $searchCriteria): SearchResults;
    public function delete(Data\ValidationInterface $validation): bool;
    public function deleteById(int $validationId): bool;
    /** @return Data\ValidationInterface|AbstractModel  (false, wenn nicht vorhanden) */
    public function getByVatId(string $vatId);
}

Beispiel – gecachtes Ergebnis zu einer Nummer lesen:

public function __construct(
    private readonly \Geissweb\Euvat\Api\ValidationRepositoryInterface $validationRepository
) {
}

public function isCachedValid(string $vatId): bool
{
    $entry = $this->validationRepository->getByVatId($vatId);

    return $entry !== false
        && $entry->getVatIsValid()
        && $entry->getVatRequestSuccess();
}

Weitere Interfaces

Interface Zweck
Api\Data\ValidationInterface Persistierter Cache-Datensatz (Getter/Setter, Feldkonstanten).
Api\Data\ValidationResultInterface Ergebnis einer einzelnen Prüfung (inkl. warning, error, retry_available, Trader-Daten).
Api\Data\ValidationSearchResultsInterface Suchergebnis-Container für getList().
Api\CaseIdentifierInterface Ermittelt aus Rechnungs-/Versandadresse die Kundensteuerklasse (identifyCustomerTaxClass()) und das Steuerziel (identifyTaxDestination()).

DI-Präferenzen (etc/di.xml): ValidationRepositoryInterface → Model\ValidationRepository, Data\ValidationInterface → Model\Validation.

Console-Commands

geissweb:clean:vatnumbers

Bereinigt bestehende USt-IdNrn. in Kundenadressen (entfernt Leerzeichen/Sonderzeichen und doppelte Länderpräfixe) und entfernt syntaktisch ungültige Nummern. Säubert zusätzlich Datensätze in der vat_validation-Tabelle.

# Probelauf (Dry-Run) – zeigt nur an, ändert nichts
bin/magento geissweb:clean:vatnumbers

# Änderungen tatsächlich anwenden
bin/magento geissweb:clean:vatnumbers execute

Ohne das Argument execute werden keine Änderungen vorgenommen. Führen Sie zunächst den Dry-Run aus und prüfen Sie die Ausgabe, bevor Sie execute verwenden. Erstellen Sie vorab ein Datenbank-Backup.

geissweb:selftest:vatcalc

Selbsttest: berechnet die Steuer für die unterstützten Szenarien und zeigt die Ergebnisse als Tabelle. Nützlich, um nach der Konfiguration zu prüfen, ob die Steuerregeln und -klassen wie erwartet greifen.

bin/magento geissweb:selftest:vatcalc