B2bFatturazioneDocumentación

Documentación de B2bFatturazione

Pasos de instalación y todo lo necesario para exponer los campos B2B a través de tu propio storefront, incluidos los checkouts headless/GraphQL como React Checkout.

Ver como Markdown

Instalación

Requisitos

Magento 2.4.x — probado en 2.4.9, compatible con versiones 2.4.* anteriores. PHP 8.1–8.5. Compatible tanto con el tema Luma por defecto como con el tema Hyvä.

Pasos de configuración

  1. Añade las credenciales que recibirás por email a auth.json en la raíz de tu proyecto 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. Pega tu clave de licencia en Admin → Stores → Configuration → Codingrow Extensions → B2bFatturazione → License → License Key, guarda, y luego bin/magento cache:flush. La clave está vinculada al dominio declarado en la compra — en cualquier otro dominio el módulo permanece instalado pero sus campos quedan deshabilitados.
  7. Si el sitio se ejecuta en modo production, vuelve a desplegar también el contenido estático: bin/magento setup:static-content:deploy -f.

Desinstalación

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

Documentación

Qué hace

Este es un módulo deliberadamente pequeño y enfocado: añade cinco campos — Tipo de cliente (empresa/particular), número de IVA, código SDI, PEC (correo certificado) y Código Fiscal — a la libreta de direcciones del cliente y al checkout (facturación y envío), tanto en el tema Luma por defecto como en Hyvä. No hay ninguna configuración más allá de instalarlo y pegar la clave de licencia; funciona nada más instalarlo.

Compatibilidad con GraphQL / headless & React Checkout

Los cinco campos B2B se exponen a través de los tipos y mutations GraphQL core de Magento — no una API personalizada. Si tu storefront está basado en GraphQL (React Checkout, o cualquier otro frontend headless/GraphQL), lees y escribes estos campos exactamente igual que cualquier otro campo de dirección nativo, a través de las mutations que ya estás usando.

Leer los campos

customer_type, sdi, pec, codice_fiscale y fattura_richiesta se añaden directamente a los tipos BillingCartAddress, ShippingCartAddress y CustomerAddress de Magento:

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

Escribir los campos

Los mismos cinco campos se añaden al tipo core CartAddressInput de Magento, así que se envían junto con los campos de dirección normales en las mutations estándar del carrito — no hay que llamar a ninguna mutation aparte:

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 }
  }
}

Notas de implementación

  • Todo esto se hace a través de los puntos de extensión oficiales de Magento (plugins di.xml sobre interfaces core como Magento\QuoteGraphQl\Model\Cart\QuoteAddressFactory y Magento\CustomerGraphQl\Model\Customer\Address\ExtractCustomerAddressData) — no se parchea ni se copia código del resolver GraphQL core.
  • La validación del lado del servidor (p. ej. "SDI o PEC es obligatorio para un cliente empresa") funciona de la misma manera sin importar qué storefront llame a la mutation — REST, GraphQL, o el checkout Luma por defecto.
  • fattura_richiesta (factura solicitada) solo se aplica a clientes particulares — los clientes empresa siempre reciben factura por ley, así que el campo tiene sentido específicamente para el caso "particular" ("privato").

Visualización precisa de la dirección en el admin

El resumen de la dirección de facturación/envío por defecto del cliente en Customers → All Customers → [customer] → Addresses, y en la pestaña Customer View, ahora incluye también los campos B2B — no solo la dirección base:

AntesDespués
Mario Rossi
Mario Rossi S.r.l.
Via dei Test, 1
Roma, RM, 00100
Italia
T: 333 1122334
IVA: 01234567891
Mario Rossi
Mario Rossi S.r.l.
Via dei Test, 1
Roma, RM, 00100
Italia
T: 333 1122334
Tipo de cliente: azienda
IVA: 01234567891
SDI: ABCDEFG
PEC: mario.rossi@pec.it
Código Fiscal: RSSMRA80A01H501V

React Checkout: listo para usar, sin desarrollo adicional

Codingrow también mantiene codingrow/module-react-checkout, un pequeño paquete complementario que añade el formulario de facturación B2B real (tipo de cliente, IVA, SDI, PEC, Código Fiscal) al React Checkout de Hyvä — la interfaz sobre los campos GraphQL documentados arriba. Instala ambos juntos y el formulario de facturación funciona de inmediato, sin desarrollo personalizado.

También incluye nuestro propio parche de compatibilidad que hace que React Checkout funcione realmente en PHP 8.4 y 8.5. El paquete original es anterior a la gestión más estricta de deprecaciones de PHP 8.4 — los parámetros nullable implícitos y una llamada a str_getcsv() sin escapar provocan ambos errores fatales bajo el error handler de Magento en 8.4+, no simples avisos, lo que de otro modo haría que React Checkout fuera inutilizable en un stack PHP moderno. Este parche se aplica automáticamente como parte de la instalación de abajo.

Instalar React Checkout con soporte B2B

  1. Requiere ambos paquetes:
    composer require hyva-themes/magento2-react-checkout codingrow/module-react-checkout
  2. Añade el parche de compatibilidad PHP 8.4/8.5 al composer.json de la raíz de tu proyecto, y luego ejecuta composer update --lock para que quede registrado:
    "extra": {
        "patches": {
            "hyva-themes/magento2-react-checkout": {
                "PHP 8.4/8.5 compat": "vendor/codingrow/module-react-checkout/patches/react-checkout-php84-compat.patch"
            }
        }
    }
    (Requiere cweagans/composer-patches; ejecuta primero composer require cweagans/composer-patches si aún no lo tienes.)
  3. Habilita los módulos:
    bin/magento module:enable Codingrow_ReactCheckout Hyva_ReactCheckout
    bin/magento setup:upgrade
  4. Activa React Checkout: bin/magento config:set hyva_react_checkout/general/enable 1
  5. Compila la app React:
    cd vendor/codingrow/module-react-checkout/reactapp
    npm install
    npm run build
  6. Vuelve a desplegar el contenido estático — necesario cada vez, incluso fuera del modo production; de lo contrario el navegador puede seguir cargando un paquete obsoleto:
    bin/magento setup:static-content:deploy -f en_US --theme <your-theme>
  7. bin/magento cache:flush

Requisitos: Magento 2.4.9, PHP 8.1–8.5 (incluido 8.4/8.5, mediante el parche incluido).