#include #include #include #include #include "cg1200a.h" #include "cg1200b.h" 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_c1, _cur_c2, _cur_f1, _cur_f2; int _sort; int _interline; bool _mov_only; TLocalisamfile* _comuni; TLocalisamfile* _saldi; // etichette int _startrow, _rows_et, _cols_et, _startcol; // variable field slots TString _piva; TString _telefono; TString _name; public: virtual bool preprocess_page(int counter); virtual bool preprocess_print(int counter); virtual print_action postprocess_print(int counter); virtual void user_create(); virtual bool destroy(); virtual bool set_print(int); int ccli() { return _sort == 1 ? _cur_c1 : _cur_c2; } int cfor() { return _sort == 1 ? _cur_f1 : _cur_f2; } TRectype& look_com(TString& cod); 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); } void set_rows(); void set_elenco(); void set_rubriche(); void set_etichette(); CG1200_App() : TPrintapp(), _piva(30), _telefono(50), _name(60) { _rel = NULL; _pr_type = undefined; _startrow = 2; _startcol = 3; _rows_et = 9; _cols_et = 40; } }; /* -------------------------------------------------------------------- */ /* ---------------------------- Code ---------------------------------- */ /* -------------------------------------------------------------------- */ TRectype& CG1200_App::look_com(TString& cod) { _comuni->curr().zero(); _comuni->curr().put("COM",cod); _comuni->read(); if (_comuni->bad()) _comuni->curr().zero(); return _comuni->curr(); } 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 counter) { if (_mov_only) { // se non movimentato _saldi->curr().zero(); _saldi->curr().put("GRUPPO",get_field(LF_CLIFO,"GRUPPO")); _saldi->curr().put("CONTO",get_field(LF_CLIFO,"CONTO")); _saldi->curr().put("SOTTOCONTO",get_field(LF_CLIFO,"CODCF")); _saldi->read(); if (_saldi->curr().get("GRUPPO") == get_field(LF_CLIFO,"GRUPPO") && _saldi->curr().get("CONTO") == get_field(LF_CLIFO,"CONTO") && _saldi->curr().get("SOTTOCONTO") == get_field(LF_CLIFO,"CODCF")) // OSTIA! e' MOVIMENTATO! return FALSE; } // set variable fields _piva = get_field(LF_CLIFO,"COFI"); if (_piva.empty()) _piva = get_field(LF_CLIFO,"PAIV"); _telefono = get_field(LF_CLIFO,"PTEL"); if (!_telefono.empty()) _telefono << "/"; _telefono << get_field(LF_CLIFO,"TEL"); _name = get_field(LF_CLIFO,"RAGSOC"); if (strcmp(get_field(LF_CLIFO,"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 counter) { static bool more = FALSE; if (_pr_what == both) { if (more) { more = FALSE; select_cursor(ccli()); return NEXT_PAGE; } else { more = TRUE; select_cursor(cfor()); 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_rows() { 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_print(); reset_header(); // intestazione set_header(1, "Ditta /*TBI*/@82gStudio /*TBI*/@102gData @<@125gPag @#"); 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@55gIndirizzo@91gC.a.p.Localita'" "@117gPr Telefono"); set_header(5,"@8gLuogo di nascita@29gData@40gProv. Nazione " "Partita IVA Codice fiscale@91gConto di costo/ricavo"); set_header(6,"@55gCodice per allegato@90gPercipiente 770"); set_header(7, (const char *)(TString(132).fill('-'))); // body set_row(1,"@pn #s@55g@s@91g@s @s@117g@s #s", FLD(LF_CLIFO, "CODCF","@@@@@@"), (const char*)_name, FLD(LF_CLIFO, "INDCF"), FLD(LF_CLIFO, "CAPCF"), FLD(LF_COMUNI,"DENCOM"), FLD(LF_COMUNI,"PROVCOM"), (const char*)_telefono); set_row(2,"@54g#s@90g@2n @2n @pn", (const char *)_piva, FLD(LF_CLIFO,"GRUPPORIC"), FLD(LF_CLIFO,"CONTORIC"), FLD(LF_CLIFO,"SOTTOCRIC","@@@@@@")); for(int i = 0; i < _interline; i++) set_row(i+3,""); } void CG1200_App::set_rubriche() { reset_print(); reset_header(); // intestazione set_header(1, "Ditta /*TBI*/@82gStudio /*TBI*/@102gData @<@125gPag @#"); 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 C Ragione sociale@41gIndirizzo@77gCap@83gLocalita'" "@104gPr Partita iva Telefono"); set_header(5, (const char *)(TString(132).fill('-'))); // body set_row(1,"@pn #s@55g@s@91g@s @s@117g@s #s", FLD(LF_CLIFO,"CODCF","@@@@@@"), (const char *)_name, FLD(LF_CLIFO,"INDCF"), FLD(LF_CLIFO,"CAPCF"), FLD(LF_COMUNI,"DENCOM"), FLD(LF_COMUNI,"PROVCOM"), (const char*)_telefono); } 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_print(); reset_header(); TMask mask2("cg1200b.msk"); /* TBI read/save from - to config file */ 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)); for (int i = 1; i < _startrow; i++) set_row(i,""); set_row(_startrow, format("@%dg#%ds",_startcol, _cols_et - _startcol), (const char*)_name); set_row(_startrow+1, format("@%dg@%ds",_startcol, _cols_et - _startcol), FLD(LF_CLIFO,"INDCF")); set_row(_startrow+2, format("@%dg@5s @%ds @2s",_startcol, _cols_et - _startcol - 9), FLD(LF_CLIFO,"CAPCF"), FLD(LF_COMUNI,"DENCOM"), FLD(LF_COMUNI,"PROVCOM")); for (i = _startrow+3; i <= _rows_et; i++) set_row(i,""); } bool CG1200_App::set_print(int) { 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: return FALSE; break; case BUT_CG12_ELENCO: _pr_type = elenco; break; case BUT_CG12_ETICHETTE: _pr_type = etichette; break; case BUT_CG12_RUBRICHE: _pr_type = rubriche; break; } _sort = atoi(mask.get(RDB_CG12_SORT)); _pr_what = (pw)atoi(mask.get(RDB_CG12_TYPE)); _interline = atoi(mask.get(LST_CG12_INTERLINE)); _mov_only = mask.get(CHK_CG12_MOVIM) == "X"; TString cod_from(5), cod_to(5); TLocalisamfile* fl; if (_pr_what == fornitori) select_cursor(cfor()); else select_cursor(ccli()); if (_pr_what != both) { // filter if (_sort == 1) { cod_from = mask.get(_pr_what == clienti ? FLD_CLI_CODFR : FLD_FOR_CODFR); cod_to = mask.get(_pr_what == clienti ? FLD_CLI_CODTO : FLD_FOR_CODTO); } else { cod_from = mask.get(_pr_what == clienti ? FLD_CLI_RAGSOCFR : FLD_FOR_RAGSOCFR); cod_to = mask.get(_pr_what == clienti ? FLD_CLI_RAGSOCTO : FLD_FOR_RAGSOCTO); } if ((!cod_from.empty() || !cod_to.empty()) && _pr_what != both) { fl = current_cursor()->file(LF_CLIFO); TRectype tr1(fl->curr()); TRectype tr2(fl->curr()); tr1.zero(); tr2.zero(); if (_sort == 1) { tr1.put("CODCF",cod_from); tr2.put("CODCF",cod_to); tr1.put("TIPOCF", _pr_what == clienti ? "C" : "F"); tr2.put("TIPOCF", _pr_what == clienti ? "C" : "F"); } else { tr1.put("RAGSOC",cod_from); tr2.put("RAGSOC",cod_to); } current_cursor()->setregion(cod_from.empty() ? NULL : &tr1, cod_to.empty() ? NULL : &tr2); } } // initialize (non dovrebbe servire) (*current_cursor()) = 0l; // set initial print rows & headers set_rows(); return TRUE; } bool CG1200_App::preprocess_print(int counter) { 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, "COM=COMCF"); _comuni = _rel->lfile(LF_COMUNI); _saldi = new TLocalisamfile(LF_SALDI); _saldi->setkey(2); _cur_c1 = add_cursor(new TCursor(_rel,"TIPOCF=\"C\"",1)); _cur_c2 = add_cursor(new TCursor(_rel,"TIPOCF=\"C\"",2)); _cur_f1 = add_cursor(new TCursor(_rel,"TIPOCF=\"F\"",1)); _cur_f2 = add_cursor(new TCursor(_rel,"TIPOCF=\"F\"",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; }