Esportazione su file e uso di file temporaneo

git-svn-id: svn://10.65.10.50/trunk@5334 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
augusto 1997-10-07 11:24:23 +00:00
parent ef2621c2c3
commit 3ae649194c

View File

@ -2,12 +2,14 @@
#include <mask.h>
#include <progind.h>
#include <urldefid.h>
#include <utility.h>
#include <xvtility.h>
#include "../mg/mglib.h"
#include "sv1.h"
#include "sv1200a.h"
#include "sv1200b.h"
#include "sv1200c.h"
#include "svlib01.h"
#include "svriep.h"
@ -31,6 +33,7 @@
#define FORMWIDTH 150
#define DEFAULT_OUTFILE "outstat0"
///////////////////////////////////////////////////////////
// TPeriodo
///////////////////////////////////////////////////////////
@ -311,8 +314,7 @@ class TStampa_stat : public TPrint_application
enum { LINEA_DATI='D', LINEA_RAFFRONTI='R', LINEA_TARGET='T'}; // codici per le righe
TMask * _msk,*_print_msk;
TMask * _msk, *_print_msk,*_export_msk;
TStats_agg _stats;
TFrequenza_colonne _freq;
TCodart_livelli* _liv_art;
@ -320,14 +322,14 @@ class TStampa_stat : public TPrint_application
TRecord_cache *_magazz,*_tipodoc,*_catven,*_zone,*_ums;
TLocalisamfile * _umart,*_anamag,*_clifor,*_agenti;
//TLocalisamfile * _outstat;
TToken_string _key;
TString _last_key;
TArray _files;
bool _ragg_per_um;
// ******************
// costruzione file di Output
TStat_cache * _cache; // cache R/W per le statistiche
int _last_lev_grp, // livello dell'ultimo raggruppamento incontrato
@ -345,28 +347,30 @@ class TStampa_stat : public TPrint_application
bool _st_totr; // flag stampa totali di riga
bool _st_totc; // flag stampa totali di colonna
static TString s_park; // stringa di lavoro
// ******************
// stampa file di Output
TString wrk_row; // stringa di lavoro per le righe di stampa
TRelation * _rel; // relazione per la stampa
private:
void set_ragg_per_um();
void put_column(TRectype & statrec,int col,TSVriep_record& curr);
const real fc_um(TRectype & statrec,const TSVriep_record& rieprec);
void invalid_columns(TRectype & statrec);
void standardize_um(TSVriep_record& rieprec, bool force=FALSE);
void azzera_file();
void update_file(const char * key, const char * code,const char tipo, const int level, const int col, TSVriep_record& curr);
void genera_file();
void esporta_file();
// generazione del file di output
void set_ragg_per_um();
bool filtro_chiavi(TSVriep_record &curr);
void update_file(const char * key, const char * code,const char tipo, const int level, const int col, TSVriep_record& curr);
void genera_file(TLocalisamfile *f);
// handler per i campi di maschera
static bool chiave_notify(TSheet_field& f, int r, KEY k);
static bool chiave_handler(TMask_field& f, KEY k);
static bool campo_handler(TMask_field& f, KEY k);
static bool filename_handler(TMask_field& f, KEY k);
static bool codice_handler(TMask_field& f, KEY k);
static bool multiplo_handler(TMask_field& f, KEY k);
static bool numero_handler(TMask_field& f, KEY k);
@ -391,7 +395,6 @@ protected:
virtual void on_config_change();
int handle_levchange(int row,const int level);
int set_header_colonne(int row);
int set_rows_colonne(int row, TRectype &strec);
void set_row_atpos(char section,int row,const char * f,int pos);
void reset_grplevels();
@ -420,6 +423,7 @@ protected:
public:
TMask& selmask() { return *_msk; }
TMask& printmask() { return *_print_msk; }
TMask& expmask() { return *_export_msk; }
virtual bool menu(MENU_TAG);
};
@ -474,10 +478,6 @@ bool TStampa_stat::set_print(int i)
return (ok);
}
int TStampa_stat::set_header_colonne(int row) // to remove
{
return 0;
}
void TStampa_stat::postclose_print()
{
@ -512,7 +512,7 @@ void TStampa_stat::preprocess_header()
lastrow=row;
for (int c=0; c < _numcol; c++) // colonne
{
if (_st_totr && (((c)%_col_anno)==0 || c== _numcol_dati) )
if (_st_totr && c && (((c)%_col_anno)==0 || c== _numcol_dati) )
{
set_row_atpos('H',row,nome_totale(int(c/_col_anno)),POS_PRIMACOL+c*_largcol+_largcol/2 );
} else {
@ -562,6 +562,7 @@ const TString& TStampa_stat::nome_colonna1(int c)
} else {
switch (code_freq)
{
case 'A':
default:
s_park.format("%d^%s",1+(start+c-1)%lastp,(const char *)char2freqname(code_freq));
}
@ -592,8 +593,16 @@ const TString& TStampa_stat::nome_colonna2(int c)
const TString& TStampa_stat::nome_totale(int c)
{
s_park = "Totale ";
s_park << c+1;
const char code_freq=selmask().get(F_MULTIPLO)[0];
s_park="";
{
switch (code_freq)
{
case 'A':
default:
s_park.format("Totale %d",c);
}
}
return s_park;
}
@ -835,7 +844,8 @@ void TStampa_stat::reset_grplevels()
bool TStampa_stat::user_create()
{
_print_msk= NULL;
// ************
// maschere
_msk = new TMask("sv1200a");
_msk->set_handler(F_CODICE, codice_handler);
_msk->set_handler(F_MULTIPLO, multiplo_handler);
@ -850,15 +860,15 @@ bool TStampa_stat::user_create()
TMask& sm = _msk->sfield(F_CHIAVE).sheet_mask();
sm.set_handler(S_CAMPO, campo_handler);
_print_msk= new TMask("sv1200b");
_print_msk = new TMask("sv1200b");
_export_msk = new TMask("sv1200c");
_export_msk->set_handler(F_FILENAME, filename_handler);
// ************
// files
_files.add(new TLocalisamfile(LF_SVRIEP));
_files.add(new TLocalisamfile(LF_SVSTAT));
// cache R/W per le statistiche
_cache= new TStat_cache();
// ************
// oggetti per la gestione delle parti del codice
_liv_art = new TCodart_livelli;
_liv_giac = new TCodgiac_livelli;
@ -873,15 +883,15 @@ bool TStampa_stat::user_create()
_clifor = new TLocalisamfile(LF_CLIFO);
_agenti = new TLocalisamfile(LF_AGENTI);
//_outstat = new TLocalisamfile(LF_SVSTAT);
// ************
// cursore di stampa
add_file(LF_SVSTAT);
add_cursor(new TCursor(new TRelation(LF_SVSTAT)));
// cache per l'output
_cache=NULL;
// impone force setpage
//force_setpage();
set_real_picture("");
return TRUE;
}
@ -889,18 +899,19 @@ bool TStampa_stat::user_destroy()
{
delete _msk;
delete _print_msk;
delete _export_msk;
delete _liv_art;
delete _liv_giac;
// cancella le cache
delete _cache;
delete _ums;
// cancella i files
delete _umart;
delete _anamag;
delete _clifor;
delete _agenti;
//delete _outstat;
delete current_cursor()->relation();
return TRUE;
}
@ -926,10 +937,21 @@ bool TStampa_stat::menu(MENU_TAG )
if (k == K_SAVE)
{
set_ragg_per_um();
genera_file();
esporta_file();
if (expmask().run()!=K_ESC)
{
TFilename fn(expmask().get(F_FILENAME));
TIsamtempfile * f=new TIsamtempfile(LF_SVSTAT,fn,TRUE);
genera_file(f);
}
} else {
TFilename fn;
fn.temp();
fn.insert("%");
genera_file(new TIsamtempfile(LF_SVSTAT,fn,TRUE));
set_printmask();
TIsamtempfile * f=new TIsamtempfile(LF_SVSTAT,fn,FALSE);
f->set_autodel();
current_cursor()->relation()->replace(f);
do_print(1);
}
}
@ -1311,7 +1333,7 @@ void TStampa_stat::set_ragg_per_um()
_ragg_per_um=TRUE;
}
void TStampa_stat::genera_file()
void TStampa_stat::genera_file(TLocalisamfile *f)
{
TString key; // chiave per il record del file statistiche
@ -1323,6 +1345,10 @@ void TStampa_stat::genera_file()
TSheet_field & s_chiave = m.sfield(F_CHIAVE);
// file di OUTPUT
_cache= new TStat_cache(f);
// file di INPUT
TLocalisamfile riep(LF_SVRIEP);
riep.set_curr(new TSVriep_record);
@ -1340,8 +1366,7 @@ void TStampa_stat::genera_file()
TProgind statusbar(date2long(m.get_date(F_DATAFIN),_stats.frequency())-start_status
, "Creazione del file di output", FALSE, TRUE, 60);
azzera_file();
_cache->clear();
_cache->zap();
// **********************
// ciclo principale: scorre il riepilogo statistiche per anno+periodo
@ -1396,6 +1421,7 @@ void TStampa_stat::genera_file()
} // ciclo
statusbar.setstatus(date2long(m.get_date(F_DATAFIN),_stats.frequency())-start_status);
_cache->flush();
delete _cache;
}
@ -1429,23 +1455,6 @@ void TStampa_stat::set_printmask()
}
}
void TStampa_stat::esporta_file()
{}
void TStampa_stat::azzera_file()
{
TLocalisamfile stat(LF_SVSTAT);
int err=NOERR;
while (err==NOERR)
{
err=stat.first();
if (err==NOERR)
err=stat.remove();
}
}
const TString& TStampa_stat::partkey_name(const char *lev_code)
{
@ -1799,6 +1808,21 @@ bool TStampa_stat::codice_handler(TMask_field& f, KEY k)
return TRUE;
}
bool TStampa_stat::filename_handler(TMask_field& f, KEY k)
{
TFilename fn(f.get());
if (k==K_TAB && !fn.empty())
{
if (!fexist(fn.path()))
return f.error_box("Directory %s non trovato",(const char *)fn.path());
else
if (fexist(fn))
return f.yesno_box("File %s esistente: sovrascrivo",(const char *)fn);
}
return TRUE;
}
bool TStampa_stat::chiave_notify(TSheet_field& s, int r, KEY k)
{
bool ok = TRUE;