Patch level : at

Files correlati     : at3.exe at3300a.msk
Ricompilazione Demo : [ ]
Commento            : statistica soggetti per categoria: aggiunta selezione categorie


git-svn-id: svn://10.65.10.50/trunk@11268 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 2003-06-23 10:29:44 +00:00
parent 5222817612
commit 30077ad2c3
3 changed files with 232 additions and 44 deletions

View File

@ -86,12 +86,15 @@ class TStatSogxCat : public TApplication
TLocalisamfile* _atstats; TLocalisamfile* _atstats;
TAssoc_array* _colonne; TAssoc_array* _colonne;
TAssoc_array* _categorie; TAssoc_array* _categorie;
TAssoc_array _categmsk;
TArray _righe; TArray _righe;
TString16 _sezini, _sotini, _sezfin, _sotfin, _gruppoazie; TString16 _sezini, _sotini, _sezfin, _sotfin, _gruppoazie;
TDate _dataini, _datafin; TDate _dataini, _datafin;
bool _solotot, _pergruppo; bool _solotot, _pergruppo;
int _sezionistampate; int _sezionistampate;
static bool filter_func_statxcat(const TRelation* rel);
protected: protected:
virtual bool create(); virtual bool create();
virtual bool destroy(); virtual bool destroy();
@ -119,6 +122,20 @@ int TStatSogxCat::data2row(const TString16 catdon)
return ((int) indicer.integer()); return ((int) indicer.integer());
} }
bool TStatSogxCat::filter_func_statxcat(const TRelation* rel)
{
bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile(LF_SOGGETTI);
// filtro per categorie
TAssoc_array& categorie = app()._categmsk;
if (categorie.items() != 0)
{
const TString16 cat = sog.get(SOG_CATDON);
filtrato = categorie.is_key((const char*) cat);
}
return filtrato;
}
bool TStatSogxCat::crea_colonne() bool TStatSogxCat::crea_colonne()
{ {
_colonne->destroy(); _colonne->destroy();
@ -143,12 +160,15 @@ bool TStatSogxCat::crea_righe()
_categorie->add((const char*) catdon, (TObject*) oggetto1); _categorie->add((const char*) catdon, (TObject*) oggetto1);
_righe.add(new TRigaSxCat(catdon), indice); _righe.add(new TRigaSxCat(catdon), indice);
for (ctd.first(); !ctd.eof(); ctd.next()) for (ctd.first(); !ctd.eof(); ctd.next())
{ {
indice++;
catdon = ctd.get("CODTAB"); catdon = ctd.get("CODTAB");
_righe.add(new TRigaSxCat(catdon), indice); if ((_categmsk.is_key((const char*) catdon)) || (_categmsk.items()==0))
real* oggetto = new real(indice); {
_categorie->add((const char*) catdon,(TObject*) oggetto); indice++;
_righe.add(new TRigaSxCat(catdon), indice);
real* oggetto = new real(indice);
_categorie->add((const char*) catdon,(TObject*) oggetto);
}
} }
return _righe.items()>0; return _righe.items()>0;
} }
@ -293,11 +313,14 @@ void TStatSogxCat::azzera_righe()
riga.azzera_valori(); riga.azzera_valori();
TTable ctd("CTD"); TTable ctd("CTD");
for (ctd.first(); !ctd.eof(); ctd.next()) for (ctd.first(); !ctd.eof(); ctd.next())
{ {
catdon = ctd.get("CODTAB"); catdon = ctd.get("CODTAB");
indice = data2row(catdon); if ((_categmsk.is_key((const char*) catdon)) || (_categmsk.items()==0))
TRigaSxCat& riga = (TRigaSxCat&)_righe[indice]; {
riga.azzera_valori(); indice = data2row(catdon);
TRigaSxCat& riga = (TRigaSxCat&)_righe[indice];
riga.azzera_valori();
}
} }
} }
@ -364,32 +387,35 @@ void TStatSogxCat::stampa_sezione(TString16 codsez, TString16 codsot)
TTable ctd("CTD"); TTable ctd("CTD");
for (ctd.first(); !ctd.eof(); ctd.next()) for (ctd.first(); !ctd.eof(); ctd.next())
{ {
TString16 catdon = ctd.get("CODTAB"); TString16 catdon = ctd.get("CODTAB");
TRigaSxCat& riga = (TRigaSxCat&)_righe[data2row(catdon)]; if ((_categmsk.is_key((const char*) catdon)) || (_categmsk.items()==0))
row.reset(); {
rigastampa = ""; TRigaSxCat& riga = (TRigaSxCat&)_righe[data2row(catdon)];
rigastampa << catdon; row.reset();
rigastampa << " "; rigastampa = "";
rigastampa << ctd.get("S0"); rigastampa << catdon;
int pos = 41; rigastampa << " ";
const char* indicen = "N"; rigastampa << ctd.get("S0");
real& colonnan = (real&)_colonne->find(indicen); int pos = 41;
rigatotali.aggiorna_valore((int) colonnan.integer(),riga[(int) colonnan.integer()]); const char* indicen = "N";
valore = ""; real& colonnan = (real&)_colonne->find(indicen);
valore.format("%8ld",riga[(int) colonnan.integer()].integer()); rigatotali.aggiorna_valore((int) colonnan.integer(),riga[(int) colonnan.integer()]);
rigastampa.overwrite((const char*)valore, pos); valore = "";
pos = pos+8; valore.format("%8ld",riga[(int) colonnan.integer()].integer());
const char* indicet = "T"; rigastampa.overwrite((const char*)valore, pos);
real& colonnat = (real&)_colonne->find(indicet); pos = pos+8;
rigatotali.aggiorna_valore((int) colonnat.integer(),riga[(int) colonnat.integer()]); const char* indicet = "T";
valore = ""; real& colonnat = (real&)_colonne->find(indicet);
// valore.format("%8ld",riga[(int) colonnat.integer()].integer()); rigatotali.aggiorna_valore((int) colonnat.integer(),riga[(int) colonnat.integer()]);
valore = riga[(int) colonnat.integer()].string("####.###"); valore = "";
rigastampa.overwrite((const char*)valore, pos); // valore.format("%8ld",riga[(int) colonnat.integer()].integer());
pos = pos+8; valore = riga[(int) colonnat.integer()].string("####.###");
row.put((const char*) rigastampa); rigastampa.overwrite((const char*)valore, pos);
printer().print(row); pos = pos+8;
row.put((const char*) rigastampa);
printer().print(row);
}
} }
// stampa totali per sezione // stampa totali per sezione
@ -422,6 +448,25 @@ void TStatSogxCat::stampa_sezione(TString16 codsez, TString16 codsot)
bool TStatSogxCat::riepilogo() bool TStatSogxCat::riepilogo()
{ {
_categmsk.destroy();
const TString16 catpri = _msk->get(F_CAT1);
const TString16 catsec = _msk->get(F_CAT2);
const TString16 catter = _msk->get(F_CAT3);
const TString16 catqua = _msk->get(F_CAT4);
const TString16 catqui = _msk->get(F_CAT5);
const TString16 catses = _msk->get(F_CAT6);
if (catpri.not_empty())
_categmsk.add((const char*) catpri);
if (catsec.not_empty())
_categmsk.add((const char*) catsec);
if (catter.not_empty())
_categmsk.add((const char*) catter);
if (catqua.not_empty())
_categmsk.add((const char*) catqua);
if (catqui.not_empty())
_categmsk.add((const char*) catqui);
if (catses.not_empty())
_categmsk.add((const char*) catses);
if (crea_colonne() && crea_righe()) if (crea_colonne() && crea_righe())
{ {
// cancello i risultati della elaborazione precedente // cancello i risultati della elaborazione precedente
@ -477,6 +522,8 @@ bool TStatSogxCat::riepilogo()
filtro << format("(90->GRUPPOAZIE != \"\")"); filtro << format("(90->GRUPPOAZIE != \"\")");
} }
_cur->setfilter((const char*) filtro, TRUE); _cur->setfilter((const char*) filtro, TRUE);
_cur->set_filterfunction(filter_func_statxcat);
TString16 codsez, codsot, gruppoazie; TString16 codsez, codsot, gruppoazie;
long numero,numero2; long numero,numero2;
TString16 catdon, cati, catd; TString16 catdon, cati, catd;
@ -520,6 +567,7 @@ bool TStatSogxCat::riepilogo()
nuovod = (datadim >= _dataini && datadim <= _datafin); nuovod = (datadim >= _dataini && datadim <= _datafin);
totaled = (datadim <= _datafin); totaled = (datadim <= _datafin);
cati = ctd.get("S6"); cati = ctd.get("S6");
// aggiungere la ricerca della vera categoria di partenza in base al numero donazioni (e al fatto che sia stata o meno stampata la tessera)
dataisc = recsog.get_date(SOG_DATAISC); dataisc = recsog.get_date(SOG_DATAISC);
nuovoi = (dataisc >= _dataini && dataisc <= _datafin); nuovoi = (dataisc >= _dataini && dataisc <= _datafin);
totalei = (dataisc <= _datafin && datadim > _datafin); totalei = (dataisc <= _datafin && datadim > _datafin);
@ -533,7 +581,7 @@ bool TStatSogxCat::riepilogo()
} }
} }
} }
if (cati.not_empty()) if (cati.not_empty() && (_categmsk.is_key((const char *) cati) || _categmsk.items()==0))
{ {
if (!_solotot) if (!_solotot)
{ {
@ -605,7 +653,7 @@ bool TStatSogxCat::riepilogo()
stat.write(); stat.write();
} }
} }
if (catd.not_empty()) if (catd.not_empty() && (_categmsk.is_key((const char *) catd) || _categmsk.items()==0))
{ {
if (!_solotot) if (!_solotot)
{ {

View File

@ -10,6 +10,19 @@
#define F_SOTFIN 107 #define F_SOTFIN 107
#define F_D_SOTFIN 108 #define F_D_SOTFIN 108
#define F_CAT1 201
#define F_D_CAT1 202
#define F_CAT2 203
#define F_D_CAT2 204
#define F_CAT3 205
#define F_D_CAT3 206
#define F_CAT4 207
#define F_D_CAT4 208
#define F_CAT5 209
#define F_D_CAT5 210
#define F_CAT6 211
#define F_D_CAT6 212
#define F_DATAINI 301 #define F_DATAINI 301
#define F_DATAFIN 302 #define F_DATAFIN 302
#define F_PERGRUPPO 303 #define F_PERGRUPPO 303

View File

@ -1,6 +1,6 @@
#include "at3300a.h" #include "at3300a.h"
PAGE "Statistica donatori per categoria" -1 -1 78 12 PAGE "Statistica donatori per categoria" -1 -1 78 20
GROUPBOX DLG_NULL 77 4 GROUPBOX DLG_NULL 77 4
BEGIN BEGIN
@ -119,33 +119,160 @@ END
GROUPBOX DLG_NULL 77 5 GROUPBOX DLG_NULL 77 5
BEGIN BEGIN
PROMPT 1 5 "Opzioni per la statistica" PROMPT 1 5 "Categorie donatori"
END
STRING F_CAT1 2
BEGIN
PROMPT 2 6 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_CAT1 CODTAB
OUTPUT F_D_CAT1 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT1 30
BEGIN
PROMPT 8 6 ""
FLAGS "D"
END
STRING F_CAT2 2
BEGIN
PROMPT 2 7 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT2
COPY DISPLAY F_CAT1
OUTPUT F_CAT2 CODTAB
OUTPUT F_D_CAT2 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT2 30
BEGIN
PROMPT 8 7 ""
FLAGS "D"
END
STRING F_CAT3 2
BEGIN
PROMPT 2 8 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT3
COPY DISPLAY F_CAT1
OUTPUT F_CAT3 CODTAB
OUTPUT F_D_CAT3 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT3 30
BEGIN
PROMPT 8 8 ""
FLAGS "D"
END
STRING F_CAT4 2
BEGIN
PROMPT 40 6 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT4
COPY DISPLAY F_CAT1
OUTPUT F_CAT4 CODTAB
OUTPUT F_D_CAT4 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT4 30
BEGIN
PROMPT 46 6 ""
FLAGS "D"
END
STRING F_CAT5 2
BEGIN
PROMPT 40 7 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT5
COPY DISPLAY F_CAT1
OUTPUT F_CAT5 CODTAB
OUTPUT F_D_CAT5 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT5 30
BEGIN
PROMPT 46 7 ""
FLAGS "D"
END
STRING F_CAT6 2
BEGIN
PROMPT 40 8 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT6
COPY DISPLAY F_CAT1
OUTPUT F_CAT6 CODTAB
OUTPUT F_D_CAT6 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT6 30
BEGIN
PROMPT 46 8 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 77 5
BEGIN
PROMPT 1 10 "Opzioni per la statistica"
END END
DATE F_DATAINI DATE F_DATAINI
BEGIN BEGIN
PROMPT 2 6 "Segnala i cambi di categoria dal " PROMPT 2 11 "Segnala i cambi di categoria dal "
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
HELP "Data iniziale per elaborazione" HELP "Data iniziale per elaborazione"
END END
DATE F_DATAFIN DATE F_DATAFIN
BEGIN BEGIN
PROMPT 50 6 "al " PROMPT 50 11 "al "
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
HELP "Data finale per elaborazione" HELP "Data finale per elaborazione"
END END
BOOLEAN F_PERGRUPPO BOOLEAN F_PERGRUPPO
BEGIN BEGIN
PROMPT 2 7 "Stampa per gruppo aziendale" PROMPT 2 12 "Stampa per gruppo aziendale"
MESSAGE TRUE ENABLE,F_GRUPPOAZIE|ENABLE,F_D_GRUPPOAZIE|RESET,F_SOLOTOT|DISABLE,F_SOLOTOT MESSAGE TRUE ENABLE,F_GRUPPOAZIE|ENABLE,F_D_GRUPPOAZIE|RESET,F_SOLOTOT|DISABLE,F_SOLOTOT
MESSAGE FALSE RESET,F_GRUPPOAZIE|RESET,F_D_GRUPPOAZIE|DISABLE,F_GRUPPOAZIE|DISABLE,F_D_GRUPPOAZIE|ENABLE,F_SOLOTOT MESSAGE FALSE RESET,F_GRUPPOAZIE|RESET,F_D_GRUPPOAZIE|DISABLE,F_GRUPPOAZIE|DISABLE,F_D_GRUPPOAZIE|ENABLE,F_SOLOTOT
END END
STRING F_GRUPPOAZIE 4 STRING F_GRUPPOAZIE 4
BEGIN BEGIN
PROMPT 35 7 "" PROMPT 35 12 ""
FLAGS "U" FLAGS "U"
USE GAZ USE GAZ
INPUT CODTAB F_GRUPPOAZIE INPUT CODTAB F_GRUPPOAZIE
@ -160,7 +287,7 @@ END
STRING F_D_GRUPPOAZIE 30 STRING F_D_GRUPPOAZIE 30
BEGIN BEGIN
PROMPT 43 7 "" PROMPT 43 12 ""
FLAGS "U" FLAGS "U"
USE GAZ KEY 2 USE GAZ KEY 2
INPUT S0 F_D_GRUPPOAZIE INPUT S0 F_D_GRUPPOAZIE
@ -174,7 +301,7 @@ END
BOOLEAN F_SOLOTOT BOOLEAN F_SOLOTOT
BEGIN BEGIN
PROMPT 2 8 "Stampa solo totale finale (non stampa il dettaglio per sezione)" PROMPT 2 13 "Stampa solo totale finale (non stampa il dettaglio per sezione)"
END END
BUTTON DLG_OK 9 2 BUTTON DLG_OK 9 2