#include #include #include #include #include #include #include "at7.h" #include "atlib.h" #include "at7600a.h" // nomi dei campi #include "soggetti.h" #include "contsan.h" #include "idoneita.h" #include "sezioni.h" class TRiordinaControlli : public TPrintapp { TMask* _msk; TRelation* _rel; int _cur; TLocalisamfile* _contsan; TRecord_array* _scontrolli; TLocalisamfile* _idoneita; TRecord_array* _sidoneita; protected: virtual bool user_create(); virtual bool user_destroy(); virtual bool set_print(int m); virtual void set_page(int file, int cnt); virtual bool preprocess_page(int file, int counter); public: void filtra_sezioni(); TRiordinaControlli() {} }; HIDDEN inline TRiordinaControlli& app() { return (TRiordinaControlli&) main_app(); } void TRiordinaControlli::filtra_sezioni() { const TString16 sezini = _msk->get(F_SEZINI); const TString16 sotini = _msk->get(F_SOTINI); const TString16 sezfin = _msk->get(F_SEZFIN); const TString16 sotfin = _msk->get(F_SOTFIN); TRectype da(LF_SOGGETTI); TRectype a (LF_SOGGETTI); if (sezini.not_empty()) da.put(SOG_CODSEZ, sezini); if (sotini.not_empty()) da.put(SOG_CODSOT, sotini); if (sezfin.not_empty()) a.put(SOG_CODSEZ, sezfin); if (sotfin.not_empty()) a.put(SOG_CODSOT, sotfin); current_cursor()->setregion(da, a); } bool TRiordinaControlli::preprocess_page(int file, int counter) { bool rewrite = FALSE; TRectype& recsog = current_cursor()->curr(); const long codice = recsog.get_long(SOG_CODICE); TRectype* keyc = new TRectype(LF_CONTSAN); keyc->put(CON_CODICE, codice); int err = _scontrolli->read(keyc); TRectype* keyi = new TRectype(LF_IDONEITA); keyi->put(IDO_CODICE, codice); int erri = _sidoneita->read(keyi); //if ((err == NOERR || erri == NOERR) && (_scontrolli->rows() > 0 || _sidoneita->rows() > 0)) if (err == NOERR || erri == NOERR) { con_reord(recsog,_scontrolli, _sidoneita); rewrite = TRUE; } if (rewrite) current_cursor()->file().rewrite(); return rewrite; } void TRiordinaControlli::set_page(int file, int cnt) { set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); } bool TRiordinaControlli::set_print(int) { KEY tasto; tasto = _msk->run(); if (tasto == K_ENTER) { TRectype da(LF_SOGGETTI); TRectype a(LF_SOGGETTI); const long codini = _msk->get_long(F_CODINI); const long codfin = _msk->get_long(F_CODFIN); if ((codini != 0) || (codfin != 0)) { da.zero(); a.zero(); if (codini != 0) da.put(SOG_CODICE, codini); if (codfin != 0) a.put(SOG_CODICE, codfin); _cur = add_cursor(new TCursor(_rel,"", 1, &da, &a)); } else { _cur = add_cursor(new TCursor(_rel,"", 3)); filtra_sezioni(); } TString256 filtro = ""; //filtro = "(90->STATO==\"ID\") && ((90->STATOSI==\"SO\") || (90->STATOAF==\"SO\"))"; filtro = "(90->CATDON==\"01\") || (90->CATDON==\"04\") || (90->CATDON==\"07\")"; current_cursor()->setfilter((const char*) filtro, TRUE); reset_files(); add_file(LF_SOGGETTI); reset_print(); return TRUE; } else return FALSE; } bool TRiordinaControlli::user_create() { _msk = new TMask("at7600a"); _rel = new TRelation(LF_SOGGETTI); _contsan = new TLocalisamfile(LF_CONTSAN); _scontrolli = new TRecord_array(LF_CONTSAN,CON_PROGCON); _idoneita = new TLocalisamfile(LF_IDONEITA); _sidoneita = new TRecord_array(LF_IDONEITA,IDO_PROGIDO); long items = _rel->lfile().items(); return TRUE; } bool TRiordinaControlli::user_destroy() { delete _sidoneita; delete _idoneita; delete _scontrolli; delete _contsan; delete _rel; delete _msk; return TRUE; } int at7600(int argc, char* argv[]) { TRiordinaControlli a; a.run(argc, argv, "Riordina controlli"); return 0; }