#include #include #include #include #include #include #include "at7.h" #include "atlib.h" // nomi dei campi #include "soggetti.h" #include "contsan.h" class TFS_NoData_app : public TPrintapp { TMask* _msk; TRelation* _rel; int _cur; TLocalisamfile* _soggetti; TLocalisamfile* _contsan; TRecord_array* _scontrolli; TString16 _sospensione, _finesospensione; 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: TFS_NoData_app() {} }; HIDDEN inline TFS_NoData_app& app() { return (TFS_NoData_app&) main_app(); } bool TFS_NoData_app::preprocess_page(int file, int counter) { bool rew = FALSE; TRectype& recsog = current_cursor()->curr(); const long codice = recsog.get_long(SOG_CODICE); TRectype* key = new TRectype(LF_CONTSAN); key->put(CON_CODICE, codice); int err = _scontrolli->read(key); if (err == NOERR) { const int numrighe = _scontrolli->rows(); if (numrighe > 0) { const TRectype& riga = _scontrolli->row(numrighe); const TString16 tipocon = riga.get(CON_TIPOCON); const TString16 prosstipo = riga.get(CON_PROSSTIPO); const TDate prossdata = riga.get(CON_PROSSDATA); const TDate datanulla(NULLDATE); if ((tipocon == _sospensione) && (prosstipo == _finesospensione) && (prossdata != datanulla)) { TString16 statopross = recsog.get(SOG_PROS_STATO); TDate datapross = recsog.get(SOG_DATA_PROS); if (statopross.empty() && datapross == datanulla) { recsog.put(SOG_PROS_STATO, prosstipo); recsog.put(SOG_DATA_PROS, prossdata); current_cursor()->file().rewrite(); rew = TRUE; } } } } return rew; } void TFS_NoData_app::set_page(int file, int cnt) { set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_COGNOME)); set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_NOME)); } bool TFS_NoData_app::set_print(int) { KEY tasto; tasto = _msk->run(); if (tasto == K_ENTER) { reset_files(); add_file(LF_SOGGETTI); reset_print(); _sospensione = "SO"; _finesospensione = "FS"; current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)_sospensione)); return TRUE; } else return FALSE; } bool TFS_NoData_app::user_create() { _msk = new TMask("at7300a"); _rel = new TRelation(LF_SOGGETTI); _contsan = new TLocalisamfile(LF_CONTSAN); _scontrolli = new TRecord_array(LF_CONTSAN,CON_PROGCON); _cur = add_cursor(new TCursor(_rel, "", 1)); return TRUE; } bool TFS_NoData_app::user_destroy() { delete _rel; delete _msk; delete _contsan; delete _scontrolli; return TRUE; } int at7300(int argc, char* argv[]) { TFS_NoData_app a; a.run(argc, argv, "Correzione stato e data prossimo stato"); return 0; }