Aggiornamento versione al 4 febbraio 1998

git-svn-id: svn://10.65.10.50/trunk@6105 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 1998-02-04 14:06:07 +00:00
parent edb0d968ed
commit e7871d48fa
11 changed files with 153 additions and 1610 deletions

BIN
at/at00.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
at/at01.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
at/at02.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

View File

@ -1,694 +0,0 @@
#include <applicat.h>
//#include <execp.h>
#include <mask.h>
#include <printer.h>
#include <progind.h>
#include <real.h>
#include <relation.h>
#include <tabutil.h>
#include <urldefid.h>
#include <utility.h>
#include "at6.h"
// nomi campi maschera
#include "at6600a.h"
// nomi dei campi
#include "soggetti.h"
#include "donaz.h"
#include "atstatd.h"
#include "sezioni.h"
// classe per la definizione di una riga di statistica
class TRiga : public TObject
{
int _anno, _mese;
TArray _valori;
protected:
const TRiga& copy(const TRiga& riga);
public:
const int anno() const { return _anno; }
const int mese() const { return _mese; }
TObject* dup() const { return new TRiga(*this); }
const TRiga& operator = (const TRiga& riga);
const real& operator [] (int colonna) const;
void aggiorna_valore(int colonna, const real& numero) ;
void azzera_valori();
// costruttore
TRiga(int anno, int mese) {_anno = anno; _mese = mese;}
// costruttore di copia
TRiga(const TRiga& riga) { copy(riga); }
virtual ~TRiga() {};
};
const TRiga& TRiga::copy(const TRiga& riga)
{
_anno = riga._anno;
_mese = riga._mese;
_valori = riga._valori;
return (*this);
}
const TRiga& TRiga::operator = (const TRiga& riga)
{
copy(riga);
return (*this);
}
const real& TRiga::operator [] (int colonna) const
{
real* valore = (real*)_valori.objptr(colonna);
if (valore == NULL)
return ZERO;
else
return *valore;
}
void TRiga::aggiorna_valore(int colonna, const real& numero)
{
real* valore = (real*)_valori.objptr(colonna);
if (valore == NULL)
_valori.add(new real(numero), colonna);
else
*valore += numero;
}
void TRiga::azzera_valori()
{
_valori.destroy();
}
class TRiepilogoDonazioni : public TApplication
{
TMask* _msk;
TRelation* _rel;
TCursor* _cur;
TLocalisamfile* _sezioni;
TLocalisamfile* _soggetti;
TLocalisamfile* _donaz;
TLocalisamfile* _atstatd;
TDate _dataini, _datafin;
bool _primedon;
TAssoc_array* _colonne;
TArray _righe; // array per riepilogo donazioni
TArray _righe_prime; // array per riepilogo prime don
TString16 _sezini, _sotini, _sezfin, _sotfin;
protected:
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG m);
virtual TMask& get_mask() { return *_msk; }
virtual TRelation* get_relation() const { return _rel; }
int data2row(const int anno, const int mese);
bool riepilogo();
bool stampa();
bool crea_colonne();
bool crea_righe();
void azzera_righe();
void stampa_sezione(TString16 codsez, TString16 codsot);
void crea_intestazione();
TString16 int2month(const int month);
public:
TRiepilogoDonazioni() {}
};
HIDDEN inline TRiepilogoDonazioni& app() { return (TRiepilogoDonazioni&) main_app(); }
TString16 TRiepilogoDonazioni::int2month(const int month)
{
TString16 mese = "";
switch (month)
{
case 1:
mese << "GENNAIO ";
break;
case 2:
mese << "FEBBRAIO ";
break;
case 3:
mese << "MARZO ";
break;
case 4:
mese << "APRILE ";
break;
case 5:
mese << "MAGGIO ";
break;
case 6:
mese << "GIUGNO ";
break;
case 7:
mese << "LUGLIO ";
break;
case 8:
mese << "AGOSTO ";
break;
case 9:
mese << "SETTEMBRE";
break;
case 10:
mese << "OTTOBRE ";
break;
case 11:
mese << "NOVEMBRE ";
break;
case 12:
mese << "DICEMBRE ";
break;
}
return mese;
}
int TRiepilogoDonazioni::data2row(const int anno, const int mese)
{
const int annoini = _dataini.year();
return (anno-annoini)*12 + mese;
}
bool TRiepilogoDonazioni::crea_colonne()
{
_colonne->destroy();
TTable tdn("TDN");
real contatore(ZERO);
for (tdn.first(); !tdn.eof(); tdn.next())
{
real* oggetto = new real(contatore);
_colonne->add((const char*)tdn.get("CODTAB"),(TObject*)oggetto);
contatore+=1;
}
return !tdn.empty();
}
bool TRiepilogoDonazioni::crea_righe()
{
int anno = _dataini.year();
int meseini, mesefin;
while (anno<=_datafin.year())
{
if (anno == _dataini.year())
meseini = _dataini.month();
else
meseini = 1;
if (anno == _datafin.year())
mesefin = _datafin.month();
else
mesefin = 12;
for (int mese=meseini;mese<=mesefin;mese++)
{
_righe.add(new TRiga(anno, mese), data2row(anno, mese));
if (_primedon)
_righe_prime.add(new TRiga(anno, mese), data2row(anno, mese));
}
anno++;
}
return _righe.items()>0;
}
bool TRiepilogoDonazioni::create()
{
TApplication::create();
_msk = new TMask("at6600a");
_rel = new TRelation(LF_DONAZ);
_rel->add(LF_SOGGETTI, "CODICE==CODICE");
_soggetti = new TLocalisamfile(LF_SOGGETTI);
_donaz = new TLocalisamfile(LF_DONAZ);
_atstatd = new TLocalisamfile(LF_ATSTATD);
_sezioni = new TLocalisamfile(LF_SEZIONI);
_colonne = new TAssoc_array();
dispatch_e_menu(BAR_ITEM(1));
return TRUE;
}
bool TRiepilogoDonazioni::destroy()
{
delete _rel;
delete _msk;
delete _soggetti;
delete _donaz;
delete _atstatd;
delete _sezioni;
delete _colonne;
return TApplication::destroy();
}
bool TRiepilogoDonazioni::menu(MENU_TAG m)
{
TMask& msk = get_mask();
KEY tasto;
tasto = msk.run();
if (tasto == K_ENTER)
{
_dataini = msk.get(F_DATAINI);
_datafin = msk.get(F_DATAFIN);
_primedon = msk.get_bool(F_PRIMEDON);
_sezini = _msk->get(F_SEZINI);
_sotini = _msk->get(F_SOTINI);
_sezfin = _msk->get(F_SEZFIN);
_sotfin = _msk->get(F_SOTFIN);
if (riepilogo())
stampa();
}
return FALSE;
}
void TRiepilogoDonazioni::crea_intestazione()
{
TPrintrow row;
TString256 sep;
sep = "RIEPILOGO DONAZIONI";
if (_dataini.ok())
{
sep << " dal ";
sep << _dataini.string();
}
if (_datafin.ok())
{
sep << " al ";
sep << _datafin.string();
}
sep.center_just(80);
row.put(sep);
row.put("@>", 1);
row.put("Pag. @#", 70);
printer().setheaderline(2, row);
row.reset();
printer().setheaderline(3, row);
sep = "Mese ";
TTable tdn("TDN");
int pos = 27;
for (tdn.first(); !tdn.eof(); tdn.next())
{
sep.overwrite((const char*)tdn.get("CODTAB"),pos);
pos = pos+10;
}
sep.overwrite("Totale",pos);
row.put(sep);
printer().setheaderline(5, row);
sep = "";
sep.fill('-');
row.reset();
row.put(sep);
printer().setheaderline(6, row);
}
bool TRiepilogoDonazioni::stampa()
{
if (printer().open())
{
crea_intestazione();
TRelation* relstat = new TRelation(LF_ATSTATD);
TCursor* curstat = new TCursor(relstat, "", 2);
TString16 oldsez = "**";
TString16 oldsot = "**";
double numero, numprime;
TString16 actsez, actsot;
TString16 tipodon;
int anno, mese;
long last = curstat->items();
for ( *curstat=0; curstat->pos() < last; ++(*curstat) )
{
actsez = curstat->curr().get(ATS_CODSEZ);
actsot = curstat->curr().get(ATS_CODSOT);
anno = curstat->curr().get_int(ATS_ANNO);
mese = curstat->curr().get_int(ATS_MESE);
tipodon = curstat->curr().get(ATS_TIPODON);
numero = (double)curstat->curr().get_int(ATS_NUMERO);
numprime = (double)curstat->curr().get_int(ATS_NUMPRIME);
if (actsez != oldsez || actsot != oldsot)
{
if (oldsez != "**" && oldsot != "**")
{
stampa_sezione(oldsez,oldsot);
azzera_righe();
}
oldsez = actsez;
oldsot = actsot;
}
TRiga& riga = (TRiga&)_righe[data2row(anno,mese)];
real& colonna = (real&)_colonne->find((const char*)tipodon);
real n = numero;
riga.aggiorna_valore(colonna.integer(),n);
if (_primedon)
{
TRiga& riga_prime = (TRiga&)_righe_prime[data2row(anno,mese)];
n = numprime;
riga_prime.aggiorna_valore(colonna.integer(), n);
}
}
if (oldsez != "**" && oldsot != "**")
stampa_sezione(oldsez,oldsot);
delete curstat;
delete relstat;
printer().close();
return TRUE;
}
else
return FALSE;
}
void TRiepilogoDonazioni::azzera_righe()
{
int anno = _dataini.year();
int meseini, mesefin;
while (anno<=_datafin.year())
{
if (anno == _dataini.year())
meseini = _dataini.month();
else
meseini = 1;
if (anno == _datafin.year())
mesefin = _datafin.month();
else
mesefin = 12;
for (int mese=meseini;mese<=mesefin;mese++)
{
TRiga& riga = (TRiga&)_righe[data2row(anno,mese)];
riga.azzera_valori();
if (_primedon)
{
TRiga& riga_prime = (TRiga&)_righe_prime[data2row(anno,mese)];
riga_prime.azzera_valori();
}
}
anno++;
}
}
void TRiepilogoDonazioni::stampa_sezione(TString16 codsez, TString16 codsot)
{
TPrintrow row;
TString256 rigastampa;
rigastampa = "Sezione: ";
rigastampa << codsez;
if (codsot.not_empty())
{
rigastampa << "/";
rigastampa << codsot;
}
rigastampa << " ";
TLocalisamfile sezioni(LF_SEZIONI);
sezioni.setkey(1);
sezioni.zero();
sezioni.put(SEZ_CODSEZ,codsez);
sezioni.put(SEZ_CODSOT,codsot);
if (sezioni.read() == NOERR)
{
TString80 den = sezioni.get(SEZ_DENSEZ);
rigastampa << den;
den = sezioni.get(SEZ_DENSOT);
if (den.not_empty())
{
rigastampa << "/";
rigastampa << den;
}
}
rigastampa.center_just(80);
row.put(rigastampa);
printer().setheaderline(1, row);
TRiga rigatotali(0,0);
int anno = _dataini.year();
int meseini, mesefin;
real totalemese = ZERO;
TString16 valore;
while (anno<=_datafin.year())
{
if (anno == _dataini.year())
meseini = _dataini.month();
else
meseini = 1;
if (anno == _datafin.year())
mesefin = _datafin.month();
else
mesefin = 12;
for (int mese=meseini;mese<=mesefin;mese++)
{
TRiga& riga = (TRiga&)_righe[data2row(anno,mese)];
row.reset();
rigastampa = "";
rigastampa.format("%s %4d", (const char*)int2month(mese), anno);
totalemese = ZERO;
int pos = 21;
for (int i=0;i<_colonne->items();i++)
{
rigatotali.aggiorna_valore(i,riga[i]);
totalemese+=riga[i];
valore = "";
valore.format("%8d",riga[i].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+10;
}
valore = "";
valore.format("%8d",totalemese.integer());
rigastampa.overwrite((const char*)valore, pos+4);
row.put((const char*) rigastampa);
printer().print(row);
}
anno++;
}
// stampa totali per sezione
rigastampa = "";
rigastampa.fill('-');
row.reset();
row.put(rigastampa);
printer().print(row);
row.reset();
rigastampa = "";
rigastampa = "Totale periodo";
totalemese = ZERO;
int pos = 21;
for (int i=0;i<_colonne->items();i++)
{
totalemese+=rigatotali[i];
valore = "";
valore.format("%8d",rigatotali[i].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+10;
}
valore = "";
valore.format("%8d",totalemese.integer());
rigastampa.overwrite((const char*)valore, pos+4);
row.put((const char*) rigastampa);
printer().print(row);
if (_primedon)
{
rigatotali.azzera_valori();
row.reset();
printer().print(row);
printer().print(row);
printer().print(row);
printer().print(row);
//printer().skip(4);
rigastampa = "RIEPILOGO PRIME DONAZIONI";
rigastampa.center_just();
row.put(rigastampa);
row.reset();
row.put(rigastampa);
printer().print(row);
rigastampa = "";
rigastampa.fill('-');
row.reset();
row.put(rigastampa);
printer().print(row);
row.reset();
printer().print(row);
anno = _dataini.year();
while (anno<=_datafin.year())
{
if (anno == _dataini.year())
meseini = _dataini.month();
else
meseini = 1;
if (anno == _datafin.year())
mesefin = _datafin.month();
else
mesefin = 12;
for (int mese=meseini;mese<=mesefin;mese++)
{
TRiga& riga = (TRiga&)_righe_prime[data2row(anno,mese)];
row.reset();
rigastampa = "";
rigastampa.format("%s %4d", (const char*)int2month(mese), anno);
totalemese = ZERO;
int pos = 21;
for (int i=0;i<_colonne->items();i++)
{
rigatotali.aggiorna_valore(i,riga[i]);
totalemese+=riga[i];
valore = "";
valore.format("%8d",riga[i].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+10;
}
valore = "";
valore.format("%8d",totalemese.integer());
rigastampa.overwrite((const char*)valore, pos+4);
row.put((const char*) rigastampa);
printer().print(row);
}
anno++;
}
// stampa totali per sezione
rigastampa = "";
rigastampa.fill('-');
row.reset();
row.put(rigastampa);
printer().print(row);
row.reset();
rigastampa = "";
rigastampa = "Totale periodo";
totalemese = ZERO;
int pos = 21;
for (int i=0;i<_colonne->items();i++)
{
totalemese+=rigatotali[i];
valore = "";
valore.format("%8d",rigatotali[i].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+10;
}
valore = "";
valore.format("%8d",totalemese.integer());
rigastampa.overwrite((const char*)valore, pos+4);
row.put((const char*) rigastampa);
printer().print(row);
}
printer().formfeed();
}
bool TRiepilogoDonazioni::riepilogo()
{
if (crea_colonne() && crea_righe())
{
// cancello i risultati della elaborazione precedente
TLocalisamfile stat(LF_ATSTATD);
for (stat.first(); !stat.eof(); stat.next())
stat.remove();
stat.setkey(2);
// filtro per data
TRectype da(LF_DONAZ);
TRectype a (LF_DONAZ);
if (_dataini.ok())
da.put(DON_DATADON, _dataini);
if (_datafin.ok())
a.put(DON_DATADON, _datafin);
_cur = new TCursor(_rel, "", 2, &da, &a);
TString256 filtro = "";
// filtro per sezione/sottogruppo
if (_sezini.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSEZ >= \"%s\")",(const char*)_sezini);
else
{
filtro << " && ";
filtro << format("(90->CODSEZ >= \"%s\")",(const char*)_sezini);
}
if (_sotini.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSOT >= \"%s\")",(const char*)_sotini);
else
{
filtro << " && ";
filtro << format("(90->CODSOT >= \"%s\")",(const char*)_sotini);
}
}
}
if (_sezfin.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin);
else
{
filtro << " && ";
filtro << format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin);
}
if (_sotfin.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSOT <= \"%s\")",(const char*)_sotfin);
else
{
filtro << " && ";
filtro << format("(90->CODSOT <= \"%s\")",(const char*)_sotfin);
}
}
}
_cur->setfilter((const char*) filtro, TRUE);
TString16 codsez, codsot, tipodon;
TDate datadon;
int anno, mese;
long numero;
bool primadon;
TRectype& recdon = _cur->curr();
TRectype& recsog = _cur->curr(LF_SOGGETTI);
long last = _cur->items();
TProgind prg (last, "Elaborazione in corso... Prego attendere", FALSE, TRUE, 30);
for ( *_cur=0; _cur->pos() < last; ++(*_cur) )
{
prg.addstatus(1);
codsez = recdon.get(DON_CODSEZ);
codsot = recdon.get(DON_CODSOT);
if (codsez.empty())
{
codsez = recsog.get(SOG_CODSEZ);
codsot = recsog.get(SOG_CODSOT);
}
datadon = recdon.get_date(DON_DATADON);
tipodon = recdon.get(DON_TIPODON);
primadon = recdon.get_bool(DON_PRIMADON);
anno = datadon.year();
mese = datadon.month();
stat.zero();
stat.put(ATS_CODSEZ, codsez);
stat.put(ATS_CODSOT, codsot);
stat.put(ATS_ANNO, anno);
stat.put(ATS_MESE, mese);
stat.put(ATS_TIPODON, tipodon);
if (stat.read() == NOERR)
{
numero = stat.get_long(ATS_NUMERO);
numero++;
stat.put(ATS_NUMERO, numero);
if (_primedon && primadon)
{
numero = stat.get_long(ATS_NUMPRIME);
numero++;
stat.put(ATS_NUMPRIME, numero);
}
stat.rewrite();
}
else
{
stat.zero();
stat.put(ATS_CODSEZ, codsez);
stat.put(ATS_CODSOT, codsot);
stat.put(ATS_ANNO, anno);
stat.put(ATS_MESE, mese);
stat.put(ATS_TIPODON, tipodon);
numero = 1;
stat.put(ATS_NUMERO, numero);
if (_primedon && primadon)
stat.put(ATS_NUMPRIME, numero);
stat.write();
}
}
return (stat.eod() > 0);
}
else
return FALSE;
}
int at6600(int argc, char* argv[])
{
TRiepilogoDonazioni a;
a.run(argc, argv, "Riepilogo mensile donazioni");
return 0;
}

View File

@ -1,15 +0,0 @@
// riepilogo mensile donazioni
// definizione campi per maschera di selezione
#define F_SEZINI 101
#define F_D_SEZINI 102
#define F_SOTINI 103
#define F_D_SOTINI 104
#define F_SEZFIN 105
#define F_D_SEZFIN 106
#define F_SOTFIN 107
#define F_D_SOTFIN 108
#define F_DATAINI 301
#define F_DATAFIN 302
#define F_PRIMEDON 303

View File

@ -1,153 +0,0 @@
#include "at6600a.h"
PAGE "Riepilogo mensile donazioni" -1 -1 78 12
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 1 "Scelta sezioni/sottogruppi"
END
STRING F_SEZINI 2
BEGIN
PROMPT 2 2 "Da "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_SEZINI
INPUT CODSOT F_SOTINI
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_SEZINI CODSEZ
OUTPUT F_D_SEZINI DENSEZ
OUTPUT F_SOTINI CODSOT
OUTPUT F_D_SOTINI DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione da cui partire"
END
STRING F_D_SEZINI 25
BEGIN
PROMPT 11 2 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZINI
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_SEZINI
CHECKTYPE NORMAL
HELP "Sezione da cui partire"
END
STRING F_SOTINI 2
BEGIN
PROMPT 2 3 " "
COPY ALL F_SEZINI
CHECKTYPE SEARCH
HELP "Codice sottogruppo da cui partire"
END
STRING F_D_SOTINI 25
BEGIN
PROMPT 11 3 ""
FLAGS "U"
COPY USE F_D_SEZINI
INPUT DENSEZ F_D_SEZINI
INPUT DENSOT F_D_SOTINI
COPY DISPLAY F_D_SEZINI
COPY OUTPUT F_D_SEZINI
CHECKTYPE NORMAL
HELP "Sottogruppo da cui partire"
END
STRING F_SEZFIN 2
BEGIN
PROMPT 41 2 "A "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_SEZFIN
INPUT CODSOT F_SOTFIN
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_SEZFIN CODSEZ
OUTPUT F_D_SEZFIN DENSEZ
OUTPUT F_SOTFIN CODSOT
OUTPUT F_D_SOTFIN DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione finale"
END
STRING F_D_SEZFIN 25
BEGIN
PROMPT 49 2 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZFIN
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_SEZFIN
CHECKTYPE NORMAL
HELP "Sezione finale"
END
STRING F_SOTFIN 2
BEGIN
PROMPT 41 3 " "
COPY ALL F_SEZFIN
CHECKTYPE SEARCH
HELP "Codice sottogruppo finale"
END
STRING F_D_SOTFIN 25
BEGIN
PROMPT 49 3 ""
FLAGS "U"
COPY USE F_D_SEZFIN
INPUT DENSEZ F_D_SEZFIN
INPUT DENSOT F_D_SOTFIN
COPY DISPLAY F_D_SEZFIN
COPY OUTPUT F_D_SEZFIN
CHECKTYPE NORMAL
HELP "Sottogruppo finale"
END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 5 "Opzioni per il riepilogo"
END
DATE F_DATAINI
BEGIN
PROMPT 2 6 "Donazioni effettuate dal "
HELP "Data iniziale"
END
DATE F_DATAFIN
BEGIN
PROMPT 40 6 "al "
HELP "Data finale"
END
BOOLEAN F_PRIMEDON
BEGIN
PROMPT 2 7 "Riepilogo per prime donazioni"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,580 +0,0 @@
#include <applicat.h>
//#include <execp.h>
#include <mask.h>
#include <printer.h>
#include <progind.h>
#include <real.h>
#include <relation.h>
#include <tabutil.h>
#include <urldefid.h>
#include <utility.h>
#include "at6.h"
// nomi campi maschera
#include "at6700a.h"
// nomi dei campi
#include "soggetti.h"
#include "donaz.h"
#include "atstatd.h"
#include "sezioni.h"
// classe per la definizione di una riga di statistica
class TRigaG : public TObject
{
TDate _data;
TArray _valori;
protected:
const TRigaG& copy(const TRigaG& riga);
public:
const TDate data() const { return _data; }
TObject* dup() const { return new TRigaG(*this); }
const TRigaG& operator = (const TRigaG& riga);
const real& operator [] (int colonna) const;
void aggiorna_valore(int colonna, const real& numero) ;
void azzera_valori();
// costruttore
TRigaG(TDate data) {_data = data;}
// costruttore di copia
TRigaG(const TRigaG& riga) { copy(riga); }
virtual ~TRigaG() {};
};
const TRigaG& TRigaG::copy(const TRigaG& riga)
{
_data = riga._data;
_valori = riga._valori;
return (*this);
}
const TRigaG& TRigaG::operator = (const TRigaG& riga)
{
copy(riga);
return (*this);
}
const real& TRigaG::operator [] (int colonna) const
{
real* valore = (real*)_valori.objptr(colonna);
if (valore == NULL)
return ZERO;
else
return *valore;
}
void TRigaG::aggiorna_valore(int colonna, const real& numero)
{
real* valore = (real*)_valori.objptr(colonna);
if (valore == NULL)
_valori.add(new real(numero), colonna);
else
*valore += numero;
}
void TRigaG::azzera_valori()
{
_valori.destroy();
}
class TRiepilogoGiornaliero : public TApplication
{
TMask* _msk;
TRelation* _rel;
TCursor* _cur;
TLocalisamfile* _sezioni;
TLocalisamfile* _soggetti;
TLocalisamfile* _donaz;
TLocalisamfile* _atstatd;
bool _primedon;
TDate _dataini, _datafin;
TAssoc_array* _colonne;
TArray _righe; // array per riepilogo donazioni
TArray _righe_prime; // array per riepilogo prime don
TString16 _sezini, _sotini, _sezfin, _sotfin;
protected:
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG m);
virtual TMask& get_mask() { return *_msk; }
virtual TRelation* get_relation() const { return _rel; }
int data2row(const TDate data) { return data-_dataini; }
bool riepilogo();
bool stampa();
bool crea_colonne();
bool crea_righe();
void azzera_righe();
void stampa_sezione(TString16 codsez, TString16 codsot);
void crea_intestazione();
public:
TRiepilogoGiornaliero() {}
};
HIDDEN inline TRiepilogoGiornaliero& app() { return (TRiepilogoGiornaliero&) main_app(); }
bool TRiepilogoGiornaliero::crea_colonne()
{
_colonne->destroy();
TTable tdn("TDN");
real contatore(ZERO);
for (tdn.first(); !tdn.eof(); tdn.next())
{
real* oggetto = new real(contatore);
_colonne->add((const char*)tdn.get("CODTAB"),(TObject*)oggetto);
contatore+=1;
}
return !tdn.empty();
}
bool TRiepilogoGiornaliero::crea_righe()
{
TDate data = _dataini;
while (data<=_datafin)
{
_righe.add(new TRigaG(data), data2row(data));
if (_primedon)
_righe_prime.add(new TRigaG(data), data2row(data));
++data;
}
return _righe.items()>0;
}
bool TRiepilogoGiornaliero::create()
{
TApplication::create();
_msk = new TMask("at6700a");
_rel = new TRelation(LF_DONAZ);
_rel->add(LF_SOGGETTI, "CODICE==CODICE");
_soggetti = new TLocalisamfile(LF_SOGGETTI);
_donaz = new TLocalisamfile(LF_DONAZ);
_atstatd = new TLocalisamfile(LF_ATSTATD);
_sezioni = new TLocalisamfile(LF_SEZIONI);
_colonne = new TAssoc_array();
dispatch_e_menu(BAR_ITEM(1));
return TRUE;
}
bool TRiepilogoGiornaliero::destroy()
{
delete _rel;
delete _msk;
delete _soggetti;
delete _donaz;
delete _atstatd;
delete _sezioni;
delete _colonne;
return TApplication::destroy();
}
bool TRiepilogoGiornaliero::menu(MENU_TAG m)
{
TMask& msk = get_mask();
KEY tasto;
tasto = msk.run();
if (tasto == K_ENTER)
{
_dataini = msk.get(F_DATAINI);
_datafin = msk.get(F_DATAFIN);
_primedon = msk.get_bool(F_PRIMEDON);
_sezini = _msk->get(F_SEZINI);
_sotini = _msk->get(F_SOTINI);
_sezfin = _msk->get(F_SEZFIN);
_sotfin = _msk->get(F_SOTFIN);
if (riepilogo())
stampa();
}
return FALSE;
}
void TRiepilogoGiornaliero::crea_intestazione()
{
TPrintrow row;
TString256 sep;
sep = "GIORNALIERO DONAZIONI";
if (_dataini.ok())
{
sep << " dal ";
sep << _dataini.string();
}
if (_datafin.ok())
{
sep << " al ";
sep << _datafin.string();
}
sep.center_just(80);
row.put(sep);
row.put("@>", 1);
row.put("Pag. @#", 70);
printer().setheaderline(2, row);
row.reset();
printer().setheaderline(3, row);
sep = "Data ";
TTable tdn("TDN");
int pos = 27;
for (tdn.first(); !tdn.eof(); tdn.next())
{
sep.overwrite((const char*)tdn.get("CODTAB"),pos);
pos = pos+10;
}
sep.overwrite("Totale",pos);
row.put(sep);
printer().setheaderline(5, row);
sep = "";
sep.fill('-');
row.reset();
row.put(sep);
printer().setheaderline(6, row);
}
bool TRiepilogoGiornaliero::stampa()
{
if (printer().open())
{
crea_intestazione();
TRelation* relstat = new TRelation(LF_ATSTATD);
TCursor* curstat = new TCursor(relstat, "", 1);
TString16 oldsez = "**";
TString16 oldsot = "**";
double numero, numprime;
TString16 actsez, actsot;
TString16 tipodon;
TDate data;
long last = curstat->items();
for ( *curstat=0; curstat->pos() < last; ++(*curstat) )
{
actsez = curstat->curr().get(ATS_CODSEZ);
actsot = curstat->curr().get(ATS_CODSOT);
data = curstat->curr().get_date(ATS_DATA);
tipodon = curstat->curr().get(ATS_TIPODON);
numero = (double)curstat->curr().get_int(ATS_NUMERO);
numprime = (double)curstat->curr().get_int(ATS_NUMPRIME);
if (actsez != oldsez || actsot != oldsot)
{
if (oldsez != "**" && oldsot != "**")
{
stampa_sezione(oldsez,oldsot);
azzera_righe();
}
oldsez = actsez;
oldsot = actsot;
}
TRigaG& riga = (TRigaG&)_righe[data2row(data)];
real& colonna = (real&)_colonne->find((const char*)tipodon);
real n = numero;
riga.aggiorna_valore(colonna.integer(),n);
if (_primedon)
{
TRigaG& riga_prime = (TRigaG&)_righe_prime[data2row(data)];
n = numprime;
riga_prime.aggiorna_valore(colonna.integer(), n);
}
}
if (oldsez != "**" && oldsot != "**")
stampa_sezione(oldsez,oldsot);
delete curstat;
delete relstat;
printer().close();
return TRUE;
}
else
return FALSE;
}
void TRiepilogoGiornaliero::azzera_righe()
{
TDate data = _dataini;
while (data<=_datafin)
{
TRigaG& riga = (TRigaG&)_righe[data2row(data)];
riga.azzera_valori();
if (_primedon)
{
TRigaG& riga_prime = (TRigaG&)_righe_prime[data2row(data)];
riga_prime.azzera_valori();
}
++data;
}
}
void TRiepilogoGiornaliero::stampa_sezione(TString16 codsez, TString16 codsot)
{
TPrintrow row;
TString256 rigastampa;
rigastampa = "Sezione: ";
rigastampa << codsez;
if (codsot.not_empty())
{
rigastampa << "/";
rigastampa << codsot;
}
rigastampa << " ";
TLocalisamfile sezioni(LF_SEZIONI);
sezioni.setkey(1);
sezioni.zero();
sezioni.put(SEZ_CODSEZ,codsez);
sezioni.put(SEZ_CODSOT,codsot);
if (sezioni.read() == NOERR)
{
TString80 den = sezioni.get(SEZ_DENSEZ);
rigastampa << den;
den = sezioni.get(SEZ_DENSOT);
if (den.not_empty())
{
rigastampa << "/";
rigastampa << den;
}
}
rigastampa.center_just(80);
row.put(rigastampa);
printer().setheaderline(1, row);
TRigaG rigatotali(NULLDATE);
TDate data = _dataini;
real totaledata = ZERO;
TString16 valore;
while (data<=_datafin)
{
TRigaG& riga = (TRigaG&)_righe[data2row(data)];
row.reset();
rigastampa = "";
rigastampa.format("%s", (const char*)data.string());
totaledata = ZERO;
int pos = 21;
for (int i=0;i<_colonne->items();i++)
{
rigatotali.aggiorna_valore(i,riga[i]);
totaledata+=riga[i];
valore = "";
valore.format("%8d",riga[i].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+10;
}
valore = "";
valore.format("%8d",totaledata.integer());
rigastampa.overwrite((const char*)valore, pos+4);
row.put((const char*) rigastampa);
printer().print(row);
++data;
}
// stampa totali per sezione
rigastampa = "";
rigastampa.fill('-');
row.reset();
row.put(rigastampa);
printer().print(row);
row.reset();
rigastampa = "";
rigastampa = "Totale periodo";
totaledata = ZERO;
int pos = 21;
for (int i=0;i<_colonne->items();i++)
{
totaledata+=rigatotali[i];
valore = "";
valore.format("%8d",rigatotali[i].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+10;
}
valore = "";
valore.format("%8d",totaledata.integer());
rigastampa.overwrite((const char*)valore, pos+4);
row.put((const char*) rigastampa);
printer().print(row);
if (_primedon)
{
printer().formfeed();
rigatotali.azzera_valori();
data = _dataini;
while (data<=_datafin)
{
TRigaG& riga = (TRigaG&)_righe_prime[data2row(data)];
row.reset();
rigastampa = "";
rigastampa.format("%s", (const char*)data.string());
totaledata = ZERO;
int pos = 21;
for (int i=0;i<_colonne->items();i++)
{
rigatotali.aggiorna_valore(i,riga[i]);
totaledata+=riga[i];
valore = "";
valore.format("%8d",riga[i].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+10;
}
valore = "";
valore.format("%8d",totaledata.integer());
rigastampa.overwrite((const char*)valore, pos+4);
row.put((const char*) rigastampa);
printer().print(row);
++data;
}
// stampa totali per sezione
rigastampa = "";
rigastampa.fill('-');
row.reset();
row.put(rigastampa);
printer().print(row);
row.reset();
rigastampa = "";
rigastampa = "Totale periodo";
totaledata = ZERO;
int pos = 21;
for (int i=0;i<_colonne->items();i++)
{
totaledata+=rigatotali[i];
valore = "";
valore.format("%8d",rigatotali[i].integer());
rigastampa.overwrite((const char*)valore, pos);
pos = pos+10;
}
valore = "";
valore.format("%8d",totaledata.integer());
rigastampa.overwrite((const char*)valore, pos+4);
row.put((const char*) rigastampa);
printer().print(row);
}
row.reset();
printer().setheaderline(3, row);
printer().formfeed();
}
bool TRiepilogoGiornaliero::riepilogo()
{
if (crea_colonne() && crea_righe())
{
// cancello i risultati della elaborazione precedente
TLocalisamfile stat(LF_ATSTATD);
for (stat.first(); !stat.eof(); stat.next())
stat.remove();
// filtro per data
TRectype da(LF_DONAZ);
TRectype a (LF_DONAZ);
if (_dataini.ok())
da.put(DON_DATADON, _dataini);
if (_datafin.ok())
a.put(DON_DATADON, _datafin);
_cur = new TCursor(_rel, "", 2, &da, &a);
TString256 filtro = "";
// filtro per sezione/sottogruppo
if (_sezini.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSEZ >= \"%s\")",(const char*)_sezini);
else
{
filtro << " && ";
filtro << format("(90->CODSEZ >= \"%s\")",(const char*)_sezini);
}
if (_sotini.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSOT >= \"%s\")",(const char*)_sotini);
else
{
filtro << " && ";
filtro << format("(90->CODSOT >= \"%s\")",(const char*)_sotini);
}
}
}
if (_sezfin.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin);
else
{
filtro << " && ";
filtro << format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin);
}
if (_sotfin.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSOT <= \"%s\")",(const char*)_sotfin);
else
{
filtro << " && ";
filtro << format("(90->CODSOT <= \"%s\")",(const char*)_sotfin);
}
}
}
_cur->setfilter((const char*) filtro, TRUE);
TString16 codsez, codsot, tipodon;
int anno, mese, giorno;
TDate data;
long numero;
bool primadon;
TRectype& recdon = _cur->curr();
TRectype& recsog = _cur->curr(LF_SOGGETTI);
long last = _cur->items();
TProgind prg (last, "Elaborazione in corso... Prego attendere", FALSE, TRUE, 30);
for ( *_cur=0; _cur->pos() < last; ++(*_cur) )
{
prg.addstatus(1);
codsez = recdon.get(DON_CODSEZ);
codsot = recdon.get(DON_CODSOT);
if (codsez.empty())
{
codsez = recsog.get(SOG_CODSEZ);
codsot = recsog.get(SOG_CODSOT);
}
data = recdon.get_date(DON_DATADON);
anno = data.year();
mese = data.month();
giorno = data.day();
tipodon = recdon.get(DON_TIPODON);
primadon = recdon.get_bool(DON_PRIMADON);
stat.zero();
stat.put(ATS_CODSEZ, codsez);
stat.put(ATS_CODSOT, codsot);
//stat.put(ATS_DATA, data);
stat.put(ATS_ANNO, anno);
stat.put(ATS_MESE, mese);
stat.put(ATS_GIORNO, giorno);
stat.put(ATS_TIPODON, tipodon);
if (stat.read() == NOERR)
{
numero = stat.get_long(ATS_NUMERO);
numero++;
stat.put(ATS_NUMERO, numero);
if (_primedon && primadon)
{
numero = stat.get_long(ATS_NUMPRIME);
numero++;
stat.put(ATS_NUMPRIME, numero);
}
int err = stat.rewrite();
}
else
{
stat.zero();
stat.put(ATS_CODSEZ, codsez);
stat.put(ATS_CODSOT, codsot);
stat.put(ATS_ANNO, anno);
stat.put(ATS_MESE, mese);
stat.put(ATS_GIORNO, giorno);
stat.put(ATS_DATA, data);
stat.put(ATS_TIPODON, tipodon);
numero = 1;
stat.put(ATS_NUMERO, numero);
if (_primedon && primadon)
stat.put(ATS_NUMPRIME, numero);
int err = stat.write();
}
}
return (stat.eod() > 0);
}
else
return FALSE;
}
int at6700(int argc, char* argv[])
{
TRiepilogoGiornaliero a;
a.run(argc, argv, "Riepilogo giornaliero donazioni");
return 0;
}

View File

@ -1,15 +0,0 @@
// riepilogo gironaliero donazioni
// definizione campi per maschera di selezione
#define F_SEZINI 101
#define F_D_SEZINI 102
#define F_SOTINI 103
#define F_D_SOTINI 104
#define F_SEZFIN 105
#define F_D_SEZFIN 106
#define F_SOTFIN 107
#define F_D_SOTFIN 108
#define F_DATAINI 301
#define F_DATAFIN 302
#define F_PRIMEDON 303

View File

@ -1,153 +0,0 @@
#include "at6700a.h"
PAGE "Riepilogo giornaliero donazioni" -1 -1 78 12
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 1 "Scelta sezioni/sottogruppi"
END
STRING F_SEZINI 2
BEGIN
PROMPT 2 2 "Da "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_SEZINI
INPUT CODSOT F_SOTINI
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_SEZINI CODSEZ
OUTPUT F_D_SEZINI DENSEZ
OUTPUT F_SOTINI CODSOT
OUTPUT F_D_SOTINI DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione da cui partire"
END
STRING F_D_SEZINI 25
BEGIN
PROMPT 11 2 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZINI
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_SEZINI
CHECKTYPE NORMAL
HELP "Sezione da cui partire"
END
STRING F_SOTINI 2
BEGIN
PROMPT 2 3 " "
COPY ALL F_SEZINI
CHECKTYPE SEARCH
HELP "Codice sottogruppo da cui partire"
END
STRING F_D_SOTINI 25
BEGIN
PROMPT 11 3 ""
FLAGS "U"
COPY USE F_D_SEZINI
INPUT DENSEZ F_D_SEZINI
INPUT DENSOT F_D_SOTINI
COPY DISPLAY F_D_SEZINI
COPY OUTPUT F_D_SEZINI
CHECKTYPE NORMAL
HELP "Sottogruppo da cui partire"
END
STRING F_SEZFIN 2
BEGIN
PROMPT 41 2 "A "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_SEZFIN
INPUT CODSOT F_SOTFIN
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_SEZFIN CODSEZ
OUTPUT F_D_SEZFIN DENSEZ
OUTPUT F_SOTFIN CODSOT
OUTPUT F_D_SOTFIN DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione finale"
END
STRING F_D_SEZFIN 25
BEGIN
PROMPT 49 2 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZFIN
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_SEZFIN
CHECKTYPE NORMAL
HELP "Sezione finale"
END
STRING F_SOTFIN 2
BEGIN
PROMPT 41 3 " "
COPY ALL F_SEZFIN
CHECKTYPE SEARCH
HELP "Codice sottogruppo finale"
END
STRING F_D_SOTFIN 25
BEGIN
PROMPT 49 3 ""
FLAGS "U"
COPY USE F_D_SEZFIN
INPUT DENSEZ F_D_SEZFIN
INPUT DENSOT F_D_SOTFIN
COPY DISPLAY F_D_SEZFIN
COPY OUTPUT F_D_SEZFIN
CHECKTYPE NORMAL
HELP "Sottogruppo finale"
END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 5 "Opzioni per il riepilogo"
END
DATE F_DATAINI
BEGIN
PROMPT 2 6 "Donazioni effettuate dal "
HELP "Data iniziale"
END
DATE F_DATAFIN
BEGIN
PROMPT 40 6 "al "
HELP "Data finale"
END
BOOLEAN F_PRIMEDON
BEGIN
PROMPT 2 7 "Riepilogo per prime donazioni"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

