Documentation B2bFatturazione

Les étapes d'installation et tout ce qu'il faut pour exposer les champs B2B via votre propre storefront, y compris les checkouts headless/GraphQL comme React Checkout.

Afficher en Markdown

Installation

Prérequis

Magento 2.4.x — testé sur 2.4.9, compatible avec les versions 2.4.* précédentes. PHP 8.1–8.5. Compatible avec le thème Luma par défaut comme avec le thème Hyvä.

Étapes d'installation

  1. Ajoutez les identifiants reçus par email à auth.json à la racine de votre projet Magento :
    { "http-basic": { "repo.codingrow.com": { "username": "...", "password": "..." } } }
  2. composer config repositories.codingrow composer https://repo.codingrow.com
  3. composer require codingrow/module-b2bfatturazione
  4. bin/magento module:enable Codingrow_B2bFatturazione
  5. bin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush
  6. Collez votre clé de licence dans Admin → Stores → Configuration → Codingrow Extensions → B2bFatturazione → License → License Key, enregistrez, puis bin/magento cache:flush. La clé est liée au domaine déclaré à l'achat — sur tout autre domaine, le module reste installé mais ses champs restent désactivés.
  7. Si le site fonctionne en mode production, redéployez également le contenu statique : bin/magento setup:static-content:deploy -f.

Désinstallation

composer remove codingrow/module-b2bfatturazione puis bin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush.

Documentation

Ce qu'il fait

Il s'agit d'un module volontairement petit et ciblé : il ajoute cinq champs — Type de client (entreprise/particulier), numéro de TVA, code SDI, PEC (email certifié) et Code fiscal — au carnet d'adresses du client et au checkout (facturation et livraison), aussi bien sur le thème Luma par défaut que sur Hyvä. Il n'y a aucune configuration au-delà de l'installation et de la saisie de la clé de licence ; il fonctionne dès l'installation.

ChampAffiché quandRequis quandFormat / notes
Type de clienttoujourstoujoursParticulier / Entreprise. Régit tout le reste.
Raison socialeEntrepriseEntreprise—
N° de TVAEntrepriseEntrepriseMax 15. Deux lettres initiales = étranger → SDI/PEC masqués.
Code SDIEntreprise + TVA italienne + facture demandéeSDI ou PECMax 7.
PECEntreprise + TVA italienne + facture demandéeSDI ou PECE-mail certifié.
Facture demandéeParticulier (case)—La cocher rend le Code fiscal obligatoire.
Code fiscalEntreprise, ou Particulier + facture demandéeParticulier + facture demandée16 caractères (personne) ou 11 chiffres (entreprise).
The B2B fiscal fields on the storefront address form (Customer Type set to Business): VAT number, SDI, PEC, Fiscal Code

The same fields appear in checkout (billing and shipping) and in the admin customer address book.

Configuration admin

Aucune configuration de comportement : le seul réglage admin est la clé de licence. Tout le reste (quels champs s’affichent, quand ils sont requis) est automatique.

B2bFatturazione admin configuration: a single License Key field

Compatibilité GraphQL / headless & React Checkout

Les cinq champs B2B sont exposés via les types et mutations GraphQL core de Magento — pas une API personnalisée. Si votre storefront est basé sur GraphQL (React Checkout, ou tout autre frontend headless/GraphQL), vous lisez et écrivez ces champs exactement comme n'importe quel autre champ d'adresse natif, via les mutations que vous utilisez déjà.

Lire les champs

customer_type, sdi, pec, codice_fiscale et fattura_richiesta sont ajoutés directement aux types BillingCartAddress, ShippingCartAddress et CustomerAddress de Magento :

{
  customerCart {
    billing_address {
      customer_type
      sdi
      pec
      codice_fiscale
      fattura_richiesta
    }
  }
}
{
  customer {
    addresses {
      customer_type
      sdi
      pec
      codice_fiscale
      fattura_richiesta
    }
  }
}

Écrire les champs

Les cinq mêmes champs sont ajoutés au type core CartAddressInput de Magento, ils sont donc transmis avec les champs d'adresse normaux dans les mutations standard du panier — aucune mutation séparée à appeler :

