Patch level : 1.7 at 682

Files correlati     : at8.exe
Ricompilazione Demo : [ ]
Commento            : Aggiornamento dati da CETRAPLUS: last version


git-svn-id: svn://10.65.10.50/trunk@11781 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 2004-02-26 13:50:17 +00:00
parent aaa5f2c762
commit 0df931908c

View File

@ -44,6 +44,7 @@ class TCtpr2at: public TSkeleton_application
TRecord_array* _sidoneita;
TAssoc_array* _array_comuni;
TAssoc_array* _array_donaz;
TAssoc_array* _array_sospesi;
int _numdon1, _numdon2;
TString4 _catini1, _catfin1, _catini2, _catfin2;
@ -63,7 +64,6 @@ protected:
void transfer_file(const bool prima = TRUE);
static bool annulla_handler(TMask_field& f, KEY k);
bool test_donation(TRectype& recsog, const char* tipo, const TDate& datadon, const TString& luogodon);
bool test_inter(TRectype& recsog, const char* tipo, const TDate& datadon, int inter);
void calcola_categoria(TRectype& recsog);
bool print_header();
void print_line(const TString& rigastampa = "");
@ -101,6 +101,7 @@ bool TCtpr2at::create()
_sidoneita = new TRecord_array(LF_IDONEITA,IDO_PROGIDO);
_array_comuni = new TAssoc_array();
_array_donaz = new TAssoc_array();
_array_sospesi = new TAssoc_array();
TConfig config(CONFIG_STUDIO);
_numdon1 = config.get_int("NumDon1");
_numdon2 = config.get_int("NumDon2");
@ -122,6 +123,7 @@ bool TCtpr2at::create()
// distruzione dell'applicazione
bool TCtpr2at::destroy()
{
delete _array_sospesi;
delete _array_donaz;
delete _array_comuni;
delete _sidoneita;
@ -150,45 +152,6 @@ void TCtpr2at::main_loop()
}
}
bool TCtpr2at::test_donation(TRectype& recsog, const char* tipo, const TDate& datadon, const TString& luogodon)
{
//ricostruisce le donazioni del soggetto in esame
TRectype* key = new TRectype(LF_DONAZ);
key->put(DON_CODICE, recsog.get(SOG_CODICE));
TRecord_array donazioni(LF_DONAZ,DON_PROGDON);
donazioni.read(key);
// verificare se ha fatto una donazione di tipo <tipo> con data successiva all'ultima donazione
const int r=donazioni.last_row();
if (r > 0)
{
const TRectype& lastdon = donazioni[r];
if (lastdon.get_date(DON_DATADON) >= datadon)
return FALSE;
}
//aggiunge la nuova donazione
// compila i dati della donazione in esame
TRectype* rec = new TRectype(LF_DONAZ);
rec->put(DON_CODICE, recsog.get(SOG_CODICE));
rec->put(DON_PROGDON,r+1);
rec->put(DON_DATADON, datadon);
rec->put(DON_TIPODON, tipo);
rec->put(DON_CODSEZ,recsog.get(SOG_CODSEZ));
rec->put(DON_CODSOT,recsog.get(SOG_CODSOT));
rec->put(DON_LUOGODON, luogodon);
if (r == 0) //puó essere una prima donazione...
rec->put(DON_PRIMADON,"X");
donazioni.insert_row(rec);
donazioni.write(TRUE);
calcola_donazioni_lib(recsog, &donazioni); // questo metodo sistema tutto!!!
calcola_categoria(recsog);
// aggiorno data e utente ultimo aggiornamento
const TDate oggi(TODAY);
recsog.put(SOG_DATAULTAGG,oggi);
recsog.put(SOG_UTENULTAGG,"SIT");
return TRUE;
}
void TCtpr2at::calcola_categoria(TRectype& recsog)
{
TString256 stampa;
@ -226,56 +189,6 @@ void TCtpr2at::calcola_categoria(TRectype& recsog)
}
}
bool TCtpr2at::test_inter(TRectype& recsog, const char* tipo, const TDate& datadon, int inter)
{
TRectype* key_cont = new TRectype(LF_CONTSAN);
key_cont->put(CON_CODICE, recsog.get(SOG_CODICE));
TRecord_array controlli(LF_CONTSAN,CON_PROGCON);
controlli.read(key_cont);
TRectype* key = new TRectype(LF_IDONEITA);
key->put(IDO_CODICE, recsog.get(SOG_CODICE));
TRecord_array idoneita(LF_IDONEITA,IDO_PROGIDO);
idoneita.read(key);
TString4 stato = recsog.get(SOG_STATO);
if (modstato_tcs(stato) != 'S' && stato.not_empty())
return FALSE;
if (tipo == "SI")
stato = recsog.get(SOG_STATOSI);
else
stato = recsog.get(SOG_STATOAF);
if (modstato_tcs(stato) != 'S' && stato.not_empty())
return FALSE;
const int r = idoneita.last_row(); //se trova una data idoneita >= di quella in esame, quest'ultima viene ignorata
if (r > 0)
{
const TRectype& lastido = idoneita[r];
if (lastido.get_date(IDO_DATAIDO) >= datadon)
return FALSE;
}
TRectype* rec = new TRectype(LF_IDONEITA);
rec->put(IDO_CODICE, recsog.get(SOG_CODICE));
rec->put(IDO_PROGIDO, r+1);
rec->put(IDO_DATAIDO, datadon);
rec->put(IDO_TIPOIDO, stricmp(tipo, "SI") != 0 ? "AF" : "SI"); // Il mondo è bello perchè c'é l'AVIS (tutte le donaz. non SI sono AF! mah?!)
rec->put(IDO_IDO_SOS, "ID");
rec->put(IDO_INTERVALLO, inter);
// aggiunto da cristina il 18/09/2002 altrimenti non so che quella riga é stata aggiunta da CT
rec->put(IDO_RESPONSAB, "TRASF. DA SIT");
idoneita.add_row(rec);
idoneita.write();
con_reord(recsog, &controlli, &idoneita);
// aggiorno data e utente ultimo aggiornamento (Cristina 18/09/2002)
const TDate oggi(TODAY);
recsog.put(SOG_DATAULTAGG,oggi);
recsog.put(SOG_UTENULTAGG,"SIT");
return TRUE;
}
bool TCtpr2at::print_header()
{
if (printer().open())
@ -706,6 +619,13 @@ bool TCtpr2at::update_record(TRectype& record_at, TAssoc_array& record_ct)
TString16 tipocontrollo = recpr1.get("S7");
if (tipocontrollo.not_empty())
{
TString16 finesosp = (TString4&) _configfile->get(val,"FINESOSPENSIONE");
if (finesosp == tipocontrollo)
{
TString16& str = (TString16&) record_ct["ID_ANAGRAFICA"];
if (!_array_sospesi->is_key(str))
_array_sospesi->add(str, record_ct["ID_ANAGRAFICA"]) ;
}
//aggiorna_controlli();
}
}
@ -1033,6 +953,13 @@ bool TCtpr2at::accesso(const TString& istruzione)
int error = NOERR;
TAssoc_array record;
if (build_record(record, istruzione))
{
// Se DT_CANCEL non vuota il record e`stato cancellato
// quindi: verifico DT_ACCESSO, se uguale, non inserisco per niente il record
// se diversa devo andare a cercare quell'accesso e cancellarlo
TString16& strc = (TString16&) record["DT_CANCEL"];
const TDate dt_cancel = TDate(atoi(strc.sub(8,10)) ,atoi(strc.sub(5,7)), atoi(strc.sub(0,4)));
if (dt_cancel.empty())
{
// ricerca del soggetto per codice SIT
TString16& id_anagrafica = (TString16&) record["ID_ANAGRAFICA"];
@ -1075,8 +1002,10 @@ bool TCtpr2at::accesso(const TString& istruzione)
recdon.put(DON_LUOGODON, luogodon_at);
_donaz->rewrite();
TString16& prog = (TString16&) record["PROG_GIORNAL"];
if (!_array_donaz->is_key(prog))
_array_donaz->add(prog, record["ID_ANAGRAFICA"]) ;
TString80 chiave = str;
chiave << prog;
if (!_array_donaz->is_key(chiave))
_array_donaz->add(chiave, record["ID_ANAGRAFICA"]) ;
}
}
else
@ -1084,8 +1013,13 @@ bool TCtpr2at::accesso(const TString& istruzione)
// trattasi di controllo o visita
TString4 tipocon = _configfile->get(tp_accesso, "ACCESSI");
TString16& str = (TString16&) record["DT_ACCESSO"];
const TDate datacon = TDate(atoi(str.sub(8,10)) ,atoi(str.sub(5,7)), atoi(str.sub(0,4)));
if (tipocon.empty())
TDate datacon = TDate(atoi(str.sub(8,10)) ,atoi(str.sub(5,7)), atoi(str.sub(0,4)));
TString16& prog = (TString16&) record["PROG_GIORNAL"];
TString80 chiave = str;
chiave << prog;
if (!_array_donaz->is_key(chiave))
_array_donaz->add(chiave, record["ID_ANAGRAFICA"]) ;
if (tipocon.empty() && _message)
{
print_line(stampa);
stampa = "Tipo accesso ";
@ -1115,6 +1049,32 @@ bool TCtpr2at::accesso(const TString& istruzione)
const TRectype& riga = _scontrolli->row(r);
const TDate d = riga.get(CON_DATACON);
if (datacon==d) // esiste gia' un controllo in questa data
{
// verifico la priorita
TString4 tipoes = riga.get(CON_TIPOCON);
if (tipoes != tipocon)
{
int p_tipocon = _configfile->get_int(tipocon, "PRIORITA");
int p_tipoes = _configfile->get_int(tipoes, "PRIORITA");
if (p_tipocon == 999)
{
++datacon;
recc->put(CON_DATACON, datacon);
recc->put(CON_RESPONSAB, "CETRAPLUS ieri");
recc->put(CON_PROGCON,r+1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
else
{
if (p_tipocon > p_tipoes)
{
recc->put(CON_PROGCON,riga.get(CON_PROGCON));
_scontrolli->add_row(recc);
insert = TRUE;
}
else
{
exist=TRUE;
r=0;
@ -1127,6 +1087,11 @@ bool TCtpr2at::accesso(const TString& istruzione)
print_line();
}
}
}
}
else
exist=TRUE;
}
else
if (datacon > d)
{
@ -1140,6 +1105,7 @@ bool TCtpr2at::accesso(const TString& istruzione)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
}
else
@ -1147,6 +1113,7 @@ bool TCtpr2at::accesso(const TString& istruzione)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
if (!exist)
{
@ -1176,6 +1143,16 @@ bool TCtpr2at::accesso(const TString& istruzione)
stampa << record["DT_ACCESSO"];
print_line(stampa);
}
}
else
{
TString16& stra = (TString16&) record["DT_ACCESSO"];
const TDate dt_accesso = TDate(atoi(stra.sub(8,10)) ,atoi(stra.sub(5,7)), atoi(stra.sub(0,4)));
if (dt_cancel != dt_accesso)
{
// cercare il donatore ed eliminare l'accesso
}
}
return (error == NOERR);
}
else
@ -1188,6 +1165,10 @@ bool TCtpr2at::sacca(const TString& istruzione)
int err = NOERR;
TAssoc_array record;
if (build_record(record, istruzione))
{
TString16& strc = (TString16&) record["DT_CANCEL"];
const TDate dt_cancel = TDate(atoi(strc.sub(8,10)) ,atoi(strc.sub(5,7)), atoi(strc.sub(0,4)));
if (dt_cancel.empty())
{
// ricerca del soggetto per codice SIT
TString16& id_anagrafica = (TString16&) record["ID_ANAGRAFICA"];
@ -1312,6 +1293,17 @@ bool TCtpr2at::sacca(const TString& istruzione)
print_line();
}
}
else
{
TString16& stra = (TString16&) record["DT_ACCESSO"];
const TDate dt_accesso = TDate(atoi(stra.sub(8,10)) ,atoi(stra.sub(5,7)), atoi(stra.sub(0,4)));
if (dt_cancel != dt_accesso)
{
// cercare il donatore ed eliminare la donazione
}
}
}
return TRUE;
}
@ -1321,16 +1313,23 @@ bool TCtpr2at::analisi(const TString& istruzione)
int error = NOERR;
TAssoc_array record;
if (build_record(record, istruzione))
{
TString16& strc = (TString16&) record["DT_CANCEL"];
const TDate dt_cancel = TDate(atoi(strc.sub(8,10)) ,atoi(strc.sub(5,7)), atoi(strc.sub(0,4)));
if (dt_cancel.empty())
{
TString16& id_analisi = (TString16&) record["ID_ANALISI"];
TString4 tipocon = _configfile->get(id_analisi, "ANALISI");
if (!tipocon.empty())
{
TString16& prog = (TString16&) record["PROG_GIORNAL"];
if (_array_donaz->is_key(prog))
TString16& str = (TString16&) record["DT_ACCESSO"];
TString80 chiave = str;
chiave << prog;
if (_array_donaz->is_key(chiave))
{
// ricerca del soggetto per codice SIT
TString16& id_anagrafica = (TString16&) _array_donaz->find(prog);
TString16& id_anagrafica = (TString16&) _array_donaz->find(chiave);
_rel->lfile().setkey(7);
TRectype& recsog = _rel->curr();
recsog.zero();
@ -1341,8 +1340,8 @@ bool TCtpr2at::analisi(const TString& istruzione)
stampa = recsog.get(SOG_COGNOME);
stampa << " " << recsog.get(SOG_NOME);
stampa << " " << recsog.get(SOG_DATANASC);
TString16& str = (TString16&) record["DT_ACCESSO"];
const TDate datacon = TDate(atoi(str.sub(8,10)) ,atoi(str.sub(5,7)), atoi(str.sub(0,4)));
//TString16& str = (TString16&) record["DT_ACCESSO"];
TDate datacon = TDate(atoi(str.sub(8,10)) ,atoi(str.sub(5,7)), atoi(str.sub(0,4)));
TRectype* recc = new TRectype(LF_CONTSAN);
recc->put(CON_CODICE, recsog.get(SOG_CODICE));
@ -1363,6 +1362,32 @@ bool TCtpr2at::analisi(const TString& istruzione)
const TRectype& riga = _scontrolli->row(r);
const TDate d = riga.get(CON_DATACON);
if (datacon==d) // esiste gia' un controllo in questa data
{
// verifico la priorita
TString4 tipoes = riga.get(CON_TIPOCON);
if (tipoes != tipocon)
{
int p_tipocon = _configfile->get_int(tipocon, "PRIORITA");
int p_tipoes = _configfile->get_int(tipoes, "PRIORITA");
if (p_tipocon == 999)
{
++datacon;
recc->put(CON_DATACON, datacon);
recc->put(CON_RESPONSAB, "CETRAPLUS ieri");
recc->put(CON_PROGCON,r+1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
else
{
if (p_tipocon > p_tipoes)
{
recc->put(CON_PROGCON,riga.get(CON_PROGCON));
_scontrolli->add_row(recc);
insert = TRUE;
}
else
{
exist=TRUE;
r=0;
@ -1375,6 +1400,11 @@ bool TCtpr2at::analisi(const TString& istruzione)
print_line();
}
}
}
}
else
exist=TRUE;
}
else
if (datacon > d)
{
@ -1388,6 +1418,7 @@ bool TCtpr2at::analisi(const TString& istruzione)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
}
else
@ -1395,6 +1426,7 @@ bool TCtpr2at::analisi(const TString& istruzione)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
if (!exist)
{
@ -1427,6 +1459,16 @@ bool TCtpr2at::analisi(const TString& istruzione)
}
}
}
else
{
TString16& stra = (TString16&) record["DT_ACCESSO"];
const TDate dt_accesso = TDate(atoi(stra.sub(8,10)) ,atoi(stra.sub(5,7)), atoi(stra.sub(0,4)));
if (dt_cancel != dt_accesso)
{
// cercare il donatore ed eliminare il controllo
}
}
}
return FALSE;
}
@ -1466,7 +1508,7 @@ bool TCtpr2at::esclusione(const TString& istruzione)
const long codsog = recsog.get_long(SOG_CODICE);
//TString16& str = (TString16&) record["DA_DATA"];
//const TDate datacon = TDate(atoi(str.sub(8,10)) ,atoi(str.sub(5,7)), atoi(str.sub(0,4)));
const TDate datacon(TODAY);
TDate datacon(TODAY);
TString16& str = (TString16&) record["A_DATA"];
const TDate datapross = TDate(atoi(str.sub(8,10)) ,atoi(str.sub(5,7)), atoi(str.sub(0,4)));
TDate datanulla(NULLDATE);
@ -1477,6 +1519,9 @@ bool TCtpr2at::esclusione(const TString& istruzione)
recc->put(CON_DATACON, datacon);
recc->put(CON_TIPOCON, tipocon);
recc->put(CON_PROSSDATA, datapross);
if (_array_sospesi->is_key(id_anagrafica))
recc->put(CON_PROSSTIPO, "FS");
else
recc->put(CON_PROSSTIPO, tipocon);
recc->put(CON_RESPONSAB, "CETRAPLUS");
@ -1493,6 +1538,32 @@ bool TCtpr2at::esclusione(const TString& istruzione)
const TRectype& riga = _scontrolli->row(r);
const TDate d = riga.get(CON_DATACON);
if (datacon==d) // esiste gia' un controllo in questa data
{
// verifico la priorita
TString4 tipoes = riga.get(CON_TIPOCON);
if (tipoes != tipocon)
{
int p_tipocon = _configfile->get_int(tipocon, "PRIORITA");
int p_tipoes = _configfile->get_int(tipoes, "PRIORITA");
if (p_tipocon == 999)
{
++datacon;
recc->put(CON_DATACON, datacon);
recc->put(CON_RESPONSAB, "CETRAPLUS ieri");
recc->put(CON_PROGCON,r+1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
else
{
if (p_tipocon > p_tipoes)
{
recc->put(CON_PROGCON,riga.get(CON_PROGCON));
_scontrolli->add_row(recc);
insert = TRUE;
}
else
{
exist=TRUE;
r=0;
@ -1505,6 +1576,11 @@ bool TCtpr2at::esclusione(const TString& istruzione)
print_line();
}
}
}
}
else
exist=TRUE;
}
else
if (datacon > d)
{
@ -1518,6 +1594,7 @@ bool TCtpr2at::esclusione(const TString& istruzione)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
}
else
@ -1525,6 +1602,7 @@ bool TCtpr2at::esclusione(const TString& istruzione)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
if (!exist)
{