← All modules
Documentation Blog Sign in to your licenses Contact
codingrow.com — Human thought, digital logic. The Magento plugin for Italian electronic invoicing

Italian B2B invoicing, done right

VAT number, SDI recipient code, PEC certified email and Fiscal Code — in the address book and checkout, with correct validation and automatic order sync. Handles both business customers (VAT number, SDI/PEC) and individuals (Fiscal Code), in one module.

€99.00 + VAT
Indicative total, incl. Italian VAT: €120.78 — the exact amount is calculated at checkout and is waived for EU business buyers with a valid VAT number (reverse charge).
one-time payment · one domain · perpetual license, 1 year of updates & support (renew at −35%)

✓ License active immediately after payment, sent by email

✓ Instant installation via Composer

✓ First domain change included and instant (handy for staging → production)

✓ 30-day money-back guarantee

What's included

The module in action

Tap to enlarge


Requirements

Magento 2.4.x (tested on 2.4.9) · PHP 8.1 - 8.5 (tested on PHP 8.5) · Default Luma theme, or Hyvä theme (optional — if present, an optimized address book UI is used, specifically tested on this theme)

Installation

  1. Get your credentials — right after purchase you'll receive your license key and private Composer repository credentials by email, instantly.
  2. Configure repository access in the auth.json file at the root of your Magento project:
    { "http-basic": { "repo.codingrow.com": { "username": "your-username", "password": "your-password" } } }
  3. Add the repository to the project's composer.json:
    composer config repositories.codingrow composer https://repo.codingrow.com
  4. Install the module:
    composer require codingrow/module-b2bfatturazione
  5. Enable it and run the upgrade:
    bin/magento module:enable Codingrow_B2bFatturazione bin/magento setup:upgrade bin/magento setup:di:compile bin/magento cache:flush
  6. Activate the license under Admin > Store > Configuration > Codingrow > B2bFatturazione, pasting the key you received by email into the "License Key" field. Save and run bin/magento cache:flush.

Customizing fields in addresses, emails and PDF

The collected data (VAT number, SDI recipient code, PEC, Fiscal Code, Invoice Requested) are standard address fields, so they fit into Magento's own Address Templates system: Admin > Stores > Settings > Configuration > Customers > Customer Configuration > Address Templates. Magento defines 4 formats here — Text, Text One Line, HTML, PDF — used respectively in the address book, orders, emails/exports, and in PDF documents (invoices, shipment notes).

If you already have a customized template (not the default one): don't overwrite it, just add the lines below to your existing template, so you don't lose your previous customizations. Uncheck "Use system value" only on the format you want to change.

Example, HTML format (also used in email templates, Admin > Marketing > Email Templates, same syntax):

{{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}}VAT: {{var vat_id}}{{/depend}}<br />
{{depend sdi}}SDI: {{var sdi}}{{/depend}}<br />
{{depend pec}}PEC: {{var pec}}{{/depend}}<br />
{{depend codice_fiscale}}Fiscal Code: {{var codice_fiscale}}{{/depend}}<br />
{{depend fattura_richiesta}}Invoice Requested: Yes{{/depend}}<br />

Example, PDF format (same logic, the line separator is | instead of <br />):

These are example templates, meant to be adapted to the layout you prefer (or merged into yours, if already customized) — don't paste them blindly if you have other changes in progress.

Uninstallation

  1. Disable, uninstall and remove from composer.json:
    bin/magento module:uninstall Codingrow_B2bFatturazione
    This disables the module, automatically runs composer remove codingrow/module-b2bfatturazione, and runs setup:upgrade. If you'd rather do it step by step:
    bin/magento module:disable Codingrow_B2bFatturazione composer remove codingrow/module-b2bfatturazione bin/magento setup:upgrade
  2. Note on data: the saved fields (VAT number, SDI, PEC, Fiscal Code, Customer Type) remain in the address book and order database even after uninstalling — they are not automatically deleted, to avoid losing historical data. If you want to remove them entirely, a manual database action is required.

Money-back guarantee

You have 30 days from purchase to request a full refund, no questions asked: just sign in to your account area (codingrow.com/login) and click "Request refund". The refund is processed instantly, automatically. Once the refund is confirmed, the license is deactivated.

Changelog

Current version: v1.3.8 — released on 25 September 2026

The module was developed and refined through a closed beta starting in June 2026, before the public release.

v1.3.8MaintenanceSeptember 25, 2026
At checkout the “Request Invoice” checkbox appeared unstyled and stuck to the field below it: fixed.
v1.3.6NewAugust 15, 2026
  • It accepts the subscription key: one subscription activates this module along with the others.
  • Single-module licences keep working exactly as before.
v1.3.1 – v1.3.5MaintenanceAugust 4–5, 2026
The B2B fields now show on the shipping address, on an address picked from the address book, and in the admin summaries.
v1.3.0NewAugust 3, 2026
  • Full GraphQL support: the B2B fields are available on the cart addresses.
  • Needed by any checkout that goes through it, such as Hyvä's React Checkout.
v1.2.2 – v1.2.3MaintenanceJuly 23, 2026
Touches to the configuration page: a heading with the version number, and one needless divider gone.
v1.2.1MaintenanceJuly 6, 2026
Fix on the Luma theme: in some configurations the "Edit address" page returned an error. Fixed and verified with real end-to-end tests.
v1.2.0NewJuly 6, 2026
  • Support for the Luma theme; before, Hyvä was required.
  • The module detects the active theme and uses the right address book.
v1.1.0MaintenanceJuly 6, 2026
In support of the money-back guarantee.
v1.0.0NewJuly 6, 2026
  • First public version: VAT number (Italy and EU), recipient code, certified mail and tax code.
  • An Invoice requested checkbox for private customers and companies alike.
  • Format and cross-required checks, and the data travels from cart to order.
v0.4.0-betaMaintenanceJune 29, 2026
The B2B data no longer gets lost going from cart to order and address book, and the checks hold when an address is edited in the admin too.
v0.3.0-betaMaintenanceJune 22, 2026
You can no longer tick "Invoice requested" for a private customer with no tax code, and the requirement tells Italian firms, foreign firms and private customers apart.
v0.2.0-betaMaintenanceJune 15, 2026
Fix: customer type (individual/company) in admin was free text instead of a locked dropdown, which could lead to inconsistent values.
v0.1.0-betaNewJune 8, 2026
  • Closed beta begins: basic handling of VAT number and tax code.
  • Available in the address book and at checkout.

Testing and reliability

Before the public release, the module was tested against all the relevant combinations of customer type, address and invoicing. Some of the cases addressed and fixed:

Frequently asked questions

Which fields does it add at checkout?
Italian e-invoicing fields — VAT number, tax code, SDI code and PEC — with private/company logic.
Does it validate the data?
Yes, it validates VAT, tax code, SDI and PEC and asks only for what that customer type needs.
Is it compatible with Hyvä and Luma?
Yes, it works on both Hyvä and Luma.
I installed the module but only some fields show at checkout. Why?
In production mode the module files must be published with setup:static-content:deploy -f: until they are, the browser cannot find them and the checkout stops halfway. After the deploy and a cache flush every field is back.
New guides, when they go live

One hands-on Magento 2 guide per email, only when we publish one. Nothing else.

Articles are written in English. One click to unsubscribe, in every email. · privacy