codingrow.comBlog

Fattura Elettronica nel Checkout Magento 2: Partita IVA e PEC

By R.S.C. · Published 2026-09-04

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.php e etc/module.xml con sequenza dopo Magento_Customer e Magento_Checkout
`SystemWeb Setup Wizard` (solo per verificare che il modulo sia riconosciuto dopo l'attivazione)
Dopo aver creato i file, esegui 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)
`piva`, `codice_fiscale`, `sdi_code`, `pec_email`

Dopo aver eseguito la patch e bin/magento setup:upgrade, gli attributi compaiono anche in:

`CustomersAll Customers[seleziona cliente]Addresses`

Ogni cliente potrà ora avere questi dati salvati sul proprio indirizzo, anche indipendentemente dal checkout.

Imposta 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-attributes o billingAddress
  • Specifica dataScope, label, sortOrder e le regole di validazione JS per ciascun campo
`Partita IVA`, `Codice Fiscale`, `Codice Destinatario SDI`, `PEC`

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à.

Se i campi non compaiono, controlla la console del browser: quasi sempre è un errore di sintassi nel JSON del LayoutProcessor o una dipendenza JS mancante nel 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 0000000 se 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.

Mostra un messaggio di errore in italiano chiaro, ad esempio "La Partita IVA deve contenere 11 cifre", per evitare abbandoni del carrello dovuti a errori poco comprensibili.

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_entity con gli stessi attributi tramite una seconda Data Patch
  • Usa un observer su sales_model_service_quote_submit_before per copiare i valori da quote_address a order_address
`SalesOrders[apri un ordine di test]`

Con questa modifica, apri un ordine di test dopo il checkout e verifica che i campi siano visibili nella sezione indirizzo di fatturazione.

Se salti questo passaggio, i dati resteranno visibili solo nell'account cliente ma non nell'ordine, rendendo impossibile l'emissione corretta della fattura elettronica.

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_items o in un blocco custom incluso nella conferma d'ordine
`MarketingCommunicationsEmail Templates`
`New Order` (personalizzato con i nuovi campi)

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:flush
  • bin/magento setup:static-content:deploy -f (se in modalità produzione)
  • Effettua un ordine di prova sia da guest che da cliente registrato
`StoresConfigurationAdvancedDeveloper` (verifica la modalità cache durante i test)
Testa anche il caso limite di un cliente B2B con più indirizzi salvati: i valori di Partita IVA e SDI devono restare associati all'indirizzo corretto, non genericamente al profilo cliente.

Checklist

  • ☐ Modulo custom creato e attivato
  • ☐ Attributi piva, codice_fiscale, sdi_code, pec_email creati 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.

Questions & Answers

No questions yet — be the first to ask.

Ask a question

Public. Shown only after moderation. No spam.