225 lines
6.0 KiB
C++
225 lines
6.0 KiB
C++
|
#include "at9.h"
|
||
|
#include "at9600a.h"
|
||
|
|
||
|
#include <applicat.h>
|
||
|
#include <automask.h>
|
||
|
#include <progind.h>
|
||
|
#include <recarray.h>
|
||
|
#include <relation.h>
|
||
|
#include <textset.h>
|
||
|
|
||
|
#include "soggetti.h"
|
||
|
#include "sezioni.h"
|
||
|
#include <comuni.h>
|
||
|
|
||
|
///////////////////////////////////////////////////////////
|
||
|
// TEsporta_ON: osservatorio nazionale
|
||
|
///////////////////////////////////////////////////////////
|
||
|
|
||
|
class TEsporta_ON_mask : public TAutomask
|
||
|
{
|
||
|
|
||
|
public:
|
||
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||
|
TEsporta_ON_mask();
|
||
|
~TEsporta_ON_mask();
|
||
|
};
|
||
|
|
||
|
bool TEsporta_ON_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
TEsporta_ON_mask::TEsporta_ON_mask() : TAutomask("at9600a")
|
||
|
{
|
||
|
//carica i parametri del file di configurazione
|
||
|
TConfig configfile("at96conf.ini", "MAIN");
|
||
|
for (int i = 0; i < fields() ; i++)
|
||
|
{
|
||
|
TMask_field& f = fld(i);
|
||
|
const TFieldref* fr = f.field();
|
||
|
if (fr != NULL)
|
||
|
f.set(configfile.get(fr->name()));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TEsporta_ON_mask::~TEsporta_ON_mask()
|
||
|
{
|
||
|
//carica i parametri del file di configurazione
|
||
|
TConfig configfile("at96conf.ini", "MAIN");
|
||
|
for (int i = 0; i < fields() ; i++)
|
||
|
{
|
||
|
TMask_field& f = fld(i);
|
||
|
const TFieldref* fr = f.field();
|
||
|
if (fr != NULL)
|
||
|
configfile.set(fr->name(), f.get());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////
|
||
|
// Record set soggetti
|
||
|
/////////////////////////////////////////////////////////////
|
||
|
|
||
|
class TEsporta_ON_recordset : public TCSV_recordset
|
||
|
{
|
||
|
public:
|
||
|
virtual bool set(unsigned int fld, const TVariant& var);
|
||
|
TEsporta_ON_recordset();
|
||
|
};
|
||
|
|
||
|
bool TEsporta_ON_recordset::set(unsigned int column, const TVariant& var)
|
||
|
{
|
||
|
TString str;
|
||
|
if (var.is_date())
|
||
|
{
|
||
|
if (!var.is_empty())
|
||
|
{
|
||
|
const TDate data = var.as_date();
|
||
|
str.format("%04d-%02d-%02d", data.year(), data.month(), data.day());
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
str << var;
|
||
|
str.insert("\""); str << '"';
|
||
|
str.replace('|', '/');
|
||
|
return TCSV_recordset::set(column, TVariant(str));
|
||
|
}
|
||
|
|
||
|
TEsporta_ON_recordset::TEsporta_ON_recordset()
|
||
|
: TCSV_recordset("CSV(\"|\")")
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
///////////////////////////////////////////////////////////
|
||
|
// TEsporta_ON applicazione
|
||
|
///////////////////////////////////////////////////////////
|
||
|
|
||
|
class TEsporta_ON_app : public TSkeleton_application
|
||
|
{
|
||
|
|
||
|
protected:
|
||
|
virtual bool check_autorization() const {return false;}
|
||
|
virtual const char * extra_modules() const {return "at";}
|
||
|
virtual void main_loop();
|
||
|
|
||
|
const TString& find_comune(const TRecordset& soggetti) const;
|
||
|
const TString& find_dencom_nasc(const TString& codcom) const;
|
||
|
|
||
|
public:
|
||
|
void esporta_soggetti(const TMask& msk) const;
|
||
|
|
||
|
};
|
||
|
|
||
|
void TEsporta_ON_app::esporta_soggetti(const TMask& m) const
|
||
|
{
|
||
|
TConfig config("at9600a.ini");
|
||
|
// query su soggetti
|
||
|
TString query;
|
||
|
query << "USE SOGGETTI KEY 3";
|
||
|
TString4 sezini = m.get(F_SEZINI);
|
||
|
TString4 sotini = m.get(F_SOTINI);
|
||
|
TString4 sezfin = m.get(F_SEZFIN);
|
||
|
TString4 sotfin = m.get(F_SOTFIN);
|
||
|
if (sezini.not_empty())
|
||
|
query << "\nFROM CODSEZ=\"" << sezini << "\"";
|
||
|
if (sezini.not_empty())
|
||
|
query << "\nTO CODSEZ=\"" << sezfin << "\"";
|
||
|
TISAM_recordset soggetti(query);
|
||
|
|
||
|
// query su sezioni per stabilire cosa scrivere nel primo record
|
||
|
// elenco delle sezioni trasferite separate da ','
|
||
|
TString querysez;
|
||
|
querysez << "USE SEZIONI";
|
||
|
if (sezini.not_empty())
|
||
|
querysez << "\nFROM CODSEZ=\"" << sezini << "\"";
|
||
|
if (sezini.not_empty())
|
||
|
querysez << "\nTO CODSEZ=\"" << sezfin << "\"";
|
||
|
TISAM_recordset sezioni(querysez);
|
||
|
|
||
|
TEsporta_ON_recordset csv;
|
||
|
|
||
|
// crea testata
|
||
|
TToken_string ts("", ',');
|
||
|
for (bool oks = sezioni.move_first(); oks; oks = sezioni.move_next())
|
||
|
ts.add(sezioni.get(SEZ_CODSEZ).as_string());
|
||
|
csv.new_rec(ts);
|
||
|
|
||
|
const int items = soggetti.items();
|
||
|
TProgind pi(items, "Estrazione soggetti...", true, true);
|
||
|
TString ws;
|
||
|
for (bool ok = soggetti.move_first(); ok; ok = soggetti.move_next())
|
||
|
{
|
||
|
if (!pi.addstatus(1))
|
||
|
break;
|
||
|
//creazione di un nuovo record di tipo soggetti
|
||
|
csv.new_rec("");
|
||
|
//..e successivo riempimento
|
||
|
csv.set(0, soggetti.get(SOG_CODSEZ));
|
||
|
csv.set(1, soggetti.get(SOG_TESSAVIS));
|
||
|
csv.set(2, soggetti.get(SOG_CF));
|
||
|
csv.set(3, soggetti.get(SOG_COGNOME));
|
||
|
csv.set(4, soggetti.get(SOG_NOME));
|
||
|
csv.set(5, soggetti.get(SOG_SESSO));
|
||
|
csv.set(6, soggetti.get(SOG_DATANASC));
|
||
|
csv.set(7, NULL_VARIANT);
|
||
|
csv.set(8, NULL_VARIANT); //nazionalita
|
||
|
csv.set(9, soggetti.get(SOG_DOM_INDIR));
|
||
|
csv.set(10, soggetti.get(SOG_DOM_CAP));
|
||
|
csv.set(11, TVariant(find_comune(soggetti)));
|
||
|
csv.set(12, soggetti.get(SOG_TITSTUD));
|
||
|
csv.set(13, NULL_VARIANT); // professione
|
||
|
csv.set(14, soggetti.get(SOG_TELABI));
|
||
|
csv.set(15, soggetti.get(SOG_TELALT));
|
||
|
TString4 catdon = soggetti.get(SOG_CATDON).as_string();
|
||
|
|
||
|
csv.set(16, TVariant(config.get(catdon, "CATDON"))); // categoria
|
||
|
csv.set(17, soggetti.get(SOG_EMAIL));
|
||
|
TString8 gruppoab0 = soggetti.get(SOG_GRUPPOAB0).as_string();
|
||
|
csv.set(18, TVariant(config.get(gruppoab0, "GRUPPOAB0"))); // gruppo ab0
|
||
|
TString8 kell = soggetti.get(SOG_KELL).as_string();
|
||
|
csv.set(19, TVariant(config.get(kell, "KELL"))); // kell
|
||
|
csv.set(20, ""); // fattore rh
|
||
|
csv.set(21, soggetti.get(SOG_DATAISC));
|
||
|
csv.set(22, soggetti.get(SOG_DATADIM));
|
||
|
csv.set(23, NULL_VARIANT); // condizione non professionale
|
||
|
} //for(move_first()..
|
||
|
|
||
|
const TString path = "rimini.txt";
|
||
|
csv.save_as(path, fmt_text);
|
||
|
#ifdef DBG
|
||
|
xvt_sys_goto_url(path, "open");
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
const TString& TEsporta_ON_app::find_comune(const TRecordset& soggetti) const
|
||
|
{
|
||
|
TToken_string ws;
|
||
|
ws = "";
|
||
|
ws.add(soggetti.get(SOG_DOM_CODCOM).as_string() ,1);
|
||
|
return cache().get(LF_COMUNI, ws, COM_DENCOM);
|
||
|
}
|
||
|
|
||
|
const TString& TEsporta_ON_app::find_dencom_nasc(const TString& codcom) const
|
||
|
{
|
||
|
TToken_string key;
|
||
|
key.add(" ");
|
||
|
key.add(codcom);
|
||
|
return cache().get(LF_COMUNI, key, COM_DENCOM);
|
||
|
}
|
||
|
|
||
|
void TEsporta_ON_app::main_loop()
|
||
|
{
|
||
|
open_files(LF_SOGGETTI, LF_COMUNI, 0);
|
||
|
TEsporta_ON_mask m;
|
||
|
while (m.run() == K_ENTER)
|
||
|
esporta_soggetti(m);
|
||
|
}
|
||
|
|
||
|
int at9600(int argc, char* argv[])
|
||
|
{
|
||
|
TEsporta_ON_app app;
|
||
|
app.run(argc, argv, TR("Estrazione dati per Osservatorio Nazionale"));
|
||
|
return 0;
|
||
|
}
|