WooCommerce Italian Add-on consente di modificare o aggiungere sezioni alla fattura elettronica standard. Per far questo usiamo un filtro che ci consente di modificare il testo XML della fattura.

L'ipotesi è di aggiungere una funzione nel file function.php del tema in uso. Ecco lo schema:

function modifica_fattura_elettronica($result_array, $order ) {
  // ricavo la stringa XML della fattura elettronica
  $xml = $result_array["xml"];
  //... modifico il tracciato della fattura elettronica XML $xml dell'ordine $order...  
  $result_array["xml"] = $xml;
  return $result_array;
}
add_filter( 'wcpdf_IT_after_creaFatturaElettronica', 'modifica_fattura_elettronica', 20, 2 ); 

Alcuni esempi


Aggiunge i termini di pagamento, saldo con bonifico

function modifica_fattura_elettronica($result_array, $order ) {
  $importo = (float)$order->get_total();
  $data = $order->get_date_created();

  $doc = new DOMDocument();
  $doc->preserveWhiteSpace = false;
  $doc->formatOutput = true;
  $doc->loadXML($result_array["xml"]);
  $FatturaElettronicaBody = $doc->getElementsByTagName("FatturaElettronicaBody")->item(0);

  $DatiPagamento = $doc->createElement("DatiPagamento");
  $CondizioniPagamento = $doc->createElement("CondizioniPagamento", "TP02"); //TP02 = pagamento completo
  $DatiPagamento->appendChild($CondizioniPagamento);
  $DettaglioPagamento = $doc->createElement("DettaglioPagamento");
  $Beneficiario = $doc->createElement("Beneficiario", "Mario ROSSI");
  $DettaglioPagamento->appendChild($Beneficiario);
  $ModalitaPagamento = $doc->createElement("ModalitaPagamento", "MP05"); // MP05 = Bonifico
  $DettaglioPagamento->appendChild($ModalitaPagamento);
  $DataRiferimentoTerminiPagamento = $doc->createElement("DataRiferimentoTerminiPagamento", date("Y-m-d", strtotime($data)));
  $DettaglioPagamento->appendChild($DataRiferimentoTerminiPagamento);
  $ImportoPagamento = $doc->createElement("ImportoPagamento", number_format($importo,2,".",""));
  $DettaglioPagamento->appendChild($ImportoPagamento);
  $IBAN = $doc->createElement("IBAN", "IT99X123451234500000012345");
  $DettaglioPagamento->appendChild($IBAN);
  $DatiPagamento->appendChild($DettaglioPagamento);

  $FatturaElettronicaBody->appendChild($DatiPagamento);

  $xml = $doc->saveXML();
  $result_array["xml"] = $xml;
  return $result_array;
}
add_filter( 'wcpdf_IT_after_creaFatturaElettronica', 'modifica_fattura_elettronica', 20, 2 );

Aggiunge numero e data del documento di trasporto.
Posto di aver impostato nell'ordine due custom-fields (NumeroDDT e DataDDT).

function aggiungiDatiDDT($result_array, $order ) {
  $NumeroDDT = $order->get_meta("NumeroDDT", true);
  $DataDDT = $order->get_meta("DataDDT", true);

  // se non esistono dati ritorna l'array senza modifiche
  if(empty($NumeroDDT) || empty($DataDDT)) return $result_array;

  //converte la data nel formato corretto, inserita nell'ordine nel formato 2020-06-03T00:00:00. 
  $DataDDT = date("Y-m-d", strtotime($DataDDT));
	
  $doc = new DOMDocument();
  $doc->preserveWhiteSpace = false;
  $doc->formatOutput = true;
  $doc->loadXML($result_array["xml"]);
  $xpath = new DOMXPath($doc);
  $DatiGenerali = $xpath->query("FatturaElettronicaBody/DatiGenerali")->item(0);
	
  //crea il blocco DatiDDT
  $DatiDDT = $doc->createElement("DatiDDT");
  $aNumeroDDT = $doc->createElement("NumeroDDT", $NumeroDDT);
  $DatiDDT->appendChild($aNumeroDDT);
  $aDataDDT = $doc->createElement("DataDDT", $DataDDT);
  $DatiDDT->appendChild($aDataDDT);

  //aggiunge il blocco DatiDDT all'xml
  $DatiGenerali->appendChild($DatiDDT);
  $xml = $doc->saveXML();
	
  $result_array["xml"] = $xml;
  return $result_array;
}
add_filter( 'wcpdf_IT_after_creaFatturaElettronica', 'aggiungiDatiDDT', 20, 2 );