Ristrutturazione classi

git-svn-id: svn://10.65.10.50/trunk@6058 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
augusto 1998-01-28 16:46:36 +00:00
parent 3d21d05e6d
commit 7cb0311413
5 changed files with 334 additions and 292 deletions

View File

@ -15,7 +15,7 @@ int main(int argc,char **argv)
case 0: case 0:
ab2100(argc,argv); break; //Trasferimento e Ricezione ab2100(argc,argv); break; //Trasferimento e Ricezione
// case 1: // case 1:
// ab2200(argc,argv); break; // ab2200(argc,argv); break; //Scarico archivi
default: default:
error_box(usage, argv[0]) ; error_box(usage, argv[0]) ;
} }

View File

@ -8,48 +8,30 @@
#include "caradd.h" #include "caradd.h"
#include "colldich.h" #include "colldich.h"
bool TRiceTras::create()
{
_files.add(new TLocalisamfile(LF_CARADD),1);
_files.add(new TLocalisamfile(LF_COLLDICH),2);
dispatch_e_menu(BAR_ITEM(1)); //Simula la scelta di una voce di menu
return TRUE;
}
TFile_text* TRiceTras::set_config_name(TString &config, const TMask &msk, const TFilename &percorso) /* ********************************************************************************************************* */
/* TTrasfer */
/*********************************************************************************************************** */
TObject_reception *TRicezione::set_transfer(int tipo_ricezione ,const TFilename & percorso, const TString & config_name)
{ {
if (_trasfile != NULL) if (_rice != NULL)
delete _trasfile; delete _rice;
_trasfile=NULL;
int tipo_ricezione = msk.get_int(F_TIPO_RICE);
switch (tipo_ricezione) switch (tipo_ricezione)
{ {
case 1: // RICEZIONE INTERNA: WINDOWS case RICEZIONE_INTERNA:
config="ab2100a.ini"; /*DA CAMBIARE*/ _rice = new TObject_reception(percorso);
break; break;
case 2: //RICEZIONE ESTERNA: AS400 case RICEZIONE_AS400:
config="ab2100a.ini"; _rice = new TRicezione_AS400(percorso);
break; break;
case 3://RICEZIONE ESTERNA: USER DEFINED case RICEZIONE_USER_DEFINED:
config=msk.get(F_PERCORSO_UTENTE); _rice = new TRicezione_userdef(config_name,percorso);
break; break;
default:
config.cut(0);
break;
} }
return _rice;
if (config.not_empty())
_trasfile = new TABfile_text(percorso, config); //Leggo il file di configurazione
return _trasfile;
} }
bool TRiceTras::destroy() //Distruttore
{
return TRUE;
}
int ab2100(int argc, char **argv) int ab2100(int argc, char **argv)
{ {
char *rt = argv[2]+1; //Leggo se è richiesta la ricezine (r/R) o il trasferimento (t/T) char *rt = argv[2]+1; //Leggo se è richiesta la ricezine (r/R) o il trasferimento (t/T)

View File

@ -78,7 +78,7 @@
//Costanti tipi di ricesione //Costanti tipi di ricesione
#define RICEZIONE_INTERNA 1 #define RICEZIONE_INTERNA 1
#define RICEZIONE_AS400 2 #define RICEZIONE_AS400 2
#define RICESIONE_USER_DEFINED 3 #define RICEZIONE_USER_DEFINED 3
//Definizione dei flag //Definizione dei flag
#define FLAG_COGE '1' #define FLAG_COGE '1'
@ -109,9 +109,6 @@
#define AB_MOV 10 #define AB_MOV 10
class TAlbero_record : public TAssoc_array class TAlbero_record : public TAssoc_array
{ {
static TToken_string wrk_string; static TToken_string wrk_string;
@ -124,69 +121,129 @@ public:
virtual ~TAlbero_record(){} virtual ~TAlbero_record(){}
}; };
class TFile_text_AS400: public TFile_text
{
TString16 _tipo_bilancio;
TAssoc_array _last_id;
// static long _idcaradd;
long _idncomp;
//long _idcoldich;
TString _codvc_prec;
//classe derivata nella quale viene gestita la funzione di trasferimento inline const TString & get_tipo_bil() const {return _tipo_bilancio;}
class TRiceTras: public TApplication protected:
{ // virtual void preformat_field(TRelation& rel,const TFieldref&field,const TRecord_text& rec,TString &str);
private: virtual void preformat_field(const TFieldref&field,TString &str,TRelation& rel,const TString &tipo_tr);
TArray _files; void cambia_anno(TString& str);
protected: void cambia_data(TString& str);
TFile_text* _trasfile; //File di testo virtual bool pre_writerel(TRelation& rel,const TRecord_text& rec);
void scrivi_temp_link(TRelation& rel,const TRecord_text& rec);
protected: void aggiorna_rel_link(TLocalisamfile &relvoc);
virtual bool menu(MENU_TAG) pure; //Gli dico che non è implementata in questa classe, ma obbligatoriamente in un'altra public:
//Seleziona da quale file prelevare le informazioni del tracciato record void set_tipo_bilancio(const TString & tipo_bil) {_tipo_bilancio = tipo_bil;}
// void set_config_name(TString&,TMask&);
TFile_text* set_config_name(TString&,const TMask&, const TFilename&);
//Controlla che il percorso e il file specificati esistono
static bool inseriscipercorso(TMask_field& f, KEY k);
TRiceTras() {} TFile_text_AS400(const char* file_name, const char* set_config_name);
virtual ~TRiceTras() {} virtual ~TFile_text_AS400() {}
};
class TRicezione:public TRiceTras
{
protected:
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG);
virtual void set_tipo_bil(const TString&) {;}
virtual void ricevi(TMask &) ;
public:
TRicezione() {}
virtual ~TRicezione() {}
}; };
//Classe derivata per la ricezione
class TRicezione_AS400:public TRicezione
{ class TObject_reception:public TObject
TString _tipo_bilancio; {
protected: protected:
virtual void leggi_temp_link(TRectype& cur_rec,TToken_string& k); TFile_text* _trasfile; //File di testo da cui ricevere
public:
TFile_text * trans_file() {return _trasfile;}
virtual void ricevi(TMask &);
TObject_reception() {_trasfile = NULL;}
TObject_reception(const TFilename &percorso) ;
virtual ~TObject_reception() {}
};
//Classe derivata per la ricezione
class TRicezione_AS400 : public TObject_reception
{
private: private:
virtual void build_balancetree(int); void build_balancetree(int);
virtual void build_ana_tree(long&, TRectype&, TRectype*, TRectype*, TAssoc_array&); void build_ana_tree(long&, TRectype&, TRectype*, TRectype*, TAssoc_array&);
virtual void build_relana(TString&, const TMask&, const TFilename&); void build_relana(TString&, const TMask&, const TFilename&);
void naviga_array(TAlbero_record &a); void naviga_array(TAlbero_record &a);
void scrivi_array(TAssoc_array &s_rec, int); void scrivi_array(TAssoc_array &s_rec, int);
protected: protected:
virtual void set_tipo_bil(const TString&); TFile_text_AS400 *trasfile() {return (TFile_text_AS400 *)_trasfile;}
const TString & get_tipo_bil() const {return _tipo_bilancio;} virtual void leggi_temp_link(TRectype& cur_rec,TToken_string& k);
virtual void ricevi(TMask &); //Questa funzione è da usare solo in fase di debug
//Questa funzione Š da usare solo in fase di debug
//void print_ana_tree(int & level, TRectype&,FILE * stream); //void print_ana_tree(int & level, TRectype&,FILE * stream);
public: public:
TRicezione_AS400() {} virtual void ricevi(TMask &);
TRicezione_AS400(const TFilename &percorso);
virtual ~TRicezione_AS400() {} virtual ~TRicezione_AS400() {}
}; };
//Classe derivata per il trasferimento //Classe derivata per la ricezione
class TTrasferimento_AS400:public TRiceTras class TRicezione_userdef : public TObject_reception
{ {
public:
//virtual void ricevi(TMask &);
TRicezione_userdef(const TString & config, const TFilename &percorso) ;
virtual ~TRicezione_userdef() {}
};
//classe derivata nella quale viene gestita la funzione di trasferimento
class TTrasfer: public TApplication
{
// private:
// TArray _files;
protected:
// TFile_text* _trasfile; //File di testo
virtual bool menu(MENU_TAG) pure; //Gli dico che non è implementata in questa classe, ma obbligatoriamente in un'altra
//Controlla che il percorso e il file specificati esistono
static bool inseriscipercorso(TMask_field& f, KEY k);
public:
TTrasfer() {}
virtual ~TTrasfer() {}
};
class TRicezione:public TTrasfer
{
private:
TArray _files;
TObject_reception *_rice;
protected:
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG);
public:
//Seleziona da quale file prelevare le informazioni del tracciato record
// void set_config_name(TString&,TMask&);
TObject_reception *set_transfer(int tipo_ricezione ,const TFilename & percorso_temp, const TString & config_file_temp);
TObject_reception *transfer() {return _rice;}
TFile_text * trans_file() {return _rice->trans_file();}
TRicezione() {}
virtual ~TRicezione() {}
};
//Classe derivata per il trasferimento
class TInvio_AS400:public TTrasfer
{
TFile_text* _trasfile; //File di testo da cui ricevere
protected: protected:
virtual bool menu(MENU_TAG); virtual bool menu(MENU_TAG);
static bool inseriscipercorso(TMask_field& f, KEY k); static bool inseriscipercorso(TMask_field& f, KEY k);
@ -198,28 +255,8 @@ class TTrasferimento_AS400:public TRiceTras
bool mov_da_scrivere(TRectype &); bool mov_da_scrivere(TRectype &);
void formatta(TRecord_text&,TRectype&,int&); void formatta(TRecord_text&,TRectype&,int&);
public: public:
TTrasferimento_AS400() {} TInvio_AS400() {}
virtual ~TTrasferimento_AS400() {} virtual ~TInvio_AS400() {}
};
class TFile_text_AS400: public TFile_text
{
TAssoc_array _last_id;
// static long _idcaradd;
long _idncomp;
//long _idcoldich;
TString _codvc_prec;
protected:
// virtual void preformat_field(TRelation& rel,const TFieldref&field,const TRecord_text& rec,TString &str);
virtual void preformat_field(const TFieldref&field,TString &str,TRelation& rel,const TString &tipo_tr);
void cambia_anno(TString& str);
void cambia_data(TString& str);
virtual bool pre_writerel(TRelation& rel,const TRecord_text& rec);
void scrivi_temp_link(TRelation& rel,const TRecord_text& rec);
void aggiorna_rel_link(TLocalisamfile &relvoc);
public:
TFile_text_AS400(const char* file_name, const char* set_config_name);
virtual ~TFile_text_AS400() {}
}; };
// ********************** // **********************

