diff --git a/src/tf/tf0100.cpp b/src/tf/tf0100.cpp index 14c58e9da..0ff11ce39 100644 --- a/src/tf/tf0100.cpp +++ b/src/tf/tf0100.cpp @@ -291,6 +291,14 @@ bool bd2017() return today <= lastDay; } +TTrFa_mask& msk() +{ + static TTrFa_mask* msk = NULL; + if (msk == NULL) + msk = new TTrFa_mask("tf0100a"); + return *msk; +} + ///////////////////////////////////////////////////////////////////////////////////// // TTrFa_record ///////////////////////////////////////////////////////////////////////////////////// @@ -833,8 +841,8 @@ TString TTrFa_app::getHeader(TToken_string* strarr) // Cerco/Aggiungo il Clifo all'std::map static TString keyMap; keyMap.cut(0); - static TString tipocf, codcf; - tipocf.cut(0); codcf.cut(0); + static TString tipocf, codcf, occas; + tipocf.cut(0); codcf.cut(0); occas.cut(0); // Controlli per bolladog if(strcmp(strarr->get(_codnum),"BD") == 0) @@ -848,9 +856,10 @@ TString TTrFa_app::getHeader(TToken_string* strarr) { tipocf << strarr->get_char(_tipocf); codcf << strarr->get(_codcf); + occas << strarr->get(_occas); } - keyMap << tipocf << "|" << codcf; + keyMap << tipocf << "|" << codcf << "|" << occas; clifoDoc app; // Non è presente e lo inserisco per la chiave body @@ -861,7 +870,21 @@ TString TTrFa_app::getHeader(TToken_string* strarr) app.countDoc = 0L; mCliDoc.insert(std::pair(keyMap, app)); } - TString header; header.format("%c%06ld", tipocf[0], atol(codcf)); + static TString header; + static TString formatString; formatString.cut(0) << "%c%0"; + if(occas.blank()) + { + formatString << 18 - codcf.len() << "d"; + header.format(formatString, tipocf[0], 0); + header << codcf; // Perchè cazzo non va il %s!? + } + else + { + formatString << 18 - occas.len() << "d"; + header.format(formatString, 'O', 0); + header << occas; + } + // Ritorno l'header return header; } @@ -878,7 +901,7 @@ TString TTrFa_app::getBody(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); + static TString keyMap; keyMap.cut(0) << strarr->get_char(_tipocf) << "|" << strarr->get_int(_codcf) << "|" << strarr->get(_occas); clifoDoc app = mCliDoc[keyMap]; if(add) @@ -1106,7 +1129,11 @@ bool TTrFa_app::tff0400(TSheet_field& sheet) } if(!foundBolla) { - checkClifo << strarr->get_char(_tipocf) << strarr->get_long(_codcf); + static TString tempOcfpi; tempOcfpi.cut(0) << strarr->get(_occas); + if(tempOcfpi.blank()) + checkClifo << strarr->get_char(_tipocf) << "|" << strarr->get_long(_codcf); + else + checkClifo << strarr->get_char(_tipocf) << "|" << strarr->get(_occas); } // Controllo il clifo, se non c'è lo aggiungo altrimenti salto sto giro @@ -1315,7 +1342,14 @@ bool TTrFa_app::tff0700(TSheet_field& sheet) // Chiave: Tipo C/F, Cod C/F, Numero doc. anno doc static TString checkFatt; - checkFatt.cut(0) << strarr->get_long(_codcf) << "," << strarr->get(_numdoc) << "," << TString(strarr->get(_datadoc)).right(4); + static TString codcf; + + // Prendo il cliente occasionale se c'è + codcf.cut(0) << strarr->get(_occas); + if(codcf.blank()) + codcf.cut(0) << strarr->get(_codcf); + + checkFatt.cut(0) << codcf << "," << strarr->get(_numdoc) << "," << TString(strarr->get(_datadoc)).right(4); if(fattSent.find(checkFatt) == fattSent.end()) { @@ -1502,14 +1536,12 @@ void TTrFa_app::main_loop() { // Sposto SSA if(!copySSA()) return; - - TTrFa_mask msk("tf0100a"); - while (msk.run() == K_ENTER) + while (msk().run() == K_ENTER) { - if(msk.checkNotEmpty()) + if(msk().checkNotEmpty()) { - send(&msk); + send(&msk()); //ini_set_string(CONFIG_DITTA, "tf", "LastSend", ++TDate(msk.get(F_DATAFIN))); } } diff --git a/src/tf/tf0100b.h b/src/tf/tf0100b.h index 6fc60e92f..5f9bb684e 100644 --- a/src/tf/tf0100b.h +++ b/src/tf/tf0100b.h @@ -228,6 +228,7 @@ public: }; // Funzione inline di stampa inline void printError(TPrinter* stampa, TString movimento, TString documento, TString msgerr); +TTrFa_mask& msk(); ///////////////////////////////////////////////////////////////////////////////////// // TTrFa_app diff --git a/src/tf/tf0102.cpp b/src/tf/tf0102.cpp index 0ab381edf..2b755961d 100644 --- a/src/tf/tf0102.cpp +++ b/src/tf/tf0102.cpp @@ -74,7 +74,7 @@ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf } // Se non è un movimento o il controllo fallisce mi sposto - if(!newMov || !checkRecord(c_rmoviva)) + if(!newMov || !checkRecord(c_rmoviva) || !msk().get_bool(getTipoDoc(c_rmoviva->get("23.TIPODOC").as_string()))) { TString codiva; do diff --git a/src/tf/tfutility.cpp b/src/tf/tfutility.cpp index bbc678511..078dc49e3 100644 --- a/src/tf/tfutility.cpp +++ b/src/tf/tfutility.cpp @@ -83,11 +83,9 @@ TString getRFSO(TString codrfso) */ bool checkRecord(TISAM_recordset* rec) { - - TString keyClifo; keyClifo << rec->get("23.TIPO").as_string() << "|" << rec->get("23.CODCF").as_string(); - TRectype rclifo = cache().get(LF_CLIFO, keyClifo); + TAnagrafica anaCli(rec->get("23.TIPO").as_string()[0], rec->get("23.CODCF").as_int(), rec->get("23.OCFPI").as_string()); // Salto le schede carburanti - if(rclifo.get("ALLEG") == "C") + if(anaCli.inserimento_in_allegato() == 'C') return false; // Clienti @@ -97,7 +95,7 @@ bool checkRecord(TISAM_recordset* rec) TCausale caus(rec->get("23.CODCAUS").as_string()); if(caus.soloiva() && (caus.reverse_charge() || caus.regime_speciale() == 3)) return false; - } else if((rclifo.get("STATOPAIV").blank() || rclifo.get("STATOPAIV") == "IT") && rclifo.get("PAIV")[0] != '0' && rclifo.get("PAIV")[0] != '1' && (rclifo.get("COFI")[0] == '8' || rclifo.get("COFI")[0] == '9')) + } 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 { return false;