#include #include #include #include #include #include #include #include #include "ba6100a.h" #include "ba6100b.h" #define M_SET_PRINTER MENU_FILE + 1100 #define M_PRINT MENU_FILE + 1101 #define MENU_TYPE MENU_FILE + 1102 enum pt { undefined = 0, elenco = 1, schede = 2, rubriche = 3, etichette = 4 }; enum pw { anafis = 0, anagiu = 1, nditte = 2 }; enum in { residenza = 1, domfisc = 2, corrispondenza = 3 }; bool mask_reset_fields(TMask_field& mf, KEY k); class BA6100_App : public TPrintapp { friend bool mask_reset_fields(TMask_field& mf, KEY k); pt _pr_type; pw _pr_what; TRelation* _rel_fis; TRelation* _rel_giu; TRelation* _rel_dit; int _cfis1, _cgiu1, _cdit1; int _cfis2, _cgiu2, _cdit2; int _sort; bool _inclditte; TLocalisamfile* _comuni; // settings etichette in _ind_what; int _ind_row, _ind_col, _rows_et, _cols_et; int _piv_row, _piv_col, _cod_row, _cod_col; bool _is_piv, _is_cod; bool* _frpos; public: virtual bool preprocess_page(int counter); virtual print_action postprocess_page(int counter); virtual bool preprocess_print(int counter); virtual void set_linked_print(int link); virtual bool create(); virtual bool destroy(); virtual bool set_print(); int cfis() { return _sort == 1 ? _cfis1 : _cfis2; } int cgiu() { return _sort == 1 ? _cgiu1 : _cgiu2; } int cdit() { return _sort == 1 ? _cdit1 : _cdit2; } TRectype& look_com(const char* cod); const char* look_tab(const char* tabname, const char* cod, const char* fld = "S0"); // bel casino, le schede void set_scheda_anagiu(); void set_scheda_anafis(); void set_scheda_ditta(); void set_scheda_attiv(); void set_scheda_registro(); void set_scheda_unloc(); void set_scheda_socio(); void preprocess_etichette(); // print_action postprocess_scheda_ditta(); const char* get_field(int ln, const char* fn) { return current_cursor()->curr(ln).get(fn); } void set_rows(); BA6100_App() : TPrintapp() { _rel_fis = _rel_giu = _rel_dit = NULL; _pr_type = undefined; _pr_what = anafis; _inclditte = FALSE; _more = FALSE; /* TBI leggi configurazione per etichette */ _ind_what = residenza; _rows_et = 9; _cols_et = 40; _is_piv = TRUE; _is_cod = FALSE; _piv_row = 7; _cod_row = 2; _ind_row = 3; _piv_col = _ind_col = 3; _cod_col = 6; _frpos = NULL; _to_skip = nothing; _was_match = TRUE; } }; TRectype& BA6100_App::look_com(const char* cod) { _comuni->curr().zero(); _comuni->curr().put("COM",cod); _comuni->read(); if (_comuni->bad()) _comuni->curr().zero(); return _comuni->curr(); } const char* BA6100_App::look_tab(const char* tabname, const char* 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 BA6100_App::preprocess_page(int counter) { if (_pr_type == rubriche) { // vale per ditte, anagiu, anafis reset_row(3); reset_row(4); TString com = current_cursor()->curr(LF_ANAG).get("COMRES"); if (com.empty()) com = current_cursor()->curr(LF_ANAG).get("COMRF"); TString phone = current_cursor()->curr(LF_ANAG).get("PTELRF"); phone.trim(); if (!phone.empty()) phone << '/'; phone << current_cursor()->curr(LF_ANAG).get("TELRF"); TRectype cc = look_com(com); TString a = cc.get("DENCOM"); TString b = cc.get("CAPCOM"); TString c = cc.get("PROVCOM"); set_row(3,"@32g%-24S CAP %5S PR %2S", (const char*)a, (const char *)b, (const char*)c); set_row(4,"@32gTel. %-36S", (const char *)phone); if (_pr_what == anagiu) set_row(4,"@56g Rif @12S", FLD(LF_ANAGGIU,"PERRIF")); } else if (_pr_type == etichette) preprocess_etichette(); return TRUE; } void BA6100_App::set_linked_print(int link) { if (_pr_type == elenco && link == LF_NDITTE) { reset_row(1); set_row(1,"@55g@pN@5j@50S", FLD(LF_NDITTE,"CODDITTA","@@@@"), FLD(LF_NDITTE,"RAGSOC")); } else if (_pr_type == schede) switch(link) { case LF_NDITTE: set_scheda_ditta(); break; case LF_ } } print_action BA6100_App::postprocess_page(int counter) { if (_pr_type == elenco) { switch(_pr_what) { case anafis: case anagiu: reset_row(1); // resetta e stampa solo la ditta // del caSo if (current_cursor()->file(LF_NDITTE)->good() && _was_match) { return REPEAT_PAGE; } else { if (_pr_what == anafis) set_row(1,"@pn@3j@S @S@55g@pN@S", FLD(LF_ANAG,"CODANAGR","@@@@@"), FLD(LF_ANAG,"RAGSOC",0,29), FLD(LF_ANAG,"RAGSOC",30,50), FLD(LF_NDITTE,"CODDITTA","#####"), FLD(LF_NDITTE,"RAGSOC")); else set_row(1,"@pN@3j@50S@55g@pN@S", FLD(LF_ANAG,"CODANAGR","@@@@@"), FLD(LF_ANAG,"RAGSOC"), FLD(LF_NDITTE,"CODDITTA","#####"), FLD(LF_NDITTE,"RAGSOC")); return NEXT_PAGE; } break; case nditte: break; } } else if (_pr_type == schede) { if ((_pr_what == anagiu && _inclditte) || (_pr_what == anafis && _inclditte)) { if (_to_skip != nothing) _was_match = current_cursor()->next_match(_to_skip); // stampata l'anagrafica deve stampare tutte le ditte, e // per ciascuna tutte le unita' locali ecc. if (!_more && current_cursor()->file(LF_NDITTE)->good() && _was_match) { set_scheda_ditta(); _more = TRUE; return REPEAT_PAGE; } if (_more) { postprocess_scheda_ditta(); return REPEAT_PAGE; } if (!_more) { if (_pr_what == anafis) set_scheda_anafis(); else set_scheda_anagiu(); _to_skip = nothing; _was_match = TRUE; return NEXT_PAGE; } } else if (_pr_what == nditte) return postprocess_scheda_ditta(); } return NEXT_PAGE; } print_action BA6100_App::postprocess_scheda_ditta() { if (current_cursor()->file(LF_ATTIV)->good() && _was_match) { set_scheda_attiv(); _to_skip = attiv; return REPEAT_PAGE; } else if (current_cursor()->file(LF_UNLOC)->good() && _was_match) { set_scheda_unloc(); _to_skip = unloc; return REPEAT_PAGE; } // idem per libri sociali (TBI) else { set_scheda_ditta(); _was_match = current_cursor()->next_match(LF_NDITTE); _to_skip = nothing; _more = FALSE; } return NEXT_PAGE; } bool mask_ctrl_handler(TMask_field& mf, KEY k) { if (k == K_SPACE) mf.mask().stop_run(mf.dlg()); return TRUE; } bool mask_reset_fields(TMask_field& mf, KEY k) { if (k == K_SPACE) { BA6100_App* a = (BA6100_App*)MainApp(); mf.mask().field(FLD_BA6B_INDROW).set(format("%d",a->_ind_row)); mf.mask().field(FLD_BA6B_INDCOL).set(format("%d",a->_ind_col)); mf.mask().field(FLD_BA6B_PIVROW).set(format("%d",a->_piv_row)); mf.mask().field(FLD_BA6B_PIVCOL).set(format("%d",a->_piv_col)); mf.mask().field(FLD_BA6B_CODROW).set(format("%d",a->_cod_row)); mf.mask().field(FLD_BA6B_CODCOL).set(format("%d",a->_cod_col)); mf.mask().field(FLD_BA6B_TOTROW).set(format("%d",a->_rows_et)); mf.mask().field(FLD_BA6B_TOTCOL).set(format("%d",a->_cols_et)); mf.mask().field(CHK_BA6B_PIVA).set(a->_is_piv ? "X" : " "); mf.mask().field(CHK_BA6B_CODICE).set(a->_is_cod ?"X": " "); } return TRUE; } // le quattro che seguono vengono chiamate se necessario ad ogni // pagina stampata void BA6100_App::set_scheda_anagiu() { reset_print(); set_row(1,"SCHEDA SOCIETA'"); set_row(2,""); set_row(3,"@bCodice@r@15g@u@pn@25g@r@bRag.Sociale @r@u@50s", FLD(LF_ANAG,"CODANAGR","@@@@@"), FLD(LF_ANAG,"RAGSOC")); set_row(4,"@25g@bEvent. sigla@r@40g@u@20s", FLD(LF_ANAGGIU,"SIGLA")); set_row(5,"Oggetto soc.@15g@60s", FLD(LF_ANAGGIU,"OGGSOC")); set_row(6,"Codice Fiscale@20g@16s@46gPartita IVA @12s", FLD(LF_ANAG,"COFI"), FLD(LF_ANAG,"PAIV")); set_row(7,"Riferimento@15g@20s", FLD(LF_ANAGGIU,"PERRIF")); set_row(8,""); set_row(9,"Sede legale@20gIndirizzo @35s", FLD(LF_ANAG,"INDRES")); TString com = current_cursor()->curr(LF_ANAG).get("COMRES"); TRectype& cc = look_com(com); TString a = cc.get("DENCOM"); TString b = cc.get("CAPCOM"); TString c = cc.get("PROVCOM"); set_row(10,"@20gComune %-24s@53gProvincia %2s@68gCAP %5s", (const char*)a, (const char*)c, (const char*)b ); set_row(11,"@20gTelefono @u@10s@r/@u@30s@r", FLD(LF_ANAG,"PTELRF"), FLD(LF_ANAG,"TELRF")); set_row(12,""); set_row(13,"Domicilio fiscale@20gIndirizzo @35s", FLD(LF_ANAG,"INDRF")); com = current_cursor()->curr(LF_ANAG).get("COMRF"); cc = look_com(com); a = cc.get("DENCOM"); b = cc.get("CAPCOM"); c = cc.get("PROVCOM"); set_row(14,"@20gComune %-24s@53gProvincia %2s@68gCAP %5s", (const char*)a, (const char*)c, (const char*)b ); set_row(15,""); set_row(16,"Corrispondenza@20gIndirizzo @35s", FLD(LF_ANAG,"INDCORR")); com = current_cursor()->curr(LF_ANAG).get("COMCORR"); cc = look_com(com); a = cc.get("DENCOM"); b = cc.get("CAPCOM"); c = cc.get("PROVCOM"); set_row(17,"@20gComune %-24s@53gProvincia %2s@68gCAP %5s", (const char*)a, (const char*)c, (const char*)b ); com = current_cursor()->curr(LF_ANAG).get("STATOCORR"); if (com.empty()) a = "Italia"; else { a = look_tab("%STA",com,"S0"); } set_row(18,"@20gStato %s",(const char*)a); set_row(19,""); set_row(20,"Telex@20g@u@10s@r/@u@30s@r", FLD(LF_ANAG,"PTLEXRF"), FLD(LF_ANAG,"TLEXRFX")); set_row(21,"Telefax@20g@u@10s@r/@u@30s@r", FLD(LF_ANAG,"PFAXRF"), FLD(LF_ANAG,"FAXRF")); set_row(22,""); set_row(23,"Ufficio imposte@20gNumero @pn", FLD(LF_ANAG,"UFFIIDD","@@@")); com = current_cursor()->curr(LF_ANAG).get("UFFIIDD"); a = look_tab("%UID",com,"S6"); c = look_tab("%UID",com,"S4"); cc = look_com(a); a = cc.get("DENCOM"); b = cc.get("PROVCOM"); set_row(24,"@20gComune %-24s@53gProvincia %2s", (const char*)a, (const char*)b); set_row(25,""); set_row(26,"Esattoria@20gC/C n. %-20s",(const char*)c); set_row(27,"@20gComune %-24s@53gProvincia %2s", (const char*)a, (const char*)b); set_row(28,"@20gCodice contribuente @10s", FLD(LF_ANAG,"CODCONTR")); set_row(29,""); set_row(30,""); // dati atto costitutivo etc set_row(31,"Dati atto costitutivo e statuto"); set_row(32,""); set_row(33,"Estremi@20g@60s", FLD(LF_ANAGGIU,"ESTROMOL")); set_row(34,"Omologa@25g@ld@41gData iscrizione@70g@ld", FLD(LF_ANAGGIU,"DATAOMOL"), FLD(LF_ANAGGIU,"DATAISCRIZ")); set_row(35,"Data costituzione@25g@ld@41gDurata sino@70g@ld", FLD(LF_ANAGGIU,"DATACOST"), FLD(LF_ANAGGIU,"DATASCAD")); set_row(36,"Termine appr. bilancio@25g@d@41gApprovazione bilancio@70g@d", FLD(LF_ANAGGIU,"DATATAPPBI"), FLD(LF_ANAGGIU,"DATAAPPBIL")); set_row(37,"Scad.org.amministrativo@25g@d@41gScadenza collegio " "sindacale@70g@d", FLD(LF_ANAGGIU,"DATASORAMM"), FLD(LF_ANAGGIU,"DATASCSIND")); // set_row(38,"Fine esercizio@25g@d", FLD(LF_ANAGGIU,"???")); set_row(39,""); set_row(40,"@5gCapit.sociale@24gCapit.versato@47g" "Fatturato@65gN.azioni@74gValore"); set_row(41,"@pn @pn @pn @61g@n @pn", FLD(LF_ANAGGIU,"CAPSOC","###.###.###.###.###"), FLD(LF_ANAGGIU,"CAPVER","###.###.###.###.###"), FLD(LF_ANAGGIU,"FATT","###.###.###.###.###"), FLD(LF_ANAGGIU,"NAZIONI"), FLD(LF_ANAGGIU,"VALNOM","###.###.###.###")); set_row(42,""); set_row(43,"Dati Statistici@20gNon residente@61g@f", FLD(LF_ANAG,"SOGGNRES")); set_row(44,"@20gEventi naturali eccezionali@61g@s", FLD(LF_ANAG,"EVECC")); set_row(45,"@20gResidente in zone terremotate@61g@f", FLD(LF_ANAG,"RESZTERR")); // *TBI* traduzione natura giuridica set_row(46,"@20gNatura giuridica@61g@s", FLD(LF_ANAGGIU,"NATGIU")); set_row(47,"@20gStato societa'@51g@20,rt", FLD(LF_ANAGGIU,"STATOSOC")); set_row(48,"@20gSituazione societa'@51g@20,rt", FLD(LF_ANAGGIU,"SITSOC")); set_row(49,""); a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT1"),"S0"); set_row(50,"@20gSigla stat.1 @pn %-50s", FLD(LF_ANAG,"CODSTAT1","@@@@@@@"), (const char*)a); a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT2"),"S0"); set_row(51,"@20gSigla stat.2 @pn %-50s", FLD(LF_ANAG,"CODSTAT2","@@@@@@@"), (const char*)a); a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT3"),"S0"); set_row(52,"@20gSigla stat.3 @pn %-50s", FLD(LF_ANAG,"CODSTAT3","@@@@@@@"), (const char*)a); // NOTE set_row(53,""); set_row(54,"Note attivato storico"); set_row(55,"@6g@70s",FLD(LF_ANAGGIU,"NOTE1")); set_row(56,"@6g@70s",FLD(LF_ANAGGIU,"NOTE2")); set_row(57,"@6g@70s",FLD(LF_ANAGGIU,"NOTE3")); set_row(58,"@6g@70s",FLD(LF_ANAGGIU,"NOTE4")); set_row(59,"@6g@70s",FLD(LF_ANAGGIU,"NOTE5")); for (int i = 60; i <= printer().formlen(); i++) set_row(i, ""); } void BA6100_App::set_scheda_anafis() { reset_print(); set_row(1,"SCHEDA PERSONA FISICA"); set_row(2,""); set_row(3,"@bCodice @r@u@pn@20g@r@bCognome @r@u@S", FLD(LF_ANAG,"CODANAGR","@@@@@"), FLD(LF_ANAG,"RAGSOC",0,29)); set_row(4,"@20g@bNome @r@u@s", FLD(LF_ANAG,"RAGSOC",30,50)); set_row(5,""); set_row(6,"Codice Fiscale@20g@s@46gPartita IVA @s", FLD(LF_ANAG,"COFI"), FLD(LF_ANAG,"PAIV")); set_row(7,"Data di nascita@20g@ld@32g@t@46gNazionalita' @s", FLD(LF_ANAGFIS,"DATANASC"), FLD(LF_ANAGFIS,"SESSO"), FLD(LF_ANAGFIS,"NAZION")); set_row(8,""); set_row(9,"Residenza@20gIndirizzo @s", FLD(LF_ANAG,"INDRES")); TString com = current_cursor()->curr(LF_ANAG).get("COMRES"); TRectype& cc = look_com(com); TString a = cc.get("DENCOM"); TString b = cc.get("CAPCOM"); TString c = cc.get("PROVCOM"); set_row(10,"@20gComune %s@53gProvincia %s@68gCAP %s", (const char*)a, (const char*)c, (const char*)b ); set_row(11,"@20gTelefono @u@s@r/@u@s@r", FLD(LF_ANAG,"PTELRF"), FLD(LF_ANAG,"TELRF")); set_row(12,""); set_row(13,"Domicilio fiscale@20gIndirizzo @s", FLD(LF_ANAG,"INDRF")); com = current_cursor()->curr(LF_ANAG).get("COMRF"); cc = look_com(com); a = cc.get("DENCOM"); b = cc.get("CAPCOM"); c = cc.get("PROVCOM"); set_row(14,"@20gComune %s@53gProvincia %s@68gCAP %s", (const char*)a, (const char*)c, (const char*)b ); set_row(15,""); set_row(16,"Corrispondenza@20gIndirizzo @s", FLD(LF_ANAG,"INDCORR")); com = current_cursor()->curr(LF_ANAG).get("COMCORR"); cc = look_com(com); a = cc.get("DENCOM"); b = cc.get("CAPCOM"); c = cc.get("PROVCOM"); set_row(17,"@20gComune %s@53gProvincia %s@68gCAP %s", (const char*)a, (const char*)c, (const char*)b ); com = current_cursor()->curr(LF_ANAG).get("STATOCORR"); if (com.empty()) a = "Italia"; else { a = look_tab("%STA",com,"S0"); } set_row(18,"@20gStato %s",(const char*)a); set_row(19,""); set_row(20,"Telex@20g@u@s@r/@u@s@r", FLD(LF_ANAG,"PTLEXRF"), FLD(LF_ANAG,"TLEXRFX")); set_row(21,"Telefax@20g@u@s@r/@u@s@r", FLD(LF_ANAG,"PFAXRF"), FLD(LF_ANAG,"FAXRF")); set_row(22,""); set_row(23,"Ufficio imposte@20gNumero @pn", FLD(LF_ANAG,"UFFIIDD","@@@")); com = current_cursor()->curr(LF_ANAG).get("UFFIIDD"); a = look_tab("%UID",com,"S6"); c = look_tab("%UID",com,"S4"); cc = look_com(a); a = cc.get("DENCOM"); b = cc.get("PROVCOM"); set_row(24,"@20gComune %s@53gProvincia %s", (const char*)a, (const char*)b); set_row(25,""); set_row(26,"Esattoria@20gC/C n. %s",(const char*)c); set_row(27,"@20gComune %s@53gProvincia %s", (const char*)a, (const char*)b); set_row(28,"@20gCodice contribuente @s", FLD(LF_ANAG,"CODCONTR")); set_row(29,""); // cerca coniuge com = current_cursor()->curr(LF_ANAGFIS).get("CODCONIUGE"); TLocalisamfile* af = current_cursor()->file(LF_ANAG); TRecnotype last = af->recno(); af->curr().zero(); int k = af->getkey(); af->setkey(1); af->curr().put("CODANAGR",com); a = af->curr().get("RAGSOC"); b = a.sub(25); a = a.left(25); set_row(30,"Coniuge @pn@20gCognome %s", FLD(LF_ANAGFIS,"CODCONIUGE","@@@@@"), (const char*)a); set_row(31,"@20gNome %s", (const char*)b); af->setkey(k); af->readat(last); set_row(32,"Dati Statistici@20gNon residente@61g@f", FLD(LF_ANAG,"SOGGNRES")); set_row(33,"@20gEventi naturali eccezionali@61g@s", FLD(LF_ANAG,"EVECC")); set_row(34,"@20gResidente in zone terremotate@61g@f", FLD(LF_ANAG,"RESZTERR")); set_row(35,"@20gStato civile@61g@t", FLD(LF_ANAGFIS,"STATCIV")); set_row(36,"@20gData variazione stato civile@56g@d", FLD(LF_ANAGFIS,"DVARSCIV")); set_row(37,"@20gTitolo di studio@61g@t", FLD(LF_ANAGFIS,"TITSTU")); // set_row(37,"@20gProvincia lavoro dipendente@61g@s"); set_row(38,""); set_row(39,""); set_row(40,""); set_row(41,""); a = look_tab("%SST", current_cursor()->curr(LF_ANAG).get("CODSTAT1"),"S0"); set_row(42,"@20gSigla stat.1 @pn %s", FLD(LF_ANAG,"CODSTAT1","@@@@@@@"), (const char*)a); a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT2"),"S0"); set_row(43,"@20gSigla stat.2 @pn ", FLD(LF_ANAG,"CODSTAT2","@@@@@@@"), (const char*)a); a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT3"),"S0"); set_row(44,"@20gSigla stat.3 @pn ", FLD(LF_ANAG,"CODSTAT3","@@@@@@@"), (const char*)a); for (int i = 45; i <= printer().formlen(); i++) set_row(i, ""); } void BA6100_App::set_scheda_ditta() { reset_print(); set_row(1,"@bSCHEDA DITTA @r@u@pn@r@20g@bDenominaz. sociale @r@u@s", FLD(LF_NDITTE,"CODDITTA","@@@@@"), FLD(LF_NDITTE,"RAGSOC")); set_row(2,"Albo artigiani@20gIscrizione all'albo @f@55gnum. @s", FLD(LF_NDITTE,"ARTIG"), FLD(LF_NDITTE,"NISCRAA")); TString a = look_com(current_cursor()->curr(LF_NDITTE).get("COMAA")).get("DENCOM"); set_row(3,"@20gLocalita' %s@55gData @d", (const char*)a, FLD(LF_NDITTE,"DATAISCRAA")); set_row(4,"Attivita'"); set_row(5,"prevalente@20gCod. @pn Desc. %s", FLD(LF_NDITTE,"CODATTPREV","@@@@@"), look_tab("%AIS",current_cursor()->curr(LF_NDITTE).get("CODATTPREV"), "S0")); // set_row(6,"@20gGestione piu' attivita'"); set_row(6,"@20gFrequenza versamenti@54g@t", FLD(LF_NDITTE,"FREQVIVA")); set_row(7,"@20gTenuta contabilita' ordinaria@54g@f", FLD(LF_NDITTE,"CONTORD")); set_row(8,"@20gDatore di lavoro@54g@t", FLD(LF_NDITTE,"DATLAV")); set_row(9,"@20gData inizio attivita'@54g@d", FLD(LF_NDITTE,"DINIZIOATT")); set_row(10,"Altri dati@20gRiferimento @u@s@r @55gTel. @u@s@r/@u@s@r", FLD(LF_NDITTE,"PERRIF"), FLD(LF_NDITTE,"PTEL"), FLD(LF_NDITTE,"TEL")); set_row(11,"@20gGestione magazzino @f", FLD(LF_NDITTE,"REGMAG")); set_row(12,"@20gNumero unita' locali @n@55gNum.enasarco @s", FLD(LF_NDITTE,"NULC"), FLD(LF_NDITTE,"NENASARCO")); set_row(13,""); /* TBI: banca di appoggio */ set_row(14,"Stato@20g@t",FLD(LF_NDITTE,"STATOSOC")); set_row(15,""); set_row(16,""); } void BA6100_App::set_scheda_attiv() { reset_print(); set_row(1,"@bATTIVITA'@r @pn@20g@bDescrizione:@r %s", FLD(LF_ATTIV,"CODATT","@@@@@"), look_tab("%AIS",current_cursor()->curr(LF_ATTIV).get("CODATT"), "S0")); set_row(2,"@20gRegime agricolo@67g@f", FLD(LF_ATTIV,"REGAGR")); set_row(3,"@20gRegime speciale agenzie di viaggio (art.74ter)@67g@f", FLD(LF_ATTIV,"REG74TER")); set_row(4,"@20gAttivita' stagionale@67g@f", FLD(LF_ATTIV,"ATTSTAG")); set_row(5,"@20gAttivita' esercitata in piu' luoghi@67g@f", FLD(LF_ATTIV,"ESLUOGHID")); set_row(6,"@20gData inizio attivita'@60g@d", FLD(LF_NDITTE,"DINIZIOATT")); set_row(7,"@20gData variazione attivita'@60g@d", FLD(LF_ATTIV,"DATAVARIVA")); set_row(8,"@20gData cessazione attivita'@60g@d", FLD(LF_ATTIV,"DCESSATT")); set_row(9,"@20g@bCONSERVAZIONE SCRITTURE CONTABILI@r"); // cerca depositario TString com = get_field(LF_ATTIV,"CODANGRDS"); TString a = get_field(LF_ATTIV,"TIPOADS"); TLocalisamfile* af = current_cursor()->file(LF_ANAG); TRecnotype last = af->recno(); af->curr().zero(); int k = af->getkey(); af->setkey(1); af->curr().put("CODANAGR",com); af->curr().put("TIPOA",a); TString b = af->curr().get("RAGSOC"); com = af->curr().get("INDRF"); if (com.empty()) com = af->curr().get("INDRES"); TString c = af->curr().get("COMRF"); if (c.empty) c = af->curr().get("COMRES"); TRectype& cm = look_com(a); af->readat(last); af->setkey(k); set_row(10,"Depositario@20gCodice @pn (%s): %s", FLD(LF_ATTIV,"CODANGRDS"), c == 'F' ? "p.f." : "p.g.", (const char*)b); set_row(11,"@20gIndirizzo %s", (const char*)c); a = cm.get("DENCOM"); b = cm.get("PROVCOM"); c = cm.get("CAPCOM"); set_row(12,"@20gComune %s@53gProvincia %s@68gC.a.p. %s", (const char*)a, (const char*)b, (const char*)c); set_row(13,"@20gTenuta scritture parziali@68g@f", FLD(LF_ATTIV,"TSCRPARZ")); set_row(14,"Luogo@20gIndirizzo @s @s", FLD(LF_ATTIV,"INDCS"), FLD(LF_ATTIV,"CAPCS")); cm = look_com(get_field(LF_ATTIV,"COMCS")); set_row(15,"@20gComune %s@53gProvincia %s@68gC.a.p. %s"); set_row(16,"@20gTelefono "); set_row(17,""); set_row(18,""); } void BA6100_App::set_scheda_registro() { reset_print(); /* TBI */ } void BA6100_App::set_scheda_unloc() { reset_print(); set_row(1,"@bUNITA' LOCALE@20gCodice @r@u@pn@r", FLD(LF_UNLOC,"CODULC","@@@")); set_row(2,"@20g@bIndirizzo@r@u@s@r@68g@bNumero @r@u@@s@", FLD(LF_UNLOC,"INDULC"), FLD(LF_UNLOC,"CIVULC")); TRectype& cc = look_com(get_field(LF_UNLOC,"COMULC")); TString a = cc.get("DENCOM"); TString b = cc.get("PROVCOM"); TString c = cc.get("CAPCOM"); set_row(3,"@20g@bComune@r@4j@u%s@r@53g@bProvincia@r @u%s@r@68g@b" "C.a.p.@r @u%s", (const char*)a, (const char*)b, (const char*)c); set_row(4,""); set_row(5,"C.C.I.A.A.@20gNumero@30g@pn", FLD(LF_UNLOC,"NUMCCIAA","@@@@@@@")); cc = look_com(get_field(LF_UNLOC,"COMCCIAA")); a = cc.get("DENCOM"); set_row(6,"@20gComune@30g%s@53gN. Meccanografico @n", (const char*)a, FLD(LF_UNLOC,"NUMMECC")); set_row(7,"@20gData iscrizione @d@48gData ultima variazione @d", FLD(LF_UNLOC,"DATAICCIAA"), FLD(LF_UNLOC,"DATAVCCIAA")); set_row(8,""); set_row(9,"Autorizzazioni@20gN. R.E.C. @30g@pn@41gComunale n. @pn " "PS n. @pn Altre @s", FLD(LF_UNLOC,"NUMREC","@@@@@@@"), FLD(LF_UNLOC,"AUTCOM","@@@@@"), FLD(LF_UNLOC,"AUTPS","@@@@@@@"), FLD(LF_UNLOC,"ALTAUT")); set_row(10,""); set_row(11,"Posizioni@20gINPS n.@30g@s INAIL n. @s", FLD(LF_UNLOC,"POSINPS"), FLD(LF_UNLOC,"POSINAIL")); set_row(12,""); set_row(13,"Tribunale@20gRegistro@30g@pn@44gVolume@52g@pn@64Fascicolo @pn", FLD(LF_UNLOC,"REGTRIB","@@@@@@@@@"), FLD(LF_UNLOC,"VOLTRIB","@@@@@@@"), FLD(LF_UNLOC,"FASCTRIB","@@@@@")); set_row(14,""); set_row(15,"Locali destinati"); set_row(16,"all'attivita'@20gMq.Locali @pn Di cui a magazzino @pn", FLD(LF_UNLOC,"MQULC","@@@@@"), FLD(LF_UNLOC,"MQULCMAG","@@@@@")); set_row(17,""); set_row(18,""); } void BA6100_App::preprocess_etichette() { int namerow = 0; TString cod, cofi, name, surname, address, cap, prov, com, civ, stato; // everything goes into strings name = get_field(LF_ANAG,"RAGSOC"); cod = get_field(LF_ANAG,"CODANAGR"); cofi = get_field(LF_ANAG,"COFI"); 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,50); surname.trim(); name = name.mid(0,30); name.trim(); } 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"); 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"); cc = look_com(get_field(LF_ANAG,"COMRF")); 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 = look_tab("%STA",get_field(LF_ANAG,"STATORES")); cap = get_field(LF_ANAG,"CAPRES"); cc = look_com(get_field(LF_ANAG,"COMRES")); com = cc.get("DENCOM"); prov = cc.get("PROVCOM"); if (cap.empty()) cap = cc.get("CAPCOM"); break; } if (_is_piv) { reset_row(_piv_row); set_row(_piv_row, TString(format("@%dg%%s", _piv_col)), (const char*)cofi); _frpos[_piv_row - 1] = TRUE; } if (_is_cod) { reset_row(_cod_row); set_row(_cod_row, TString(format("@%dg%%s", _cod_col)), (const char*)cod); _frpos[_cod_row - 1] = TRUE; } // name goes in first free row for (int i = 0; i < _rows_et; i++) { if (!_frpos[i]) { if (namerow == 0) namerow = i; } } namerow++; reset_row(namerow); if (_pr_what == anagiu) { reset_row (namerow); set_row(namerow,TString(format("@%dg%%s",_ind_col)), (const char*)name); } else { reset_row(namerow); set_row(namerow,TString(format("@%dg%%s %%s %%s",_ind_col)), get_field(LF_ANAGFIS,"SESSO") == "M" ? "Sig." : "Sig.ra", (const char*)name, (const char*)surname); } reset_row(_ind_row); reset_row(_ind_row+1); set_row(_ind_row,TString(format("@%dg%%s %%s", _ind_col)), (const char*)address, (const char*)civ); set_row(_ind_row+1, TString(format("@%dg%%s %%s %%s", _ind_col)), (const char*)cap, (const char*)com, (const char*)prov); if (!stato.empty()) { // print state on first free row for (i = _ind_row+1; i < _rows_et; i++) if (!_frpos[i] && i != (namerow - 1)) { reset_row(i+1); set_row(i+1, TString(format("@%dg%%s", _ind_col)), (const char*)stato); } } } // set invariant printrows void BA6100_App::set_rows() { TString sep(132); sep.fill('-'); reset_print(); reset_header(); if (_pr_type == elenco) { switch(_pr_what) { case anafis: case anagiu: set_header(1,"ELENCO PERSONE %s@82gStudio@96gData" "@101g @< @110g Pag. @#", _pr_what == anafis ? "FISICHE" : "GIURIDICHE"); set_header(2,(const char*)sep); set_header(3,"Codice@57gCodice"); set_header(4,"Anagr. Ragione sociale/cognome e nome@57gDitta" "@66gDenominazione sociale"); set_header(5,(const char*)sep); set_header(6,""); select_cursor(_pr_what == anafis ? cfis() : cgiu()); if (_pr_what == anafis) set_row(1,"@pN@4j@S @S@55g@pN@S", FLD(LF_ANAG,"CODANAGR","@@@@@"), FLD(LF_ANAG,"RAGSOC",0,29), FLD(LF_ANAG,"RAGSOC",30,50), FLD(LF_NDITTE,"CODDITTA","#####"), FLD(LF_NDITTE,"RAGSOC")); else set_row(1,"@pN@4j@50S@55g@pN@S", FLD(LF_ANAG,"CODANAGR","@@@@@"), FLD(LF_ANAG,"RAGSOC"), FLD(LF_NDITTE,"CODDITTA","#####"), FLD(LF_NDITTE,"RAGSOC")); break; case nditte: set_header(1,"ELENCO DITTE@82gStudio@96gData" "@101g @< @110 @#"); set_header(2,(const char*)sep); set_header(3,"Codice@50gT"); set_header(4,"Anagr. Denominazione sociale@50gP Codice" "@61gRagione sociale/Cognome e nome"); set_header(5,(const char*)sep); set_header(6,""); select_cursor(cdit()); set_row(1,"@pN@10g@S@50g@S@ @pN@3j@S", FLD(LF_NDITTE,"CODDITTA","@@@@"), FLD(LF_NDITTE,"RAGSOC"), FLD(LF_NDITTE,"TIPOA"), FLD(LF_ANAG, "CODANAGR", "@@@@@"), FLD(LF_ANAG, "RAGSOC")); break; } set_row(2,""); } else if (_pr_type == rubriche) { switch (_pr_what) { case anafis: case anagiu: set_header(1,"RUBRICA PERSONE %s@40gStudio@53gData @< pag. @#", _pr_what == anagiu ? "GIURIDICHE" : "FISICHE"); set_header(2,(const char*)sep); set_header(3,"Codice Cognome e nome"); set_header(4,(const char*)sep); set_header(5,""); select_cursor(_pr_what == anafis ? cfis() : cgiu()); if (_pr_what == anafis) set_row(1,"@b@pN@r@3j@S @S", FLD(LF_ANAG,"CODANAGR","@@@@@"), FLD(LF_ANAG,"RAGSOC",0,29), FLD(LF_ANAG,"RAGSOC",30,50)); else set_row(1,"@b@pN@r@4j@50S", FLD(LF_ANAG,"CODANAGR","@@@@@"), FLD(LF_ANAG,"RAGSOC")); set_row(2,"@32g@35S", FLD(LF_ANAG,"INDRES")); // 3 and 4 are page-dependent break; case nditte: set_header(1,"RUBRICA DITTE@40gStudio@53gData @< pag. @#"); set_header(2,(const char*)sep); set_header(3,"Codice Cognome e nome"); set_header(4,(const char*)sep); set_header(5,""); select_cursor(cdit()); set_row(1,"@b@pN@r@3j@50S", FLD(LF_NDITTE,"CODDITTA","@@@@@"), FLD(LF_NDITTE,"RAGSOC")); set_row(2,"@32g@s", FLD(LF_ANAG,"INDRES")); // 3 and 4 are page-dependent set_row(3,""); set_row(4,""); break; } set_row(5,""); } else if (_pr_type == schede) { switch(_pr_what) { case anafis: select_cursor(cfis()); set_scheda_anafis(); break; case anagiu: select_cursor(cgiu()); set_scheda_anagiu(); break; case nditte: select_cursor(cdit()); set_scheda_ditta(); break; } } else if (_pr_type == etichette) { select_cursor(_pr_what == anafis ? cfis() : cgiu()); for (int i = 2; i <= _rows_et; i++) set_row(i, ""); } } bool BA6100_App::set_print() { TMask mask("ba6100a.msk"); mask.set_handler(BUT_BA6_ELENCO, mask_ctrl_handler); mask.set_handler(BUT_BA6_SCHEDE, mask_ctrl_handler); mask.set_handler(BUT_BA6_ETICHETTE, mask_ctrl_handler); mask.set_handler(BUT_BA6_RUBRICHE, mask_ctrl_handler); mask.run(); // set print type switch (mask.last_key()) { case K_ESC: return FALSE; break; case BUT_BA6_ELENCO: _pr_type = elenco; break; case BUT_BA6_SCHEDE: _pr_type = schede; break; case BUT_BA6_ETICHETTE: _pr_type = etichette; if (_pr_what != nditte) { // set additionals TMask mask2("ba6100b.msk"); mask2.set_handler(BUT_BA6B_RESET, mask_reset_fields); mask2.field(FLD_BA6B_INDROW).set(format("%d",_ind_row)); mask2.field(FLD_BA6B_INDCOL).set(format("%d",_ind_col)); mask2.field(FLD_BA6B_PIVROW).set(format("%d",_piv_row)); mask2.field(FLD_BA6B_PIVCOL).set(format("%d",_piv_col)); mask2.field(FLD_BA6B_CODROW).set(format("%d",_cod_row)); mask2.field(FLD_BA6B_CODCOL).set(format("%d",_cod_col)); mask2.field(FLD_BA6B_TOTROW).set(format("%d",_rows_et)); mask2.field(FLD_BA6B_TOTCOL).set(format("%d",_cols_et)); mask2.field(CHK_BA6B_PIVA).set(_is_piv ? "X" : " "); mask2.field(CHK_BA6B_CODICE).set(_is_cod ?"X": " "); mask2.run(); _ind_what = (in)atoi(mask2.get(RDB_BA6B_INDIR)); _ind_row = atoi(mask2.get(FLD_BA6B_INDROW)); _piv_row = atoi(mask2.get(FLD_BA6B_PIVROW)); _cod_row = atoi(mask2.get(FLD_BA6B_CODROW)); _rows_et = atoi(mask2.get(FLD_BA6B_TOTROW)); _ind_col = atoi(mask2.get(FLD_BA6B_INDCOL)); _piv_col = atoi(mask2.get(FLD_BA6B_PIVCOL)); _cod_col = atoi(mask2.get(FLD_BA6B_CODCOL)); _cols_et = atoi(mask2.get(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,""); /* TBI save settings */ } break; case BUT_BA6_RUBRICHE: _pr_type = rubriche; break; } _pr_what = 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); TLocalisamfile* fl; 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); } if (!cod_from.empty() || !cod_to.empty()) { fl = current_cursor()->file(LF_ANAG); TRectype tr1(fl->curr()); TRectype tr2(fl->curr()); tr1.zero(); tr2.zero(); if (_sort == 1) { tr1.put("CODANAGR",cod_from); tr2.put("CODANAGR",cod_to); tr1.put("TIPOA", _pr_what == anafis ? "F" : "G"); tr2.put("TIPOA", _pr_what == anafis ? "F" : "G"); } else { tr1.put("RAGSOC",cod_from); tr2.put("RAGSOC",cod_to); } current_cursor()->setregion(cod_from.empty() ? NULL : &tr1, cod_to.empty() ? NULL : &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()) { 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(cod_from.empty() ? NULL : &tr1, cod_to.empty() ? NULL : &tr2); } break; } // initialize (non dovrebbe servire) (*current_cursor()) = 0l; // set initial print rows & headers set_rows(); return TRUE; } bool BA6100_App::preprocess_print(int counter) { _was_match = TRUE; if (_pr_type == undefined) return set_print(); return TRUE; } bool BA6100_App::create() { TToken_string rxp(40); TPrintapp::create(); // setup relation _rel_fis = new TRelation(LF_ANAG); _rel_giu = new TRelation(LF_ANAG); _rel_dit = new TRelation(LF_NDITTE); 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); // 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); _cfis1 = add_cursor(new TCursor(_rel_fis, "TIPOA=\"F\"" , 1)); _cgiu1 = add_cursor(new TCursor(_rel_giu, "TIPOA=\"G\"" , 1)); _cdit1 = add_cursor(new TCursor(_rel_dit, "", 1)); _cfis2 = add_cursor(new TCursor(_rel_fis, "TIPOA=\"F\"" , 2)); _cgiu2 = add_cursor(new TCursor(_rel_giu, "TIPOA=\"G\"" , 2)); _cdit2 = add_cursor(new TCursor(_rel_dit, "", 2)); _comuni = new TLocalisamfile(LF_COMUNI); // set translated field values set_translation(LF_ANAGFIS,"STATCIV","1","Celibe/Nubile"); set_translation(LF_ANAGFIS,"STATCIV","2","Coniugato/a"); set_translation(LF_ANAGFIS,"STATCIV","3","Vedovo/a"); set_translation(LF_ANAGFIS,"STATCIV","4","Separato/a"); set_translation(LF_ANAGFIS,"STATCIV","5","Divorziato/a"); set_translation(LF_ANAGFIS,"STATCIV","6","Deceduto/a"); set_translation(LF_ANAGFIS,"STATCIV","7","Tutelato/a"); set_translation(LF_ANAGFIS,"STATCIV","8","Figlio/a minore"); set_translation(LF_ANAGFIS,"TITSTU", "1" ,"Nessuno"); set_translation(LF_ANAGFIS,"TITSTU", "2" ,"Lic. Elem."); set_translation(LF_ANAGFIS,"TITSTU", "3" ,"Lic. Media"); set_translation(LF_ANAGFIS,"TITSTU", "4" ,"Diploma"); set_translation(LF_ANAGFIS,"TITSTU", "5" ,"Laurea"); set_translation(LF_ANAGFIS,"SESSO", "M", "Maschio"); set_translation(LF_ANAGFIS,"SESSO", "F", "Femmina"); set_translation(LF_NDITTE,"FREQVIVA","M","Mensile"); set_translation(LF_NDITTE,"FREQVIVA","T","Trimestrale"); set_translation(LF_NDITTE,"DATLAV","1","Si"); set_translation(LF_NDITTE,"DATLAV","2","No"); set_translation(LF_NDITTE,"DATLAV","3","Lavoro Agricolo"); set_translation(LF_NDITTE,"STATOSOC","1","Normale attivita'"); set_translation(LF_NDITTE,"STATOSOC","2","Liquidazione cessata attivita'"); set_translation(LF_NDITTE,"STATOSOC","3", "Fallimento o Liquidazione coatta amm."); set_translation(LF_NDITTE,"STATOSOC","4","Estinto"); set_translation(LF_ANAGGIU,"STATOSOC","1","Normale attivita'"); set_translation(LF_ANAGGIU,"STATOSOC","2","Liquidazione cessata attivita'"); set_translation(LF_ANAGGIU,"STATOSOC","3", "Fallimento o Liquidazione coatta amm."); set_translation(LF_ANAGGIU,"STATOSOC","4","Estinto"); set_translation(LF_ANAGGIU,"SITSOC","1","Inizio"); set_translation(LF_ANAGGIU,"SITSOC","2","Liquidazione"); set_translation(LF_ANAGGIU,"SITSOC","3","Termine liquidazione"); set_translation(LF_ANAGGIU,"SITSOC","4","Estinzione"); set_translation(LF_ANAGGIU,"SITSOC","5","Trasf. IRPEG"); set_translation(LF_ANAGGIU,"SITSOC","6","Normale"); set_fillchar('_'); set_wait_threshold(0); enable_print_menu(); return TRUE; } bool BA6100_App::destroy() { if (_rel_fis) delete _rel_fis; if (_rel_giu) delete _rel_giu; if (_rel_dit) delete _rel_dit; if (_frpos) delete _frpos; delete _comuni; return TRUE; } int ba6100(int argc, char* argv[]) { BA6100_App app; app.run(argc, argv, "Stampe Anagrafiche"); return 0; }