From c81754166f87ee0dedd68a57456bcf7e06cef059 Mon Sep 17 00:00:00 2001 From: Tolla Date: Mon, 28 Jan 2019 15:40:42 +0100 Subject: [PATCH] Patch level : 12.0 686 Files correlati : fp Commento : - Aggiunto controllo preventivo fatture accompagnatorie - Aggiunta gestione righe omaggi --- src/fp/fplib01.cpp | 395 +++++++++++---------------------------------- 1 file changed, 95 insertions(+), 300 deletions(-) diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index 1a497902c..2ad6de1a7 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -10,11 +10,9 @@ #include #include #include - #include "../fe/felib.h" #include "../cg/cglib03.h" #include "../ve/velib04.h" - #include #include #include @@ -23,7 +21,6 @@ #include #include "../cg/cfban.h" #include "modaut.h" - void set_connection(SSimple_query& s) { #ifdef DBG @@ -49,11 +46,9 @@ void set_connection(SSimple_query& s) } #endif } - SSimple_query& fp_db() { static SSimple_query* db = nullptr; - if (db == nullptr) { db = new SSimple_query(); @@ -63,14 +58,12 @@ SSimple_query& fp_db() } return *db; } - string getline(ifstream& f) { string app; getline(f, app); return app; } - bool check_tables() { /* @@ -133,31 +126,25 @@ bool check_tables() } return true; } - TString& complete_num_fp(const TCodice_numerazione& codnum, const int numdoc) { static const int len_num_doc = TRectype(LF_DOC).length(DOC_NDOC); - TString& ret = get_tmp_string(); const TString& prefisso = codnum.prefisso(); const TString& postfisso = codnum.postfisso(); static TString ndoc; ndoc.cut(0) << numdoc; - if(prefisso.full() || postfisso.full()) { for (; ndoc.len() < len_num_doc;) ndoc.add_front("0"); } ret << prefisso << ndoc << postfisso; - return ret; } - /* * HFATT: tipocf(1) + codcf(6) * BFATT: datadoc(8) + tipodoc_SDI(4) + numdoc(7) */ - // Crea la coppia di chiavi per il db PAF a partire da un documento vero e proprio bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt) { @@ -167,14 +154,11 @@ bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt) else hfatt << doc.clifor().tipo() << doc.clifor().codice(); CHECK(hfatt.full(), "Destinatario fattura P.A. non valido"); - const TCodice_numerazione& codnum = doc.codice_numerazione(); - //20180101_TD01_123456712345671234567 bfatt.cut(0) << doc.get_date(DOC_DATADOC).date2ansi() << '_' << tipo_doc_sdi(doc) << '_' << complete_num_fp(codnum, doc.numero()); return hfatt.full() && bfatt.full(); } - // Crea la coppia di chiavi per il db PAF a partire da un semplice record di testata documento bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt) { @@ -182,14 +166,12 @@ bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt) chiave_paf(d, hfatt, bfatt); return hfatt.full(); } - TString get_dest_sdi(const char tipocf, const long codcf) { TString codsdi, pec; get_coddest(tipocf, codcf, codsdi, pec); return pec.full() ? pec : codsdi; } - bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString& pec) { TCli_for clifo(tipocf, codcf); @@ -211,7 +193,6 @@ bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString& // Dopo la versione 1.2 torna sempre true return coddest.full(); } - inline const TString& no_special(char a) { TString& r = get_tmp_string().cut(0); @@ -241,21 +222,17 @@ inline const TString& no_special(char a) } return r; } - const TString& tipo_doc_sdi(const TDocumento& doc) { return doc.get(DOC_TIPODOCSDI).full() ? doc.get(DOC_TIPODOCSDI) : doc.tipo().tipo_doc_sdi(); } - /*************************************************************************** * TPaf_record ***************************************************************************/ - // Imposta il valore di un campo variant void TPaf_record::set(const char* fld, const TVariant& var) { CHECK(fld && *fld, "Null field name"); - if (var.is_null()) { _fields.remove(fld); @@ -269,14 +246,12 @@ void TPaf_record::set(const char* fld, const TVariant& var) _fields.add(fld, new TVariant(var)); } } - // Imposta il valore di un campo intero void TPaf_record::set(const char* fld, long val) { const TVariant var(val); set(fld, var); } - // Imposta il valore di un campo stringa void TPaf_record::set(const char* fld, const char* val) { @@ -288,7 +263,6 @@ void TPaf_record::set(const char* fld, const char* val) set(fld, var); } } - // Imposta il valore di un campo stringa void TPaf_record::set(const char* fld, const TString& val) { @@ -296,14 +270,12 @@ void TPaf_record::set(const char* fld, const TString& val) if(!var.is_string() || (val.full())) set(fld, var); } - // Imposta il valore di un campo numerico void TPaf_record::set(const char* fld, const real& val) { const TVariant var(val); set(fld, var); } - // Imposta il valore di un campo data in formato ISO void TPaf_record::set(const char* fld, const TDate& val) { @@ -315,31 +287,26 @@ void TPaf_record::set(const char* fld, const TDate& val) else set(fld, ""); } - // Imposta il valore di un campo booleano void TPaf_record::set(const char* fld, bool var) { set(fld, var ? "SI" : "NO"); } - const TString TPaf_record::sq_get(const char* fld) const { return fp_db().sq_get(fld); } - // Legge il valore di un campo variant const TVariant& TPaf_record::get(const char* fld) const { const TVariant* var = (const TVariant*)_fields.objptr(fld); return var ? *var : NULL_VARIANT; } - // Converte un variant in una stringa valida per SQLite const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var) const { const TFieldtypes vt = var.type(); TString& tmp = get_tmp_string(); - if (vt == _realfld) { const TCurrency v(var.as_real(), "", ZERO, fldname.find("PRZ") > 0 || fldname.find("PREZZO") > 0); @@ -347,25 +314,20 @@ const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var) tmp.replace(',', '.'); return tmp; } - if (vt == _datefld) { tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\''; return tmp; } - const TString& str = var.as_string(); - bool apici = vt == _alfafld; if (apici && str[0] != '0' && real::is_natural(str)) apici = false; - // Parso i caratteri speciali for(int i = 0; i < str.len(); i++) { tmp << no_special(str[i]); } - if (apici) { // Aggiungo apici a inizio e fine riga @@ -374,7 +336,6 @@ const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var) } return tmp; } - TString& TPaf_record::remove_string(bool id_riga) { TString& query = get_tmp_string().cut(0); @@ -396,19 +357,15 @@ TString& TPaf_record::remove_string(bool id_riga) TString prefix = _key.get(0); prefix = prefix.sub(0, prefix.find('_') + 1); query << " AND " << prefix << "KEYPRGINVIO != ''"; - CHECKS(++nkf >= 2, "Can't remove partial key on table ", static_cast(_table)); query << ';'; return query; } - - // Elimina il record in base ai campi chiave bool TPaf_record::remove() { return fp_db().sq_set_exec(remove_string()); } - // Carica un record in base ai campi chiave bool TPaf_record::search() { @@ -423,7 +380,6 @@ bool TPaf_record::search() } query.rtrim(5); query << " ORDER BY "; - FOR_EACH_TOKEN(_key, fld) { const TVariant& var = get(fld); @@ -431,32 +387,25 @@ bool TPaf_record::search() query << fld << ", "; } query.rtrim(2) << " DESC;"; - // return xvt_sql_execute(_db, query, paf_search_record, this) == 1; // TODO: Valutare return fp_db().sq_set_exec(query); } - // Carica un record in base ad un massimo di 3 campi chiave bool TPaf_record::search(const char* k1, const char* k2, const char* k3) { _fields.destroy(); - set(_key.get(0), k1); set(_key.get(1), k2); if (k3 && *k3) set(_key.get(2), k3); - return search(); } - TString & TPaf_record::insert_string() { CHECKS(_fields.items() >= _key.items(), "Can't insert empty record on table ", _table); - static TString query, values; query.cut(0); values.cut(0); - query << "INSERT INTO " << _table << "\n("; FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm) { @@ -472,13 +421,11 @@ TString & TPaf_record::insert_string() query << ")\nVALUES (" << values << ");"; return query; } - // Aggiunge un record al db bool TPaf_record::insert() { return fp_db().sq_set_exec(insert_string()); } - // Crea un record della tabella data ed imposta i nomi dei campi chiave TPaf_record::TPaf_record(const char* table) : _table(table), _key(15, ',') { @@ -495,43 +442,35 @@ TPaf_record::TPaf_record(const char* table) : _table(table), _key(15, ',') } CHECKS(!_key.empty_items(), "Invalid primary key for table ", table); } - /*************************************************************************** * TAncestor ***************************************************************************/ - struct TAncestor : public TObject { TString20 _numdoc; TDate _datadoc; - TAncestor(const TRectype& rdoc); }; - TAncestor::TAncestor(const TRectype& rdoc) { const int anno = rdoc.get_int(RDOC_ANNO); const TString4 codnum = rdoc.get(RDOC_CODNUM); const long ndoc = rdoc.get_long(RDOC_NDOC); const TCodice_numerazione& num = cached_numerazione(codnum); - TToken_string kdoc; kdoc = rdoc.get(RDOC_PROVV); kdoc.add(anno); kdoc.add(codnum); kdoc.add(ndoc); const TRectype& doc = cache().get(LF_DOC, kdoc); - TString16 numdoc; num.complete_num(ndoc, numdoc); _numdoc.format("%d/%s/%s", anno, static_cast(codnum), static_cast(numdoc)); _datadoc = doc.get_date(DOC_DATADOC); } - /*************************************************************************** * TDoc_fp ***************************************************************************/ - bool TDoc_fp::parse_sconto(const TString& formula, TToken_string& sconti) const { sconti.cut(0); @@ -556,7 +495,6 @@ bool TDoc_fp::parse_sconto(const TString& formula, TToken_string& sconti) const } return sconti.full(); } - bool TDoc_fp::get_bnp_iban(const TString& abi, const TString& cab, int nprog, TString& iban) { TTable bnp("BNP"); @@ -574,21 +512,17 @@ bool TDoc_fp::get_bnp_iban(const TString& abi, const TString& cab, int nprog, TS err = _iskeynotfound; if (err == NOERR) iban = bnp.get("S3"); - return err == NOERR; } - bool TDoc_fp::get_bank(const TDocumento& doc, TString& iban, TString& abi, TString& cab, TString& istituto) const { bool found = false; abi = doc.get(DOC_CODABIP); cab = doc.get(DOC_CODCABP); int prg = doc.get_int(DOC_PROGBNP); - found = abi.full() && cab.full(); if (found) get_bnp_iban(abi, cab, prg, iban); - if (!found) // Se non trovo banca sul DOC la cerco su CFBAN { TToken_string key; @@ -608,7 +542,6 @@ bool TDoc_fp::get_bank(const TDocumento& doc, TString& iban, TString& abi, TStri get_bnp_iban(abi, cab, prg, iban); } } - if (!found) // Se non trovo banca su CFBAN la cerco su CFVEN { const TRectype& cfven = doc.clifor().vendite(); @@ -618,13 +551,10 @@ bool TDoc_fp::get_bank(const TDocumento& doc, TString& iban, TString& abi, TStri if (found) get_bnp_iban(abi, cab, 0, iban); } - if (found) istituto = cache().get("%BAN", abi, "S0"); - return found; } - const TString& TDoc_fp::descrizione(const TRiga_documento& rdoc) { if (rdoc.get_bool(RDOC_DESCLUNGA)) @@ -644,7 +574,6 @@ const TString& TDoc_fp::descrizione(const TRiga_documento& rdoc) } return rdoc.get(RDOC_DESCR); } - const TRectype* TDoc_fp::find_parent_row(const TRectype& rdoc) const { const long id = rdoc.get_long(RDOC_DAIDRIGA); @@ -673,7 +602,6 @@ const TRectype* TDoc_fp::find_parent_row(const TRectype& rdoc) const } return NULL; } - int TDoc_fp::find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) const { if (rdoc.is_articolo()) @@ -688,7 +616,6 @@ int TDoc_fp::find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) cons } return ancestors.items(); } - bool TDoc_fp::insert(TPaf_record& p) { bool ok; @@ -708,7 +635,6 @@ bool TDoc_fp::insert(TPaf_record& p) } return ok; } - bool TDoc_fp::remove(TPaf_record& p) { bool ok; @@ -728,7 +654,6 @@ bool TDoc_fp::remove(TPaf_record& p) } return ok; } - bool TDoc_fp::save_paf() { bool ok = true; @@ -746,7 +671,6 @@ bool TDoc_fp::save_paf() } return ok; } - const TRectype& TDoc_fp::cco(const TRectype& doc) const { TString80 conkey; @@ -759,7 +683,6 @@ const TRectype& TDoc_fp::cco(const TRectype& doc) const } return cache().get("&CON", conkey); } - void TDoc_fp::log(int severity, const char* msg) { if (_log == nullptr) @@ -782,9 +705,7 @@ void TDoc_fp::log(int severity, const char* msg) } else txt << msg; - _log->log(severity, txt); - // Scrivo anche su file std::filebuf fb; fb.open("fp_err.log", std::ios::out|std::ios::app); @@ -793,7 +714,6 @@ void TDoc_fp::log(int severity, const char* msg) fb.close(); } } - bool TDoc_fp::show_log() { if (_log) @@ -804,7 +724,6 @@ bool TDoc_fp::show_log() } return true; } - const int TDoc_fp::commit() { int r = 0; @@ -824,31 +743,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); } - bool TDoc_fp::add_row_art(long& riga_art, const TString codice_tipo, const TString& codice_valore, TPaf_record& paf) { paf.set("PY_KEYNLINAR", ++riga_art); @@ -857,13 +770,11 @@ bool TDoc_fp::add_row_art(long& riga_art, const TString codice_tipo, const TStri const bool ok = insert(paf); return ok; } - bool TDoc_fp::add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf) { static TString dest_path; static TString dest_usr_path; bool ok = false; - dest_path.cut(0) << _def_fld << file.name(); dest_usr_path.cut(0) << _def_usr_fld << file.name(); if (!fcopy(file, dest_usr_path)) @@ -881,12 +792,10 @@ bool TDoc_fp::add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf) return ok; } - const TString& TDoc_fp::converti_prezzo(const real& prezzo) const { TString& ret = get_tmp_string(); ret.cut(0); - if (_doc_cambio._is_valuta_estera) { TCurrency app(prezzo, _doc_cambio._cod_val, _doc_cambio._cambio, true); @@ -897,24 +806,19 @@ const TString& TDoc_fp::converti_prezzo(const real& prezzo) const ret << prezzo; return ret; } - void TDoc_fp::set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc) const { // Setto l'unità di misura paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); - real qta = rdoc->get_real(RDOC_QTA); // Prendendo la stringa non ho problemi in scrittura della query, a volte accadono cose stupide const TString& qta_string = rdoc->get(RDOC_QTA); - real prezzo_unit; real prezzo_tot; - if (qta >= ZERO) { if (qta == ZERO) qta = UNO; - paf1800f.set("PI_QUANTITA", qta_string); prezzo_unit = rdoc->prezzo(false, false); prezzo_tot = rdoc->importo(true, false); @@ -927,22 +831,19 @@ void TDoc_fp::set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc) const prezzo_unit = -abs(rdoc->prezzo(false, false)); prezzo_tot = -abs(rdoc->importo(true, false)); } - // Salvo tutto paf1800f.set("PI_PREZZOUNIT", converti_prezzo(prezzo_unit)); paf1800f.set("PI_PRZTOTALE", converti_prezzo(prezzo_tot)); } - bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) { // Azzero _hfatt.cut(0); _bfatt.cut(0); - + bool has_bolla = false; if (!chiave_paf(doc, _hfatt, _bfatt)) return false; log(-1, _bfatt); - #ifndef DBG // Controllo se il documento è almeno in stato di stampa if (doc.stato() < doc.tipo().stato_finale_stampa()) @@ -950,11 +851,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) log(3, "Il documento non è stato ancora stampato, verrà saltato"); return false; } - #endif - TAnagrafica clifo(doc.clifor().tipo(), doc.clifor().codice()); - TString8 coddest; TString pec; #ifndef DBG @@ -965,31 +863,24 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) const bool is_pa = true; coddest = "WSUHKZ"; #endif - const bool enapec = coddest == "0000000" && pec.full(); - const bool privato = coddest.len() != 6; bool ok = true; - const TFirm& firm = prefix().firm(); const char* const paese = "IT"; TCausale caus = TCausale(doc.tipo().causale(), doc.anno()); - // Valorizzo la gestione del cambio _doc_cambio._cod_val = doc.valuta(); _doc_cambio._is_valuta_estera = doc.valuta().full() && !is_euro_value(doc.valuta()); _doc_cambio._cambio = doc.cambio(); - // TPaf_record paf0100f("PAF0100F"); paf0100f.set("P1_KEYHEADERFATT", _hfatt); paf0100f.set("P1_KEYBODYFATT", _bfatt); remove(paf0100f); - paf0100f.set("P1_TRASMITTPAESE", paese); paf0100f.set("P1_TRASMITTCOD", _cofi); paf0100f.set("P1_FMTTRASMISS", privato ? "FPR12" : "FPA12"); // SDI11 si usa dal 2015 per lo split payment (prima era SDI10) - paf0100f.set("P1_CODDEST", coddest); TString80 tel; tel << firm.get(NDT_PTEL) << firm.get(NDT_TEL); @@ -998,7 +889,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf0100f.set("P1_GESTIONE", "D"); ok &= insert(paf0100f); // - #ifndef DBG if (enapec) { @@ -1012,13 +902,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) // } #endif - // TPaf_record paf0200f("PAF0200F"); paf0200f.set("P2_KEYHEADERFATT", _hfatt); paf0200f.set("P2_KEYBODYFATT", _bfatt); remove(paf0200f); - if (_ditta.partita_IVA().full()) { paf0200f.set("P2_FISCIVAPAESE", _ditta.stato_partita_IVA()); @@ -1034,9 +922,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) { paf0200f.set("P2_ANADENOMIN", _ditta.ragione_sociale()); } - paf0200f.set("P2_REGFISCALE", doc.tipo().reg_fisc()); - // DatiSede paf0200f.set("P2_SEDEIND", _ditta.via_residenza()); paf0200f.set("P2_SEDENRCIVICO", _ditta.civico_residenza().left(8)); @@ -1045,16 +931,12 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf0200f.set("P2_SEDEPROV", _ditta.provincia_residenza()); paf0200f.set("P2_SEDENAZ", paese); paf0200f.set("P2_GESTIONE", "D"); - TAnagrafica cliente(doc.clifor()); - TString rifamm = cco(doc).get("S4"); if (rifamm.blank()) rifamm = doc.clifor().vendite().get(CFV_PARIFAMM); paf0200f.set("P2_RIFAMMINISTR", rifamm); - paf0200f.set("P2_ISCRREASOCIOU", _ditta.sociounico() == 'S' ? "SU" : "SM"); - TISAM_recordset unloc("USE UNLOC\nJOIN COMUNI INTO COM==COMCCIAA\nFROM CODDITTA=#DITTA\nTO CODDITTA=#DITTA"); unloc.set_var("#DITTA", firm.get(NDT_CODDITTA)); if (unloc.move_first()) @@ -1066,7 +948,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf0200f.set("P2_ISCRREAUFF", unloc.get("13->" COM_PROVCOM)); } } - if (_ditta.giuridica()) { TISAM_recordset anagiu("USE ANAGIU\nFROM CODANAGR=#CODICE\nTO CODANAGR=#CODICE"); @@ -1080,18 +961,13 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } else paf0200f.set("P2_ISCRREASLIQUID", "LN"); - ok &= insert(paf0200f); - // - // - TPaf_record paf0400f("PAF0400F"); paf0400f.set("P4_KEYHEADERFATT", _hfatt); paf0400f.set("P4_KEYBODYFATT", _bfatt); remove(paf0400f); - #ifndef DBG if (cliente.partita_IVA().full()) { @@ -1103,7 +979,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf0400f.set("P4_FISCIVAPAESE", "IT"); paf0400f.set("P4_FISCIVACOD", "00261170039"); #endif - if (cliente.fisica()) { paf0400f.set("P4_ANANOME", cliente.nome()); @@ -1113,15 +988,12 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) { paf0400f.set("P4_ANADENOM", cliente.ragione_sociale()); } - // DatiSede - paf0400f.set("P4_SEDEIND", cliente.via_residenza()); paf0400f.set("P4_SEDENRCIVICO", cliente.civico_residenza().left(8)); paf0400f.set("P4_SEDECOMUNE", cliente.comune_residenza()); paf0400f.set("P4_SEDENAZ", cliente.stato_residenza_ISO()); - // I clienti esteri possono avere CAP alfanumerici, li tolgo if (cliente.stato_residenza_ISO() != "IT") { @@ -1132,11 +1004,9 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf0400f.set("P4_SEDECAP", cliente.CAP_residenza()); paf0400f.set("P4_SEDEPROV", cliente.provincia_residenza()); } - paf0400f.set("P4_GESTIONE", "D"); ok &= insert(paf0400f); // - // TPaf_record paf0700f("PAF0700F"); paf0700f.set("P7_KEYHEADERFATT", _hfatt); @@ -1147,23 +1017,18 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf0700f.set("P7_DATA", doc.data()); paf0700f.set("P7_NUMERO", complete_num_fp(doc.codice_numerazione(), doc.numero())); paf0700f.set("P7_GESTIONE", "D"); - // 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) - // TPaf_record paf0900f("PAF0900F"); paf0900f.set("P9_KEYHEADERFATT", _hfatt); paf0900f.set("P9_KEYBODYFATT", _bfatt); remove(paf0900f); - TString80 sconto_expr = doc.get(DOC_SCONTOPERC); TToken_string sconti; if (parse_sconto(sconto_expr, sconti)) @@ -1191,17 +1056,14 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } } // - // TPaf_record paf2700f("PAF2700F"); paf2700f.set("PQ_KEYHEADERFATT", _hfatt); paf2700f.set("PQ_KEYBODYFATT", _bfatt); 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. // paf2700f.set("PQ_IMPTOTDOC", doc.totale_doc()); - const TRectype& cont_conv_off = cco(doc); TString causale = cont_conv_off.get("S1"); if (causale.full()) @@ -1218,18 +1080,15 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf2700f.set("PQ_GESTIONE", "D"); ok &= insert(paf2700f); // - // Azzera DDT TPaf_record paf1600f("PAF1600F"); paf1600f.set("PF_KEYHEADERFATT", _hfatt); paf1600f.set("PF_KEYBODYFATT", _bfatt); remove(paf1600f); - // Fuori dallo scope per dopo const TString16 cup = doc.get(DOC_CUP); const TString16 cig = doc.get(DOC_CIG); const TString80 com = doc.get(DOC_CODCMS); - // SEMPRE // Azzera contratti TPaf_record paf1000f("PAF1000F"); @@ -1237,27 +1096,23 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) 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_RIFNUMLINEA", 0L); remove(paf1100f); - // Azzera ordini TPaf_record paf1200f("PAF1200F"); paf1200f.set("PB_KEYHEADERFATT", _hfatt); paf1200f.set("PB_KEYBODYFATT", _bfatt); paf1200f.set("PB_RIFNUMLINEA", 0L); remove(paf1200f); - TString80 con = doc.get(DOC_CONTRATTO); if (con.full() || cup.full() || cig.full()) { char tcon = doc.get_char(DOC_MODPAG); if (tcon < 'C') tcon = 'C'; - TDate datadoc; // Data contratto non obbligatoria if (con.full()) { @@ -1270,7 +1125,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) if (con.blank()) con = cup; } - if (tcon == 'O') { paf1000f.set("P0_RIFNUMLINEA", 0L); @@ -1305,76 +1159,25 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) ok &= insert(paf1200f); } } - if (is_pa && cup.blank() && cig.blank()) log(1, "CIG e CUP assenti"); // - - // - TPaf_record paf1700f("PAF1700F"); - paf1700f.set("PG_KEYHEADERFATT", _hfatt); - paf1700f.set("PG_KEYBODYFATT", _bfatt); - remove(paf1700f); // Cancella la riga del vettore - - if(doc.get("CODVETT1").full()) - { - TRectype vet = cache().get("%VET", doc.get("CODVETT1")); - const TString4 statopiva = vet.get("S3").mid(49, 2); - const TString piva = vet.get("S3").mid(20, 28); - const TString codfisc = vet.get("S13").mid(28, 16); - - if(piva.empty() && codfisc.empty()) - { - TString msg = "Il vettore "; - msg << vet.get("S0").mid(0, 50) << " non ha nè codice fiscale nè partita IVA, la fattura " << doc.anno() << " " << doc.codice_numerazione().codice() << " " << doc.numero() << " non può essere trasmessa"; - log(3, msg); - return false; - } - - - if(piva.full()) - { - paf1700f.set("PG_FISCIVAPAESE", statopiva.full() ? statopiva : "IT"); - paf1700f.set("PG_FISCIVACODICE", piva); - } - - paf1700f.set("PG_CODICEFISCALE", codfisc); - - if (vet.get_bool("B0")) - { - paf1700f.set("PG_ANANOME", vet.get("S0").mid(0, 30)); - paf1700f.set("PG_ANACOGNOME", vet.get("S0").mid(30, 20)); - } - else - paf1700f.set("PG_ANADENOMINAZ", vet.get("S0").mid(0, 50)); - - paf1700f.set("PG_ANACODEORI", vet.get("S2").mid(0, 17)); - ok &= insert(paf1700f); - } - - - // - TPaf_record paf1800f("PAF1800F"); 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); remove(paf2000f); // Cancella tutti gli sconti di riga - TPaf_record paf1900f("PAF1900F"); 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); remove(paf3000f); - long riga = 0; TString16 codivadefault; { @@ -1385,25 +1188,20 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) break; } } - FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) { paf1800f.reset(); paf1800f.set("PI_KEYHEADERFATT", _hfatt); paf1800f.set("PI_KEYBODYFATT", _bfatt); paf1800f.set("PI_NUMEROLINEA", ++riga); - const TString& descrizione_riga = descrizione(*rdoc); - if (descrizione_riga.empty()) continue; - paf3000f.reset(); paf3000f.set("PT_KEYHEADERFATT", _hfatt); paf3000f.set("PT_KEYBODYFATT", _bfatt); paf3000f.set("PT_RIFNUMLINEA", riga); paf3000f.set("PT_COMMENTO", descrizione_riga); - // if (rdoc->is_articolo()) { @@ -1420,7 +1218,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf1900f.set("PY_KEYNLINEA", riga); ok &= add_row_art(riga_art, "Codice articolo interno", codartmag, paf1900f); } - // Se il codice articolo del magazzino è diverso quello è del cliente if (codart.full() && codart != codartmag) { @@ -1433,7 +1230,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } } // - if(rdoc->is_descrizione()) { paf1800f.set("PI_QUANTITA", UNO); @@ -1451,15 +1247,12 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } set_qta_prezzo(paf1800f, rdoc); set_IVA(*rdoc, paf1800f); - /* const TDate data = doc.get(DOC_DATADOC); paf1800f.set("PI_DTINIZIOPER", data); paf1800f.set("PI_DTFINEPER", data); */ - // - sconto_expr = rdoc->get(RDOC_SCONTO); if (parse_sconto(sconto_expr, sconti)) { @@ -1487,8 +1280,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } } // - - /* * Ogni riga si può rifare a un DDT/Ordine diverso, per questo devo inserire i dati da qua e non in testata */ @@ -1496,39 +1287,39 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) find_ancestors(*rdoc, ancestors); for (int i = ancestors.last(); i > 0; i = ancestors.pred(i)) { - const TAncestor& a = (const TAncestor&)ancestors[i]; - if (i == 1) - { - // - TPaf_record paf1600f("PAF1600F"); - paf1600f.reset(); - 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); - paf1600f.set("PF_GESTIONE", "D"); - ok &= insert(paf1600f); - // - } - else if (i == 3) - { - // - TPaf_record paf1000f("PAF1000F"); - 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); - paf1000f.set("P0_COMMCONVENZ", com); - paf1000f.set("P0_CODCUP", cup); - paf1000f.set("P0_CODCIG", cig); - paf1000f.set("P0_GESTIONE", "D"); - ok &= insert(paf1000f); - // - } + has_bolla |= true; + const TAncestor& a = (const TAncestor&)ancestors[i]; + if (i == 1) + { + // + TPaf_record paf1600f("PAF1600F"); + paf1600f.reset(); + 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); + paf1600f.set("PF_GESTIONE", "D"); + ok &= insert(paf1600f); + // + } + else if (i == 3) + { + // + TPaf_record paf1000f("PAF1000F"); + 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); + paf1000f.set("P0_COMMCONVENZ", com); + paf1000f.set("P0_CODCUP", cup); + paf1000f.set("P0_CODCIG", cig); + paf1000f.set("P0_GESTIONE", "D"); + ok &= insert(paf1000f); + // + } } - } else if (rdoc->is_spese()) { @@ -1536,7 +1327,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) const real imp = rdoc->importo(true, false); real qta = UNO; bool qta_inverse = false; - if (sp.is_tipo()) { paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); @@ -1555,7 +1345,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } paf1800f.set("PI_QUANTITA", qta); } - real prz = imp; if (qta != UNO) { @@ -1566,11 +1355,9 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) prz = price.get_value(); } } - paf1800f.set("PI_PREZZOUNIT", converti_prezzo(qta_inverse ? -prz : prz)); paf1800f.set("PI_PRZTOTALE", converti_prezzo(imp)); set_IVA(*rdoc, paf1800f); - // Controllo se è una ritenuta fiscale // if (sp.tipo_ritenuta() == 'F') @@ -1599,16 +1386,40 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) log(2, msg); return false; } + else if(rdoc->is_omaggio()) + { + if (rdoc->get(RDOC_QTA).is_zero()) + { + TString msg; + msg.format("La riga omaggi %d ha quantità nulla", riga); + log(1, msg); + } + set_qta_prezzo(paf1800f, rdoc); + set_IVA(*rdoc, paf1800f); + + // + paf2000f.set("PJ_KEYNLINEA", static_cast(r)); + paf2000f.set("PJ_KEYNLINAR", 1L); + paf2000f.set("PJ_TIPOSCONTO", "SC"); + if(rdoc->get_bool(RDOC_ADDIVA)) + { + paf2000f.set("PJ_IMPORTOSCONTO", converti_prezzo(rdoc->importo(true, false) - rdoc->imposta())); + } + else + { + paf2000f.set("PJ_IMPORTOSCONTO", converti_prezzo(rdoc->importo(true, false)); + } + paf2000f.set("PJ_GESTIONE", "D"); + ok &= insert(paf2000f); + } else { // Salto tutte le altre righe continue; } - paf1800f.set("PI_GESTIONE", "D"); ok &= insert(paf1800f) && insert(paf3000f); } - // Controllo plafond // Riga esenzione? if (doc.is_fattura() || doc.is_nota_credito()) @@ -1617,18 +1428,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_NUMEROLINEA", ++riga); - paf3000f.reset(); paf3000f.set("PT_KEYHEADERFATT", _hfatt); paf3000f.set("PT_KEYBODYFATT", _bfatt); paf3000f.set("PT_RIFNUMLINEA", riga); paf3000f.set("PT_COMMENTO", descrizione(riga_es)); - paf1800f.set("PI_QUANTITA", UNO); paf1800f.set("PI_PREZZOUNIT", ZERO); paf1800f.set("PI_PRZTOTALE", ZERO); @@ -1636,7 +1444,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) ok &= insert(paf1800f) && insert(paf3000f); } } - // Se il bollo va fatto pagare bisogna aggiungere una riga! if(doc.get_bool("ADDBOLLI") && doc.get_real("BOLLI") > ZERO) { @@ -1644,22 +1451,18 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) 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", "Imposta di bollo assolta virtualmente ai sensi dell'art. 6 D.M. 17.6.2014"); - paf1800f.set("PI_QUANTITA", UNO); paf1800f.set("PI_PREZZOUNIT", converti_prezzo(doc.get_real("BOLLI"))); paf1800f.set("PI_PRZTOTALE", converti_prezzo(doc.get_real("BOLLI"))); set_IVA(doc.codiva_bolli(), paf1800f); ok &= insert(paf1800f) && insert(paf3000f); } - // OMAGGI???? - // Aggiungo le spese incasso if(doc.get_real("SPESINC") > ZERO) { @@ -1667,13 +1470,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) 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", converti_prezzo(doc.spese_incasso(imponibile, 6, _netto))); @@ -1682,7 +1483,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) set_IVA(doc.codiva_spese(), paf1800f); ok &= insert(paf1800f) && insert(paf3000f); } - // Conai assolto if(doc.clifor().vendite().get_bool("CONAIASS")) { @@ -1690,37 +1490,66 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) 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", _conai_str); - paf1800f.set("PI_QUANTITA", UNO); paf1800f.set("PI_PREZZOUNIT", ZERO); paf1800f.set("PI_PRZTOTALE", ZERO); set_IVA(codivadefault, paf1800f); ok &= insert(paf1800f) && insert(paf3000f); } - // - + // + // Metto qua i dati DDT per capire se la fattura è accompagnatoria o deriva da bolla + TPaf_record paf1700f("PAF1700F"); + paf1700f.set("PG_KEYHEADERFATT", _hfatt); + paf1700f.set("PG_KEYBODYFATT", _bfatt); + remove(paf1700f); // Cancella la riga del vettore + if (doc.get("CODVETT1").full() && !has_bolla) + { + TRectype vet = cache().get("%VET", doc.get("CODVETT1")); + const TString4 statopiva = vet.get("S3").mid(49, 2); + const TString piva = vet.get("S3").mid(20, 28); + const TString codfisc = vet.get("S13").mid(28, 16); + if (piva.empty() && codfisc.empty()) + { + TString msg = "Il vettore "; + msg << vet.get("S0").mid(0, 50) << " non ha nè codice fiscale nè partita IVA, la fattura " << doc.anno() << " " << doc.codice_numerazione().codice() << " " << doc.numero() << " non può essere trasmessa"; + log(3, msg); + return false; + } + if (piva.full()) + { + paf1700f.set("PG_FISCIVAPAESE", statopiva.full() ? statopiva : "IT"); + paf1700f.set("PG_FISCIVACODICE", piva); + } + paf1700f.set("PG_CODICEFISCALE", codfisc); + if (vet.get_bool("B0")) + { + paf1700f.set("PG_ANANOME", vet.get("S0").mid(0, 30)); + paf1700f.set("PG_ANACOGNOME", vet.get("S0").mid(30, 20)); + } + else + paf1700f.set("PG_ANADENOMINAZ", vet.get("S0").mid(0, 50)); + paf1700f.set("PG_ANACODEORI", vet.get("S2").mid(0, 17)); + ok &= insert(paf1700f); + } + // // Salvo la testata ok &= insert(paf0700f); - // TPaf_record paf2200f("PAF2200F"); 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 if (doc.is_split_payment()) eiva = "S"; else if (doc.get_bool(DOC_LIQDIFF) || doc.get_bool(DOC_IVAXCASSA)) eiva = "D"; - long num_riep = 0; TAssoc_array& tiva = doc.tabella_iva(false); FOR_EACH_ASSOC_OBJECT(tiva, obj, key, itm) @@ -1728,13 +1557,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf2200f.reset(); paf2200f.set("PL_KEYHEADERFATT", _hfatt); paf2200f.set("PL_KEYBODYFATT", _bfatt); - const TRiepilogo_iva& riva = *dynamic_cast(itm); const real aliquota = riva.cod_iva().percentuale(); paf2200f.set("PL_ALIQUOTAIVA", aliquota); if (aliquota.is_zero()) paf2200f.set("PL_NATURA", natura(riva.cod_iva().codice())); - paf2200f.set("PL_IMPONIBILE", converti_prezzo(riva.imponibile())); paf2200f.set("PL_IMPOSTA", converti_prezzo(riva.imposta())); paf2200f.set("PL_ESIGIVA", eiva); @@ -1746,13 +1573,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) ok &= insert(paf2200f); } // - // TPaf_record paf2400f("PAF2400F"); paf2400f.set("PN_KEYHEADERFATT", _hfatt); paf2400f.set("PN_KEYBODYFATT", _bfatt); remove(paf2400f); // Cancella i dati pagamento - TPagamento& pag = doc.pagamento(); doc.scadenze_recalc(); // Ricalcola array delle rate @@ -1763,16 +1588,13 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf2400f.set("PN_CONDPAGAMENTO", rateazione); paf2400f.set("PN_GESTIONE", "D"); ok &= insert(paf2400f); - TPaf_record paf2500f("PAF2500F"); paf2500f.set("PO_KEYHEADERFATT", _hfatt); paf2500f.set("PO_KEYBODYFATT", _bfatt); remove(paf2500f); // Cancella tutte le rate - // Imposto i campi uguali per tutte le rate paf2500f.set("PO_CONDPAGAMENTO", rateazione); // Condizione di pagamento PA paf2500f.set("PO_CODICEPAGAM", pag.code()); // Condizione di pagamento CAMPO - TRectype cod_pag = cache().get("CPG", doc.pagamento().code()); const int tipo_pag = cod_pag.get_int("S4"); @@ -1785,33 +1607,25 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf2500f.set("PO_ABI", abi); paf2500f.set("PO_CAB", cab); } - if (tipo_pag == 3 && cab.blank()) // Ricevuta bancaria log(2, TR("Non sono presenti ABI, CAB, IBAN per il pagamento")); - if ((tipo_pag == 8 || tipo_pag == 9) && iban.blank()) // R.I.D. o Bonifico { log(1, TR("Non è presente il codice IBAN per il pagamento")); } - for (int nr = 0; nr < nrate; nr++) { paf2500f.set("PO_RIGA", long(nr + 1)); // Numero rata int rp = nr < pag.n_rate() ? nr : 0; static TString key_class; key_class.cut(0) << pag.tipo_rata(rp) << pag.ulc_rata(rp); - paf2500f.set("PO_MODALITAPAGAM", cache().get("%CLR", key_class, "S12")); // Si assicura che il numero riga sia accettabile - TToken_string& riga = scad.row(nr); // Data|Importo paf2500f.set("PO_DATASCADENZA", TDate(riga.get(0))); // Data scadenza paf2500f.set("PO_IMPORTO", converti_prezzo(real(riga.get()))); // Importo rata - paf2500f.set("PO_GESTIONE", "D"); ok &= insert(paf2500f); } - // - if (_gestioneallegati) { TPaf_record paf2600f("PAF2600F"); @@ -1824,7 +1638,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) if (_allegafattura && dongle().active(RSAUT) && doc.tipo().main_print_profile(rep, 2)) { //ve1 -2 {CODNUM} {ANNO} {PROVV} {NDOC}(-{ANDOC}) {TIPO_ELABORAZIONE} {TIPO_STAMPA} - // Costruisco la chiamata static TString commandline; commandline.cut(0) << "ve1 -2 " << doc.get(DOC_CODNUM) << ' ' << doc.get(DOC_ANNO) @@ -1849,7 +1662,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) return false; } } - TToken_string allegati(doc.get("COLL_GOLEM"), '\n'); bool load_allegati = true; if (allegati.full()) @@ -1863,7 +1675,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } else { - TFilename fname; FOR_EACH_TOKEN(allegati, row) { @@ -1877,7 +1688,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } } } - // Tabella di non invio XML TPaf_record pafw300f("PAFW300F"); @@ -1900,7 +1710,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) pafw300f.set("PW_CODICE", cliente.codice_fiscale_estero()); pafw300f.set("PW_CFISCA", cliente.codice_fiscale()); pafw300f.set("PW_DENOM", cliente.ragione_sociale()); - if (cliente.fisica()) { pafw300f.set("PW_NOME", cliente.nome()); @@ -1908,13 +1717,10 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } else pafw300f.set("PW_RAGSOC", cliente.ragione_sociale().left(35)); - pafw300f.set("PW_IMPO", converti_prezzo(doc.totale_doc())); ok &= insert(pafw300f); - return _to_commit = (ok && save_paf()); } - bool TDoc_fp::doc_to_paf(const TRectype& rec) { TDocumentoEsteso doc; @@ -1927,12 +1733,10 @@ bool TDoc_fp::doc_to_paf(const TRectype& rec) } return false; } - bool TDoc_fp::doc_to_paf(const TDoc_key& key) { return doc_to_paf(key_to_doc(key)); } - bool TDoc_fp::doc_to_paf(const TFilename& ini) { TConfig cfg(ini, "33"); @@ -1942,17 +1746,14 @@ bool TDoc_fp::doc_to_paf(const TFilename& ini) const TDoc_key key(anno, codnum, ndoc); return doc_to_paf(key); } - bool TDoc_fp::doc_to_paf() { return _doc_rec != nullptr ? doc_to_paf(*_doc_rec) : false; } - TRectype& TDoc_fp::key_to_doc(const TDoc_key& key) { if(_doc_rec != nullptr) delete _doc_rec; - _doc_rec = new TRectype(LF_DOC); _doc_rec->put(DOC_PROVV, key.provv()); _doc_rec->put(DOC_ANNO, key.anno()); @@ -1960,7 +1761,6 @@ TRectype& TDoc_fp::key_to_doc(const TDoc_key& key) _doc_rec->put(DOC_NDOC, key.ndoc()); return *_doc_rec; } - TDoc_fp::TDoc_fp() : _doc_rec(nullptr), _log(nullptr), _cache_insert(false) { _ditta.init(LF_NDITTE, prefix().get_codditta()); @@ -1968,20 +1768,17 @@ TDoc_fp::TDoc_fp() : _doc_rec(nullptr), _log(nullptr), _cache_insert(false) if (_cofi.blank()) _cofi = _ditta.codice_fiscale(); - #ifdef DBG _gestioneallegati = _allegafattura = false; #else _gestioneallegati = fp_settings().get_gest_alleg(); _allegafattura = fp_settings().get_allega_fat(); #endif - _def_fld = fp_settings().get_fld_dest(); if (!_def_fld.ends_with("\\")) { _def_fld << "\\"; } - _def_usr_fld = fp_settings().get_fld_dest_usr(); if (_def_usr_fld.empty()) { @@ -1991,13 +1788,11 @@ TDoc_fp::TDoc_fp() : _doc_rec(nullptr), _log(nullptr), _cache_insert(false) { _def_usr_fld << "\\"; } - // Mi preparo la stringa del CONAI _conai_str = ini_get_string(CONFIG_DITTA, "ve", "DESCCONAIASS"); if (_conai_str.empty()) _conai_str = "Contributo CONAI assolto ove dovuto"; } - TDoc_fp::~TDoc_fp() { commit();