diff --git a/crpa/crpa1.cpp b/crpa/crpa1.cpp index 0a297225a..6d7be0e51 100755 --- a/crpa/crpa1.cpp +++ b/crpa/crpa1.cpp @@ -3,9 +3,9 @@ #include #include #include -//#include #include #include +#include #include #include @@ -140,7 +140,7 @@ protected: void mask2ini(); void ini2mask(); bool transfer(); - void transfer_movimento(const TRecord_text& curr); //, TError_log& log); + void transfer_movimento(const TRecord_text& curr, TLog_report& log); const TString& ana2bill(const TString& contone) const; long get_next_key(); @@ -190,7 +190,7 @@ const TString& TBudget_Import::ana2bill(const TString& contone) const return tmp; } -void TBudget_Import::transfer_movimento(const TRecord_text& curr) //, TError_log& log) +void TBudget_Import::transfer_movimento(const TRecord_text& curr, TLog_report& log) { //formato definitivo del tracciato record dei CSV da importare (vedi anche il file crpa1.ini): //codice commessa|conto|importo|inizio cms|fine cms @@ -241,18 +241,43 @@ void TBudget_Import::transfer_movimento(const TRecord_text& curr) //, TError_log TISAM_recordset pconana(query); const TRecnotype items = pconana.items(); if (items <= 0) - warning_box(FR("Il sottoconto %s NON esiste!"), (const char*)codconto); + { + TString errore; + errore << "Il sottoconto " << codconto << " NON esiste!"; + log.log(2, errore); + return; + } if (items > 1) - warning_box(FR("Esiste piu' di un sottoconto %s!"), (const char*)codconto); - + { + TString errore; + errore << "Esiste piu' di un sottoconto " << codconto ; + log.log(1, errore); + } pconana.move_last(); //si posiziona sul record corretto const TString& contone = pconana.get(PCONANA_CODCONTO).as_string(); + const TString& contcon = ana2bill(contone); if (contcon.empty()) - warning_box(FR("Il conto analitico %s non corrisponde ad alcun conto contabile!"), (const char*)contone); - - const TString& sezione = pconana.get(PCONANA_SEZSALDI).as_string(); + { + TString errore; + errore << "Il conto analitico " << contone << " non corrisponde ad alcun conto contabile!"; + log.log(2, errore); + return; + } + //deve stabilire se la sezione e' D o A in base all'indbil del conto analitico + TAnal_bill anazio(contone); + const int indbil = anazio.indicatore_bilancio(); + char sezione = 'D'; + if (indbil > 0) + sezione = (indbil == 1 || indbil == 3) ? 'D' : 'A'; + else + { + TString errore; + errore << "Il conto analitico " << contone << " non ha un indicatore di bilancio!"; + log.log(2, errore); + return; + } //mette quella bastarda di sezione nel record movana.put(MOVANA_SEZIONE, sezione); @@ -279,7 +304,6 @@ void TBudget_Import::transfer_movimento(const TRecord_text& curr) //, TError_log bool TBudget_Import::transfer() { - //azzeramento preventivo di movimenti, righe e saldi di tipo P if (_msk->get(F_KILLOLD)) { @@ -311,25 +335,24 @@ bool TBudget_Import::transfer() //la causale!!! _codcaus = _msk->get(F_COD_CAUS); - //*** prima va inserito il log in libreria preparazione del log -// TError_log log; -// log.set_header(TR("Importazione movimenti")); - const long dimension = fsize(file); TProgind pi(dimension,TR("Importazione movimenti in corso...")); int err = NOERR; TRecord_text curr; + //log degli errori di trasferimento con soppressione degli errori ripetuti! + TLog_report log("Errori"); + log.kill_duplicates(); while (_trasfile->read(curr) == NOERR && !pi.iscancelled() && err == NOERR) { pi.setstatus(_trasfile->read_file()->tellg()); - transfer_movimento(curr); //, log); + transfer_movimento(curr, log); } _trasfile->close(); delete _trasfile; -// log.show(); + log.preview(); _lastfile = _msk->get(F_NAMEFILE); return true;