Exemplo n.º 1
0
function CalcolaScadenze($totpag, $giorno, $mese, $anno, $tipdec, $giodec, $numrat, $tiprat, $mesesc, $giosuc)
{
    $ex = new Expiry();
    $rs_array = $ex->CalcExpiry($totpag, $anno . '-' . $mese . '-' . $giorno, $tipdec, $giodec, $numrat, $tiprat, $mesesc, $giosuc);
    $acc = array();
    foreach ($rs_array as $k => $v) {
        $k--;
        $acc['import'][$k] = $v['amount'];
        $acc['giorno'][$k] = substr($v['date'], 8, 2);
        $acc['mese'][$k] = substr($v['date'], 5, 2);
        $acc['anno'][$k] = substr($v['date'], 0, 4);
    }
    return $acc;
}
Exemplo n.º 2
0
							   $j=$k;
                               if (isset($v['id'])){ // nuovo rigo
                                   unset($new_paymov[$j]['id']);
                                }
                               if ($form['paymov_op_cl'][$i]==1){ // apertura partita
                                     $new_paymov[$j]['id_tesdoc_ref']=intval($_POST['date_reg_Y']).
                                                                      intval($_POST['registroiva']).
                                                                      intval($_POST['sezioneiva']).
                                                                      str_pad(intval($_POST['protocollo']),9,0,STR_PAD_LEFT);
                                     $new_paymov[$j]['id_rigmoc_doc']=$last_id_rig;
                                     if ($v['amount']<0.01){  // se non ho messo manualmente le scadenze lo faccio in automatico
                                        require_once("../../library/include/expiry_calc.php");
                                        $ex= new Expiry;
                                        $partner=$anagrafica->getPartner(intval($_POST['conto_rc'.$i]));
                                        $pag = gaz_dbi_get_row($gTables['pagame'], "codice", $partner['codpag']);
                                        $rs_ex=$ex->CalcExpiry(floatval($_POST['importorc'][$i]),$datadoc,$pag['tipdec'],$pag['giodec'],$pag['numrat'],$pag['tiprat'],$pag['mesesc'],$pag['giosuc']);
                                        foreach($rs_ex as $ve){ // attraverso le rate
                                           $new_paymov[$j]['amount']=$ve['amount'];
                                           $new_paymov[$j]['expiry']=$ve['date'];
                                           $calc->updatePaymov($new_paymov[$j]);
                                        }
                                     } else {
                                        $new_paymov[$j]['expiry']=gaz_format_date($new_paymov[$j]['expiry'],true);
                                        $calc->updatePaymov($new_paymov[$j]);
                                     }
                               } else {  // chiusura partita
                                     $new_paymov[$j]['id_rigmoc_pay']=$last_id_rig;
                                     $new_paymov[$j]['expiry']=gaz_format_date($new_paymov[$j]['expiry'],true);
                                     $calc->updatePaymov($new_paymov[$j]);
                               }
                            }
