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