Partita IVA, Codice Destinatario SDI, PEC e Codice Fiscale — in rubrica e in checkout, con validazioni corrette e sincronizzazione automatica sull'ordine.
✓ Licenza attiva immediatamente dopo il pagamento, ricevuta via email
✓ Installazione immediata tramite Composer
✓ Primo cambio dominio incluso e immediato (comodo per staging → produzione)
✓ Garanzia soddisfatti o rimborsati: 30 giorni
Magento 2.4.x (testato su 2.4.9) · PHP 8.1 - 8.5 (testato su PHP 8.5) · Tema Luma di default, oppure tema Hyvä (facoltativo — se presente viene usata un'interfaccia rubrica ottimizzata, testata in particolare su questo tema)
auth.json
nella root del progetto Magento:
{
"http-basic": {
"repo.codingrow.com": {
"username": "il-tuo-username",
"password": "la-tua-password"
}
}
}
composer.json del progetto:
composer config repositories.codingrow composer https://repo.codingrow.com
composer require codingrow/module-b2bfatturazione
bin/magento module:enable Codingrow_B2bFatturazione
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento cache:flush
bin/magento cache:flush.
I dati raccolti (Partita IVA, Codice Destinatario SDI, PEC, Codice Fiscale, Fattura Richiesta) sono campi standard dell'indirizzo, quindi si integrano nel sistema di Address Templates di Magento: Admin > Stores > Settings > Configuration > Customers > Customer Configuration > Address Templates. Qui Magento definisce 4 formati — Text, Text One Line, HTML, PDF — usati rispettivamente in rubrica, ordini, email ed export, e nei documenti PDF (fatture, DDT).
Se hai già un template personalizzato (non quello di default): non sovrascriverlo, aggiungi solo le righe qui sotto al tuo template esistente, per non perdere le personalizzazioni già fatte. Deseleziona "Use system value" solo sul formato che vuoi modificare.
Esempio, formato HTML (usato anche nei modelli email, Admin > Marketing > Modelli di email, stessa sintassi):
{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}}{{depend firstname}}<br />{{/depend}}
{{depend company}}{{var company}}<br />{{/depend}}
{{if street1}}{{var street1}}<br />{{/if}}
{{depend street2}}{{var street2}}<br />{{/depend}}
{{depend street3}}{{var street3}}<br />{{/depend}}
{{depend street4}}{{var street4}}<br />{{/depend}}
{{if city}}{{var city}}, {{/if}}{{if region}}{{var region}}, {{/if}}{{if postcode}}{{var postcode}}{{/if}}<br />
{{var country}}<br />
{{depend telephone}}T: <a href="tel:{{var telephone}}">{{var telephone}}</a>{{/depend}}
{{depend fax}}<br />F: {{var fax}}{{/depend}}<br />
{{depend vat_id}}P.IVA: {{var vat_id}}{{/depend}}<br />
{{depend sdi}}SDI: {{var sdi}}{{/depend}}<br />
{{depend pec}}PEC: {{var pec}}{{/depend}}<br />
{{depend codice_fiscale}}Codice Fiscale: {{var codice_fiscale}}{{/depend}}<br />
{{depend fattura_richiesta}}Fattura Richiesta: Si{{/depend}}<br />
Esempio, formato PDF (stessa logica, il separatore di riga è | invece di <br />):
{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}}|
{{depend company}}{{var company}}|{{/depend}}
{{if street1}}{{var street1}}|{{/if}}
{{depend street2}}{{var street2}}|{{/depend}}
{{depend street3}}{{var street3}}|{{/depend}}
{{depend street4}}{{var street4}}|{{/depend}}
{{if city}}{{var city}}, {{/if}}{{if region}}{{var region}}, {{/if}}{{if postcode}}{{var postcode}}{{/if}}|
{{var country}}|
{{depend telephone}}T: {{var telephone}}|{{/depend}}
{{depend fax}}F: {{var fax}}|{{/depend}}|
{{depend vat_id}}P.IVA: {{var vat_id}} | {{/depend}}
{{depend sdi}}SDI: {{var sdi}} | {{/depend}}
{{depend pec}}PEC: {{var pec}} | {{/depend}}
{{depend codice_fiscale}}Codice Fiscale: {{var codice_fiscale}} | {{/depend}}
{{depend fattura_richiesta}}Fattura Richiesta: Si | {{/depend}}
Questi sono template di esempio, da adattare al layout che preferisci (o da fondere col tuo, se già personalizzato) — non vanno incollati alla cieca se hai altre modifiche in corso.
bin/magento module:uninstall Codingrow_B2bFatturazione
Il comando disabilita il modulo, esegue composer remove
codingrow/module-b2bfatturazione automaticamente e lancia
setup:upgrade. Se preferisci farlo a mano, passo per passo:
bin/magento module:disable Codingrow_B2bFatturazione
composer remove codingrow/module-b2bfatturazione
bin/magento setup:upgrade
Hai 30 giorni di tempo dall'acquisto per richiedere il rimborso completo, senza dover spiegare il motivo: basta accedere alla tua area riservata (codingrow.com/login) e cliccare su "Richiedi rimborso". Il rimborso viene elaborato subito, in automatico. Alla conferma del rimborso la licenza viene disattivata.
Versione attuale: v1.2.1 — rilasciata il 6 luglio 2026
Il modulo è stato sviluppato e affinato attraverso una beta chiusa a partire da giugno 2026, prima del rilascio pubblico.
Fix su tema Luma: in alcune configurazioni la pagina "Modifica indirizzo" restituiva un errore. Corretto e verificato con test end-to-end reali.
Aggiunto il supporto al tema Luma di default (in precedenza il tema Hyvä era obbligatorio): il modulo ora rileva il tema attivo e usa l'interfaccia rubrica indirizzi corretta in entrambi i casi.
Verifica online di revoca della licenza (con cache 24h e funzionamento offline garantito in caso di mancata risposta del server), a supporto della garanzia soddisfatti o rimborsati.
Prima release pubblica. Gestione completa di Partita IVA (Italia ed estero UE), Codice Destinatario SDI, PEC e Codice Fiscale, con checkbox "Richiedi Fattura" disponibile sia per privati che per aziende. Validazione di formato e obbligatorietà incrociata, sincronizzazione automatica carrello → ordine, compatibilità con il checkout Hyvä (Luma). Sistema di licenza per dominio.
Fix: i dati B2B (Partita IVA, SDI, PEC, Codice Fiscale) potevano perdersi nel passaggio da carrello a ordine e rubrica cliente. Estese le validazioni anche lato server, per restare valide pure quando un indirizzo viene modificato da admin.
Fix: da admin era possibile attivare "Richiedi Fattura" per un privato senza Codice Fiscale. Corretta l'obbligatorietà incrociata di SDI/PEC, differenziata tra aziende italiane, aziende estere e privati.
Fix: il tipo cliente (privato/azienda) in admin era un campo di testo libero invece di un menu vincolato, con conseguente possibilità di valori incoerenti.
Avvio della beta chiusa: gestione base di Partita IVA e Codice Fiscale in rubrica e checkout.
Prima del rilascio pubblico, il modulo è stato messo alla prova su tutte le combinazioni rilevanti di tipo cliente, indirizzo e fatturazione. Alcuni dei casi affrontati e risolti: