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:
parent
5222817612
commit
30077ad2c3
120
at/at3300.cpp
120
at/at3300.cpp
@ -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)
|
||||||
{
|
{
|
||||||
|
13
at/at3300a.h
13
at/at3300a.h
@ -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
|
||||||
|
143
at/at3300a.uml
143
at/at3300a.uml
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user