View File

@ -1,5 +1,4 @@
//AB2101.CPP: Ricezione tabelle //AB2101.CPP: Ricezione tabelle
#include <utility.h> //Definizione di fexit #include <utility.h> //Definizione di fexit
#include "movdett.h" //Contiene le definizioni di costanti relative ai nomi dei campi di LF_MOVDETT #include "movdett.h" //Contiene le definizioni di costanti relative ai nomi dei campi di LF_MOVDETT
#include "saldi.h" //Contiene le definizioni di costanti relative ai nomi dei campi di LF_SALDI #include "saldi.h" //Contiene le definizioni di costanti relative ai nomi dei campi di LF_SALDI
@ -13,89 +12,40 @@
#include <progind.h> #include <progind.h>
#include <assoc.h> #include <assoc.h>
#define FLAG_COGE '1' TToken_string TAlbero_record ::wrk_string;
#define FLAG_DETT '2'
#define FLAG_MOVIMENTO '3' // così i movs sono alla fine
#define FLAG_INDICE "I"
#define FLAG_SOTTOD "S"
#define FLAG_COMPOSTA "C"
#define FLAG_ANALISI "A"
#define FLAG_VOCI "V"
//Definizioni di constanti per il record di testata
#define RECORD_TESTA "1"
#define ABILITATO "X"
#define AB_PIANO_CONTI 2
#define AB_PERIODI_BIL 3
#define AB_ANALISI 4
#define AB_SALDI 8
#define AB_DETT 9
#define AB_MOV 10
/* ********************************************************************************************************* */
/* TFile_text_AS400 */
/*********************************************************************************************************** */
//Costruttore di TABfile_text: lo inizializzo a 0 //Costruttore di TFile_text_AS400: lo inizializzo a 0
TABfile_text::TABfile_text(const char* file_name, const char* set_config_name) TFile_text_AS400::TFile_text_AS400(const char* file_name, const char* config_name)
: TFile_text(file_name, set_config_name),_idncomp(1) : TFile_text(file_name, config_name),_idncomp(1),_tipo_bilancio("")
{ {
} }
class TAlbero_record : public TAssoc_array
{
static TToken_string wrk_string;
public:
void dept_first(TToken_string key, TRectype * padre, TRectype * prec, int &curr_id, TString_array & allkeys, TToken_string ** prog_key);
TToken_string& cerca_fratello (TToken_string &key, TString_array& allkeys, TToken_string ** next_key);
TToken_string& cerca_figlio (TToken_string &key, TString_array& allkeys, TToken_string ** next_key);
TAlbero_record() {}
virtual ~TAlbero_record(){}
};
TToken_string TAlbero_record ::wrk_string;
//Classe derivata per la ricezione
class TRicezione:public TRiceTras
{
TString _tipo_bilancio;
protected:
virtual void leggi_temp_link(TRectype& cur_rec,TToken_string& k);
public:
void set_tipo_bil(const TString&);
const TString & get_tipo_bil() const {return _tipo_bilancio;}
virtual bool menu(MENU_TAG);
//Controlla che il percorso e il file specificati esistono
static bool inseriscipercorso(TMask_field& f, KEY k);
//Esegue il ciclo di ricezione
void ricevi(TMask &);
void build_balancetree(int);
void naviga_array(TAlbero_record &a);
void scrivi_array(TAssoc_array &s_rec, int);
void build_relana(TString&, const TMask&, const TFilename&);
void build_ana_tree(long&, TRectype&, TRectype*, TRectype*, TAssoc_array&);
//Questa funzione è da usare solo in fase di debug
//void print_ana_tree(int & level, TRectype&,FILE * stream);
TRicezione() {}
virtual ~TRicezione() {}
};
inline TRicezione& app() inline TRicezione& app()
{ {
return (TRicezione&) main_app(); return (TRicezione&) main_app();
} }
void TABfile_text::cambia_anno(TString& str)
{ void TFile_text_AS400::cambia_anno(TString& str)
if (atoi(str)>0) {
//Trasformo dal formato aa al formato aaaa solo se la data è nel formato aa:
//se str > 99 allora significa che la data è già in formato aaaa e quindi non deve eseguire nessun cambio
if ((atoi(str)>0) && (atoi(str) < 99))
{ {
if (str > "50") //Trasformo dal formato aa al formato aaaa if (str > "50")
str.insert("19"); str.insert("19");
else else
str.insert("20"); str.insert("20");
} }
} }
void TABfile_text::cambia_data(TString &str) void TFile_text_AS400::cambia_data(TString &str)
{ {
if (atoi(str)>0) if (atoi(str)>0)
{ {
@ -114,8 +64,8 @@ void TABfile_text::cambia_data(TString &str)
} }
//Questa funzione esegue la conversione dell'anno dal formato aa al formato aaaa //Questa funzione esegue la conversione dell'anno dal formato aa al formato aaaa
//void TABfile_text::preformat_field(TRelation& rel,const TFieldref&field,const TRecord_text& rec,TString &str) //void TFile_text_AS400::preformat_field(TRelation& rel,const TFieldref&field,const TRecord_text& rec,TString &str)
void TABfile_text::preformat_field(const TFieldref& field, TString &str,TRelation& rel,const TString &tipo_tr) void TFile_text_AS400::preformat_field(const TFieldref& field, TString &str,TRelation& rel,const TString &tipo_tr)
{ {
if (field.file()==LF_MOVDETT) if (field.file()==LF_MOVDETT)
{//Parte riservata ai MOVIMENTI/DETTAGLI {//Parte riservata ai MOVIMENTI/DETTAGLI
@ -147,7 +97,7 @@ void TABfile_text::preformat_field(const TFieldref& field, TString &str,TRelatio
} }
//Assegno valori temporanei a IDPADRE, IDFIGLIO, IDSUCC, IDPREC //Assegno valori temporanei a IDPADRE, IDFIGLIO, IDSUCC, IDPREC
void TABfile_text::scrivi_temp_link(TRelation& rel,const TRecord_text& rec) void TFile_text_AS400::scrivi_temp_link(TRelation& rel,const TRecord_text& rec)
{ {
if ((rec.type() == MOVIMENTO3) || (rec.type() == MOVIMENTO4) || (rec.type() == MOVIMENTO5)) if ((rec.type() == MOVIMENTO3) || (rec.type() == MOVIMENTO4) || (rec.type() == MOVIMENTO5))
{ {
@ -209,7 +159,7 @@ void TABfile_text::scrivi_temp_link(TRelation& rel,const TRecord_text& rec)
} }
void TABfile_text::aggiorna_rel_link(TLocalisamfile &relvoc) void TFile_text_AS400::aggiorna_rel_link(TLocalisamfile &relvoc)
{ {
if (relvoc.get_long(ABRL_IDCOMP) > 1) if (relvoc.get_long(ABRL_IDCOMP) > 1)
{ //Ci deve essere un precedente { //Ci deve essere un precedente
@ -233,13 +183,16 @@ void TABfile_text::aggiorna_rel_link(TLocalisamfile &relvoc)
} }
} }
bool TABfile_text::pre_writerel(TRelation& rel,const TRecord_text& rec) bool TFile_text_AS400::pre_writerel(TRelation& rel,const TRecord_text& rec)
{ {
int logic_num=rel.lfile().num(); //Carico il numero logico del file che sto utilizzando int logic_num=rel.lfile().num(); //Carico il numero logico del file che sto utilizzando
if (logic_num==LF_ABSALDI) if (logic_num==LF_ABSALDI)
{//Parte riservata ai SALDI {//Parte riservata ai SALDI: modifico (immetto) il tipo di bilancio con il valore passato da maschera
rel.lfile().put(ABMD_TIPOBIL,app().get_tipo_bil()); //solo se questo campo è vuoto, nel caso contratio lascio il valore letto
TString prova = rel.lfile().get(ABMD_TIPOBIL);
if ( rel.lfile().get(ABMD_TIPOBIL) == "" )
rel.lfile().put(ABMD_TIPOBIL,get_tipo_bil());
return TRUE; return TRUE;
}//Fine parte riservata ai SALDI }//Fine parte riservata ai SALDI
@ -283,20 +236,20 @@ bool TABfile_text::pre_writerel(TRelation& rel,const TRecord_text& rec)
{//E' un COGE e quindi inserisco anche il Coddett {//E' un COGE e quindi inserisco anche il Coddett
rel.lfile().put(ABMD_TIPODETT,"CG"); rel.lfile().put(ABMD_TIPODETT,"CG");
rel.lfile().put(ABMD_CODDETT,rec.get(CONTO_COGE_MOVDETT)); rel.lfile().put(ABMD_CODDETT,rec.get(CONTO_COGE_MOVDETT));
rel.lfile().put(ABMD_TIPOBIL,app().get_tipo_bil()); rel.lfile().put(ABMD_TIPOBIL,get_tipo_bil());
} }
else else
{//In questo caso inserisco Coddett = 0 per azzerare eventuali altri valori {//In questo caso inserisco Coddett = 0 per azzerare eventuali altri valori
//già scritti precedentemente //già scritti precedentemente
rel.lfile().put(ABMD_TIPODETT,"DT"); rel.lfile().put(ABMD_TIPODETT,"DT");
rel.lfile().put(ABMD_CODDETT,0); rel.lfile().put(ABMD_CODDETT,0);
rel.lfile().put(ABMD_TIPOBIL,app().get_tipo_bil()); rel.lfile().put(ABMD_TIPOBIL,get_tipo_bil());
} }
} }
else else
{//Può essere solo un "movimento" perchè il tipo record è MOVI1 o MOVI2 {//Può essere solo un "movimento" perchè il tipo record è MOVI1 o MOVI2
rel.lfile().put(ABMD_TIPODETT,"MO"); rel.lfile().put(ABMD_TIPODETT,"MO");
rel.lfile().put(ABMD_TIPOBIL,app().get_tipo_bil()); rel.lfile().put(ABMD_TIPOBIL,get_tipo_bil());
rel.lfile().put(ABMD_CODDETT,0); //Azzero il contenuto del campo da valori precedenti rel.lfile().put(ABMD_CODDETT,0); //Azzero il contenuto del campo da valori precedenti
real r(rec.get(CONTO_COGE_MOVDETT)); //Eseguo una conversione per un controllo numerico real r(rec.get(CONTO_COGE_MOVDETT)); //Eseguo una conversione per un controllo numerico
if (r > 0) if (r > 0)
@ -461,10 +414,13 @@ bool TABfile_text::pre_writerel(TRelation& rel,const TRecord_text& rec)
return TRUE; return TRUE;
} }
/* ********************************************************************************************************* */
/* TTrasfer */
/*********************************************************************************************************** */
//Questo Handler viene "richiamato" da tre campi: //Questo Handler viene "richiamato" da tre campi:
// F_PERCORSO, F_PERCORSO_UTENTE, F_TIPO_RICE // F_PERCORSO, F_PERCORSO_UTENTE, F_TIPO_RICE
bool TRicezione::inseriscipercorso(TMask_field& f, KEY k) bool TTrasfer::inseriscipercorso(TMask_field& f, KEY k)
{ {
bool modificato = FALSE; //Questa mi dice quando c'è stata una modifica sulla maschera bool modificato = FALSE; //Questa mi dice quando c'è stata una modifica sulla maschera
if ((k==K_TAB) && if ((k==K_TAB) &&
@ -491,7 +447,6 @@ bool TRicezione::inseriscipercorso(TMask_field& f, KEY k)
modificato=TRUE; modificato=TRUE;
} }
if (((f.dlg() == F_PERCORSO) || (f.dlg() == F_TIPO_RICE ))&& modificato) if (((f.dlg() == F_PERCORSO) || (f.dlg() == F_TIPO_RICE ))&& modificato)
{//Entro in questo if tutte le volte che è stato modificato il campo F_PERCORSO {//Entro in questo if tutte le volte che è stato modificato il campo F_PERCORSO
//o F_TIPO_RICE //o F_TIPO_RICE
@ -501,11 +456,14 @@ bool TRicezione::inseriscipercorso(TMask_field& f, KEY k)
//non è garantito che ci sia un record di testa //non è garantito che ci sia un record di testa
TWait_cursor hourglass; TWait_cursor hourglass;
TRecord_text rec_temp; //Istanzio un tipo record_text TRecord_text rec_temp; //Istanzio un tipo record_text
TString config_file_temp; //Nome del file di configurazione
TFilename percorso_temp; //Contiene il percorso completo del file sorgente TString config_file_temp(f.mask().get(F_PERCORSO_UTENTE));//Nome del file di configurazione
TFilename percorso_temp(f.mask().get(F_PERCORSO)); //Contiene il percorso completo del file sorgente
int tipo_ricezione = f.mask().get_int(F_TIPO_RICE);
app().set_transfer(tipo_ricezione,percorso_temp,config_file_temp);
TFile_text *file_temp=NULL; TFile_text *file_temp=NULL;
percorso_temp=f.mask().get(F_PERCORSO); //Leggo il contenuto di F_PERCORSO file_temp=app().trans_file();
file_temp=app().set_config_name(config_file_temp,f.mask(),percorso_temp);
file_temp->open('r'); //Apro il file di testo in rettura file_temp->open('r'); //Apro il file di testo in rettura
int err = file_temp->read(rec_temp); //Leggo la prima riga del file di testo (dovrebbe contenere il record di testata) int err = file_temp->read(rec_temp); //Leggo la prima riga del file di testo (dovrebbe contenere il record di testata)
if((err == NOERR) && (rec_temp.type() == RECORD_TESTA)) //Controllo la lettura e che ci sia il record di testa if((err == NOERR) && (rec_temp.type() == RECORD_TESTA)) //Controllo la lettura e che ci sia il record di testa
@ -548,7 +506,75 @@ bool TRicezione::inseriscipercorso(TMask_field& f, KEY k)
} }
void TRicezione::ricevi(TMask & msk) /* ********************************************************************************************************* */
/* TRicezione */
/*********************************************************************************************************** */
bool TRicezione::create()
{
_files.add(new TLocalisamfile(LF_CARADD),1);
_files.add(new TLocalisamfile(LF_COLLDICH),2);
dispatch_e_menu(BAR_ITEM(1)); //Simula la scelta di una voce di menu
return TRUE;
}
bool TRicezione::destroy() //Distruttore
{
return TRUE;
}
//Funzione membro che effettua la conversione
bool TRicezione::menu(MENU_TAG)
{
TString config_file; //Nome del file di configurazione
TMask msk("AB2100A"); //Maschera dove si chiede di immettere il percorso del file sorgente
TFilename percorso; //Contiene il percorso completo del file sorgente
msk.set_handler(F_PERCORSO, inseriscipercorso); //Assegno un handler al campo F_PERCORSO
//inseriscipercorso controlla che il percorso (e il file) esista e sia corretto
msk.set_handler(F_PERCORSO_UTENTE, inseriscipercorso);
msk.set_handler(F_TIPO_RICE, inseriscipercorso);
//A questo punto il percorso e' corretto
if (msk.run()== K_ENTER) //Eseguo la maschera
{
//Visualizza una finestra di attesa
TIndwin idle(0,"Attendere: aggiornamento della tabella in corso. L'operazione potrebbe richiedere qualche minuto ... ",FALSE,FALSE,60);
percorso=msk.get(F_PERCORSO); //Leggo il contenuto di F_PERCORSO
if (msk.get_int(F_TIPO_RICE) == RICEZIONE_AS400)
{
_rice = new TRicezione_AS400(percorso);
}
if (msk.get_int(F_TIPO_RICE) == RICEZIONE_INTERNA)
{
_rice = new TObject_reception(percorso);
}
if (msk.get_int(F_TIPO_RICE) == RICEZIONE_USER_DEFINED)
{
_rice = new TObject_reception(percorso);
}
_rice->ricevi(msk);
/* if ((msk.get_int(F_TIPO_RICE) == RICEZIONE_AS400) &&
(msk.get_bool(F_MOVIMENTI)))
{
build_balancetree(LF_MOVDETT);
} */
//La chiusura del _trasfile non può essere eseguita prima poichè questo
//serve nella costruzione dell'albero dei movimenti
/* if (msk.get_bool(F_SRELAZ))
build_relana(config_file,msk,percorso); */
//messaggio finale
message_box(" ... aggiornamento delle tabelle selezionate effettuato");
} //end if (msk.run())
return FALSE;
}
void TObject_reception::ricevi(TMask & msk)
{ {
TRecord_text rec; //Istanzio un tipo record_text TRecord_text rec; //Istanzio un tipo record_text
@ -599,19 +625,12 @@ void TRicezione::ricevi(TMask & msk)
//Finita prima fase di aggionamento, si passa eventualmente alla seconda //Finita prima fase di aggionamento, si passa eventualmente alla seconda
} }
// prepara l'albero di record per la navigazione e lo naviga
void TRicezione::naviga_array(TAlbero_record &a)
{
int curr_id=1;
TString_array allkeys;
a.get_keys(allkeys);
allkeys.sort();
TToken_string radice,*next_key;
radice=(TToken_string &)*allkeys.first_item();// radice
next_key=(TToken_string *)allkeys.succ_item();// chiave seguente (figlio? fratello?)
a.dept_first(radice, NULL,NULL, curr_id,allkeys,&next_key);
}
/* ********************************************************************************************************* */
/* TAlbero_record */
/*********************************************************************************************************** */
// visita in dept first e aggiunge man mano i link corretti ai nodi // visita in dept first e aggiunge man mano i link corretti ai nodi
void TAlbero_record::dept_first(TToken_string key, TRectype * padre, TRectype * prec, int &curr_id, void TAlbero_record::dept_first(TToken_string key, TRectype * padre, TRectype * prec, int &curr_id,
@ -674,7 +693,6 @@ void TAlbero_record::dept_first(TToken_string key, TRectype * padre, TRectype *
} }
} }
//key is: FLAG|CODDETT|NREG|NRIG //key is: FLAG|CODDETT|NREG|NRIG
TToken_string& TAlbero_record ::cerca_figlio (TToken_string &key, TToken_string& TAlbero_record ::cerca_figlio (TToken_string &key,
TString_array& allkeys, // parametri ricerca COGE TString_array& allkeys, // parametri ricerca COGE
@ -815,7 +833,26 @@ TToken_string& TAlbero_record ::cerca_fratello (TToken_string &key,
return wrk_string; return wrk_string;
} }
void TRicezione::scrivi_array(TAssoc_array &s_rec, int logic_num)
/* ********************************************************************************************************* */
/* TRicezione_AS400 */
/*********************************************************************************************************** */
// prepara l'albero di record per la navigazione e lo naviga
void TRicezione_AS400::naviga_array(TAlbero_record &a)
{
int curr_id=1;
TString_array allkeys;
a.get_keys(allkeys);
allkeys.sort();
TToken_string radice,*next_key;
radice=(TToken_string &)*allkeys.first_item();// radice
next_key=(TToken_string *)allkeys.succ_item();// chiave seguente (figlio? fratello?)
a.dept_first(radice, NULL,NULL, curr_id,allkeys,&next_key);
}
void TRicezione_AS400::scrivi_array(TAssoc_array &s_rec, int logic_num)
{ {
TRectype *rec; //Creo un tipo di record dove inserire il record TRectype *rec; //Creo un tipo di record dove inserire il record
@ -837,7 +874,7 @@ void TRicezione::scrivi_array(TAssoc_array &s_rec, int logic_num)
} }
} }
void TRicezione::leggi_temp_link(TRectype& cur_rec,TToken_string& k) void TRicezione_AS400::leggi_temp_link(TRectype& cur_rec,TToken_string& k)
{ {
TString campo1 = cur_rec.get(ABMD_IDPADRE); TString campo1 = cur_rec.get(ABMD_IDPADRE);
TString campo2 = cur_rec.get(ABMD_IDFIGLIO); TString campo2 = cur_rec.get(ABMD_IDFIGLIO);
@ -852,7 +889,7 @@ void TRicezione::leggi_temp_link(TRectype& cur_rec,TToken_string& k)
} }
void TRicezione::build_balancetree(int logic_num) void TRicezione_AS400::build_balancetree(int logic_num)
{ {
TAlbero_record seleziona_record; //Dichiarazione di un assoc_array TAlbero_record seleziona_record; //Dichiarazione di un assoc_array
TRelation rel(logic_num); //Creo un nuova relazione TRelation rel(logic_num); //Creo un nuova relazione
@ -897,7 +934,7 @@ void TRicezione::build_balancetree(int logic_num)
} }
} }
void TRicezione::build_relana(TString& config_file, const TMask &msk, const TFilename& percorso) void TRicezione_AS400::build_relana(TString& config_file, const TMask &msk, const TFilename& percorso)
{ {
TString16 curr_ana; TString16 curr_ana;
TToken_string key; TToken_string key;
@ -909,7 +946,9 @@ void TRicezione::build_relana(TString& config_file, const TMask &msk, const TFil
rel.add(LF_COLLDICH,"ID=IDCOLDICH"); rel.add(LF_COLLDICH,"ID=IDCOLDICH");
rel.add(LF_CARADD,"ID=IDCARADD"); rel.add(LF_CARADD,"ID=IDCARADD");
ft = set_config_name(config_file,msk,percorso); //ft = set_config_name(config_file,msk,percorso);
ft = trans_file();
ft->close(); //Chiudo il file
ft->open('r'); //Apro il file di testo in lettura ft->open('r'); //Apro il file di testo in lettura
//Inizia il ciclo sulle Analisi in radici //Inizia il ciclo sulle Analisi in radici
@ -1001,7 +1040,7 @@ void TRicezione::build_relana(TString& config_file, const TMask &msk, const TFil
// naviga per ricostruire il numero di sottorelazione // naviga per ricostruire il numero di sottorelazione
void TRicezione::build_ana_tree(long &currid, TRectype & nodo, TRectype * father, TRectype * brother, TAssoc_array & tabtree) void TRicezione_AS400::build_ana_tree(long &currid, TRectype & nodo, TRectype * father, TRectype * brother, TAssoc_array & tabtree)
{ {
TRectype *ana_node; TRectype *ana_node;
TToken_string key; TToken_string key;
@ -1072,12 +1111,10 @@ void TRicezione::build_ana_tree(long &currid, TRectype & nodo, TRectype * father
ana_node->put(ABRA_IDSUCC, ID_NULLO); ana_node->put(ABRA_IDSUCC, ID_NULLO);
} }
/* /*
// Questa funzione serve solo in fase di debug: // Questa funzione serve solo in fase di debug:
// naviga per ricostruire il numero di sottorelazione // naviga per ricostruire il numero di sottorelazione
void TRicezione::print_ana_tree(int &level,TRectype & nodo,FILE * stream) void TRicezione_AS400::print_ana_tree(int &level,TRectype & nodo,FILE * stream)
{ {
TToken_string key; TToken_string key;
@ -1111,51 +1148,60 @@ void TRicezione::print_ana_tree(int &level,TRectype & nodo,FILE * stream)
} }
*/ */
void TRicezione_AS400::ricevi(TMask & msk)
void TRicezione::set_tipo_bil(const TString &tipo_bil)
{ {
_tipo_bilancio = tipo_bil; // Eseguo la ricezione normale
} TObject_reception::ricevi(msk);
trasfile()->set_tipo_bilancio(msk.get(F_TIPO_BILANCIO));
//Funzione membro che effettua la conversione
bool TRicezione::menu(MENU_TAG) // E aggiungo il resto ...
{ if (msk.get_bool(F_MOVIMENTI))
TString config_file; //Nome del file di configurazione {
TMask msk("AB2100A"); //Maschera dove si chiede di immettere il percorso del file sorgente build_balancetree(LF_MOVDETT);
TFilename percorso; //Contiene il percorso completo del file sorgente }
msk.set_handler(F_PERCORSO, inseriscipercorso); //Assegno un handler al campo F_PERCORSO //La chiusura del _trasfile non può essere eseguita prima poichè questo
//inseriscipercorso controlla che il percorso (e il file) esista e sia corretto //serve nella costruzione dell'albero dei movimenti
msk.set_handler(F_PERCORSO_UTENTE, inseriscipercorso); if (_trasfile != NULL)
msk.set_handler(F_TIPO_RICE, inseriscipercorso); {
_trasfile=NULL;
//A questo punto il percorso e' corretto
if (msk.run()== K_ENTER) //Eseguo la maschera
{
//Visualizza una finestra di attesa
TIndwin idle(0,"Attendere: aggiornamento della tabella in corso.\n\nL'operazione potrebbe richiedere qualche minuto ... ",FALSE,FALSE,60);
percorso=msk.get(F_PERCORSO); //Leggo il contenuto di F_PERCORSO
_trasfile=set_config_name(config_file,msk,percorso);
_trasfile->open('r'); //Apro il file di testo in rettura
set_tipo_bil(msk.get(F_TIPO_BILANCIO));
ricevi(msk);
if (msk.get_bool(F_MOVIMENTI))
build_balancetree(LF_MOVDETT);
//La chiusura del _trasfile non può essere eseguita prima poichè questo
//serve nella costruzione dell'albero dei movimenti
_trasfile->close(); _trasfile->close();
delete _trasfile; delete _trasfile;
_trasfile =NULL; _trasfile =NULL;
}
if (msk.get_bool(F_SRELAZ)) if (msk.get_bool(F_SRELAZ))
build_relana(config_file,msk,percorso); {
//messaggio finale TString config_file;
message_box(" ... aggiornamento delle tabelle selezionate effettuato"); TFilename percorso;
} //end if (msk.run()) percorso=msk.get(F_PERCORSO); //Leggo il contenuto di F_PERCORSO: è stato controllato prima
return FALSE; build_relana(config_file,msk,percorso);
}
} }
TObject_reception::TObject_reception(const TFilename &percorso)
{
if (_trasfile != NULL)
delete _trasfile;
_trasfile = new TFile_text(percorso, "C:/SAURO/TEMP/AB2100B.INI"); /*DA CAMBIARE*/
//_trasfile = new TFile_text(percorso, config); //Leggo il file di configurazione
}
TRicezione_AS400::TRicezione_AS400(const TFilename &percorso)
{
if (_trasfile != NULL)
delete _trasfile;
TString config("ab2100a.ini");
_trasfile = new TFile_text_AS400(percorso, config); //Leggo il file di configurazione
}
TRicezione_userdef ::TRicezione_userdef(const TString & config, const TFilename &percorso)
{
if (_trasfile != NULL)
delete _trasfile;
_trasfile = new TFile_text(percorso, config); //Leggo il file di configurazione
}
int ab2101(int argc, char **argv) int ab2101(int argc, char **argv)
{ {
TRicezione a; TRicezione a;

View File

@ -9,48 +9,27 @@
#include <progind.h> #include <progind.h>
#include <assoc.h> #include <assoc.h>
#include <varrec.h> #include <varrec.h>
#define FLAG_COGE "CG"
#define FLAG_DETT "DT"
#define FLAG_CLIENTE "CL"
#define FLAG_FORNITORE "FO"
#define FLAG_MOVIMENTO "MO" // così i movs sono alla fine
//Classe derivata per il trasferimento
class TTrasferimento:public TRiceTras
{
public:
virtual bool menu(MENU_TAG);
static bool inseriscipercorso(TMask_field& f, KEY k);
//Esegue il ciclo di ricezione
void converti(int);
void trasferisci_albero(TRectype &,TRecord_text&, TAssoc_array&);
bool cerca_padre(TLocalisamfile &, TRectype &);
long my_num(TLocalisamfile&, TAssoc_array&);
bool mov_da_scrivere(TRectype &);
void formatta(TRecord_text&,TRectype&,int&);
TTrasferimento() {}
virtual ~TTrasferimento() {}
};
const char* get_ordinamento(TVariable_rectype & rec) const char* get_ordinamento(TVariable_rectype & rec)
{ {
if (rec.get(ABMD_TIPODETT) == FLAG_DETT || rec.get(ABMD_TIPODETT) == FLAG_COGE ) if (rec.get(ABMD_TIPODETT) == FLAG_DETT_DT || rec.get(ABMD_TIPODETT) == FLAG_COGE_CG )
{ //E' un record di MOVI3 { //E' un record di MOVI3
return (MOVIMENTO3); return (MOVIMENTO3);
} }
if (rec.get(ABMD_TIPODETT) == FLAG_CLIENTE) if (rec.get(ABMD_TIPODETT) == FLAG_CLIENTE_CL)
{//E' un record di MOVI4 {//E' un record di MOVI4
return (MOVIMENTO4); return (MOVIMENTO4);
} }
if (rec.get(ABMD_TIPODETT) == FLAG_FORNITORE) if (rec.get(ABMD_TIPODETT) == FLAG_FORNITORE_FO)
{//E' un record di MOVI5 {//E' un record di MOVI5
return (MOVIMENTO5); return (MOVIMENTO5);
} }
if (rec.get(ABMD_TIPODETT) == FLAG_MOVIMENTO) if (rec.get(ABMD_TIPODETT) == FLAG_MOVIMENTO_MO)
{//Può essere MOVI 1 2 {//Può essere MOVI 1 2
real r(rec.get(ABMD_IMPORTO)); real r(rec.get(ABMD_IMPORTO));
if (r > 0) if (r > 0)
@ -64,7 +43,7 @@ const char* get_ordinamento(TVariable_rectype & rec)
return NULL; return NULL;
} }
bool TTrasferimento::cerca_padre(TLocalisamfile & padre, TRectype &node) bool TInvio_AS400::cerca_padre(TLocalisamfile & padre, TRectype &node)
{ {
padre.put(ABMD_CODDITTA,node.get(ABMD_CODDITTA)); padre.put(ABMD_CODDITTA,node.get(ABMD_CODDITTA));
padre.put(ABMD_ANNO,node.get(ABMD_ANNO)); padre.put(ABMD_ANNO,node.get(ABMD_ANNO));
@ -77,7 +56,7 @@ bool TTrasferimento::cerca_padre(TLocalisamfile & padre, TRectype &node)
return FALSE; return FALSE;
} }
long TTrasferimento::my_num(TLocalisamfile& mov, TAssoc_array& progressivi) long TInvio_AS400::my_num(TLocalisamfile& mov, TAssoc_array& progressivi)
{ {
long ret = 1; long ret = 1;
@ -113,20 +92,20 @@ long TTrasferimento::my_num(TLocalisamfile& mov, TAssoc_array& progressivi)
return ret; return ret;
} }
void TTrasferimento::trasferisci_albero(TRectype &node, TRecord_text &rec, TAssoc_array &progressivi) void TInvio_AS400::trasferisci_albero(TRectype &node, TRecord_text &rec, TAssoc_array &progressivi)
{ {
TLocalisamfile mov(LF_MOVDETT); TLocalisamfile mov(LF_MOVDETT);
//Se è un COGE scrivo il CODICE_COGE nel relativo campo //Se è un COGE scrivo il CODICE_COGE nel relativo campo
if (node.get(ABMD_TIPODETT) == FLAG_COGE) if (node.get(ABMD_TIPODETT) == FLAG_COGE_CG)
rec.add(node.get(ABMD_CODDETT),CONTO_COGE_MOVDETT); rec.add(node.get(ABMD_CODDETT),CONTO_COGE_MOVDETT);
//Se è un movimento ... //Se è un movimento ...
if (node.get(ABMD_TIPODETT)== FLAG_MOVIMENTO) if (node.get(ABMD_TIPODETT)== FLAG_MOVIMENTO_MO)
{ //... sono all'ultimo livello: trovo il padre { //... sono all'ultimo livello: trovo il padre
if (cerca_padre(mov,node)) if (cerca_padre(mov,node))
{//Questo è il padre del movimento {//Questo è il padre del movimento
if (mov.get(ABMD_TIPODETT) == FLAG_COGE) //Se il padre è un COGE scrivo il CONTO COGE nel relativo campo if (mov.get(ABMD_TIPODETT) == FLAG_COGE_CG) //Se il padre è un COGE scrivo il CONTO COGE nel relativo campo
rec.add(node.get(ABMD_CODDETT),CONTO_COGE_MOVDETT); rec.add(node.get(ABMD_CODDETT),CONTO_COGE_MOVDETT);
//altrimenti, se il padre è un dettaglio, non scrivo nessuna informazione aggiuntiva //altrimenti, se il padre è un dettaglio, non scrivo nessuna informazione aggiuntiva
} }
@ -162,7 +141,7 @@ void TTrasferimento::trasferisci_albero(TRectype &node, TRecord_text &rec, TAsso
}//Fine parte "ricostruzione" albero dei movimenti }//Fine parte "ricostruzione" albero dei movimenti
//Questa parte "ricostruisce" l'albero dei dettaglio //Questa parte "ricostruisce" l'albero dei dettaglio
if (node.get(ABMD_TIPODETT)== FLAG_DETT) if (node.get(ABMD_TIPODETT)== FLAG_DETT_DT)
{ {
mov.curr()=node; mov.curr()=node;
TString16 num; TString16 num;
@ -171,7 +150,7 @@ void TTrasferimento::trasferisci_albero(TRectype &node, TRecord_text &rec, TAsso
} }
} }
bool TTrasferimento::mov_da_scrivere(TRectype &node) bool TInvio_AS400::mov_da_scrivere(TRectype &node)
{ {
TLocalisamfile dett(LF_MOVDETT); TLocalisamfile dett(LF_MOVDETT);
if (node.get_long(ABMD_IDPADRE) == ID_NULLO) //Sono al primo livello if (node.get_long(ABMD_IDPADRE) == ID_NULLO) //Sono al primo livello
@ -183,14 +162,14 @@ bool TTrasferimento::mov_da_scrivere(TRectype &node)
return TRUE; return TRUE;
else else
{ {
if (dett.get(ABMD_TIPODETT) == FLAG_COGE) //Sono al terzo livello, ma ammetto solo i COGE if (dett.get(ABMD_TIPODETT) == FLAG_COGE_CG) //Sono al terzo livello, ma ammetto solo i COGE
return TRUE; return TRUE;
} }
} }
return FALSE; //Tutti i livelli superiori a 2 e tutti i casi che non riesco a gestire return FALSE; //Tutti i livelli superiori a 2 e tutti i casi che non riesco a gestire
} }
void TTrasferimento::formatta(TRecord_text &rec, TRectype &node, int &logic_num) void TInvio_AS400::formatta(TRecord_text &rec, TRectype &node, int &logic_num)
{ {
if (logic_num == LF_MOVDETT) if (logic_num == LF_MOVDETT)
{ {
@ -272,7 +251,7 @@ void TTrasferimento::formatta(TRecord_text &rec, TRectype &node, int &logic_num)
} }
} }
void TTrasferimento::converti(int logic_num) void TInvio_AS400::converti(int logic_num)
{ {
TRelation *tr_relation=_trasfile->t_rec(logic_num)->relation(); TRelation *tr_relation=_trasfile->t_rec(logic_num)->relation();
@ -330,7 +309,7 @@ void TTrasferimento::converti(int logic_num)
} }
//Handler per l'inserimento del percorso completo //Handler per l'inserimento del percorso completo
bool TTrasferimento::inseriscipercorso(TMask_field& f, KEY k) bool TInvio_AS400::inseriscipercorso(TMask_field& f, KEY k)
{ {
TString percorso; TString percorso;
percorso=f.get(); //Leggo il contenuto del campo percorso=f.get(); //Leggo il contenuto del campo
@ -339,9 +318,9 @@ bool TTrasferimento::inseriscipercorso(TMask_field& f, KEY k)
//Funzione membro che esegue la conversione di trasferimento //Funzione membro che esegue la conversione di trasferimento
bool TTrasferimento::menu(MENU_TAG) bool TInvio_AS400::menu(MENU_TAG)
{ {
TString config_file; //Nome del file di configurazione TString config_file("ab2100b"); //Nome del file di configurazione
TMask msk("AB2100A"); //Maschera dove si chiede di immettere il percorso del file sorgente TMask msk("AB2100A"); //Maschera dove si chiede di immettere il percorso del file sorgente
TFilename percorso; //Contiene il percorso completo del file sorgente TFilename percorso; //Contiene il percorso completo del file sorgente
@ -356,14 +335,12 @@ bool TTrasferimento::menu(MENU_TAG)
msk.hide(F_VOCI); //nascondo questo campo poichè non mi serve msk.hide(F_VOCI); //nascondo questo campo poichè non mi serve
msk.hide(F_RELAZ); //nascondo questo campo poichè non mi serve msk.hide(F_RELAZ); //nascondo questo campo poichè non mi serve
msk.hide(F_SRELAZ); //nascondo questo campo poichè non mi serve msk.hide(F_SRELAZ); //nascondo questo campo poichè non mi serve
//A questo punto il percorso e' corretto
if (msk.run()== K_ENTER) //Eseguo la maschera if (msk.run()== K_ENTER) //Eseguo la maschera
{ {
//A questo punto il percorso e' corretto
percorso=msk.get(F_PERCORSO); //Leggo il contenuto di F_PERCORSO percorso=msk.get(F_PERCORSO); //Leggo il contenuto di F_PERCORSO
set_config_name(config_file,msk, percorso);
_trasfile = new TFile_text_AS400(percorso, config_file); //Leggo il file di configurazione
_trasfile = new TABfile_text(percorso, config_file); //Leggo il file di configurazione
_trasfile->open(percorso,'w'); //Apro il file di testo in rettura _trasfile->open(percorso,'w'); //Apro il file di testo in rettura
if (msk.get_bool(F_PIANO_CONTI)==TRUE) //Controllo se si è scelto di convertire il piano dei conti if (msk.get_bool(F_PIANO_CONTI)==TRUE) //Controllo se si è scelto di convertire il piano dei conti
{ {
@ -397,7 +374,7 @@ bool TTrasferimento::menu(MENU_TAG)
int ab2102(int argc, char **argv) int ab2102(int argc, char **argv)
{ {
TTrasferimento a; TInvio_AS400 a;
a.run(argc,argv,"Trasferimento su file di testo"); a.run(argc,argv,"Trasferimento su file di testo");
return 0; return 0;
} }