mutation {
  setShippingAddressesOnCart(
    input: {
      cart_id: "abc123"
      shipping_addresses: [
        {
          address: {
            firstname: "Mario"
            lastname: "Rossi"
            street: ["Via Roma 1"]
            city: "Milano"
            postcode: "20100"
            country_code: "IT"
            telephone: "+390000000"
            customer_type: "azienda"
            sdi: "ABC1234"
            pec: "mario.rossi@pec.it"
            codice_fiscale: "RSSMRA80A01F205X"
          }
        }
      ]
    }
  ) {
    cart { id }
  }
}

Notes d'implémentation

  • Tout ceci est réalisé via les points d'extension officiels de Magento (plugins di.xml sur des interfaces core comme Magento\QuoteGraphQl\Model\Cart\QuoteAddressFactory et Magento\CustomerGraphQl\Model\Customer\Address\ExtractCustomerAddressData) — aucune rustine ni copie du code du resolver GraphQL core.
  • La validation côté serveur (ex. « SDI ou PEC est requis pour un client entreprise ») fonctionne de la même façon quel que soit le storefront qui appelle la mutation — REST, GraphQL, ou le checkout Luma par défaut.
  • fattura_richiesta (facture demandée) ne s'applique qu'aux clients particuliers — les clients entreprise reçoivent toujours une facture de par la loi, donc ce champ n'a de sens que pour le cas « particulier » (« privato »).

Affichage précis de l'adresse dans l'admin

Le résumé de l'adresse de facturation/livraison par défaut du client dans Customers → All Customers → [customer] → Addresses, et dans l'onglet Customer View, inclut désormais aussi les champs B2B — pas seulement l'adresse de base :

AvantAprès
Mario Rossi
Mario Rossi S.r.l.
Via dei Test, 1
Roma, RM, 00100
Italie
T : 333 1122334
TVA : 01234567891
Mario Rossi
Mario Rossi S.r.l.
Via dei Test, 1
Roma, RM, 00100
Italie
T : 333 1122334
Type de client : azienda
TVA : 01234567891
SDI : ABCDEFG
PEC : mario.rossi@pec.it
Code fiscal : RSSMRA80A01H501V

React Checkout : prêt à l'emploi, sans développement supplémentaire

Codingrow maintient également codingrow/module-react-checkout, un petit package complémentaire qui ajoute le véritable formulaire de facturation B2B (type de client, TVA, SDI, PEC, code fiscal) à React Checkout de Hyvä — l'interface au-dessus des champs GraphQL documentés ci-dessus. Installez les deux ensemble et le formulaire de facturation fonctionne immédiatement, sans développement personnalisé.

Il inclut également notre propre patch de compatibilité qui permet à React Checkout de fonctionner réellement sous PHP 8.4 et 8.5. Le package d'origine est antérieur à la gestion plus stricte des dépréciations de PHP 8.4 — les paramètres nullable implicites et un appel à str_getcsv() non échappé déclenchent tous deux des erreurs fatales sous le gestionnaire d'erreurs de Magento en 8.4+, pas de simples avertissements, ce qui rendrait sinon React Checkout inutilisable sur une stack PHP moderne. Ce patch est appliqué automatiquement dans le cadre de l'installation ci-dessous.

Installer React Checkout avec le support B2B

  1. Requiert les deux packages :
    composer require hyva-themes/magento2-react-checkout codingrow/module-react-checkout
  2. Ajoutez le patch de compatibilité PHP 8.4/8.5 au composer.json à la racine de votre projet, puis exécutez composer update --lock pour qu'il soit enregistré :
    "extra": {
        "patches": {
            "hyva-themes/magento2-react-checkout": {
                "PHP 8.4/8.5 compat": "vendor/codingrow/module-react-checkout/patches/react-checkout-php84-compat.patch"
            }
        }
    }
    (Nécessite cweagans/composer-patches ; exécutez d'abord composer require cweagans/composer-patches si vous ne l'avez pas déjà.)
  3. Activez les modules :
    bin/magento module:enable Codingrow_ReactCheckout Hyva_ReactCheckout
    bin/magento setup:upgrade
  4. Activez React Checkout : bin/magento config:set hyva_react_checkout/general/enable 1
  5. Compilez l'application React :
    cd vendor/codingrow/module-react-checkout/reactapp
    npm install
    npm run build
  6. Redéployez le contenu statique — requis à chaque fois, même en dehors du mode production ; sinon le navigateur peut continuer à charger un bundle obsolète :
    bin/magento setup:static-content:deploy -f en_US --theme <your-theme>
  7. bin/magento cache:flush

Prérequis : Magento 2.4.9, PHP 8.1–8.5 (y compris 8.4/8.5, via le patch inclus).