diff --git a/cg/cg6804.cpp b/cg/cg6804.cpp index 13a86c3c4..813f1b9ff 100755 --- a/cg/cg6804.cpp +++ b/cg/cg6804.cpp @@ -1,2492 +1,2497 @@ -#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); - - 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); - - _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(123, codag_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); - - 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(130, codag_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); - - 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 cpg ("%CPG"); - TString dep (format("%4d", (const char*) codpag)); - - cpg.zero(); - cpg.put("CODTAB", dep); - if (cpg.read() == NOERR) - d_condpag = cpg.get("S0"); - else - d_condpag = ""; - } -} - -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 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); - } -} - -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); - - 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("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("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("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("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("Valore non valido per codice causale"); - - long nreg = f.mask().get_long(113); - if (nreg != 0 && codcaus.empty()) - return f.warning_box("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("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("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("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("Codice conto non esistente su piano dei conti"); - - TString tipo = f.mask().get(101); - if (tipo != tmcf) - return f.warning_box("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("Tipo movimento errato"); - - TString appoggio = ""; - TString codcaus = f.mask().get(111); - if (codcaus.not_empty()) - { - 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("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("In caso di fattura non e' possibile indicare il tipo pagamento"); - - if (tipomov != 1) - if (tipopag < 1 || tipopag > 9) - return f.warning_box("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("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("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("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("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("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("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("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("Non e' possibile indicare la data cambio se non e' indicato il codice valuta"); - if (cambio != ZERO) - return f.warning_box("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("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("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("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) && f.mask().is_running()) - { - TString descr; - int tipo; - - TString codpag = f.get(); - - TTable cpg ("%CPG"); - TString dep (format("%-4s", (const char*) codpag)); - - cpg.zero(); - cpg.put("CODTAB", dep); - if (cpg.read() == NOERR) - { - descr = cpg.get("S0"); - tipo = atoi(cpg.get("S4")); - } - else - return f.warning_box("Codice di pagamento errato o non presente in tabella"); - - int tipopag = f.mask().get_int(112); - if (tipopag != 0) - { - if (tipopag != tipo) - return f.warning_box("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()) - { - int tipopag = atoi(f.get()); - - if (tipopag < 1 || tipopag > 9) - return f.warning_box("Tipo pagamento errato"); - - TString codpag = f.mask().get(111); - - 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("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()) 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("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("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 = "Codice nostra banca errato o non presente in tabella"; - } - else - if (id == 122) - { - abi = f.mask().get_long(121); - mess = "Codice vostra banca errato o non presente in tabella"; - } - else - if (id == 127) - { - abi = f.mask().get_long(126); - mess = "Codice nostra banca errato o non presente in tabella"; - } - else - if (id == 129) - { - abi = f.mask().get_long(128); - mess = "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::codag_handler(TMask_field& f, KEY k) -{ - if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) - { - TString dep; - TString codag = f.get(); - - if (codag.empty()) return TRUE; - - TTable age ("AGE"); - if (real::is_natural(codag)) - dep.format("%05s", (const char*) codag); - else - dep.format("%-5s", (const char*) codag); - - age.zero(); - age.put("CODTAB", dep); - if (age.read() != NOERR) - return f.warning_box("Codice agente errato o non presente in tabella"); - } - 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("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("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("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("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("Non esiste la riga partita corrispondente"); - if (!app().record_scadenze(t,g,c,s,anno,npart,nriga,nrata)) - return f.warning_box("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("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("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("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("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("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("Valore non valido per sezione"); - - if (abbuoni != ZERO && sez.empty()) - return f.warning_box("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("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("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("Valore non valido per sezione"); - - if (diffcam != ZERO && sez.empty()) - return f.warning_box("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("La differenza cambio puo' essere indicata solo se a SALDO"); - if (codval.empty() && diffcam != ZERO) - return f.warning_box("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); - - int tipomov = app().tipo_movimento(tipo,g,c,s,anno,npart,nriga,*(app()._mask)); - if ( (tipomov == 2 || tipomov == 5) && (g != 0 || c != 0 || s != 0) ) - return f.warning_box("La contropartita non puo' essere indicata in caso di Nota credito e Insoluto"); - - 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("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("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("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("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); - pagsca.put(PAGSCA_IMPORTO, importo); - pagsca.put(PAGSCA_IMPORTOVAL, impval); - pagsca.put(PAGSCA_RITENUTE, ritenute); - 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("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("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("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); - - 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_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_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("Rilevati gravi errori negli archivi:procedura interrotta"); - } - else - return error_box("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("Rilevati gravi errori negli archivi: procedura interrotta"); - - 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("Variazione NON POSSIBILE: trasferimento movimenti gia' iniziato"); - - if (_std == "M" && sigla == "U") - return error_box("Variazione NON POSSIBILE: trasferimento movimenti gia' iniziato"); - - if (_std == "M" && sigla == "B") - return error_box("Variazione NON POSSIBILE: trasferimento movimenti saldaconto gia' iniziato"); - - if (_std == "*") - { - warning_box("Trasferimento interamente completato: proseguire per cancellare il file"); - _tras_file.remove_all(); - setta_parametri_record(" "," "); - return FALSE; - } - - if (_std == "T") - return error_box("Variazione NON POSSIBILE: eseguire prima la ricezione delle tabelle"); - - return TRUE; -} - -bool TVar_sc::menu(MENU_TAG m) -{ - if (m == BAR_ITEM(1)) - return main_loop(); - return FALSE; -} +#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); + + 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.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.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); + + _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(123, codag_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); + + 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(130, codag_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); + + 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 cpg ("%CPG"); + TString dep (format("%4d", (const char*) codpag)); + + cpg.zero(); + cpg.put("CODTAB", dep); + if (cpg.read() == NOERR) + d_condpag = cpg.get("S0"); + else + d_condpag = ""; + } +} + +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 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); + } +} + +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); + + 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("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("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("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("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("Valore non valido per codice causale"); + + long nreg = f.mask().get_long(113); + if (nreg != 0 && codcaus.empty()) + return f.warning_box("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("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("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("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("Codice conto non esistente su piano dei conti"); + + TString tipo = f.mask().get(101); + if (tipo != tmcf) + return f.warning_box("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("Tipo movimento errato"); + + TString appoggio = ""; + TString codcaus = f.mask().get(111); + if (codcaus.not_empty()) + { + 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("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("In caso di fattura non e' possibile indicare il tipo pagamento"); + + if (tipomov != 1) + if (tipopag < 1 || tipopag > 9) + return f.warning_box("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("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("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("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("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("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("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("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("Non e' possibile indicare la data cambio se non e' indicato il codice valuta"); + if (cambio != ZERO) + return f.warning_box("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("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("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("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) && f.mask().is_running()) + { + TString descr; + int tipo; + + TString codpag = f.get(); + + TTable cpg ("%CPG"); + TString dep (format("%-4s", (const char*) codpag)); + + cpg.zero(); + cpg.put("CODTAB", dep); + if (cpg.read() == NOERR) + { + descr = cpg.get("S0"); + tipo = atoi(cpg.get("S4")); + } + else + return f.warning_box("Codice di pagamento errato o non presente in tabella"); + + int tipopag = f.mask().get_int(112); + if (tipopag != 0) + { + if (tipopag != tipo) + return f.warning_box("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()) + { + int tipopag = atoi(f.get()); + + if (tipopag < 1 || tipopag > 9) + return f.warning_box("Tipo pagamento errato"); + + TString codpag = f.mask().get(111); + + 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("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()) 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("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("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 = "Codice nostra banca errato o non presente in tabella"; + } + else + if (id == 122) + { + abi = f.mask().get_long(121); + mess = "Codice vostra banca errato o non presente in tabella"; + } + else + if (id == 127) + { + abi = f.mask().get_long(126); + mess = "Codice nostra banca errato o non presente in tabella"; + } + else + if (id == 129) + { + abi = f.mask().get_long(128); + mess = "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::codag_handler(TMask_field& f, KEY k) +{ + if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) + { + TString dep; + TString codag = f.get(); + + if (codag.empty()) return TRUE; + + TTable age ("AGE"); + if (real::is_natural(codag)) + dep.format("%05s", (const char*) codag); + else + dep.format("%-5s", (const char*) codag); + + age.zero(); + age.put("CODTAB", dep); + if (age.read() != NOERR) + return f.warning_box("Codice agente errato o non presente in tabella"); + } + 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("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("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("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("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("Non esiste la riga partita corrispondente"); + if (!app().record_scadenze(t,g,c,s,anno,npart,nriga,nrata)) + return f.warning_box("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("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("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("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("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("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("Valore non valido per sezione"); + + if (abbuoni != ZERO && sez.empty()) + return f.warning_box("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("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("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("Valore non valido per sezione"); + + if (diffcam != ZERO && sez.empty()) + return f.warning_box("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("La differenza cambio puo' essere indicata solo se a SALDO"); + if (codval.empty() && diffcam != ZERO) + return f.warning_box("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); + + int tipomov = app().tipo_movimento(tipo,g,c,s,anno,npart,nriga,*(app()._mask)); + if ( (tipomov == 2 || tipomov == 5) && (g != 0 || c != 0 || s != 0) ) + return f.warning_box("La contropartita non puo' essere indicata in caso di Nota credito e Insoluto"); + + 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("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("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("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("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); + pagsca.put(PAGSCA_IMPORTO, importo); + pagsca.put(PAGSCA_IMPORTOVAL, impval); + pagsca.put(PAGSCA_RITENUTE, ritenute); + 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("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("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("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); + + 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_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_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("Rilevati gravi errori negli archivi:procedura interrotta"); + } + else + return error_box("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("Rilevati gravi errori negli archivi: procedura interrotta"); + + 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("Variazione NON POSSIBILE: trasferimento movimenti gia' iniziato"); + + if (_std == "M" && sigla == "U") + return error_box("Variazione NON POSSIBILE: trasferimento movimenti gia' iniziato"); + + if (_std == "M" && sigla == "B") + return error_box("Variazione NON POSSIBILE: trasferimento movimenti saldaconto gia' iniziato"); + + if (_std == "*") + { + warning_box("Trasferimento interamente completato: proseguire per cancellare il file"); + _tras_file.remove_all(); + setta_parametri_record(" "," "); + return FALSE; + } + + if (_std == "T") + return error_box("Variazione NON POSSIBILE: eseguire prima la ricezione delle tabelle"); + + return TRUE; +} + +bool TVar_sc::menu(MENU_TAG m) +{ + if (m == BAR_ITEM(1)) + return main_loop(); + return FALSE; +} diff --git a/cg/cg6804b.uml b/cg/cg6804b.uml index ae4141b52..db3a9a139 100755 --- a/cg/cg6804b.uml +++ b/cg/cg6804b.uml @@ -1,63 +1,63 @@ -#include "cg6804a.h" - -TOOLBAR "" 0 20 0 2 - -BUTTON DLG_SAVEREC 10 2 -BEGIN - PROMPT -13 -1 "~Registra" - MESSAGE EXIT,K_SAVE - PICTURE BMP_SAVEREC -END - -BUTTON DLG_CANCEL 10 2 -BEGIN - PROMPT -23 -1 "" - MESSAGE EXIT,K_ESC -END - -BUTTON DLG_QUIT 10 2 -BEGIN - PROMPT -33 -1 "" - MESSAGE EXIT,K_QUIT -END - -ENDPAGE - -PAGE "Variazione Movimenti Saldaconto" -1 -1 78 20 - -SPREADSHEET F_RIGAPART 0 16 -BEGIN - PROMPT 0 1 "" - ITEM "Tipo" - ITEM "Gruppo" - ITEM "Conto" - ITEM "Sottoconto" - ITEM "Descrizione conto / Ragione sociale C/F@50" - ITEM "Anno" - ITEM "Numero@7" - ITEM "N.riga" - ITEM "Data doc.@10" - ITEM "N.docum." - ITEM "Causale" - ITEM "Descrizione causale@50" - ITEM "N.reg. " - ITEM "N.rig." - ITEM "Data oper." - ITEM "Gruppo" - ITEM "Conto" - ITEM "Descrizione conto cliente@50" - ITEM "Tipo mov." - ITEM "Descrizione@50" - ITEM "Sez" - ITEM "Data pag. " - ITEM "Tipo pag." - ITEM "Cod. val." - ITEM "Data cambio" - ITEM "Cambio@15" -END - -ENDPAGE - -ENDMASK - -#include "cg6804c.uml" \ No newline at end of file +#include "cg6804a.h" + +TOOLBAR "" 0 20 0 2 + +BUTTON DLG_SAVEREC 10 2 +BEGIN + PROMPT -13 -1 "~Registra" + MESSAGE EXIT,K_SAVE + PICTURE BMP_SAVEREC +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -23 -1 "" + MESSAGE EXIT,K_ESC +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -33 -1 "" + MESSAGE EXIT,K_QUIT +END + +ENDPAGE + +PAGE "Variazione Movimenti Saldaconto" -1 -1 78 20 + +SPREADSHEET F_RIGAPART 0 16 +BEGIN + PROMPT 0 1 "" + ITEM "Tipo@4" + ITEM "Gruppo" + ITEM "Conto" + ITEM "Sottoconto" + ITEM "Descrizione conto / Ragione sociale C/F@50" + ITEM "Anno" + ITEM "Numero@7" + ITEM "N.riga" + ITEM "Data doc.@10" + ITEM "N.docum." + ITEM "Causale" + ITEM "Descrizione causale@50" + ITEM "N.reg. " + ITEM "N.rig." + ITEM "Data oper." + ITEM "Gruppo" + ITEM "Conto" + ITEM "Descrizione conto cliente@50" + ITEM "Tipo mov." + ITEM "Descrizione@50" + ITEM "Sez" + ITEM "Data pag. " + ITEM "Tipo pag." + ITEM "Cod. val." + ITEM "Data cambio" + ITEM "Cambio@15" +END + +ENDPAGE + +ENDMASK + +#include "cg6804c.uml"