#include #include #include #include #include #include #include #include #include "at8.h" #include "at8200a.h" // nomi campi maschera #include "atlib.h" // nomi dei campi #include "soggetti.h" #include "donaz.h" #include "contsan.h" #include "idoneita.h" #include "benem.h" class TAggConSan : public TApplication { TMask* _msk; TRelation* _rel; TLocalisamfile* _soggetti; TLocalisamfile* _donaz; TLocalisamfile* _contsan; TLocalisamfile* _idoneita; TLocalisamfile* _benem; TRecord_array* _sdonazioni; TRecord_array* _scontrolli; TRecord_array* _sidoneita; TRecord_array* _sbenem; // 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: TAggConSan() {} }; HIDDEN inline TAggConSan& app() { return (TAggConSan&) main_app(); } bool TAggConSan::create() { TApplication::create(); _msk = new TMask("at8200a"); _rel = new TRelation(LF_SOGGETTI); //_rel->add("CTD", "CODTAB==CATDON",1,0,ALIAS_CTD); _soggetti = new TLocalisamfile(LF_SOGGETTI); _donaz = new TLocalisamfile(LF_DONAZ); _contsan = new TLocalisamfile(LF_CONTSAN); _idoneita = new TLocalisamfile(LF_IDONEITA); _benem = new TLocalisamfile(LF_BENEM); _sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON); _scontrolli = new TRecord_array(LF_CONTSAN,CON_PROGCON); _sidoneita = new TRecord_array(LF_IDONEITA,IDO_PROGIDO); _sbenem = new TRecord_array(LF_BENEM,BEN_PROGBEN); 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 TAggConSan::destroy() { delete _sbenem; delete _sidoneita; delete _scontrolli; delete _sdonazioni; delete _benem; delete _idoneita; delete _contsan; delete _donaz; delete _soggetti; delete _rel; delete _msk; return TApplication::destroy(); } bool TAggConSan::menu(MENU_TAG m) { KEY tasto = _msk->run(); TPrinter& pr = printer(); if (tasto == K_ENTER) { if (!pr.open()) return error_box("Errore in apertura stampante."); bool anagrafica = _msk->get_bool(F_ANAGRAFICA); bool controlli = _msk->get_bool(F_CONTROLLI); bool benemerenze = _msk->get_bool(F_BENEMERENZE); TLocalisamfile& soggetti = _rel->lfile(); _rel->lfile().setkey(2); bool modificato = FALSE; TDate oggi(TODAY); TPrintrow row; TString256 rigastampa; rigastampa = "SOGGETTI NON TROVATI SU ARCHIVIO PROVINCIALE "; rigastampa << oggi.string(); rigastampa.center_just(120); row.put(rigastampa); row.put("@>", 1); row.put("Pag. @#", 105); printer().setheaderline(2, row); rigastampa = ""; rigastampa.fill('-',120); row.reset(); row.put(rigastampa); printer().setheaderline(3, row); TRectype recsog = _rel->curr(); if (anagrafica) { TExternisamfile* fs = new TExternisamfile("$portasog"); TProgind *pi; pi = new TProgind(fs->eod(),"Aggiornamento dati anagrafici", FALSE, TRUE, 10); pi->setstatus(1); for(fs->first(); !fs->eof(); fs->next()) { pi->addstatus(1); modificato = FALSE; const TString80 cognome = fs->get("COGNOME"); const TString80 nome = fs->get("NOME"); const TDate datanasc = fs->get_date("DATANASC"); recsog.zero(); recsog.put(SOG_COGNOME, cognome); recsog.put(SOG_NOME, nome); recsog.put(SOG_DATANASC, datanasc); if (recsog.read(_rel->lfile())==NOERR) { if (fs->get("DATAISC").not_empty()) recsog.put(SOG_DATAISC, fs->get("DATAISC")); recsog.put(SOG_TESSAVIS, fs->get("TESSAVIS")); recsog.put(SOG_COGNOME_SP, fs->get("COGNOME_SP")); recsog.put(SOG_DOM_INDIR, fs->get("DOM_INDIR")); recsog.put(SOG_DOM_CODCOM, fs->get("DOM_CODCOM")); recsog.put(SOG_DOM_CODLOC, fs->get("DOM_CODLOC")); recsog.put(SOG_DOM_STRADA, fs->get("DOM_STRADA")); recsog.put(SOG_DOM_DISTRI, fs->get("DOM_DISTRI")); recsog.put(SOG_DOM_CAP, fs->get("DOM_CAP")); recsog.put(SOG_RES_INDIR, fs->get("RES_INDIR")); recsog.put(SOG_RES_CODCOM, fs->get("RES_CODCOM")); recsog.put(SOG_RES_CODLOC, fs->get("RES_CODLOC")); recsog.put(SOG_RES_CAP, fs->get("RES_CAP")); recsog.put(SOG_COMNASC, fs->get("COMNASC")); recsog.put(SOG_SESSO, fs->get("SESSO")); recsog.put(SOG_CF, fs->get("CF")); recsog.put(SOG_DOCID, fs->get("DOCID")); recsog.put(SOG_TELABI, fs->get("TELABI")); recsog.put(SOG_TELLAV, fs->get("TELLAV")); recsog.put(SOG_TELALT, fs->get("TELALT")); recsog.put(SOG_TITINDIR, fs->get("TITINDIR")); recsog.put(SOG_CATNOND1, fs->get("CATNOND1")); recsog.put(SOG_CATNOND2, fs->get("CATNOND2")); recsog.put(SOG_CODMED, fs->get("CODMED")); recsog.put(SOG_NOTIZIARIO, fs->get("NOTIZIARIO")); recsog.put(SOG_BENEM, fs->get("BENEM")); recsog.put(SOG_CONSENSO, fs->get("CONSENSO")); recsog.put(SOG_MODCONV, fs->get("MODCONV")); recsog.put(SOG_GIOPREDON, fs->get("GIOPREDON")); recsog.put(SOG_GIOPRECON, fs->get("GIOPRECON")); recsog.put(SOG_CONDOCC, fs->get("CONDOCC")); recsog.put(SOG_POSPROF, fs->get("POSPROF")); recsog.put(SOG_RAMOATT, fs->get("RAMOATT")); recsog.put(SOG_TITSTUD, fs->get("TITSTUD")); recsog.put(SOG_PROFESS, fs->get("PROFESS")); recsog.put(SOG_ESCLUSO, fs->get("ESCLUSO")); recsog.put(SOG_TERMESCL, fs->get("TERMESCL")); recsog.put(SOG_MOTESCL, fs->get("MOTESCL")); recsog.put(SOG_DATAULTAGG, oggi); recsog.put(SOG_UTENULTAGG, "PORT."); recsog.rewrite(_rel->lfile()); } else { rigastampa = ""; rigastampa << cognome; rigastampa << " " << nome; rigastampa << " " << datanasc.string(); const char* catdon = recsog.get(SOG_CATDON); if (yesno_box("%s %s %s %s\nIl soggetto non esiste nell'archivio provinciale. Inserire?", (const char*) cognome,(const char*) nome, (const char*) datanasc.string(), catdon)) { soggetti.setkey(1); soggetti.last(); long lastcod = soggetti.get_long(SOG_CODICE); soggetti.zero(); for (int i=0;iget(recsog.fieldname(i))); soggetti.put(SOG_CODICE, lastcod+1); soggetti.put(SOG_DATAULTAGG, oggi); soggetti.put(SOG_UTENULTAGG, "PORT.-inserimento autom."); soggetti.write(); rigastampa << " " << "*** INSERITO codice " << soggetti.get(SOG_CODICE); soggetti.setkey(2); } row.reset(); row.put((const char*) rigastampa); printer().print(row); } } delete pi; delete fs; } if (controlli) { TExternisamfile* fc = new TExternisamfile("$portacon"); TProgind *pi; pi = new TProgind(fc->eod(),"Aggiornamento controlli sanitari", FALSE, TRUE, 10); pi->setstatus(1); for(fc->first(); !fc->eof(); fc->next()) { pi->addstatus(1); modificato = FALSE; const TString80 cognome = fc->get("COGNOME"); const TString80 nome = fc->get("NOME"); const TDate datanasc = fc->get_date("DATANASC"); recsog.zero(); recsog.put(SOG_COGNOME, cognome); recsog.put(SOG_NOME, nome); recsog.put(SOG_DATANASC, datanasc); if (recsog.read(_rel->lfile())==NOERR) { TDate datacon = fc->get_date("DATACON"); bool esiste = FALSE; TRectype* key = new TRectype(LF_CONTSAN); key->put(CON_CODICE, recsog.get(SOG_CODICE)); _scontrolli->read(key); for (int r=1; r<=_scontrolli->rows(); r++) { const TRectype& riga = _scontrolli->row(r); TDate datacon1 = riga.get(CON_DATACON); if (datacon==datacon1) esiste = TRUE; } if (!esiste) { 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, datacon); reccon.put(CON_TIPOCON, fc->get("TIPOCON")); reccon.put(CON_IDON1, fc->get("IDON1")); reccon.put(CON_IDON2, fc->get("IDON2")); reccon.put(CON_IDON3, fc->get("IDON3")); reccon.put(CON_IDON4, fc->get("IDON4")); reccon.put(CON_INTSI, fc->get("INTSI")); reccon.put(CON_INTAF, fc->get("INTAF")); reccon.put(CON_PROSSTIPO, fc->get("PROSSTIPO")); reccon.put(CON_PROSSDATA, fc->get("PROSSDATA")); reccon.put(CON_MOTIVO, fc->get("MOTIVO")); TString80 resp = "port.-" ; resp << fc->get("RESPONSAB"); reccon.put(CON_RESPONSAB, resp); 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); //Verifico se la categoria del donatore è aggiornata al numero di donazioni dello stesso //se non lo è eseguo tutti i controlli per il salto automatico di categoria TString16 catdon = recsog.get(SOG_CATDON); const int totdon = recsog.get_int(SOG_TOTDON); if ((catdon == _catini1 || _catini1.empty()) && (totdon>=_numdon1) && _catfin1.not_empty()) recsog.put(SOG_CATDON, _catfin1); const bool tstampata = recsog.get_bool(SOG_T_STAMPATA); if ((catdon == _catini2 || _catini2.empty()) && (totdon>=_numdon2) && _catfin2.not_empty() && (!_sttess2 || tstampata)) recsog.put(SOG_CATDON, _catfin2); recsog.put(SOG_DATAULTAGG, oggi); recsog.put(SOG_UTENULTAGG, "PORT."); recsog.rewrite(_rel->lfile()); } } else { rigastampa = ""; rigastampa << cognome; rigastampa << " " << nome; rigastampa << " " << datanasc.string(); row.reset(); row.put(rigastampa); printer().print(row); } } delete pi; delete fc; TExternisamfile* fi = new TExternisamfile("$portaido"); TProgind *pi1; pi1 = new TProgind(fi->eod(),"Aggiornamento idoneita'", FALSE, TRUE, 10); pi1->setstatus(1); for(fi->first(); !fi->eof(); fi->next()) { pi1->addstatus(1); modificato = FALSE; const TString80 cognome = fi->get("COGNOME"); const TString80 nome = fi->get("NOME"); const TDate datanasc = fi->get_date("DATANASC"); recsog.zero(); recsog.put(SOG_COGNOME, cognome); recsog.put(SOG_NOME, nome); recsog.put(SOG_DATANASC, datanasc); if (recsog.read(_rel->lfile())==NOERR) { TDate dataido = fi->get_date("DATAIDO"); bool esiste = FALSE; TRectype* key = new TRectype(LF_IDONEITA); key->put(IDO_CODICE, recsog.get(SOG_CODICE)); _sidoneita->read(key); for (int r=1; r<=_sidoneita->rows(); r++) { const TRectype& riga = _sidoneita->row(r); TDate dataido1 = riga.get(IDO_DATAIDO); if (dataido==dataido1) esiste = TRUE; } if (!esiste) { int progido = _sidoneita->rows()+1; TRectype& recido = _idoneita->curr(); recido.zero(); recido.put(IDO_CODICE, recsog.get(SOG_CODICE)); recido.put(IDO_PROGIDO, progido); recido.put(IDO_DATAIDO, dataido); recido.put(IDO_TIPOIDO, fi->get("TIPOIDO")); recido.put(IDO_IDO_SOS, fi->get("IDO_SOS")); recido.put(IDO_INTERVALLO, fi->get("INTERVALLO")); recido.put(IDO_FINESOS, fi->get("FINESOS")); recido.put(IDO_MOTIVO, fi->get("MOTIVO")); TString80 resp = "port.-" ; resp << fi->get("RESPONSAB"); recido.put(IDO_RESPONSAB, resp); modificato = TRUE; _sidoneita->insert_row(recido); _sidoneita->write(TRUE); } if (modificato) { TRectype* key = new TRectype(LF_CONTSAN); key->put(CON_CODICE, recsog.get(SOG_CODICE)); _scontrolli->read(key); con_reord(recsog,_scontrolli,_sidoneita); //Verifico se la categoria del donatore è aggiornata al numero di donazioni dello stesso //se non lo è eseguo tutti i controlli per il salto automatico di categoria TString16 catdon = recsog.get(SOG_CATDON); const int totdon = recsog.get_int(SOG_TOTDON); if ((catdon == _catini1 || _catini1.empty()) && (totdon>=_numdon1) && _catfin1.not_empty()) recsog.put(SOG_CATDON, _catfin1); const bool tstampata = recsog.get_bool(SOG_T_STAMPATA); if ((catdon == _catini2 || _catini2.empty()) && (totdon>=_numdon2) && _catfin2.not_empty() && (!_sttess2 || tstampata)) recsog.put(SOG_CATDON, _catfin2); recsog.put(SOG_DATAULTAGG, oggi); recsog.put(SOG_UTENULTAGG, "PORT."); recsog.rewrite(_rel->lfile()); } } else { rigastampa = ""; rigastampa << cognome; rigastampa << " " << nome; rigastampa << " " << datanasc.string(); row.reset(); row.put(rigastampa); printer().print(row); } } delete pi1; delete fi; } if (benemerenze) { TExternisamfile* fc = new TExternisamfile("$portaben"); TProgind *pi; pi = new TProgind(fc->eod(),"Aggiornamento benemerenze", FALSE, TRUE, 10); pi->setstatus(1); for(fc->first(); !fc->eof(); fc->next()) { pi->addstatus(1); modificato = FALSE; const TString80 cognome = fc->get("COGNOME"); const TString80 nome = fc->get("NOME"); const TDate datanasc = fc->get_date("DATANASC"); recsog.zero(); recsog.put(SOG_COGNOME, cognome); recsog.put(SOG_NOME, nome); recsog.put(SOG_DATANASC, datanasc); if (recsog.read(_rel->lfile())==NOERR) { TString16 tipoben = fc->get("TIPOBEN"); bool esiste = FALSE; TRectype* key = new TRectype(LF_BENEM); key->put(BEN_CODICE, recsog.get(SOG_CODICE)); _sbenem->read(key); for (int r=1; r<=_sbenem->rows(); r++) { const TRectype& riga = _sbenem->row(r); TString16 tipoben1 = riga.get(BEN_TIPOBEN); if (tipoben==tipoben1) esiste = TRUE; } if (!esiste) { int progben = _sbenem->rows()+1; TRectype& recben = _benem->curr(); recben.zero(); recben.put(BEN_CODICE, recsog.get(SOG_CODICE)); recben.put(BEN_PROGBEN, progben); recben.put(BEN_TIPOBEN, fc->get("TIPOBEN")); recben.put(BEN_DATAMAT, fc->get("DATAMAT")); recben.put(BEN_BONUS, fc->get("BONUS")); recben.put(BEN_DATABEN, fc->get("DATABEN")); recben.put(BEN_DATACON, fc->get("DATACON")); recben.put(BEN_RITIRATA, fc->get("RITIRATA")); recben.put(BEN_CODSEZ, fc->get("CODSEZ")); recben.put(BEN_CODSOT, fc->get("CODSOT")); recben.put(BEN_GRUPPOAZIE, fc->get("GRUPPOAZIE")); modificato = TRUE; _sbenem->insert_row(recben); _sbenem->write(TRUE); } if (modificato) { recsog.put(SOG_DATAULTAGG, oggi); recsog.put(SOG_UTENULTAGG, "PORT."); recsog.rewrite(_rel->lfile()); } } else { rigastampa = ""; rigastampa << cognome; rigastampa << " " << nome; rigastampa << " " << datanasc.string(); row.reset(); row.put(rigastampa); printer().print(row); } } delete pi; delete fc; } pr.formfeed(); pr.close(); } return FALSE; } int TAggConSan::write(TSheet_field& s) { return NOERR; } int at8200(int argc, char* argv[]) { TAggConSan a; a.run(argc, argv, "Aggiorna archivi da altra sezione"); return 0; }