campo-sirio/at/at8900.cpp
alex 797e8900fb Patch level : 4.0 673
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Riportata la versione 3.1 patch 873


git-svn-id: svn://10.65.10.50/trunk@15151 c028cbd2-c16b-5b4b-a496-9718f37d4682
2007-03-30 13:51:17 +00:00

1763 lines
50 KiB
C++
Executable File
Raw Blame History

#include <applicat.h>
#include <filetext.h>
#include <mask.h>
#include <tabutil.h>
#include "at8.h"
#include "at8900a.h"
#include "atlib.h"
#include "contsan.h"
#include "donaz.h"
#include "idoneita.h"
#include "soggetti.h"
#include "convoc.h"
#include "rconvoc.h"
#include "storico.h"
#include "comuni.h"
#include "medici.h"
////////////////////////////////////////////////////////
// Classe TCtpr2at_file customizzata dalla TFile_text //
////////////////////////////////////////////////////////
/////////////////////////////////////////////////////
// Classe TCtpr2at: applicazione principale //
/////////////////////////////////////////////////////
class TCtpr2at: public TSkeleton_application
{
TMask* _msk;
TRelation* _rel;
TRelation* _relcom;
TLocalisamfile* _soggetti;
TLocalisamfile* _donaz;
TLocalisamfile* _contsan;
TLocalisamfile* _idoneita;
TRecord_array* _sdonazioni;
TRecord_array* _scontrolli;
TRecord_array* _sidoneita;
TAssoc_array* _array_comuni;
TAssoc_array* _array_donaz;
TAssoc_array* _array_sospesi;
int _numdon1, _numdon2;
TString4 _catini1, _catfin1, _catini2, _catfin2;
bool _sttess2, _dataisc;
TConfig* _configfile;
TDate _dataagg;
long _progins;
bool _message;
TString80 _intestazione;
protected:
virtual bool create(void);
virtual void main_loop();
virtual bool destroy(void) ;
void transfer();
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);
void calcola_categoria(TRectype& recsog);
bool print_header();
void print_line(const TString& rigastampa = "");
void print_footer();
bool build_record(TAssoc_array& record, const TString& istruzione);
bool update_record(TRectype& recsog, TAssoc_array& record);
bool soggetto(const TString& istruzione);
bool accesso(const TString& istruzione);
bool sacca(const TString& istruzione);
bool analisi(const TString& istruzione);
bool intervalli(const TString& istruzione);
bool esclusione(const TString& istruzione);
long get_next_key();
public:
const TMask& msk() const { return *_msk; }
TCtpr2at() {}
virtual ~TCtpr2at() {}
};
// restituisce un riferimento all' applicazione
inline TCtpr2at& app() { return (TCtpr2at&) main_app();}
// creazione dell'applicazione
bool TCtpr2at::create()
{
open_files(LF_SOGGETTI, LF_DONAZ, LF_CONTSAN, LF_IDONEITA, LF_CONVOC, LF_RCONVOC, LF_STORICO, 0);
_msk = new TMask("at8900a");
_rel = new TRelation(LF_SOGGETTI);
_relcom = new TRelation(LF_COMUNI);
_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);
_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");
_catini1 = config.get("CatIni1");
_catfin1 = config.get("CatFin1");
_catini2 = config.get("CatIni2");
_catfin2 = config.get("CatFin2");
_sttess2 = config.get_bool("StTess2");
_dataisc = config.get_bool("DataIsc");
_configfile = new TConfig("at8900a.ini");
_donaz->setkey(3);
_donaz->last();
_progins = _donaz->get_long(DON_PROGINS);
_donaz->setkey(1);
return TSkeleton_application::create();
}
// distruzione dell'applicazione
bool TCtpr2at::destroy()
{
delete _array_sospesi;
delete _array_donaz;
delete _array_comuni;
delete _sidoneita;
delete _scontrolli;
delete _sdonazioni;
delete _idoneita;
delete _contsan;
delete _donaz;
delete _rel;
delete _msk;
delete _configfile;
return TSkeleton_application::destroy();
}
// carica la maschera
void TCtpr2at::main_loop()
{
_intestazione = "";
_message = FALSE;
_msk->set(F_FILENAME,_configfile->get("PERCORSO", "ARCHIVIO"));
KEY key = _msk->run();
if (key == K_ENTER)
{
transfer();
_configfile->set("PERCORSO", _msk->get(F_FILENAME), "ARCHIVIO");
}
}
void TCtpr2at::calcola_categoria(TRectype& recsog)
{
TString256 stampa;
TTable ctd("CTD");
TString4 catdon = recsog.get(SOG_CATDON);
const int totdon = recsog.get_int(SOG_TOTDON);
ctd.put("CODTAB",catdon);
if (ctd.read() == NOERR)
{
bool dimissione = ctd.get_bool("B0");
if (dimissione)
{
const TString& cat_coll = ctd.get("S6");
if (cat_coll.not_empty())
{
stampa = "Il soggetto <20> dimesso, non effettuato cambio di categoria ";
stampa << cat_coll;
print_line(stampa);
}
}
else
{
if ((catdon == _catini1 || _catini1.empty()) && (totdon>=_numdon1) && _catfin1.not_empty())
{
recsog.put(SOG_CATDON, _catfin1);
catdon = _catfin1;
}
bool tstampata = recsog.get_bool(SOG_T_STAMPATA);
if ((catdon == _catini2 || _catini2.empty()) && (totdon>=_numdon2) && _catfin2.not_empty() && (!_sttess2 || tstampata))
{
recsog.put(SOG_CATDON, _catfin2);
catdon = _catfin2;
}
}
}
}
bool TCtpr2at::print_header()
{
if (printer().open())
{
TDate oggi(TODAY);
TPrintrow row;
TString256 rigastampa;
rigastampa = "TRASFERIMENTO DATI DA CETRAPLUS";
rigastampa.center_just(132);
row.put(rigastampa);
row.put("@>", 1);
row.put("Pag. @#", 115);
printer().setheaderline(2, row);
rigastampa = "";
rigastampa.fill('-',132);
row.reset();
row.put(rigastampa);
printer().setheaderline(3, row);
return TRUE;
}
else
return error_box("Errore in apertura stampante.");
}
void TCtpr2at::print_line(const TString& rigastampa)
{
TPrintrow row;
row.reset();
if (rigastampa.not_empty())
if (_intestazione.not_empty())
{
printer().print(row);
row.reset();
row.put((const char*) _intestazione);
printer().print(row);
_intestazione = "";
row.reset();
}
row.put((const char*) rigastampa);
printer().print(row);
}
void TCtpr2at::print_footer()
{
printer().formfeed();
printer().close();
}
void TCtpr2at::transfer_file(const bool prima)
{
_dataagg = TODAY;
TString256 rigastampa;
TScanner s(_msk->get(F_FILENAME));
TString16 key, archivio;
TString istruzione;
while (s.ok())
{
const TString& line = s.line();
if (line.find("UPDATE") != -1)
istruzione = line;
else
{
if (line.find("INSERT") == -1)
istruzione << line;
if (istruzione.not_empty())
{
TToken_string* record = new TToken_string(istruzione);
archivio = record->get(0);
archivio.trim(); archivio.upper();
int n = _configfile->get_int(archivio, "ARCHIVIO");
_configfile->set_paragraph(archivio);
if (prima)
{
switch (n)
{
case 1:
soggetto(record->get(1));
break;
case 2:
sacca(record->get(1));
break;
case 4:
intervalli(record->get(1));
break;
case 5:
esclusione(record->get(1));
break;
default:
break;
}
}
else
{
switch (n)
{
case 3:
analisi(record->get(1));
break;
case 6:
accesso(record->get(1));
break;
default:
break;
}
}
istruzione = "";
}
}
}
s.close();
}
// trasferimento dati da file CT su programma avis
void TCtpr2at::transfer()
{
if (print_header())
{
transfer_file();
transfer_file(FALSE);
print_footer();
}
else
error_box("Errore in apertura stampante.");
}
bool TCtpr2at::build_record(TAssoc_array& record, const TString& istruzione)
{
bool ok = TRUE;
record.destroy();
TString lavoro = istruzione;
TString80 campo;
TString valore;
int indice1 = lavoro.find(" SET ");
int indice2 = lavoro.find(" WHERE ");
if ((indice1 != -1) && (indice2 != -1))
{
lavoro = lavoro.sub(indice1+5,indice2);
lavoro.trim();
int i = lavoro.find("''");
if (i != -1)
{
TString aiuto = lavoro.sub(0,i);
aiuto << '~';
aiuto << lavoro.sub(i+2);
lavoro = aiuto;
}
while (lavoro.not_empty())
{
indice1 = lavoro.find('=');
if (indice1 != -1)
{
campo = lavoro.sub(0, indice1-1);
campo.trim();
lavoro = lavoro.sub(indice1+1);
lavoro.trim();
indice1 = lavoro.find(',');
if (indice1 != -1)
{
valore = lavoro.sub(0,indice1);
valore.trim();
if ((valore[0] == '\'') && (valore[valore.len()-1] == '\''))
{
// e' una stringa: tolgo le virgolette
valore = valore.sub(1,valore.len()-1);
lavoro = lavoro.sub(indice1+1);
}
else
{
if ((valore[0] != '\'') && (valore[valore.len()-1] != '\''))
// e' un numero oppure null (in questo caso vuoto il valore
{
if (valore == "null")
valore = "";
lavoro = lavoro.sub(indice1+1);
}
else
// e' una stringa dove c'<27> una virgola, quindi elaboro diversamente per trovare il vero valore
{
indice1 = lavoro.find("\',");
indice2 = lavoro.find("\' ,");
if (indice1 != 1 && indice2 != -1)
{
if (indice2 > indice1)
{
valore = lavoro.sub(0,indice1+1);
lavoro = lavoro.sub(indice1+2);
}
else
{
valore = lavoro.sub(0,indice2+1);
lavoro = lavoro.sub(indice2+3);
}
}
else
{
if (indice1 != 0)
{
valore = lavoro.sub(0,indice1+1);
lavoro = lavoro.sub(indice1+2);
}
else
{
if (indice2 != 0)
{
valore = lavoro.sub(0,indice2-1);
lavoro = lavoro.sub(indice2+3);
}
else
{
// e' l'ultimo campo della lista, quindi non trova la virgola
valore = lavoro.trim();
lavoro = "";
}
}
}
valore = valore.sub(1,valore.len()-1);
}
}
}
else
{
valore = lavoro.trim();
lavoro = "";
}
}
else
lavoro = "";
if ((valore[0] == '\'') && (valore[valore.len()-1] == '\''))
// e' una stringa: tolgo le virgolette
valore = valore.sub(1,valore.len()-1);
else if (valore == "null")
valore = "";
campo.upper();
int doppie = valore.find("'");
while (doppie != -1)
{
if (valore[doppie+1] == '\'')
{
TString str = valore;
valore = str.sub(0,doppie);
valore << str.sub(doppie+1);
}
doppie = valore.find("'", doppie+1);
}
i = valore.find('~');
if (i != -1)
valore.replace('~','\'');
record.add(campo, valore);
}
}
else
ok = FALSE;
return ok;
}
bool TCtpr2at::soggetto(const TString& istruzione)
{
const TDate oggi(TODAY);
int error = NOERR;
TAssoc_array record;
if (build_record(record, istruzione))
{
// ricerca del soggetto per cognome, nome e data di nascita
TString80& cognome = (TString80&) record["COGNOME"];
TString80& nome = (TString80&) record["NOME"];
TString16& str = (TString16&) record["DT_NASCITA"];
TDate datanasc = TDate(atoi(str.sub(8,10)) ,atoi(str.sub(5,7)), atoi(str.sub(0,4)));
// codice centro trasfusionale per verifica cognome, nome, data di nascita
TString16& codct = (TString16&) record["ID_ANAGRAFICA"];
_rel->lfile().setkey(2);
TRectype& recsog = _rel->curr();
recsog.zero();
recsog.put(SOG_COGNOME, cognome);
recsog.put(SOG_NOME, nome);
recsog.put(SOG_DATANASC, datanasc);
error = recsog.read(_rel->lfile());
TString80 stampa = "";
_intestazione = "";
_intestazione << cognome << " " << nome << " " << datanasc;
if (error != NOERR)
{
// non ho trovato il donatore, cerco per cognome nome e codicesit
recsog.zero();
recsog.put(SOG_COGNOME, cognome);
recsog.put(SOG_NOME, nome);
error = recsog.read(_rel->lfile());
bool trovato = FALSE;
while ((!trovato) && (cognome == recsog.get(SOG_COGNOME)) && (nome == recsog.get(SOG_NOME)) && (!_rel->lfile().eof()))
{
TString16 codicesit = recsog.get(SOG_CODCT);
if ((codicesit == codct) && (codicesit.not_empty()) && codct.not_empty())
{
datanasc = recsog.get_date(SOG_DATANASC);
trovato = TRUE;
}
else
_rel->lfile().next();
}
if (trovato)
{
recsog.put(SOG_COGNOME, cognome);
recsog.put(SOG_NOME, nome);
recsog.put(SOG_DATANASC, datanasc);
error = recsog.read(_rel->lfile());
if (error == NOERR)
{
stampa = "Verificare la data di nascita: AVIS ";
stampa << datanasc;
print_line(stampa);
}
}
}
if (error != NOERR)
{
bool inserisci = TRUE;
const long eta = oggi - datanasc;
if (eta > 71)
{
const TString16& stato = (TString16&) record["DT_NASCITA"];
TRectype recpr1 = cache().get("PR1", stato);
TString16 catdon = recpr1.get("S6");
if (catdon.not_empty())
inserisci = !(cache().get("CTD", catdon).get_bool("B0"));
}
if (inserisci)
{
recsog.zero();
recsog.put(SOG_COGNOME, cognome);
recsog.put(SOG_NOME, nome);
recsog.put(SOG_DATANASC, datanasc);
recsog.put(SOG_NOTIZIARIO, 'X');
recsog.put(SOG_BENEM, 'X');
recsog.put(SOG_CODICE, get_next_key());
error = recsog.write(_rel->lfile());
stampa = "Inserito da CETRAPLUS";
print_line(stampa);
}
}
if (error == NOERR)
{
if (update_record(recsog, record))
{
recsog.put(SOG_DATAULTAGG, oggi);
recsog.put(SOG_UTENULTAGG, "CETRAPLUS");
error = recsog.rewrite(_rel->lfile());
}
}
return (error == NOERR);
}
else
return FALSE;
}
bool TCtpr2at::update_record(TRectype& record_at, TAssoc_array& record_ct)
{
TString256 stampa = "";
TString field, str;
bool update = FALSE;
FOR_EACH_ASSOC_STRING(record_ct, obj, key, val)
{
field = _configfile->get(key);
if (field.not_empty())
{
update = TRUE;
if (field.sub(0,2) == "!_")
{
TString80 elab = field.sub(2);
TString16 campo = "";
const int virgola = elab.find(',');
if (virgola != -1)
{
campo = elab.sub(virgola+1);
elab = elab.sub(0,virgola);
}
if (elab == "STATO") // stato sanitario
{
TRectype recpr1 = cache().get("PR1", val);
TString16 catdon = recpr1.get("S6");
TString16 catsog = record_at.get(SOG_CATDON);
if ((catdon.not_empty()) && (catdon != catsog))
{
bool dimissione = cache().get("CTD", catdon).get_bool("B0");
if (dimissione)
{
if (catsog == "NU")
catdon = "DN";
dimissione = cache().get("CTD", catsog).get_bool("B0");
}
if (!dimissione)
{
if (!(cache().get("CTD", catdon).get_bool("B0")) && (cache().get("CTD", catsog).get_bool("B0")))
{
stampa = "CATEGORIA diversa: avis ";
stampa << catsog << " sit " << catdon;
print_line(stampa);
}
else
{
if ((catdon == "NU") && (catsog == "AV"))
{
stampa = "CATEGORIA diversa: avis ";
stampa << catsog << " sit " << catdon;
print_line(stampa);
}
else if ((catsog == "SM") && (catdon == "AV"))
{
stampa = "CATEGORIA diversa: avis ";
stampa << catsog << " sit " << catdon;
print_line(stampa);
}
else
{
bool cambia = TRUE;
if ((catdon == "AV") && (catsog == "NU"))
{
const int totdon = record_at.get_int(SOG_TOTDON);
if (totdon < 1)
{
cambia = FALSE;
//stampa = "CATEGORIA diversa: avis ";
//stampa << catsog << " sit " << catdon << ", soggetto senza donazioni";
//print_line(stampa);
}
}
if (cambia)
{
stampa = "Cambio categoria: da ";
stampa << catsog << " a " << catdon;
print_line(stampa);
record_at.put(SOG_CATDON, catdon);
if (cache().get("CTD", catdon).get_bool("B0"))
{
TString16 data = record_at.get(SOG_DATADIM);
if (data.empty())
{
record_at.put(SOG_DATADIM, _dataagg);
stampa = "Inserita data dimissione ";
stampa << _dataagg.string();
print_line(stampa);
}
}
}
//aggiorna_storico();
}
}
}
}
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();
}
}
else if (elab == "DISPONIBILE") // disponibilita
{
str = val;
if (str == "NO")
{
record_at.put(SOG_DISP_AF_1, "");
record_at.put(SOG_DISP_AF_2, "");
}
else if (str == "PLA")
{
record_at.put(SOG_DISP_AF_1, "PL");
record_at.put(SOG_DISP_AF_2, "");
}
else if (str == "PLT")
{
record_at.put(SOG_DISP_AF_1, "PT");
record_at.put(SOG_DISP_AF_2, "");
}
else if (str == "SI")
{
record_at.put(SOG_DISP_AF_1, "PL");
record_at.put(SOG_DISP_AF_2, "PT");
}
}
else if (elab == "SESSO") // sesso
{
if (val[0] == 'M')
record_at.put(SOG_SESSO, "1"); // maschio
else if (val[0] == 'F')
record_at.put(SOG_SESSO, "2"); // femmina
else record_at.put(SOG_SESSO, "0"); // non specificato
}
else if (elab == "SEZIONE") // sezione/sottogruppo
{
str = val;
if (str[0] == '0')
str = str.sub(1);
if ((record_at.get(SOG_CODSEZ) != str.sub(0,2)) || (record_at.get(SOG_CODSOT) != str.sub(2,4)))
{
stampa << "SEZIONE diversa: avis " << record_at.get(SOG_CODSEZ);
stampa << record_at.get(SOG_CODSOT) << " sit " << str;
print_line(stampa);
if (record_at.get(SOG_CODSEZ).empty())
{
record_at.put(SOG_CODSEZ, str.sub(0,2));
record_at.put(SOG_CODSOT, str.sub(2,4));
}
}
}
else if (elab == "GIORNOPREF") // giorno preferito donazione
{
str = val;
if (!str.empty())
{
str << "XXXXXXX";
str = str.sub(0,7);
for (int i = 0; i< 7; i++)
{
if (str[i] != 'X')
str[i] = 'X';
else
str[i] = ' ';
}
record_at.put(SOG_GIOPREDON, str);
}
}
else if (elab == "DATA") // data
{
str = val;
TDate data = TDate(atoi(str.sub(8,10)), atoi(str.sub(5,7)), atoi(str.sub(0,4)));
if (campo.not_empty())
record_at.put(campo, data);
}
else if (elab == "COMUNE") // comune nascita o domicilio
{
update = FALSE;
TString16 codcom = "";
str = val;
if (str.not_empty())
{
if (_array_comuni->is_key(str))
{
codcom = (TString16&) _array_comuni->find(str);
update = (codcom != record_at.get(campo));
}
else
{
codcom = record_at.get(campo);
if (codcom.not_empty())
{
codcom = " |";
codcom << record_at.get(campo);
TRectype reccom = cache().get(LF_COMUNI, codcom);
if (reccom.get_long(COM_CODISTAT) != atol(str))
update = TRUE;
else
_array_comuni->add(str, reccom.get(COM_COM)) ;
}
else
update = TRUE;
if (update)
{
TString80 filtro = "";
filtro.format("%s == %ld", COM_CODISTAT, atol(str));
TCursor cur(_relcom, filtro);
if (cur.items() == 1)
{
cur.next_match(LF_COMUNI);
codcom = cur.curr().get(COM_COM);
_array_comuni->add(str, codcom);
}
else
update = FALSE;
}
}
}
if (campo.not_empty() && update)
record_at.put(campo, codcom);
}
else if (elab == "POSNEG") // positivo e negativo (rh, du)
{
if (val[0] == '+')
record_at.put(campo, "POS");
else if (val[0] == '-')
record_at.put(campo, "NEG");
else record_at.put(campo, "");
}
else if (elab == "KELL") // kell (vuoto = vuoto, presenza di K maiuscola = POS, altrimenti = NEG)
{
str = val;
if (str.empty())
record_at.put(SOG_KELL, "");
else if (str.find('K') != -1)
record_at.put(SOG_KELL, "POS");
else record_at.put(SOG_KELL, "NEG");
}
else if ((elab == "TELEFONO") || (elab == "CELLULARE")) // toglie barre e altre cose inutili dal numero di telefono
{
str = val;
str.trim();
if (str.not_empty())
{
str.strip_spaces();
str.strip("/");
str.strip("\\");
if (elab == "TELEFONO")
record_at.put(campo, str);
else
{
TString80 campo1, campo2;
const int pipe = campo.find('|');
if (pipe != -1)
{
campo2 = campo.sub(pipe+1);
campo1 = campo.sub(0,pipe);
}
if ((elab == "CELLULARE") && ((str[0]!='0') && (str.len()>9)))
record_at.put(campo1, str);
else
record_at.put(campo2, str);
}
}
}
else if (elab == "SENUMERO") // campo da caricare solo se numerico (nello specifico tess. ssn)
{
long numero = atol(val);
if (numero != 0)
record_at.put(campo, val);
}
else if (elab == "MEDICO") // medico (solo confronto)
{
str = val;
TRectype recmed = cache().get(LF_MEDICI, record_at.get(SOG_CODMED));
TString80 medico = recmed.get(MED_COGNOME);
medico.trim();
medico << ' ';
medico << recmed.get(MED_NOME);
medico.trim();
str.trim();
if ((medico != str) && (medico.not_empty() || str.not_empty()))
{
bool segnala = TRUE;
int i = medico.len();
int j = str.len();
if (i != j)
{
if ((i < j) && i > 0) j = i;
if ((j > 0) && (i > 0))
segnala = (medico.sub(0,j-1) != str.sub(0,j-1));
else
segnala = TRUE;
}
if (segnala)
{
TString256 stampa = "";
stampa << "MEDICO diverso: " << " avis " << medico << " sit " << str;
print_line(stampa);
}
}
}
else if (elab == "INDIRIZZO") // indirizzo (per vedere di isolare la localita)
{
TString80 localita = "";
str = val;
const int i = str.find('-');
if (i > 0)
{
localita = str.sub(i+1);
str = str.sub(0,i);
str.trim();
localita.trim();
localita.upper();
}
TString tmp = record_at.get(SOG_DOM_INDIR);
str.trim();
str = str.upper();
tmp.trim();
tmp = tmp.upper();
if (tmp != str)
{
TString256 stampa = "";
stampa << "INDIRIZZO ";
if (tmp.empty())
{
record_at.put(SOG_DOM_INDIR, str);
stampa << " inserito da CETRAPLUS: " << str;
}
else
stampa << " diverso: avis " << tmp << " sit " << str;
print_line(stampa);
stampa = "";
}
tmp = record_at.get(SOG_DOM_CODLOC);
TString80 desloc = cache().get("LCP",tmp).get("S0");
desloc.trim();
if (localita != desloc)
{
stampa << "LOCALITA ";
if (desloc.empty())
{
TTable lcp("LCP");
lcp.setkey(2);
lcp.put("S0", localita);
if (lcp.read() == NOERR)
{
tmp = lcp.get("CODTAB");
record_at.put(SOG_DOM_CODLOC, tmp);
stampa << " inserito da CETRAPLUS: " << tmp << " " << localita;
tmp = lcp.get("S6");
record_at.put(SOG_DOM_CAP, tmp);
}
else
stampa << " non presente in tabella avis " << localita;
}
else
stampa << " diverso: avis " << desloc << " sit " << localita;
print_line(stampa);
}
}
else if (elab == "CAP") // cap
{
str = val;
TString tmp = record_at.get(SOG_DOM_CAP);
str.trim();
tmp.trim();
if (tmp != str)
{
TString256 stampa = "";
stampa << "CAP ";
if (tmp.empty())
{
record_at.put(SOG_DOM_CAP, str);
stampa << " inserito da CETRAPLUS: " << str;
}
else
stampa << " diverso: avis " << tmp << " sit " << str;
print_line(stampa);
stampa = "";
}
}
else if ((elab == "CONFRONTA") || (elab == "SEGNALA")) // SEGNALA = solo segnalazione, CONFRONTA = segnala e modifica
{
if (campo.not_empty())
{
str = val;
TString tmp = record_at.get(campo);
str.trim();
str = str.upper();
tmp.trim();
tmp = tmp.upper();
if (tmp != str)
{
TString256 stampa = "";
if (elab == "CONFRONTA")
{
stampa << "Cambio " << campo << ": da " << tmp << " a " << str;
print_line(stampa);
record_at.put(campo, str);
}
else
{
stampa << campo << " diverso: avis " << tmp << " sit " << str;
print_line(stampa);
}
}
}
}
else if (elab == "SEVUOTO") // segnala differenza, e modifica solo se vuoto
{
if (campo.not_empty())
{
str = val;
TString tmp = record_at.get(campo);
str.trim();
str = str.upper();
tmp.trim();
tmp = tmp.upper();
if (tmp != str)
{
TString256 stampa = "";
stampa << campo;
if (tmp.empty())
{
record_at.put(campo, str);
stampa << " inserito da CETRAPLUS: " << str;
}
else
stampa << " diverso: avis " << tmp << " sit " << str;
print_line(stampa);
}
}
}
else if ((elab == "CONFRONTADATA") || (elab == "SEGNALADATA")) // come sopra ma per campi data
{
if (campo.not_empty())
{
str = val;
TDate tmp = record_at.get_date(campo);
TDate data = TDate(atoi(str.sub(8,10)), atoi(str.sub(5,7)), atoi(str.sub(0,4)));
if (tmp != data)
{
TString256 stampa = "";
stampa << campo << " diverso: avis " << tmp.string();
stampa << " sit " << data.string();
print_line(stampa);
if (elab == "CONFRONTA")
record_at.put(campo, data);
}
}
}
}
else
record_at.put(field, val); // campi da passare semplicemente!
}
}
return update;
}
long TCtpr2at::get_next_key()
{
TLocalisamfile soggetti(LF_SOGGETTI);
soggetti.setkey(1);
soggetti.last();
long codice = soggetti.get_long(SOG_CODICE);
return codice+1;
}
bool TCtpr2at::accesso(const TString& istruzione)
{
TString256 stampa = "";
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"];
_rel->lfile().setkey(7);
TRectype& recsog = _rel->curr();
recsog.zero();
recsog.put(SOG_CODCT, id_anagrafica);
error = recsog.read(_rel->lfile());
if (error == NOERR)
{
stampa = recsog.get(SOG_COGNOME);
stampa << " " << recsog.get(SOG_NOME);
stampa << " " << recsog.get(SOG_DATANASC);
// ho trovato il soggetto, ora verifico che tipo di accesso <20>
TString8& tp_accesso = (TString8&)record["TP_ACCESSO"];
if (tp_accesso[0] == 'D')
{
// trattasi di donazione
// mi serve solo il codabar per decidere il punto di prelievo (la donazione c'<27> gi<67>)
TString8 luogodon_at;
TString16& str = (TString16&) record["DT_ACCESSO"];
const TDate datadon = TDate(atoi(str.sub(8,10)) ,atoi(str.sub(5,7)), atoi(str.sub(0,4)));
TDate datanulla(NULLDATE);
if (datadon != datanulla)
{
TString16& codabar = (TString16&) record["CODABAR"];
_donaz->setkey(2);
TRectype& recdon = _donaz->curr();
recdon.zero();
recdon.put(DON_CODICE, recsog.get(SOG_CODICE));
recdon.put(DON_DATADON, datadon);
if (_donaz->read() == NOERR)
{
if ((codabar.left(2) == "52") || (codabar.left(2) == "53") || (codabar.left(2) == "54") || (codabar.left(2) == "55") || (codabar.left(2) == "56") || (codabar.left(2) == "57"))
luogodon_at = "0001";
else
{
if (recsog.get(SOG_CODSEZ) == "13")
luogodon_at = "1301";
else
luogodon_at = "0000";
}
recdon.put(DON_LUOGODON, luogodon_at);
_donaz->rewrite();
TString16& prog = (TString16&) record["PROG_GIORNAL"];
TString80 chiave = str;
chiave << prog;
if (!_array_donaz->is_key(chiave))
_array_donaz->add(chiave, record["ID_ANAGRAFICA"]) ;
}
}
}
else
{
// trattasi di controllo o visita
TString4 tipocon = _configfile->get(tp_accesso, "ACCESSI");
TString16& str = (TString16&) record["DT_ACCESSO"];
TDate datacon = TDate(atoi(str.sub(8,10)) ,atoi(str.sub(5,7)), atoi(str.sub(0,4)));
TDate datanulla(NULLDATE);
if (datacon != datanulla)
{
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 ";
stampa << tp_accesso[0] << " del ";
stampa << datacon.string() << " senza corrispondenza. Non inserito.";
print_line(stampa);
tipocon = "VS";
}
else
{
TRectype* recc = new TRectype(LF_CONTSAN);
recc->put(CON_CODICE, recsog.get(SOG_CODICE));
recc->put(CON_DATACON, datacon);
recc->put(CON_TIPOCON, tipocon);
recc->put(CON_RESPONSAB, "CETRAPLUS");
bool insert = FALSE;
bool exist = FALSE;
TRectype* keyc = new TRectype(LF_CONTSAN);
keyc->put(CON_CODICE, recsog.get(SOG_CODICE));
int err = _scontrolli->read(keyc);
if (err == NOERR)
{
int r=_scontrolli->rows();
while (r>=1 && !insert && !exist)
{
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;
if (_message)
{
print_line(stampa);
stampa = "";
stampa << "Controllo gi<67> esistente in data " << datacon.string();
print_line(stampa);
print_line();
}
}
}
}
else
exist=TRUE;
}
else
if (datacon > d)
{
recc->put(CON_PROGCON,r+1);
_scontrolli->insert_row(recc);
insert=TRUE;
}
r--;
}
if (!exist && !insert)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
}
else
if (err == _iseof || err == _isemptyfile)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
if (!exist)
{
_scontrolli->write(TRUE);
if (_message)
{
print_line(stampa);
stampa = "";
stampa << "Inserito controllo " << tipocon << " del " << datacon.string();
print_line(stampa);
print_line();
}
// aggiorno data e utente ultimo aggiornamento
TDate oggi(TODAY);
recsog.put(SOG_DATAULTAGG, oggi);
recsog.put(SOG_UTENULTAGG, "CETRAPLUS");
err = recsog.rewrite(_rel->lfile());
}
}
}
}
}
else
{
// soggetto non trovato
stampa << "Codice SIT " << id_anagrafica << " non trovato. Impossibile aggiornare accesso ";
stampa << record["TP_ACCESSO"] << " del ";
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
return FALSE;
}
bool TCtpr2at::sacca(const TString& istruzione)
{
TString256 stampa = "";
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"];
_rel->lfile().setkey(7);
TRectype& recsog = _rel->curr();
recsog.zero();
recsog.put(SOG_CODCT, id_anagrafica);
err = recsog.read(_rel->lfile());
if (err == NOERR)
{
stampa = recsog.get(SOG_COGNOME);
stampa << " " << recsog.get(SOG_NOME);
stampa << " " << recsog.get(SOG_DATANASC);
// ho trovato il soggetto, ora verifico la donazione
TString16& str = (TString16&) record["DT_PRELIEVO"];
const TDate datadon = TDate(atoi(str.sub(8,10)) ,atoi(str.sub(5,7)), atoi(str.sub(0,4)));
TDate datanulla(NULLDATE);
if (datadon != datanulla)
{
_progins++;
TRectype* rec = new TRectype(LF_DONAZ);
rec->put(DON_CODICE, recsog.get(SOG_CODICE));
rec->put(DON_DATADON, datadon);
str = (TString16&) record["TP_DONAZIONE"];
TRectype recpr2 = cache().get("PR2", str);
TString16 tipodon = recpr2.get("S6");
if (tipodon.empty())
{
print_line(stampa);
stampa = "";
stampa << "Tipo donazione SIT " << str << " senza corrispondenza: non inserita";
print_line(stampa);
stampa = "";
}
else
{
rec->put(DON_TIPODON, tipodon);
TString16& etichetta = (TString16&) record["ID_SACCA"];
rec->put(DON_ETICHETTA, etichetta);
rec->put(DON_CODSEZ, recsog.get(SOG_CODSEZ));
rec->put(DON_CODSOT, recsog.get(SOG_CODSOT));
rec->put(DON_PROGINS, _progins);
bool insert = FALSE;
bool exist = FALSE;
TRectype* key = new TRectype(LF_DONAZ);
key->put(DON_CODICE, recsog.get(SOG_CODICE));
err = _sdonazioni->read(key);
if (err == NOERR)
{
int r=_sdonazioni->rows();
while (r>=1 && !insert && !exist)
{
const TRectype& riga = _sdonazioni->row(r);
const TDate d = riga.get(DON_DATADON);
if (datadon==d) // esiste gia' una donazione in questa data
{
exist=TRUE;
r=0;
if (_message)
{
print_line(stampa);
stampa = "";
stampa << "Donazione gi<67> esistente in data " << datadon.string();
print_line(stampa);
print_line();
}
}
else
if (datadon > d)
{
rec->put(DON_PROGDON,r+1);
_sdonazioni->insert_row(rec);
insert=TRUE;
}
r--;
}
if (!exist && !insert)
{
rec->put(DON_PROGDON,1);
rec->put(DON_PRIMADON,'X');
_sdonazioni->insert_row(rec);
}
}
else
if (err == _iseof || err == _isemptyfile)
{
rec->put(DON_PROGDON,1);
rec->put(DON_PRIMADON,'X');
_sdonazioni->insert_row(rec);
}
if (!exist)
{
err = _sdonazioni->write(TRUE);
if (err == NOERR)
{
if (_message)
{
print_line(stampa);
stampa = "";
stampa << "Inserita donazione del " << datadon;
print_line(stampa);
if (modstato_tcs(recsog.get(SOG_STATO)) == 'S')
{
stampa = "** ATTENZIONE ** il soggetto e' sospeso";
print_line(stampa);
}
}
calcola_donazioni_lib(recsog, _sdonazioni); // questo metodo sistema tutto!!!
calcola_categoria(recsog); // modificato per dare i messaggi al posto dei veri cambiamenti
//print_line(); // tolto perch<63> altrimenti stampa alcuni fogli vuoti
// aggiorno data e utente ultimo aggiornamento
TDate oggi(TODAY);
recsog.put(SOG_DATAULTAGG, oggi);
recsog.put(SOG_UTENULTAGG, "CETRAPLUS");
err = recsog.rewrite(_rel->lfile());
}
//else
//error_box("Errore %d in scrittura archivio donazioni, riga %d", err, rigasog);
}
}
}
}
else
{
// soggetto non trovato
stampa << "Codice SIT " << id_anagrafica << " non trovato. Impossibile inserire donazione ";
stampa << record["TP_DONAZIONE"] << " del ";
stampa << record["DT_PRELIEVO"];
print_line(stampa);
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;
}
bool TCtpr2at::analisi(const TString& istruzione)
{
TString256 stampa = "";
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"];
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(chiave);
_rel->lfile().setkey(7);
TRectype& recsog = _rel->curr();
recsog.zero();
recsog.put(SOG_CODCT, id_anagrafica);
error = recsog.read(_rel->lfile());
if (error == NOERR)
{
stampa = recsog.get(SOG_COGNOME);
stampa << " " << recsog.get(SOG_NOME);
stampa << " " << recsog.get(SOG_DATANASC);
TDate datacon = TDate(atoi(str.sub(8,10)) ,atoi(str.sub(5,7)), atoi(str.sub(0,4)));
TDate datanulla(NULLDATE);
if (datacon != datanulla)
{
TRectype* recc = new TRectype(LF_CONTSAN);
recc->put(CON_CODICE, recsog.get(SOG_CODICE));
recc->put(CON_DATACON, datacon);
recc->put(CON_TIPOCON, tipocon);
recc->put(CON_RESPONSAB, "CETRAPLUS");
bool insert = FALSE;
bool exist = FALSE;
TRectype* keyc = new TRectype(LF_CONTSAN);
keyc->put(CON_CODICE, recsog.get(SOG_CODICE));
int err = _scontrolli->read(keyc);
if (err == NOERR)
{
int r=_scontrolli->rows();
while (r>=1 && !insert && !exist)
{
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;
if (_message)
{
print_line(stampa);
stampa = "";
stampa << "Controllo gi<67> esistente in data " << datacon.string();
print_line(stampa);
print_line();
}
}
}
}
else
exist=TRUE;
}
else
if (datacon > d)
{
recc->put(CON_PROGCON,r+1);
_scontrolli->insert_row(recc);
insert=TRUE;
}
r--;
}
if (!exist && !insert)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
}
else
if (err == _iseof || err == _isemptyfile)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
if (!exist)
{
_scontrolli->write(TRUE);
if (_message)
{
print_line(stampa);
stampa = "";
stampa << "Inserito controllo " << tipocon << " del " << datacon.string();
print_line(stampa);
print_line();
}
// aggiorno data e utente ultimo aggiornamento
TDate oggi(TODAY);
recsog.put(SOG_DATAULTAGG, oggi);
recsog.put(SOG_UTENULTAGG, "CETRAPLUS");
err = recsog.rewrite(_rel->lfile());
}
}
}
else
{
// soggetto non trovato
stampa << "Codice SIT " << id_anagrafica << " non trovato. Impossibile inserire controllo ";
stampa << record["ID_ANALISI"] << " del ";
stampa << record["DT_ACCESSO"];
print_line(stampa);
print_line();
}
return (error == NOERR);
}
}
}
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;
}
bool TCtpr2at::intervalli(const TString& istruzione)
{
return TRUE;
}
bool TCtpr2at::esclusione(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& tp_esclusione = (TString16&) record["TP_ESCLUSIONE"];
TString4 tipocon = _configfile->get(tp_esclusione, "ESCLUSIONI");
if (!tipocon.empty())
{
// ricerca del soggetto per codice SIT
TString16& id_anagrafica = (TString16&) record["ID_ANAGRAFICA"];
_rel->lfile().setkey(7);
TRectype& recsog = _rel->curr();
recsog.zero();
recsog.put(SOG_CODCT, id_anagrafica);
error = recsog.read(_rel->lfile());
TString256 stampa = "";
if (error == NOERR)
{
stampa = recsog.get(SOG_COGNOME);
stampa << " " << recsog.get(SOG_NOME);
stampa << " " << recsog.get(SOG_DATANASC);
// ho trovato il soggetto
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)));
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);
if ((datacon < datapross) || (datapross == datanulla))
{
TRectype* recc = new TRectype(LF_CONTSAN);
recc->put(CON_CODICE, recsog.get(SOG_CODICE));
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");
bool insert = FALSE;
bool exist = FALSE;
TRectype* keyc = new TRectype(LF_CONTSAN);
keyc->put(CON_CODICE, recsog.get(SOG_CODICE));
int err = _scontrolli->read(keyc);
if (err == NOERR)
{
int r=_scontrolli->rows();
while (r>=1 && !insert && !exist)
{
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;
if (_message)
{
print_line(stampa);
stampa = "";
stampa << "Controllo gi<67> esistente in data " << datacon.string();
print_line(stampa);
print_line();
}
}
}
}
else
exist=TRUE;
}
else
if (datacon > d)
{
recc->put(CON_PROGCON,r+1);
_scontrolli->insert_row(recc);
insert=TRUE;
}
r--;
}
if (!exist && !insert)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
}
else
if (err == _iseof || err == _isemptyfile)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
insert = TRUE;
}
if (!exist)
{
_scontrolli->write(TRUE);
TRectype* key = new TRectype(LF_IDONEITA);
key->put(IDO_CODICE, recsog.get(SOG_CODICE));
_sidoneita->read(key);
con_reord(recsog, _scontrolli, _sidoneita);
if (datapross.empty())
{
print_line(stampa);
stampa = "";
stampa << "Inserita sospensione " << tipocon << " dal " << datacon.string();
stampa << " al " << datapross.string();
print_line(stampa);
print_line();
}
// aggiorno data e utente ultimo aggiornamento
TDate oggi(TODAY);
recsog.put(SOG_DATAULTAGG, oggi);
recsog.put(SOG_UTENULTAGG, "CETRAPLUS");
err = recsog.rewrite(_rel->lfile());
}
}
//else
//{
// print_line(stampa);
// stampa = "";
// stampa << "Sospensione " << tipocon << " dal " << datacon.string();
// stampa << " al " << datapross.string();
// stampa << " non inserita perch<63> gi<67> scaduta";
// print_line(stampa);
// print_line();
//}
}
else
{
// soggetto non trovato
stampa << "Codice SIT " << id_anagrafica << " non trovato. Impossibile inserire sospensione ";
stampa << record["TP_ESCLUSIONE"] << " dal ";
stampa << record["DA_DATA"];
stampa << " al " << record["A_DATA"];
print_line(stampa);
print_line();
}
return (error == NOERR);
}
}
}
return FALSE;
}
// handler per gestire la conferma dell'annullamento dei dati inseriti
// nella maschera
bool TCtpr2at::annulla_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
if (k == K_SPACE)
{
if (yesno_box("Vuoi veramente annullare i dati inseriti"))
m.reset();
}
return TRUE;
}
int at8900(int argc, char* argv[])
{
TCtpr2at a;
a.run(argc, argv, "Acquisizione dati da SIT Parma");
return 0;
}