#include #include #include #include #include #include "atlib.h" #include "at5.h" #include "soggetti.h" #include "donaz.h" #include "contsan.h" #include "idoneita.h" class TRiordinaSog : public TApplication { TLocalisamfile* _soggetti; TLocalisamfile* _donaz; TLocalisamfile* _contsan; TLocalisamfile* _idoneita; TRecord_array* _sdonazioni; TRecord_array* _scontrolli; TRecord_array* _sidoneita; protected: virtual bool create(); virtual bool destroy(); public: TRiordinaSog() {} virtual ~TRiordinaSog() {} }; bool TRiordinaSog::create() { TApplication::create(); if (argc() < 3) return error_box("Specificare il codice del soggetto"); long codsog = atol(argv(2)); _soggetti = new TLocalisamfile(LF_SOGGETTI); _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); const int numdon1 = config.get_int("NumDon1"); const int numdon2 = config.get_int("NumDon2"); TString16 catini1 = config.get("CatIni1"); TString16 catfin1 = config.get("CatFin1"); TString16 catini2 = config.get("CatIni2"); TString16 catfin2 = config.get("CatFin2"); const bool sttess2 = config.get_bool("StTess2"); const bool dataisc = config.get_bool("DataIsc"); const int etadonne = config.get_int("EtaDonne"); const int intsi_f1 = config.get_int("IntSI_F1"); const int intsi_f2 = config.get_int("IntSI_F2"); const int intsi_m = config.get_int("IntSI_M"); const int intaf_m = config.get_int("IntAF_M"); TRectype soggetto(LF_SOGGETTI); _soggetti->put(SOG_CODICE, codsog); if (_soggetti->read() == NOERR) { TRectype& sog = _soggetti->curr(); TRectype* key = new TRectype(LF_DONAZ); key->put(DON_CODICE, codsog); int err = _sdonazioni->read(key); if (err == NOERR) { calcola_donazioni_lib(sog, _sdonazioni); _sdonazioni->rewrite(); _soggetti->rewrite(); } TString16 catdon = sog.get(SOG_CATDON); const int totdon = sog.get_int(SOG_TOTDON); const TRectype& ctd = cache().get("CTD", catdon); const bool dimissione = ctd.get_bool("B0"); if (dimissione) { const TString16 catcoll = ctd.get("S6"); if (catcoll.not_empty()) { sog.put(SOG_CATDON, catcoll); catdon = catcoll; } } if ((catdon == catini1 || catini1.empty()) && (totdon==numdon1) && catfin1.not_empty()) sog.put(SOG_CATDON, catfin1); if ((catdon == catini2 || catini2.empty()) && (totdon>=numdon2) && catfin2.not_empty() && (!sttess2 || dimissione)) sog.put(SOG_CATDON, catfin2); TDate dataiscsog = sog.get_date(SOG_DATAISC); if (!dataiscsog.ok() && dataisc) { if (!sog.get_date(SOG_DATAPRISI) == NULLDATE) sog.put(SOG_DATAISC,sog.get(SOG_DATAPRISI)); else { const TRectype& riga = _sdonazioni->row(1); sog.put(SOG_DATAISC,riga.get(DON_DATADON)); } } _soggetti->rewrite(); } stop_run(); return TRUE; } bool TRiordinaSog::destroy() { delete _sidoneita; delete _scontrolli; delete _sdonazioni; delete _idoneita; delete _contsan; delete _donaz; delete _soggetti; return TApplication::destroy(); } int at5400(int argc, char* argv[]) { TRiordinaSog a; a.run(argc, argv, "Riordina donazioni soggetto"); return 0; }