#include
#include
#include
#include
#include "lf.h"
#include "donaz.h"
#include "soggetti.h"
#include "sezioni.h"
#include "at6.h"
#include "at6500a.h"
//#define ALIAS_LDN 100
class TRiepilogoDonazioni : public TPrintapp
{
TRelation* _rel;
TMask* _msk;
int _cur;
TDate _dataini, _datafin;
TString16 _codsez, _codsot;
int _mese,_anno;
//bool _primedon;
TAssoc_array* _totali_mese;
TAssoc_array* _totali_anno;
TAssoc_array* _totali_sezione;
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter);
public:
void crea_intestazione();
void header_sezione(const TString16 codsez, const TString16 codsot);
TMask& app_mask() { return *_msk; }
TRiepilogoDonazioni() {}
};
HIDDEN inline TRiepilogoDonazioni& app() { return (TRiepilogoDonazioni&) main_app(); }
void TRiepilogoDonazioni::set_page(int file, int cnt)
{
}
bool TRiepilogoDonazioni::preprocess_page(int file, int counter)
{
TRectype& recsog = current_cursor()->curr(LF_SOGGETTI);
// salto pagina se cambio sezione
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez != codsez) || (_codsot != codsot))
{
if (_codsez != "**")
//printer().formfeed();
riepilogo_sezione();
_codsez = codsez;
_codsot = codsot;
_mese = -1;
_anno = -1;
header_sezione(codsez, codsot);
}
const TDate datadon = current_cursor()->curr().get(DON_DATADON);
const int mese = datadon.month();
const int anno = datadon.year();
if (_mese != mese)
{
if (_mese != -1)
riepilogo_mese();
_mese = mese;
}
if (_anno != anno)
{
if (_anno != -1)
riepilogo_anno();
_anno = anno;
}
const char* tipodon = current_cursor()->curr().get(DON_TIPODON);
if (_totali_mese.is_key(tipodon))
_totali_mese[tipodon]++;
else
_totali_mese.add(tipodon,1);
if (_totali_anno.is_key(tipodon))
_totali_anno[tipodon]++;
else
_totali_anno.add(tipodon,1);
return TRUE;
}
bool TRiepilogoDonazioni::set_print(int m)
{
KEY tasto;
tasto = _msk->run();
if (tasto == K_ENTER)
{
_dataini = _msk->get_date(F_DATAINI);
_datafin = _msk->get_date(F_DATAFIN);
//_primedon = _msk->get_bool(F_PRIMEDON);
TString80 chiave = "";
chiave = "90->CODSEZ|90->CODSOT|92->DATADON|";
// filtro per sezione/sottogruppo
TString80 filtro = "";
if
// 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 = add_cursor(new TSorted_cursor(_rel, (const char*) chiave, "", 2, &da, &a));
// manca il filtro da sez./sot. a sez./sot.
//current_cursor()->setfilter((const char*) filtro, TRUE);
_codsez = "**";
_codsot = "**";
_mese = -1;
_anno = -1;
reset_files();
add_file(LF_DONAZ);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TRiepilogoDonazioni::crea_intestazione()
{
reset_header();
TString sep(132);
sep = "RIEPILOGO DONAZIONI ";
if (_dataini.ok())
{
sep << " DAL ";
sep << _dataini.string();
}
if (_datafin.ok())
{
sep << " AL ";
sep << _datafin.string();
}
sep.center_just();
set_header(2, "@0g%s", (const char*) sep);
TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa);
sep = "";
sep << "Pag. @#";
set_header(2, "@120g%s", (const char*) sep);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
}
bool TRiepilogoDonazioni::user_create()
{
_rel = new TRelation(LF_DONAZ);
_rel->add(LF_SOGGETTI, "CODICE==CODICE");
//_rel->add("LDN", "CODTAB==LUOGODON",1,0,ALIAS_LDN);
_msk = new TMask("at6500a");
_totali_mese = new TAssoc_array();
_totali_anno = new TAssoc_array();
_totali_sezione = new TAssoc_array();
return TRUE;
}
bool TRiepilogoDonazioni::user_destroy()
{
delete _msk;
delete _rel;
delete _totali_mese;
delete _totali_anno;
delete _totali_sezione;
return TRUE;
}
int at6500(int argc, char* argv[])
{
TRiepilogoDonazioni a;
a.run(argc, argv, "Riepilogo donazioni");
return 0;
}