#include #include #include #include #include #include #include #include #include #include #include #include #include #include "at8.h" // nomi campi maschera #include "atlib.h" // nomi dei campi #include "soggetti.h" #include "donaz.h" #include "contsan.h" #include "idoneita.h" #include "rconvoc.h" class TCTStato2AT : public TApplication { TMask* _msk; TRelation* _rel; TLocalisamfile* _soggetti; TLocalisamfile* _donaz; TLocalisamfile* _contsan; TLocalisamfile* _idoneita; TRecord_array* _sdonazioni; TRecord_array* _scontrolli; TRecord_array* _sidoneita; // parametri di sezione int _intsi_f1, _intsi_f2, _intsi_m, _intaf_m, _etadonne; int _numdon1, _numdon2; TString16 _catini1, _catfin1, _catini2, _catfin2, _motivoid; bool _sttess2, _dataisc, _nomessage, _autoid; protected: virtual bool create(); virtual bool destroy(); virtual bool menu(MENU_TAG m); virtual TMask& get_mask() { return *_msk; } virtual TRelation* get_relation() const { return _rel; } int write(TSheet_field& s); public: TCTStato2AT() {} }; HIDDEN inline TCTStato2AT& app() { return (TCTStato2AT&) main_app(); } bool TCTStato2AT::create() { TApplication::create(); _msk = new TMask("at8100a"); _rel = new TRelation(LF_SOGGETTI); //_rel->add("CTD", "CODTAB==CATDON",1,0,ALIAS_CTD); _donaz = new TLocalisamfile(LF_DONAZ); _contsan = new TLocalisamfile(LF_CONTSAN); _idoneita = new TLocalisamfile(LF_IDONEITA); _sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON); _scontrolli = new TRecord_array(LF_CONTSAN,CON_PROGCON); _sidoneita = new TRecord_array(LF_IDONEITA,IDO_PROGIDO); TConfig config(CONFIG_STUDIO); _numdon1 = config.get_int("NumDon1"); _numdon2 = config.get_int("NumDon2"); _catini1 = config.get("CatIni1"); _catfin1 = config.get("CatFin1"); _catini2 = config.get("CatIni2"); _catfin2 = config.get("CatFin2"); _sttess2 = config.get_bool("StTess2"); _dataisc = config.get_bool("DataIsc"); _nomessage = config.get_bool("NoMessage"); _etadonne = config.get_int("EtaDonne"); _intsi_f1 = config.get_int("IntSI_F1"); _intsi_f2 = config.get_int("IntSI_F2"); _intsi_m = config.get_int("IntSI_M"); _intaf_m = config.get_int("IntAF_M"); dispatch_e_menu(BAR_ITEM(1)); return TRUE; } bool TCTStato2AT::destroy() { delete _sidoneita; delete _scontrolli; delete _sdonazioni; delete _idoneita; delete _contsan; delete _donaz; delete _rel; delete _msk; return TApplication::destroy(); } bool TCTStato2AT::menu(MENU_TAG m) { KEY tasto = _msk->run(); if (tasto == K_ENTER) { _rel->lfile().setkey(2); bool modificato = FALSE; bool modifanagr = FALSE; TDate oggi(TODAY); TRectype recsog = _rel->curr(); TExternisamfile* f = new TExternisamfile("$ctdon"); TProgind *pi; pi = new TProgind(f->eod(),"Aggiornamento stato soggetti da CT", FALSE, TRUE, 10); pi->setstatus(1); for(f->first(); !f->eof(); f->next()) { pi->addstatus(1); modificato = FALSE; modifanagr = FALSE; const TString80 cognome = f->get("COGNOME"); const TString80 nome = f->get("NOME"); const TDate datanasc = f->get_date("DATANASC"); const donaz_anno = f->get_int("DONAZ_ANNO"); recsog.zero(); recsog.put(SOG_COGNOME, cognome); recsog.put(SOG_NOME, nome); recsog.put(SOG_DATANASC, datanasc); if (recsog.read(_rel->lfile())==NOERR) { // aggiorna anagrafica soggetto TString16 tel_casa = f->get("TEL_CASA"); TString16 tel_lavoro = f->get("TEL_LAVORO"); if (tel_casa.not_empty()) { recsog.put(SOG_TELABI,tel_casa); modifanagr = TRUE; } if (tel_lavoro.not_empty()) { recsog.put(SOG_TELLAV,tel_lavoro); modifanagr = TRUE; } TString16 stato = f->get("STATO"); TString16 statoavis = recsog.get(SOG_STATO); TDate dataini = f->get_date("DATAINI"); TDate datafin = f->get_date("DATAFIN"); TString16 idon = ""; if ((stato=="08") || (stato=="03") || (stato=="09")) { if (statoavis != "DE") { TRectype* key = new TRectype(LF_CONTSAN); key->put(CON_CODICE, recsog.get(SOG_CODICE)); _scontrolli->read(key); int progcon = _scontrolli->rows()+1; TRectype& reccon = _contsan->curr(); reccon.zero(); reccon.put(CON_CODICE, recsog.get(SOG_CODICE)); reccon.put(CON_PROGCON, progcon); if (dataini.ok()) reccon.put(CON_DATACON, dataini); else reccon.put(CON_DATACON, oggi); reccon.put(CON_TIPOCON, "DE"); if (datafin.ok()) { reccon.put(CON_PROSSTIPO, "FS"); reccon.put(CON_PROSSDATA, datafin); } TString80 resp = "AGGIORNAMENTO DA CENTRO TRASF."; reccon.put(CON_RESPONSAB, resp); //reccon.put(IDO_MOTIVO, _motivoid); modificato = TRUE; _scontrolli->insert_row(reccon); _scontrolli->write(TRUE); } } if (stato=="05") { if (statoavis != "E") { TRectype* key = new TRectype(LF_CONTSAN); key->put(CON_CODICE, recsog.get(SOG_CODICE)); int err = _scontrolli->read(key); int progcon = _scontrolli->rows()+1; TRectype& reccon = _contsan->curr(); reccon.zero(); reccon.put(CON_CODICE, recsog.get(SOG_CODICE)); reccon.put(CON_PROGCON, progcon); if (dataini.ok()) reccon.put(CON_DATACON, dataini); else reccon.put(CON_DATACON, oggi); reccon.put(CON_TIPOCON, "E"); if (datafin.ok()) { reccon.put(CON_PROSSTIPO, "FS"); reccon.put(CON_PROSSDATA, datafin); } TString80 resp = "AGGIORNAMENTO DA CENTRO TRASF."; reccon.put(CON_RESPONSAB, resp); //reccon.put(IDO_MOTIVO, _motivoid); modificato = TRUE; _scontrolli->insert_row(reccon); _scontrolli->write(TRUE); } } if ((stato=="022") || (stato=="04")) { if (modstato_tcs(statoavis) != 'S') { TRectype* key = new TRectype(LF_CONTSAN); key->put(CON_CODICE, recsog.get(SOG_CODICE)); int err = _scontrolli->read(key); int progcon = _scontrolli->rows()+1; TRectype& reccon = _contsan->curr(); reccon.zero(); reccon.put(CON_CODICE, recsog.get(SOG_CODICE)); reccon.put(CON_PROGCON, progcon); if (dataini.ok()) reccon.put(CON_DATACON, dataini); else reccon.put(CON_DATACON, oggi); reccon.put(CON_TIPOCON, "SO"); if (datafin.ok()) { reccon.put(CON_PROSSTIPO, "FS"); reccon.put(CON_PROSSDATA, datafin); } TString80 resp = "AGGIORNAMENTO DA CENTRO TRASF."; reccon.put(CON_RESPONSAB, resp); //reccon.put(IDO_MOTIVO, _motivoid); modificato = TRUE; _scontrolli->insert_row(reccon); _scontrolli->write(TRUE); } } if (stato=="021") { const char modstato = modstato_tcs(statoavis); bool id_soloaf = ((recsog.get(SOG_STATOSI)!="ID") && (recsog.get(SOG_STATOAF)=="ID")); if ((modstato != 'I') && (modstato != 'F') && (!id_soloaf) ) { TRectype* key = new TRectype(LF_CONTSAN); key->put(CON_CODICE, recsog.get(SOG_CODICE)); _scontrolli->read(key); int progcon = _scontrolli->rows()+1; TRectype& reccon = _contsan->curr(); reccon.zero(); reccon.put(CON_CODICE, recsog.get(SOG_CODICE)); reccon.put(CON_PROGCON, progcon); reccon.put(CON_DATACON, oggi); reccon.put(CON_TIPOCON, "PI"); reccon.put(CON_IDON1, "PL"); if (recsog.get_int(SOG_INTAF)==0) reccon.put(CON_INTAF, _intaf_m); else reccon.put(CON_INTAF, recsog.get_int(SOG_INTAF)); TString80 resp = "AGGIORNAMENTO DA CENTRO TRASF."; reccon.put(CON_RESPONSAB, resp); //reccon.put(IDO_MOTIVO, _motivoid); modificato = TRUE; _scontrolli->insert_row(reccon); _scontrolli->write(TRUE); } } if ((stato=="02") || (stato=="01") || (stato=="011")) { if ((modstato_tcs(statoavis) != 'I') && (modstato_tcs(statoavis) != 'F')) { TRectype* key = new TRectype(LF_CONTSAN); key->put(CON_CODICE, recsog.get(SOG_CODICE)); _scontrolli->read(key); int progcon = _scontrolli->rows()+1; TRectype& reccon = _contsan->curr(); reccon.zero(); reccon.put(CON_CODICE, recsog.get(SOG_CODICE)); reccon.put(CON_PROGCON, progcon); reccon.put(CON_DATACON, oggi); reccon.put(CON_TIPOCON, "PI"); reccon.put(CON_IDON1, "SI"); if (donaz_anno==0) { if (recsog.get_int(SOG_INTSI)==0) { const TString16 sesso = recsog.get(SOG_SESSO); if (sesso == "2") { TDate datanasc = recsog.get_date(SOG_DATANASC); int eta = oggi.year() - datanasc.year(); if(eta <= _etadonne) reccon.put(CON_INTSI, _intsi_f1); else reccon.put(CON_INTSI, _intsi_f2); } else reccon.put(CON_INTSI, _intsi_m); } else reccon.put(CON_INTSI, recsog.get_int(SOG_INTSI)); } else { const int intsi = (360/donaz_anno); reccon.put(CON_INTSI, intsi); } TString80 resp = "AGGIORNAMENTO DA CENTRO TRASF."; reccon.put(CON_RESPONSAB, resp); //reccon.put(IDO_MOTIVO, _motivoid); modificato = TRUE; _scontrolli->insert_row(reccon); _scontrolli->write(TRUE); } } if (modificato) { TRectype* key = new TRectype(LF_IDONEITA); key->put(IDO_CODICE, recsog.get(SOG_CODICE)); _sidoneita->read(key); con_reord(recsog,_scontrolli,_sidoneita); const TDate dataprossi = recsog.get_date(SOG_DATAPROSSI); const TDate dataconv = recsog.get_date(SOG_DATACONV); const char stato = modstato_tcs(recsog.get(SOG_STATO)); const TString16 statosi = recsog.get(SOG_STATOSI); if ((stato == 'S') || (statosi == SOSPENSIONE) || (dataprossi > dataconv) || !dataprossi.ok()) { TLocalisamfile rconvoc(LF_RCONVOC); rconvoc.setkey(3); rconvoc.zero(); rconvoc.put(RCV_CODICE, recsog.get(SOG_CODICE)); rconvoc.put(RCV_DATACONV, recsog.get(SOG_DATACONV)); if (rconvoc.read() == NOERR) { rconvoc.put(RCV_ANNULLATO, TRUE); int err = rconvoc.write(); } const TDate datanulla(NULLDATE); recsog.put(SOG_DATACONV, datanulla); recsog.put(SOG_DATAULTSOL, datanulla); const int numzero = 0; recsog.put(SOG_NUMCONV,numzero); } modifanagr = TRUE; } if (modifanagr) { recsog.put(SOG_DATAULTAGG, oggi); recsog.put(SOG_UTENULTAGG, "CT"); recsog.rewrite(_rel->lfile()); } } } delete pi; delete f; } return FALSE; } int TCTStato2AT::write(TSheet_field& s) { return NOERR; } int at8100(int argc, char* argv[]) { TCTStato2AT a; a.run(argc, argv, "Aggiornamento stato soggetti da CT"); return 0; }