Documentazione B2bFatturazione

Passaggi di installazione e tutto ciò che serve per esporre i campi B2B tramite il tuo storefront, inclusi i checkout headless/GraphQL come React Checkout.

Installazione

Requisiti

Magento 2.4.x — testato su 2.4.9, compatibile con le versioni 2.4.* precedenti. PHP 8.1–8.5. Compatibile sia con il tema Luma di default sia con il tema Hyvä.

Passaggi di setup

  1. Aggiungi le credenziali ricevute via email ad auth.json nella root del progetto Magento:
    { "http-basic": { "repo.codingrow.com": { "username": "...", "password": "..." } } }
  2. composer config repositories.codingrow composer https://repo.codingrow.com
  3. composer require codingrow/module-b2bfatturazione
  4. bin/magento module:enable Codingrow_B2bFatturazione
  5. bin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush
  6. Incolla la chiave di licenza in Admin → Stores → Configuration → Codingrow Extensions → B2bFatturazione → License → License Key, salva, poi bin/magento cache:flush. La chiave è vincolata al dominio dichiarato in fase di acquisto — su qualsiasi altro dominio il modulo resta installato ma i suoi campi restano disabilitati.
  7. Se il sito gira in modalità production, ridistribuisci anche il contenuto statico: bin/magento setup:static-content:deploy -f.

Disinstallazione

composer remove codingrow/module-b2bfatturazione poi bin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush.

Documentazione

Cosa fa

Questo è un modulo deliberatamente piccolo e mirato: aggiunge cinque campi — Tipo Cliente (azienda/privato), Partita IVA, Codice SDI, PEC (posta elettronica certificata) e Codice Fiscale — alla rubrica indirizzi del cliente e al checkout (fatturazione e spedizione), sia sul tema Luma di default sia su Hyvä. Non c'è alcuna configurazione oltre all'installazione e all'inserimento della chiave di licenza; funziona subito una volta installato.

CampoVisibile quandoObbligatorio quandoFormato / note
Tipo AccountsempresemprePrivato / Azienda. Governa tutto il resto.
Ragione SocialeAziendaAzienda—
Partita IVAAziendaAziendaMax 15. Due lettere iniziali = estera → SDI/PEC nascosti.
Codice SDIAzienda + P.IVA italiana + fattura richiestaSDI o PECMax 7.
PECAzienda + P.IVA italiana + fattura richiestaSDI o PECEmail certificata.
Richiedi FatturaPrivato (checkbox)—Spuntandola diventa obbligatorio il Codice Fiscale.
Codice FiscaleAzienda, o Privato + fattura richiestaPrivato + fattura richiesta16 caratteri (persona) o 11 cifre (azienda).
The B2B fiscal fields on the storefront address form (Customer Type set to Business): VAT number, SDI, PEC, Fiscal Code

The same fields appear in checkout (billing and shipping) and in the admin customer address book.

Configurazione admin

Non c’è alcuna configurazione di comportamento: l’unica impostazione admin è la chiave di licenza. Tutto il resto (quali campi compaiono, quando sono obbligatori) è automatico.

B2bFatturazione admin configuration: a single License Key field

Compatibilità GraphQL / headless & React Checkout

I cinque campi B2B sono esposti tramite i tipi e le mutation GraphQL core di Magento — non un'API personalizzata. Se il tuo storefront è basato su GraphQL (React Checkout, o qualsiasi altro frontend headless/GraphQL), leggi e scrivi questi campi esattamente come qualsiasi altro campo indirizzo nativo, tramite le mutation che stai già usando.

Leggere i campi

customer_type, sdi, pec, codice_fiscale e fattura_richiesta sono aggiunti direttamente ai tipi BillingCartAddress, ShippingCartAddress e CustomerAddress di Magento:

{
  customerCart {
    billing_address {
      customer_type
      sdi
      pec
      codice_fiscale
      fattura_richiesta
    }
  }
}
{
  customer {
    addresses {
      customer_type
      sdi
      pec
      codice_fiscale
      fattura_richiesta
    }
  }
}

Scrivere i campi

Gli stessi cinque campi sono aggiunti al tipo core CartAddressInput di Magento, quindi vengono passati insieme ai normali campi indirizzo nelle mutation standard del carrello — nessuna mutation separata da chiamare:

