// ********************************************************************** // Stampa anagrafiche // Control code // *********************************************************************** #include #include #include "ba6100.h" #include "anagr.h" #include "nditte.h" // ------- utils -------------------------------------------- const TRectype& TAnaprint_app::look_com(const char* cod, const char* sta) { TString8 key; if (sta && *sta) key << sta; key << '|'; if (cod && *cod) key << cod; return cache().get(LF_COMUNI, key); } const char* TAnaprint_app::look_tab(const char* tabname, const char* cod, const char* fld) { if (cod == NULL || *cod == 0) return ""; TTable tab(tabname); tab.curr().zero(); tab.curr().put("CODTAB",cod); tab.read(); if (tab.bad()) tab.curr().zero(); return tab.curr().get(fld); } // link bool TAnaprint_app::process_link(int id, const char* txt) { bool reload = false; if (id == _ana_link) { TRectype persona(LF_ANAG); persona.put(ANA_TIPOA, _pr_what == anafis ? 'F' : 'G'); persona.put(ANA_CODANAGR, atol(txt)); TString8 hint; hint.format("ba4 -1 %c", _pr_what == anafis ? 'F' : 'G'); reload = persona.edit(LF_ANAG, NULL, hint); } else if (id == _dit_link) { TRectype ditta(LF_NDITTE); ditta.put(NDT_CODDITTA, atol(txt)); reload = ditta.edit(LF_NDITTE, NULL, "ba4 -2"); } return reload; } // ---- here we go ------------------------------------------------- void TAnaprint_app::set_page(int file, int cnt) { switch(file) { case LF_ANAG: case LF_NDITTE: if (_pr_type == elenco) { if (_pr_what != nditte && file == LF_NDITTE) { set_row(1,"@58g$[v]@pN$[n]@66g@S", FLD(LF_NDITTE,"CODDITTA","@@@@@"), FLD(LF_NDITTE,"RAGSOC")); set_row(2,""); } else set_elenco(); } else if (_pr_type == rubriche) set_rubriche(); else if (_pr_type == schede) { if (_pr_what != nditte && file == LF_NDITTE) set_scheda_ditta(); else set_schede(); } else if (_pr_type == etichette) set_etichette(); break; case LF_ATTIV: set_scheda_attiv(); break; case LF_UNLOC: set_scheda_unloc(); break; case LF_SOCI: set_scheda_socio(); break; } } bool TAnaprint_app::preprocess_page(int file, int counter) { // non stampa la prima ditta se sta facendo l'elenco visto // che la stampa a fianco dell'anagrafica if (file == LF_NDITTE && _pr_type == elenco && _inclditte && _pr_what != nditte) if (current_cursor()->is_first_match(LF_NDITTE)) return FALSE; if (_pr_type == elenco || _pr_type == rubriche) { _surname_name = current_cursor()->curr(LF_ANAG).get("RAGSOC"); _surname_name.strip_d_spaces(); } if (_pr_type == rubriche) { // vale per ditte, anagiu, anafis _com = current_cursor()->curr(LF_ANAG).get("COMRES"); if (_com.empty()) _com = current_cursor()->curr(LF_ANAG).get("COMRF"); if (_pr_what == nditte) { _phone = current_cursor()->curr(LF_NDITTE).get("PTEL"); _phone.trim(); if (!_phone.empty()) _phone << '/'; _phone << current_cursor()->curr(LF_NDITTE).get("TEL"); } if (_phone.empty() || _pr_what != nditte) { _phone = current_cursor()->curr(LF_ANAG).get("PTELRF"); _phone.trim(); if (!_phone.empty()) _phone << '/'; _phone << current_cursor()->curr(LF_ANAG).get("TELRF"); } const TRectype& cc = look_com(_com); _com = cc.get("DENCOM"); _cap = cc.get("CAPCOM"); _prov = cc.get("PROVCOM"); } else if (_pr_type == etichette) preprocess_etichette(); return TRUE; } print_action TAnaprint_app::postprocess_page(int file, int counter) { printer().current_row(); // verificare if (file == LF_ANAG && _pr_type == schede && _inclditte) printer().formfeed(); return NEXT_PAGE; } bool mask_reset_fields(TMask_field& mf, KEY k) { if (k == K_SPACE) { TMask& m = mf.mask(); TAnaprint_app& a = (TAnaprint_app&)main_app(); m.set(FLD_BA6B_INDROW, a._ind_row); m.set(FLD_BA6B_INDCOL, a._ind_col); m.set(FLD_BA6B_PIVROW, a._piv_row); m.set(FLD_BA6B_PIVCOL, a._piv_col); m.set(FLD_BA6B_CODROW, a._cod_row); m.set(FLD_BA6B_CODCOL, a._cod_col); m.set(FLD_BA6B_TOTROW, a._rows_et); m.set(FLD_BA6B_TOTCOL, a._cols_et); m.set(CHK_BA6B_PIVA, a._is_piv ? "X" : " "); m.set(CHK_BA6B_CODICE, a._is_cod ? "X": " "); } return TRUE; } void TAnaprint_app::preprocess_etichette() { // everything goes into strings _name = get_field(LF_ANAG,"RAGSOC"); _cod = get_field(LF_ANAG,"CODANAGR"); _cofi = get_field(LF_ANAG,"COFI"); const TRectype& cc = look_com(get_field(LF_ANAG,"COMCORR")); if (_cofi.empty()) _cofi = get_field(LF_ANAG,"PAIV"); if (_pr_what == anafis) { _surname = _name.mid(30); _surname.trim(); _name = _name.cut(30); _name.trim(); _sex = get_field(LF_ANAGFIS,"SESSO")[0] == 'M' ? TR("Sig.") : TR("Sig.ra"); } switch (_ind_what) { case corrispondenza: _address = get_field(LF_ANAG,"INDCORR"); _civ = get_field(LF_ANAG,"CIVCORR"); _stato = look_tab("%STA",get_field(LF_ANAG,"STATOCORR")); _cap = get_field(LF_ANAG,"CAPCORR"); _loc = get_field(LF_ANAG,"LOCCORR"); _com = cc.get("DENCOM"); _prov = cc.get("PROVCOM"); if (_cap.empty()) _cap = cc.get("CAPCOM"); if (!_address.empty()) break; // else fall down case domfisc: _address = get_field(LF_ANAG,"INDRF"); _civ = get_field(LF_ANAG,"CIVRF"); _stato = "" ; // look_tab("%STA",get_field(LF_ANAG,"STATORF")); _cap = get_field(LF_ANAG,"CAPRF"); look_com(get_field(LF_ANAG,"COMRF")); _loc = ""; _com = cc.get("DENCOM"); _prov = cc.get("PROVCOM"); if (_cap.empty()) _cap = cc.get("CAPCOM"); if (!_address.empty()) break; // else fall down case residenza: _address = get_field(LF_ANAG,"INDRES"); _civ = get_field(LF_ANAG,"CIVRES"); _stato = get_field(LF_ANAG,"STATORES"); _cap = get_field(LF_ANAG,"CAPRES"); look_com(get_field(LF_ANAG,"COMRES"), _stato); _loc = ""; _com = cc.get("DENCOM"); _prov = cc.get("PROVCOM"); if (_cap.empty()) _cap = cc.get("CAPCOM"); break; } } void TAnaprint_app::init_print() { reset_print(); reset_files(); // select cursor and main file switch(_pr_what) { case anafis: select_cursor(cfis()); add_file(LF_ANAG); break; case anagiu: select_cursor(cgiu()); add_file(LF_ANAG); break; case nditte: select_cursor(cdit()); add_file(LF_NDITTE); break; } force_setpage(_pr_type == schede); // setup secondary links if (_inclditte) { switch(_pr_type) { case elenco: if (_pr_what != nditte) add_file(LF_NDITTE); break; case schede: if (_pr_what != nditte) add_file(LF_NDITTE); add_file(LF_ATTIV,LF_NDITTE); add_file(LF_UNLOC,LF_NDITTE); add_file(LF_SOCI, LF_NDITTE); break; default: break; } } set_headers(); set_footers(); } bool TAnaprint_app::set_print(int) { TMask mask("ba6100a.msk"); // set print type switch (mask.run()) { case K_ESC: case K_QUIT: return FALSE; case BUT_BA6_ELENCO: _pr_type = elenco; // cio' che e' blu collega al modulo anagrafiche _ana_link = enable_link(TR("Collegamento archivio anagrafiche: "), 'b'); _dit_link = enable_link(TR("Collegamento archivio ditte: "), 'v'); break; case BUT_BA6_SCHEDE: disable_links(); _pr_type = schede; break; case BUT_BA6_ETICHETTE: disable_links(); if (_pr_what != nditte) { _pr_type = etichette; // set additionals TMask mask2("ba6100b.msk"); mask2.set_workfile("ba6100.set"); mask2.set_handler(BUT_BA6B_RESET, mask_reset_fields); if (fexist("ba6100b.set")) { mask2.load(); _ind_what = (in)mask2.get_int(RDB_BA6B_INDIR); _ind_row = mask2.get_int(FLD_BA6B_INDROW); _piv_row = mask2.get_int(FLD_BA6B_PIVROW); _cod_row = mask2.get_int(FLD_BA6B_CODROW); _rows_et = mask2.get_int(FLD_BA6B_TOTROW); _ind_col = mask2.get_int(FLD_BA6B_INDCOL); _piv_col = mask2.get_int(FLD_BA6B_PIVCOL); _cod_col = mask2.get_int(FLD_BA6B_CODCOL); _cols_et = mask2.get_int(FLD_BA6B_TOTCOL); _is_piv = mask2.get(CHK_BA6B_PIVA) == "X"; _is_cod = mask2.get(CHK_BA6B_CODICE) == "X"; } else { mask2.set(FLD_BA6B_INDROW,_ind_row); mask2.set(FLD_BA6B_INDCOL,_ind_col); mask2.set(FLD_BA6B_PIVROW,_piv_row); mask2.set(FLD_BA6B_PIVCOL,_piv_col); mask2.set(FLD_BA6B_CODROW,_cod_row); mask2.set(FLD_BA6B_CODCOL,_cod_col); mask2.set(FLD_BA6B_TOTROW,_rows_et); mask2.set(FLD_BA6B_TOTCOL,_cols_et); mask2.set(CHK_BA6B_PIVA,_is_piv ? "X" : " "); mask2.set(CHK_BA6B_CODICE,_is_cod ?"X": " "); } if (mask2.run() == K_ESC) return FALSE; _ind_what = (in)mask2.get_int(RDB_BA6B_INDIR); _ind_row = mask2.get_int(FLD_BA6B_INDROW); _piv_row = mask2.get_int(FLD_BA6B_PIVROW); _cod_row = mask2.get_int(FLD_BA6B_CODROW); _rows_et = mask2.get_int(FLD_BA6B_TOTROW); _ind_col = mask2.get_int(FLD_BA6B_INDCOL); _piv_col = mask2.get_int(FLD_BA6B_PIVCOL); _cod_col = mask2.get_int(FLD_BA6B_CODCOL); _cols_et = mask2.get_int(FLD_BA6B_TOTCOL); _is_piv = mask2.get(CHK_BA6B_PIVA) == "X"; _is_cod = mask2.get(CHK_BA6B_CODICE) == "X"; if (_frpos) delete _frpos; _frpos = new bool[_rows_et]; memset(_frpos,FALSE,sizeof(_frpos)); _frpos[_ind_row-1] = TRUE; _frpos[_ind_row] = TRUE; if (_is_piv) _frpos[_piv_row-1] = TRUE; if (_is_cod) _frpos[_cod_row-1] = TRUE; for (int jk = 0; jk < _rows_et; jk++) if (!_frpos[jk]) set_row(jk+1,""); // save settings if (mask2.get(CHK_BA6B_SAVE) == "X") mask2.save(); } break; case BUT_BA6_RUBRICHE: _ana_link = enable_link(TR("Collegamento archivio anagrafiche: "), 'b'); _dit_link = enable_link(TR("Collegamento archivio ditte: "), 'v'); _pr_type = rubriche; break; } _pr_what = (pw)atoi(mask.get(RDB_BA6_TYPE)); _sort = atoi(mask.get(RDB_BA6_SORT)); _inclditte = (bool)(mask.get(CHK_BA6_INCLDI) == "X"); TString cod_from(5), cod_to(5); switch(_pr_what) { case anafis: case anagiu: select_cursor(_pr_what == anafis ? cfis() : cgiu()); if (_sort == 1) { cod_from = mask.get(_pr_what == anafis ? FLD_ANF_CODFR : FLD_ANG_CODFR); cod_to = mask.get(_pr_what == anafis ? FLD_ANF_CODTO : FLD_ANG_CODTO); } else { cod_from = mask.get(_pr_what == anafis ? FLD_ANF_RAGSOCFR : FLD_ANG_RAGSOCFR); cod_to = mask.get(_pr_what == anafis ? FLD_ANF_RAGSOCTO : FLD_ANG_RAGSOCTO); } { TLocalisamfile& fl = current_cursor()->file(LF_ANAG); TRectype tr1(fl.curr()); TRectype tr2(fl.curr()); tr1.zero(); tr2.zero(); tr1.put("TIPOA", _pr_what == anafis ? "F" : "G"); tr2.put("TIPOA", _pr_what == anafis ? "F" : "G"); if (!cod_from.empty() || !cod_to.empty()) { if (_sort == 1) { if (cod_from.not_empty()) { tr1.put("CODANAGR",cod_from); tr2.put("CODANAGR",cod_to); } } else { if (cod_from.not_empty()) { tr1.put("RAGSOC",cod_from); tr2.put("RAGSOC",cod_to); } } } current_cursor()->setregion(tr1, tr2); } break; case nditte: select_cursor(cdit()); if (_sort == 1) { cod_from = mask.get(FLD_DITTE_CODFR); cod_to = mask.get(FLD_DITTE_CODTO); } else { cod_from = mask.get(FLD_DITTE_RAGSOCFR); cod_to = mask.get(FLD_DITTE_RAGSOCTO); } if (!cod_from.empty() || !cod_to.empty()) { TLocalisamfile& fl = current_cursor()->file(LF_NDITTE); TRectype tr1(fl.curr()); TRectype tr2(fl.curr()); tr1.zero(); tr2.zero(); if (_sort == 1) { tr1.put("CODDITTA",cod_from); tr2.put("CODDITTA",cod_to); } else { tr1.put("RAGSOC",cod_from); tr2.put("RAGSOC",cod_to); } current_cursor()->setregion(tr1, tr2); } break; } // setup links and set headers init_print(); // enable_print_menu(); return TRUE; } bool TAnaprint_app::user_create() { _bk_ditta = _bk_ana = _bk_socio = _bk_attiv = _bk_registro = _bk_unloc = -1; TToken_string rxp(40); TProgind p(5, TR("Preparazione archivi\rPrego attendere"), FALSE, TRUE); // setup relation open_files(LF_COMUNI, LF_ANAG, LF_ANAGFIS, LF_ANAGGIU, LF_NDITTE, 0); _rel_fis = new TRelation(LF_ANAG); _rel_giu = new TRelation(LF_ANAG); _rel_dit = new TRelation(LF_NDITTE); p.addstatus(1); rxp.add("CODANAGR==CODANAGR"); _rel_fis->add(LF_ANAGFIS,rxp); _rel_giu->add(LF_ANAGGIU,rxp); rxp.add("TIPOA==TIPOA"); _rel_fis->add(LF_NDITTE, rxp, 4); _rel_giu->add(LF_NDITTE, rxp, 4); _rel_dit->add(LF_ANAG, rxp); p.addstatus(1); // add unloc & attiv rxp = "CODDITTA==CODDITTA"; _rel_fis->add(LF_ATTIV, rxp, 1, LF_NDITTE); _rel_fis->add(LF_UNLOC, rxp, 1, LF_NDITTE); _rel_giu->add(LF_ATTIV, rxp, 1, LF_NDITTE); _rel_giu->add(LF_UNLOC, rxp, 1, LF_NDITTE); _rel_dit->add(LF_ATTIV, rxp, 1); _rel_dit->add(LF_UNLOC, rxp, 1); _rel_fis->add(LF_SOCI, rxp, 4, LF_NDITTE); _rel_giu->add(LF_SOCI, rxp, 4, LF_NDITTE); _rel_dit->add(LF_SOCI, rxp, 4); p.addstatus(1); _cfis1 = add_cursor(new TCursor(_rel_fis, "", 1)); _cgiu1 = add_cursor(new TCursor(_rel_giu, "", 1)); _cdit1 = add_cursor(new TCursor(_rel_dit, "", 1)); _cfis2 = add_cursor(new TCursor(_rel_fis, "", 2)); _cgiu2 = add_cursor(new TCursor(_rel_giu, "", 2)); _cdit2 = add_cursor(new TCursor(_rel_dit, "", 2)); p.addstatus(1); // set translated field values set_translation(LF_ANAGFIS,"STATCIV","1",TR("Celibe/Nubile")); set_translation(LF_ANAGFIS,"STATCIV","2",TR("Coniugato/a")); set_translation(LF_ANAGFIS,"STATCIV","3",TR("Vedovo/a")); set_translation(LF_ANAGFIS,"STATCIV","4",TR("Separato/a")); set_translation(LF_ANAGFIS,"STATCIV","5",TR("Divorziato/a")); set_translation(LF_ANAGFIS,"STATCIV","6",TR("Deceduto/a")); set_translation(LF_ANAGFIS,"STATCIV","7",TR("Tutelato/a")); set_translation(LF_ANAGFIS,"STATCIV","8",TR("Figlio/a minore")); set_translation(LF_ANAGFIS,"TITSTU", "1" ,TR("Nessuno")); set_translation(LF_ANAGFIS,"TITSTU", "2" ,TR("Lic. Elem.")); set_translation(LF_ANAGFIS,"TITSTU", "3" ,TR("Lic. Media")); set_translation(LF_ANAGFIS,"TITSTU", "4" ,TR("Diploma")); set_translation(LF_ANAGFIS,"TITSTU", "5" ,TR("Laurea")); set_translation(LF_ANAGFIS,"SESSO", "M", TR("Maschio")); set_translation(LF_ANAGFIS,"SESSO", "F", TR("Femmina")); set_translation(LF_NDITTE,"FREQVIVA","M",TR("Mensile")); set_translation(LF_NDITTE,"FREQVIVA","T",TR("Trimestrale")); set_translation(LF_NDITTE,"DATLAV","1",TR("Si")); set_translation(LF_NDITTE,"DATLAV","2",TR("No")); set_translation(LF_NDITTE,"DATLAV","3",TR("Lavoro Agricolo")); set_translation(LF_ANAGGIU,"STATOSOC","1",TR("Normale attivita'")); set_translation(LF_ANAGGIU,"STATOSOC","2",TR("Liquidazione cessata attivita'")); set_translation(LF_ANAGGIU,"STATOSOC","3",TR("Fallimento o Liquidazione coatta amm.")); set_translation(LF_ANAGGIU,"STATOSOC","4",TR("Estinto")); set_translation(LF_ANAGGIU,"SITSOC","1",TR("Inizio")); set_translation(LF_ANAGGIU,"SITSOC","2",TR("Liquidazione")); set_translation(LF_ANAGGIU,"SITSOC","3",TR("Termine liquidazione")); set_translation(LF_ANAGGIU,"SITSOC","4",TR("Estinzione")); set_translation(LF_ANAGGIU,"SITSOC","5",TR("Trasf. IRPEG")); set_translation(LF_ANAGGIU,"SITSOC","6",TR("Normale")); set_fillchar('_'); set_wait_threshold(0); p.addstatus(1); return TRUE; } bool TAnaprint_app::user_destroy() { if (_rel_fis) delete _rel_fis; if (_rel_giu) delete _rel_giu; if (_rel_dit) delete _rel_dit; if (_frpos) delete _frpos; return TRUE; } int ba6100(int argc, char* argv[]) { TAnaprint_app app; app.run(argc, argv, TR("Stampa Anagrafiche")); return 0; }