#include #include #include #include #include #include #include #include #include #include #include "cg1200a.h" #include "cg1200b.h" #define COMRF_ALIAS 50 #define COMNASC_ALIAS 51 enum pt { undefined = 0, elenco = 1, rubriche = 2, etichette = 3 }; enum pw { clienti = 1, fornitori = 2, both = 3 }; bool mask2_reset_fields(TMask_field& mf, KEY k); class CG1200_App : public TPrintapp { friend bool mask2_reset_fields(TMask_field& mf, KEY k); pt _pr_type; pw _pr_what; TRelation* _rel; int _cur_1, _cur_2; int _sort; int _interline; bool _mov_only; TLocalisamfile* _saldi; // etichette int _startrow, _rows_et, _cols_et, _startcol; // variable field slots TString _piva, _cpercip, _fax, _telex, _name, _telefono, _indir; public: virtual bool preprocess_page(int file, int counter); virtual bool preprocess_print(int file, int counter); virtual print_action postprocess_print(int file, int counter); virtual void user_create(); virtual bool destroy(); virtual bool set_print(int); int ccur() { return _sort == 1 ? _cur_1 : _cur_2; } const char* look_tab(const char* tabname, TString& cod, const char* fld = "S0"); const char* get_field(int ln, const char* fn) { return current_cursor()->curr(ln).get(fn); } virtual void set_page (int file, int counter); void set_elenco(); void set_rubriche(); void set_etichette(); void process_link(int id, const char* txt); CG1200_App() : TPrintapp(),_piva(18), _cpercip(10), _fax(50), _telex(50), _name(60), _telefono(90), _indir(70) { _rel = NULL; _pr_type = undefined; _startrow = 2; _startcol = 3; _rows_et = 9; _cols_et = 40; } }; /* -------------------------------------------------------------------- */ /* ---------------------------- Code ---------------------------------- */ /* -------------------------------------------------------------------- */ void CG1200_App::process_link(int id, const char* txt) { TString ss = "1|"; ss << txt; TMessage fs(cmd2name("cg0","-1"), MSG_LN, ss); TMailbox m; m.send(fs); TExternal_app cg0("cg0 -1"); if (cg0.run()) beep(); } const char* CG1200_App::look_tab(const char* tabname, TString& cod, const char* fld) { TTable tab(tabname); tab.curr().zero(); tab.curr().put("CODTAB",cod); tab.read(); if (tab.bad()) tab.curr().zero(); return tab.curr().get(fld); } bool CG1200_App::preprocess_page(int file, int counter) { if (_mov_only) { // se non movimentato _saldi->curr().zero(); _saldi->curr().put(SLD_GRUPPO,get_field(LF_CLIFO,CLI_GRUPPO)); _saldi->curr().put(SLD_CONTO,get_field(LF_CLIFO, CLI_CONTO)); _saldi->curr().put(SLD_SOTTOCONTO,get_field(LF_CLIFO,CLI_CODCF)); _saldi->read(); if (_saldi->curr().get(SLD_GRUPPO) == get_field(LF_CLIFO, CLI_GRUPPO) && _saldi->curr().get(SLD_CONTO) == get_field(LF_CLIFO,CLI_CONTO) && _saldi->curr().get(SLD_SOTTOCONTO) == get_field(LF_CLIFO,CLI_CODCF)) // OSTIA! e' MOVIMENTATO! return FALSE; } // set variable fields _piva = get_field(LF_CLIFO, CLI_COFI); if (_piva.empty()) _piva = get_field(LF_CLIFO, CLI_PAIV); _telefono = get_field(LF_CLIFO, CLI_PTEL); if (!_telefono.empty()) _telefono << "/"; _telefono << get_field(LF_CLIFO, CLI_TEL) << " "; TString s(get_field(LF_CLIFO, CLI_PTEL2)); if (!s.empty()) s << "/"; _telefono << s << get_field(LF_CLIFO, CLI_TEL2) << " "; s = get_field(LF_CLIFO, CLI_PTEL3); if (!s.empty()) s << "/"; _telefono << s << get_field(LF_CLIFO, CLI_TEL3); _fax = get_field(LF_CLIFO, CLI_PFAX); if (!_fax.empty()) _fax << "/"; _fax << get_field(LF_CLIFO, CLI_FAX); _telex = get_field(LF_CLIFO, CLI_PTELEX); if (!_telex.empty()) _telex << "/"; _telex << get_field(LF_CLIFO, CLI_TELEX); _indir = get_field(LF_CLIFO, CLI_INDCF); if (!_indir.empty()) _indir << " "; _indir << get_field(LF_CLIFO, CLI_CIVCF); _name = get_field(LF_CLIFO, CLI_RAGSOC); s = get_field(LF_CLIFO, CLI_CODANAGPER); _cpercip = ""; if (s.not_empty()) _cpercip << get_field(LF_CLIFO, CLI_TIPOAPER) << " " << s; // che minchia e' questo // if (strcmp(get_field(LF_CLIFO, CLI_TIPOAPER),"F") == 0) // { // TString surname = _name.mid(30,50); surname.trim(); // _name = _name.mid(0,30); _name.trim(); // _name << " " << surname; // } return TRUE; } print_action CG1200_App::postprocess_print(int file, int counter) { static bool more = FALSE; if (_pr_what == both) { if (more) { more = FALSE; select_cursor(ccur()); return NEXT_PAGE; } else { more = TRUE; select_cursor(ccur()); return REPEAT_PAGE; } } return NEXT_PAGE; } bool mask_ctrl_handler(TMask_field& mf, KEY k) { if (k == K_SPACE) { mf.mask().stop_run(mf.dlg()); } return TRUE; } // set printrows void CG1200_App::set_page(int file, int counter) { switch(_pr_type) { case elenco: set_elenco(); break; case rubriche: set_rubriche(); break; case etichette: set_etichette(); break; default: break; } } void CG1200_App::set_elenco() { reset_header(); // intestazione const long firm = get_firm(); TLocalisamfile ditte(LF_NDITTE); ditte.zero(); ditte.put(NDT_CODDITTA, firm); ditte.read(); if (ditte.bad()) ditte.zero(); TString s(ditte.get(NDT_RAGSOC)); set_header(1, "Ditta %ld %s @102gData @<@125gPag @#", firm, (const char*) s); set_header(2, "Elenco %s",(_pr_what == both ? "Clienti+Fornitori" : (_pr_what == clienti ? "Clienti" : "Fornitori"))); set_header(3, (const char *)(TString(132).fill('-'))); set_header(4, " Codice Ragione sociale"); set_header(5, "@9gIndirizzo@59gC.A.P.@66gLocalita'"); set_header(6, "@9gTelefoni@91gFAX @115gTelex"); set_header(7, "@9gLuogo di nascita@46gData" "@56gPartita IVA Codice fiscale@93gConto di costo/ricavo@115gC.allegato@126gPerc.770"); set_header(8, (const char *)(TString(132).fill('-'))); // body set_row(1,"$[r]@1s$[n] $[r]@pn$[n] #t", FLD(LF_CLIFO, CLI_TIPOCF), FLD(LF_CLIFO, CLI_CODCF,"@@@@@@"), &_name); set_row(2,"@9g#t@59g@s@66g@s @s", &_indir, FLD(LF_CLIFO, CLI_CAPCF), FLD(-COMRF_ALIAS,COM_DENCOM), FLD(-COMRF_ALIAS,COM_PROVCOM)); set_row(3,"@9g#t@90g#t@115g#t", &_telefono, &_fax, &_telex); set_row(4,"@9g@s @s@46g@ld@56g#t@92g@3n @3n @6n@115g@n@126g#t", FLD(-COMNASC_ALIAS, COM_DENCOM), FLD(-COMNASC_ALIAS, COM_PROVCOM), FLD(LF_CLIFO, CLI_DATANASC), &_piva, FLD(LF_CLIFO,CLI_GRUPPORIC), FLD(LF_CLIFO,CLI_CONTORIC), FLD(LF_CLIFO, CLI_SOTTOCRIC), FLD(LF_CLIFO, CLI_CODALLEG), &_cpercip); for(int i = 0; i < _interline; i++) set_row(i+5,""); } void CG1200_App::set_rubriche() { reset_header(); // intestazione const long firm = get_firm(); TLocalisamfile ditte(LF_NDITTE); ditte.zero(); ditte.put(NDT_CODDITTA, firm); ditte.read(); if (ditte.bad()) ditte.zero(); TString s(ditte.get(NDT_RAGSOC)); set_header(1, "Ditta %ld %s @102gData @<@125gPag @#", firm, (const char*) s); set_header(2, "Rubrica %s",(_pr_what == both ? "Clienti+Fornitori" : (_pr_what == clienti ? "Clienti" : "Fornitori"))); set_header(3, (const char *)(TString(132).fill('-'))); set_header(4, " Codice Ragione sociale"); set_header(5, "@9gIndirizzo@59gC.A.P.@66gLocalita'"); set_header(6, "@9gTelefoni@91gFAX @115gTelex"); set_header(7, (const char *)(TString(132).fill('-'))); // body set_row(1,"$[r]@1s$[n] $[r]@pn$[n] #t", FLD(LF_CLIFO,CLI_TIPOCF), FLD(LF_CLIFO,CLI_CODCF,"@@@@@@"), &_name); set_row(2,"@9g#t@59g@s@66g@s @s", &_indir, FLD(LF_CLIFO, CLI_CAPCF), FLD(-COMRF_ALIAS,COM_DENCOM), FLD(-COMRF_ALIAS,COM_PROVCOM)); set_row(3,"@9g#t@90g#t@115g#t", &_telefono, &_fax, &_telex); for(int i = 0; i < _interline; i++) set_row(i+4,""); } bool mask2_reset_fields(TMask_field& mf, KEY k) { if (k == K_SPACE) { CG1200_App* a = (CG1200_App*)MainApp(); mf.mask().field(FLD_CGB_STARTROW).set(format("%d",a->_startrow)); mf.mask().field(FLD_CGB_STARTCOL).set(format("%d",a->_startcol)); mf.mask().field(FLD_CGB_ROWSET).set(format("%d",a->_rows_et)); mf.mask().field(FLD_CGB_COLSET).set(format("%d",a->_cols_et)); } return TRUE; } void CG1200_App::set_etichette() { reset_header(); for (int i = 1; i < _startrow; i++) set_row(i,""); set_row(_startrow, format("@%dg#-%dt",_startcol, _cols_et - _startcol), &_name); set_row(_startrow+1, format("@%dg#-%dt",_startcol, _cols_et - _startcol), &_indir); set_row(_startrow+2, format("@%dg@5s @%ds @2s",_startcol, _cols_et - _startcol - 9), FLD(LF_CLIFO, CLI_CAPCF), FLD(-COMRF_ALIAS, COM_DENCOM), FLD(-COMRF_ALIAS, COM_PROVCOM)); for (i = _startrow+3; i <= _rows_et; i++) set_row(i,""); } bool CG1200_App::set_print(int) { disable_links(); set_multiple_link(FALSE); TMask mask("cg1200a.msk"); mask.set_handler(BUT_CG12_ELENCO, mask_ctrl_handler); mask.set_handler(BUT_CG12_RUBRICHE, mask_ctrl_handler); mask.set_handler(BUT_CG12_ETICHETTE, mask_ctrl_handler); mask.run(); // set print type switch (mask.last_key()) { case K_ESC: case K_QUIT: return FALSE; break; case BUT_CG12_ELENCO: _pr_type = elenco; break; case BUT_CG12_ETICHETTE: { TMask mask2("cg1200b.msk"); /* TBI read/save from - to config file */ _pr_type = etichette; mask2.set_handler(BUT_CGB_RESET, mask2_reset_fields); mask2.field(FLD_CGB_ROWSET).set(format("%d",_rows_et)); mask2.field(FLD_CGB_COLSET).set(format("%d",_cols_et)); mask2.field(FLD_CGB_STARTROW).set(format("%d",_startrow)); mask2.field(FLD_CGB_STARTCOL).set(format("%d",_startcol)); // set defaults mask2.run(); _startrow = atoi(mask2.get(FLD_CGB_STARTROW)); _startcol = atoi(mask2.get(FLD_CGB_STARTCOL)); _rows_et = atoi(mask2.get(FLD_CGB_ROWSET)); _cols_et = atoi(mask2.get(FLD_CGB_COLSET)); break; } case BUT_CG12_RUBRICHE: _pr_type = rubriche; break; } if (_pr_type != etichette) { set_multiple_link(TRUE); enable_link("Collegamento Archivio clienti e fornitori : ", 'r'); } _sort = mask.get_int(RDB_CG12_SORT); _pr_what = (pw) mask.get_int(RDB_CG12_TYPE); _interline = mask.get_int(LST_CG12_INTERLINE); _mov_only = mask.get_bool(CHK_CG12_MOVIM); select_cursor(ccur()); TRectype tr1(current_cursor()->curr()); tr1.zero(); TRectype tr2(tr1); if (_pr_what != both) { // filter tr1.put(CLI_TIPOCF, _pr_what == clienti ? "C" : "F"); tr2.put(CLI_TIPOCF, _pr_what == clienti ? "C" : "F"); short fromid, toid; TString nome_campo(12); if (_sort == 1) { fromid = (_pr_what == clienti) ? FLD_CLI_CODFR : FLD_FOR_CODFR; toid = (_pr_what == clienti) ? FLD_CLI_CODTO : FLD_FOR_CODTO; nome_campo = CLI_CODCF; } else { fromid = (_pr_what == clienti) ? FLD_CLI_RAGSOCFR : FLD_FOR_RAGSOCFR; toid = (_pr_what == clienti) ? FLD_CLI_RAGSOCTO : FLD_FOR_RAGSOCTO; nome_campo = CLI_RAGSOC; } const TString cod_from(mask.get(fromid)); const TString cod_to(mask.get(toid)); if (cod_from.not_empty()) tr1.put(nome_campo, cod_from); if (cod_to.not_empty()) tr2.put(nome_campo, cod_to); } current_cursor()->setregion(tr1, tr2); return TRUE; } bool CG1200_App::preprocess_print(int file, int counter) { reset_print(); if (_pr_type == undefined) return set_print(counter); return TRUE; } void CG1200_App::user_create() { // set relation and cursors _rel = new TRelation(LF_CLIFO); _rel->add(LF_COMUNI, "STATO==STATOCF|COM==COMCF", 1, 0, COMRF_ALIAS); _rel->add(LF_COMUNI, "STATO==STATONASC|COM==COMNASC", 1, 0, COMNASC_ALIAS); _saldi = new TLocalisamfile(LF_SALDI); _saldi->setkey(2); _cur_1 = add_cursor(new TCursor(_rel,"",1)); _cur_2 = add_cursor(new TCursor(_rel,"",2)); add_file(LF_CLIFO); enable_print_menu(); } bool CG1200_App::destroy() { if (_rel) delete _rel; delete _saldi; return TRUE; } int cg1200(int argc, char* argv[]) { CG1200_App app; app.run(argc, argv, "Stampe Clienti/Fornitori"); return 0; }