From 4a1bc183a272dde921e701896b291b63cb9f6561 Mon Sep 17 00:00:00 2001 From: cris Date: Fri, 25 Sep 1998 13:12:07 +0000 Subject: [PATCH] Patch level : Files correlati : Ricompilazione Demo : [ ] Commento : Idoneita' automatica: corretto funzionamento + idoneita' per PL se viane data la idoneita' generica per AF at0100.cpp: non registra le benemerenze vuote git-svn-id: svn://10.65.10.50/trunk@7140 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- at/at0200.cpp | 148 ++++++++++++++++++++++++++++++++++++++------------ at/atlib.h | 1 + at/atlib1.cpp | 12 ++++ 3 files changed, 127 insertions(+), 34 deletions(-) diff --git a/at/at0200.cpp b/at/at0200.cpp index 0946120a4..6157f1447 100755 --- a/at/at0200.cpp +++ b/at/at0200.cpp @@ -48,9 +48,10 @@ class TGiornalieroDC : public TApplication TDate _datadon; TString16 _tipodon, _luogodon; // parametri di sezione + int _intsi_f1, _intsi_f2, _intsi_m, _intaf_m, _etadonne; int _numdon1, _numdon2; - TString16 _catini1, _catfin1, _catini2, _catfin2; - bool _sttess2, _dataisc, _nomessage; + TString16 _catini1, _catfin1, _catini2, _catfin2, _motivoid; + bool _sttess2, _dataisc, _nomessage, _autoid; protected: @@ -130,6 +131,11 @@ bool TGiornalieroDC::create() _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"); _donaz->setkey(3); _donaz->last(); _progins = _donaz->get_long(DON_PROGINS); @@ -459,6 +465,25 @@ int TGiornalieroDC::write(TSheet_field& s) err = _sdonazioni->write(TRUE); // controllo se è idoneo + + bool ctrlsi = FALSE; //devo controllare se è idoneo SI + bool ctrlaf = FALSE; //devo controllare se è idoneo AF + bool id_si = FALSE; // il soggetto è idoneo per si? + bool id_af = FALSE; // il soggetto è idoneo per af? + char modstato = ' '; + TString16 stato = sog.get(SOG_STATO); // stato attuale + TString16 statosi = sog.get(SOG_STATOSI); // stato attuale SI + TString16 statoaf = sog.get(SOG_STATOAF); // stato attuale AF + TString16 id1 = sog.get(SOG_IDON1); // idon. 1 + TString16 id2 = sog.get(SOG_IDON2); // idon. 2 + TString16 id3 = sog.get(SOG_IDON3); // idon. 3 + TString16 id4 = sog.get(SOG_IDON4); // idon. 4 + int intsi = sog.get_int(SOG_INTSI); // intervallo per SI + int intaf = sog.get_int(SOG_INTAF); // intervallo per AF + //id_si = ((is_idon(id1,id2,id3,id4,IDON_SI) || (statosi == "ID")) && intsi != 0); // il soggetto è idoneo SI + //id_af = ((is_idon(id1,id2,id3,id4,IDON_AF) || (statoaf == "ID")) && intaf != 0); // il soggetto è idoneo AF + id_si = ((statosi == "ID") && (intsi != 0)); // il soggetto è idoneo SI + id_af = ((statoaf == "ID") && (intaf != 0)); // il soggetto è idoneo AF int totdon = sog.get_int(SOG_TOTDON); TDate dataultdon = sog.get_date(SOG_DATAULTDON); @@ -470,6 +495,7 @@ int TGiornalieroDC::write(TSheet_field& s) } if (is_donaz(tipodon,IDON_SI)) { + ctrlsi = TRUE; totdon = sog.get_int(SOG_TOTDONSI); sog.put(SOG_TOTDONSI,totdon+1); dataultdon = sog.get_date(SOG_DATAULTSI); @@ -478,60 +504,112 @@ int TGiornalieroDC::write(TSheet_field& s) } if (is_donaz(tipodon,IDON_AF)) { + ctrlaf = TRUE; totdon = sog.get_int(SOG_TOTDONAF); sog.put(SOG_TOTDONAF,totdon+1); dataultdon = sog.get_date(SOG_DATAULTAF); if (datadonazione>dataultdon) sog.put(SOG_DATAULTAF,datadonazione); } - char modstato = ' '; - TString16 stato = sog.get(SOG_STATO); // stato attuale - const TString16 id1 = sog.get(SOG_IDON1); // idon. 1 - const TString16 id2 = sog.get(SOG_IDON2); // idon. 2 - const TString16 id3 = sog.get(SOG_IDON3); // idon. 3 - const TString16 id4 = sog.get(SOG_IDON4); // idon. 4 - const int intsi = sog.get_int(SOG_INTSI); // intervallo per SI - const int intaf = sog.get_int(SOG_INTAF); // intervallo per AF dataultdon = sog.get_date(SOG_DATAULTDON); // data ultima donazione const TString16 tipoultdon(sog.get(SOG_TIPOULTDON)); // tipo ultima donazione TDate datasi(NULLDATE); // data prossima si calcolata TDate dataaf(NULLDATE); // data prossima af calcolata TDate dataultsi(NULLDATE); // data ultima donazione si - bool id_si = FALSE; // il soggetto è idoneo per si? - bool id_af = FALSE; // il soggetto è idoneo per af? - modstato = modstato_tcs(stato); - if (!(modstato == 'I' || modstato == 'F')) // il soggetto non è idoneo - { - TRectype* key = new TRectype(LF_CONTSAN); + // il soggetto è idoneo per il tipo di donazione ? + if ((ctrlsi) && (!id_si) && (_autoid)) + { + TRectype* key = new TRectype(LF_IDONEITA); long codice = sog.get_long(SOG_CODICE); - key->put(CON_CODICE, codice); - int err = _scontrolli->read(key); - int progcon = _scontrolli->rows()+1; - TRectype& reccon = _contsan->curr(); - reccon.zero(); - reccon.put(CON_CODICE, codice); - reccon.put(CON_PROGCON, progcon); - reccon.put(CON_DATACON, datadonazione); - reccon.put(CON_TIPOCON, FINE_SOSPENSIONE); + key->put(IDO_CODICE, codice); + int err = _sidoneita->read(key); + int progido = _sidoneita->rows()+1; + TRectype& recido = _idoneita->curr(); + recido.zero(); + recido.put(IDO_CODICE, codice); + recido.put(IDO_PROGIDO, progido); + recido.put(IDO_DATAIDO, datadonazione); + recido.put(IDO_IDO_SOS, "ID"); + recido.put(IDO_TIPOIDO, "SI"); TString80 resp = user(); resp << " - HA DONATO OGGI"; - reccon.put(CON_RESPONSAB, resp); - _scontrolli->add_row(reccon); - _scontrolli->rewrite(); - TRectype* keyc = new TRectype(LF_IDONEITA); - keyc->put(IDO_CODICE, row.get(0)); - err = _sidoneita->read(keyc); + recido.put(IDO_RESPONSAB, resp); + recido.put(IDO_MOTIVO, _motivoid); + recido.put(IDO_INTERVALLO, sog.get(SOG_INTSI)); + if (sog.get_int(SOG_INTSI) == 0) + { + const TString16 sesso = sog.get(SOG_SESSO); + if (sesso == "2") + { + TDate datanasc = sog.get_date(SOG_DATANASC); + int eta = datadonazione.year() - datanasc.year(); + if(eta <= _etadonne) + recido.put(IDO_INTERVALLO, _intsi_f1); + else + recido.put(IDO_INTERVALLO, _intsi_f2); + } + else + recido.put(IDO_INTERVALLO, _intsi_m); + } + _sidoneita->add_row(recido); + _sidoneita->rewrite(); + TRectype* keyc = new TRectype(LF_CONTSAN); + keyc->put(CON_CODICE, codice); + err = _scontrolli->read(keyc); + con_reord(sog.curr(),_scontrolli,_sidoneita); + sog.rewrite(); + stato = sog.get(SOG_STATO); // stato attuale + modstato = modstato_tcs(stato); + } + if ((ctrlaf) && (!id_af) && (_autoid)) + { + TRectype* key = new TRectype(LF_IDONEITA); + long codice = sog.get_long(SOG_CODICE); + key->put(IDO_CODICE, codice); + int err = _sidoneita->read(key); + int progido = _sidoneita->rows()+1; + TRectype& recido = _idoneita->curr(); + recido.zero(); + recido.put(IDO_CODICE, codice); + recido.put(IDO_PROGIDO, progido); + recido.put(IDO_DATAIDO, datadonazione); + recido.put(IDO_IDO_SOS, "ID"); + recido.put(IDO_TIPOIDO, "AF"); + TString80 resp = user(); + resp << " - HA DONATO OGGI"; + recido.put(IDO_RESPONSAB, resp); + recido.put(IDO_MOTIVO, _motivoid); + recido.put(IDO_INTERVALLO, sog.get(SOG_INTAF)); + if (sog.get_int(SOG_INTAF) == 0) + recido.put(IDO_INTERVALLO, _intaf_m); + _sidoneita->add_row(recido); + _sidoneita->rewrite(); + TRectype* keyc = new TRectype(LF_CONTSAN); + keyc->put(CON_CODICE, codice); + err = _scontrolli->read(keyc); con_reord(sog.curr(),_scontrolli,_sidoneita); sog.rewrite(); stato = sog.get(SOG_STATO); // stato attuale modstato = modstato_tcs(stato); } + sog.get(SOG_STATO); // stato attuale + statosi = sog.get(SOG_STATOSI); // stato attuale SI + statoaf = sog.get(SOG_STATOAF); // stato attuale AF + id1 = sog.get(SOG_IDON1); // idon. 1 + id2 = sog.get(SOG_IDON2); // idon. 2 + id3 = sog.get(SOG_IDON3); // idon. 3 + id4 = sog.get(SOG_IDON4); // idon. 4 + intsi = sog.get_int(SOG_INTSI); // intervallo per SI + intaf = sog.get_int(SOG_INTAF); // intervallo per AF + modstato = modstato_tcs(stato); if (modstato == 'I' || modstato == 'F') // il soggetto è idoneo { - id_si = (is_idon(id1,id2,id3,id4,IDON_SI) && intsi != 0); // il soggetto è idoneo SI - id_af = (is_idon(id1,id2,id3,id4,IDON_AF) && intaf != 0); // il soggetto è idoneo AF + //id_si = (is_idon(id1,id2,id3,id4,IDON_SI) && intsi != 0); // il soggetto è idoneo SI + //id_af = (is_idon(id1,id2,id3,id4,IDON_AF) && intaf != 0); // il soggetto è idoneo AF + id_si = ((statosi == "ID") && (intsi != 0)); // il soggetto è idoneo SI + id_af = ((statoaf == "ID") && (intaf != 0)); // il soggetto è idoneo AF if (dataultdon.ok()) // se ha fatto almeno una donazione { @@ -919,7 +997,9 @@ bool TGiornalieroDC::tipodon_handler(TMask_field& f, KEY k) TString16 tipodon = m.get(F_S_TIPODON); if (tipodon.empty()) tipodon = app().get_mask().get(F_TIPODON); - TDate datadon = app().get_mask().get_date(F_DATADON); + TDate datadon = m.get_date(F_S_DATADON); + if (!datadon.ok()) + datadon = app()._datadon; if (is_donaz(tipodon,IDON_SI)) datapros = sog.get_date(SOG_DATAPROSSI); else diff --git a/at/atlib.h b/at/atlib.h index 067d702d3..b9d478d39 100755 --- a/at/atlib.h +++ b/at/atlib.h @@ -1,5 +1,6 @@ #define IDON_SI "SI" #define IDON_AF "AF" +#define IDON_PL "PL" #define IDONEITA "ID" #define SOSPENSIONE "SO" diff --git a/at/atlib1.cpp b/at/atlib1.cpp index 9cee6bb08..9568489ff 100755 --- a/at/atlib1.cpp +++ b/at/atlib1.cpp @@ -218,6 +218,18 @@ void con_reord(TRectype& soggetto, TRecord_array* controlli, TRecord_array* idon if (intervallo != 0 && ido_sos == IDONEITA) { soggetto.put(SOG_INTAF,intervallo); + if (id1 != IDON_PL && id2 != IDON_PL && id3 != IDON_PL && id4 != IDON_PL) + if (id1.empty()) + soggetto.put(SOG_IDON1,IDON_PL); + else + if (id2.empty()) + soggetto.put(SOG_IDON2,IDON_PL); + else + if (id3.empty()) + soggetto.put(SOG_IDON3,IDON_PL); + else + if (id4.empty()) + soggetto.put(SOG_IDON4,IDON_PL); } } }