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
This commit is contained in:
cris 1998-09-25 13:12:07 +00:00
parent 87caab9880
commit 4a1bc183a2
3 changed files with 127 additions and 34 deletions

View File

@ -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

View File

@ -1,5 +1,6 @@
#define IDON_SI "SI"
#define IDON_AF "AF"
#define IDON_PL "PL"
#define IDONEITA "ID"
#define SOSPENSIONE "SO"

View File

@ -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);
}
}
}