#include "cglib04.h" #include "cg2802.h" HIDDEN int date2esc(const TDate& d, int* prevesc) { if (prevesc) *prevesc = 0; TTable esc("ESC"); for (int err = esc.first(); err == NOERR; err = esc.next()) { const TDate ia(esc.get("D0")); // Data inizio esercizio const TDate fa(esc.get("D1")); // Data fine esercizio const anno = esc.get_int("CODTAB"); if (d >= ia && d <= fa) return anno; if (prevesc) *prevesc = anno; } return 0; } bool TAnn_mov::create() { TApplication::create(); _pcon = new TLocalisamfile (LF_PCON); _clifo = new TLocalisamfile (LF_CLIFO); TString80 tmpmov = "%"; tmpmov << get_firm_dir(); tmpmov << "\\" << TEMP_MOV; TString80 tmprmov = "%"; tmprmov << get_firm_dir(); tmprmov << "\\" << TEMP_RMOV; TString80 tmprmoviva = "%"; tmprmoviva << get_firm_dir(); tmprmoviva << "\\" << TEMP_RMOVIVA; _tmov = new TIsamtempfile(LF_MOV, tmpmov, 0); _trmov = new TIsamtempfile(LF_RMOV, tmprmov, 0); _tiva = new TIsamtempfile(LF_RMOVIVA, tmprmoviva, 0); _rec_mov = new TRectype (LF_MOV); dispatch_e_menu (BAR_ITEM(1)); return TRUE; } bool TAnn_mov::destroy() { delete _pcon; delete _clifo; delete _tmov; delete _trmov; delete _tiva; delete _rec_mov; return TApplication::destroy(); } bool TAnn_mov::set() { _dittaric = get_firm(); if (!esegui_controlli()) return FALSE; if (!video()) return FALSE; return FALSE; } bool TAnn_mov::video() { TMask msk ("cg2802a"); KEY tasto; do { tasto = msk.run(); if (tasto != K_ENTER) return FALSE; if (esiste_testata_mov(msk)) { TMask mask ("cg2802b"); mask.set_handler(F_REGIVA, codice_registro_hnd); mask.set_handler(F_CODCAUS, codice_causale_hnd); setta_campi_maschera(mask); tasto = mask.run(); switch (tasto) { case K_ESC : break; case K_QUIT : break; case K_SAVE : { annulla(mask); } break; default: break; } } } while (tasto != K_QUIT); //K_ENTER return TRUE; } bool TAnn_mov::esiste_testata_mov(TMask& m) { long nrec; _numreg = m.get_long(F_NUMREG); _tmov->setkey(1); _tmov->zero(); _tmov->put(MOV_NUMREG, _numreg); if (_tmov->read() == NOERR) { nrec = _tmov->get_long(MOV_NUMGIO); nrec += _tras_file.start('Z'); _tras_file.read_rec_trasfer(nrec); _record = _tras_file.read_rec(); char annullato = _record.sub(248,249)[0]; if (annullato == 'A') return error_box("Registrazione presente ma gia' ANNULLATA in precedenza"); *_rec_mov = _tmov->curr(); } else return error_box("Registrazione richiesta NON PRESENTE tra i movimenti in trasferimento"); return TRUE; } void TAnn_mov::setta_campi_maschera(TMask& m) { TDate datareg (_rec_mov->get_date(MOV_DATAREG)); TDate datadoc (_rec_mov->get_date(MOV_DATADOC)); TString numdoc = _rec_mov->get (MOV_NUMDOC); TString regiva = _rec_mov->get (MOV_REG); regiva.trim(); long protiva = _rec_mov->get_long(MOV_PROTIVA); TString codcaus = _rec_mov->get (MOV_CODCAUS); m.set(F_NUMREG, _numreg); m.set(F_DATAREG, datareg.string()); m.set(F_DATADOC, datadoc.string()); m.set(F_NUMDOC, numdoc); m.set(F_REGIVA, regiva); m.set(F_PROTIVA, protiva); m.set(F_CODCAUS, codcaus); m.disable(F_NUMREG); m.disable(F_DATAREG); m.disable(F_DATADOC); m.disable(F_NUMDOC); m.disable(F_REGIVA); m.disable(F_PROTIVA); m.disable(F_CODCAUS); } void TAnn_mov::annulla(TMask& m) { TRectype* rec_rmov,* rec_riva; rec_rmov = new TRectype (LF_RMOV); long numreg = m.get_long(F_NUMREG); _trmov->setkey(1); _trmov->zero(); _trmov->put(RMV_NUMREG, numreg); *rec_rmov = _trmov->curr(); for (_trmov->read(); !_trmov->eof(); _trmov->next()) { if (_trmov->curr() > *rec_rmov) break; long numrec = _trmov->get_int(RMV_ANNOES); numrec += _tras_file.start('Z'); _tras_file.read_rec_trasfer(numrec); //Leggo il record della prima nota _tras_file.put("A","Z1",51,numrec); _tras_file.write(numrec); } delete rec_rmov; rec_riva = new TRectype (LF_RMOVIVA); _tiva->setkey(1); _tiva->zero(); _tiva->put(RMI_NUMREG, numreg); *rec_riva = _tiva->curr(); for (_tiva->read(); !_tiva->eof(); _tiva->next()) { if (_tiva->curr() > *rec_riva) break; long numrec = _tiva->get_int(RMI_ANNOES); numrec += _tras_file.start('U'); _tras_file.read_rec_trasfer(numrec); //Leggo il record della prima nota _tras_file.put("A","U1",51,numrec); _tras_file.write(numrec); } delete rec_riva; } bool TAnn_mov::leggi_trasfer() { _trasf = _tras_file.path(_dittaric); _trasf << "\\trasfer"; _tras_file.open(_trasf); if (_tras_file.exist()) { if (_tras_file.read_control_rec()) _control_rec = _tras_file.record(); else return error_box("Rilevati gravi errori negli archivi:procedura interrotta"); } else return error_box("Al momento non presenti trasferimenti attivi sulla ditta selezionata"); return TRUE; } bool TAnn_mov::codice_registro_hnd(TMask_field& f, KEY k) { TTable reg ("REG"); TString descr,dep; if (k == K_TAB) { TString codreg = f.get(); char cr = codreg[0]; TDate datareg (f.mask().get(F_DATAREG)); int anno = date2esc(datareg); if (isdigit(cr)) dep.format("%04d%03c", anno, cr); else dep.format("%04d%-3c", anno, cr); reg.zero(); reg.put("CODTAB", dep); if (reg.read() == NOERR) { descr = reg.get("S0"); f.mask().set(F_DESCRREG, descr); } } return TRUE; } bool TAnn_mov::codice_causale_hnd(TMask_field& f, KEY k) { TLocalisamfile cau (LF_CAUSALI); TString descr; if (k == K_TAB) { TString codcau = f.get(); cau.setkey(1); cau.zero(); cau.put("CODCAUS", codcau); if (cau.read() == NOERR) { descr = cau.get("DESCR"); f.mask().set(F_DESCRCAU, descr); } } return TRUE; } bool TAnn_mov::esegui_controlli() { TConfig conf(CONFIG_DITTA); _std = conf.get("FlStTra"); if (!prefix().exist(_dittaric)) return error_box("Rilevati GRAVI ERRORI negli archivi: procedura interrotta"); if (!leggi_trasfer()) return FALSE; if (!controlli()) return FALSE; return TRUE; } bool TAnn_mov::controlli() { if (_std == "M") return error_box("Variazione NON POSSIBILE: trasferimento movimenti gia' iniziato"); if (_std == "*") { warning_box("Trasferimento interamente completato: proseguire per cancellare il file"); fremove(_trasf); setta_parametri_record(""," ",FALSE); return FALSE; } return TRUE; } void TAnn_mov::leggi_record_controllo() { _tras_file.read_control_rec(); _control_rec = _tras_file.record(); } void TAnn_mov::setta_parametri_record(const TString& sigla,const TString& flag,bool uselab) { TConfig conf (CONFIG_DITTA); conf.set("FlStTra", flag); if (uselab) { leggi_record_controllo(); _control_rec.overwrite(sigla,240); const int size = 256; _tras_file.write_control_rec(_control_rec, size); } } bool TAnn_mov::menu(MENU_TAG m) { if (m == BAR_ITEM(1)) return set(); return FALSE; }