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 );