Fattura Elettronica nel Checkout Magento 2: Partita IVA e PEC
Se vendi in Italia devi raccogliere i dati per la fattura elettronica direttamente durante l'acquisto: è per questo che molti store aggiungono i campi fattura elettronica nel checkout di Magento 2 per catturare Partita IVA, Codice Fiscale, codice destinatario SDI e indirizzo PEC. In questa guida vediamo come farlo in modo nativo, senza estensioni di terze parti, lavorando su attributi EAV, layout XML e validazione lato frontend.
- Creare gli attributi custom (Partita IVA, Codice Fiscale, SDI, PEC) a livello di indirizzo cliente
- Iniettarli nel form di checkout tramite un LayoutProcessor
- Validare i formati (11 cifre, 16 caratteri, 7 caratteri, email) prima dell'invio dell'ordine
- Salvare e visualizzare i dati nell'ordine e nelle email di conferma
Step 1: Creare il modulo custom
Prima di tutto serve un modulo dedicato: non modificare mai il core di Magento.
- Crea la cartella
app/code/VendorName/InvoiceFields - Aggiungi
registration.phpeetc/module.xmlcon sequenza dopoMagento_CustomereMagento_Checkout
bin/magento module:enable VendorName_InvoiceFields e poi bin/magento setup:upgrade. Step 2: Creare gli attributi custom di indirizzo
Gli attributi vanno definiti tramite una Data Patch (classe PHP), perché Magento non offre una UI per creare nuovi attributi EAV di indirizzo cliente.
- Attributo
piva– Partita IVA (11 cifre) - Attributo
codice_fiscale– Codice Fiscale (16 caratteri alfanumerici) - Attributo
sdi_code– Codice Destinatario SDI (7 caratteri) - Attributo
pec_email– indirizzo PEC (formato email)
Dopo aver eseguito la patch e bin/magento setup:upgrade, gli attributi compaiono anche in:
Ogni cliente potrà ora avere questi dati salvati sul proprio indirizzo, anche indipendentemente dal checkout.
is_required a 0 a livello di attributo e gestisci l'obbligatorietà solo nel form di checkout, così puoi differenziare B2C (dati opzionali) da B2B (dati obbligatori). Step 3: Iniettare i campi nel form di checkout
Il checkout a pagina unica usa componenti UI basati su JS: per aggiungere i campi serve un LayoutProcessor plugin che agisce su \Magento\Checkout\Block\Onepage.
- Nel plugin definisci i nuovi campi come voci del fieldset
shippingAddress.custom-attributesobillingAddress - Specifica
dataScope,label,sortOrdere le regole di validazione JS per ciascun campo
Dopo aver pulito la cache statica e rigenerato il contenuto statico, i campi appariranno nel modulo di indirizzo del checkout, sotto i campi standard come telefono e città.
requirejs-config.js. Step 4: Aggiungere la validazione dei formati
I dati per la fattura elettronica devono rispettare formati precisi definiti dall'Agenzia delle Entrate.
- Partita IVA: esattamente 11 cifre numeriche
- Codice Fiscale: 16 caratteri alfanumerici (o 11 cifre per le persone giuridiche)
- Codice SDI: 7 caratteri alfanumerici (oppure
0000000se si usa solo la PEC) - PEC: formato email valido
Aggiungi queste regole come validatori custom in validation-rule.js, registrati tramite mixins in requirejs-config.js.
Step 5: Propagare i dati dal preventivo (quote) all'ordine
Per default, gli attributi custom dell'indirizzo del cliente non vengono copiati automaticamente sull'ordine.
- Estendi anche la entità
sales_address_entitycon gli stessi attributi tramite una seconda Data Patch - Usa un observer su
sales_model_service_quote_submit_beforeper copiare i valori daquote_addressaorder_address
Con questa modifica, apri un ordine di test dopo il checkout e verifica che i campi siano visibili nella sezione indirizzo di fatturazione.
Step 6: Mostrare i dati nel pannello admin e nelle email
Una volta salvati sull'ordine, i campi vanno esposti anche a chi gestisce la fatturazione.
- Personalizza il template
Magento_Sales::order/address.phtml(in area adminhtml) per stampare Partita IVA, Codice Fiscale, SDI e PEC - Aggiungi le stesse variabili nel template dell'email
sales_email_order_itemso in un blocco custom incluso nella conferma d'ordine
Così l'ufficio contabilità e il cliente stesso vedono subito i dati fiscali inseriti.
Step 7: Pulizia cache e test finale
Prima di andare in produzione, esegui sempre un test completo del flusso.
bin/magento cache:flushbin/magento setup:static-content:deploy -f(se in modalità produzione)- Effettua un ordine di prova sia da guest che da cliente registrato
Checklist
- ☐ Modulo custom creato e attivato
- ☐ Attributi
piva,codice_fiscale,sdi_code,pec_emailcreati via Data Patch - ☐ LayoutProcessor che inietta i campi nel checkout
- ☐ Validazione JS dei formati attiva
- ☐ Dati propagati da quote a order address
- ☐ Campi visibili in admin order view e nelle email
- ☐ Test ordine completato da guest e da cliente loggato
Salva sempre una copia dei dati fiscali anche a livello di attributo del cliente (non solo dell'ordine): in caso di ordini futuri, i campi si precompileranno automaticamente riducendo gli errori di digitazione.
Errori comuni
Problema: i campi appaiono ma non vengono salvati sull'ordine.
Soluzione: manca l'estensione dell'entità sales_address_entity; ripeti lo Step 5 e verifica la Data Patch con bin/magento setup:upgrade.
Problema: la validazione JS non si attiva e l'ordine passa anche con Partita IVA errata.
Soluzione: controlla che il mixin di validation-rule.js sia effettivamente caricato, ispezionando la rete del browser per il file compilato.
Problema: i campi non sono più visibili dopo un aggiornamento di Magento.
Soluzione: verifica la compatibilità del LayoutProcessor con la nuova versione dei componenti UI del checkout e aggiorna eventuali data-bind obsoleti.
FAQ
Posso rendere obbligatori questi campi solo per i clienti business?
Sì: nel LayoutProcessor puoi condizionare la visibilità e l'obbligatorietà dei campi in base al tipo di cliente o a un flag "Acquisto per azienda", mostrando i campi fiscali solo quando serve.
Serve modificare anche il database manualmente?
No, tutte le modifiche allo schema (nuovi attributi EAV) vanno gestite tramite Data Patch e comandi bin/magento setup:upgrade, mai con query SQL dirette, per mantenere la compatibilità con futuri aggiornamenti.
Questi campi generano automaticamente la fattura elettronica XML?
No: questa guida copre solo la raccolta e il salvataggio dei dati nel checkout. La generazione del file XML in formato SDI richiede un modulo di integrazione separato o un servizio esterno di fatturazione.
Funziona anche con Magento 2 Open Source e non solo con Adobe Commerce?
Sì, tutti gli step descritti (attributi EAV, LayoutProcessor, plugin) sono disponibili nativamente in entrambe le edizioni.
Una soluzione più rapida
Sviluppare e mantenere questi attributi custom, il LayoutProcessor e la propagazione dei dati richiede tempo e competenze di sviluppo Magento. Se preferisci avere i campi Partita IVA, Codice Fiscale, SDI e PEC già pronti nel checkout, con validazione italiana integrata e gestione B2B, puoi valutare l'estensione b2bfatturazione per il checkout di Magento 2, pensata proprio per la fatturazione elettronica italiana senza dover scrivere codice.