Patch level :
Files correlati : Ricompilazione Demo : [ ] Commento : Programma di trasferimento dati da AT a CT Bologna git-svn-id: svn://10.65.10.50/trunk@9244 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
19a053d3e6
commit
94beb983d3
241
at/at2ctbo.ini
Executable file
241
at/at2ctbo.ini
Executable file
@ -0,0 +1,241 @@
|
||||
[MAIN]
|
||||
DECSEP =
|
||||
FIELDSEP =
|
||||
RECORDSEP = \n
|
||||
RECORDSIZE = 0
|
||||
SKIPLINES = 0
|
||||
TYPEFIELD = -1
|
||||
TYPELEN = -1
|
||||
TYPEPOS = -1
|
||||
|
||||
[TYPE FISSO]
|
||||
ALIGN =
|
||||
DATA =
|
||||
DECIMAL = 0
|
||||
FILLER = ' '
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[TYPE DATA]
|
||||
ALIGN =
|
||||
DATA = D
|
||||
DECIMAL = 0
|
||||
FILLER =
|
||||
LENGTH = 10
|
||||
PICTURE =
|
||||
|
||||
[TYPE NUMERO]
|
||||
ALIGN = R
|
||||
DATA =
|
||||
DECIMAL = 0
|
||||
FILLER = '0'
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[TYPE STRINGA]
|
||||
ALIGN = L
|
||||
DATA = S
|
||||
DECIMAL = 0
|
||||
FILLER = ' '
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[RECORD 1]
|
||||
NAME(0) = CODICE SEZIONE
|
||||
TYPE(0) = FISSO
|
||||
FIELD(0) = 90->CODSEZ
|
||||
POSITION(0) = 0
|
||||
LENGTH(0) = 2
|
||||
|
||||
NAME(1) = CODICE SOTTOGRUPPO
|
||||
TYPE(1) = FISSO
|
||||
FIELD(1) = 90->CODSOT
|
||||
POSITION(1) = 2
|
||||
LENGTH(1) = 2
|
||||
|
||||
NAME(2) = CODICE SOGGETTO
|
||||
TYPE(2) = NUMERO
|
||||
FIELD(2) = 90->CODICE
|
||||
POSITION(2) = 4
|
||||
LENGTH(2) = 8
|
||||
|
||||
NAME(3) = COGNOME
|
||||
TYPE(3) = STRINGA
|
||||
FIELD(3) = 90->COGNOME
|
||||
POSITION(3) = 12
|
||||
LENGTH(3) = 25
|
||||
|
||||
NAME(4) = NOME
|
||||
TYPE(4) = STRINGA
|
||||
FIELD(4) = 90->NOME
|
||||
POSITION(4) = 27
|
||||
LENGTH(4) = 25
|
||||
|
||||
NAME(5) = DATA NASCITA
|
||||
TYPE(5) = DATA
|
||||
FIELD(5) = 90->DATANASC
|
||||
POSITION(5) = 52
|
||||
LENGTH(5) = 10
|
||||
|
||||
NAME(6) = COMUNE NASCITA
|
||||
TYPE(6) = STRINGA
|
||||
FIELD(6) = 90->COMNASC
|
||||
POSITION(6) = 62
|
||||
LENGTH(6) = 4
|
||||
|
||||
NAME(7) = SESSO
|
||||
TYPE(7) = STRINGA
|
||||
FIELD(7) = 90->SESSO
|
||||
POSITION(7) = 66
|
||||
LENGTH(7) = 1
|
||||
|
||||
NAME(8) = CATEGORIA DONATORI
|
||||
TYPE(8) = STRINGA
|
||||
FIELD(8) = 90->CATDON
|
||||
POSITION(8) = 67
|
||||
LENGTH(8) = 2
|
||||
|
||||
NAME(9) = TESSERA ASSOCIATIVA
|
||||
TYPE(9) = STRINGA
|
||||
FIELD(9) = 90->TESSAVIS
|
||||
POSITION(9) = 69
|
||||
LENGTH(9) = 6
|
||||
|
||||
NAME(10) = TESSERA SSN
|
||||
TYPE(10) = STRINGA
|
||||
FIELD(10) = 90->TESSSSN
|
||||
POSITION(10) = 75
|
||||
LENGTH(10) = 16
|
||||
|
||||
NAME(11) = CODICE FISCALE
|
||||
TYPE(11) = STRINGA
|
||||
FIELD(11) = 90->CF
|
||||
POSITION(11) = 91
|
||||
LENGTH(11) = 16
|
||||
|
||||
NAME(12) = INDIRIZZO DOMICILIO
|
||||
TYPE(12) = STRINGA
|
||||
FIELD(12) = 90->DOM_INDIR
|
||||
POSITION(12) = 107
|
||||
LENGTH(12) = 30
|
||||
|
||||
NAME(13) = CAP DOMICILIO
|
||||
TYPE(13) = STRINGA
|
||||
FIELD(13) = 90->DOM_CAP
|
||||
POSITION(13) = 137
|
||||
LENGTH(13) = 5
|
||||
|
||||
NAME(14) = COMUNE DOMICILIO
|
||||
TYPE(14) = STRINGA
|
||||
FIELD(14) = 90->DOM_CODCOM
|
||||
POSITION(14) = 142
|
||||
LENGTH(14) = 4
|
||||
|
||||
NAME(15) = INDIRIZZO RESIDENZA
|
||||
TYPE(15) = STRINGA
|
||||
FIELD(15) = 90->RES_INDIR
|
||||
POSITION(15) = 146
|
||||
LENGTH(15) = 30
|
||||
|
||||
NAME(16) = CAP RESIDENZA
|
||||
TYPE(16) = STRINGA
|
||||
FIELD(16) = 90->RES_CAP
|
||||
POSITION(16) = 176
|
||||
LENGTH(16) = 5
|
||||
|
||||
NAME(17) = COMUNE RESIDENZA
|
||||
TYPE(17) = STRINGA
|
||||
FIELD(17) = 90->RES_CODCOM
|
||||
POSITION(17) = 182
|
||||
LENGTH(17) = 4
|
||||
|
||||
NAME(18) = TELEFONO ABITAZIONE
|
||||
TYPE(18) = STRINGA
|
||||
FIELD(18) = 90->TELABI
|
||||
POSITION(18) = 185
|
||||
LENGTH(18) = 14
|
||||
|
||||
NAME(19) = TELEFONO LAVORO
|
||||
TYPE(19) = STRINGA
|
||||
FIELD(19) = 90->TELLAV
|
||||
POSITION(19) = 199
|
||||
LENGTH(19) = 14
|
||||
|
||||
NAME(20) = ALTRO TELEFONO
|
||||
TYPE(20) = STRINGA
|
||||
FIELD(20) = 90->TELALT
|
||||
POSITION(20) = 213
|
||||
LENGTH(20) = 14
|
||||
|
||||
NAME(21) = GRUPPO AB0
|
||||
TYPE(21) = STRINGA
|
||||
FIELD(21) = 90->GRUPPOAB0
|
||||
POSITION(21) = 227
|
||||
LENGTH(21) = 3
|
||||
|
||||
NAME(22) = RH/ANTID
|
||||
TYPE(22) = STRINGA
|
||||
FIELD(22) = 90->RHANTID
|
||||
POSITION(22) = 230
|
||||
LENGTH(22) = 3
|
||||
|
||||
NAME(23) = KELL
|
||||
TYPE(23) = STRINGA
|
||||
FIELD(23) = 90->KELL
|
||||
POSITION(23) = 233
|
||||
LENGTH(23) = 3
|
||||
|
||||
NAME(24) = FENOTIPO RH
|
||||
TYPE(24) = STRINGA
|
||||
FIELD(24) = 90->FENOTIPORH
|
||||
POSITION(24) = 236
|
||||
LENGTH(24) = 6
|
||||
|
||||
NAME(25) = DATA ULTIMA SI
|
||||
TYPE(25) = DATA
|
||||
POSITION(25) = 242
|
||||
LENGTH(25) = 10
|
||||
MESSAGE(25) = _ULTIMA,!SI
|
||||
|
||||
NAME(26) = TOTALE SI ANNO
|
||||
TYPE(26) = NUMERO
|
||||
POSITION(26) = 252
|
||||
LENGTH(26) = 3
|
||||
MESSAGE(26) = _TOTALE,!SI
|
||||
|
||||
NAME(27) = DATA ULTIMA PL
|
||||
TYPE(27) = DATA
|
||||
POSITION(27) = 265
|
||||
LENGTH(27) = 10
|
||||
MESSAGE(27) = _ULTIMA,!PL
|
||||
|
||||
NAME(28) = TOTALE PL ANNO
|
||||
TYPE(28) = NUMERO
|
||||
POSITION(28) = 275
|
||||
LENGTH(28) = 3
|
||||
MESSAGE(28) = _TOTALE,!PL
|
||||
|
||||
NAME(29) = DATA ULTIMA PI
|
||||
TYPE(29) = DATA
|
||||
POSITION(29) = 278
|
||||
LENGTH(29) = 10
|
||||
MESSAGE(29) = _ULTIMA,!PI
|
||||
|
||||
NAME(30) = TOTALE PI ANNO
|
||||
TYPE(30) = NUMERO
|
||||
POSITION(30) = 288
|
||||
LENGTH(30) = 3
|
||||
MESSAGE(30) = _TOTALE,!PI
|
||||
|
||||
NAME(31) = DATA ULTIMA PP
|
||||
TYPE(31) = DATA
|
||||
POSITION(31) = 291
|
||||
LENGTH(31) = 10
|
||||
MESSAGE(31) = _ULTIMA,!PP
|
||||
|
||||
NAME(32) = TOTALE PP ANNO
|
||||
TYPE(32) = NUMERO
|
||||
POSITION(32) = 301
|
||||
LENGTH(32) = 3
|
||||
MESSAGE(32) = _TOTALE,!PP
|
||||
|
247
at/at8700.cpp
Executable file
247
at/at8700.cpp
Executable file
@ -0,0 +1,247 @@
|
||||
#include <applicat.h>
|
||||
#include <filetext.h>
|
||||
#include <form.h>
|
||||
#include <mask.h>
|
||||
#include <relation.h>
|
||||
#include <tabutil.h>
|
||||
#include <printer.h>
|
||||
#include <progind.h>
|
||||
#include <recarray.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include "at8.h"
|
||||
#include "at8700a.h"
|
||||
#include "soggetti.h"
|
||||
#include "donaz.h"
|
||||
|
||||
#define CTBOFILENAME "at2ctbo.dat"
|
||||
|
||||
class TCtbo_file;
|
||||
|
||||
class TAt2ctbo: public TSkeleton_application
|
||||
{
|
||||
TMask* _msk;
|
||||
TRelation* _rel;
|
||||
TCursor* _cur;
|
||||
TCtbo_file* _trasfile;
|
||||
TRecord_array* _donazioni;
|
||||
TLocalisamfile* _donaz;
|
||||
TDate _data;
|
||||
|
||||
protected:
|
||||
virtual bool create(void);
|
||||
virtual void main_loop();
|
||||
virtual bool destroy(void) ;
|
||||
void transfer(void);
|
||||
void inizializza_cur(void);
|
||||
void inizializza_file(void);
|
||||
void record(THash_object& lavoro);
|
||||
static bool annulla_handler(TMask_field& f, KEY k);
|
||||
public:
|
||||
|
||||
const TMask& msk() const { return *_msk; }
|
||||
const TRecord_array& donazioni() { return *_donazioni;}
|
||||
const TDate data() { return _data;}
|
||||
|
||||
TAt2ctbo() {}
|
||||
virtual ~TAt2ctbo() {}
|
||||
};
|
||||
|
||||
// restituisce un riferimento all' applicazione
|
||||
inline TAt2ctbo& app() { return (TAt2ctbo&) main_app();}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
// Classe TCtbo_file customizzata dalla TFile_text //
|
||||
/////////////////////////////////////////////////////
|
||||
class TCtbo_file: public TFile_text
|
||||
{
|
||||
protected:
|
||||
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
|
||||
|
||||
public:
|
||||
TCtbo_file(const TString& file_name, const TString& config_name);
|
||||
virtual ~TCtbo_file() { }
|
||||
};
|
||||
|
||||
TCtbo_file::TCtbo_file(const TString& file_name, const TString& config_name)
|
||||
: TFile_text(file_name, config_name)
|
||||
{
|
||||
}
|
||||
|
||||
// creazione dell'applicazione
|
||||
bool TAt2ctbo::create()
|
||||
{
|
||||
_msk = new TMask("at8700a");
|
||||
_rel = new TRelation(LF_SOGGETTI);
|
||||
_cur = NULL;
|
||||
_msk->set(F_FILENAME,CTBOFILENAME);
|
||||
_donaz = new TLocalisamfile(LF_DONAZ);
|
||||
_donazioni = new TRecord_array(LF_DONAZ,DON_PROGDON);
|
||||
|
||||
//_msk->set_handler(DLG_CANCEL, annulla_handler);
|
||||
_trasfile = NULL;
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
// distruzione dell'applicazione
|
||||
bool TAt2ctbo::destroy()
|
||||
{
|
||||
delete _donazioni;
|
||||
delete _donaz;
|
||||
delete _cur;
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
|
||||
if (_trasfile)
|
||||
delete _trasfile;
|
||||
return TSkeleton_application::destroy();
|
||||
}
|
||||
|
||||
// carica la maschera
|
||||
void TAt2ctbo::main_loop()
|
||||
{
|
||||
// Preimposta gli eventuali valori specificati sulla riga di comando
|
||||
if (argc() >= 3)
|
||||
_msk->set(F_DATAINI, argv(2));
|
||||
KEY key = K_ENTER;
|
||||
while (key != K_QUIT)
|
||||
{
|
||||
key = _msk->run();
|
||||
if (key == K_ENTER)
|
||||
transfer();
|
||||
}
|
||||
}
|
||||
|
||||
// trasferimento dati su file per ct bo
|
||||
void TAt2ctbo::transfer()
|
||||
{
|
||||
inizializza_cur();
|
||||
|
||||
TFilename ctboini = "at2ctbo.ini";
|
||||
|
||||
_trasfile = new TCtbo_file(_msk->get(F_FILENAME), ctboini);
|
||||
inizializza_file();
|
||||
|
||||
long n_sog = _cur->items();
|
||||
if (n_sog > 0)
|
||||
{
|
||||
TProgind pi(n_sog,"Trasferimento dati soggetti per CT Bologna...",FALSE,TRUE);
|
||||
|
||||
TAssoc_array& tracciati = _trasfile->tracciati();
|
||||
//scandisco tutti i soggetti
|
||||
for (*_cur = 0; _cur->pos() < n_sog; ++(*_cur))
|
||||
{
|
||||
pi.addstatus(1L);
|
||||
|
||||
TRectype* key = new TRectype(LF_DONAZ);
|
||||
key->put(DON_CODICE,_cur->file().get(SOG_CODICE));
|
||||
_donazioni->read(key);
|
||||
|
||||
THash_object* lavoro = tracciati.get_hashobj();
|
||||
//scandisco tutti i record di un effetto
|
||||
for (int i = 0; lavoro != NULL; i++)
|
||||
{
|
||||
record(*lavoro);//emetto il record
|
||||
lavoro = tracciati.get_hashobj();
|
||||
}
|
||||
}
|
||||
}
|
||||
_trasfile->close();
|
||||
delete _trasfile;
|
||||
_trasfile = NULL;
|
||||
message_box("Operazione terminata");
|
||||
}
|
||||
|
||||
//inizializza il cursore
|
||||
void TAt2ctbo::inizializza_cur()
|
||||
{
|
||||
TProgind prg (1,"Preparazione archivio soggetti da trasferire\nPrego attendere...",FALSE, FALSE);
|
||||
_data = _msk->get_date(F_DATAINI);
|
||||
TString80 filtro = "";
|
||||
const TDate nulla(NULLDATE);
|
||||
if (_data != nulla)
|
||||
filtro << "(ANSI(" << SOG_DATAULTAGG << ")>=\"" << _data.string(ANSI) << "\")";
|
||||
else
|
||||
_data = TODAY;
|
||||
_cur = new TCursor(_rel,filtro,1);
|
||||
_cur->freeze();
|
||||
}
|
||||
|
||||
//inizializza il file di testo su cui emettere gli effetti
|
||||
void TAt2ctbo::inizializza_file()
|
||||
{
|
||||
TFilename fileriba = _msk->get(F_FILENAME);
|
||||
_trasfile->open(fileriba,'w');
|
||||
//_trasfile->force_record_separator(TRUE);
|
||||
|
||||
}
|
||||
|
||||
//emetto un record del flusso di effetti
|
||||
void TAt2ctbo::record(THash_object& lavoro)
|
||||
{
|
||||
TTracciato_record& oggetto = (TTracciato_record&)lavoro.obj();
|
||||
const TString& tipo = oggetto.type();
|
||||
TRecord_text rec(tipo);
|
||||
//carico il record da emettere
|
||||
_trasfile->autoload(rec, *_cur, &tipo);
|
||||
_trasfile->write(rec);//emetto i dati su file
|
||||
}
|
||||
|
||||
// handler per gestire la conferma dell'annullamento dei dati inseriti
|
||||
// nella maschera
|
||||
bool TAt2ctbo::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;
|
||||
}
|
||||
|
||||
// gestione dei messaggi estesi nei campi
|
||||
void TCtbo_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
|
||||
{
|
||||
const TString code(s.get(0));
|
||||
TString valore;
|
||||
if (code == "_TOTALE")
|
||||
{
|
||||
int totale = 0;
|
||||
TString16 tipodon(s.get());
|
||||
CHECK(tipodon[0]=='!',"Macro _TOTALE senza carattere '!'");
|
||||
tipodon.ltrim(1);
|
||||
for (int r=1; r<=app().donazioni().rows(); r++)
|
||||
{
|
||||
const TRectype& riga = app().donazioni().row(r);
|
||||
const TDate datadon = riga.get(DON_DATADON);
|
||||
if ((riga.get(DON_TIPODON)==tipodon) && (app().data().year() == datadon.year()))
|
||||
totale++;
|
||||
}
|
||||
valore.cut(0);
|
||||
valore << totale;
|
||||
}
|
||||
else if (code == "_ULTIMA")
|
||||
{
|
||||
valore.cut(0);
|
||||
TString16 tipodon(s.get());
|
||||
CHECK(tipodon[0]=='!',"Macro _ULTIMA senza carattere '!'");
|
||||
tipodon.ltrim(1);
|
||||
for (int r=1; r<=app().donazioni().rows(); r++)
|
||||
{
|
||||
const TRectype& riga = app().donazioni().row(r);
|
||||
const TDate datadon = riga.get(DON_DATADON);
|
||||
if ((riga.get(DON_TIPODON)==tipodon) && (app().data().year() == datadon.year()))
|
||||
valore = riga.get(DON_DATADON);
|
||||
}
|
||||
}
|
||||
else NFCHECK("Macro non definita: %s", (const char *)code);
|
||||
str = valore;
|
||||
}
|
||||
|
||||
int at8700(int argc, char* argv[])
|
||||
{
|
||||
TAt2ctbo a ;
|
||||
a.run(argc, argv, "Trasferimento dati a CT Bologna");
|
||||
return 0;
|
||||
}
|
6
at/at8700a.h
Executable file
6
at/at8700a.h
Executable file
@ -0,0 +1,6 @@
|
||||
// trasferimento dati a CT Bologna
|
||||
// definizione campi per maschera di selezione
|
||||
|
||||
//#define F_TRASFERIMENTO 101 // trasferimento totale o parziale
|
||||
#define F_DATAINI 101 // data inizio modifiche per trasferimento parziale
|
||||
#define F_FILENAME 102 // nome del file dove scaricare i dati
|
57
at/at8700a.uml
Executable file
57
at/at8700a.uml
Executable file
@ -0,0 +1,57 @@
|
||||
#include "at8700a.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -11 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -11 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Trasferimento dati a CT Bologna" -1 -1 78 20
|
||||
|
||||
GROUPBOX DLG_NULL 77 9
|
||||
BEGIN
|
||||
PROMPT 1 1 "Selezioni per il trasferimento"
|
||||
END
|
||||
|
||||
//RADIOBUTTON F_TRASFERIMENTO 30
|
||||
//BEGIN
|
||||
// PROMPT 2 2 "Trasferimento"
|
||||
// FLAGS "Z"
|
||||
// ITEM "P|Parziale"
|
||||
// MESSAGE ENABLE|F_DATAINI
|
||||
// ITEM "T|Totale"
|
||||
// MESSAGE CLEAR|F_DATAINI,DISABLE|F_DATAINI
|
||||
//END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 2 "Lasciare vuoto il campo seguente se si desidera un trasferimento totale"
|
||||
END
|
||||
|
||||
DATE F_DATAINI
|
||||
BEGIN
|
||||
PROMPT 2 4 "Soggetti modificati dal "
|
||||
//CHECKTYPE REQUIRED
|
||||
HELP "Data iniziale"
|
||||
END
|
||||
|
||||
STRING F_FILENAME 52
|
||||
BEGIN
|
||||
PROMPT 2 6 "Nome file "
|
||||
CHECKTYPE REQUIRED
|
||||
VALIDATE FILENAME_FUNC
|
||||
FLAGS "A"
|
||||
HELP "Nome del file in cui scaricare i dati"
|
||||
WARNING "E' necessario specificare un nome di file"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
Loading…
x
Reference in New Issue
Block a user