#include #include #include #include #include #include #include #include "ba3.h" #include "ba3300.h" class BA3300_application : public TPrintapp { friend bool our_handler(TMask_field& field, KEY key); TMask* _msk; TTable* _tab; //Tabella dei registri TString _cod_reg, _comulc, _ragsoc, _indulc, _civulc, _capulc, _com, _prov, _cofi, _paiv, _tipoa; long _cod_anno, _codice_ditta, _agg, _codanagr; int _num_pag, _pag_ini, _pag_fin; bool _inizia_dopo; TLocalisamfile* _nditte; TLocalisamfile* _anag; TLocalisamfile* _unloc; TLocalisamfile* _comuni; public: bool menu (MENU_TAG m) { return TPrintapp::menu(m) ; } virtual void user_destroy(); virtual void user_create() ; bool set_print(int); const char* decodifica_reg (); virtual void set_page (int, int); virtual print_action postprocess_page (int, int); BA3300_application(); }; print_action BA3300_application::postprocess_page (int, int counter) { if (counter == _num_pag - 1) { TString dep(CODTABLEN); _tab->curr().zero(); dep << format ("%04d%-3s", _cod_anno, (const char*)_cod_reg); _tab->curr().put("CODTAB", (const char*)dep); _tab->read(); if (_tab->bad()) _tab->curr().zero(); _agg = atol(_tab->curr().get("I2")); _agg = _agg + _num_pag; _tab->curr().put("I2", _agg); _tab->rewrite(); return NEXT_PAGE; } else return REPEAT_PAGE; } void BA3300_application::set_page(int , int counter) { TString descr; int contatore; reset_print(); descr = decodifica_reg(); contatore = _pag_ini + counter; if (counter == 0) { if (!_inizia_dopo) { reset_row(8); set_row(8, "@65gPag.@70g%d", (const char *) contatore); } reset_row(1); reset_row(2); reset_row(3); reset_row(4); reset_row(5); reset_row(6); reset_row(7); set_row (1, "@50g%-50s", (const char*) descr); set_row (2, "@50g%-50s", (const char*)_ragsoc); set_row (3, "@50g%-35s", (const char*)_indulc); set_row (3, "@90g%10s", (const char*)_civulc); set_row (4, "@50g%5s", (const char*)_capulc); set_row (4, "@60g%50s", (const char*) _com); set_row (4, "@115g%5s", (const char*)_prov); set_row (5, "@50g%16s", (const char*)_cofi); set_row (6, "@50g%11s", (const char*)_paiv); } else if (counter==_num_pag-1) { reset_row(1); reset_row(2); reset_row(3); reset_row(4); reset_row(5); reset_row(6); reset_row(7); reset_row(8); set_row (1, "@1gSocieta'@10g%-50s", (const char*) _ragsoc); set_row (1, "@62g%-29s", (const char*) _indulc); set_row (1, "@93g%-9s", (const char*) _civulc); set_row (1, "@103g%-5s", (const char*) _capulc); set_row (1, "@110g%-18s", (const char*) _com); set_row (1, "@130g%-3s", (const char*) _prov); set_row (2, "@1g%-50s", (const char*) descr); set_row (2, "@52g%16s", (const char*) _cofi); set_row (2, "@70g%11s", (const char*) _paiv); set_row (4, "@50gN. ........ DI REPERTORIO"); set_row (5, "@50gIL PRESENTE LIBRO DELLA@75g%50s", (const char*) _ragsoc); set_row (6, "@50g%-35s", (const char*) _indulc); set_row (6, "@88g%10s", (const char*) _civulc); set_row (7, "@50g%5s", (const char*) _capulc); set_row (7, "@58g%50s", (const char*) _com); set_row (7, "@111g%5s", (const char*) _prov); set_row (8, "@120gPag.@125g%d", (const char*) contatore); } else { reset_row(1); reset_row(2); reset_row(3); reset_row(4); reset_row(5); reset_row(6); reset_row(7); reset_row(8); set_row (1, "@1gSocieta'@10g%-50s", (const char*) _ragsoc); set_row (1, "@62g%-29s", (const char*) _indulc); // set_row (1, "@93g%-9s", (const char*) _civulc); // set_row (1, "@103g%-5s", (const char*) _capulc); set_row (1, "@110g%-18s", (const char*) _com); set_row (1, "@130g%-3s", (const char*) _prov); set_row (2, "@1g%-50s", (const char*) descr); set_row (2, "@52g%16s", (const char*) _cofi); set_row (2, "@70g%11s", (const char*) _paiv); set_row (3, "@85gPag.@90g%d", (const char*) contatore); } } BA3300_application::BA3300_application() { } bool BA3300_application::set_print(int) { KEY tasto; TString app(8); _nditte->setkey(1); _codice_ditta = get_firm(); _nditte->curr().zero(); _nditte->curr().put(N_CODDITTA,_codice_ditta); _nditte->read(); app=_nditte->curr().get(N_CODDITTA); _msk->set(F_CODDITTA,app); _ragsoc=_nditte->curr().get(N_RAGSOC); _tipoa =_nditte->curr().get(N_TIPOA); _codanagr =atol(_nditte->curr().get(N_CODANAGR)); _msk->set(F_RAGSOC,_ragsoc); _unloc->setkey(1); _unloc->curr().zero(); _unloc->curr().put(N_CODDITTA,app); _unloc->curr().put(N_CODULC,"1"); _unloc->read(); _indulc=_unloc->curr().get(N_INDULC); _msk->set(F_INDIRIZZO,_indulc); _civulc=_unloc->curr().get(N_CIVULC); _msk->set(F_CIV,_civulc); _capulc=_unloc->curr().get(N_CAPULC); _msk->set(F_CAP,_capulc); _comulc=_unloc->curr().get(N_COMULC); _msk->set(F_CODCOM,_comulc); _comuni->setkey(1); _comuni->curr().zero(); _comuni->curr().put(N_CODCOM,_comulc); _comuni->read(); _com=_comuni->curr().get(N_COM); _msk->set(F_COM,_com); _prov=_comuni->curr().get(N_PROV); _msk->set(F_PROV,_prov); _anag->setkey(1); _anag->curr().zero(); _anag->curr().put(N_TIPOA,_tipoa); _anag->curr().put(N_CODANAGR,_codanagr); _anag->read(); _cofi=_anag->curr().get(N_COFI); _msk->set(F_COFI,_cofi); _paiv=_anag->curr().get(N_PAIV); _msk->set(F_PAIV,_paiv); _msk->set(F_LUNG,66); tasto = _msk->run(); if (tasto == K_ENTER) { _cod_reg = _msk->get(F_CODICE); _cod_anno = atol(_msk->get(F_ANNO)); _pag_ini = atoi(_msk->get(F_NPAGINI)); _pag_fin = atoi(_msk->get(F_NPAGFI)); _inizia_dopo = (bool)(_msk->get(F_PRIMO) == "X"); _num_pag = (_pag_fin - _pag_ini) + 1; enable_print_menu(); return TRUE; } else return FALSE; } static bool our_handler (TMask_field& field, KEY key) { TMask& m=field.mask(); TTable* t = ((BA3300_application *)MainApp())->_tab; if (key == K_TAB) { if (field.dlg() == F_CODICE) { long num = atol(t->curr().get("I2")); m.set(F_NPAGINI, num+1); } } return TRUE; } const char* BA3300_application::decodifica_reg () { TString dep(CODTABLEN); _tab->curr().zero(); dep << format ("%04d%-3s", _cod_anno, (const char*)_cod_reg); _tab->curr().put("CODTAB", (const char*)dep); _tab->read(); if (_tab->bad()) _tab->curr().zero(); return _tab->curr().get ("S0"); } void BA3300_application::user_create() { enable_print_menu(); _nditte = new TLocalisamfile (LF_NDITTE); _unloc = new TLocalisamfile (LF_UNLOC); _comuni = new TLocalisamfile (LF_COMUNI); _anag = new TLocalisamfile (LF_ANAG); //_ftab = new TLocalisamfile (LF_TAB); _tab = new TTable(TAB_REG); _msk = new TMask ("ba3300a") ; _msk->set_handler(F_CODICE, our_handler); add_cursor (NULL); set_auto_ff (TRUE); } void BA3300_application::user_destroy() // releasev e arrmask { delete _msk; delete _nditte; delete _unloc; delete _comuni; delete _anag; delete _tab; //delete _ftab; close(LF_TAB); } int ba3300(int argc, char* argv[]) { BA3300_application a; a.set_config_file ("pr2.stp"); a.run(argc, argv, "Stampa fogli libro bollato"); return 0; }