From 3798a79bd0363ac31f5c8b3ef60e04c693019c36 Mon Sep 17 00:00:00 2001 From: Mattia Tollari Date: Thu, 7 Mar 2019 18:11:41 +0100 Subject: [PATCH 1/2] Patch level : 12.0 no-patch Files correlati : tf Commento : Inizio preparazione modifiche esterometro discusse in riunione. - Aggiunti filtri clienti per webapp, esteri e soggetti - Aggiunti filtri fornitori per esteri e soggetti - Pulizia del codice generale --- src/tf/tf0100.cpp | 252 +++++++++++++++++++-------------------- src/tf/tf0100a.h | 112 ++++++++++-------- src/tf/tf0100a.uml | 80 ++++++++++--- src/tf/tf0100b.h | 148 ++++++++++++----------- src/tf/tf0101.cpp | 272 ++++++++++++++++++++++++------------------- src/tf/tf0102.cpp | 173 +++++++++++++++------------ src/tf/tf0200.cpp | 10 +- src/tf/tf0400.cpp | 118 +++++++++---------- src/tf/tfutility.cpp | 168 +++++++++++++++++++------- src/tf/tfutility.h | 19 ++- 10 files changed, 785 insertions(+), 567 deletions(-) diff --git a/src/tf/tf0100.cpp b/src/tf/tf0100.cpp index 063498eb5..d0409b220 100644 --- a/src/tf/tf0100.cpp +++ b/src/tf/tf0100.cpp @@ -10,7 +10,7 @@ ///////////////////////////////////////////////////////////////////////////////////// // Le funzioni quelle belle -TString getTipoDoc(int id) +TString get_tipo_doc(int id) { TString ret; switch(id) @@ -42,27 +42,33 @@ TString getTipoDoc(int id) case B_TIPO_FATTSCO: ret = "FS"; break; - /* - case B_TIPO_CORRNINC: - ret = "CN"; + case B_ESTEROMETRO: + ret = "ESTER"; break; - case B_TIPO_CORR: - ret = "CR"; + case B_PAF_NOT_SENT: + ret = "PAF_NS"; break; - case B_TIPO_RICFIS: - ret = "RF"; + case B_PAF_SENT: + ret = "PAF_S"; break; - - case B_TIPO_RICFISNI: - ret = "RN"; + case B_PAF_SOG_FAT: + ret = "PAF_SF"; break; - case B_TIPO_SCONT: - ret = "SC"; + case B_PAF_ESTERI: + ret = "PAF_E"; break; - case B_TIPO_SCONTNI: - ret = "SN"; + case B_PAA_NOT_SENT: + ret = "PAA_NS"; + break; + case B_PAA_SENT: + ret = "PAA_S"; + break; + case B_PAA_ESTERI: + ret = "PAA_E"; + break; + case B_PAA_SOG_FAT: + ret = "PAA_SF"; break; - */ default: ret = "ERR"; break; @@ -70,23 +76,17 @@ TString getTipoDoc(int id) return ret; } -int getTipoDoc(TString id) +int get_tipo_doc(const TString id) { int ret = -1; - if(id == "AF") ret = B_TIPO_AUTOFATT; + if(id == "AF") ret = B_TIPO_AUTOFATT; else if(id == "BD") ret = B_TIPO_BOLLADOG; - // else if(id == "CN") ret = B_TIPO_CORRNINC; - // else if(id == "CR") ret = B_TIPO_CORR; else if(id == "FA") ret = B_TIPO_FATTACQ; else if(id == "FF") ret = B_TIPO_FATTFISC; else if(id == "FS") ret = B_TIPO_FATTSCO; else if(id == "FV") ret = B_TIPO_FATTVEN; else if(id == "NC") ret = B_TIPO_NOTC; else if(id == "ND") ret = B_TIPO_NOTD; - // else if(id == "RF") ret = B_TIPO_RICFIS; - // else if(id == "RN") ret = B_TIPO_RICFISNI; - // else if(id == "SC") ret = B_TIPO_SCONT; - // else if(id == "SN") ret = B_TIPO_SCONTNI; else if(id == "ST") ret = B_TIPO_STORDOC; return ret; } @@ -133,7 +133,7 @@ bool xvt_fsys_fupdate(const char* src, const char* dst) * TD10: Fatt di acquisto intra beni * TD11: Fatt di acquisto intra servizi */ -const char* decodTipo(TToken_string* strarr) +const char* decod_tipo(TToken_string* strarr) { const TString tipodoc = strarr->get(_codnum); TRectype mov = cache().get(LF_MOV, strarr->get(_numero)); @@ -178,18 +178,18 @@ const char* decodTipo(TToken_string* strarr) intraval.get_keys(keys); for(int i = 0; i < keys.items(); i++) { - TString key = *(TString*)keys.objptr(i); - real valItem = *(real*)intraval.objptr(key); - if(valItem > max) + TString key = *static_cast(keys.objptr(i)); + real val_item = *static_cast(intraval.objptr(key)); + if(val_item > max) { keyMax = key; - max = valItem; + max = val_item; } } // Una volta che ho trovato il nostro vincitore vado a prendere il tipo di fattura dal GCS - TString keyPCon = keyMax.ssub(keyMax.find('|') + 1); - if(cache().get(LF_PCON, keyPCon, "RICSER") == "1") + TString key_p_con = keyMax.ssub(keyMax.find('|') + 1); + if(cache().get(LF_PCON, key_p_con, "RICSER") == "1") return "TD11"; else return "TD10"; @@ -230,48 +230,48 @@ const char* decodTipo(TToken_string* strarr) } /* Salvo il record modificato in TFCustom */ -bool saveRec(TToken_string row, bool esportato) +bool save_rec(TToken_string row, const bool esportato) { static TLocalisamfile trasfatt(LF_TRASFATT); static TLocalisamfile mov(LF_MOV); static TString invio; invio.cut(0); static TString key; key.cut(0) << row.get(_numero) << "|"<< row.get(_aliquota); - TRectype rCust = cache().get(LF_TRASFATT, key); + TRectype r_cust = cache().get(LF_TRASFATT, key); // Se la riga non esiste metto la chiave - if(rCust.empty()) + if(r_cust.empty()) { - rCust.put("NUMREG", row.get(_numero)); + r_cust.put("NUMREG", row.get(_numero)); } - rCust.put("TIPO", row.get(_tipocf)); - rCust.put("CODCF", row.get(_codcf)); - rCust.put("OCCAS", row.get(_occas)); - rCust.put("TIPODOC", row.get(_codnum)); - rCust.put("TIPODOCAE", row.get(_codnumAE)); - rCust.put("NUMDOC", row.get(_numdoc)); - rCust.put("DATAREG", row.get(_datareg)); - rCust.put("DATADOC", row.get(_datadoc)); - rCust.put("IMPONIBILE", row.get(_imponibile)); - rCust.put("IMPOSTA", row.get(_importoIVA)); - rCust.put("CODIVA", row.get(_aliquota)); - rCust.put("NATURA", row.get(_natura)); - rCust.put("AUTOFATT", row.get(_autofatt)); + r_cust.put("TIPO", row.get(_tipocf)); + r_cust.put("CODCF", row.get(_codcf)); + r_cust.put("OCCAS", row.get(_occas)); + r_cust.put("TIPODOC", row.get(_codnum)); + r_cust.put("TIPODOCAE", row.get(_codnumAE)); + r_cust.put("NUMDOC", row.get(_numdoc)); + r_cust.put("DATAREG", row.get(_datareg)); + r_cust.put("DATADOC", row.get(_datadoc)); + r_cust.put("IMPONIBILE", row.get(_imponibile)); + r_cust.put("IMPOSTA", row.get(_importoIVA)); + r_cust.put("CODIVA", row.get(_aliquota)); + r_cust.put("NATURA", row.get(_natura)); + r_cust.put("AUTOFATT", row.get(_autofatt)); if(esportato) { invio << "I"; - rCust.put("TFDATA", TDate(TODAY)); + r_cust.put("TFDATA", TDate(TODAY)); } else { invio << row.get(_invio); } - rCust.put("TFINVIO", invio); + r_cust.put("TFINVIO", invio); - return rCust.write_rewrite(trasfatt) == NOERR; + return r_cust.write_rewrite(trasfatt) == NOERR; } -inline const char * noSpecial(char a) +inline const char * no_special(const char a) { if(a == 'à') return "a''"; @@ -289,14 +289,14 @@ inline const char * noSpecial(char a) bool bd2017() { - static TDate today = TDate(TODAY), lastDay = TDate(31,12,2017); - return today <= lastDay; + static TDate today = TDate(TODAY), last_day = TDate(31,12,2017); + return today <= last_day; } TTrFa_mask& msk() { - static TTrFa_mask* msk = NULL; - if (msk == NULL) + static TTrFa_mask* msk = nullptr; + if (msk == nullptr) msk = new TTrFa_mask("tf0100a"); return *msk; } @@ -419,7 +419,7 @@ const TString& TTrFa_record::var2str(const TString& fldname, const TVariant& var { if (tmp[a] == speciali[i]) { - tmp2.cut(0) << tmp.left(a) << noSpecial(speciali[i]) << tmp.mid(a+1); + tmp2.cut(0) << tmp.left(a) << no_special(speciali[i]) << tmp.mid(a+1); tmp = tmp2; } } @@ -544,15 +544,15 @@ void TTrFa_app::log(int severity, const char* msg) { if (severity < 0) { - _logTFF = msg; + _log_tff = msg; } else if (_log == NULL) { _log = new TLog_report; - if (_logTFF.full()) + if (_log_tff.full()) { TString txt; - txt << _logTFF << ": " << msg; + txt << _log_tff << ": " << msg; _log->log(severity, txt); } else @@ -685,7 +685,7 @@ bool TTrFa_app::create() return false; // Questa funzione crea/verifica il DB - verifyDB(create); + verify_db(create); // Setto se ha il modulo FP msk().set_has_fp(has_module(FPAUT)); @@ -694,28 +694,28 @@ bool TTrFa_app::create() } // Sincronizzo il DB SQL con quello di campo -bool TTrFa_app::syncronizeDB() +bool TTrFa_app::syncronize_db() { //xvt_sql_begin(_db); return true; } -bool TTrFa_app::verifyDB(const bool create) +bool TTrFa_app::verify_db(const bool create) { const TFilename ini = "tff.ini"; bool ok = ini.exist(); if (ok) { xvt_sql_begin(_db); - TScanner TFF(ini); - while (ok && !TFF.eof()) + TScanner tff(ini); + while (ok && !tff.eof()) { - const TString& p = TFF.line(); + const TString& p = tff.line(); if (p.starts_with("[TF") && p.ends_with("F]")) { TString16 table = p; table.strip("[]"); - ok = create_table(TFF, table); + ok = create_table(tff, table); } } if(ok && create) @@ -740,7 +740,7 @@ bool TTrFa_app::verifyDB(const bool create) return true; } -bool TTrFa_app::copySSA() +bool TTrFa_app::copy_ssa() { TFilename tmp; @@ -772,14 +772,14 @@ bool TTrFa_app::copySSA() bool TTrFa_app::send(TTrFa_mask* msk) { // Controllo se è la prima esecuzione, in caso positivo chiedo se vuole controllare p.iva e cf - bool first = ini_get_bool(CONFIG_DITTA, "tf", "FirstExec", true); + const bool first = ini_get_bool(CONFIG_DITTA, "tf", "FirstExec", true); if(first) { ini_set_bool(CONFIG_DITTA, "tf", "FirstExec", false); if(yesno_box("Stai eseguendo il programma per la prima volta,\nvuoi controllare di avere tutti i Codici Fiscali e Partite IVA corrette?")) { - TExternal_app checkApp("cg1 -2 L"); - checkApp.run(); + TExternal_app check_app("cg1 -2 L"); + check_app.run(); if(!yesno_box("Desideri proseguire con l'esportazione?")) { return false; @@ -812,11 +812,11 @@ bool TTrFa_app::send(TTrFa_mask* msk) // Imposto l'esportazione if(yesno_box("Vuoi segnare i record esportati?")) { - if(setEsportato(sheet)) + if(set_esportato(sheet)) message_box("Record segnati correttamente!"); else message_box("Ci sono stati degli errori durante la riscrittura dei records"); - msk->setFilterChanged(); + msk->set_filter_changed(); } } @@ -825,21 +825,21 @@ bool TTrFa_app::send(TTrFa_mask* msk) return true; } -TString TTrFa_app::getKey(TToken_string* strarr) +TString TTrFa_app::get_key(TToken_string* strarr) { return strarr->get_char(_tipocf) == 'C' ? DTE_PROVV : DTR_PROVV; } -TString TTrFa_app::getHeader(TToken_string* strarr) +TString TTrFa_app::get_header(TToken_string* strarr) { /* Devo crearmi una struttura dove immagazzino delle strutture di clienti e all'interno ci metto i numeratori che mi chiedono * Così facendo mando a puttane persino l'append che potevo tranquillamente implementare prima e creare fastidiose query per capire dove cazzo sto */ // Chiave header (20): TIPOCF(1) + CODCF(6) - static long int idHeader = 0L; + static long int id_header = 0L; // Cerco/Aggiungo il Clifo all'std::map - static TString keyMap; keyMap.cut(0); + static TString key_map; key_map.cut(0); static TString tipocf, codcf, occas; tipocf.cut(0); codcf.cut(0); occas.cut(0); @@ -858,29 +858,29 @@ TString TTrFa_app::getHeader(TToken_string* strarr) occas << strarr->get(_occas); } - keyMap << tipocf << "|" << codcf << "|" << occas; + key_map << tipocf << "|" << codcf << "|" << occas; - clifoDoc app; + clifo_doc app; // Non è presente e lo inserisco per la chiave body - if(mCliDoc.find(keyMap) == mCliDoc.end()) + if(_m_cli_doc.find(key_map) == _m_cli_doc.end()) { - idHeader++; - app.contCliFo = idHeader; - app.countDoc = 0L; - mCliDoc.insert(std::pair(keyMap, app)); + id_header++; + app._cont_cli_fo = id_header; + app._count_doc = 0L; + _m_cli_doc.insert(std::pair(key_map, app)); } static TString header; - static TString formatString; formatString.cut(0) << "%c%0"; + static TString format_string; format_string.cut(0) << "%c%0"; if(occas.blank()) { - formatString << 13 - codcf.len() << "d"; - header.format(formatString, tipocf[0], 0); + format_string << 13 - codcf.len() << "d"; + header.format(format_string, tipocf[0], 0); header << codcf; // Perchè cazzo non va il %s!? } else { - formatString << 13 - occas.len() << "d"; - header.format(formatString, 'O', 0); + format_string << 13 - occas.len() << "d"; + header.format(format_string, 'O', 0); header << occas; } @@ -888,23 +888,23 @@ TString TTrFa_app::getHeader(TToken_string* strarr) return header; } -TString TTrFa_app::getBody(TToken_string* strarr, bool add) +TString TTrFa_app::get_body(TToken_string* strarr, bool add) { /* Sembra che utilizzare identificatori chiari e sensati in questo mondo non è concesso, quindi adesso vi sbatto un bell'ID numerico * Ok per OGNI cliente devo assegnarli un identificativo del numero della fattura */ - static TString keyMap; keyMap.cut(0) << strarr->get_char(_tipocf) << "|" << strarr->get_int(_codcf) << "|" << strarr->get(_occas); + static TString key_map; key_map.cut(0) << strarr->get_char(_tipocf) << "|" << strarr->get_int(_codcf) << "|" << strarr->get(_occas); - clifoDoc app = mCliDoc[keyMap]; - static TString numDoc; numDoc.cut(0) << strarr->get(_numdoc) << "|" << TDate(strarr->get(_datadoc)).year(); + clifo_doc app = _m_cli_doc[key_map]; + static TString num_doc; num_doc.cut(0) << strarr->get(_numdoc) << "|" << TDate(strarr->get(_datadoc)).year(); if(add) { - app.countDoc += 1; - app.docID.insert(std::pair(numDoc, app.countDoc)); + app._count_doc += 1; + app._doc_id.insert(std::pair(num_doc, app._count_doc)); } - mCliDoc[keyMap] = app; + _m_cli_doc[key_map] = app; - static TString body; body.format("%07d%07d", app.contCliFo, app.docID[numDoc]); + static TString body; body.format("%07d%07d", app._cont_cli_fo, app._doc_id[num_doc]); return body; } @@ -934,13 +934,13 @@ bool TTrFa_app::tff0100(TSheet_field& sheet) // Controllo la presenza di un caricamento in attesa if(dte.search(DTE_PROVV)) { - bool sent = dte.get("P1_KEYPRGINVIO").as_string() == DTE_PROVV; + const bool sent = dte.get("P1_KEYPRGINVIO").as_string() == DTE_PROVV; if(sent) { - TString msg = "É presente un'altra esportazione non ancora elaborata vuoi eliminarla?"; + static const TString msg = "É presente un'altra esportazione non ancora elaborata vuoi eliminarla?"; if(yesno_box(msg)) { - if(!emptyTables(DTE_PROVV)) + if(!empty_tables(DTE_PROVV)) { error_box("Fallita eliminazione record!!!"); return false; @@ -969,13 +969,13 @@ bool TTrFa_app::tff0100(TSheet_field& sheet) // Controllo la presenza di un caricamento in attesa if(dtr.search(DTR_PROVV)) { - bool sent = dtr.get("P1_KEYPRGINVIO").as_string() == DTR_PROVV; - TString msg = "É presente un'altra esportazione non ancora elaborata vuoi eliminarla?"; + const bool sent = dtr.get("P1_KEYPRGINVIO").as_string() == DTR_PROVV; + static const TString msg = "É presente un'altra esportazione non ancora elaborata vuoi eliminarla?"; if(sent) { if(yesno_box(msg)) { - if(!emptyTables(DTR_PROVV)) + if(!empty_tables(DTR_PROVV)) { error_box("Fallita eliminazione record!!!"); return false; @@ -999,7 +999,7 @@ bool TTrFa_app::tff0100(TSheet_field& sheet) return ok; } -bool TTrFa_app::tff0200(TString key) +bool TTrFa_app::tff0200(const TString& key) { /******************************************************************************************************************** * Cedeprest * @@ -1038,10 +1038,10 @@ bool TTrFa_app::tff0200(TString key) tff0200f.set("P2_SEDENAZ", nazione); } - myrfso = ""; - if(haveRFSO(myrfso)) + _myrfso = ""; + if(have_rfso(_myrfso)) { - TRectype r_ana = cache().get(LF_ANAG, TString(myrfso.left(1)) << "|" << myrfso.sub(1)); + TRectype r_ana = cache().get(LF_ANAG, TString(_myrfso.left(1)) << "|" << _myrfso.sub(1)); if(r_ana.get_char("TIPORFSO") == 'S') // Stabile Organizzazione { TAnagrafica rfso(r_ana); @@ -1161,8 +1161,8 @@ bool TTrFa_app::tff0400(TSheet_field& sheet) } TTrFa_record tff0400f("TFF0400F"); - tff0400f.set("P4_KEYPRGINVIO", getKey(strarr)); - tff0400f.set("P4_KEYHEADERFATT", getHeader(strarr)); + tff0400f.set("P4_KEYPRGINVIO", get_key(strarr)); + tff0400f.set("P4_KEYHEADERFATT", get_header(strarr)); // Autofattura if(strcmp(strarr->get(_autofatt),"X") == 0) @@ -1351,30 +1351,30 @@ bool TTrFa_app::tff0700(TSheet_field& sheet) // TTrFa_record tff0700f("TFF0700F"); - tff0700f.set("P7_KEYPRGINVIO", getKey(strarr)); + tff0700f.set("P7_KEYPRGINVIO", get_key(strarr)); static TString header; - header.cut(0) << getHeader(strarr); + header.cut(0) << get_header(strarr); tff0700f.set("P7_KEYHEADERFATT", header); - tff0700f.set("P7_KEYBODYFATT", getBody(strarr)); + tff0700f.set("P7_KEYBODYFATT", get_body(strarr)); TString natura = strarr->get(_natura); tff0700f.set("P7_TIPODOC", strarr->get(_codnumAE)); // Controllo il tipo di esigilità - tff0700f.set("P7_DATA", toDate(strarr->get(_datadoc))); + tff0700f.set("P7_DATA", to_date(strarr->get(_datadoc))); static TString ndoc; ndoc.cut(0) << cache().get(LF_MOV, strarr->get(_numero), "NUMDOCEXT").right(20); if(ndoc.blank()) ndoc.cut(0) << strarr->get(_numdoc); tff0700f.set("P7_NUMERO", ndoc); - tff0700f.set("P7_DATAREG", toDate(strarr->get(_datareg))); // Obbligatoria nei DTR + tff0700f.set("P7_DATAREG", to_date(strarr->get(_datareg))); // Obbligatoria nei DTR tff0700f.set("P7_GESTIONE", ""); // Campi di controllo tff0700f.set("P7_CLIFOR", header); tff0700f.set("P7_NRODOC", ndoc); - tff0700f.set("P7_DTADOC", toDate(strarr->get(_datadoc))); + tff0700f.set("P7_DTADOC", to_date(strarr->get(_datadoc))); ok = tff0700f.insert(); @@ -1383,7 +1383,7 @@ bool TTrFa_app::tff0700(TSheet_field& sheet) if(!ok) return false; } // In qualsiasi caso va messa la riga ma prima elaboro il numero della riga! - static TString newKey; newKey.cut(0) << getBody(strarr, false); + static TString newKey; newKey.cut(0) << get_body(strarr, false); if(docRighe.find(newKey) == docRighe.end()) { @@ -1408,9 +1408,9 @@ bool TTrFa_app::tff0700(TSheet_field& sheet) bool TTrFa_app::tff2200(TToken_string* strarr, int nriga) { TTrFa_record tff2200f("TFF2200F"); - tff2200f.set("PL_KEYPRGINVIO", getKey(strarr)); - tff2200f.set("PL_KEYHEADERFATT", getHeader(strarr)); - tff2200f.set("PL_KEYBODYFATT", getBody(strarr, false)); + tff2200f.set("PL_KEYPRGINVIO", get_key(strarr)); + tff2200f.set("PL_KEYHEADERFATT", get_header(strarr)); + tff2200f.set("PL_KEYBODYFATT", get_body(strarr, false)); TString numriga; numriga.format("%020d", nriga); @@ -1446,8 +1446,8 @@ bool TTrFa_app::tff2200(TToken_string* strarr, int nriga) bool TTrFa_app::tff3100(TToken_string* strarr, TRectype r_ana) { TTrFa_record tff3100f("TFF3100F"); - tff3100f.set("PH_KEYPRGINVIO", getKey(strarr)); - tff3100f.set("PH_KEYHEADERFATT", getHeader(strarr)); + tff3100f.set("PH_KEYPRGINVIO", get_key(strarr)); + tff3100f.set("PH_KEYHEADERFATT", get_header(strarr)); if(_append) tff3100f.remove(); @@ -1496,7 +1496,7 @@ bool TTrFa_app::tff3100(TToken_string* strarr, TRectype r_ana) return tff3100f.insert(); } -bool TTrFa_app::setEsportato(TSheet_field& sheet) +bool TTrFa_app::set_esportato(TSheet_field& sheet) { bool ok = true; TProgress_monitor p(sheet.items(),"Segno l'esportazione sui records"); @@ -1507,7 +1507,7 @@ bool TTrFa_app::setEsportato(TSheet_field& sheet) TString modificato = strarr->get(_forzata); if(modificato == "X") { - ok = saveRec(*strarr, true); + ok = save_rec(*strarr, true); if(!ok) return false; } else @@ -1526,7 +1526,7 @@ bool TTrFa_app::setEsportato(TSheet_field& sheet) return ok; } -bool TTrFa_app::emptyTables(TString key) +bool TTrFa_app::empty_tables(TString key) { TString query; query << "DELETE FROM TFF0100F WHERE P1_KEYPRGINVIO = '" << key << "';\n"; @@ -1542,11 +1542,11 @@ bool TTrFa_app::emptyTables(TString key) void TTrFa_app::main_loop() { // Sposto SSA - if(!copySSA()) return; + if(!copy_ssa()) return; while (msk().run() == K_ENTER) { - if(msk().checkNotEmpty()) + if(msk().check_not_empty()) { send(&msk()); //ini_set_string(CONFIG_DITTA, "tf", "LastSend", ++TDate(msk.get(F_DATAFIN))); diff --git a/src/tf/tf0100a.h b/src/tf/tf0100a.h index f9f988034..18a285dd4 100644 --- a/src/tf/tf0100a.h +++ b/src/tf/tf0100a.h @@ -1,62 +1,72 @@ -#define START_MASK 401 +#define START_MASK 401 -#define F_DATAINI 401 -#define F_DATAFIN 402 -#define F_TIPOCF 403 -#define F_CODCF 404 -#define F_RAGSOC 405 -#define F_FATTSEL 406 +#define F_DATAINI 401 +#define F_DATAFIN 402 +#define F_TIPOCF 403 +#define F_CODCF 404 +#define F_RAGSOC 405 +#define F_FATTSEL 406 /* Campi booleani documento */ -#define START_BOOLEAN 407 +#define START_BOOLEAN 407 +#define START_BOOLEAN_FATT 407 -#define B_TIPO_AUTOFATT 407 -#define B_TIPO_FATTACQ 408 -#define B_TIPO_FATTFISC 409 -#define B_TIPO_FATTVEN 410 -#define B_TIPO_FATTSCO 415 -#define B_TIPO_NOTC 411 -#define B_TIPO_NOTD 412 -#define B_TIPO_BOLLADOG 413 -#define B_TIPO_STORDOC 414 +#define B_TIPO_AUTOFATT 407 +#define B_TIPO_FATTACQ 408 +#define B_TIPO_FATTFISC 409 +#define B_TIPO_FATTVEN 410 +#define B_TIPO_FATTSCO 415 +#define B_TIPO_NOTC 411 +#define B_TIPO_NOTD 412 +#define B_TIPO_BOLLADOG 413 +#define B_TIPO_STORDOC 414 + +#define END_BOOLEAN_FATT 415 // Boolean filtri FP -#define B_ESTEROMETRO 416 -#define B_PAF_SENT 417 -#define B_PAF_NOT_SENT 418 -#define B_REVCHARGE 419 +#define B_ESTEROMETRO 416 +#define B_PAF_NOT_SENT 417 +#define B_PAF_SENT 418 +#define B_PAF_SOG_FAT 419 +#define B_PAF_ESTERI 420 -#define END_BOOLEAN 419 +#define B_PAA_NOT_SENT 421 +#define B_PAA_SENT 422 +#define B_PAA_ESTERI 423 +#define B_PAA_SOG_FAT 424 -#define END_MASK 421 +#define END_BOOLEAN 424 -#define F_RIGHE 301 // Sheet righe tf +#define END_MASK 424 -#define START_SHEET 101 -#define A_DATAREG 101 -#define A_TIPODOC 102 -#define A_TIPODOCAE 103 -#define A_NUMDOC 104 -#define A_DATADOC 105 -#define A_ALIQUOTA 106 -#define A_IMPONIBILE 107 -#define A_IMPOSTA 108 -#define A_NATURA 109 -#define A_DETRAIB 110 -#define A_TIPOCF 111 -#define A_CODCF 112 -#define A_OCFPI 113 -#define A_RAGSOC 114 -#define A_RFSO 115 -#define A_RAGSOCRFSO 116 -#define A_PAIV 117 -#define A_COFI 118 -#define A_REVERSE 119 -#define A_AUTOFATT 120 -#define A_SPEDITA 121 -#define A_INVIO 122 -#define A_FORZATA 123 -#define A_NUMERO 124 -#define A_CODERR 125 +#define F_RIGHE 301 // Sheet righe tf -#define END_SHEET 125 \ No newline at end of file +#define START_SHEET 101 + +#define A_DATAREG 101 +#define A_TIPODOC 102 +#define A_TIPODOCAE 103 +#define A_NUMDOC 104 +#define A_DATADOC 105 +#define A_ALIQUOTA 106 +#define A_IMPONIBILE 107 +#define A_IMPOSTA 108 +#define A_NATURA 109 +#define A_DETRAIB 110 +#define A_TIPOCF 111 +#define A_CODCF 112 +#define A_OCFPI 113 +#define A_RAGSOC 114 +#define A_RFSO 115 +#define A_RAGSOCRFSO 116 +#define A_PAIV 117 +#define A_COFI 118 +#define A_REVERSE 119 +#define A_AUTOFATT 120 +#define A_SPEDITA 121 +#define A_INVIO 122 +#define A_FORZATA 123 +#define A_NUMERO 124 +#define A_CODERR 125 + +#define END_SHEET 125 \ No newline at end of file diff --git a/src/tf/tf0100a.uml b/src/tf/tf0100a.uml index 0a35d1a1e..7dff27fe2 100644 --- a/src/tf/tf0100a.uml +++ b/src/tf/tf0100a.uml @@ -37,6 +37,12 @@ BEGIN PICTURE TOOL_EMAIL END +BUTTON DLG_PDF 2 2 +BEGIN + PROMPT 1 1 "Cambio stato" + PICTURE TOOL_EDIT +END + #include ENDPAGE @@ -165,38 +171,78 @@ BEGIN FLAGS "" END -GROUPBOX DLG_NULL 65 6 -BEGIN - PROMPT 30 11 "Filtri clienti FP" - MODULE FP -END +ENDPAGE + +PAGE "Esterometro" 0 2 0 0 BOOLEAN B_ESTEROMETRO BEGIN - PROMPT 31 12 "Modalità esterometro" - MESSAGE FALSE DISABLE,10@ - MESSAGE TRUE ENABLE,10@ + PROMPT 1 1 "Modalità esterometro" + MESSAGE FALSE DISABLE,10@ | DISABLE,20@ + MESSAGE TRUE ENABLE,10@ | ENABLE,20@ END -BOOLEAN B_PAF_SENT +GROUPBOX DLG_NULL 65 6 BEGIN - PROMPT 31 13 "Fatture Inviate" - GROUP 10 - FLAGS "" + PROMPT 0 2 "Clienti FP" + MODULE FP END BOOLEAN B_PAF_NOT_SENT BEGIN - PROMPT 31 14 "Fatture non Inviate" + PROMPT 1 3 "Fatture non inviate (Fatturazione Campo)" GROUP 10 +END + +BOOLEAN B_PAF_SENT +BEGIN + PROMPT 1 4 "Fatture inviate (Fatturazione Campo)" + GROUP 10 +END + +BOOLEAN B_PAF_SOG_FAT +BEGIN + PROMPT 1 5 "Soggetti a fatturazione elettronica" + GROUP 10 +END + +BOOLEAN B_PAF_ESTERI +BEGIN + PROMPT 1 6 "Esteri" + GROUP 10 +END + +GROUPBOX DLG_NULL 65 6 +BEGIN + PROMPT 0 8 "FORNITORI FP" + MODULE FP +END + +BOOLEAN B_PAA_NOT_SENT +BEGIN + PROMPT 1 9 "Fatture non ricevute (Fatturazione Campo)" + GROUP 10 + FLAGS "H" +END + +BOOLEAN B_PAA_SENT +BEGIN + PROMPT 1 10 "Fatture ricevute (Fatturazione Campo)" + GROUP 10 + FLAGS "H" +END + +BOOLEAN B_PAA_ESTERI +BEGIN + PROMPT 1 11 "Esteri" + GROUP 20 FLAGS "" END -BOOLEAN B_REVCHARGE +BOOLEAN B_PAA_SOG_FAT BEGIN - PROMPT 31 15 "Fatture in reverse charge" - GROUP 10 - FLAGS "" + PROMPT 1 12 "Soggetti a fatturazione elettronica" + GROUP 20 END ENDPAGE diff --git a/src/tf/tf0100b.h b/src/tf/tf0100b.h index 00243fbee..80e148e65 100644 --- a/src/tf/tf0100b.h +++ b/src/tf/tf0100b.h @@ -1,3 +1,5 @@ +#pragma once + #include #include #include @@ -39,7 +41,7 @@ enum return_code // Su DB: X o ''->Da inviare, F->Forzato, I->Inviato, N->Non inviare enum filter_fatt { - toSend, // "", "X", "F", "E" + to_send, // "", "X", "F", "E" sent, // "I" untouched, // "", "X" forced, // "F" @@ -59,8 +61,6 @@ enum filter_fatt #define FLAG_FORZATO "F" #define FLAG_INVIATO "I" #define SPESOMETROBASE "ModuliSirio" -#define REG_ATT 1 -#define REG_PAS 2 #ifndef CARATTERI_SPECIALI #define CARATTERI_SPECIALI "àèéìòù°" @@ -68,7 +68,7 @@ enum filter_fatt /* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza) * per avere l'inserimento nello sheet corretto */ -enum spesometroFields{ +enum spesometro_fields{ _spedita = A_SPEDITA - SHEET_GAP, _invio = A_INVIO - SHEET_GAP, _forzata = A_FORZATA - SHEET_GAP, @@ -101,23 +101,23 @@ enum spesometroFields{ ///////////////////////////////////////////////////////////////////////////////////// // Da un id ritorna il tipo doc corrispondente -TString getTipoDoc(int id); -int getTipoDoc(TString id); +TString get_tipo_doc(int id); +int get_tipo_doc(TString id); // Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h) static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str); // Aggiorna il file dst se più vecchio di src (Potrebbe diventare una funzione di XVT.h) bool xvt_fsys_fupdate(const char* src, const char* dst); // Decodifica il tipo di documento per il trasferimento fatture -const char * decodTipo(TToken_string* strarr); +const char * decod_tipo(TToken_string* strarr); // Salvo un singolo record -bool saveRec(TToken_string row, bool esportato = false); +bool save_rec(TToken_string row, bool esportato = false); // Ritorno una data in formato ANSI -inline TDate toDate(const char * date) { return TDate(date).string(); } +inline TDate to_date(const char * date) { return TDate(date).string(); } // Salto se la riga non è abilitata #define IF_IS_ENABLED(strarr) if(strcmp(strarr->get(_invio), FLAG_INVIO) != 0 && strcmp(strarr->get(_invio), FLAG_FORZATO) != 0 && strcmp(strarr->get(_invio), FLAG_INVIATO) != 0) continue; // Ritorno il carattere senza accento maiuscolo -inline const char * noSpecial(char a); +inline const char * no_special(char a); // Ritorno se è ancora valida la bolla doganale senza informazioni fornitore bool bd2017(); @@ -152,8 +152,8 @@ public: bool search(); bool search(const char* k1, const char* k2 = NULL, const char* k3 = NULL); - virtual TObject* dup() const { return new TTrFa_record(*this); } - virtual bool ok() const { return _table.not_empty(); } + TObject* dup() const override { return new TTrFa_record(*this); } + bool ok() const override { return _table.not_empty(); } TTrFa_record& operator=(const TTrFa_record& rec) { copy(rec); return *this; } TTrFa_record(const TTrFa_record& rec) { copy(rec); } @@ -170,26 +170,44 @@ public: class TTrFa_cursors : TObject { friend class TCursor; - TISAM_recordset* c_rmoviva; - TISAM_recordset* c_trasfatt; - bool _newMov; - bool _newCust; + TISAM_recordset* _c_rmoviva; + TISAM_recordset* _c_trasfatt; + bool _new_mov; + bool _new_cust; // Se trovo un record custom devo saltare tutti quelli che trovo successivamente, per fare ciò utilizzo una TToken_string - TToken_string _alqCust; - bool _has_fp; + TToken_string _alq_cust; + bool _esterometro; + // paf non inviati + bool _paf_ns; + // paf inviati + bool _paf_s; + // paf sogg. fatt + bool _paf_sf; + // paf esteri + bool _paf_e; + // paa non inviati + bool _paa_ns; + // paa inviati + bool _paa_s; + // paa sogg. fatt + bool _paa_sf; + // paa esteri + bool _paa_e; + TRectype _next(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento - TRectype _nextCust(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento tra quelli custom - bool checkEnabled(TISAM_recordset* origCur); + TRectype _next_cust(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento tra quelli custom + bool check_enabled(TISAM_recordset* orig_cur); + void reset_esterometro(); public: - TTrFa_cursors(bool has_fp) : c_rmoviva(nullptr), c_trasfatt(nullptr), _newMov(false), _newCust(false), _has_fp(has_fp){} + TTrFa_cursors(); ~TTrFa_cursors(); - long int getIvaItems() { return c_rmoviva->items(); } - long int getIvaPos() { return c_rmoviva->cursor()->pos(); } - TRectype getIva() { return c_rmoviva->cursor()->curr(); } + long int get_iva_items() const { return _c_rmoviva->items(); } + long int get_iva_pos() const { return _c_rmoviva->cursor()->pos(); } + TRectype get_iva() const { return _c_rmoviva->cursor()->curr(); } int next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf, TString& ocfpi); // Legge tutto il prossimo movimento, in importi mette per ogni codiva la somma - int updateFilters(const char tipocf, const long codcf, TDate dal, TDate al, int cod = toSend); + int update_filters(const char tipocf, const long codcf, TDate dal, TDate al, int cod = to_send); }; ///////////////////////////////////////////////////////////////////////////////////// @@ -206,51 +224,51 @@ class TTrFa_mask : public TAutomask bool _has_fp; protected: - virtual void next_page(int p); - TRecnotype nuovo_progr() const; - void changeInvio(TString tipocf, TString codcf, TString numdoc, TString invio) const; - virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - void openJava(); + void next_page(int p) override; + static TRecnotype nuovo_progr(); + void change_invio(const TString& tipocf, const TString& codcf, const TString& numdoc, const TString& invio) const; + bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; + void open_java(); public: - void set_has_fp(bool has_fp) { _has_fp = has_fp; } - void setFilterChanged() { _filter_changed = true; } + void set_has_fp(const bool has_fp) { _has_fp = has_fp; } + void set_filter_changed() { _filter_changed = true; } void load_sheet(); - TTrFa_mask(TString msk); + TTrFa_mask(const TString& msk); ~TTrFa_mask(); // Carico i tipi documento all'inizio - void loadConfig(); + void load_config(); // Salvo i tipi documento - void saveConfig(); + void save_config() const; // Salvo tutti i records - bool saveAll(); + bool save_all() const; // Controllo tutti i records - bool checkAll(); + bool check_all(); // Testo validità record - bool checkRec(TPrinter* stampa, TToken_string* rec); + static bool check_rec(TPrinter* stampa, TToken_string* rec); // Controllo che siano presenti records - bool checkNotEmpty(); + bool check_not_empty(); // Controllo finale prima di inviare il tutto, se ci sono fatture // con più volte lo stesso codice aliquota disabilito il precedente - void theFinalCheckDown(); + void the_final_check_down(); // Mette il flag di invio = [flag] per la riga numero [nrow] - void flagRow(int nrow, TString flag); + void flag_row(int nrow, const TString& flag); // Salto se la riga ha un tipo invio non del filtro - bool checkInvio(const TString& invio); + bool check_invio(const TString& invio) const; }; // Funzione inline di stampa -inline void printError(TPrinter* stampa, TString movimento, TString documento, TString msgerr); +inline void print_error(TPrinter* stampa, const TString& movimento, const TString& documento, const TString& msgerr); TTrFa_mask& msk(); ///////////////////////////////////////////////////////////////////////////////////// // TTrFa_app ///////////////////////////////////////////////////////////////////////////////////// -struct clifoDoc +struct clifo_doc { - long contCliFo; - long countDoc; - std::map docID; + long _cont_cli_fo; + long _count_doc; + std::map _doc_id; }; class TTrFa_app : public TSkeleton_application @@ -259,41 +277,41 @@ class TTrFa_app : public TSkeleton_application TString16 _cofi; TFilename _dbname; TLog_report* _log; - TString _logTFF; + TString _log_tff; bool _append; - TString myrfso; - static long header; + TString _myrfso; + static long _header; // Solitamente nei programmi di campo cerco di sfruttare le classi interne ma per mancanza di tempo sono costretto a usare l'std::vector - std::map mCliDoc; + std::map _m_cli_doc; private: int parse_line(const TString& line, TString& var, TString& val) const; - bool create_table(TScanner& TFF, const TString& table); - TString getKey(TToken_string* strarr); - TString getHeader(TToken_string* strarr); - TString getBody(TToken_string* strarr, bool add = true); + bool create_table(TScanner& tff, const TString& table); + static TString get_key(TToken_string* strarr); + TString get_header(TToken_string* strarr); + TString get_body(TToken_string* strarr, bool add = true); bool tff0100(TSheet_field& sheet); // Header esportazione - bool tff0200(TString key); // Anagrafica ditta + bool tff0200(const TString& key); // Anagrafica ditta bool tff0300(TString key, TRectype r_ana); // Rappresentante fiscale ditta bool tff0400(TSheet_field& sheet); // Anagrafica clifo bool tff0700(TSheet_field& sheet); // Testata documento bool tff2200(TToken_string* strarr, int nriga); // Riepilogo aliquote bool tff3100(TToken_string* strarr, TRectype r_ana); // Rappresentante fiscale clifo - bool setEsportato(TSheet_field& sheet); - bool emptyTables(TString key); // Cancella da tutte le tabelle i record con chiave key + bool set_esportato(TSheet_field& sheet); + bool empty_tables(TString key); // Cancella da tutte le tabelle i record con chiave key protected: void log(int severity, const char* msg); bool show_log(); - bool syncronizeDB(); - bool verifyDB(const bool create); - bool copySSA(); + bool syncronize_db(); + bool verify_db(const bool create); + bool copy_ssa(); public: - virtual bool create(); - virtual bool destroy(); - virtual void main_loop(); + bool create() override; + bool destroy() override; + void main_loop() override; bool send(TTrFa_mask* msk); - TTrFa_app() : _log(NULL) {} + TTrFa_app() : _log(nullptr) {} }; \ No newline at end of file diff --git a/src/tf/tf0101.cpp b/src/tf/tf0101.cpp index e85a7783b..f6ff34ad3 100644 --- a/src/tf/tf0101.cpp +++ b/src/tf/tf0101.cpp @@ -53,17 +53,23 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) } } break; + case DLG_PDF: + { + TMask cs_mask("Cambiamento stato movimenti", 1, 20, 10); + + } + break; case F_RIGHE: if (e == se_notify_add) { - TSheet_field& s = (TSheet_field&)o; + TSheet_field& s = dynamic_cast(o); TToken_string& row = s.row(jolly); row.add(nuovo_progr(), s.cid2index(A_NUMERO)); row.add(get(F_TIPOCF), s.cid2index(A_TIPOCF)); } else if (e == se_query_del) { - TSheet_field& s = (TSheet_field&)o; + TSheet_field& s = dynamic_cast(o); TToken_string& row = s.row(jolly); const TRecnotype progr = row.get_long(0); return progr >= MOV_CUSTOM; @@ -78,7 +84,7 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) // Mi interessa solo fe_edit if(e != fe_modify) break; // Controllo che la data sia < della data documento e l'esercizio sia quello richiesto - TDate datareg = o.get(), datadoc = o.mask().get(A_DATADOC); + TDate datareg = static_cast(o.get()), datadoc = o.mask().get_date(A_DATADOC); if(datareg >= get_date(F_DATAINI) && datareg <= get_date(F_DATAFIN)) { // Controllo la data del documento @@ -102,7 +108,7 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { // Mi interessa solo fe_edit if(e != fe_modify) break; - TDate datareg = o.mask().get(A_DATAREG), datadoc = o.get(); + TDate datareg = o.mask().get_date(A_DATAREG), datadoc = static_cast(o.get()); // Controllo la data di registrazione if(datareg.ok()) { @@ -120,7 +126,7 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) // Calcolo la natura o.mask().set(A_NATURA, natura(o.get())); // Se esiste un imponibile calcolo l'imposta - real imponibile = o.mask().get(A_IMPONIBILE), imposta = ZERO; + real imponibile = o.mask().get_real(A_IMPONIBILE), imposta = ZERO; if(imponibile > 0) { imposta = imponibile * real(cache().get("%IVA", o.get(), "R0")) / 100; @@ -133,9 +139,9 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) if(e == fe_modify) { // Se esiste l'iva calcolo l'imposta - real imponibile = o.get(), imposta = ZERO; + real imponibile = static_cast(o.get()), imposta = ZERO; TString codiva = o.mask().get(A_ALIQUOTA); - if(codiva != "") + if(codiva.full()) { imposta = imponibile * real(cache().get("%IVA", codiva, "R0")) / 100; if(imposta != o.mask().get_real(A_IMPOSTA) && yesno_box("Aggiornare l'imposta?")) @@ -147,17 +153,17 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) if(e == fe_modify) { // Controllo dell'esistenza sia di codiva che dell'imponibile e verifico che l'importo immesso sia corretto - real imponibile = o.mask().get(A_IMPONIBILE), imposta = ZERO; + real imponibile = o.mask().get_real(A_IMPONIBILE), imposta = ZERO; TString codiva = o.mask().get(A_ALIQUOTA); - if(codiva != "" && imponibile > ZERO) + if(codiva.full() && imponibile > ZERO) { imposta = imponibile * real(cache().get("%IVA", codiva, "R0")) / 100; imposta = imposta.round(2); // Controllo che l'aliquota calcolata sia == a quella che ho qua - real impostaInserita = o.get(); - if(impostaInserita != imposta) + real imposta_inserita = static_cast(o.get()); + if(imposta_inserita != imposta) { TString msg; - msg << "Attenzione!! Il valore immesso " << impostaInserita.string() << "€ non è corretto!\n"; + msg << "Attenzione!! Il valore immesso " << imposta_inserita.string() << "€ non è corretto!\n"; msg << "Valore corretto: " << imposta.string() << "€\nVuoi proseguire?"; if(!yesno_box(msg)) { @@ -180,7 +186,7 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) TRectype app = getCli(tipocf, codcf, ocfpi); o.mask().set(A_RAGSOC, app.get("RAGSOC")); o.mask().set(A_RFSO, app.get("CODRFSO")); - o.mask().set(A_RAGSOCRFSO, getRFSO(app.get("CODRFSO"))); + o.mask().set(A_RAGSOCRFSO, get_rfso(app.get("CODRFSO"))); o.mask().set(A_PAIV, app.get("PAIV")); o.mask().set(A_COFI, app.get("COFI")); @@ -199,11 +205,11 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) break; case DLG_SAVEREC: if(e == fe_button) - saveAll(); + save_all(); break; case DLG_ARCHIVE: if(e == fe_button) - checkAll(); + check_all(); break; case DLG_EDIT: if(e == fe_button) @@ -263,18 +269,18 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) // Vado a cercare la riga FOR_EACH_SHEET_ROW(sheet, r, strarr) { - long thisProg; - TString thisAlq; - strarr->get(_numero, thisProg); - strarr->get(_aliquota, thisAlq); - if(thisProg == progr && thisAlq == codalq) break; + long this_prog; + TString this_alq; + strarr->get(_numero, this_prog); + strarr->get(_aliquota, this_alq); + if(this_prog == progr && this_alq == codalq) break; } sheet.destroy(r); // Aggiorna in automatico // Se ha cancellato un movimento custom che deriva dalla prima nota propongo di andarlo a ripescare if(progr < MOV_CUSTOM && yesno_box("Hai cancellato una riga custom di un movimento in prima nota, vuoi ricaricare la tabella?\n(Tutti i record verranno salvati per non perdere le modifiche!)")) { - saveAll(); + save_all(); load_sheet(); return true; } @@ -282,8 +288,25 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) break; case DLG_EMAIL: if(e == fe_button) - openJava(); + open_java(); break; + + case B_PAF_NOT_SENT: + case B_PAF_SENT: + { + const bool ena_no_wa = !(get_bool(B_PAF_NOT_SENT) || get_bool(B_PAF_SENT)); + enable(B_PAF_SOG_FAT, ena_no_wa); + enable(B_PAF_ESTERI, ena_no_wa); + break; + } + case B_PAA_NOT_SENT: + case B_PAA_SENT: + { + const bool ena_no_wa = !(get_bool(B_PAA_NOT_SENT) || get_bool(B_PAA_SENT)); + enable(B_PAA_SOG_FAT, ena_no_wa); + enable(B_PAA_ESTERI, ena_no_wa); + break; + } default: break; } @@ -300,7 +323,7 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { TString invio = o.mask().get(A_INVIO); if(invio != FLAG_FORZATO && invio != FLAG_ERRORE) - changeInvio(o.mask().get(A_TIPOCF), o.mask().get(A_CODCF), o.mask().get(A_NUMDOC), invio); + change_invio(o.mask().get(A_TIPOCF), o.mask().get(A_CODCF), o.mask().get(A_NUMDOC), invio); } } } @@ -308,18 +331,17 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { if (id >= START_MASK && id <= END_MASK) { - setFilterChanged(); + set_filter_changed(); } if(id >= START_BOOLEAN && id <= END_BOOLEAN) - saveConfig(); + save_config(); } return true; } -void TTrFa_mask::openJava() +void TTrFa_mask::open_java() { - TFilename tmp; - tmp = SPESOMETROBASE "\\ModuliSirio.jar"; + TFilename tmp = SPESOMETROBASE "\\ModuliSirio.jar"; tmp.make_absolute_path(); DIRECTORY old_dir; xvt_fsys_get_dir(&old_dir); @@ -333,38 +355,49 @@ void TTrFa_mask::openJava() } else { - error_box(FR("Impossibile eseguire Java -jar %s"), (const char*)tmp); + error_box(FR("Impossibile eseguire Java -jar %s"), static_cast(tmp)); } xvt_fsys_set_dir(&old_dir); } -void TTrFa_mask::loadConfig() +void TTrFa_mask::load_config() { // Rilevo i tipi scelti TToken_string tipidoc(ini_get_string(CONFIG_DITTA, "tf", "TIPIDOC")); // Potrei fare un for su TToken_string ma non darebbe la possibilità di flaggare tutto in caso di prima installazione for(int pos = 0; pos < tipidoc.items(); pos++) { - int field = getTipoDoc(tipidoc.get(pos)); + const int field = get_tipo_doc(tipidoc.get(pos)); if(field != -1) set(field, "X"); } + + for(int id = END_BOOLEAN_FATT + 1; id <= END_BOOLEAN; id++) + { + set(id, ini_get_bool(CONFIG_DITTA, "tf", get_tipo_doc(id)) ? "X" : ""); + } } -void TTrFa_mask::saveConfig() +void TTrFa_mask::save_config() const { TToken_string tipidoc; - for(int id = START_BOOLEAN; id <= END_BOOLEAN; id++) + int id = START_BOOLEAN_FATT; + for(; id <= END_BOOLEAN_FATT; id++) { if(get_bool(id)) { - tipidoc.add(getTipoDoc(id)); + tipidoc.add(get_tipo_doc(id)); } } ini_set_string(CONFIG_DITTA, "tf", "TIPIDOC", tipidoc); + + for (; id <= END_BOOLEAN; id++) + { + ini_set_bool(CONFIG_DITTA, "tf", get_tipo_doc(id), get_bool(id)); + } } /* salvo tutti i record modificati */ -bool TTrFa_mask::saveAll() +bool TTrFa_mask::save_all() const { TSheet_field& sheet = sfield(F_RIGHE); //TString_array& strarr = sheet.rows_array(); @@ -378,7 +411,7 @@ bool TTrFa_mask::saveAll() bool ok, retry = false; do { - ok = saveRec(*strarr); + ok = save_rec(*strarr); if(!ok) { TString msg = "Errore durante il salvataggio del movimento "; @@ -401,10 +434,10 @@ bool TTrFa_mask::saveAll() return true; } -bool TTrFa_mask::checkAll() +bool TTrFa_mask::check_all() { // Controllo di avere uno sheet pieno - if(!checkNotEmpty()) return true; + if(!check_not_empty()) return true; if(yesno_box("Controllare tutti i C.F. P.IVA?")) { @@ -413,7 +446,7 @@ bool TTrFa_mask::checkAll() } // Sistemo i flag - theFinalCheckDown(); + the_final_check_down(); static TPrinter stampa; stampa.reset(); @@ -435,7 +468,7 @@ bool TTrFa_mask::checkAll() TSheet_field& sheet = sfield(F_RIGHE); FOR_EACH_SHEET_ROW(sheet, r, strarr) { - checkRec(&stampa, strarr); + check_rec(&stampa, strarr); } riga.reset(); riga.put(TR("------------------ Fine controllo! ------------------"), 30); @@ -444,7 +477,7 @@ bool TTrFa_mask::checkAll() return true; } -inline void printError(TPrinter* stampa, TString movimento, TString documento, TString msgerr) +inline void print_error(TPrinter* stampa, const TString& movimento, const TString& documento, const TString& msgerr) { TPrintrow riga; riga.put(movimento, 0); @@ -453,40 +486,42 @@ inline void printError(TPrinter* stampa, TString movimento, TString documento, T stampa->print(riga); } -bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string* rec) +bool TTrFa_mask::check_rec(TPrinter* stampa, TToken_string* rec) { bool ok = true; - TString numMov = rec->get(_numero), numDoc = rec->get(_numdoc); + const TString num_mov = rec->get(_numero); + const TString num_doc = rec->get(_numdoc); TString msgerr; TString coderr; // Controllo date *********************************************************************************** - TDate reg = rec->get(_datareg), doc = rec->get(_datadoc); + const TDate reg = rec->get(_datareg), doc = rec->get(_datadoc); if(reg < doc) { ok = false; msgerr.cut(0) << "Data registrazione precedente alla data del documento"; - printError(stampa, numMov, numDoc, msgerr); + print_error(stampa, num_mov, num_doc, msgerr); coderr << "1;"; } // Controllo aliquota, imponibile e imposta ********************************************************* TCodiceIVA codiva(rec->get(_aliquota)); - TString nat = rec->get(_natura), realNat(natura(rec->get(_aliquota))); + TString nat = rec->get(_natura); + const TString real_nat(natura(rec->get(_aliquota))); nat.ltrim(); // Se vuoto arriva con uno spazio - real imponibile = rec->get(_imponibile), imposta = rec->get(_importoIVA); - if(nat != realNat) + const real imponibile = static_cast(rec->get(_imponibile)), imposta = static_cast(rec->get(_importoIVA)); + if(nat != real_nat) { - msgerr.cut(0) << "Natura del movimento errata, valore dichiarato: " << nat << " valore corretto: " << realNat; - printError(stampa, numMov, numDoc, msgerr); + msgerr.cut(0) << "Natura del movimento errata, valore dichiarato: " << nat << " valore corretto: " << real_nat; + print_error(stampa, num_mov, num_doc, msgerr); coderr << "2;"; } - real realImp = imponibile * codiva.percentuale() / CENTO; - realImp.round(2); - if(imposta > realImp + TOLLARANZA || imposta < realImp - TOLLARANZA) + real real_imp = imponibile * codiva.percentuale() / CENTO; + real_imp.round(2); + if(imposta > real_imp + TOLLARANZA || imposta < real_imp - TOLLARANZA) { - msgerr.cut(0) << "Imposta errata, valore dichiarato: " << imposta.string() << " valore \"potenzialmente\" corretto: " << realImp.string(); - printError(stampa, numMov, numDoc, msgerr); + msgerr.cut(0) << "Imposta errata, valore dichiarato: " << imposta.string() << " valore \"potenzialmente\" corretto: " << real_imp.string(); + print_error(stampa, num_mov, num_doc, msgerr); coderr << "3;"; } @@ -494,7 +529,7 @@ bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string* rec) { ok = false; msgerr.cut(0) << "Non riesco a determinare il tipo di documento corretto per l'agenzia delle entrate!"; - printError(stampa, numMov, numDoc, msgerr); + print_error(stampa, num_mov, num_doc, msgerr); coderr << "4;"; } @@ -504,7 +539,7 @@ bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string* rec) return ok; } -bool TTrFa_mask::checkNotEmpty() +bool TTrFa_mask::check_not_empty() { TSheet_field& sheet = sfield(F_RIGHE); TString msg; @@ -522,49 +557,48 @@ bool TTrFa_mask::checkNotEmpty() return sheet.full(); } -void TTrFa_mask::theFinalCheckDown() // IT'S THE FINAL CHECKDOOOOOOOWN! WE'RE CHECKING TOGEEEETHEEEEER!!!! +void TTrFa_mask::the_final_check_down() // IT'S THE FINAL CHECKDOOOOOOOWN! WE'RE CHECKING TOGEEEETHEEEEER!!!! { TSheet_field& sheet = sfield(F_RIGHE); - TAssoc_array cliDocs; + TAssoc_array cli_docs; FOR_EACH_SHEET_ROW(sheet, r, strarr) { // Chiave: TIPOCF + CODCF + NUMDOC + CODIVA TString key; key << strarr->get_char(_tipocf) << "|" << strarr->get_int(_codcf) << "|" << strarr->get(_numdoc) << "|" << strarr->get(_aliquota); TToken_string newNumero; newNumero.add(r, 0); newNumero.add(strarr->get_char(_invio), 1); - if(cliDocs.is_key(key)) + if(cli_docs.is_key(key)) { - TToken_string oldnumero = *(TToken_string*)cliDocs.objptr(key); + TToken_string oldnumero = *dynamic_cast(cli_docs.objptr(key)); TString oldflag; oldnumero.get(1, oldflag); if(oldflag == FLAG_FORZATO) - flagRow(r, FLAG_NINVIO); + flag_row(r, FLAG_NINVIO); else { int oldr; oldnumero.get(0, oldr); - flagRow(oldr, FLAG_NINVIO); + flag_row(oldr, FLAG_NINVIO); } - cliDocs.add(key, newNumero); + cli_docs.add(key, newNumero); } else { - cliDocs.add(key, newNumero); + cli_docs.add(key, newNumero); } } // Forzo l'aggiornamento dello sheet sfield(F_RIGHE).force_update(); } -void TTrFa_mask::flagRow(int nrow, TString flag) +void TTrFa_mask::flag_row(const int nrow, const TString& flag) { - TSheet_field& sheet = sfield(F_RIGHE); - TToken_string& row = sheet.row(nrow); - row.add(flag, _invio); + sfield(F_RIGHE).row(nrow).add(flag, _invio); } -TRecnotype TTrFa_mask::nuovo_progr() const +TRecnotype TTrFa_mask::nuovo_progr() { static TRectype app(LF_TRASFATT); - app.last(TLocalisamfile(LF_TRASFATT)); + static TLocalisamfile ltrasfatt(LF_TRASFATT); + app.last(ltrasfatt); // Lo inizializzo solo la prima volta poi incremento static TRecnotype numreg = app.get_long("NUMREG") > MOV_CUSTOM ? app.get_long("NUMREG") : MOV_CUSTOM; numreg++; @@ -572,7 +606,7 @@ TRecnotype TTrFa_mask::nuovo_progr() const } // Dato un cliente e il suo numero documento imposto il nuovo flag di invio su tutti i campi -void TTrFa_mask::changeInvio(TString tipocf, TString codcf, TString numdoc, TString invio) const +void TTrFa_mask::change_invio(const TString& tipocf, const TString& codcf, const TString& numdoc, const TString& invio) const { TSheet_field& sheet = sfield(F_RIGHE); TString rtipo, rcod, rnum, rinvio; @@ -611,10 +645,10 @@ void TTrFa_mask::load_sheet() } //TString key; key << "TIPOA=" << prefix().firm().get("TIPOA")<< ",CODANAGR=" << prefix().firm().get("CODANAGR"); TString key; key << prefix().firm().get("TIPOA") << "|" << prefix().firm().get("CODANAGR"); - static const TString pivaDitta = cache().get(LF_ANAG, key, "PAIV"); - static const TString cofiDitta = cache().get(LF_ANAG, key, "COFI"); + static const TString piva_ditta = cache().get(LF_ANAG, key, "PAIV"); + static const TString cofi_ditta = cache().get(LF_ANAG, key, "COFI"); - TTrFa_cursors c(_has_fp); + TTrFa_cursors c; TSheet_field& sheet = sfield(F_RIGHE); @@ -622,24 +656,24 @@ void TTrFa_mask::load_sheet() if(!sheet.empty()) sheet.destroy(); TAssoc_array recimposte; - int items = c.updateFilters(tipo, codice, dal, al, get_int(F_FATTSEL)); + const int items = c.update_filters(tipo, codice, dal, al, get_int(F_FATTSEL)); TString tipocf, codcf, ocfpi, nat; for(bool ok = true; items > 0 && ok;) { tipocf.cut(0), codcf.cut(0), ocfpi.cut(0), nat.cut(0); - int err = c.next(recimposte, ok, tipocf, codcf, ocfpi); + const int err = c.next(recimposte, ok, tipocf, codcf, ocfpi); // Carico i clienti TRectype cli = getCli(tipocf, codcf, ocfpi); FOR_EACH_ASSOC_OBJECT(recimposte, h, iva, rec) { - TRectype movimento = *(TRectype*)rec; + TRectype movimento = *dynamic_cast(rec); // Controllo che sia un tipo documento da leggere - int tipoDoc = getTipoDoc(movimento.get("TIPODOC")); - if(tipoDoc != -1 && !get_bool(tipoDoc)) continue; + const int tipo_doc = get_tipo_doc(movimento.get("TIPODOC")); + if(tipo_doc != -1 && !get_bool(tipo_doc)) continue; // A volte mi pesca movimenti con invio sbagliato - if(!checkInvio(movimento.get("TFINVIO"))) continue; + if(!check_invio(movimento.get("TFINVIO"))) continue; // Creo una nuova riga nello sheet TToken_string& row = sheet.row(-1); @@ -647,59 +681,59 @@ void TTrFa_mask::load_sheet() /* Siccome mi cambiano l'ordine ogni volta e non ho voglia di cambiare tutto ovunque * basta settare i valori negli enum e lo sheet */ - TRectype isCust = getTrasFatt(movimento.get("NUMREG"), iva); + TRectype is_cust = getTrasFatt(movimento.get("NUMREG"), iva); #ifdef DBG - if(isCust.full() && (err < foundcust || err > foundidcust)) + if(is_cust.full() && (err < foundcust || err > foundidcust)) bool tolla = true; #endif - const char * toSend = movimento.get("TFINVIO").blank() ? FLAG_INVIO : movimento.get("TFINVIO"); - row.add(movimento.get("TFINVIO") == FLAG_INVIATO ? "X" : "", _spedita); // Spedita - row.add(toSend); // Da spedire - row.add(isCust.full() ? "X" : "", _forzata); // Modificato - row.add(movimento.get_long("NUMREG"), _numero); // Numero registrazione - row.add(movimento.get_date("DATAREG"), _datareg); // Data Registrazione - row.add(movimento.get("TIPO"), _tipocf); // Tipo Cli/For - row.add(movimento.get("CODCF"), _codcf); // Codice Cli/For - row.add(movimento.get("OCCAS"), _occas); // Codice Occasionale - row.add(cli.get("RAGSOC"), _ragsoc); // Ragione sociale - row.add(cli.get("CODRFSO"), _rfso); // Codice RF/SO - row.add(getRFSO(cli.get("CODRFSO")), _ragsocrfso); // Ragione Sociale RF/SO - row.add(movimento.get("NUMDOC"), _numdoc); // Numero documento - row.add(movimento.get_date("DATADOC"), _datadoc); // Data documento + const char * to_send = movimento.get("TFINVIO").blank() ? FLAG_INVIO : movimento.get("TFINVIO"); + row.add(movimento.get("TFINVIO") == FLAG_INVIATO ? "X" : "", _spedita); // Spedita + row.add(to_send); // Da spedire + row.add(is_cust.full() ? "X" : "", _forzata); // Modificato + row.add(movimento.get_long("NUMREG"), _numero); // Numero registrazione + row.add(movimento.get_date("DATAREG"), _datareg); // Data Registrazione + row.add(movimento.get("TIPO"), _tipocf); // Tipo Cli/For + row.add(movimento.get("CODCF"), _codcf); // Codice Cli/For + row.add(movimento.get("OCCAS"), _occas); // Codice Occasionale + row.add(cli.get("RAGSOC"), _ragsoc); // Ragione sociale + row.add(cli.get("CODRFSO"), _rfso); // Codice RF/SO + row.add(get_rfso(cli.get("CODRFSO")), _ragsocrfso); // Ragione Sociale RF/SO + row.add(movimento.get("NUMDOC"), _numdoc); // Numero documento + row.add(movimento.get_date("DATADOC"), _datadoc); // Data documento nat.cut(0) << movimento.get("NATURA"); - row.add(nat.full() ? nat : natura(iva), _natura); // NATURA! - row.add(iva, _aliquota); // Codice aliquota! - row.add(findDetraib(movimento.get("TIPODET")), _detraibile); // Detraibilità - row.add(movimento.get_real("IMPONIBILE"), _imponibile); // Imponibile - row.add(movimento.get_real("IMPOSTA"), _importoIVA); // Imposta - row.add(revCharge(movimento.get("NUMREG"), movimento.get_date("DATAREG").year()), _reverse); // Rev.Charge + row.add(nat.full() ? nat : natura(iva), _natura); // NATURA! + row.add(iva, _aliquota); // Codice aliquota! + row.add(find_detraib(movimento.get("TIPODET")), _detraibile); // Detraibilità + row.add(movimento.get_real("IMPONIBILE"), _imponibile); // Imponibile + row.add(movimento.get_real("IMPOSTA"), _importoIVA); // Imposta + row.add(rev_charge(movimento.get("NUMREG"), movimento.get_date("DATAREG").year()), _reverse); // Rev.Charge row.add(movimento.get("TIPODOC"), _codnum); // Calcolo il tipo documento alla fine per sicurezza - if (isCust.full()) + if (is_cust.full()) { - row.add(movimento.get("TIPODOCAE").blank() ? decodTipo(&row) : movimento.get("TIPODOCAE"), _codnumAE); // Tipo documento + row.add(movimento.get("TIPODOCAE").blank() ? decod_tipo(&row) : movimento.get("TIPODOCAE"), _codnumAE); // Tipo documento } else - row.add(decodTipo(&row), _codnumAE); // Tipo documento + row.add(decod_tipo(&row), _codnumAE); // Tipo documento /* * Possono esistere movimenti custom dove il cliente ha una partita IVA propria * ma è stato flaggato l'autofattura, quindi in trasfat è presente il codice cliente con PIVA e CODFIS della ditta. * Controllo sia il movimento che il cliente */ - if(movimento.get("AUTOFATT") == "X" || pivaDitta == cli.get("PAIV")) // Se è un autofattura + if(movimento.get("AUTOFATT") == "X" || piva_ditta == cli.get("PAIV")) // Se è un autofattura { - row.add("X", _autofatt); // AutoFatt - row.add(pivaDitta, _paiv); // P.IVA - row.add(cofiDitta, _codfis); // Codice Fiscale + row.add("X", _autofatt); // AutoFatt + row.add(piva_ditta, _paiv); // P.IVA + row.add(cofi_ditta, _codfis); // Codice Fiscale } else { - row.add("", _autofatt); // AutoFatt - row.add(cli.get("PAIV"), _paiv); // P.IVA - row.add(cli.get("COFI"), _codfis); // Codice Fiscale + row.add("", _autofatt); // AutoFatt + row.add(cli.get("PAIV"), _paiv); // P.IVA + row.add(cli.get("COFI"), _codfis); // Codice Fiscale } sheet.enable_cell(sheet.items()-1, _occas, movimento.get("OCCAS").full()); } @@ -710,19 +744,19 @@ void TTrFa_mask::load_sheet() } -bool TTrFa_mask::checkInvio(const TString& invio) +bool TTrFa_mask::check_invio(const TString& invio) const { bool ok; switch(get_int(F_FATTSEL)) { - case toSend: - ok = invio == "" || invio == FLAG_INVIO || invio == FLAG_FORZATO || invio == FLAG_ERRORE; + case to_send: + ok = invio.empty() || invio == FLAG_INVIO || invio == FLAG_FORZATO || invio == FLAG_ERRORE; break; case sent: ok = invio == FLAG_INVIATO; break; case untouched: - ok = invio == "" || invio == FLAG_INVIO; + ok = invio.empty() || invio == FLAG_INVIO; case forced: ok = invio == FLAG_FORZATO; break; @@ -741,10 +775,10 @@ bool TTrFa_mask::checkInvio(const TString& invio) } -TTrFa_mask::TTrFa_mask(TString msk) +TTrFa_mask::TTrFa_mask(const TString& msk) : TAutomask(msk), _filter_changed(true) { - loadConfig(); + load_config(); #ifndef DBG // Controllo che abbia aggiornato le causali dopo l'ultima patch cg0500 diff --git a/src/tf/tf0102.cpp b/src/tf/tf0102.cpp index a0c8f420d..4e2630dc8 100644 --- a/src/tf/tf0102.cpp +++ b/src/tf/tf0102.cpp @@ -7,10 +7,10 @@ ///////////////////////////////////////////////////////////////////////////////////// TTrFa_cursors::~TTrFa_cursors() { - if(c_rmoviva != NULL) - delete c_rmoviva; - if(c_trasfatt != NULL) - delete c_trasfatt; + if(_c_rmoviva != NULL) + delete _c_rmoviva; + if(_c_trasfatt != NULL) + delete _c_trasfatt; } int TTrFa_cursors::next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf, TString& ocfpi) @@ -23,7 +23,7 @@ int TTrFa_cursors::next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TSt TRectype record = _next(err, tipocf, codcf, ocfpi); if(err == eof) { - record = _nextCust(err, tipocf, codcf, ocfpi); + record = _next_cust(err, tipocf, codcf, ocfpi); } while(err < nextmov) { @@ -55,172 +55,195 @@ int TTrFa_cursors::next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TSt */ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi) { - TString numMov = c_rmoviva->get("23.NUMREG").as_string(); + const TString num_mov = _c_rmoviva->get("23.NUMREG").as_string(); // Record di ritorno - TRectype retRec(LF_TRASFATT); + TRectype ret_rec(LF_TRASFATT); // Variabile di appoggio per forzare il controllo sui movimenti nuovi, // così facendo riesco a entrare nel ciclo sotto. Prima c'era un else - bool newMov = _newMov; + const bool new_mov = _new_mov; // Controllo che non sia il primo record del movimento - if(_newMov) + if(_new_mov) { - _newMov = false; - tipocf = c_rmoviva->get("23.TIPO").as_string(); - codcf = c_rmoviva->get("23.CODCF").as_string(); - ocfpi = c_rmoviva->get("23.OCFPI").as_string(); + _new_mov = false; + tipocf = _c_rmoviva->get("23.TIPO").as_string(); + codcf = _c_rmoviva->get("23.CODCF").as_string(); + ocfpi = _c_rmoviva->get("23.OCFPI").as_string(); } // Se non è un movimento o il controllo fallisce mi sposto - int tipoDoc = getTipoDoc(c_rmoviva->get("23.TIPODOC").as_string()); - if(!newMov || !checkRecord(c_rmoviva, _has_fp) || tipoDoc == -1 || !msk().get_bool(tipoDoc)) + const int tipo_doc = get_tipo_doc(_c_rmoviva->get("23.TIPODOC").as_string()); + if(!new_mov || + !check_record(_c_rmoviva, _esterometro, _paf_ns, _paf_s, _paf_sf, _paf_e, _paa_ns, _paa_s, _paa_sf, _paa_e) || + tipo_doc == -1 || !msk().get_bool(tipo_doc)) { static TString codiva; do { // Se ritorna false ho finito i records - if(!c_rmoviva->move_next()) + if(!_c_rmoviva->move_next()) { code = eof; - return retRec; + return ret_rec; } else { // Controllo se ho cambiato movimento - _newMov = numMov != c_rmoviva->get("23.NUMREG").as_string(); - codiva.cut(0) << c_rmoviva->get("25.CODIVA").as_string(); + _new_mov = num_mov != _c_rmoviva->get("23.NUMREG").as_string(); + codiva.cut(0) << _c_rmoviva->get("25.CODIVA").as_string(); } } // Ciclo finchè non trovo un nuovo movimento o trovo cod IVA già presi da cust - while((!_newMov && _alqCust.get_pos(codiva) > -1) || !checkEnabled(c_rmoviva) || !checkRecord(c_rmoviva, _has_fp)); + while((!_new_mov && _alq_cust.get_pos(codiva) > -1) || !check_enabled(_c_rmoviva) || + !check_record(_c_rmoviva, _esterometro, _paf_ns, _paf_s, _paf_sf, _paf_e, _paa_ns, _paa_s, _paa_sf, _paa_e)); } // Se ho cambiato movimento ritorno, leggerò poi al prossimo giro - if(_newMov) + if(_new_mov) { - _alqCust.cut(0); + _alq_cust.cut(0); code = nextmov; - return retRec; + return ret_rec; } else code = found; #ifdef DBG - if(c_rmoviva->get("23.NUMREG").as_int() == 1930131) + if(_c_rmoviva->get("23.NUMREG").as_int() == 1930131) bool tolla = true; #endif // Controllo dell'esistenza di un record custom in tasfatt - retRec = getTrasFatt(c_rmoviva->get("23.NUMREG").as_string(), c_rmoviva->get("25.CODIVA").as_string()); - if(retRec.empty()) + ret_rec = getTrasFatt(_c_rmoviva->get("23.NUMREG").as_string(), _c_rmoviva->get("25.CODIVA").as_string()); + if(ret_rec.empty()) { code = found; // Carico il record - retRec.put("NUMREG", c_rmoviva->get("23.NUMREG").as_int()); - retRec.put("TIPO", c_rmoviva->get("23.TIPO").as_string()); - retRec.put("CODCF", c_rmoviva->get("23.CODCF").as_string()); - retRec.put("OCCAS", c_rmoviva->get("23.OCFPI").as_string()); - retRec.put("TIPODOC", c_rmoviva->get("23.TIPODOC").as_string()); - retRec.put("NUMDOC", c_rmoviva->get("23.NUMDOC").as_string()); - retRec.put("DATAREG", c_rmoviva->get("23.DATAREG").as_date()); - retRec.put("DATADOC", c_rmoviva->get("23.DATADOC").as_date()); - retRec.put("TFINVIO", c_rmoviva->get("23.TFINVIO").as_string()); - retRec.put("IMPONIBILE", c_rmoviva->get("25.IMPONIBILE").as_real()); - retRec.put("IMPOSTA", c_rmoviva->get("25.IMPOSTA").as_real()); - retRec.put("CODIVA", c_rmoviva->get("25.CODIVA").as_string()); - retRec.put("TIPODET", c_rmoviva->get("25.TIPODET").as_string()); + ret_rec.put("NUMREG", _c_rmoviva->get("23.NUMREG").as_int()); + ret_rec.put("TIPO", _c_rmoviva->get("23.TIPO").as_string()); + ret_rec.put("CODCF", _c_rmoviva->get("23.CODCF").as_string()); + ret_rec.put("OCCAS", _c_rmoviva->get("23.OCFPI").as_string()); + ret_rec.put("TIPODOC", _c_rmoviva->get("23.TIPODOC").as_string()); + ret_rec.put("NUMDOC", _c_rmoviva->get("23.NUMDOC").as_string()); + ret_rec.put("DATAREG", _c_rmoviva->get("23.DATAREG").as_date()); + ret_rec.put("DATADOC", _c_rmoviva->get("23.DATADOC").as_date()); + ret_rec.put("TFINVIO", _c_rmoviva->get("23.TFINVIO").as_string()); + ret_rec.put("IMPONIBILE", _c_rmoviva->get("25.IMPONIBILE").as_real()); + ret_rec.put("IMPOSTA", _c_rmoviva->get("25.IMPOSTA").as_real()); + ret_rec.put("CODIVA", _c_rmoviva->get("25.CODIVA").as_string()); + ret_rec.put("TIPODET", _c_rmoviva->get("25.TIPODET").as_string()); } else { - _alqCust.add(c_rmoviva->get("25.CODIVA").as_string()); + _alq_cust.add(_c_rmoviva->get("25.CODIVA").as_string()); code = foundcust; } - return retRec; + return ret_rec; } -TRectype TTrFa_cursors::_nextCust(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi) +TRectype TTrFa_cursors::_next_cust(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi) { bool ok; // Preparo il nuovo cursore - if(_newCust) + if(_new_cust) { - ok = c_trasfatt->move_first(); - _newCust = false; + ok = _c_trasfatt->move_first(); + _new_cust = false; } else { - ok = c_trasfatt->move_next(); + ok = _c_trasfatt->move_next(); } - tipocf = c_trasfatt->get("TIPO").as_string(); - codcf = c_trasfatt->get("CODCF").as_string(); - ocfpi = c_trasfatt->get("OCFPI").as_string(); + tipocf = _c_trasfatt->get("TIPO").as_string(); + codcf = _c_trasfatt->get("CODCF").as_string(); + ocfpi = _c_trasfatt->get("OCFPI").as_string(); code = ok ? foundidcust : eofcust; - return c_trasfatt->cursor()->curr(); + return _c_trasfatt->cursor()->curr(); } -bool TTrFa_cursors::checkEnabled(TISAM_recordset* origCur) +bool TTrFa_cursors::check_enabled(TISAM_recordset* orig_cur) { // Controllo che il record sia effettivamente abilitato static TString flag; flag.cut(0); // Controllo se sono su un movimento custom - if(origCur->find_column("MOV.REG") >= 0) + if(orig_cur->find_column("MOV.REG") >= 0) { - TRectype rCust = getTrasFatt(c_rmoviva->get("23.NUMREG").as_string(), c_rmoviva->get("25.CODIVA").as_string()); - if(rCust.empty()) - flag << origCur->get("23.TFINVIO"); + TRectype r_cust = getTrasFatt(_c_rmoviva->get("23.NUMREG").as_string(), _c_rmoviva->get("25.CODIVA").as_string()); + if(r_cust.empty()) + flag << orig_cur->get("23.TFINVIO"); else - flag << rCust.get("TFINVIO"); + flag << r_cust.get("TFINVIO"); } else { - flag << origCur->get("TFINVIO").as_string(); + flag << orig_cur->get("TFINVIO").as_string(); } - return msk().checkInvio(flag); + return msk().check_invio(flag); } +void TTrFa_cursors::reset_esterometro() +{ + _esterometro = msk().get_bool(B_ESTEROMETRO); + _paf_ns = msk().get_bool(B_PAF_NOT_SENT); + _paf_s = msk().get_bool(B_PAF_SENT); + _paf_sf = msk().get_bool(B_PAF_SOG_FAT); + _paf_e = msk().get_bool(B_PAF_ESTERI); + _paa_ns = msk().get_bool(B_PAA_NOT_SENT); + _paa_s = msk().get_bool(B_PAA_SENT); + _paa_sf = msk().get_bool(B_PAA_ESTERI); + _paa_e = msk().get_bool(B_PAA_SOG_FAT); +} -int TTrFa_cursors::updateFilters(const char tipocf, const long codcf, TDate dal, TDate al, int cod) +TTrFa_cursors::TTrFa_cursors(): _c_rmoviva(nullptr), _c_trasfatt(nullptr), _new_mov(false), _new_cust(false), +_esterometro(false), _paf_ns(false), _paf_s(false), _paf_sf(false), _paf_e(false), +_paa_ns(false), _paa_s(false), _paa_sf(false), _paa_e(false) {} + + +int TTrFa_cursors::update_filters(const char tipocf, const long codcf, TDate dal, TDate al, int cod) { // Svuoto la cache per aggiornare i file custom cache().discard(LF_TRASFATT); - TString query = "USE RMOVIVA\n", queryCust = "USE TRASFATT\n"; - query << "SELECT (23.REG!=\"\")&&BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)&&(23.TIPO=\"" << tipocf << "\")"; - queryCust << "SELECT BETWEEN(DATAREG,#DADATAREG,#ADATAREG)&&(TIPO=\"" << tipocf << "\")"; + // Resetto i filtri booleani + reset_esterometro(); + + TString query = "USE RMOVIVA\n", query_cust = "USE TRASFATT\n"; + query << R"(SELECT (23.REG!="")&&BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)&&(23.TIPO=")" << tipocf << "\")"; + query_cust << "SELECT BETWEEN(DATAREG,#DADATAREG,#ADATAREG)&&(TIPO=\"" << tipocf << "\")"; if(codcf > 0) { query << "&&STR((23.CODCF=#CODCF))"; - queryCust << "&&STR((CODCF=#CODCF))"; + query_cust << "&&STR((CODCF=#CODCF))"; } query << "\nJOIN MOV INTO NUMREG==NUMREG\n"; - queryCust << "\nFROM NUMREG=" << MOV_CUSTOM; + query_cust << "\nFROM NUMREG=" << MOV_CUSTOM; - c_rmoviva = new TISAM_recordset(query); - c_trasfatt= new TISAM_recordset(queryCust); + _c_rmoviva = new TISAM_recordset(query); + _c_trasfatt= new TISAM_recordset(query_cust); if(dal.empty()) dal = "20170101"; // Data in cui questo modulo è diventato valido if(al.empty()) al = TODAY; - c_rmoviva->set_var("#DADATAREG", dal); - c_rmoviva->set_var("#ADATAREG", al); - c_trasfatt->set_var("#DADATAREG", dal); - c_trasfatt->set_var("#ADATAREG", al); + _c_rmoviva->set_var("#DADATAREG", dal); + _c_rmoviva->set_var("#ADATAREG", al); + _c_trasfatt->set_var("#DADATAREG", dal); + _c_trasfatt->set_var("#ADATAREG", al); if(codcf > 0) { - c_rmoviva->set_var("#CODCF", codcf); - c_trasfatt->set_var("#CODCF", codcf); + _c_rmoviva->set_var("#CODCF", codcf); + _c_trasfatt->set_var("#CODCF", codcf); } - int items = c_rmoviva->items() + c_trasfatt->items(); + const int items = _c_rmoviva->items() + _c_trasfatt->items(); if(items > 0) { - _newMov = true; - _newCust = true; + _new_mov = true; + _new_cust = true; return items; } return -1; diff --git a/src/tf/tf0200.cpp b/src/tf/tf0200.cpp index 93dd40de1..9ad69d5c1 100644 --- a/src/tf/tf0200.cpp +++ b/src/tf/tf0200.cpp @@ -20,8 +20,6 @@ #include "tf0200a.h" #define CAMPI_CON_BOOLEAN F_TOTOPATT -#define REG_ATT 1 -#define REG_PAS 2 // ComLiqPerIva: Comunicazione Liquidazioni Periodiche IVA @@ -470,14 +468,14 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO // Se è un movimento IvaXCassa o LiqDiff if(hasIXC && (curIva.get("23.IVAXCASSA").as_bool() || curIva.get("23.LIQDIFF").as_bool())) { - if(tiporeg == REG_ATT) + if(tiporeg == iva_vendite) totopattxc += imp; else totoppasxc += imp; } else { - if(tiporeg == REG_ATT) + if(tiporeg == iva_vendite) { // Controllo il reverse charge, non va calcolato nel totale delle operazioni attive! // Se non ha una riga di movimento non lo sommo @@ -510,7 +508,7 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO real imposta_diff, imposta_xcas; imposta_diff = imposta_xcas = ZERO; // 1 = Vendite - calc_inc_diff(anno, start, REG_ATT, imposta_diff, imposta_xcas); + calc_inc_diff(anno, start, iva_vendite, imposta_diff, imposta_xcas); ivaesxc = ivaesxc + imposta_xcas; ivaesdiff = ivaesdiff + imposta_diff; @@ -519,7 +517,7 @@ void ComLiqPerIva_mask::extractinator() // Per gli amici GTFO TString pippo = ivadetxc.stringa(); TString pluto = imposta_xcas.stringa(); // 2 = Acquisti - calc_inc_diff(anno, start, REG_PAS, imposta_diff, imposta_xcas); + calc_inc_diff(anno, start, iva_acquisti, imposta_diff, imposta_xcas); pippo = ivadetxc.stringa(); pluto = imposta_xcas.stringa(); ivadetxc = ivadetxc + imposta_xcas; diff --git a/src/tf/tf0400.cpp b/src/tf/tf0400.cpp index 5509ff841..2c86101d8 100644 --- a/src/tf/tf0400.cpp +++ b/src/tf/tf0400.cpp @@ -10,10 +10,10 @@ #include "modaut.h" /**************************************************************************************************** - * TSpeCheck_msk + * TSpe_check_msk ****************************************************************************************************/ -class TSpeCheck_msk : public TAutomask +class TSpe_check_msk : public TAutomask { private: TAnagrafica _ditta; @@ -21,24 +21,24 @@ private: bool _has_fp; void refresh(); - void fillNoFilter(); - void fillDiff(); - void foundHomeland(TToken_string& row, TString numreg, TString codiva, TRectype& clifo); - void fillCust(); - void getFilFlag(TString& query); - void enableEdit(bool en); - void selectAll(); - void saveAll(); - void deleteAll(); - virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void fill_no_filter(); + void fill_diff(); + void find_homeland(TToken_string& row, TString numreg, TString codiva, TRectype& clifo); + void fill_cust(); + void get_fil_flag(TString& query); + void enable_edit(bool en); + void select_all(); + void save_all(); + void delete_all(); + bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; public: - void set_has_fp(bool has_fp) { _has_fp = has_fp; } - TSpeCheck_msk(); - virtual ~TSpeCheck_msk() {}; + void set_has_fp(const bool has_fp) { _has_fp = has_fp; } + TSpe_check_msk(); + virtual ~TSpe_check_msk() {}; }; -bool TSpeCheck_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) +bool TSpe_check_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch(o.dlg()) { @@ -52,13 +52,13 @@ bool TSpeCheck_msk::on_field_event(TOperable_field& o, TField_event e, long joll break; case DLG_ALL: if(e != fe_button) break; - selectAll(); + select_all(); break; case DLG_SAVEREC: - saveAll(); + save_all(); break; case DLG_DELREC: - deleteAll(); + delete_all(); break; case DLG_EDIT: if(e == fe_button) @@ -87,7 +87,7 @@ bool TSpeCheck_msk::on_field_event(TOperable_field& o, TField_event e, long joll TRectype app = getCli(tipocf, codcf, ocfpi); o.mask().set(A_RAGSOC, app.get("RAGSOC")); o.mask().set(A_RFSO, app.get("CODRFSO")); - o.mask().set(A_RAGSOCRFSO, getRFSO(app.get("CODRFSO"))); + o.mask().set(A_RAGSOCRFSO, get_rfso(app.get("CODRFSO"))); o.mask().set(A_PAIV, app.get("PAIV")); o.mask().set(A_COFI, app.get("COFI")); @@ -111,32 +111,32 @@ bool TSpeCheck_msk::on_field_event(TOperable_field& o, TField_event e, long joll return true; } -void TSpeCheck_msk::refresh() +void TSpe_check_msk::refresh() { switch(get_long(F_TIPOCONTROLLO)) { case 0: - fillNoFilter(); + fill_no_filter(); break; case 1: - fillDiff(); + fill_diff(); break; case 2: - fillCust(); + fill_cust(); default: break; } return; } -void TSpeCheck_msk::fillNoFilter() +void TSpe_check_msk::fill_no_filter() { TString query = "USE RMOVIVA\n"; - query << "SELECT (23.REG!=\"\")&&BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)&&(23.TIPO=\"" << get(F_TIPOCF) << "\")"; - if(get(F_CODCF) != "") + query << R"(SELECT (23.REG!="")&&BETWEEN(23.DATAREG,#DADATAREG,#ADATAREG)&&(23.TIPO=")" << get(F_TIPOCF) << "\")"; + if(get(F_CODCF).full()) query << "&&STR((23.CODCF=#CODCF))"; - getFilFlag(query); + get_fil_flag(query); query << "\nJOIN MOV INTO NUMREG==NUMREG\n"; @@ -159,7 +159,7 @@ void TSpeCheck_msk::fillNoFilter() // Setto le variabili rset.set_var("#DADATAREG", dadatareg); rset.set_var("#ADATAREG", adatareg); - if(get(F_CODCF) != "") + if(get(F_CODCF).full()) rset.set_var("#CODCF", get(F_CODCF)); int nrec = rset.items(); @@ -176,7 +176,7 @@ void TSpeCheck_msk::fillNoFilter() for(bool ok = rset.move_first(); ok; ok = rset.move_next()) { // Devo prendere tutti quelli che non vanno bene di records - if(checkRecord(&rset, _has_fp)) continue; + if(check_record(&rset, _has_fp)) continue; TRectype clifo = getCli(rset.get("23.TIPO").as_string(), rset.get("23.CODCF").as_string(), rset.get("23.OCCAS").as_string()); TToken_string& row = s.row(-1); @@ -191,7 +191,7 @@ void TSpeCheck_msk::fillNoFilter() // NATURA row.add(natura(rset.get("25.CODIVA").as_string()), s.cid2index(A_NATURA)); // DETR - row.add(findDetraib(rset.get("25.TIPODET").as_string()), s.cid2index(A_DETRAIB)); + row.add(find_detraib(rset.get("25.TIPODET").as_string()), s.cid2index(A_DETRAIB)); row.add(rset.get("23.TIPO").as_string(), s.cid2index(A_TIPOCF)); row.add(rset.get("23.CODCF").as_string(), s.cid2index(A_CODCF)); @@ -201,9 +201,9 @@ void TSpeCheck_msk::fillNoFilter() // RFSO row.add(clifo.get("CODRFSO"), s.cid2index(A_RFSO)); // RSOC RFSO - row.add(getRFSO(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO)); + row.add(get_rfso(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO)); // RC - row.add((revCharge(rset.get("NUMREG").as_string(), rset.get("23.DATAREG").as_date().year())), s.cid2index(A_REVERSE)); + row.add((rev_charge(rset.get("NUMREG").as_string(), rset.get("23.DATAREG").as_date().year())), s.cid2index(A_REVERSE)); // AUTOFATT if(_ditta.partita_IVA() == clifo.get("PAIV")) { @@ -222,10 +222,10 @@ void TSpeCheck_msk::fillNoFilter() } s.force_update(); s.show(); - enableEdit(false); + enable_edit(false); } -void TSpeCheck_msk::fillDiff() +void TSpe_check_msk::fill_diff() { // Apro la tabella TRASFATT e per ogni record lo ricostruisco l'originale TString query = "USE TRASFATT\n"; @@ -233,7 +233,7 @@ void TSpeCheck_msk::fillDiff() if(get(F_CODCF) != "") query << "&&STR((CODCF=#CODCF))"; - getFilFlag(query); + get_fil_flag(query); TISAM_recordset rset(query); TDate dadatareg = get_date(F_DATAINI); @@ -274,7 +274,7 @@ void TSpeCheck_msk::fillDiff() // Creo la riga della prima nota TToken_string& orig = s.row(-1); - foundHomeland(orig, rset.get("NUMREG").as_string(), rset.get("CODIVA").as_string(), clifo); + find_homeland(orig, rset.get("NUMREG").as_string(), rset.get("CODIVA").as_string(), clifo); TToken_string& row = s.row(-1); @@ -290,7 +290,7 @@ void TSpeCheck_msk::fillDiff() nat.cut(0) << rset.get("NATURA").as_string(); row.add(nat.full() ? nat : natura(rset.get("CODIVA").as_string()), s.cid2index(A_NATURA)); // DETR - row.add(findDetraib(rset.get("TIPODET").as_string()), s.cid2index(A_DETRAIB)); + row.add(find_detraib(rset.get("TIPODET").as_string()), s.cid2index(A_DETRAIB)); row.add(rset.get("TIPO").as_string(), s.cid2index(A_TIPOCF)); row.add(rset.get("CODCF").as_string(), s.cid2index(A_CODCF)); @@ -300,9 +300,9 @@ void TSpeCheck_msk::fillDiff() // RFSO row.add(clifo.get("CODRFSO"), s.cid2index(A_RFSO)); // RSOC RFSO - row.add(getRFSO(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO)); + row.add(get_rfso(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO)); // RC - row.add((revCharge(rset.get("NUMREG").as_string(), rset.get("DATAREG").as_date().year())), s.cid2index(A_REVERSE)); + row.add((rev_charge(rset.get("NUMREG").as_string(), rset.get("DATAREG").as_date().year())), s.cid2index(A_REVERSE)); // AUTOFATT if(rset.get("AUTOFATT").as_string() == "X" || _ditta.partita_IVA() == clifo.get("PAIV")) { @@ -328,10 +328,10 @@ void TSpeCheck_msk::fillDiff() s.force_update(); s.show(); - enableEdit(true); + enable_edit(true); } -void TSpeCheck_msk::foundHomeland(TToken_string& row, TString numreg, TString codiva, TRectype& clifo) +void TSpe_check_msk::find_homeland(TToken_string& row, TString numreg, TString codiva, TRectype& clifo) { TSheet_field& s = sfield(F_RIGHE); static TLocalisamfile mov(LF_MOV), rmov(LF_RMOVIVA); @@ -372,7 +372,7 @@ void TSpeCheck_msk::foundHomeland(TToken_string& row, TString numreg, TString co // NATURA row.add(natura(recRmov.get("CODIVA")), s.cid2index(A_NATURA)); // DETR - row.add(findDetraib(recRmov.get("TIPODET")), s.cid2index(A_DETRAIB)); + row.add(find_detraib(recRmov.get("TIPODET")), s.cid2index(A_DETRAIB)); row.add(recMov.get("TIPO"), s.cid2index(A_TIPOCF)); row.add(recMov.get("CODCF"), s.cid2index(A_CODCF)); @@ -382,9 +382,9 @@ void TSpeCheck_msk::foundHomeland(TToken_string& row, TString numreg, TString co // RFSO row.add(clifo.get("CODRFSO"), s.cid2index(A_RFSO)); // RSOC RFSO - row.add(getRFSO(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO)); + row.add(get_rfso(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO)); // RC - row.add((revCharge(recMov.get("NUMREG"), recMov.get_date("DATAREG").year())), s.cid2index(A_REVERSE)); + row.add((rev_charge(recMov.get("NUMREG"), recMov.get_date("DATAREG").year())), s.cid2index(A_REVERSE)); // AUTOFATT if(_ditta.partita_IVA() == clifo.get("PAIV")) { @@ -403,14 +403,14 @@ void TSpeCheck_msk::foundHomeland(TToken_string& row, TString numreg, TString co } -void TSpeCheck_msk::fillCust() +void TSpe_check_msk::fill_cust() { TString query = "USE TRASFATT\n"; query << "SELECT BETWEEN(DATAREG,#DADATAREG,#ADATAREG)&&(TIPO=\"" << get(F_TIPOCF) << "\")"; if(get(F_CODCF) != "") query << "&&STR((CODCF=#CODCF))"; - getFilFlag(query); + get_fil_flag(query); TISAM_recordset rset(query); @@ -462,7 +462,7 @@ void TSpeCheck_msk::fillCust() nat.cut(0) << rset.get("NATURA").as_string(); row.add(nat.full() ? nat : natura(rset.get("CODIVA").as_string()), s.cid2index(A_NATURA)); // DETR - row.add(findDetraib(rset.get("TIPODET").as_string()), s.cid2index(A_DETRAIB)); + row.add(find_detraib(rset.get("TIPODET").as_string()), s.cid2index(A_DETRAIB)); row.add(rset.get("TIPO").as_string(), s.cid2index(A_TIPOCF)); row.add(rset.get("CODCF").as_string(), s.cid2index(A_CODCF)); @@ -472,9 +472,9 @@ void TSpeCheck_msk::fillCust() // RFSO row.add(clifo.get("CODRFSO"), s.cid2index(A_RFSO)); // RSOC RFSO - row.add(getRFSO(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO)); + row.add(get_rfso(clifo.get("CODRFSO")), s.cid2index(A_RAGSOCRFSO)); // RC - row.add((revCharge(rset.get("NUMREG").as_string(), rset.get("DATAREG").as_date().year())), s.cid2index(A_REVERSE)); + row.add((rev_charge(rset.get("NUMREG").as_string(), rset.get("DATAREG").as_date().year())), s.cid2index(A_REVERSE)); // AUTOFATT if(rset.get("AUTOFATT").as_string() == "X" || _ditta.partita_IVA() == clifo.get("PAIV")) { @@ -493,15 +493,15 @@ void TSpeCheck_msk::fillCust() } s.force_update(); s.show(); - enableEdit(true); + enable_edit(true); } -void TSpeCheck_msk::getFilFlag(TString& query) +void TSpe_check_msk::get_fil_flag(TString& query) { switch(get_int(F_FLAG)) { case 1: - query << "&&((TFINVIO=\"\")||(TFINVIO=\"X\")||(TFINVIO=\"F\")||(TFINVIO=\"E\"))"; + query << R"(&&((TFINVIO="")||(TFINVIO="X")||(TFINVIO="F")||(TFINVIO="E")))"; break; case 2: query << "&&(TFINVIO=\"I\")"; @@ -514,7 +514,7 @@ void TSpeCheck_msk::getFilFlag(TString& query) } } -void TSpeCheck_msk::enableEdit(bool en) +void TSpe_check_msk::enable_edit(const bool en) { // Abilito i bottoni enable(DLG_ALL,en); @@ -554,7 +554,7 @@ void TSpeCheck_msk::enableEdit(bool en) s.force_update(); } -void TSpeCheck_msk::selectAll() +void TSpe_check_msk::select_all() { _selected = !_selected; TSheet_field& s = sfield(F_RIGHE); @@ -567,7 +567,7 @@ void TSpeCheck_msk::selectAll() s.force_update(); } -void TSpeCheck_msk::saveAll() +void TSpe_check_msk::save_all() { TSheet_field& s = sfield(F_RIGHE); FOR_EACH_SHEET_ROW(s, r, strarr) @@ -600,7 +600,7 @@ void TSpeCheck_msk::saveAll() } } -void TSpeCheck_msk::deleteAll() +void TSpe_check_msk::delete_all() { TSheet_field& s = sfield(F_RIGHE); FOR_EACH_SHEET_ROW(s, r, strarr) @@ -623,7 +623,7 @@ void TSpeCheck_msk::deleteAll() } } -TSpeCheck_msk::TSpeCheck_msk() : TAutomask("tf0400a") +TSpe_check_msk::TSpe_check_msk() : TAutomask("tf0400a") { _ditta.init(LF_NDITTE, prefix().get_codditta()); _selected = false; @@ -643,7 +643,7 @@ TSpeCheck_app& app() { return (TSpeCheck_app&)main_app(); } void TSpeCheck_app::main_loop() { - TSpeCheck_msk msk; + TSpe_check_msk msk; msk.set_has_fp(has_module(FPAUT)); msk.run(); } diff --git a/src/tf/tfutility.cpp b/src/tf/tfutility.cpp index 4c7cb87b7..102ca052a 100644 --- a/src/tf/tfutility.cpp +++ b/src/tf/tfutility.cpp @@ -35,11 +35,10 @@ TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfp } // Controlla se l'azienda ha un RFSO -bool haveRFSO(TString& codrfso) +bool have_rfso(TString& codrfso) { codrfso = cache().get(LF_NDITTE, prefix().firm().codice(), "CODRFSO"); - if(codrfso == "") return false; - return true; + return codrfso.full(); } const char * natura(const TString& codiva) @@ -51,29 +50,29 @@ const char * natura(const TString& codiva) return natura; } -TString findDetraib(TString tipodet) +TString find_detraib(const TString& tipodet) { - real perc = cache().get("%DET", tipodet, "R0"); + real perc = static_cast(cache().get("%DET", tipodet, "R0")); return perc.stringa(6,2); } -real get_IVA(const TString& codiva) +real get_iva(const TString& codiva) { const TRectype& ai = cache().get("%IVA", codiva); return ai.get_real("R0"); } -TString revCharge(TString numreg, int year) +TString rev_charge(const TString& numreg, const int year) { // Controllo se la causale ha il reverse charge, se il cliente non l'ha impostata giusta sono ARAZZI suoi - TString key = numreg; + const TString& key = numreg; TCausale caus(cache().get(LF_MOV, key, "CODCAUS"), year); if(caus.reverse_charge()) bool tolla = true; return caus.reverse_charge() ? "X" : ""; } -TString getRFSO(TString codrfso) +TString get_rfso(TString codrfso) { TString key; key << codrfso[0] << "|" << codrfso.mid(1); return cache().get(LF_ANAG, key, "RAGSOC"); @@ -82,19 +81,37 @@ TString getRFSO(TString codrfso) /* Utilizzo questa funzione per filtrare al meglio i record, tutti i casi che devo omettere verranno rilevati e ritorneranno false * Nota bene: viene sfruttato un puntatore di TISAM_Recordset per non creare nuovi oggetti e velocizzare la chiamata * a questo punto il programma non ha ancora creato un record di $trasfatt con i dati che mi interessano + * + * ******************************************************************************************************************************** + * Aggiornamento 06/03/2019: Aggiunta modalità esterometro! Che succede se abilito questa magia? + * + * Movimenti Attivi: + * Il ragionamento parte con questo presupposto: filtro in automatico che esclude tutti i soggetti che normalmente dovrebbero ricevere la fattura. + * Overrides: + * paf_sent: Anzichè filtrare codesti soggetti vado a vedere direttamente sui PAFFI per capire cosa ho inviato + * paf_not_sent: Stessa roba ma mostro solo i non inviati + * paf_sog_fat: Questo flag si considera solo se i primi due non sono abilitati, aggiunge allo sheet anche i soggetti a fattura (quindi è come se disabilitasse il filtro) + * paf_esteri: Questo flag si considera solo se i primi due non sono abilitati, aggiunge i clienti esteri + * I booleani paf_sent && paf_not_sent sono complementari così come paf_sog_fat && paf_esteri + * MA NOTA BENE CHE senza mod_esterometro nessun booleano viene preso in considerazione! + * + * Movimenti Passivi: + * Stessa roba sopra ma con paa_* */ -bool checkRecord(TISAM_recordset* rec, bool has_fp) +bool check_record(TISAM_recordset* rec, const bool mod_esterometro, + const bool paf_not_sent, const bool paf_sent, const bool paf_sog_fat, const bool paf_esteri, + const bool paa_not_sent, const bool paa_sent, const bool paa_sog_fat, const bool paa_esteri) { // Il record non è valido se non è presente un cliente if(rec->get("23.TIPO").as_string()[0] == '\0' || rec->get("23.CODCF").as_int() == 0) return false; - TAnagrafica anaCli(rec->get("23.TIPO").as_string()[0], rec->get("23.CODCF").as_int(), rec->get("23.OCFPI").as_string()); + TAnagrafica ana_cli(rec->get("23.TIPO").as_string()[0], rec->get("23.CODCF").as_int(), rec->get("23.OCFPI").as_string()); - static TString keyClifo; keyClifo.cut(0) << rec->get("23.TIPO").as_string() << "|" << rec->get("23.CODCF").as_string(); - TRectype rclifo = cache().get(LF_CLIFO, keyClifo); + static TString key_clifo; key_clifo.cut(0) << rec->get("23.TIPO").as_string() << "|" << rec->get("23.CODCF").as_string(); + TRectype rclifo = cache().get(LF_CLIFO, key_clifo); // Salto le schede carburanti - if(rclifo.get("ALLEG") == "C") + if(rclifo.get_char("ALLEG") == 'C') return false; // Clienti @@ -102,46 +119,111 @@ bool checkRecord(TISAM_recordset* rec, bool has_fp) { // Tolgo tutti i movimenti di sola IVA e in reverse charge o di tipo 3 (Acquisto di beni e servizi di soggetti non residenti) TCausale caus(rec->get("23.CODCAUS").as_string(), rec->get("23.DATAREG").as_date().year()); - const bool filter_revcharge = msk().get_bool(B_ESTEROMETRO) ? msk().get_bool(B_REVCHARGE) : false; - if(!filter_revcharge && caus.soloiva() && (caus.reverse_charge() || caus.regime_speciale() == 3)) + if(caus.soloiva() && (caus.reverse_charge() || caus.regime_speciale() == 3)) return false; - // controllo se la fattura non è già stata spedita con la fatt. elettronica - static TPaf_record paf0100f("PAF0100F"); - // controllo se il movimento è agganciato a un documento - if(msk().get_bool(B_ESTEROMETRO) && !rec->get("23.DPROVV").is_empty() && !rec->get("23.DANNO").is_empty() && !rec->get("23.DCODNUM").is_empty() && !rec->get("23.DNDOC").is_empty()) + + if (mod_esterometro) { - // Controllo valido solo per utenti non F8 - const bool check_paf_sent = msk().get_bool(B_PAF_SENT); - const bool check_paf_not_sent = msk().get_bool(B_PAF_NOT_SENT); - // Se l'utente ha il modulo FP e uno dei due filtri possibili non è stato selezionato, abilito il controllo sui paf - if(has_fp && (!check_paf_sent || !check_paf_not_sent)) + // Parte Sirio FP w/ WebApp + // Faccio controlli per evitare controlli + if(paf_not_sent && paf_sent) { - TString hfatt, bfatt; - TRectype rdoc(LF_DOC); - static TLocalisamfile doc(LF_DOC); - rdoc.put(DOC_PROVV, rec->get("23.DPROVV").as_string()); - rdoc.put(DOC_PROVV, rec->get("23.DANNO").as_string()); - rdoc.put(DOC_PROVV, rec->get("23.DCODNUM").as_string()); - rdoc.put(DOC_PROVV, rec->get("23.DNDOC").as_string()); + return true; + } + else if (paf_not_sent || paf_sent) + { + // controllo se la fattura non è già stata spedita con la fatt. elettronica + static TPaf_record paf0100f("PAF0100F"); + // controllo se il movimento è agganciato a un documento + if (rec->get("23.DPROVV").is_full() && rec->get("23.DANNO").is_full() && rec->get("23.DCODNUM").is_full() && rec->get("23.DNDOC").is_full()) + { + TString hfatt, bfatt; + TRectype rdoc(LF_DOC); + static TLocalisamfile doc(LF_DOC); + rdoc.put(DOC_PROVV, rec->get("23.DPROVV").as_string()); + rdoc.put(DOC_PROVV, rec->get("23.DANNO").as_string()); + rdoc.put(DOC_PROVV, rec->get("23.DCODNUM").as_string()); + rdoc.put(DOC_PROVV, rec->get("23.DNDOC").as_string()); - // Se riesco a generare la chiave, trovo il record e ha il flag di gestione in errore o un errore esterno, so che è stato inviato - const bool paf_sent = rdoc.read(doc) == NOERR && chiave_paf(rdoc, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != "E" && paf0100f.sq_get("P1_ERREST") != "*"; - // Se voglio solo quelli inviati e non è stato inviato, RUSPA! - if (check_paf_sent && !paf_sent) + // Se riesco a generare la chiave, trovo il record e ha il flag di gestione in errore o un errore esterno, so che è stato inviato + const bool is_sent = rdoc.read(doc) == NOERR && chiave_paf(rdoc, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != "E" && paf0100f.sq_get("P1_ERREST") != "*"; + + // Se voglio solo quelli inviati e non è stato inviato o + // voglio solo quelli non inviati ed è stato inviato, RUSPA! + if ((is_sent && !paf_sent) || (is_sent && paf_not_sent)) + return false; + } + else + { + static bool warn_user = true; + if(warn_user) + { + TString msg; + msg << "Attenzione: il movimento " << rec->get("23.NUMREG") << " non deriva da nessuna fattura.\nSi desidera includerlo nella ricerca?"; + switch (yesnoall_box(msg)) + { + case K_YES: + return true; + break; + case K_SPACE: + warn_user = false; + case K_NO: + default: + return false; + } + } + // Se non dovrebbe capitare return false; - - // Se voglio solo quelli non inviati ed è stato inviato, RUSPA! - if (check_paf_not_sent && paf_sent) + } + } + // Parte tirchi che non comprano la mia WebApp + // Solito controllo per evitare controlli + else if(paf_sog_fat && paf_esteri) + { + return true; + } + else + { + const bool is_fatturabile = ana_cli.stato_partita_IVA() == "IT" || ana_cli.stato_partita_IVA() == "SM"; + if ((is_fatturabile && !paf_sog_fat) || (is_fatturabile && paf_esteri)) return false; } } - - } else if(anaCli.italiano() && anaCli.partita_IVA()[0] != '0' && anaCli.partita_IVA()[0] != '1' && anaCli.codice_fiscale()[0] > '8') - // Salto tutti i fornitori con cod cf che inizia per 8 o 9 e con p.iva non valida + } else { - return false; + // Salto tutti i fornitori con cod cf che inizia per 8 o 9 e con p.iva non valida + if (ana_cli.italiano() && ana_cli.partita_IVA()[0] != '0' && ana_cli.partita_IVA()[0] != '1' && ana_cli.codice_fiscale()[0] > '8') + return false; + + if (mod_esterometro) + { + // Parte Sirio FP w/ WebApp + // Faccio controlli per evitare controlli + if (paf_not_sent && paf_sent) + { + return true; + } + else if (paf_not_sent || paf_sent) + { + // Disabilitato, non si vuole implementare al momento + return false; + } + // Parte tirchi che non comprano la mia WebApp + // Solito controllo per evitare controlli + else if (paf_sog_fat && paf_esteri) + { + return true; + } + else + { + const bool is_fatturabile = ana_cli.stato_partita_IVA() == "IT" || ana_cli.stato_partita_IVA() == "SM"; + if ((is_fatturabile && !paf_sog_fat) || (is_fatturabile && paf_esteri)) + return false; + } + } + } return true; diff --git a/src/tf/tfutility.h b/src/tf/tfutility.h index a9413de1d..1c293b6e2 100644 --- a/src/tf/tfutility.h +++ b/src/tf/tfutility.h @@ -1,3 +1,6 @@ +#ifndef __TFUTILITY_H +#define __TFUTILITY_H + #include #include @@ -10,16 +13,20 @@ TRectype getTrasFatt(TString reg, TString codiva); // Ritorna il cliente in un record di $clifo, con tipocf = "O" lo cerca in $occas TRectype getCli(const TString& tipocf, const TString& codcf, const TString& ocfpi); // Controlla se l'azienda ha un RFSO -bool haveRFSO(TString& codrfso); +bool have_rfso(TString& codrfso); // Ritorna la natura da un codice IVA const char * natura(const TString& codiva); // Ritorna l'IVA -real get_IVA(const TString& codiva); +real get_iva(const TString& codiva); // Ritorna la % di detraibilità -TString findDetraib(TString tipodet); +TString find_detraib(const TString& tipodet); // Ritorna "X" se ha il reverse charge -TString revCharge(TString numreg, int year); +TString rev_charge(const TString& numreg, int year); // Ritorna la ragione sociale del RFSO -TString getRFSO(TString codrfso); +TString get_rfso(TString codrfso); // Controllo che sia un record che mi interessa -bool checkRecord(TISAM_recordset* rec, bool has_fp); \ No newline at end of file +bool check_record(TISAM_recordset* rec, const bool mod_esterometro = false, + const bool paf_not_sent = false, const bool paf_sent = false, const bool paf_sog_fat = false, const bool paf_esteri = false, + const bool paa_not_sent = false, const bool paa_sent = false, const bool paa_sog_fat = false, const bool paa_esteri = false); + +#endif //!__TFUTILITY_H \ No newline at end of file From 88b6ce56ff5a57ea2cfeb7e7065f04bb53433a3d Mon Sep 17 00:00:00 2001 From: Mattia Tollari Date: Thu, 7 Mar 2019 18:13:21 +0100 Subject: [PATCH 2/2] Patch level : 12.0 no-patch Files correlati : fp Commento : - Pulita gestione righe fp - Spostata funzione no_special e pulita da switch case --- src/fp/fplib.h | 1 - src/fp/fplib01.cpp | 30 ++++++++++++++++-------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/fp/fplib.h b/src/fp/fplib.h index aa0053c55..03e70df59 100644 --- a/src/fp/fplib.h +++ b/src/fp/fplib.h @@ -30,7 +30,6 @@ bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt); TString get_dest_sdi(const char tipocf, const long codcf); // Valorizza codice sdi e pec in base alle configurazioni del monitor bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString& pec); -inline const TString& no_special(char a); const TString& tipo_doc_sdi(const TDocumento& doc); // Controlli comuni diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index 7a86fb76d..8c7f83064 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -27,7 +27,7 @@ void set_connection(SSimple_query& s) TString ip = fp_settings().get_db_indirizzo(); if (ip.upper() != "TESTCAMPO2012") { - if (s.sq_connect("TESTCAMPO2012@FP_HDI", + if (s.sq_connect("TESTCAMPO2012@campo_fp", "fp", "fp", TSDB_MSSQL) != NOERR) @@ -193,15 +193,12 @@ bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString& return coddest.full(); } -inline const TString& no_special(char a) +inline const TString& no_special(const char a) { TString& r = get_tmp_string().cut(0); - switch(a) + if(a != '\'') { - case '\'': - break; - default: - r << a; + r << a; } return r; } @@ -1524,7 +1521,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) TPaf_record paf2100f("PAF2100F"); paf2100f.set("PK_KEYHEADERFATT", _hfatt); paf2100f.set("PK_KEYBODYFATT", _bfatt); - remove(paf2000f); // Cancella tutti i "altri dati gestionali" + remove(paf2100f); // Cancella tutti i "altri dati gestionali" TPaf_record paf1900f("PAF1900F"); paf1900f.set("PY_KEYHEADERFATT", _hfatt); paf1900f.set("PY_KEYBODYFATT", _bfatt); @@ -1708,7 +1705,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } else if (rdoc->is_prestazione()) { - real qta = rdoc->get(RDOC_QTA); + real qta = rdoc->get_real(RDOC_QTA); if (qta.is_zero()) qta = UNO; set_qta_prezzo(paf1800f, rdoc); @@ -1826,7 +1823,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf1800f.reset(); paf1800f.set("PI_KEYHEADERFATT", _hfatt); paf1800f.set("PI_KEYBODYFATT", _bfatt); - paf1800f.set("PI_NUMEROLINEA", ++riga); + paf1800f.set("PI_NUMEROLINEA", riga); paf3000f.reset(); paf3000f.set("PT_KEYHEADERFATT", _hfatt); paf3000f.set("PT_KEYBODYFATT", _bfatt); @@ -1837,6 +1834,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf1800f.set("PI_PRZTOTALE", ZERO); set_IVA(_codivadefault, paf1800f); ok &= insert(paf1800f) && insert(paf3000f); + riga++; } } // Se il bollo va fatto pagare bisogna aggiungere una riga! @@ -1845,7 +1843,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf1800f.reset(); paf1800f.set("PI_KEYHEADERFATT", _hfatt); paf1800f.set("PI_KEYBODYFATT", _bfatt); - paf1800f.set("PI_NUMEROLINEA", ++riga); + paf1800f.set("PI_NUMEROLINEA", riga); paf3000f.reset(); paf3000f.set("PT_KEYHEADERFATT", _hfatt); paf3000f.set("PT_KEYBODYFATT", _bfatt); @@ -1856,6 +1854,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf1800f.set("PI_PRZTOTALE", converti_prezzo(doc.get_real("BOLLI"))); set_IVA(doc.codiva_bolli(), paf1800f); ok &= insert(paf1800f) && insert(paf3000f); + riga++; } // OMAGGI???? // Aggiungo le spese incasso @@ -1864,7 +1863,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf1800f.reset(); paf1800f.set("PI_KEYHEADERFATT", _hfatt); paf1800f.set("PI_KEYBODYFATT", _bfatt); - paf1800f.set("PI_NUMEROLINEA", ++riga); + paf1800f.set("PI_NUMEROLINEA", riga); paf3000f.reset(); paf3000f.set("PT_KEYHEADERFATT", _hfatt); paf3000f.set("PT_KEYBODYFATT", _bfatt); @@ -1877,6 +1876,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) set_IVA(ini_get_string(CONFIG_DITTA, "ve", "SPINCODIVA"), paf1800f); ok &= insert(paf1800f) && insert(paf3000f); + riga++; } // Conai assolto if(doc.clifor().vendite().get_bool("CONAIASS")) @@ -1884,7 +1884,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf1800f.reset(); paf1800f.set("PI_KEYHEADERFATT", _hfatt); paf1800f.set("PI_KEYBODYFATT", _bfatt); - paf1800f.set("PI_NUMEROLINEA", ++riga); + paf1800f.set("PI_NUMEROLINEA", riga); paf3000f.reset(); paf3000f.set("PT_KEYHEADERFATT", _hfatt); paf3000f.set("PT_KEYBODYFATT", _bfatt); @@ -1895,6 +1895,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf1800f.set("PI_PRZTOTALE", ZERO); set_IVA(_codivadefault, paf1800f); ok &= insert(paf1800f) && insert(paf3000f); + riga++; } // Riga sconto di testata @@ -1909,7 +1910,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf1800f.reset(); paf1800f.set("PI_KEYHEADERFATT", _hfatt); paf1800f.set("PI_KEYBODYFATT", _bfatt); - paf1800f.set("PI_NUMEROLINEA", ++riga); + paf1800f.set("PI_NUMEROLINEA", riga); paf3000f.reset(); paf3000f.set("PT_KEYHEADERFATT", _hfatt); paf3000f.set("PT_KEYBODYFATT", _bfatt); @@ -1926,6 +1927,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) paf1800f.set("PI_PRZTOTALE", -abs(riva.sconto_perc())); set_IVA(riva.cod_iva().codice(), paf1800f); ok &= insert(paf1800f) && insert(paf3000f); + riga++; } }