← All modules
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 + VAT one-time payment · per domain · updates included

Total price, VAT included: €120.78

✓ 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

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 />):

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

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.2.1 — released on July 6, 2026

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

v1.2.1July 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.0July 6, 2026

Added support for the default Luma theme (previously the Hyvä theme was required): the module now detects the active theme and uses the correct address book UI in either case.

v1.1.0July 6, 2026

Online license revocation check (24h cache, fails open if the server doesn't respond), supporting the money-back guarantee.

v1.0.0July 6, 2026

First public release. Full support for VAT number (Italy and foreign EU), SDI recipient code, PEC and Fiscal Code, with an "Invoice Requested" checkbox available to both individuals and companies. Format validation and cross-requirement logic, automatic cart → order sync, compatibility with the Hyvä (Luma) checkout. Per-domain license system.

v0.4.0-betaJune 29, 2026

Fix: B2B data (VAT number, SDI, PEC, Fiscal Code) could be lost when moving from cart to order and address book. Validation extended to the server side as well, so it still applies when an address is edited from admin.

v0.3.0-betaJune 22, 2026

Fix: from admin it was possible to enable "Invoice Requested" for an individual without a Fiscal Code. Fixed the SDI/PEC cross-requirement logic, differentiated between Italian companies, foreign companies and individuals.

v0.2.0-betaJune 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-betaJune 8, 2026

Closed beta kickoff: basic VAT number and Fiscal Code support in the address book and 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: