diff --git a/ba/bacnv.cpp b/ba/bacnv.cpp index ce9e4e117..d36572627 100755 --- a/ba/bacnv.cpp +++ b/ba/bacnv.cpp @@ -2,15 +2,17 @@ #include #include -#include #include #include #include +#include #include #include #include #include #include + + #if XVT_OS == XVT_OS_WIN #include #define RMDIR _rmdir @@ -18,6 +20,7 @@ #define RMDIR rmdir #endif +#include #include #define usage "Errore - uso : bacnv [1|2|3|4|5|6|7|8] ditta" @@ -157,14 +160,15 @@ public: void liala(const char* table); bool patch_uff(TRectype & rec, const char * const fnames[]); bool collate(TRectype & rec, const char * f1, const char * f2); - void patch_com(void); - void zero_770(void); - void convert_patty(void); - void convert_codconc(void); - void convert_profili(void); - void convert_caus_attiv(void); - void rebuild_indexes(void); - void rebuild_dir_indexes(void); + void patch_com(); + void zero_770(); + void convert_patty(); + void convert_codconc(); + void convert_profili(); + void convert_caus_attiv(); + void rebuild_indexes(); + void rebuild_dir_indexes(); + void aggiorna_causali_pagamento() const; TConversione_archivi() : _oldditta(0), _codditta(0), _error(0) {} }; @@ -228,20 +232,19 @@ bool TConversione_archivi::menu(MENU_TAG) f.load(lf, '|', '\0', '\n', TRUE, TRUE); } break; - case 2: - liala("LIA"); - liala("PLA"); - break; - case 3: - if (_codditta == 0) - patch_com(); - case 4: - if (_codditta == 0) - zero_770(); - case 5: - convert_patty(); - case 6: - { + case 2: + liala("LIA"); + liala("PLA"); + break; + case 3: + if (_codditta == 0) + patch_com(); + case 4: + if (_codditta == 0) + zero_770(); + case 5: + convert_patty(); + case 6: if (_codditta == 0) { convert_codconc(); @@ -252,22 +255,19 @@ bool TConversione_archivi::menu(MENU_TAG) //Cancella tutti i vecchi profili, sostituendoli con i nuovi convert_profili(); - } + } case 7: - { - if (_codditta == 0) - convert_caus_attiv(); - break; - } + if (_codditta == 0) + convert_caus_attiv(); + break; case 8: - { - if (_codditta == 0) - rebuild_indexes(); - break; - } - } -default: - break; + if (_codditta == 0) + rebuild_indexes(); + case 9: + aggiorna_causali_pagamento(); + break; + default: + break; } return FALSE; } @@ -843,6 +843,46 @@ void TConversione_archivi::rebuild_dir_indexes() } } + +void TConversione_archivi::aggiorna_causali_pagamento() const +{ + const int NEWROW = 8; + + TLocalisamfile caus(LF_CAUSALI); + TRecord_array rcaus(LF_RCAUSALI, CAU_NRIGA); + + for (int err = caus.first(); err == NOERR; err = caus.next()) + { + const int tipomov = caus.get_int(CAU_TIPOMOV); + if (tipomov != 3) + continue; // Considera solo pagamenti + + TRectype* key = new TRectype(LF_RCAUSALI); + key->put(CAU_CODCAUS, caus.get(CAU_CODCAUS)); + rcaus.read(key); // Leggi righe causale + + if (rcaus.exist(NEWROW)) + { + const TRectype& riga = rcaus.row(NEWROW); + if (riga.get_int(CAU_GRUPPO) == 0) // Se il gruppo e' vuoto ... + return; // ... allora conversione gia' effettuata + } + for (int r = rcaus.last_row(); r >= NEWROW; r = rcaus.pred_row(r)) + { + TRectype riga = rcaus.row(r); // Memorizzo vecchia riga + rcaus.destroy_row(r); // Cancello vecchia riga + riga.put(CAU_NRIGA, r+1); + rcaus.add_row(riga); // Spostala avanti di un posto + } + if (rcaus.last_row() >= NEWROW) + { + rcaus.row(NEWROW, TRUE); // Aggiungi riga vuota di sentinella + rcaus.rewrite(); // Aggiorna righe causale + } + } +} + + /////////////////////////////////////////////////////////// // Programma di conversione archivi speciale ///////////////////////////////////////////////////////////