mutation {
  setShippingAddressesOnCart(
    input: {
      cart_id: "abc123"
      shipping_addresses: [
        {
          address: {
            firstname: "Mario"
            lastname: "Rossi"
            street: ["Via Roma 1"]
            city: "Milano"
            postcode: "20100"
            country_code: "IT"
            telephone: "+390000000"
            customer_type: "azienda"
            sdi: "ABC1234"
            pec: "mario.rossi@pec.it"
            codice_fiscale: "RSSMRA80A01F205X"
          }
        }
      ]
    }
  ) {
    cart { id }
  }
}

Note implementative

  • Tutto questo avviene tramite i punti di estensione ufficiali di Magento (plugin di.xml su interfacce core come Magento\QuoteGraphQl\Model\Cart\QuoteAddressFactory e Magento\CustomerGraphQl\Model\Customer\Address\ExtractCustomerAddressData) — nessuna patch o copia del codice del resolver GraphQL core.
  • La validazione lato server (es. "SDI o PEC è obbligatorio per un cliente azienda") funziona allo stesso modo indipendentemente dallo storefront che chiama la mutation — REST, GraphQL, o il checkout Luma di default.
  • fattura_richiesta (fattura richiesta) si applica solo ai clienti privati — i clienti azienda ricevono sempre fattura per legge, quindi il campo ha senso specificamente per il caso "privato".

Visualizzazione accurata dell'indirizzo in admin

Il riepilogo dell'indirizzo di fatturazione/spedizione predefinito del cliente in Customers → All Customers → [customer] → Addresses, e nella scheda Customer View, ora include anche i campi B2B — non solo l'indirizzo base:

PrimaDopo
Mario Rossi
Mario Rossi S.r.l.
Via dei Test, 1
Roma, RM, 00100
Italia
T: 333 1122334
P.IVA: 01234567891
Mario Rossi
Mario Rossi S.r.l.
Via dei Test, 1
Roma, RM, 00100
Italia
T: 333 1122334
Tipo Cliente: azienda
P.IVA: 01234567891
SDI: ABCDEFG
PEC: mario.rossi@pec.it
Codice Fiscale: RSSMRA80A01H501V

React Checkout: pronto all'uso, senza sviluppo aggiuntivo

Codingrow mantiene anche codingrow/module-react-checkout, un piccolo pacchetto complementare che aggiunge il vero form di fatturazione B2B (tipo cliente, Partita IVA, SDI, PEC, Codice Fiscale) al React Checkout di Hyvä — l'interfaccia sopra i campi GraphQL documentati qui sopra. Installa entrambi insieme e il form di fatturazione funziona subito, senza sviluppo personalizzato.

Include anche una nostra patch di compatibilità che rende React Checkout effettivamente funzionante su PHP 8.4 e 8.5. Il pacchetto originale è precedente alla gestione più severa dei deprecation di PHP 8.4 — i parametri nullable impliciti e una chiamata a str_getcsv() senza escape generano entrambi errori fatali sotto l'error handler di Magento su 8.4+, non semplici warning, il che altrimenti renderebbe React Checkout inutilizzabile su uno stack PHP moderno. Questa patch viene applicata automaticamente come parte dell'installazione qui sotto.

Installare React Checkout con supporto B2B

  1. Richiedi entrambi i pacchetti:
    composer require hyva-themes/magento2-react-checkout codingrow/module-react-checkout
  2. Aggiungi la patch di compatibilità PHP 8.4/8.5 al composer.json nella root del progetto, poi esegui composer update --lock per registrarla:
    "extra": {
        "patches": {
            "hyva-themes/magento2-react-checkout": {
                "PHP 8.4/8.5 compat": "vendor/codingrow/module-react-checkout/patches/react-checkout-php84-compat.patch"
            }
        }
    }
    (Richiede cweagans/composer-patches; esegui prima composer require cweagans/composer-patches se non lo hai già.)
  3. Abilita i moduli:
    bin/magento module:enable Codingrow_ReactCheckout Hyva_ReactCheckout
    bin/magento setup:upgrade
  4. Attiva React Checkout: bin/magento config:set hyva_react_checkout/general/enable 1
  5. Compila l'app React:
    cd vendor/codingrow/module-react-checkout/reactapp
    npm install
    npm run build
  6. Ridistribuisci il contenuto statico — necessario ogni volta, anche fuori dalla modalità production; altrimenti il browser potrebbe continuare a caricare una versione obsoleta:
    bin/magento setup:static-content:deploy -f en_US --theme <your-theme>
  7. bin/magento cache:flush

Requisiti: Magento 2.4.9, PHP 8.1–8.5 (incluso 8.4/8.5, tramite la patch inclusa).