11
at/atstats.h Executable file
View File

@ -0,0 +1,11 @@
// definizione campi dell'archivio ATSTATS
#define ATSS_CODSEZ "CODSEZ"
#define ATSS_CODSOT "CODSOT"
#define ATSS_GRUPPO "GRUPPO"
#define ATSS_RH "RH"
#define ATSS_FASCIA "FASCIA"
#define ATSS_SESSO "SESSO"
#define ATSS_CATDON "CATDON"
#define ATSS_NUMERO "NUMERO"
#define ATSS_NUMERO2 "NUMERO2"

142
at/avis.men Executable file
View File

@ -0,0 +1,142 @@
[AVIS_000]
Caption = "Menu principale"
Picture = <at00.bmp>
Module = 0
Flags = ""
Item_01 = "Archivi", [AVIS_001]
Item_02 = "Tabelle", [AVIS_002]
Item_03 = "Operazioni periodiche", [AVIS_003]
Item_04 = "Stampe soggetti", [AVIS_004]
Item_05 = "Stampe per convocazioni", [AVIS_005]
Item_06 = "Stampe di controllo", [AVIS_006]
Item_07 = "Benemerenze", [AVIS_007]
Item_07 = "Statistiche", [AVIS_008]
Item_09 = "Manutenzione", [AVIS_099]
[AVIS_001]
Caption = "Archivi"
Picture = <at01.bmp>
Module = 0
Flags = ""
Item_01 = "Soggetti", "at0 -0", ""
Item_02 = "Giornaliero donazioni/controlli", "at0 -1", ""
Item_03 = "Giornaliero controlli", "at0 -2", ""
Item_04 = "Convocazioni su punto di prelievo", "at0 -3", ""
Item_05 = "Spostamento convocazioni", "at0 -4", ""
Item_06 = "Parametri di sezione", "at5 -0", ""
[AVIS_002]
Caption = "Tabelle"
Picture = <ba23.bmp>
Module = 0
Flags = ""
Item_01 = "Sezioni", "ba3 -3 batbsez 96", ""
Item_02 = "Medici", "ba3 -3 batbmed 97", ""
Item_03 = "Benemerenze", "ba3 -0 bnz", ""
Item_04 = "Categorie donatori", "ba3 -0 ctd", ""
Item_05 = "Categorie non donatori", "ba3 -0 ctn", ""
Item_06 = "Gruppi aziendali", "ba3 -0 gaz", ""
Item_07 = "Idoneita' alla donazione", "ba3 -0 ido", ""
Item_08 = "Localita' postali", "ba3 -0 lcp", ""
Item_09 = "Punti di prelievo", "ba3 -0 ldn", ""
Item_10 = "Luoghi di lavoro", "ba3 -0 ldl", ""
Item_11 = "Motivi per controlli sanitari", "ba3 -0 mtc", ""
Item_12 = "Professioni", "ba3 -0 prf", ""
Item_13 = "Tipi di donazione", "ba3 -0 tdn", ""
Item_14 = "Tipi/Esiti controlli sanitari", "ba3 -0 tcs", ""
[AVIS_003]
Caption = "Operazioni periodiche"
Picture = <at01.bmp>
Module = 0
Flags = ""
Item_01 = "Chiusura", "at0 -5", ""
Item_03 = "Sblocco sospesi", "at0 -6", ""
Item_04 = "Sblocco esclusi", "at0 -7", ""
Item_05 = "Modifica intervalli di don.", "at0 -8", ""
[AVIS_004]
Caption = "Stampe soggetti"
Picture = <at02.bmp>
Module = 0
Flags = ""
Item_01 = "Sospesi", "at2 -0", ""
Item_02 = "Per data di nascita", "at2 -1", ""
Item_03 = "Esclusi", "at2 -2", ""
Item_04 = "Modificati", "at2 -3", ""
Item_05 = "Idonei", "at2 -4", ""
Item_06 = "Iscritti/dimessi", "at2 -5", ""
Item_07 = "Per categorie", "at2 -6", ""
Item_08 = "Soggetti che non donano dal", "at2 -7", ""
Item_09 = "Soggetti per frequenza donazione", "at2 -8", ""
Item_10 = "Tessere associative singole", "at4 -5", ""
Item_12 = "Tessere associative complessive", "at4 -4", ""
Item_13 = "Stampe singole", "at4 -6", ""
Item_14 = "Stampe per codice", "at4 -7", ""
[AVIS_005]
Caption = "Stampe per convocazioni"
Picture = <at02.bmp>
Module = 0
Flags = ""
Item_01 = "Scadenze di donazione", "at4 -0", ""
Item_02 = "Urgenze", "at4 -1", ""
Item_03 = "Convocazioni per sezione", "at4 -2", ""
Item_04 = "Convocazioni su punto di prelievo", "at4 -3", ""
Item_04 = "Stampe singole", "at4 -6", ""
[AVIS_006]
Caption = "Stampe di controllo"
Picture = <ba25.bmp>
Module = 0
Flags = ""
Item_01 = "Donazioni", "at6 -2", ""
Item_02 = "Controlli sanitari", "at6 -4", ""
Item_03 = "Soggetti incompleti", "at6 -3", ""
Item_04 = "Tabelle", [AVIS_016]
[AVIS_016]
Caption = "Stampa di controllo tabelle"
Picture = <ba25.bmp>
Module = 0
Flags = ""
Item_01 = "Sezioni", "at6 -1", ""
Item_02 = "Medici", "at6 -0", ""
Item_03 = "Categorie non donatori", "ba3 -1 ctn", ""
Item_04 = "Gruppi aziendali", "ba3 -1 gaz", ""
Item_05 = "Localita' postali", "ba3 -1 lcp", ""
Item_06 = "Luoghi di lavoro", "ba3 -1 ldl", ""
[AVIS_007]
Caption = "Benemerenze"
Picture = <at02.bmp>
Module = 0
Flags = ""
Item_01 = "Proposta benemerenza singola", "at1 -0", ""
Item_02 = "Attribuzione complessiva", "at1 -1", ""
Item_03 = "Elenco ben. attribuite", "at1 -2", ""
Item_04 = "Elenco ben. per gruppo az.", "at1 -3", ""
Item_05 = "Stampa di controllo", "at1 -4", ""
[AVIS_008]
Caption = "Statistiche"
Picture = <at02.bmp>
Module = 0
Flags = ""
Item_01 = "Mensile donazioni per tipo", "at3 -3"
Item_02 = "Mensile donazioni per gruppo e rh", "at3 -1"
Item_03 = "Giornaliero donazioni per tipo", "at3 -4"
Item_04 = "Donazioni/donatori", "at3 -5"
Item_05 = "Soggetti per sesso, gruppo e rh", "at3 -6"
Item_06 = "Soggetti per sesso e eta'", "at3 -0"
Item_07 = "Soggetti per categoria", "at3 -2"
[AVIS_099]
Caption = "Manutenzione"
Picture = <ba04.bmp>
Module = 0
Flags = ""
Item_01 = "Archivi", "ba1", ""
Item_02 = "Utenti", "ba1 -3", ""
Item_03 = "Attivazione", "ba1 -4", ""
Item_04 = "Backup", "ba2 -1", ""