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
- Ajoutez les identifiants reçus par email à
auth.jsonà la racine de votre projet Magento :{ "http-basic": { "repo.codingrow.com": { "username": "...", "password": "..." } } } composer config repositories.codingrow composer https://repo.codingrow.comcomposer require codingrow/module-b2bfatturazionebin/magento module:enable Codingrow_B2bFatturazionebin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush- 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. - 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.
| Champ | Affiché quand | Requis quand | Format / notes |
|---|---|---|---|
| Type de client | toujours | toujours | Particulier / Entreprise. Régit tout le reste. |
| Raison sociale | Entreprise | Entreprise | — |
| N° de TVA | Entreprise | Entreprise | Max 15. Deux lettres initiales = étranger → SDI/PEC masqués. |
| Code SDI | Entreprise + TVA italienne + facture demandée | SDI ou PEC | Max 7. |
| PEC | Entreprise + TVA italienne + facture demandée | SDI ou PEC | E-mail certifié. |
| Facture demandée | Particulier (case) | — | La cocher rend le Code fiscal obligatoire. |
| Code fiscal | Entreprise, ou Particulier + facture demandée | Particulier + facture demandée | 16 caractères (personne) ou 11 chiffres (entreprise). |
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.
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.xmlsur des interfaces core commeMagento\QuoteGraphQl\Model\Cart\QuoteAddressFactoryetMagento\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 :
| Avant | Aprè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é.
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
- Requiert les deux packages :
composer require hyva-themes/magento2-react-checkout codingrow/module-react-checkout - Ajoutez le patch de compatibilité PHP 8.4/8.5 au
composer.jsonà la racine de votre projet, puis exécutezcomposer update --lockpour qu'il soit enregistré :
(Nécessite cweagans/composer-patches ; exécutez d'abord"extra": { "patches": { "hyva-themes/magento2-react-checkout": { "PHP 8.4/8.5 compat": "vendor/codingrow/module-react-checkout/patches/react-checkout-php84-compat.patch" } } }composer require cweagans/composer-patchessi vous ne l'avez pas déjà.) - Activez les modules :
bin/magento module:enable Codingrow_ReactCheckout Hyva_ReactCheckout bin/magento setup:upgrade - Activez React Checkout :
bin/magento config:set hyva_react_checkout/general/enable 1 - Compilez l'application React :
cd vendor/codingrow/module-react-checkout/reactapp npm install npm run build - 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> 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).