diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index 9624a29f5..8dc641bbd 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -424,7 +424,7 @@ TString & TPaf_record::insert_string() // Aggiunge un record al db bool TPaf_record::insert() { - return fp_db().sq_set_exec(insert_string()); + return fp_db().sq_set_exec(insert_string(), false); } // Crea un record della tabella data ed imposta i nomi dei campi chiave TPaf_record::TPaf_record(const char* table) : _table(table), _key(15, ',') @@ -724,6 +724,7 @@ bool TDoc_fp::show_log() } return true; } + const int TDoc_fp::commit() { int r = 0; @@ -743,21 +744,25 @@ const int TDoc_fp::commit() _to_commit = false; return r; } + const int TDoc_fp::force_commit() { _to_commit = true; return commit(); } + const char* TDoc_fp::natura(const TString& codiva) const { return cache().get("%IVA", codiva, "S12"); } + void TDoc_fp::set_IVA(const TString& codiva, TPaf_record& paf) { // É necessario il cast a real? paf.set("PI_ALIQUOTAIVA", static_cast(cache().get("%IVA", codiva, "R0"))); paf.set("PI_NATURA", cache().get("%IVA", codiva, "S12")); } + void TDoc_fp::set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) { set_IVA(rdoc.get(RDOC_CODIVA), paf); @@ -1024,10 +1029,15 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // paf0700f.set("P7_IMPORTOBOLLO", converti_prezzo(doc.get_real("BOLLI"))); // + // // Non la mettiamo! // + // Non inserisco più adesso il paf0700f ma lo faccio alla fine (per inserire le ritenute) + /* + * Lo sconto in testata è stato disabilitato in quanto su Campo influenza solo le righe merci mentre dovrebbe modificare tutte le righe + * // TPaf_record paf0900f("PAF0900F"); paf0900f.set("P9_KEYHEADERFATT", _hfatt); @@ -1059,6 +1069,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } } } + */ // // TPaf_record paf2700f("PAF2700F"); @@ -1067,9 +1078,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) remove(paf2700f); // Disabilitata la scrittura del totale del documento, questo causa problemi se è presente uno sconto in testata e l'addebito del bollo. // Campo calcola prima il totale, poi lo sconta e ci applica il bollo mentre lo SDI sconta a bollo già applicato. -#ifndef DBG - if(!((doc.get_bool("ADDBOLLI") && doc.get_real("BOLLI") > ZERO) && doc.get(DOC_SCONTOPERC))) -#endif + paf2700f.set("PQ_IMPTOTDOC", doc.totale_doc()); const TRectype& cont_conv_off = cco(doc); TString causale = cont_conv_off.get("S1"); @@ -1431,7 +1440,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } // - sconto_expr = rdoc->get(RDOC_SCONTO); + TString80 sconto_expr = rdoc->get(RDOC_SCONTO); + TToken_string sconti; if (parse_sconto(sconto_expr, sconti)) { long nlin_sconto = 0; @@ -1457,6 +1467,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } } } + // paf1800f.set("PI_GESTIONE", "D"); @@ -1464,7 +1475,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } // Controllo plafond // Riga esenzione? - if (doc.is_fattura() || doc.is_nota_credito()) + if (doc.is_fattura()) { doc.set_riga_esenzione(); if(doc.ha_riga_esenzione()) @@ -1543,6 +1554,39 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) set_IVA(codivadefault, paf1800f); ok &= insert(paf1800f) && insert(paf3000f); } + + // Riga sconto di testata + // Se è presente uno sconto in testata devo sottrarlo come riga sconto o lo SDI urla + if(doc.get(DOC_SCONTOPERC).full()) + { + TAssoc_array& tiva = doc.tabella_iva(false); + FOR_EACH_ASSOC_OBJECT(tiva, obj, key, itm) + { + const TRiepilogo_iva& riva = *dynamic_cast(itm); + + paf1800f.reset(); + paf1800f.set("PI_KEYHEADERFATT", _hfatt); + paf1800f.set("PI_KEYBODYFATT", _bfatt); + paf1800f.set("PI_NUMEROLINEA", ++riga); + paf3000f.reset(); + paf3000f.set("PT_KEYHEADERFATT", _hfatt); + paf3000f.set("PT_KEYBODYFATT", _bfatt); + paf3000f.set("PT_RIFNUMLINEA", riga); + paf1800f.set("PI_TIPOCESSPREST", "AB"); + TString msg = "Riga sconto merci in testata "; + if(riva.cod_iva().percentuale() > ZERO) + msg << riva.cod_iva().percentuale() << "%"; + else + msg << riva.cod_iva().codice(); + paf3000f.set("PT_COMMENTO", msg); + paf1800f.set("PI_QUANTITA", UNO); + paf1800f.set("PI_PREZZOUNIT", -abs(riva.sconto_perc())); + paf1800f.set("PI_PRZTOTALE", -abs(riva.sconto_perc())); + set_IVA(riva.cod_iva().codice(), paf1800f); + ok &= insert(paf1800f) && insert(paf3000f); + } + } + // // // Metto qua i dati DDT per capire se la fattura è accompagnatoria o deriva da bolla