Exemplo n.º 3
0
function create_XML_invoice($testata, $gTables, $rows = 'rigdoc', $dest = false)
{
    $XMLvars = new invoiceXMLvars();
    $domDoc = new DOMDocument();
    $domDoc->load("../../library/include/template_fae.xml");
    $xpath = new DOMXPath($domDoc);
    $ctrl_doc = 0;
    $n_linea = 1;
    // definisco le variabili dei totali
    $XMLvars->totimp_body = 0;
    $XMLvars->taxstamp = 0;
    $XMLvars->virtual_taxstamp = 0;
    $XMLvars->tot_trasporto = 0;
    $XMLvars->body_castle = array();
    $XMLvars->ivasplitpay = 0.0;
    while ($tesdoc = gaz_dbi_fetch_array($testata)) {
        $XMLvars->setXMLvars($gTables, $tesdoc, $tesdoc['id_tes'], $rows, false);
        if ($ctrl_doc == 0) {
            $id_progressivo = substr($XMLvars->docRelDate, 2, 2) . $XMLvars->seziva . str_pad($XMLvars->protoc, 7, '0', STR_PAD_LEFT);
            //per il momento sono singole chiamate xpath a regime e' possibile usare un array associativo da passare ad una funzione
            $results = $xpath->query("//FatturaElettronicaHeader/DatiTrasmissione/IdTrasmittente/IdPaese")->item(0);
            $attrVal = $domDoc->createTextNode('IT');
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaHeader/DatiTrasmissione/ProgressivoInvio")->item(0);
            $attrVal = $domDoc->createTextNode($id_progressivo);
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaHeader/DatiTrasmissione/FormatoTrasmissione")->item(0);
            $attrVal = $domDoc->createTextNode("SDI11");
            $results->appendChild($attrVal);
            $codice_trasmittente = $XMLvars->IdCodice;
            $results = $xpath->query("//FatturaElettronicaHeader/DatiTrasmissione/IdTrasmittente/IdCodice")->item(0);
            $attrVal = $domDoc->createTextNode($codice_trasmittente);
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaHeader/CedentePrestatore/DatiAnagrafici/IdFiscaleIVA/IdPaese")->item(0);
            $attrVal = $domDoc->createTextNode("IT");
            $results->appendChild($attrVal);
            //il IdCodice iva e' la partita iva?
            $results = $xpath->query("//FatturaElettronicaHeader/CedentePrestatore/DatiAnagrafici/IdFiscaleIVA/IdCodice")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->azienda['pariva']));
            $results->appendChild($attrVal);
            //nodo 1.2.1.2 Codice Fiscale richiesto da alcune amministrazioni come obbligatorio
            $results = $xpath->query("//FatturaElettronicaHeader/CedentePrestatore/DatiAnagrafici/CodiceFiscale")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->azienda['codfis']));
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaHeader/DatiTrasmissione/CodiceDestinatario")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->client['fe_cod_univoco']));
            $results->appendChild($attrVal);
            $el = $domDoc->createElement("CodiceFiscale", trim($XMLvars->client['codfis']));
            $results = $xpath->query("//CessionarioCommittente/DatiAnagrafici")->item(0);
            $results1 = $xpath->query("//CessionarioCommittente/DatiAnagrafici/Anagrafica")->item(0);
            $results->insertBefore($el, $results1);
            // nodo 1.4.1.1 partita IVA del committente, se disponibile
            if (!empty($XMLvars->client['pariva'])) {
                $el = $domDoc->createElement("IdFiscaleIVA", '');
                $results = $el->appendChild($domDoc->createElement('IdPaese', 'IT'));
                $results = $el->appendChild($domDoc->createElement('IdCodice', $XMLvars->client['pariva']));
                $results = $xpath->query("//CessionarioCommittente/DatiAnagrafici")->item(0);
                $results1 = $xpath->query("//CessionarioCommittente/DatiAnagrafici/CodiceFiscale")->item(0);
                $results->insertBefore($el, $results1);
            }
            $results = $xpath->query("//CessionarioCommittente/DatiAnagrafici/Anagrafica/Denominazione")->item(0);
            $attrVal = $domDoc->createTextNode(substr(trim($XMLvars->client['ragso1']) . " " . trim($XMLvars->client['ragso2']), 0, 80));
            $results->appendChild($attrVal);
            $results = $xpath->query("//CessionarioCommittente/Sede/Indirizzo")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->client['indspe']));
            $results->appendChild($attrVal);
            $el = $domDoc->createElement("Provincia", strtoupper(trim($XMLvars->client['prospe'])));
            $results = $xpath->query("//CessionarioCommittente/Sede")->item(0);
            $results1 = $xpath->query("//CessionarioCommittente/Sede/Nazione")->item(0);
            $results->insertBefore($el, $results1);
            $results = $xpath->query("//CessionarioCommittente/Sede/Comune")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->client['citspe']));
            $results->appendChild($attrVal);
            $results = $xpath->query("//CessionarioCommittente/Sede/CAP")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->client['capspe']));
            $results->appendChild($attrVal);
            $results = $xpath->query("//CessionarioCommittente/Sede/Nazione")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->client['country']));
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento/TipoDocumento")->item(0);
            $attrVal = $domDoc->createTextNode($XMLvars->TipoDocumento);
            $results->appendChild($attrVal);
            //sempre in euro?
            $results = $xpath->query("//FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento/Divisa")->item(0);
            $attrVal = $domDoc->createTextNode("EUR");
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento/Data")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->docRelDate));
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento/Numero")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->docRelNum));
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaHeader/CedentePrestatore/DatiAnagrafici/Anagrafica/Denominazione")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->intesta1 . " " . $XMLvars->intesta1bis));
            $results->appendChild($attrVal);
            //regime fiscale RF01 valido per il regime fiscale ordinario
            $results = $xpath->query("//FatturaElettronicaHeader/CedentePrestatore/DatiAnagrafici/RegimeFiscale")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->azienda['fiscal_reg']));
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaHeader/CedentePrestatore/Sede/Indirizzo")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->azienda['indspe']));
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaHeader/CedentePrestatore/Sede/CAP")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->azienda['capspe']));
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaHeader/CedentePrestatore/Sede/Comune")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->azienda['citspe']));
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaHeader/CedentePrestatore/Sede/Nazione")->item(0);
            $attrVal = $domDoc->createTextNode(trim($XMLvars->azienda['country']));
            $results->appendChild($attrVal);
            $results = $xpath->query("//FatturaElettronicaBody/DatiBeniServizi")->item(0);
            //$attrVal = $domDoc->createTextNode('IT');
            //$results->appendChild($attrVal);
        } elseif ($ctrl_doc != $XMLvars->docRelNum) {
            // quando cambia il DdT
            /*
               in caso di necessità qui potrò aggiungere linee di codice                       
            */
        }
        //elenco beni in fattura
        $lines = $XMLvars->getXMLrows();
        $cig = "";
        $cup = "";
        $id_documento = "";
        while (list($key, $rigo) = each($lines)) {
            $nl = false;
            switch ($rigo['tiprig']) {
                case "0":
                    // normale
                    $el = $domDoc->createElement("DettaglioLinee", "");
                    $el1 = $domDoc->createElement("NumeroLinea", $n_linea);
                    $el->appendChild($el1);
                    if (isset($rigo['descrittivi'])) {
                        // se ho dei righi descrittivi associati li posso aggiungere fino a che la lunghezza non superi 1000 caratteri quindi ne posso aggiungere al massimo 15*60
                        foreach ($rigo['descrittivi'] as $k => $v) {
                            if ($k < 16) {
                                $rigo['descri'] .= $v;
                                // ogni $v è lungo al massimo 60 caratteri
                                unset($rigo['descrittivi'][$k]);
                                // lo tolgo in modo da mettere un eventuale accesso sotto
                            }
                        }
                    }
                    $el1 = $domDoc->createElement("Descrizione", $rigo['descri']);
                    $el->appendChild($el1);
                    $el1 = $domDoc->createElement("Quantita", number_format($rigo['quanti'], 2, '.', ''));
                    $el->appendChild($el1);
                    $el1 = $domDoc->createElement("UnitaMisura", $rigo['unimis']);
                    $el->appendChild($el1);
                    $el1 = $domDoc->createElement("PrezzoUnitario", number_format($rigo['prelis'], $XMLvars->decimal_price, '.', ''));
                    $el->appendChild($el1);
                    // sconto/maggiorazione rigo 2.2.1.10
                    if (abs($rigo['imp_sconto']) >= 0.01) {
                        $el1 = $domDoc->createElement("ScontoMaggiorazione", "");
                        $el->appendChild($el1);
                        if ($rigo['imp_sconto'] < 0) {
                            // è una maggiorazione
                            $t = 'MG';
                        } else {
                            $t = 'SC';
                        }
                        $el2 = $domDoc->createElement("Tipo", $t);
                        $el1->appendChild($el2);
                        $el2 = $domDoc->createElement("Percentuale", number_format(abs($rigo['sconto']), 2, '.', ''));
                        $el1->appendChild($el2);
                        $el2 = $domDoc->createElement("Importo", number_format(abs($rigo['imp_sconto']), 2, '.', ''));
                        $el1->appendChild($el2);
                    }
                    $el1 = $domDoc->createElement("PrezzoTotale", number_format($rigo['importo'], 2, '.', ''));
                    $el->appendChild($el1);
                    $el1 = $domDoc->createElement("AliquotaIVA", number_format($rigo['pervat'], 2, '.', ''));
                    $el->appendChild($el1);
                    if ($rigo['ritenuta'] > 0) {
                        $el1 = $domDoc->createElement("Ritenuta", 'SI');
                        $el->appendChild($el1);
                    }
                    if ($rigo['pervat'] <= 0) {
                        $el1 = $domDoc->createElement("Natura", $rigo['natura']);
                        $el->appendChild($el1);
                    }
                    if (isset($rigo['descrittivi']) && count($rigo['descrittivi']) > 0) {
                        foreach ($rigo['descrittivi'] as $k => $v) {
                            $el1 = $domDoc->createElement("AltriDatiGestionali", '');
                            $el->appendChild($el1);
                            $el2 = $domDoc->createElement("TipoDato", 'txt' . $k);
                            $el1->appendChild($el2);
                            $el2 = $domDoc->createElement("RiferimentoTesto", $v);
                            $el1->appendChild($el2);
                        }
                    }
                    $results->appendChild($el);
                    $nl = true;
                    break;
                case "1":
                case "T":
                    // forfait o trasporto
                    $el = $domDoc->createElement("DettaglioLinee", "");
                    $el1 = $domDoc->createElement("NumeroLinea", $n_linea);
                    $el->appendChild($el1);
                    $el1 = $domDoc->createElement("Descrizione", substr($rigo['descri'], 0, 100));
                    $el->appendChild($el1);
                    $el1 = $domDoc->createElement("PrezzoUnitario", number_format($rigo['importo'], 2, '.', ''));
                    $el->appendChild($el1);
                    $el1 = $domDoc->createElement("PrezzoTotale", number_format($rigo['importo'], 2, '.', ''));
                    $el->appendChild($el1);
                    $el1 = $domDoc->createElement("AliquotaIVA", number_format($rigo['pervat'], 2, '.', ''));
                    $el->appendChild($el1);
                    if ($rigo['ritenuta'] > 0) {
                        $el1 = $domDoc->createElement("Ritenuta", 'SI');
                        $el->appendChild($el1);
                    }
                    if ($rigo['pervat'] <= 0) {
                        $el1 = $domDoc->createElement("Natura", $rigo['natura']);
                        $el->appendChild($el1);
                    }
                    $results->appendChild($el);
                    $nl = true;
                    break;
                case "2":
                    // descrittivo
                    /* ! ATTENZIONE: tipo rigo spostato in appendice <2.2.1.16> ai righi "normale" !!!
                     */
                    break;
                case "3":
                    // variazione totale fatture
                    /* ! ATTENZIONE: questa tipologia di rigo non si deve utilizzare in caso di PA !!!
                     */
                    break;
                case "6":
                case "8":
                    /* ! ATTENZIONE: tipo rigo spostato in appendice <2.2.1.16>  ai righi "normale" !!!
                     */
                    break;
                case "11":
                    $cig = $rigo['descri'];
                    break;
                case "12":
                    $cup = $rigo['descri'];
                    break;
                case "13":
                    $id_documento = $rigo['descri'];
                    break;
            }
            if ($rigo['ritenuta'] > 0) {
                /*		*/
            }
            // se c'è un ddt di origine ogni rigo deve avere il suo riferimento in <DatiDDT>
            if ($XMLvars->ddt_data && $nl) {
                $results = $xpath->query("//FatturaElettronicaBody/DatiGenerali")->item(0);
                $el_ddt = $domDoc->createElement("DatiDDT", "");
                $el1 = $domDoc->createElement("NumeroDDT", $XMLvars->tesdoc['numdoc']);
                $el_ddt->appendChild($el1);
                $el1 = $domDoc->createElement("DataDDT", $XMLvars->tesdoc['datemi']);
                $el_ddt->appendChild($el1);
                $el1 = $domDoc->createElement("RiferimentoNumeroLinea", $n_linea);
                $el_ddt->appendChild($el1);
                $results->appendChild($el_ddt);
                $results = $xpath->query("//FatturaElettronicaBody/DatiBeniServizi")->item(0);
            }
            if ($nl) {
                $n_linea++;
            }
        }
        $ctrl_doc = $XMLvars->tesdoc['numdoc'];
    }
    // aggiungo le eventuali spese di incasso ma queste essendo cumulative per diversi eventuali DdT non hanno un riferimento
    if ($XMLvars->tesdoc['speban'] >= 0.01) {
        $el = $domDoc->createElement("DettaglioLinee", "");
        $el1 = $domDoc->createElement("NumeroLinea", $n_linea);
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("Descrizione", 'SPESE INCASSO ' . $XMLvars->pagame['numrat'] . ' EFFETTI');
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("PrezzoUnitario", number_format($XMLvars->tesdoc['speban'], 2, '.', ''));
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("PrezzoTotale", number_format($XMLvars->tesdoc['speban'] * $XMLvars->pagame['numrat'], 2, '.', ''));
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("AliquotaIVA", number_format($XMLvars->expense_pervat['aliquo'], 2, '.', ''));
        $el->appendChild($el1);
        $results->appendChild($el);
        $results = $xpath->query("//FatturaElettronicaBody/DatiGenerali")->item(0);
        $el_ddt = $domDoc->createElement("DatiDDT", "");
        $el1 = $domDoc->createElement("NumeroDDT", $XMLvars->tesdoc['numdoc']);
        $el_ddt->appendChild($el1);
        $el1 = $domDoc->createElement("DataDDT", $XMLvars->tesdoc['datemi']);
        $el_ddt->appendChild($el1);
        $el1 = $domDoc->createElement("RiferimentoNumeroLinea", $n_linea--);
        $el_ddt->appendChild($el1);
        $results->appendChild($el_ddt);
        $n_linea++;
    }
    //dati ordine di acquisto
    $results = $xpath->query("//FatturaElettronicaBody/DatiGenerali")->item(0);
    if ($id_documento != "") {
        $el_datiOrdineAcquisto = $domDoc->createElement("DatiOrdineAcquisto", "");
        $el1 = $domDoc->createElement("IdDocumento", $id_documento);
        $el_datiOrdineAcquisto->appendChild($el1);
    }
    if ($id_documento != "" and $cup != "") {
        $el1 = $domDoc->createElement("CodiceCUP", $cup);
        $el_datiOrdineAcquisto->appendChild($el1);
    }
    if ($id_documento != "" and $cig != "") {
        $el1 = $domDoc->createElement("CodiceCIG", $cig);
        $el_datiOrdineAcquisto->appendChild($el1);
    }
    //occorre testare qui se presente il ddt altrimeni occorrera' fare l'insertbefore
    if ($id_documento != "") {
        $results1 = $xpath->query("//FatturaElettronicaBody/DatiGenerali/DatiDDT")->item(0);
        if (is_null($results1)) {
            $results->appendChild($el_datiOrdineAcquisto);
        } else {
            $results->insertBefore($el_datiOrdineAcquisto, $results1);
        }
    }
    //Attenzione qui
    $XMLvars->setXMLtot();
    if ($XMLvars->tot_ritenute > 0) {
        $results = $xpath->query("//FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento")->item(0);
        $el = $domDoc->createElement("DatiRitenuta", "");
        $el1 = $domDoc->createElement("TipoRitenuta", $XMLvars->TipoRitenuta);
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("ImportoRitenuta", number_format($XMLvars->tot_ritenute, 2, '.', ''));
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("AliquotaRitenuta", number_format($XMLvars->azienda['ritenuta'], 2, '.', ''));
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("CausalePagamento", $XMLvars->azienda['causale_pagam_770']);
        $el->appendChild($el1);
        $results->appendChild($el);
    }
    if ($XMLvars->impbol >= 0.01) {
        $results = $xpath->query("//FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento")->item(0);
        $el = $domDoc->createElement("DatiBollo", "");
        $el1 = $domDoc->createElement("BolloVirtuale", $XMLvars->BolloVirtuale);
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("ImportoBollo", number_format($XMLvars->impbol, 2, '.', ''));
        $el->appendChild($el1);
        $results->appendChild($el);
    }
    $results = $xpath->query("//FatturaElettronicaBody/DatiBeniServizi")->item(0);
    foreach ($XMLvars->cast as $key => $value) {
        $el = $domDoc->createElement("DatiRiepilogo", "");
        $el1 = $domDoc->createElement("AliquotaIVA", number_format($value['periva'], 2, '.', ''));
        $el->appendChild($el1);
        if ($value['periva'] < 0.01) {
            $el1 = $domDoc->createElement("Natura", $value['fae_natura']);
            $el->appendChild($el1);
        }
        // necessario per l'elemento 2.2.2.7
        $value['esigibilita'] = 'I';
        // I=esigibiltà immediata
        if ($value['tipiva'] == 'T') {
            // è un'IVA non esigibile per split payment PA
            $value['esigibilita'] = 'S';
            // S=scissione dei pagamenti
        }
        $el1 = $domDoc->createElement("ImponibileImporto", number_format($value['impcast'], 2, '.', ''));
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("Imposta", number_format($value['ivacast'], 2, '.', ''));
        if ($value['fae_natura'] == 'N1' || $value['fae_natura'] == 'N2' || $value['fae_natura'] == 'N3' || $value['fae_natura'] == 'N4' || $value['fae_natura'] == 'N5' || $value['fae_natura'] == 'N6') {
            //non viene inserito il nodo EsigibilitaIVA
        } else {
            $el->appendChild($el1);
            $el1 = $domDoc->createElement("EsigibilitaIVA", $value['esigibilita']);
        }
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("RiferimentoNormativo", $value['descriz']);
        $el->appendChild($el1);
        $results->appendChild($el);
    }
    if ($XMLvars->sempl_accom) {
        // se è una fattura accompagnatoria qui inserisco anche i dati relativi al trasporto
        $results = $xpath->query("//FatturaElettronicaBody/DatiGenerali")->item(0);
        $el = $domDoc->createElement("DatiTrasporto", "");
        $el1 = $domDoc->createElement("MezzoTrasporto", $XMLvars->tesdoc['spediz']);
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("NumeroColli", $XMLvars->tesdoc['units']);
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("Descrizione", $XMLvars->tesdoc['imball']);
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("UnitaMisuraPeso", 'kg');
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("PesoLordo", $XMLvars->tesdoc['gross_weight']);
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("PesoNetto", $XMLvars->tesdoc['net_weight']);
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("DataInizioTrasporto", substr($XMLvars->tesdoc['initra'], 0, 10));
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("DataOraConsegna", substr($XMLvars->tesdoc['initra'], 0, 10) . 'T' . substr($XMLvars->tesdoc['initra'], 11, 8));
        $el->appendChild($el1);
        $results->appendChild($el);
    }
    // ----- CALCOLO TOTALI E RATE DEL PAGAMENTO
    $totpag = $XMLvars->totimpfat + $XMLvars->totriport + $XMLvars->totivafat - $XMLvars->tot_ritenute - $XMLvars->ivasplitpay;
    // ----- INSERITA variabile che calcola il totale della fattura al lordo della RDA e dell'IVA
    $totpar = $XMLvars->totimpfat + $XMLvars->totriport + $XMLvars->totivafat;
    if ($XMLvars->virtual_taxstamp == 1 || $XMLvars->virtual_taxstamp == 2) {
        $totpag = $totpag + $XMLvars->impbol;
        $totpar = $totpar + $XMLvars->impbol;
    }
    $ex = new Expiry();
    $ratpag = $ex->CalcExpiry($totpag, $XMLvars->tesdoc["datfat"], $XMLvars->pagame['tipdec'], $XMLvars->pagame['giodec'], $XMLvars->pagame['numrat'], $XMLvars->pagame['tiprat'], $XMLvars->pagame['mesesc'], $XMLvars->pagame['giosuc']);
    if ($XMLvars->pagame['numrat'] > 1) {
        $cond_pag = 'TP01';
    } else {
        $cond_pag = 'TP02';
    }
    // elementi dei <DatiPagamento> (2.4)
    $results = $xpath->query("//FatturaElettronicaBody")->item(0);
    $el = $domDoc->createElement("DatiPagamento", "");
    $el1 = $domDoc->createElement("CondizioniPagamento", $cond_pag);
    // 2.4.1
    $el->appendChild($el1);
    $results->appendChild($el);
    foreach ($ratpag as $k => $v) {
        $results = $xpath->query("//FatturaElettronicaBody/DatiPagamento")->item(0);
        $el = $domDoc->createElement("DettaglioPagamento", '');
        // 2.4.2
        $el1 = $domDoc->createElement("Beneficiario", trim($XMLvars->intesta1 . " " . $XMLvars->intesta1bis));
        // 2.4.2.1
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("ModalitaPagamento", $XMLvars->pagame['fae_mode']);
        // 2.4.2.2
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("DataScadenzaPagamento", $v['date']);
        // 2.4.2.5
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("ImportoPagamento", $v['amount']);
        // 2.4.2.6
        $el->appendChild($el1);
        if ($XMLvars->pagame['tippag'] == 'B') {
            // se il pagamento è una RiBa indico CAB e ABI
            $el1 = $domDoc->createElement("ABI", $XMLvars->banapp['codabi']);
            // 2.4.2.14
            $el->appendChild($el1);
            $el1 = $domDoc->createElement("CAB", $XMLvars->banapp['codcab']);
            // 2.4.2.15
            $el->appendChild($el1);
        } elseif (!empty($XMLvars->banacc['iban'])) {
            // se il pagamento ha un IBAN associato
            $el1 = $domDoc->createElement("IBAN", $XMLvars->banacc['iban']);
            // 2.4.2.13
            $el->appendChild($el1);
        }
        $results->appendChild($el);
    }
    //Modifica per il sicoge che richiede obbligatoriamente popolato il punto 2.1.1.9
    $results = $xpath->query("//FatturaElettronicaBody/DatiGenerali/DatiGeneraliDocumento")->item(0);
    // sconto/maggiorazione totale documento 2.1.1.8
    $sc = round($XMLvars->totimpmer * $XMLvars->tesdoc['sconto'] / 100, 2);
    if (abs($sc) >= 0.01) {
        $el = $domDoc->createElement("ScontoMaggiorazione", "");
        if ($sc < 0) {
            // è una maggiorazione
            $t = 'MG';
        } else {
            $t = 'SC';
        }
        $el1 = $domDoc->createElement("Tipo", $t);
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("Percentuale", $XMLvars->tesdoc['sconto']);
        $el->appendChild($el1);
        $el1 = $domDoc->createElement("Importo", number_format(abs($sc), 2, '.', ''));
        $el->appendChild($el1);
        $results->appendChild($el);
    }
    $el = $domDoc->createElement("ImportoTotaleDocumento", number_format($totpar, 2, '.', ''));
    // totale fatura al lordo di RDA
    $results->appendChild($el);
    // faccio l'encode per ricavare il progressivo unico di invio
    $data = array('azienda' => $XMLvars->azienda['codice'], 'anno' => $XMLvars->docRelDate, 'sezione' => $XMLvars->seziva, 'protocollo' => $XMLvars->protoc, 'intermediary' => $XMLvars->Intermediary);
    $progressivo_unico_invio = $XMLvars->encodeSendingNumber($data, 36);
    //print $XMLvars->decodeFromSendingNumber($progressivo_unico_invio);
    $nome_file = "IT" . $codice_trasmittente . "_" . $progressivo_unico_invio;
    $id_tes = $XMLvars->tesdoc['id_tes'];
    $data_ora_ricezione = $XMLvars->docRelDate;
    $verifica = gaz_dbi_get_row($gTables['fae_flux'], 'filename_ori', $nome_file . ".xml");
    if ($verifica == false) {
        $valori = array('filename_ori' => $nome_file . ".xml", 'id_tes_ref' => $id_tes, 'exec_date' => $data_ora_ricezione, 'received_date' => $data_ora_ricezione, 'delivery_date' => $data_ora_ricezione, 'filename_son' => '', 'id_SDI' => 0, 'filename_ret' => '', 'mail_id' => 0, 'data' => '', 'flux_status' => '#', 'progr_ret' => '000', 'flux_descri' => '');
        fae_fluxInsert($valori);
    }
    header("Content-type: text/plain");
    header("Content-Disposition: attachment; filename=" . $nome_file . ".xml");
    print $domDoc->saveXML();
}