diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index c65c7ac7b..637bc8715 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -836,8 +836,9 @@ bool TDoc_fp::add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf) bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) { - TString8 hfatt; // Codice univoco di 6 caratteri dell'ufficio P.A. o di 7 caratteri per un privato - TString20 bfatt; // Codice univoco di 20 caratteri del documento + // Azzero + _hfatt.cut(0); + _bfatt.cut(0); TAnagrafica clifo(doc.clifor().tipo(), doc.clifor().codice()); @@ -853,9 +854,9 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) const bool privato = coddest.len() != 6; bool ok = true; - if (!chiave_paf(doc, hfatt, bfatt)) + if (!chiave_paf(doc, _hfatt, _bfatt)) return false; - log(-1, bfatt); + log(-1, _bfatt); const TFirm& firm = prefix().firm(); const char* const paese = "IT"; @@ -863,8 +864,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // TPaf_record paf0100f("PAF0100F"); - paf0100f.set("P1_KEYHEADERFATT", hfatt); - paf0100f.set("P1_KEYBODYFATT", bfatt); + paf0100f.set("P1_KEYHEADERFATT", _hfatt); + paf0100f.set("P1_KEYBODYFATT", _bfatt); remove(paf0100f); paf0100f.set("P1_TRASMITTPAESE", paese); @@ -884,8 +885,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) { // TPaf_record paf3200f("PAF3200F"); - paf3200f.set("PU_KEYHEADERFATT", hfatt); - paf3200f.set("PU_KEYBODYFATT", bfatt); + paf3200f.set("PU_KEYHEADERFATT", _hfatt); + paf3200f.set("PU_KEYBODYFATT", _bfatt); remove(paf3200f); paf3200f.set("PU_PEC", pec); ok &= insert(paf3200f); @@ -894,8 +895,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // TPaf_record paf0200f("PAF0200F"); - paf0200f.set("P2_KEYHEADERFATT", hfatt); - paf0200f.set("P2_KEYBODYFATT", bfatt); + paf0200f.set("P2_KEYHEADERFATT", _hfatt); + paf0200f.set("P2_KEYBODYFATT", _bfatt); remove(paf0200f); if (_ditta.partita_IVA().full()) @@ -967,8 +968,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // TPaf_record paf0400f("PAF0400F"); - paf0400f.set("P4_KEYHEADERFATT", hfatt); - paf0400f.set("P4_KEYBODYFATT", bfatt); + paf0400f.set("P4_KEYHEADERFATT", _hfatt); + paf0400f.set("P4_KEYBODYFATT", _bfatt); remove(paf0400f); if (cliente.partita_IVA().full()) @@ -1006,8 +1007,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // TPaf_record paf0700f("PAF0700F"); - paf0700f.set("P7_KEYHEADERFATT", hfatt); - paf0700f.set("P7_KEYBODYFATT", bfatt); + paf0700f.set("P7_KEYHEADERFATT", _hfatt); + paf0700f.set("P7_KEYBODYFATT", _bfatt); remove(paf0700f); paf0700f.set("P7_TIPODOC", doc.tipo().tipo_doc_sdi()); paf0700f.set("P7_DIVISA", "EUR"); // Aggiungere codice ISO 4217 a tabella divise (%VAL) @@ -1031,8 +1032,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // TPaf_record paf0900f("PAF0900F"); - paf0900f.set("P9_KEYHEADERFATT", hfatt); - paf0900f.set("P9_KEYBODYFATT", bfatt); + paf0900f.set("P9_KEYHEADERFATT", _hfatt); + paf0900f.set("P9_KEYBODYFATT", _bfatt); remove(paf0900f); TString80 sconto_expr = doc.get(DOC_SCONTOPERC); @@ -1065,8 +1066,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // TPaf_record paf2700f("PAF2700F"); - paf2700f.set("PQ_KEYHEADERFATT", hfatt); - paf2700f.set("PQ_KEYBODYFATT", bfatt); + paf2700f.set("PQ_KEYHEADERFATT", _hfatt); + paf2700f.set("PQ_KEYBODYFATT", _bfatt); remove(paf2700f); paf2700f.set("PQ_IMPTOTDOC", doc.totale_doc()); @@ -1089,8 +1090,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // Azzera DDT TPaf_record paf1600f("PAF1600F"); - paf1600f.set("PF_KEYHEADERFATT", hfatt); - paf1600f.set("PF_KEYBODYFATT", bfatt); + paf1600f.set("PF_KEYHEADERFATT", _hfatt); + paf1600f.set("PF_KEYBODYFATT", _bfatt); remove(paf1600f); // Fuori dallo scope per dopo @@ -1101,22 +1102,22 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // SEMPRE // Azzera contratti TPaf_record paf1000f("PAF1000F"); - paf1000f.set("P0_KEYHEADERFATT", hfatt); - paf1000f.set("P0_KEYBODYFATT", bfatt); + paf1000f.set("P0_KEYHEADERFATT", _hfatt); + paf1000f.set("P0_KEYBODYFATT", _bfatt); paf1000f.set("P0_RIFNUMLINEA", 0L); remove(paf1000f); // Azzera convenzioni TPaf_record paf1100f("PAF1100F"); - paf1100f.set("PA_KEYHEADERFATT", hfatt); - paf1100f.set("PA_KEYBODYFATT", bfatt); + paf1100f.set("PA_KEYHEADERFATT", _hfatt); + paf1100f.set("PA_KEYBODYFATT", _bfatt); paf1100f.set("PA_RIFNUMLINEA", 0L); remove(paf1100f); // Azzera ordini TPaf_record paf1200f("PAF1200F"); - paf1200f.set("PB_KEYHEADERFATT", hfatt); - paf1200f.set("PB_KEYBODYFATT", bfatt); + paf1200f.set("PB_KEYHEADERFATT", _hfatt); + paf1200f.set("PB_KEYBODYFATT", _bfatt); paf1200f.set("PB_RIFNUMLINEA", 0L); remove(paf1200f); @@ -1179,23 +1180,23 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // TPaf_record paf1800f("PAF1800F"); - paf1800f.set("PI_KEYHEADERFATT", hfatt); - paf1800f.set("PI_KEYBODYFATT", bfatt); + paf1800f.set("PI_KEYHEADERFATT", _hfatt); + paf1800f.set("PI_KEYBODYFATT", _bfatt); remove(paf1800f); // Cancella tutte le righe documento TPaf_record paf2000f("PAF2000F"); - paf2000f.set("PJ_KEYHEADERFATT", hfatt); - paf2000f.set("PJ_KEYBODYFATT", bfatt); + paf2000f.set("PJ_KEYHEADERFATT", _hfatt); + paf2000f.set("PJ_KEYBODYFATT", _bfatt); remove(paf2000f); // Cancella tutti gli sconti di riga TPaf_record paf1900f("PAF1900F"); - paf1900f.set("PY_KEYHEADERFATT", hfatt); - paf1900f.set("PY_KEYBODYFATT", bfatt); + paf1900f.set("PY_KEYHEADERFATT", _hfatt); + paf1900f.set("PY_KEYBODYFATT", _bfatt); remove(paf1900f); // Cancella tutte le righe articoli del documento TPaf_record paf3000f("PAF3000F"); - paf3000f.set("PT_KEYHEADERFATT", hfatt); - paf3000f.set("PT_KEYBODYFATT", bfatt); + paf3000f.set("PT_KEYHEADERFATT", _hfatt); + paf3000f.set("PT_KEYBODYFATT", _bfatt); remove(paf3000f); long riga = 0; @@ -1212,13 +1213,13 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) { paf1800f.reset(); - paf1800f.set("PI_KEYHEADERFATT", hfatt); - paf1800f.set("PI_KEYBODYFATT", bfatt); + 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_KEYHEADERFATT", _hfatt); + paf3000f.set("PT_KEYBODYFATT", _bfatt); paf3000f.set("PT_RIFNUMLINEA", riga); paf3000f.set("PT_COMMENTO", descrizione(*rdoc)); @@ -1234,8 +1235,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) if (art.ok()) { paf1900f.reset(); - paf1900f.set("PY_KEYHEADERFATT", hfatt); - paf1900f.set("PY_KEYBODYFATT", bfatt); + paf1900f.set("PY_KEYHEADERFATT", _hfatt); + paf1900f.set("PY_KEYBODYFATT", _bfatt); paf1900f.set("PY_KEYNLINEA", riga); TString& tmp = get_tmp_string(); @@ -1323,8 +1324,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // TPaf_record paf1600f("PAF1600F"); paf1600f.reset(); - paf1600f.set("PF_KEYHEADERFATT", hfatt); - paf1600f.set("PF_KEYBODYFATT", bfatt); + paf1600f.set("PF_KEYHEADERFATT", _hfatt); + paf1600f.set("PF_KEYBODYFATT", _bfatt); paf1600f.set("PF_RIFNUMLINEA", (long)r); paf1600f.set("PF_NUMDDDT", a._numdoc); paf1600f.set("PF_DATADDT", a._datadoc); @@ -1336,8 +1337,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) { // TPaf_record paf1000f("PAF1000F"); - paf1000f.set("P0_KEYHEADERFATT", hfatt); - paf1000f.set("P0_KEYBODYFATT", bfatt); + paf1000f.set("P0_KEYHEADERFATT", _hfatt); + paf1000f.set("P0_KEYBODYFATT", _bfatt); paf1000f.set("P0_RIFNUMLINEA", (long)r); paf1000f.set("P0_IDDOC", a._numdoc); paf1000f.set("P0_DATADOC", a._datadoc); @@ -1417,14 +1418,15 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) if(doc.ha_riga_esenzione()) { const TRiga_documento& riga_es = doc.get_riga_esenzione(); + paf1800f.reset(); - paf1800f.set("PI_KEYHEADERFATT", hfatt); - paf1800f.set("PI_KEYBODYFATT", bfatt); + 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_KEYHEADERFATT", _hfatt); + paf3000f.set("PT_KEYBODYFATT", _bfatt); paf3000f.set("PT_RIFNUMLINEA", riga); paf3000f.set("PT_COMMENTO", descrizione(riga_es)); @@ -1437,16 +1439,16 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } // Se il bollo va fatto pagare bisogna aggiungere una riga! - if(doc.get_bool("ADDBOLLI")) + if(doc.get_bool("ADDBOLLI") && doc.get_real("BOLLI") > ZERO) { paf1800f.reset(); - paf1800f.set("PI_KEYHEADERFATT", hfatt); - paf1800f.set("PI_KEYBODYFATT", bfatt); + 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_KEYHEADERFATT", _hfatt); + paf3000f.set("PT_KEYBODYFATT", _bfatt); paf3000f.set("PT_RIFNUMLINEA", riga); paf3000f.set("PT_COMMENTO", "Imposta bollo assolta in modo virtuale"); @@ -1457,17 +1459,42 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) ok &= insert(paf1800f) && insert(paf3000f); } + // OMAGGI???? + + // Aggiungo le spese incasso + if(doc.get_real("SPESINC") > ZERO) + { + 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); + paf3000f.set("PT_COMMENTO", "Spese incasso"); + + paf1800f.set("PI_QUANTITA", UNO); + real imponibile = doc.imponibile(); + paf1800f.set("PI_PREZZOUNIT", doc.spese_incasso(imponibile, 6, _netto)); + paf1800f.set("PI_PRZTOTALE", doc.spese_incasso(imponibile, 6, _lordo)); + + set_IVA(doc.codiva_spese(), paf1800f); + ok &= insert(paf1800f) && insert(paf3000f); + } + // Conai assolto if(doc.clifor().vendite().get_bool("CONAIASS")) { paf1800f.reset(); - paf1800f.set("PI_KEYHEADERFATT", hfatt); - paf1800f.set("PI_KEYBODYFATT", bfatt); + 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_KEYHEADERFATT", _hfatt); + paf3000f.set("PT_KEYBODYFATT", _bfatt); paf3000f.set("PT_RIFNUMLINEA", riga); paf3000f.set("PT_COMMENTO", ini_get_string(CONFIG_DITTA, "ve", "DESCCONAIASS", "Contributo CONAI assolto ove dovuto")); @@ -1498,8 +1525,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // TPaf_record paf2200f("PAF2200F"); - paf2200f.set("PL_KEYHEADERFATT", hfatt); - paf2200f.set("PL_KEYBODYFATT", bfatt); + paf2200f.set("PL_KEYHEADERFATT", _hfatt); + paf2200f.set("PL_KEYBODYFATT", _bfatt); remove(paf2200f); // Cancella tutte le righe di riepilogo IVA const char* eiva = "I"; // Esigibilità IVA: Immediata, Differita, Split payment @@ -1532,8 +1559,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // TPaf_record paf2400f("PAF2400F"); - paf2400f.set("PN_KEYHEADERFATT", hfatt); - paf2400f.set("PN_KEYBODYFATT", bfatt); + paf2400f.set("PN_KEYHEADERFATT", _hfatt); + paf2400f.set("PN_KEYBODYFATT", _bfatt); remove(paf2400f); // Cancella i dati pagamento TPagamento& pag = doc.pagamento(); @@ -1548,8 +1575,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) ok &= insert(paf2400f); TPaf_record paf2500f("PAF2500F"); - paf2500f.set("PO_KEYHEADERFATT", hfatt); - paf2500f.set("PO_KEYBODYFATT", bfatt); + paf2500f.set("PO_KEYHEADERFATT", _hfatt); + paf2500f.set("PO_KEYBODYFATT", _bfatt); remove(paf2500f); // Cancella tutte le rate // Imposto i campi uguali per tutte le rate @@ -1594,8 +1621,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) if (_gestioneallegati) { TPaf_record paf2600f("PAF2600F"); - paf2600f.set("PP_KEYHEADERFATT", hfatt); - paf2600f.set("PP_KEYBODYFATT", bfatt); + paf2600f.set("PP_KEYHEADERFATT", _hfatt); + paf2600f.set("PP_KEYBODYFATT", _bfatt); remove(paf2600f); // Cancella eventuali allegati long nprogr = 0; // Numero di file allegati // Se abilitato stampo il documento e lo allego @@ -1635,7 +1662,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) { if (_def_fld.empty()) { - TString msgerr; msgerr << "Errore: il documento " << bfatt << " ha degli allegati ma nella configurazione non è stato impostato come trametterli\nCaricare il documento senza allegati?"; + TString msgerr; msgerr << "Errore: il documento " << _bfatt << " ha degli allegati ma nella configurazione non è stato impostato come trametterli\nCaricare il documento senza allegati?"; load_allegati = false; if (!yesno_box(msgerr)) return false; @@ -1660,8 +1687,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // Tabella di non invio XML TPaf_record pafw300f("PAFW300F"); - pafw300f.set("PW_KEYHEADERFATT", hfatt); - pafw300f.set("PW_KEYBODYFATT", bfatt); + pafw300f.set("PW_KEYHEADERFATT", _hfatt); + pafw300f.set("PW_KEYBODYFATT", _bfatt); remove(pafw300f); // Cancella eventuali allegati const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC)); const TString codsdi = !td.invio_xml() ? "**********" : (enapec ? pec : coddest); @@ -1711,7 +1738,7 @@ TDoc_fp::TDoc_fp() : _log(nullptr), _cache_insert(false) #ifdef DBG _gestioneallegati = _allegafattura = false; -#elif +#else _gestioneallegati = ini_get_bool(CONFIG_DITTA, "fp", "gestioneallegati"); _allegafattura = ini_get_bool(CONFIG_DITTA, "fp", "allegafatt"); #endif diff --git a/src/fp/fplib01.h b/src/fp/fplib01.h index b9ea331e9..9e4296a86 100644 --- a/src/fp/fplib01.h +++ b/src/fp/fplib01.h @@ -88,6 +88,8 @@ private: bool _to_commit; bool _cache_insert; vector _query; + TString8 _hfatt; // Codice univoco di 6 caratteri dell'ufficio P.A. o di 7 caratteri per un privato + TString20 _bfatt; // Codice univoco di 20 caratteri del documento int parse_line(const TString& line, TString& var, TString& val) const; bool create_table(TScanner& paf, const TString& table); diff --git a/src/ve/vetbtip.uml b/src/ve/vetbtip.uml index 5e6e49c9b..d802e4554 100755 --- a/src/ve/vetbtip.uml +++ b/src/ve/vetbtip.uml @@ -92,7 +92,8 @@ BEGIN ITEM "TD03|TD03 Acconto/Anticipo su parcella" MESSAGE ENABLE,F_NOTACREDDEB|"" ITEM "TD04|TD04 Nota di credito" MESSAGE ENABLE,F_NOTACREDDEB|"X" ITEM "TD05|TD05 Nota di debito" MESSAGE ENABLE,F_NOTACREDDEB|"X" - ITEM "TD06|TD06 parcella" MESSAGE ENABLE,F_NOTACREDDEB|"" + ITEM "TD06|TD06 Parcella" MESSAGE ENABLE,F_NOTACREDDEB|"" + ITEM "TD20|TD20 Autofattura" MESSAGE ENABLE,F_NOTACREDDEB|"" END BOOLEAN F_ESPORTA_FP