#include #include #include //#include #include "at7.h" #include "atlib.h" #include "at7800a.h" // nomi dei campi #include "soggetti.h" #include "contsan.h" #include "idoneita.h" #include "sezioni.h" class TRiminiRO_app : public TPrintapp { TMask* _msk; TRelation* _rel; TLocalisamfile* _contsan; TRecord_array* _scontrolli; TLocalisamfile* _idoneita; TRecord_array* _sidoneita; int _cur; TDate _datarif; 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(); TRiminiRO_app() {} }; HIDDEN inline TRiminiRO_app& app() { return (TRiminiRO_app&) main_app(); } void TRiminiRO_app::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 TRiminiRO_app::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); if (err == NOERR) { TDate primocon(NULLDATE); TString16 tipocon; int numido = 0; int numcon = 0; for (int c=1; c<=_scontrolli->rows(); c++) { TRectype& riga = _scontrolli->row(c, TRUE); tipocon = riga.get(CON_TIPOCON); TDate datacon = riga.get_date(CON_DATACON); // mi segno la data del primo controllo per inserire una PI // il giorno prima nei donatori che non hanno l'idoneita' if (c==1) primocon = datacon; // se il controllo è avvenuto prima della data di riferimento if (datacon <= _datarif) { if (tipocon == "RO") { numcon++; riga.put(CON_TIPOCON,"R1"); riga.put(CON_IDON1," "); riga.put(CON_IDON2," "); riga.put(CON_IDON3," "); riga.put(CON_IDON4," "); riga.put(CON_INTSI,0); riga.put(CON_INTAF,0); } if (tipocon == "ID") { TString16 motivo = riga.get(CON_MOTIVO); TString80 responsab = riga.get(CON_RESPONSAB); if (motivo.empty() && responsab.empty()) { numcon++; riga.put(CON_TIPOCON,"V1"); riga.put(CON_IDON1," "); riga.put(CON_IDON2," "); riga.put(CON_IDON3," "); riga.put(CON_IDON4," "); riga.put(CON_INTSI,0); riga.put(CON_INTAF,0); } } } tipocon = riga.get(CON_TIPOCON); if ((tipocon == "ID") || (tipocon == "RO") || (tipocon == "PI")) { numido++; if (!((riga.get(CON_IDON1) == "PL") || (riga.get(CON_IDON2) == "PL") || (riga.get(CON_IDON3) == "PL") || (riga.get(CON_IDON4) == "PL"))) riga.put(CON_INTAF,0); if ((riga.get(CON_IDON1).empty()) && (riga.get(CON_IDON2).empty()) && (riga.get(CON_IDON3).empty()) && (riga.get(CON_IDON4).empty())) { riga.put(CON_IDON1, "SI"); riga.put(CON_INTSI, recsog.get(SOG_INTSI)); if (recsog.get_int(SOG_INTSI) == 0) riga.put(CON_INTSI, 94); } } } if ((numido == 0) && (numcon > 0)) { --primocon; TRectype riga(LF_CONTSAN); riga.put(CON_CODICE, codice); riga.put(CON_PROGCON, 1); riga.put(CON_DATACON, primocon); riga.put(CON_TIPOCON, "PI"); riga.put(CON_IDON1, recsog.get(SOG_IDON1)); riga.put(CON_IDON2, recsog.get(SOG_IDON2)); riga.put(CON_IDON3, recsog.get(SOG_IDON3)); riga.put(CON_IDON4, recsog.get(SOG_IDON4)); riga.put(CON_INTSI, recsog.get(SOG_INTSI)); riga.put(CON_INTAF, recsog.get(SOG_INTAF)); riga.put(CON_RESPONSAB, "CONVERSIONE"); if (!((riga.get(CON_IDON1) == "PL") || (riga.get(CON_IDON2) == "PL") || (riga.get(CON_IDON3) == "PL") || (riga.get(CON_IDON4) == "PL"))) riga.put(CON_INTAF,0); _scontrolli->insert_row(riga); } if ((numcon > 0) || (numido > 0)) _scontrolli->rewrite(); } 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)) { con_reord(recsog,_scontrolli, _sidoneita); rewrite = TRUE; } if (rewrite) current_cursor()->file().rewrite(); return rewrite; } void TRiminiRO_app::set_page(int file, int cnt) { set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); } bool TRiminiRO_app::set_print(int) { KEY tasto; tasto = _msk->run(); if (tasto == K_ENTER) { _datarif = _msk->get_date(F_DATARIF); TRectype da(LF_SOGGETTI); TRectype a(LF_SOGGETTI); 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); 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); TString filtro; if ((sezini == sezfin) && (sotini == sotfin)) filtro << SOG_CODSEZ << " == \"" << sezini << "\""; else filtro = ""; _cur = add_cursor(new TCursor(_rel,filtro, 1, &da, &a)); } else { _cur = add_cursor(new TCursor(_rel,"", 3)); filtra_sezioni(); } reset_files(); add_file(LF_SOGGETTI); reset_print(); return TRUE; } else return FALSE; } bool TRiminiRO_app::user_create() { _msk = new TMask("at7800a"); _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); return TRUE; } bool TRiminiRO_app::user_destroy() { delete _rel; delete _msk; delete _scontrolli; delete _contsan; delete _sidoneita; delete _idoneita; return TRUE; } int at7800(int argc, char* argv[]) { TRiminiRO_app a; a.run(argc, argv, "Correzione controlli RO"); return 0; }