#include "cglib04.h" #include "cg6804.h" #include "cg6804a.h" HIDDEN TVar_sc& app() { return (TVar_sc &) main_app(); } TVar_sc::TVar_sc() : _control_rec(""), _trasf(""), _std(""), _numpart(""), _tmcf("") { } char TVar_sc::TipoConto(int g, int c) { /* TLocalisamfile pcon (LF_PCON); char tipo = ' '; pcon.setkey(1); pcon.zero(); pcon.put(PCN_GRUPPO, g); pcon.put(PCN_CONTO, c); pcon.put(PCN_SOTTOCONTO, 0l); if (pcon.read() == NOERR) tipo = pcon.get_char(PCN_TMCF); */ TString8 key; key.format("%d|%d", g, c); char tipo = cache().get(LF_PCON, key, PCN_TMCF)[0]; if (tipo < ' ') tipo = ' '; return tipo; } bool TVar_sc::create() { TApplication::create(); _part = new TLocalisamfile (LF_PARTITE); _scad = new TLocalisamfile (LF_SCADENZE); _pagsca = new TLocalisamfile (LF_PAGSCA); _rec_part = new TRectype (LF_PARTITE); _rec_scad = new TRectype (LF_SCADENZE); _rec_pagsca = new TRectype (LF_PAGSCA); _msk = new TMask ("cg6804a"); _mask = new TMask ("cg6804b"); TSheet_field& rp = (TSheet_field&)(_mask->field(F_RIGAPART)); rp.set_notify(a_notify); rp.sheet_mask().set_handler(101, tipocf_handler); rp.sheet_mask().set_handler(104, codcf_handler); rp.sheet_mask().set_handler(108, rifpart_handler); rp.sheet_mask().set_handler(115, datareg_handler); rp.sheet_mask().set_handler(111, codcaus_handler); rp.sheet_mask().set_handler(109, datadoc_handler); rp.sheet_mask().set_handler(110, numdoc_handler); rp.sheet_mask().set_handler(117, contocl_handler); rp.sheet_mask().set_handler(119, tipomov_handler); rp.sheet_mask().set_handler(121, sezione_handler); rp.sheet_mask().set_handler(123, tipopag_handler); rp.sheet_mask().set_handler(122, datapag_handler); rp.sheet_mask().set_handler(124, codval_handler); rp.sheet_mask().set_handler(125, datacam_handler); rp.sheet_mask().set_handler(126, cambio_handler); rp.sheet_mask().set_handler(100, gestione_handler); rp.sheet_mask().set_handler(DLG_OK, registra_dati_comuni); rp.sheet_mask().set_handler(DLG_DELREC, elimina_partita); rp.swap_columns(105,106); rp.swap_columns(105,107); rp.swap_columns(105,108); rp.swap_columns(105,109); rp.swap_columns(105,110); _registrato = FALSE; _aperti = FALSE; dispatch_e_menu (BAR_ITEM(1)); return TRUE; } bool TVar_sc::destroy() { delete _mask; delete _msk; delete _rec_part; delete _rec_scad; delete _rec_pagsca; delete _part; delete _scad; delete _pagsca; // delete _tab_reg; if (_aperti) { delete _tpart; delete _tscad; delete _tpagsca; } return TApplication::destroy(); } void TVar_sc::apri_temp_file() { TString80 tmppart = "%"; tmppart << get_firm_dir(); tmppart << "\\" << TEMP_PART; TString80 tmpscad = "%"; tmpscad << get_firm_dir(); tmpscad << "\\" << TEMP_SCAD; TString80 tmppagsca = "%"; tmppagsca << get_firm_dir(); tmppagsca << "\\" << TEMP_PAGSCA; _tpart = new TIsamtempfile(LF_PARTITE, tmppart, 0); _tscad = new TIsamtempfile(LF_SCADENZE, tmpscad, 0); _tpagsca = new TIsamtempfile(LF_PAGSCA, tmppagsca, 0); _aperti = TRUE; } void TVar_sc::leggi_record_controllo() { _tras_file.read_control_rec(); _control_rec = _tras_file.record(); } bool TVar_sc::main_loop() { _dittaric = get_firm(); if (!esegui_controlli()) return FALSE; apri_temp_file(); if (!video_SC()) { if (_registrato) { setta_parametri_record(" ","C"); leggi_record_controllo(); TString str; str.spaces(60); _control_rec.overwrite(str,241); _tras_file.write_control_rec(_control_rec,1024); } return FALSE; } return FALSE; } bool TVar_sc::a_notify(TSheet_field& s, int r, KEY k) { if (k == K_INS) return FALSE; return TRUE; } bool TVar_sc::gestione_handler(TMask_field& f, KEY k) { if (k == K_SPACE) { TMask& m = f.mask(); if (!m.check_fields()) return FALSE; char tipocf = f.mask().get (101)[0]; int gruppo = f.mask().get_int (102); int conto = f.mask().get_int (103); long sottoc = f.mask().get_long(104); int anno = f.mask().get_int (106); TString npart = f.mask().get (107); int nriga = f.mask().get_int (108); int tipomov = f.mask().get_int (119); if (tipomov == 1) { TMask* msk = new TMask("cg6804d"); KEY k; TSheet_field& rp = (TSheet_field&) msk->field(F_RIGASCAD); rp.set_notify(a_notify); rp.sheet_mask().set_handler(109, nrata_handler); rp.sheet_mask().set_handler(111, codpag_handler); rp.sheet_mask().set_handler(112, tpscad_handler); rp.sheet_mask().set_handler(113, ultclass_handler); rp.sheet_mask().set_handler(110, datascad_handler); rp.sheet_mask().set_handler(120, banca_handler); rp.sheet_mask().set_handler(122, banca_handler); rp.sheet_mask().set_handler(124, datasoll_handler); rp.sheet_mask().set_handler(116, importo_handler); rp.sheet_mask().set_handler(117, impval_handler); rp.sheet_mask().set_handler(DLG_DELREC, elimina_scadenza); rp.swap_columns(105,106); rp.swap_columns(105,107); rp.swap_columns(105,108); rp.swap_columns(105,109); rp.swap_columns(105,110); app().setta_mask_scad(tipocf,gruppo,conto,sottoc,anno,npart,nriga,*msk); k = msk->run(); switch (k) { case K_ESC : break; case K_QUIT : break; case K_SAVE : { app().registra_scadenze(*msk); app()._registrato = TRUE; } break; default: break; } delete msk; } else { TMask* msk = new TMask("cg6804e"); KEY k; TSheet_field& rp = (TSheet_field&) msk->field(F_RIGAPAGSCA); rp.set_notify(a_notify); rp.sheet_mask().set_handler(110, rifpartita_handler); rp.sheet_mask().set_handler(111, accsal_handler); rp.sheet_mask().set_handler(113, importo_handler); rp.sheet_mask().set_handler(120, impvalp_handler); rp.sheet_mask().set_handler(131, passat_handler); rp.sheet_mask().set_handler(127, banca_handler); rp.sheet_mask().set_handler(129, banca_handler); rp.sheet_mask().set_handler(124, contropartita_handler); rp.sheet_mask().set_handler(115, ritenute_handler); rp.sheet_mask().set_handler(116, sezione_abb_handler); rp.sheet_mask().set_handler(117, abbuoni_handler); rp.sheet_mask().set_handler(118, sezione_dc_handler); rp.sheet_mask().set_handler(119, diffcambio_handler); rp.sheet_mask().set_handler(DLG_DELREC, elimina_pagamenti); rp.swap_columns(105,106); rp.swap_columns(105,107); rp.swap_columns(105,108); rp.swap_columns(105,109); rp.swap_columns(105,110); rp.swap_columns(105,111); app().setta_mask_pagsca(tipocf,gruppo,conto,sottoc,anno,npart,nriga,*msk); k = msk->run(); switch (k) { case K_ESC : break; case K_QUIT : break; case K_SAVE : { app().registra_pagamenti(*msk); app()._registrato = TRUE; } break; default: break; } delete msk; } } return TRUE; } char TVar_sc::sezione(char tipo,int gruppo,int conto,long sottoc,int anno,const TString& npart,int nriga,TString& codval,TMask& m) { char sez = '\0'; TSheet_field& part = (TSheet_field&)m.field(F_RIGAPART); for (int i = 0 ; i < part.items(); i++) { TToken_string& row = part.row(i); char tp = row.get (0)[0]; int g = row.get_int (1); int c = row.get_int (2); long s = row.get_long(3); int an = row.get_int (5); TString np = row.get (6); int nr = row.get_int (7); if (tipo == tp && gruppo == g && conto == c && sottoc == s && anno == an && npart == np && nriga == nr) { sez = part.sheet_mask().get(121)[0]; codval = part.sheet_mask().get(124); codval.trim(); break; } } return sez; } void TVar_sc::descr_condpag(const TString& codpag,int tipopag,const TString& ultclass,TString& d_condpag) { if (ultclass.not_empty()) { TTable clr ("%CLR"); TString dep (format("%d%s", tipopag,(const char*) ultclass)); clr.zero(); clr.put("CODTAB", dep); if (clr.read() == NOERR) d_condpag = clr.get("S0"); else d_condpag = ""; } else { TTable rpg ("%RPG"); int tipo; TString dep; for (int i = 0; !rpg.eof(); rpg.next(), i++) { dep.format("%-s%3d", (const char*) codpag, i); rpg.zero(); rpg.put("CODTAB", dep); if (rpg.read() == NOERR) { tipo = rpg.get_int("I1"); if (tipo == tipopag) { switch(tipo) { case 1: d_condpag = TR("Rimessa diretta"); break; case 2: d_condpag = TR("Tratta"); break; case 3: d_condpag = TR("Ricevuta bancaria"); break; case 4: d_condpag = TR("Cessione"); break; case 5: d_condpag = TR("Paghero'"); break; case 6: d_condpag = TR("Lettera di credito"); break; case 7: d_condpag = TR("Tratta accettata"); break; case 8: d_condpag = TR("Rapporti interbancari diretti"); break; case 9: d_condpag = TR("Bonifico"); break; case 10: d_condpag = TR("Altro"); break; default: break; }; break; } } else { d_condpag = ""; break; } } } } void TVar_sc::setta_mask_scad(char tipo,int gruppo,int conto,long sottoc, int anno,const TString& numpart,int nriga,TMask& m) { _tscad->setkey(1); _tscad->zero(); _tscad->put(SCAD_TIPOCF, tipo); if (gruppo != 0) _tscad->put(SCAD_GRUPPO, gruppo); if (conto != 0) _tscad->put(SCAD_CONTO, conto); if (sottoc != 0) _tscad->put(SCAD_SOTTOCONTO, sottoc); if (anno != 0) _tscad->put(SCAD_ANNO, anno); _tscad->put(SCAD_NUMPART, numpart); if (nriga != 0) _tscad->put(SCAD_NRIGA, nriga); TRectype scadenza (_tscad->curr()); TSheet_field& scad = (TSheet_field&)m.field(F_RIGASCAD); const long last_c = _tscad->items(); _tscad->read(_isgteq); for (int i = 0 ; !_tscad->eof(); _tscad->next(), i++) { TString part_rec = scadenza.get(SCAD_NUMPART); TString part_file = _tscad->get(SCAD_NUMPART); if (_tscad->curr() != scadenza || part_rec != part_file) break; TToken_string& row = scad.row(i); TString tipoc (_tscad->get (SCAD_TIPOCF)); int nrata = _tscad->get_int (SCAD_NRATA); TString16 datascad (_tscad->get_date(SCAD_DATASCAD)); TString16 codpag (_tscad->get (SCAD_CODPAG)); int tipopag = _tscad->get_int (SCAD_TIPOPAG); TString ultclass (_tscad->get (SCAD_ULTCLASS)); real importo (_tscad->get_real(SCAD_IMPORTO)); real impval (_tscad->get_real(SCAD_IMPORTOVAL)); TString descr (_tscad->get (SCAD_DESCR)); long nsabi = _tscad->get_long(SCAD_CODABIPR); long nscab = _tscad->get_long(SCAD_CODCABPR); long vsabi = _tscad->get_long(SCAD_CODABI); long vscab = _tscad->get_long(SCAD_CODCAB); TString codag (_tscad->get (SCAD_CODAG)); TString16 datasoll (_tscad->get_date(SCAD_DATASOLL)); int nsoll = _tscad->get_int (SCAD_NSOLL); TString d_conto,d_condpag,codval; codval = ""; char sez = sezione(tipo,gruppo,conto,sottoc,anno,numpart,nriga,codval,*_mask); descr_conto(tipoc,gruppo,conto,sottoc,d_conto); descr_condpag(codpag,tipopag,ultclass,d_condpag); TString16 str; row.add(tipo); str.format("%3d", gruppo); row.add(str); str.format("%3d", conto); row.add(str); str.format("%6ld", sottoc); row.add(str); row.add(d_conto); str.format("%4d", anno); row.add(str); row.add(numpart); str.format("%4d", nriga); row.add(str); str.format("%4d", nrata); row.add(str); row.add(datascad); row.add(codpag); str.format("%d", tipopag); row.add(str); row.add(ultclass); row.add(d_condpag); row.add(sez); row.add(importo.string()); row.add(impval.string()); row.add(descr); str.format("%5ld", nsabi); row.add(str); str.format("%5ld", nscab); row.add(str); str.format("%5ld", vsabi); row.add(str); str.format("%5ld", vscab); row.add(str); row.add(codag); row.add(datasoll); str.format("%2d", nsoll); row.add(str); } } void TVar_sc::setta_mask_pagsca(char tipo,int gruppo,int conto,long sottoc, int anno,const TString& numpart,int nriga,TMask& m) { _tpagsca->setkey(1); _tpagsca->zero(); _tpagsca->put(PAGSCA_TIPOC, tipo); if (gruppo != 0) _tpagsca->put(PAGSCA_GRUPPO, gruppo); if (conto != 0) _tpagsca->put(PAGSCA_CONTO, conto); if (sottoc != 0) _tpagsca->put(PAGSCA_SOTTOCONTO, sottoc); if (anno != 0) _tpagsca->put(PAGSCA_ANNO, anno); _tpagsca->put(PAGSCA_NUMPART, numpart); TRectype pagamenti (_tpagsca->curr()); TSheet_field& pag = (TSheet_field&)m.field(F_RIGAPAGSCA); const long last_c = _tpagsca->items(); _tpagsca->read(_isgteq); for (int i = 0 ; !_tpagsca->eof(); _tpagsca->next(), i++) { TString rec = pagamenti.get(PAGSCA_NUMPART); TString file = _tpagsca->get(PAGSCA_NUMPART); if (_tpagsca->curr() != pagamenti || file != rec) break; int nrigp = _tpagsca->get_int(PAGSCA_NRIGP); int nriga_fatt = _tpagsca->get_int(PAGSCA_NRIGA); if (nriga != nrigp) continue; TToken_string& row = pag.row(i); TString tipoc (_tpagsca->get (PAGSCA_TIPOC)); int nrata = _tpagsca->get_int (PAGSCA_NRATA); TString16 accsal (_tpagsca->get (PAGSCA_ACCSAL)); real importo (_tpagsca->get_real(PAGSCA_IMPORTO)); real ritenute (_tpagsca->get_real(PAGSCA_RITENUTE)); real ritsoc (_tpagsca->get_real(PAGSCA_RITSOC)); real abbuoni (_tpagsca->get_real(PAGSCA_ABBUONI)); real diffcam (_tpagsca->get_real(PAGSCA_DIFFCAM)); real impval (_tpagsca->get_real(PAGSCA_IMPORTOVAL)); TString tipocc (_tpagsca->get (PAGSCA_TIPOCC)); int gruppoc = _tpagsca->get_int (PAGSCA_GRUPPOC); int contoc = _tpagsca->get_int (PAGSCA_CONTOC); long sottocc = _tpagsca->get_long(PAGSCA_SOTTOCONTC); long nsabi = _tpagsca->get_long(PAGSCA_CODABIPR); long nscab = _tpagsca->get_long(PAGSCA_CODCABPR); long vsabi = _tpagsca->get_long(PAGSCA_CODABI); long vscab = _tpagsca->get_long(PAGSCA_CODCAB); TString codag (_tpagsca->get (PAGSCA_CODAG)); char passat = _tpagsca->get_char(PAGSCA_PASSATT); TString d_conto,d_contoc,codval; char sezab = '\0'; char sezdc = '\0'; char sez = sezione(tipo,gruppo,conto,sottoc,anno,numpart,nriga,codval,*_mask); descr_conto(tipoc,gruppo,conto,sottoc,d_conto); descr_conto(tipocc,gruppoc,contoc,sottocc,d_contoc); // Contropartita if (abbuoni != ZERO) { sezab; if (passat == 'A') sezab = 'D'; else if (passat == 'P') sezab = 'A'; if (sezab != sez) abbuoni = abbuoni * -1; } if (diffcam != ZERO) { sezdc = sez; if (diffcam < ZERO) { diffcam = diffcam * -1; if (sez == 'D') sezdc = 'A'; else if (sez == 'A') sezdc = 'D'; } } TString16 str; row.add(tipo); str.format("%3d", gruppo); row.add(str); str.format("%3d", conto); row.add(str); str.format("%6ld", sottoc); row.add(str); row.add(d_conto); str.format("%4d", anno); row.add(str); row.add(numpart); str.format("%4d", nriga_fatt); row.add(str); str.format("%4d", nrata); row.add(str); str.format("%4d", nrigp); row.add(str); row.add(accsal); str.format("%c", sez); row.add(str); row.add(importo.string()); if (ritenute != ZERO) row.add(str); else row.add(""); row.add(ritenute.string()); str.format("%c", sezab); row.add(str); row.add(abbuoni.string()); str.format("%c", sezdc); row.add(str); row.add(diffcam.string()); row.add(impval.string()); row.add(tipocc); str.format("%3d", gruppoc); row.add(str); str.format("%3d", contoc); row.add(str); str.format("%6ld", sottocc); row.add(str); row.add(d_contoc); str.format("%5ld", nsabi); row.add(str); str.format("%5ld", nscab); row.add(str); str.format("%5ld", vsabi); row.add(str); str.format("%5ld", vscab); row.add(str); row.add(codag); str.format("%c", passat); row.add(str); row.add(ritsoc.string()); } } bool TVar_sc::video_SC() { KEY tasto; do { _msk->reset(F_ANNO); _msk->reset(F_NUMPART); _msk->reset(F_NRIGA); tasto = _msk->run(); if (tasto != K_ENTER) return FALSE; _tipocf = _msk->get (F_TIPOCF)[0]; _gruppo = _msk->get_int (F_GRUPPO); _conto = _msk->get_int (F_CONTO); _sottoc = _msk->get_long(F_SOTTOCONTO); _anno = _msk->get_int (F_ANNO); _numpart = _msk->get (F_NUMPART); _nriga = _msk->get_int (F_NRIGA); setta_campi_maschera(*_mask); _mask->force_update(); tasto = _mask->run(); switch (tasto) { case K_ESC : break; case K_QUIT : break; case K_SAVE : { registra_partita(*_mask); _registrato = TRUE; } break; default: break; } } while (tasto != K_QUIT); //K_ENTER return TRUE; } bool TVar_sc::descr_conto(const TString& tipo,int g,int c,long s,TString& d_conto) { if (tipo == "C" || tipo == "F") { TLocalisamfile clifo (LF_CLIFO); clifo.setkey(1); clifo.zero(); clifo.put(CLI_TIPOCF, tipo); clifo.put(CLI_CODCF, s); if (clifo.read() == NOERR) { d_conto = clifo.get(CLI_RAGSOC); return TRUE; } else { d_conto = ""; return FALSE; } } else { TLocalisamfile pcon (LF_PCON); pcon.setkey(1); pcon.zero(); pcon.put(PCN_GRUPPO, g); pcon.put(PCN_CONTO, c); pcon.put(PCN_SOTTOCONTO, s); if (pcon.read() == NOERR) { d_conto = pcon.get(PCN_DESCR); return TRUE; } else { d_conto = ""; return FALSE; } } return TRUE; } bool TVar_sc::descr_caus(const TString& codcaus,TString& d_caus) { TLocalisamfile cau (LF_CAUSALI); cau.setkey(1); cau.zero(); cau.put("CODCAUS", (const char*) codcaus); if (cau.read() == NOERR) { d_caus = cau.get (CAU_DESCR); _dd_caus = cau.get_bool(CAU_DATADOC); _nd_caus = cau.get_bool(CAU_NUMDOC); _tm_caus = cau.get_int (CAU_TIPOMOV); _movval = cau.get_bool(CAU_MOVVAL); return TRUE; } else { d_caus = ""; _dd_caus = FALSE; _nd_caus = FALSE; _tm_caus = 0; _movval = FALSE; return FALSE; } return TRUE; } bool TVar_sc::descr_contocl(int g,int c,TString& d_conto) { TLocalisamfile pcon (LF_PCON); pcon.setkey(1); pcon.zero(); pcon.put(PCN_GRUPPO, g); pcon.put(PCN_CONTO, c); pcon.read(); if ( (g == pcon.get_int(PCN_GRUPPO)) && (c == pcon.get_int(PCN_CONTO)) ) { d_conto = pcon.get(PCN_DESCR); return TRUE; } else { d_conto = ""; return FALSE; } return TRUE; } void TVar_sc::setta_campi_maschera(TMask& m) { if (_gruppo == 0 && _conto == 0 && _sottoc == 0 && _anno == 0 && _numpart.empty() && _nriga == 0) { _tpart->setkey(1); _tpart->zero(); _tpart->first(); } else { _tpart->setkey(1); _tpart->zero(); _tpart->put(PART_TIPOCF, _tipocf); if (_gruppo != 0) _tpart->put(PART_GRUPPO, _gruppo); if (_conto != 0) _tpart->put(PART_CONTO, _conto); if (_sottoc != 0) _tpart->put(PART_SOTTOCONTO, _sottoc); if (_anno != 0) _tpart->put(PART_ANNO, _anno); _tpart->put(PART_NUMPART, _numpart); if (_nriga != 0) _tpart->put(PART_NRIGA, _nriga); TRectype partita (_tpart->curr()); _tpart->read(_isgteq); if (_tpart->curr() != partita) { _tpart->zero(); _tpart->first(); } } TSheet_field& partita = (TSheet_field&)m.field(F_RIGAPART); const long last_c = _tpart->items(); partita.destroy(); for (int i = 0 ; !_tpart->eof(); _tpart->next(), i++) { TToken_string& row = partita.row(i); TString16 tipoc (_tpart->get (PART_TIPOCF)); int gruppo = _tpart->get_int (PART_GRUPPO); int conto = _tpart->get_int (PART_CONTO); long sottoc = _tpart->get_long(PART_SOTTOCONTO); int anno = _tpart->get_int (PART_ANNO); TString16 numpart (_tpart->get (PART_NUMPART)); int nriga = _tpart->get_int (PART_NRIGA); TString16 datareg (_tpart->get_date(PART_DATAREG)); TString16 codcaus (_tpart->get (PART_CODCAUS)); int gruppocl = _tpart->get_int (PART_GRUPPOCL); int contocl = _tpart->get_int (PART_CONTOCL); int tipomov = _tpart->get_int (PART_TIPOMOV); TString descr (_tpart->get (PART_DESCR)); TString16 sezione (_tpart->get (PART_SEZ)); TString16 datapag (_tpart->get_date(PART_DATAPAG)); TString16 codval (_tpart->get (PART_CODVAL)); TString16 datacam (_tpart->get_date(PART_DATACAM)); TString16 numdoc (_tpart->get (PART_NUMDOC)); TString16 datadoc (_tpart->get_date(PART_DATADOC)); int tipopag = _tpart->get_int (PART_TIPOPAG); real cambio (_tpart->get_real(PART_CAMBIO)); long numreg = _tpart->get_long(PART_NREG); int numrig = _tpart->get_int (PART_NUMRIG); TString d_conto,d_caus,d_contocl; descr_conto(tipoc,gruppo,conto,sottoc,d_conto); descr_caus(codcaus,d_caus); descr_contocl(gruppocl,contocl,d_contocl); TString16 str; row.add(tipoc); str.format("%3d", gruppo); row.add(str); str.format("%3d", conto); row.add(str); str.format("%6ld", sottoc); row.add(str); row.add(d_conto); str.format("%4d", anno); row.add(str); row.add(numpart); str.format("%4d", nriga); row.add(str); row.add(datadoc); row.add(numdoc); row.add(codcaus); row.add(d_caus); str.format("%7ld", numreg); row.add(str); str.format("%3d", numrig); row.add(str); row.add(datareg); str.format("%3d", gruppocl); row.add(str); str.format("%3d", contocl); row.add(str); row.add(d_contocl); str.format("%d", tipomov); row.add(str); row.add(descr); row.add(sezione); row.add(datapag); str.format("%d", tipopag); row.add(str); row.add(codval); row.add(datacam); row.add(cambio.string()); row.add(tipoc); str.format("%3d", gruppo); row.add(str); str.format("%3d", conto); row.add(str); str.format("%6ld", sottoc); row.add(str); row.add(d_conto); row.add(tipoc); str.format("%3d", gruppo); row.add(str); str.format("%3d", conto); row.add(str); str.format("%6ld", sottoc); row.add(str); row.add(d_conto); } } bool TVar_sc::tipo_contocl(int g,int c,TString& tipo) { TLocalisamfile pcon (LF_PCON); pcon.setkey(1); pcon.zero(); pcon.put(PCN_GRUPPO, g); pcon.put(PCN_CONTO, c); pcon.read(); if ( (g == pcon.get_int(PCN_GRUPPO)) && (c == pcon.get_int(PCN_CONTO)) ) { tipo = pcon.get(PCN_TMCF); return TRUE; } else { tipo = ""; return FALSE; } return TRUE; } bool TVar_sc::codvaluta(const TString& codval) { TTable val ("%VAL"); TString dep; dep.format("%-3s", (const char*) codval); val.zero(); val.put("CODTAB", dep); if (val.read() == NOERR) return TRUE; else return FALSE; return TRUE; } int TVar_sc::tipo_movimento(char tipo,int gruppo,int conto,long sottoc,int anno,const TString& npart,int nriga,TMask& m) { int tipomov = 0; TSheet_field& part = (TSheet_field&)m.field(F_RIGAPART); for (int i = 0 ; i < part.items(); i++) { TToken_string& row = part.row(i); char tp = row.get (0)[0]; int g = row.get_int (1); int c = row.get_int (2); long s = row.get_long(3); int an = row.get_int (5); TString np = row.get (6); int nr = row.get_int (7); if (tipo == tp && gruppo == g && conto == c && sottoc == s && anno == an && npart == np && nriga == nr) { tipomov = part.sheet_mask().get_int(119); break; } } return tipomov; } // ***************************************** // ***** HANDLER sulla riga di partita ***** // ***************************************** bool TVar_sc::tipocf_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString16 tipocf(f.get()); if (tipocf != "" && tipocf != "C" && tipocf != "F") return f.warning_box(TR("Tipo anagrafica errato")); } return TRUE; } bool TVar_sc::codcf_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString tipocf = f.mask().get (101); int gruppo = f.mask().get_int(102); int conto = f.mask().get_int(103); long sottoc = atol(f.get()); TString desc; if (!app().descr_conto(tipocf,gruppo,conto,sottoc,desc)) return f.warning_box(TR("Codice anagrafica errato")); } return TRUE; } bool TVar_sc::rifpart_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { int anno = f.mask().get_int(106); TString numpart = f.mask().get (107); int nriga = atoi(f.get()); if (anno == 0 || numpart.empty() || nriga == 0) return f.warning_box(TR("Riferimento partita errato")); } return TRUE; } bool TVar_sc::datareg_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { if ( !(TDate::isdate(f.get())) ) return warning_box(TR("Data errata o formato non valido")); } return TRUE; } bool TVar_sc::codcaus_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString appoggio; TString codcaus = f.get(); int tipomov = f.mask().get_int(119); if (codcaus.not_empty()) if (!app().descr_caus(codcaus,appoggio)) return f.warning_box(TR("Valore non valido per codice causale")); long nreg = f.mask().get_long(113); if (nreg != 0 && codcaus.empty()) return f.warning_box(TR("Se e' indicato il numero di operazione la causale deve essere significativa")); if (tipomov == 0) f.mask().set(119,app()._tm_caus); else { if (codcaus.not_empty()) if (tipomov != app()._tm_caus) return f.warning_box(TR("Tipo movimento partita non congruo con tipo movimento indicato sulla causale")); } } return TRUE; } bool TVar_sc::datadoc_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString appoggio; TString codcaus = f.mask().get(111); TString datadoc = f.get(); datadoc.trim(); app().descr_caus(codcaus,appoggio); if (datadoc.empty() && app()._dd_caus) return f.warning_box(TR("Data documento obbligatoria")); } return TRUE; } bool TVar_sc::numdoc_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString appoggio; TString codcaus = f.mask().get(111); TString numdoc = f.get(); app().descr_caus(codcaus,appoggio); if (numdoc.empty() && app()._nd_caus) return f.warning_box(TR("Numero documento obbligatorio")); } return TRUE; } bool TVar_sc::contocl_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString tmcf; int gruppo = f.mask().get_int(116); int conto = atoi(f.get()); if (gruppo == 0 && conto == 0) return TRUE; if (!app().tipo_contocl(gruppo,conto,tmcf)) return f.warning_box(TR("Codice conto non esistente su piano dei conti")); TString tipo = f.mask().get(101); if (tipo != tmcf) return f.warning_box(TR("Tipo conto C/F non congruo con tipo anagrafica")); } return TRUE; } bool TVar_sc::tipomov_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { int tipomov = atoi(f.get()); if (tipomov != 1 && tipomov != 2 && tipomov != 3 && tipomov != 5 && tipomov != 6) return f.warning_box(TR("Tipo movimento errato")); TString codcaus = f.mask().get(111); if (codcaus.not_empty()) { TString appoggio; app().descr_caus(codcaus,appoggio); if (tipomov != app()._tm_caus) return f.warning_box("Tipo movimento partita non congruo con tipo movimento indicato sulla causale"); } } return TRUE; } bool TVar_sc::sezione_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString sezione = f.get(); if (sezione != "D" && sezione != "A") return f.warning_box(TR("Sezione dare/avere errata")); } return TRUE; } bool TVar_sc::tipopag_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { int tipomov = f.mask().get_int(119); int tipopag = atoi(f.get()); if (tipomov == 1 && tipopag != 0) return f.warning_box(TR("In caso di fattura non e' possibile indicare il tipo pagamento")); if (tipomov != 1 && tipomov != 2) if (tipopag < 1 || tipopag > 9) return f.warning_box(TR("Tipo pagamento errato")); } return TRUE; } bool TVar_sc::datapag_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { int tipomov = f.mask().get_int(119); TString datapag (f.get()); datapag.trim(); if (tipomov == 1 && datapag.not_empty()) return f.warning_box(TR("In caso di fattura non e' possibile indicare la data del pagamento")); if (tipomov != 1) if (datapag.empty() || !(TDate::isdate(datapag))) return f.warning_box(TR("Se il movimento non e' una fattura la data di pagamento deve essere indicata")); } return TRUE; } bool TVar_sc::codval_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString codval (f.get()); if (codval.not_empty()) { if (!app().codvaluta(codval)) return f.warning_box(TR("Codice valuta non presente in tabella")); TConfig conf (CONFIG_DITTA); TString valuta = conf.get("GesVal"); if (codval.not_empty() && valuta.empty()) return f.warning_box(TR("Non e' possibile indicare il codice valuta se non indicata la gestione valuta sui parametri ditta")); if (codval.empty() && valuta.not_empty()) return f.warning_box(TR("Il codice valuta deve essere indicato in quanto indicata la gestione in valuta sui parametri ditta")); TString codcaus (f.mask().get(111)); if (codcaus.not_empty()) { TString appoggio; if (app().descr_caus(codcaus,appoggio)) { if (app()._movval && codval.empty()) return f.warning_box(TR("Il codice valuta deve essere indicato in quanto indicata la gestione in valuta sulla causale")); if (!app()._movval && codval.not_empty()) return f.warning_box(TR("Non e' possibile indicare il codice in valuta se non indicato il flag gestione valuta sulla causale")); } } } else { TDate datacam (f.mask().get_date(125)); real cambio (f.mask().get_real(126)); if (datacam.ok()) return f.warning_box(TR("Non e' possibile indicare la data cambio se non e' indicato il codice valuta")); if (cambio != ZERO) return f.warning_box(TR("Non e' possibile indicare il cambio se non e' indicato il codice valuta")); } } return TRUE; } bool TVar_sc::datacam_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString codval (f.mask().get(124)); TString datacam (f.get()); datacam.trim(); if (codval.not_empty()) if (datacam.empty() || !(TDate::isdate(datacam))) return f.warning_box(TR("Se il codice valuta e' indicato la data cambio deve essere significativa")); } return TRUE; } bool TVar_sc::cambio_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString codval (f.mask().get(124)); real cambio (f.get()); if (codval.not_empty()) if (cambio == ZERO) return f.warning_box(TR("Se il codice valuta e' indicato il cambio deve essere significativo")); } return TRUE; } // ****************************************** // ***** HANDLER sulla riga di scadenza ***** // ****************************************** bool TVar_sc::nrata_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { int nrata = atoi(f.get()); if (nrata == 0) return f.warning_box(TR("Il numero di rata deve essere significativo")); } return TRUE; } bool TVar_sc::codpag_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) ) { TString descr; TString codpag = f.get(); if (codpag.not_empty()) { if (f.mask().is_running()) { TTable cpg ("%CPG"); TString dep (format("%-4s", (const char*) codpag)); cpg.zero(); cpg.put("CODTAB", dep); if (cpg.read() != NOERR) return f.warning_box(TR("Codice di pagamento errato o non presente in tabella")); } TTable rpg ("%RPG"); int tipo; int tipopag = f.mask().get_int(112); TString dep; for (int i = 0; !rpg.eof(); rpg.next(), i++) { dep.format("%-s%3d", (const char*) codpag, i); rpg.zero(); rpg.put("CODTAB", dep); if (rpg.read() == NOERR) { tipo = rpg.get_int("I1"); if (tipo == tipopag) { switch(tipo) { case 1: descr = TR("Rimessa diretta"); break; case 2: descr = TR("Tratta"); break; case 3: descr = TR("Ricevuta bancaria"); break; case 4: descr = TR("Cessione"); break; case 5: descr = TR("Paghero'"); break; case 6: descr = TR("Lettera di credito"); break; case 7: descr = TR("Tratta accettata"); break; case 8: descr = TR("Rapporti interbancari diretti"); break; case 9: descr = TR("Bonifico"); break; case 10: descr = TR("Altro"); break; default: break; }; break; } } else { descr = ""; break; } } if (f.mask().is_running()) { if (tipopag != 0) { if (tipopag != tipo) return f.warning_box(TR("Il tipo pagamento della scadenza non e' congruo con il tipo pagamento del codice di pagamento")); } else f.mask().set(112,tipo); } } TString ultclass = f.mask().get(113); if (ultclass.empty()) f.mask().set(114, descr); } return TRUE; } bool TVar_sc::tpscad_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString codpag = f.mask().get(111); if (codpag.empty()) return TRUE; int tipopag = atoi(f.get()); if (tipopag < 1 || tipopag > 9) return f.warning_box(TR("Tipo pagamento errato")); TTable cpg ("%CPG"); TString dep (format("%-4s", (const char*) codpag)); int tipo = 0; cpg.zero(); cpg.put("CODTAB", dep); if (cpg.read() == NOERR) tipo = atoi(cpg.get("S4")); if (tipopag != tipo) return f.warning_box(TR("Il tipo pagamento della scadenza non e' congruo con il tipo pagamento del codice di pagamento")); } return TRUE; } bool TVar_sc::ultclass_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString descr; TString ultclass = f.get(); int tipopag = f.mask().get_int(112); if (ultclass.empty()) { TTable rpg ("%RPG"); int tipo; TString codpag = f.mask().get(111); int tipopag = f.mask().get_int(112); TString dep; for (int i = 0; !rpg.eof(); rpg.next(), i++) { dep.format("%-s%3d", (const char*) codpag, i); rpg.zero(); rpg.put("CODTAB", dep); if (rpg.read() == NOERR) { tipo = rpg.get_int("I1"); if (tipo == tipopag) { switch(tipo) { case 1: descr = TR("Rimessa diretta"); break; case 2: descr = TR("Tratta"); break; case 3: descr = TR("Ricevuta bancaria"); break; case 4: descr = TR("Cessione"); break; case 5: descr = TR("Paghero'"); break; case 6: descr = TR("Lettera di credito"); break; case 7: descr = TR("Tratta accettata"); break; case 8: descr = TR("Rapporti interbancari diretti"); break; case 9: descr = TR("Bonifico"); break; case 10: descr = TR("Altro"); break; default: break; }; break; } } else { descr = ""; break; } } f.mask().set(114, descr); return TRUE; } TTable clr ("%CLR"); TString dep (format("%d%s", tipopag,(const char*) ultclass)); clr.zero(); clr.put("CODTAB", dep); if (clr.read() == NOERR) descr = clr.get("S0"); else return f.warning_box(TR("Ulteriore classificazione errata o non presente in tabella")); f.mask().set(114, descr); } return TRUE; } bool TVar_sc::datascad_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString datascad (f.get()); datascad.trim(); if (datascad.empty() || !(TDate::isdate(datascad))) return f.warning_box(TR("Data scadenza errata")); } return TRUE; } bool TVar_sc::banca_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString mess; long abi; long cab = atol(f.get()); int id = f.dlg(); if (id == 120) { abi = f.mask().get_long(119); mess = TR("Codice nostra banca errato o non presente in tabella"); } else if (id == 122) { abi = f.mask().get_long(121); mess = TR("Codice vostra banca errato o non presente in tabella"); } else if (id == 127) { abi = f.mask().get_long(126); mess = TR("Codice nostra banca errato o non presente in tabella"); } else if (id == 129) { abi = f.mask().get_long(128); mess = TR("Codice vostra banca errato o non presente in tabella"); } if (abi == 0 && cab == 0) return TRUE; TTable ban ("%BAN"); TString dep; if (abi != 0 && cab != 0) dep.format("%05ld%05ld", abi,cab); if (abi != 0 && cab == 0) dep.format("%05ld", abi); ban.zero(); ban.put("CODTAB", dep); if (ban.read() != NOERR) return f.warning_box("%s", (const char*) mess); } return TRUE; } bool TVar_sc::datasoll_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString datasoll (f.get()); datasoll.trim(); if (datasoll.empty()) return TRUE; if (!(TDate::isdate(datasoll))) return f.warning_box(TR("Data sollecito errata")); } return TRUE; } bool TVar_sc::importo_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { real importo (f.get()); if (importo == ZERO) return f.warning_box(TR("L'importo del pagamento deve essere significativo")); } return TRUE; } bool TVar_sc::impval_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString codval; real importo (f.get()); char tipo = f.mask().get (101)[0]; int g = f.mask().get_int (102); int c = f.mask().get_int (103); long s = f.mask().get_long(104); int anno = f.mask().get_int (106); TString npart = f.mask().get (107); int nriga = f.mask().get_int (108); app().sezione(tipo,g,c,s,anno,npart,nriga,codval,*(app()._mask)); if (codval.empty() && importo != ZERO) return f.warning_box(TR("L'importo in valuta della scadenza non puo' essere indicato se non indicato il codice valuta")); if (codval.not_empty() && importo == ZERO) return f.warning_box(TR("L'importo in valuta della scadenza deve essere significativo")); } return TRUE; } // ******************************************* // ***** HANDLER sulla riga di pagamento ***** // ******************************************* bool TVar_sc::record_partite(char tipo,int g,int c,long s,int anno,TString& npart,int nriga) { TRecnotype nrec = _tpart->recno(); TIsamtempfile& part = *_tpart; part.zero(); part.put(PART_TIPOCF, tipo); part.put(PART_GRUPPO, g); part.put(PART_CONTO, c); part.put(PART_SOTTOCONTO, s); part.put(PART_ANNO, anno); part.put(PART_NUMPART, npart); part.put(PART_NRIGA, nriga); if (part.read() == NOERR) { _tpart->readat(nrec); return TRUE; } _tpart->readat(nrec); return FALSE; } bool TVar_sc::record_scadenze(char tipo,int g,int c,long s,int anno,TString& npart,int nriga,int nrata) { TRecnotype nrec = _tscad->recno(); TIsamtempfile& scad = *_tscad; scad.zero(); scad.put(SCAD_TIPOCF, tipo); scad.put(SCAD_GRUPPO, g); scad.put(SCAD_CONTO, c); scad.put(SCAD_SOTTOCONTO, s); scad.put(SCAD_ANNO, anno); scad.put(SCAD_NUMPART, npart); scad.put(SCAD_NRIGA, nriga); scad.put(SCAD_NRATA, nrata); if (scad.read() == NOERR) { _tscad->readat(nrec); return TRUE; } _tscad->readat(nrec); return FALSE; } bool TVar_sc::rifpartita_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { int nriga = f.mask().get_int(108); int nrata = f.mask().get_int(109); if (nriga == 9999 || nrata == 9999) return TRUE; char t = f.mask().get (101)[0]; int g = f.mask().get_int (102); int c = f.mask().get_int (103); long s = f.mask().get_long(104); int anno = f.mask().get_int (106); TString npart = f.mask().get (107); if (!app().record_partite(t,g,c,s,anno,npart,nriga)) return f.warning_box(TR("Non esiste la riga partita corrispondente")); if (!app().record_scadenze(t,g,c,s,anno,npart,nriga,nrata)) return f.warning_box(TR("Non esiste la rata di scadenza corrispondente")); } return TRUE; } bool TVar_sc::accsal_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString accsal = f.get(); char t = f.mask().get (101)[0]; int g = f.mask().get_int (102); int c = f.mask().get_int (103); long s = f.mask().get_long(104); int anno = f.mask().get_int (106); TString npart = f.mask().get (107); int nriga = f.mask().get_int (110); int tipo = app().tipo_movimento(t,g,c,s,anno,npart,nriga,*(app()._mask)); if ( (tipo == 2 || tipo == 5) && accsal == "S") return f.warning_box(TR("Il flag in acconto / a saldo non puo' essere indicato in caso di Nota credito e Insoluto")); if (accsal != "S" && accsal != "A") return f.warning_box(TR("Flag in acconto / a saldo errato")); } return TRUE; } bool TVar_sc::passat_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { real abbuoni (f.mask().get_real(117)); TString passat = f.get(); if (abbuoni != ZERO) if (passat != "P" && passat != "A") return f.warning_box(TR("Flag attivo / passivo errato")); } return TRUE; } bool TVar_sc::impvalp_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString codval; real importo (f.get()); char tipo = f.mask().get (101)[0]; int g = f.mask().get_int (102); int c = f.mask().get_int (103); long s = f.mask().get_long(104); int anno = f.mask().get_int (106); TString npart = f.mask().get (107); int nriga = f.mask().get_int (110); app().sezione(tipo,g,c,s,anno,npart,nriga,codval,*(app()._mask)); if (codval.empty() && importo != ZERO) return f.warning_box(TR("L'importo in valuta del pagamento non puo' essere indicato se non indicato il codice valuta")); if (codval.not_empty() && importo == ZERO) return f.warning_box(TR("L'importo in valuta del pagamento deve essere significativo")); } return TRUE; } bool TVar_sc::sezione_abb_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString sez (f.get()); real abbuoni (f.mask().get(117)); if (sez != "D" && sez != "A" && sez != "") return f.warning_box(TR("Valore non valido per sezione")); if (abbuoni != ZERO && sez.empty()) return f.warning_box(TR("Se gli abbuoni sono significativi la sezione deve essere indicata")); if (sez == "D") f.mask().set(131,"A"); else if (sez == "A") f.mask().set(131,"P"); else f.mask().set(131,""); } return TRUE; } bool TVar_sc::ritenute_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString codval; char tipo = f.mask().get (101)[0]; int g = f.mask().get_int (102); int c = f.mask().get_int (103); long s = f.mask().get_long(104); int anno = f.mask().get_int (106); TString npart = f.mask().get (107); int nriga = f.mask().get_int (110); real ritenute (f.get()); int tipomov = app().tipo_movimento(tipo,g,c,s,anno,npart,nriga,*(app()._mask)); if ( (tipomov == 2 || tipomov == 5) && ritenute != ZERO) return f.warning_box(TR("La ritenuta non puo' essere indicata in caso di Nota credito e Insoluto")); char sez = app().sezione(tipo,g,c,s,anno,npart,nriga,codval,*(app()._mask)); TString str (format("%c", sez)); if (ritenute != ZERO) f.mask().set(114,str); else f.mask().set(114,""); } return TRUE; } bool TVar_sc::abbuoni_handler(TMask_field& f, KEY k) { if (k == K_TAB) { TString codval; char tipo = f.mask().get (101)[0]; int g = f.mask().get_int (102); int c = f.mask().get_int (103); long s = f.mask().get_long(104); int anno = f.mask().get_int (106); TString npart = f.mask().get (107); int nriga = f.mask().get_int (110); app().sezione(tipo,g,c,s,anno,npart,nriga,codval,*(app()._mask)); if (codval.not_empty()) ((TReal_field&)f).set_decimals(3); else ((TReal_field&)f).set_decimals(0); } if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString accsal (f.mask().get(111)); real abbuoni (f.get()); if (accsal == "A" && abbuoni != ZERO) return f.warning_box(TR("Gli abbuoni possono essere indicati solo se a SALDO")); } return TRUE; } bool TVar_sc::sezione_dc_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString sez (f.get()); real diffcam (f.mask().get(119)); if (sez != "D" && sez != "A" && sez != "") return f.warning_box(TR("Valore non valido per sezione")); if (diffcam != ZERO && sez.empty()) return f.warning_box(TR("Se la differenza cambio e' significativa la sezione deve essere indicata")); } return TRUE; } bool TVar_sc::diffcambio_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { TString codval; char tipo = f.mask().get (101)[0]; int g = f.mask().get_int (102); int c = f.mask().get_int (103); long s = f.mask().get_long(104); int anno = f.mask().get_int (106); TString npart = f.mask().get (107); int nriga = f.mask().get_int (110); app().sezione(tipo,g,c,s,anno,npart,nriga,codval,*(app()._mask)); TString accsal (f.mask().get(111)); real diffcam (f.get()); if (accsal == "A" && diffcam != ZERO) return f.warning_box(TR("La differenza cambio puo' essere indicata solo se a SALDO")); if (codval.empty() && diffcam != ZERO) return f.warning_box(TR("La differenza cambio puo' essere indicata solo in caso di valuta")); } return TRUE; } bool TVar_sc::contropartita_handler(TMask_field& f, KEY k) { if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) { char tipo = f.mask().get (101)[0]; int g = f.mask().get_int (102); int c = f.mask().get_int (103); long s = f.mask().get_long(104); int anno = f.mask().get_int (106); TString npart = f.mask().get (107); int nriga = f.mask().get_int (110); TString tipocf = f.mask().get(121); if (tipocf == "C" || tipocf == "F") { long codcf = f.mask().get_long(124); if (codcf == 0) return TRUE; TLocalisamfile clifo (LF_CLIFO); clifo.setkey(1); clifo.zero(); clifo.put(CLI_TIPOCF, tipocf); clifo.put(CLI_CODCF, codcf); if (clifo.read() != NOERR) return f.warning_box(TR("Codice di contropartita errato o non presente in anagrafica clienti/fornitori")); } else { int gruppo = f.mask().get_int (122); int conto = f.mask().get_int (123); long sottoc = f.mask().get_long(124); if (gruppo == 0 && conto == 0 && sottoc == 0) return TRUE; TLocalisamfile pcon (LF_PCON); pcon.setkey(1); pcon.zero(); pcon.put(PCN_GRUPPO, gruppo); pcon.put(PCN_CONTO, conto); pcon.put(PCN_SOTTOCONTO, sottoc); if (pcon.read() != NOERR) return f.warning_box(TR("Codice contropartita errato o non presente in piano conti")); } } return TRUE; } bool TVar_sc::registra_dati_comuni(TMask_field& f, KEY k) { if (k == K_ENTER && f.mask().is_running()) { long nreg = f.mask().get_long(113); int nrig = f.mask().get_int (114); if (nreg != 0 && nrig != 0) { TDate datareg (f.mask().get_date(115)); TString numdoc (f.mask().get (110)); TDate datadoc (f.mask().get_date(109)); TString codcaus (f.mask().get (111)); TSheet_field& part = (TSheet_field&)app()._mask->field(F_RIGAPART); for (int i = 0; i < part.items(); i++) { TToken_string& row = part.row(i); long numreg = row.get_long(12); int numrig = row.get_int (13); if (nreg != numreg || nrig != numrig) continue; TString d_caus; app().descr_caus(codcaus,d_caus); row.add(datadoc,8); row.add(numdoc,9); row.add(codcaus,10); row.add(d_caus,11); row.add(datareg,14); } part.force_update(); } } return TRUE; } bool TVar_sc::cancella_partita(TMask_field& f) { TIsamtempfile& part = *_tpart; char tipo = f.mask().get (101)[0]; int gruppo = f.mask().get_int (102); int conto = f.mask().get_int (103); long sottoc = f.mask().get_long(104); int anno = f.mask().get_int (106); TString numpart = f.mask().get (107); int nriga = f.mask().get_int (108); int tipomov = f.mask().get_int (119); if (!controlla_abbuoni_diffcam(tipo,gruppo,conto,sottoc,anno,numpart,nriga,0)) return f.message_box(TR("Impossibile eliminare questa partita in quanto esistono uno o piu' pagamenti riferiti ad essa contenenti abbuoni o differenze cambio")); part.setkey(1); part.zero(); part.put(PART_TIPOCF, tipo); part.put(PART_GRUPPO, gruppo); part.put(PART_CONTO, conto); part.put(PART_SOTTOCONTO, sottoc); part.put(PART_ANNO, anno); part.put(PART_NUMPART, numpart); part.put(PART_NRIGA, nriga); if (part.read() == NOERR) { part.remove(); if (tipomov == 1) { TIsamtempfile& scad = *_tscad; scad.setkey(1); scad.zero(); scad.put(SCAD_TIPOCF, tipo); scad.put(SCAD_GRUPPO, gruppo); scad.put(SCAD_CONTO, conto); scad.put(SCAD_SOTTOCONTO, sottoc); scad.put(SCAD_ANNO, anno); scad.put(SCAD_NUMPART, numpart); scad.put(SCAD_NRIGA, nriga); TRectype scadenza (scad.curr()); for (scad.read(_isgteq); !scad.eof(); scad.next()) { TString rec = scadenza.get(SCAD_NUMPART); TString file = scad.get(SCAD_NUMPART); if (scad.curr() != scadenza || file != rec) break; int nrata = scad.get_int (SCAD_NRATA); scad.remove(); sgancia_pagamenti(tipo,gruppo,conto,sottoc,anno,numpart,nriga,nrata); } } else if (tipomov != 1) { TIsamtempfile& pagsca = *_tpagsca; pagsca.setkey(1); pagsca.zero(); pagsca.put(PAGSCA_TIPOC, tipo); pagsca.put(PAGSCA_GRUPPO, gruppo); pagsca.put(PAGSCA_CONTO, conto); pagsca.put(PAGSCA_SOTTOCONTO, sottoc); pagsca.put(PAGSCA_ANNO, anno); pagsca.put(PAGSCA_NUMPART, numpart); TRectype pagamenti (pagsca.curr()); for (pagsca.read(_isgteq); !pagsca.eof(); pagsca.next()) { TString rec = pagamenti.get(PAGSCA_NUMPART); TString file = pagsca.get(PAGSCA_NUMPART); if (pagsca.curr() != pagamenti || file != rec) break; int nrigp = pagsca.get_int (PAGSCA_NRIGP); if (nriga != nrigp) continue; pagsca.remove(); } } } else return f.warning_box(TR("Non esiste la riga di partita richiesta sull'archivio delle partite")); return TRUE; } bool TVar_sc::controlla_abbuoni_diffcam(char tipo,int g,int c,long s,int anno,TString& npart,int nriga,int nrata) { TIsamtempfile& pagsca = *_tpagsca; pagsca.setkey(1); pagsca.zero(); pagsca.put(PAGSCA_TIPOC, tipo); pagsca.put(PAGSCA_GRUPPO, g); pagsca.put(PAGSCA_CONTO, c); pagsca.put(PAGSCA_SOTTOCONTO, s); pagsca.put(PAGSCA_ANNO, anno); pagsca.put(PAGSCA_NUMPART, npart); pagsca.put(PAGSCA_NRIGA, nriga); if (nrata != 0) pagsca.put(PAGSCA_NRATA, nrata); TRectype pagamenti (pagsca.curr()); for (pagsca.read(_isgteq); !pagsca.eof(); pagsca.next()) { TString rec = pagamenti.get(PAGSCA_NUMPART); TString file = pagsca.get(PAGSCA_NUMPART); if (pagsca.curr() != pagamenti || file != rec) break; real abbuoni = pagsca.get_real(PAGSCA_ABBUONI); real diffcam = pagsca.get_real(PAGSCA_DIFFCAM); if (abbuoni != ZERO || diffcam != ZERO) return FALSE; } return TRUE; } bool TVar_sc::elimina_partita(TMask_field& f, KEY k) { if (k == K_SPACE && f.mask().is_running()) if (!app().cancella_partita(f)) return FALSE; return TRUE; } void TVar_sc::sgancia_pagamenti(char tipo,int g,int c,long s,int anno,TString& npart,int nriga,int nrata) { TIsamtempfile& pagsca = *_tpagsca; pagsca.setkey(1); pagsca.zero(); pagsca.put(PAGSCA_TIPOC, tipo); pagsca.put(PAGSCA_GRUPPO, g); pagsca.put(PAGSCA_CONTO, c); pagsca.put(PAGSCA_SOTTOCONTO, s); pagsca.put(PAGSCA_ANNO, anno); pagsca.put(PAGSCA_NUMPART, npart); pagsca.put(PAGSCA_NRIGA, nriga); pagsca.put(PAGSCA_NRATA, nrata); TRectype pagamenti (pagsca.curr()); for (pagsca.read(_isgteq); !pagsca.eof(); pagsca.next()) { TString rec = pagamenti.get(PAGSCA_NUMPART); TString file = pagsca.get(PAGSCA_NUMPART); if (pagsca.curr() != pagamenti || file != rec) break; TRectype pag (pagsca.curr()); pag.put(PAGSCA_NRIGA, 9999); pag.put(PAGSCA_NRATA, 9999); TRecnotype nrec = pagsca.recno(); pagsca.remove(); pagsca.curr() = pag; if (pagsca.read() == NOERR) { real importo = pagsca.get_real(PAGSCA_IMPORTO) + pag.get_real(PAGSCA_IMPORTO); real impval = pagsca.get_real(PAGSCA_IMPORTOVAL) + pag.get_real(PAGSCA_IMPORTOVAL); real ritenute = pagsca.get_real(PAGSCA_RITENUTE) + pag.get_real(PAGSCA_RITENUTE); real ritsoc = pagsca.get_real(PAGSCA_RITSOC) + pag.get_real(PAGSCA_RITSOC); pagsca.put(PAGSCA_IMPORTO, importo); pagsca.put(PAGSCA_IMPORTOVAL, impval); pagsca.put(PAGSCA_RITENUTE, ritenute); pagsca.put(PAGSCA_RITSOC, ritsoc); pagsca.put(PAGSCA_ACCSAL, "A"); pagsca.rewrite(); } else { pagsca.curr() = pag; pagsca.write(); } pagsca.readat(nrec); } } bool TVar_sc::elimina_scadenza(TMask_field& f, KEY k) { if (k == K_SPACE && f.mask().is_running()) if (!app().cancella_scadenza(f)) return FALSE; return TRUE; } bool TVar_sc::cancella_scadenza(TMask_field& f) { TIsamtempfile& scad = *_tscad; char tipo = f.mask().get (101)[0]; int gruppo = f.mask().get_int (102); int conto = f.mask().get_int (103); long sottoc = f.mask().get_long(104); int anno = f.mask().get_int (106); TString numpart = f.mask().get (107); int nriga = f.mask().get_int (108); int nrata = f.mask().get_int (109); if (!controlla_abbuoni_diffcam(tipo,gruppo,conto,sottoc,anno,numpart,nriga,nrata)) return f.message_box(TR("Impossibile eliminare questa scadenza in quanto esistono uno o piu' pagamenti riferiti ad essa contenenti abbuoni o differenze cambio")); scad.setkey(1); scad.zero(); scad.put(SCAD_TIPOCF, tipo); scad.put(SCAD_GRUPPO, gruppo); scad.put(SCAD_CONTO, conto); scad.put(SCAD_SOTTOCONTO, sottoc); scad.put(SCAD_ANNO, anno); scad.put(SCAD_NUMPART, numpart); scad.put(SCAD_NRIGA, nriga); scad.put(SCAD_NRATA, nrata); if (scad.read() == NOERR) { scad.remove(); sgancia_pagamenti(tipo,gruppo,conto,sottoc,anno,numpart,nriga,nrata); } else return f.warning_box(TR("Non esiste la scadenza richiesta sull'archivio delle scadenze")); return TRUE; } bool TVar_sc::elimina_pagamenti(TMask_field& f, KEY k) { if (k == K_SPACE && f.mask().is_running()) if (!app().cancella_pagamenti(f)) return FALSE; return TRUE; } bool TVar_sc::cancella_pagamenti(TMask_field& f) { TIsamtempfile& pagsca = *_tpagsca; char tipo = f.mask().get (101)[0]; int gruppo = f.mask().get_int (102); int conto = f.mask().get_int (103); long sottoc = f.mask().get_long(104); int anno = f.mask().get_int (106); TString numpart = f.mask().get (107); int nriga = f.mask().get_int (108); int nrata = f.mask().get_int (109); int nrigp = f.mask().get_int (110); pagsca.setkey(1); pagsca.zero(); pagsca.put(PAGSCA_TIPOC, tipo); pagsca.put(PAGSCA_GRUPPO, gruppo); pagsca.put(PAGSCA_CONTO, conto); pagsca.put(PAGSCA_SOTTOCONTO, sottoc); pagsca.put(PAGSCA_ANNO, anno); pagsca.put(PAGSCA_NUMPART, numpart); pagsca.put(PAGSCA_NRIGA, nriga); pagsca.put(PAGSCA_NRATA, nrata); pagsca.put(PAGSCA_NRIGP, nrigp); if (pagsca.read() == NOERR) { pagsca.remove(); } else return f.warning_box(TR("Non esiste il pagamento richiesto sull'archivio dei pagamenti")); return TRUE; } void TVar_sc::registra_partita(TMask& m) { TSheet_field& part = (TSheet_field&)m.field(F_RIGAPART); for (int i = 0 ; i < part.items(); i++) { TToken_string& row = part.row(i); char tipo = row.get (0)[0]; int gruppo = row.get_int (1); int conto = row.get_int (2); long sottoc = row.get_long(3); int anno = row.get_int (5); TString numpart = row.get (6); int nriga = row.get_int (7); TDate datadoc (row.get (8)); TString numdoc = row.get (9); TString codcaus = row.get (10); long nreg = row.get_long(12); int nrig = row.get_int (13); TDate datareg (row.get (14)); int gruppocl = row.get_int (15); int contocl = row.get_int (16); int tipomov = row.get_int (18); TString descr = row.get (19); char sez = row.get (20)[0]; TDate datapag (row.get (21)); int tipopag = row.get_int (22); TString codval (row.get (23)); TDate datacam (row.get (24)); real cambio (row.get (25)); _tpart->setkey(1); _tpart->zero(); _tpart->put(PART_TIPOCF, tipo); _tpart->put(PART_GRUPPO, gruppo); _tpart->put(PART_CONTO, conto); _tpart->put(PART_SOTTOCONTO, sottoc); _tpart->put(PART_ANNO, anno); _tpart->put(PART_NUMPART, numpart); _tpart->put(PART_NRIGA, nriga); if (_tpart->read() == NOERR) { _tpart->put(PART_TIPOCF, tipo); _tpart->put(PART_GRUPPO, gruppo); _tpart->put(PART_CONTO, conto); _tpart->put(PART_SOTTOCONTO, sottoc); _tpart->put(PART_ANNO, anno); _tpart->put(PART_NUMPART, numpart); _tpart->put(PART_NRIGA, nriga); _tpart->put(PART_DATADOC, datadoc); _tpart->put(PART_NUMDOC, numdoc); _tpart->put(PART_CODCAUS, codcaus); _tpart->put(PART_NREG, nreg); _tpart->put(PART_NUMRIG, nrig); _tpart->put(PART_DATAREG, datareg); _tpart->put(PART_GRUPPOCL, gruppocl); _tpart->put(PART_CONTOCL, contocl); _tpart->put(PART_TIPOMOV, tipomov); _tpart->put(PART_DESCR, descr); _tpart->put(PART_SEZ, sez); _tpart->put(PART_DATAPAG, datapag); _tpart->put(PART_TIPOPAG, tipopag); _tpart->put(PART_CODVAL, codval); _tpart->put(PART_DATACAM, datacam); _tpart->put(PART_CAMBIO, cambio); _tpart->rewrite(); } else { _tpart->put(PART_TIPOCF, tipo); _tpart->put(PART_GRUPPO, gruppo); _tpart->put(PART_CONTO, conto); _tpart->put(PART_SOTTOCONTO, sottoc); _tpart->put(PART_ANNO, anno); _tpart->put(PART_NUMPART, numpart); _tpart->put(PART_NRIGA, nriga); _tpart->put(PART_DATADOC, datadoc); _tpart->put(PART_NUMDOC, numdoc); _tpart->put(PART_CODCAUS, codcaus); _tpart->put(PART_NREG, nreg); _tpart->put(PART_NUMRIG, nrig); _tpart->put(PART_DATAREG, datareg); _tpart->put(PART_GRUPPOCL, gruppocl); _tpart->put(PART_CONTOCL, contocl); _tpart->put(PART_TIPOMOV, tipomov); _tpart->put(PART_DESCR, descr); _tpart->put(PART_SEZ, sez); _tpart->put(PART_DATAPAG, datapag); _tpart->put(PART_TIPOPAG, tipopag); _tpart->put(PART_CODVAL, codval); _tpart->put(PART_DATACAM, datacam); _tpart->put(PART_CAMBIO, cambio); _tpart->write(); } } } void TVar_sc::registra_scadenze(TMask& m) { TSheet_field& scad = (TSheet_field&)m.field(F_RIGASCAD); for (int i = 0 ; i < scad.items(); i++) { TToken_string& row = scad.row(i); char tipo = row.get (0)[0]; int gruppo = row.get_int (1); int conto = row.get_int (2); long sottoc = row.get_long(3); int anno = row.get_int (5); TString numpart = row.get (6); int nriga = row.get_int (7); int nrata = row.get_int (8); TDate datascad (row.get (9)); TString codpag = row.get (10); int tipopag = row.get_int (11); TString ultclass = row.get (12); real importo (row.get (15)); real impval (row.get (16)); TString descr = row.get (17); long nsabi = row.get_long(19); long nscab = row.get_long(19); long vsabi = row.get_long(20); long vscab = row.get_long(21); TString codag = row.get (22); TDate datasoll (row.get (23)); int nsoll = row.get_int (24); _tscad->setkey(1); _tscad->zero(); _tscad->put(SCAD_TIPOCF, tipo); _tscad->put(SCAD_GRUPPO, gruppo); _tscad->put(SCAD_CONTO, conto); _tscad->put(SCAD_SOTTOCONTO, sottoc); _tscad->put(SCAD_ANNO, anno); _tscad->put(SCAD_NUMPART, numpart); _tscad->put(SCAD_NRIGA, nriga); _tscad->put(SCAD_NRATA, nrata); if (_tscad->read() == NOERR) { _tscad->put(SCAD_TIPOCF, tipo); _tscad->put(SCAD_GRUPPO, gruppo); _tscad->put(SCAD_CONTO, conto); _tscad->put(SCAD_SOTTOCONTO, sottoc); _tscad->put(SCAD_ANNO, anno); _tscad->put(SCAD_NUMPART, numpart); _tscad->put(SCAD_NRIGA, nriga); _tscad->put(SCAD_NRATA, nrata); _tscad->put(SCAD_DATASCAD, datascad); _tscad->put(SCAD_CODPAG, codpag); _tscad->put(SCAD_TIPOPAG, tipopag); _tscad->put(SCAD_ULTCLASS, ultclass); _tscad->put(SCAD_IMPORTO, importo); _tscad->put(SCAD_IMPORTOVAL, impval); _tscad->put(SCAD_DESCR, descr); _tscad->put(SCAD_CODABIPR, nsabi); _tscad->put(SCAD_CODCABPR, nscab); _tscad->put(SCAD_CODABI, vsabi); _tscad->put(SCAD_CODCAB, vscab); _tscad->put(SCAD_CODAG, codag); _tscad->put(SCAD_DATASOLL, datasoll); _tscad->put(SCAD_NSOLL, nsoll); _tscad->rewrite(); } else { _tscad->put(SCAD_TIPOCF, tipo); _tscad->put(SCAD_GRUPPO, gruppo); _tscad->put(SCAD_CONTO, conto); _tscad->put(SCAD_SOTTOCONTO, sottoc); _tscad->put(SCAD_ANNO, anno); _tscad->put(SCAD_NUMPART, numpart); _tscad->put(SCAD_NRIGA, nriga); _tscad->put(SCAD_NRATA, nrata); _tscad->put(SCAD_DATASCAD, datascad); _tscad->put(SCAD_CODPAG, codpag); _tscad->put(SCAD_TIPOPAG, tipopag); _tscad->put(SCAD_ULTCLASS, ultclass); _tscad->put(SCAD_IMPORTO, importo); _tscad->put(SCAD_IMPORTOVAL, impval); _tscad->put(SCAD_DESCR, descr); _tscad->put(SCAD_CODABIPR, nsabi); _tscad->put(SCAD_CODCABPR, nscab); _tscad->put(SCAD_CODABI, vsabi); _tscad->put(SCAD_CODCAB, vscab); _tscad->put(SCAD_CODAG, codag); _tscad->put(SCAD_DATASOLL, datasoll); _tscad->put(SCAD_NSOLL, nsoll); _tscad->write(); } } } void TVar_sc::registra_pagamenti(TMask& m) { TString passat; TSheet_field& pag = (TSheet_field&)m.field(F_RIGAPAGSCA); for (int i = 0 ; i < pag.items(); i++) { TToken_string& row = pag.row(i); char tipo = row.get (0)[0]; int gruppo = row.get_int (1); int conto = row.get_int (2); long sottoc = row.get_long(3); int anno = row.get_int (5); TString numpart = row.get (6); int nriga = row.get_int (7); int nrata = row.get_int (8); int nrigp = row.get_int (9); TString accsal = row.get (10); real importo (row.get (12)); real ritenute (row.get (14)); real abbuoni (row.get (16)); real diffcam (row.get (18)); real impval (row.get (19)); char tipoc = row.get (20)[0]; int gruppoc = row.get_int(21); int contoc = row.get_int(22); long sottocc = row.get_long(23); long nsabi = row.get_long(25); long nscab = row.get_long(26); long vsabi = row.get_long(27); long vscab = row.get_long(28); TString codag = row.get (29); real ritsoc (row.get (31)); TString codval = ""; char sez = sezione(tipo,gruppo,conto,sottoc,anno,numpart,nriga,codval,*_mask); char sezab = row.get(15)[0]; if (sezab != sez) abbuoni = abbuoni * -1; if (sezab == 'A') passat = "P"; else if (sezab == 'D') passat = "A"; char sezdc = row.get(17)[0]; if (sezdc != sez) diffcam = diffcam * -1; _tpagsca->setkey(1); _tpagsca->zero(); _tpagsca->put(PAGSCA_TIPOC, tipo); _tpagsca->put(PAGSCA_GRUPPO, gruppo); _tpagsca->put(PAGSCA_CONTO, conto); _tpagsca->put(PAGSCA_SOTTOCONTO, sottoc); _tpagsca->put(PAGSCA_ANNO, anno); _tpagsca->put(PAGSCA_NUMPART, numpart); _tpagsca->put(PAGSCA_NRIGA, nriga); _tpagsca->put(PAGSCA_NRATA, nrata); _tpagsca->put(PAGSCA_NRIGP, nrigp); if (_tpagsca->read() == NOERR) { _tpagsca->put(PAGSCA_TIPOC, tipo); _tpagsca->put(PAGSCA_GRUPPO, gruppo); _tpagsca->put(PAGSCA_CONTO, conto); _tpagsca->put(PAGSCA_SOTTOCONTO, sottoc); _tpagsca->put(PAGSCA_ANNO, anno); _tpagsca->put(PAGSCA_NUMPART, numpart); _tpagsca->put(PAGSCA_NRIGA, nriga); _tpagsca->put(PAGSCA_NRATA, nrata); _tpagsca->put(PAGSCA_NRIGP, nrigp); _tpagsca->put(PAGSCA_ACCSAL, accsal); _tpagsca->put(PAGSCA_IMPORTO, importo); _tpagsca->put(PAGSCA_RITENUTE, ritenute); _tpagsca->put(PAGSCA_RITSOC, ritsoc); _tpagsca->put(PAGSCA_ABBUONI, abbuoni); _tpagsca->put(PAGSCA_DIFFCAM, diffcam); _tpagsca->put(PAGSCA_IMPORTOVAL, impval); _tpagsca->put(PAGSCA_TIPOCC, tipoc); _tpagsca->put(PAGSCA_GRUPPOC, gruppoc); _tpagsca->put(PAGSCA_CONTOC, contoc); _tpagsca->put(PAGSCA_SOTTOCONTC, sottocc); _tpagsca->put(PAGSCA_CODABIPR, nsabi); _tpagsca->put(PAGSCA_CODCABPR, nscab); _tpagsca->put(PAGSCA_CODABI, vsabi); _tpagsca->put(PAGSCA_CODCAB, vscab); _tpagsca->put(PAGSCA_CODAG, codag); _tpagsca->put(PAGSCA_PASSATT, passat); _tpagsca->rewrite(); } else { _tpagsca->put(PAGSCA_TIPOC, tipo); _tpagsca->put(PAGSCA_GRUPPO, gruppo); _tpagsca->put(PAGSCA_CONTO, conto); _tpagsca->put(PAGSCA_SOTTOCONTO, sottoc); _tpagsca->put(PAGSCA_ANNO, anno); _tpagsca->put(PAGSCA_NUMPART, numpart); _tpagsca->put(PAGSCA_NRIGA, nriga); _tpagsca->put(PAGSCA_NRATA, nrata); _tpagsca->put(PAGSCA_NRIGP, nrigp); _tpagsca->put(PAGSCA_ACCSAL, accsal); _tpagsca->put(PAGSCA_IMPORTO, importo); _tpagsca->put(PAGSCA_RITENUTE, ritenute); _tpagsca->put(PAGSCA_RITSOC, ritsoc); _tpagsca->put(PAGSCA_ABBUONI, abbuoni); _tpagsca->put(PAGSCA_DIFFCAM, diffcam); _tpagsca->put(PAGSCA_IMPORTOVAL, impval); _tpagsca->put(PAGSCA_TIPOCC, tipoc); _tpagsca->put(PAGSCA_GRUPPOC, gruppoc); _tpagsca->put(PAGSCA_CONTOC, contoc); _tpagsca->put(PAGSCA_SOTTOCONTC, sottocc); _tpagsca->put(PAGSCA_CODABIPR, nsabi); _tpagsca->put(PAGSCA_CODCABPR, nscab); _tpagsca->put(PAGSCA_CODABI, vsabi); _tpagsca->put(PAGSCA_CODCAB, vscab); _tpagsca->put(PAGSCA_CODAG, codag); _tpagsca->put(PAGSCA_PASSATT, passat); _tpagsca->write(); } } } bool TVar_sc::leggi_trasfer() { _trasf = _tras_file.path(_dittaric); _trasf << HEADER; _tras_file.open(_trasf); if (_tras_file.exist()) { if (_tras_file.read_control_rec()) _control_rec = _tras_file.record(); else return error_box(TR("Rilevati gravi errori negli archivi:procedura interrotta")); } else return error_box(TR("Al momento non presenti trasferimenti attivi sulla ditta selezionata")); return TRUE; } bool TVar_sc::esegui_controlli() { TConfig conf(CONFIG_DITTA); _std = conf.get("FlStTra"); if (!prefix().exist(_dittaric)) return error_box(TR("Gli archivi della ditta %05ld non esistono."), _dittaric); if (!leggi_trasfer()) return FALSE; if (!controlli()) return FALSE; return TRUE; } void TVar_sc::setta_parametri_record(const TString& sigla,const TString& flag) { TConfig conf (CONFIG_DITTA); conf.set("FlStTra", flag); leggi_record_controllo(); _control_rec.overwrite(sigla,240); const int size = 1024; _tras_file.write_control_rec(_control_rec, size); } bool TVar_sc::controlli() { TString16 chiave,sigla; chiave = _control_rec.sub(241,256); chiave.trim(); sigla = _control_rec.sub(240,241); sigla.trim(); if (_std == "M" && sigla == "Z" && chiave != "") return error_box(TR("Variazione NON POSSIBILE: trasferimento movimenti gia' iniziato")); if (_std == "M" && sigla == "U") return error_box(TR("Variazione NON POSSIBILE: trasferimento movimenti gia' iniziato")); if (_std == "M" && sigla == "B") return error_box(TR("Variazione NON POSSIBILE: trasferimento movimenti saldaconto gia' iniziato")); if (_std == "*") { warning_box(TR("Trasferimento interamente completato: proseguire per cancellare il file")); _tras_file.remove_all(); setta_parametri_record(" "," "); return FALSE; } if (_std == "T") return error_box(TR("Variazione NON POSSIBILE: eseguire prima la ricezione delle tabelle")); const bool is_sc = _control_rec.sub(86,95).find('B') >= 0; if (!is_sc) return error_box(TR("Variazione NON POSSIBILE: non esistono movimenti saldaconto.")); return TRUE; } bool TVar_sc::menu(MENU_TAG m) { if (m == BAR_ITEM(1)) return main_loop(); return FALSE; }