Herzlich willkommen

Développeur

Cette page s'adresse aux développeurs qui souhaitent étendre le module ou l'intégrer à leurs propres processus. Namespace du module : Geissweb\Euvat.

Événements

Le module fournit son propre hook d'événement et prend en charge en parallèle la gestion de quelques événements standard de Magento.

Événement propre : vat_validation_after

Déclenché après chaque validation de numéro de TVA dans Geissweb\Euvat\Validator\BaseValidator – que le numéro soit valide, invalide ou que la validation ait techniquement échoué. Utilisez-le pour réagir aux résultats de validation (par ex. journalisation personnalisée, synchronisation ERP, notifications).

Payload :

Clé Type
validation_result Geissweb\Euvat\Api\Data\ValidationResultInterface

Enregistrer votre propre observateur (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();
        }
    }
}

Événements standard de Magento observés

Event Observer Objectif
customer_login Observer\CustomerLogin Revalidation lors de la connexion.
sales_quote_address_save_before Observer\QuoteAddressSaveBefore Écriture des données de validation dans l'adresse de la quote.
estimate_tax_based_on_country Observer\AfterEstimateTaxBasedOnCountry Pseudo-registry pour le pays de taxation.
customer_address_save_before Observer\BeforeAddressSaveObserver Remplace l'observateur VIV du cœur.
customer_address_save_after Observer\AfterAddressSaveObserver Remplace l'observateur VIV du cœur.
admin_system_config_changed_section_euvat Observer\Adminhtml\ConfigObserver Réaction aux modifications de configuration.

Service Contracts (API)

Les interfaces publiques se trouvent sous Geissweb\Euvat\Api. Préférez-les aux classes de modèle concrètes.

ValidationRepositoryInterface

Accès au cache de validation (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);
}

Exemple – lire le résultat mis en cache pour un numéro :

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();
}

Autres interfaces

Interface Objectif
Api\Data\ValidationInterface Enregistrement de cache persisté (getter/setter, constantes de champ).
Api\Data\ValidationResultInterface Résultat d'une validation individuelle (incl. warning, error, retry_available, données de l'opérateur).
Api\Data\ValidationSearchResultsInterface Conteneur de résultats de recherche pour getList().
Api\CaseIdentifierInterface Détermine, à partir de l'adresse de facturation/livraison, la classe de taxe client (identifyCustomerTaxClass()) et la destination de taxation (identifyTaxDestination()).

Préférences DI (etc/di.xml) : ValidationRepositoryInterface → Model\ValidationRepository, Data\ValidationInterface → Model\Validation.

Commandes de console

geissweb:clean:vatnumbers

Nettoie les numéros de TVA existants dans les adresses des clients (supprime les espaces/caractères spéciaux et les préfixes pays en double) et supprime les numéros syntaxiquement invalides. Nettoie en outre les enregistrements de la table vat_validation.

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

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

Sans l'argument execute, aucune modification n'est effectuée. Exécutez d'abord le dry-run et vérifiez la sortie avant d'utiliser execute. Créez au préalable une sauvegarde de la base de données.

geissweb:selftest:vatcalc

Autotest : calcule la taxe pour les scénarios pris en charge et affiche les résultats sous forme de tableau. Utile pour vérifier, après la configuration, si les règles et classes de taxe s'appliquent comme prévu.

bin/magento geissweb:selftest:vatcalc