// Rinumerazione movimenti e saldi // fv 12/12/93 // ------------------------------------------------------------------------- // *TBI* Partenza dall'ultimo movimento stampato // *TBI* Aggiornamento scadenziario // *TBI* Aggiornamento cespiti // ------------------------------------------------------------------------- #include #include #include #include #include #include #define FLD_CG41_YEAR 100 #define MAX_CNT 300 #include #include #include #include #include #include "cglib02.h" struct therec { char DATAREG[9]; char REG[4]; char DATADOC[9]; char NUMPROT[9]; char ANNOES[5]; char NUMREG[8]; }; class CG4100_App : public TSkeleton_application { int _year; TMask* _msk; public: bool set_parms(); virtual void main_loop(); void sort_all(); bool sort_sal(); CG4100_App() {} virtual ~CG4100_App() {} }; bool CG4100_App::set_parms() { _msk->run(); _year = _msk->get_int(FLD_CG41_YEAR); return _msk->last_key() == K_ENTER; } void CG4100_App::main_loop() { if (fexist("__sal__.sav")) warning_box(TR("Un'operazione di riordino saldi si e' conclusa" " impropriamente. Si raccomanda di rieseguirla")); _msk = new TMask("cg4100b"); sort_sal(); delete _msk; } bool CG4100_App::sort_sal() { if (!set_parms()) return FALSE; TSystemisamfile saldi(LF_SALDI); saldi.open(_excllock); TLocalisamfile rmov(LF_RMOV); TLocalisamfile mov(LF_MOV); TSaldo_agg sal; FILE* fp = fopen ("__sal__.sav","w"); fclose(fp); int gruppo, conto; const int year = _year; long oldnumreg = 0L, sottoconto; TProgind prnd(rmov.items(), TR("Riordino archivio saldi in corso\nLettura archivio movimenti..."), FALSE,TRUE); mov.setkey(1); rmov.first(); sal.reset(); sal.set_anno_es(year); sal.clear_saldi(year); long numreg = 0L; tiposal tsal = normale; bool provvis = FALSE; TDate datareg; while (!rmov.eof()) { if (_year == rmov.get_int(RMV_ANNOES)) { numreg = rmov.get_long(RMV_NUMREG); gruppo = rmov.get_int(RMV_GRUPPO); conto = rmov.get_int(RMV_CONTO); sottoconto = rmov.get_long(RMV_SOTTOCONTO); bool scaricato = FALSE; if (numreg != oldnumreg) { if (oldnumreg !=0) { if (sal.items() > 0) sal.registra(); } oldnumreg = numreg; mov.zero(); mov.put(MOV_NUMREG, numreg); mov.read(); CHECK(mov.good(),"Archivi movimenti e righe inconsistenti"); // Tipo saldo normale per default tsal = normale; const TString& codcaus = mov.get(MOV_CODCAUS); if (codcaus.not_empty()) // cerca causale per determinare il tipo del saldo { const TRectype& causale = cache().get(LF_CAUSALI, codcaus); if (!causale.empty()) { const char ac = causale.get_char(CAU_MOVAP); if (ac == 'A') tsal = apertura; else if (ac == 'C') tsal = chiusura; } } scaricato = mov.get_bool(MOV_SCARCON); provvis = mov.get(MOV_PROVVIS).not_empty(); datareg = mov.get_date(MOV_DATAREG); sal.reset(); sal.set_anno_es(_year); sal.set_tipo_saldo(tsal); sal.set_movprovv(provvis); sal.set_data_ulmov(datareg); sal.set_num_ulmov(oldnumreg); } const char sezione = rmov.get(RMV_SEZIONE)[0]; real importo(rmov.get(RMV_IMPORTO)); sal.aggiorna(gruppo, conto, sottoconto, importo, sezione, TRUE, scaricato); } rmov.next(); prnd.addstatus(1); do_events(); } if (sal.items() > 0) sal.registra(); remove("__sal__.sav"); saldi.close(); return TRUE; } int cg4100(int argc, char* argv[]) { CG4100_App main_app; main_app.run(argc, argv, TR("Ricalcolo Saldi")); return TRUE; }