Installazione
Requisiti
Magento 2.4.x — testato su 2.4.9, compatibile con le versioni 2.4.* precedenti. PHP 8.1–8.5. Compatibile sia con il tema Luma di default sia con il tema Hyvä.
Passaggi di setup
- Aggiungi le credenziali ricevute via email ad
auth.jsonnella root del progetto 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- Incolla la chiave di licenza in Admin → Stores → Configuration → Codingrow Extensions → B2bFatturazione → License → License Key, salva, poi
bin/magento cache:flush. La chiave è vincolata al dominio dichiarato in fase di acquisto — su qualsiasi altro dominio il modulo resta installato ma i suoi campi restano disabilitati. - Se il sito gira in modalità
production, ridistribuisci anche il contenuto statico:bin/magento setup:static-content:deploy -f.
Disinstallazione
composer remove codingrow/module-b2bfatturazione poi
bin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush.
Documentazione
Cosa fa
Questo è un modulo deliberatamente piccolo e mirato: aggiunge cinque campi — Tipo Cliente (azienda/privato), Partita IVA, Codice SDI, PEC (posta elettronica certificata) e Codice Fiscale — alla rubrica indirizzi del cliente e al checkout (fatturazione e spedizione), sia sul tema Luma di default sia su Hyvä. Non c'è alcuna configurazione oltre all'installazione e all'inserimento della chiave di licenza; funziona subito una volta installato.
| Campo | Visibile quando | Obbligatorio quando | Formato / note |
|---|---|---|---|
| Tipo Account | sempre | sempre | Privato / Azienda. Governa tutto il resto. |
| Ragione Sociale | Azienda | Azienda | — |
| Partita IVA | Azienda | Azienda | Max 15. Due lettere iniziali = estera → SDI/PEC nascosti. |
| Codice SDI | Azienda + P.IVA italiana + fattura richiesta | SDI o PEC | Max 7. |
| PEC | Azienda + P.IVA italiana + fattura richiesta | SDI o PEC | Email certificata. |
| Richiedi Fattura | Privato (checkbox) | — | Spuntandola diventa obbligatorio il Codice Fiscale. |
| Codice Fiscale | Azienda, o Privato + fattura richiesta | Privato + fattura richiesta | 16 caratteri (persona) o 11 cifre (azienda). |
The same fields appear in checkout (billing and shipping) and in the admin customer address book.
Configurazione admin
Non c’è alcuna configurazione di comportamento: l’unica impostazione admin è la chiave di licenza. Tutto il resto (quali campi compaiono, quando sono obbligatori) è automatico.
Compatibilità GraphQL / headless & React Checkout
I cinque campi B2B sono esposti tramite i tipi e le mutation GraphQL core di Magento — non un'API personalizzata. Se il tuo storefront è basato su GraphQL (React Checkout, o qualsiasi altro frontend headless/GraphQL), leggi e scrivi questi campi esattamente come qualsiasi altro campo indirizzo nativo, tramite le mutation che stai già usando.
Leggere i campi
customer_type, sdi, pec, codice_fiscale e
fattura_richiesta sono aggiunti direttamente ai tipi BillingCartAddress,
ShippingCartAddress e CustomerAddress di Magento:
{
customerCart {
billing_address {
customer_type
sdi
pec
codice_fiscale
fattura_richiesta
}
}
}
{
customer {
addresses {
customer_type
sdi
pec
codice_fiscale
fattura_richiesta
}
}
}
Scrivere i campi
Gli stessi cinque campi sono aggiunti al tipo core CartAddressInput di Magento, quindi
vengono passati insieme ai normali campi indirizzo nelle mutation standard del carrello — nessuna mutation
separata da chiamare:
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 }
}
}
Note implementative
- Tutto questo avviene tramite i punti di estensione ufficiali di Magento (plugin
di.xmlsu interfacce core comeMagento\QuoteGraphQl\Model\Cart\QuoteAddressFactoryeMagento\CustomerGraphQl\Model\Customer\Address\ExtractCustomerAddressData) — nessuna patch o copia del codice del resolver GraphQL core. - La validazione lato server (es. "SDI o PEC è obbligatorio per un cliente azienda") funziona allo stesso modo indipendentemente dallo storefront che chiama la mutation — REST, GraphQL, o il checkout Luma di default.
fattura_richiesta(fattura richiesta) si applica solo ai clienti privati — i clienti azienda ricevono sempre fattura per legge, quindi il campo ha senso specificamente per il caso "privato".
Visualizzazione accurata dell'indirizzo in admin
Il riepilogo dell'indirizzo di fatturazione/spedizione predefinito del cliente in Customers → All Customers → [customer] → Addresses, e nella scheda Customer View, ora include anche i campi B2B — non solo l'indirizzo base:
| Prima | Dopo |
|---|---|
| Mario Rossi Mario Rossi S.r.l. Via dei Test, 1 Roma, RM, 00100 Italia T: 333 1122334 P.IVA: 01234567891 |
Mario Rossi Mario Rossi S.r.l. Via dei Test, 1 Roma, RM, 00100 Italia T: 333 1122334 Tipo Cliente: azienda P.IVA: 01234567891 SDI: ABCDEFG PEC: mario.rossi@pec.it Codice Fiscale: RSSMRA80A01H501V |
React Checkout: pronto all'uso, senza sviluppo aggiuntivo
Codingrow mantiene anche codingrow/module-react-checkout, un piccolo pacchetto complementare che aggiunge il vero form di fatturazione B2B (tipo cliente, Partita IVA, SDI, PEC, Codice Fiscale) al React Checkout di Hyvä — l'interfaccia sopra i campi GraphQL documentati qui sopra. Installa entrambi insieme e il form di fatturazione funziona subito, senza sviluppo personalizzato.
str_getcsv() senza escape
generano entrambi errori fatali sotto l'error handler di Magento su 8.4+, non semplici warning, il che
altrimenti renderebbe React Checkout inutilizzabile su uno stack PHP moderno. Questa patch viene applicata automaticamente
come parte dell'installazione qui sotto.Installare React Checkout con supporto B2B
- Richiedi entrambi i pacchetti:
composer require hyva-themes/magento2-react-checkout codingrow/module-react-checkout - Aggiungi la patch di compatibilità PHP 8.4/8.5 al
composer.jsonnella root del progetto, poi eseguicomposer update --lockper registrarla:
(Richiede cweagans/composer-patches; esegui prima"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-patchesse non lo hai già.) - Abilita i moduli:
bin/magento module:enable Codingrow_ReactCheckout Hyva_ReactCheckout bin/magento setup:upgrade - Attiva React Checkout:
bin/magento config:set hyva_react_checkout/general/enable 1 - Compila l'app React:
cd vendor/codingrow/module-react-checkout/reactapp npm install npm run build - Ridistribuisci il contenuto statico — necessario ogni volta, anche fuori dalla modalità
production; altrimenti il browser potrebbe continuare a caricare una versione obsoleta:bin/magento setup:static-content:deploy -f en_US --theme <your-theme> bin/magento cache:flush
Requisiti: Magento 2.4.9, PHP 8.1–8.5 (incluso 8.4/8.5, tramite la patch inclusa).