Aggiornamento versione al 4 febrraio 1998
git-svn-id: svn://10.65.10.50/trunk@6104 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
b02d763ad0
commit
edb0d968ed
51
at/at0100a.h
51
at/at0100a.h
@ -15,31 +15,32 @@
|
||||
#define F_DESC_CATDON 111
|
||||
#define F_DATAISC 112
|
||||
#define F_DATADIM 113
|
||||
#define F_DOM_INDIR 114
|
||||
#define F_DOM_CODCOM 115
|
||||
#define F_DOM_DENCOM 116
|
||||
#define F_DOM_CAPCOM 117
|
||||
#define F_DOM_PROVCOM 118
|
||||
#define F_DOM_CODLOC 119
|
||||
#define F_DOM_DENLOC 120
|
||||
#define F_DOM_STRADA 121
|
||||
#define F_DOM_DISTRI 122
|
||||
#define F_RES_INDIR 123
|
||||
#define F_RES_CODCOM 124
|
||||
#define F_RES_DENCOM 125
|
||||
#define F_RES_CAPCOM 126
|
||||
#define F_RES_PROVCOM 127
|
||||
#define F_RES_CODLOC 128
|
||||
#define F_RES_DENLOC 129
|
||||
#define F_COMNASC 130
|
||||
#define F_DENCOMNASC 131
|
||||
#define F_PROVCOMNASC 132
|
||||
#define F_SESSO 133
|
||||
#define F_CF 134
|
||||
#define F_DOCID 135
|
||||
#define F_TELABI 136
|
||||
#define F_TELLAV 137
|
||||
#define F_TELALT 138
|
||||
#define F_COGNOME_SP 114
|
||||
#define F_DOM_INDIR 115
|
||||
#define F_DOM_CODCOM 116
|
||||
#define F_DOM_DENCOM 117
|
||||
#define F_DOM_CAPCOM 118
|
||||
#define F_DOM_PROVCOM 119
|
||||
#define F_DOM_CODLOC 120
|
||||
#define F_DOM_DENLOC 121
|
||||
#define F_DOM_STRADA 122
|
||||
#define F_DOM_DISTRI 123
|
||||
#define F_RES_INDIR 124
|
||||
#define F_RES_CODCOM 125
|
||||
#define F_RES_DENCOM 126
|
||||
#define F_RES_CAPCOM 127
|
||||
#define F_RES_PROVCOM 128
|
||||
#define F_RES_CODLOC 129
|
||||
#define F_RES_DENLOC 130
|
||||
#define F_COMNASC 131
|
||||
#define F_DENCOMNASC 132
|
||||
#define F_PROVCOMNASC 133
|
||||
#define F_SESSO 134
|
||||
#define F_CF 135
|
||||
#define F_DOCID 136
|
||||
#define F_TELABI 137
|
||||
#define F_TELLAV 138
|
||||
#define F_TELALT 139
|
||||
|
||||
// pagina 2
|
||||
#define F_CATNOND1 201
|
||||
|
@ -132,7 +132,7 @@ BEGIN
|
||||
WARNING "Codice sezione assente"
|
||||
END
|
||||
|
||||
STRING F_DENSEZ 24
|
||||
STRING F_DENSEZ 30 24
|
||||
BEGIN
|
||||
PROMPT 12 6 ""
|
||||
MESSAGE COPY,14@
|
||||
@ -162,7 +162,7 @@ BEGIN
|
||||
WARNING "Codice sottogruppo assente"
|
||||
END
|
||||
|
||||
STRING F_DENSOT 24
|
||||
STRING F_DENSOT 30 24
|
||||
BEGIN
|
||||
PROMPT 50 6 ""
|
||||
MESSAGE COPY,16@
|
||||
@ -220,30 +220,36 @@ BEGIN
|
||||
PROMPT 1 9 "Dati anagrafici"
|
||||
END
|
||||
|
||||
STRING F_COGNOME_SP 25
|
||||
BEGIN
|
||||
PROMPT 2 10 "Cognome da sposata "
|
||||
FIELD COGNOME_SP
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 10 "Domicilio: "
|
||||
PROMPT 2 11 "Domicilio: "
|
||||
END
|
||||
|
||||
STRING F_DOM_INDIR 30
|
||||
BEGIN
|
||||
PROMPT 13 10 "Indirizzo "
|
||||
PROMPT 13 11 "Indirizzo "
|
||||
FIELD DOM_INDIR
|
||||
END
|
||||
|
||||
STRING F_DOM_STRADA 5
|
||||
BEGIN
|
||||
PROMPT 55 10 "St. "
|
||||
PROMPT 55 11 "St. "
|
||||
END
|
||||
|
||||
STRING F_DOM_DISTRI 4
|
||||
BEGIN
|
||||
PROMPT 66 10 "Dist. "
|
||||
PROMPT 66 11 "Dist. "
|
||||
END
|
||||
|
||||
STRING F_DOM_CODCOM 4
|
||||
BEGIN
|
||||
PROMPT 13 11 "Comune "
|
||||
PROMPT 13 12 "Comune "
|
||||
FIELD DOM_CODCOM
|
||||
FLAGS "U"
|
||||
USE LF_COMUNI
|
||||
@ -261,7 +267,7 @@ END
|
||||
|
||||
STRING F_DOM_DENCOM 50 30
|
||||
BEGIN
|
||||
PROMPT 30 11 ""
|
||||
PROMPT 30 12 ""
|
||||
USE LF_COMUNI KEY 2
|
||||
INPUT DENCOM F_DOM_DENCOM
|
||||
#include <comdden.h>
|
||||
@ -273,7 +279,7 @@ END
|
||||
|
||||
STRING F_DOM_CODLOC 4
|
||||
BEGIN
|
||||
PROMPT 13 12 "Localita' "
|
||||
PROMPT 13 13 "Localita' "
|
||||
FIELD DOM_CODLOC
|
||||
FLAGS "U"
|
||||
USE LCP SELECT S7=#F_DOM_CODCOM
|
||||
@ -292,7 +298,7 @@ END
|
||||
|
||||
STRING F_DOM_DENLOC 30
|
||||
BEGIN
|
||||
PROMPT 30 12 ""
|
||||
PROMPT 30 13 ""
|
||||
USE LCP KEY 2 SELECT S7=#F_DOM_CODCOM
|
||||
INPUT S0 F_DOM_DENLOC
|
||||
DISPLAY "Localita'@30" S0
|
||||
@ -306,31 +312,31 @@ END
|
||||
|
||||
STRING F_DOM_CAPCOM 5
|
||||
BEGIN
|
||||
PROMPT 66 11 "CAP "
|
||||
PROMPT 66 12 "CAP "
|
||||
FIELD DOM_CAP
|
||||
//FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_DOM_PROVCOM 5
|
||||
BEGIN
|
||||
PROMPT 66 12 "Prov."
|
||||
PROMPT 66 13 "Prov."
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 13 "Residenza: "
|
||||
PROMPT 2 14 "Residenza: "
|
||||
END
|
||||
|
||||
STRING F_RES_INDIR 30
|
||||
BEGIN
|
||||
PROMPT 13 13 "Indirizzo "
|
||||
PROMPT 13 14 "Indirizzo "
|
||||
FIELD RES_INDIR
|
||||
END
|
||||
|
||||
STRING F_RES_CODCOM 4
|
||||
BEGIN
|
||||
PROMPT 13 14 "Comune "
|
||||
PROMPT 13 15 "Comune "
|
||||
FIELD RES_CODCOM
|
||||
FLAGS "U"
|
||||
USE LF_COMUNI
|
||||
@ -348,7 +354,7 @@ END
|
||||
|
||||
STRING F_RES_DENCOM 50 30
|
||||
BEGIN
|
||||
PROMPT 30 14 ""
|
||||
PROMPT 30 15 ""
|
||||
USE LF_COMUNI KEY 2
|
||||
INPUT DENCOM F_RES_DENCOM
|
||||
#include <comdden.h>
|
||||
@ -360,7 +366,7 @@ END
|
||||
|
||||
STRING F_RES_CODLOC 4
|
||||
BEGIN
|
||||
PROMPT 13 15 "Localita' "
|
||||
PROMPT 13 16 "Localita' "
|
||||
FIELD RES_CODLOC
|
||||
FLAGS "U"
|
||||
USE LCP SELECT S7=#F_RES_CODLOC
|
||||
@ -379,7 +385,7 @@ END
|
||||
|
||||
STRING F_RES_DENLOC 30
|
||||
BEGIN
|
||||
PROMPT 30 15 ""
|
||||
PROMPT 30 16 ""
|
||||
USE LCP SELECT S7=#F_RES_CODLOC
|
||||
INPUT S0 F_RES_DENLOC
|
||||
DISPLAY "Localita'@30" S0
|
||||
@ -393,14 +399,14 @@ END
|
||||
|
||||
STRING F_RES_CAPCOM 5
|
||||
BEGIN
|
||||
PROMPT 66 14 "CAP "
|
||||
PROMPT 66 15 "CAP "
|
||||
FIELD RES_CAP
|
||||
//FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_RES_PROVCOM 5
|
||||
BEGIN
|
||||
PROMPT 66 15 "Prov."
|
||||
PROMPT 66 16 "Prov."
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
@ -803,7 +809,7 @@ LISTBOX F_KELL 4
|
||||
BEGIN
|
||||
PROMPT 54 13 "Kell "
|
||||
FIELD KELL
|
||||
FLAGS "U"
|
||||
//FLAGS "U"
|
||||
#include "skell.h"
|
||||
END
|
||||
|
||||
|
@ -125,7 +125,7 @@ BEGIN
|
||||
FLAGS "RG"
|
||||
USE LF_SOGGETTI KEY 1
|
||||
INPUT CODICE F_F_CODICE
|
||||
DISPLAY "Codice@6" CODICE
|
||||
DISPLAY "Codice@8" CODICE
|
||||
DISPLAY "Cognome@25" COGNOME
|
||||
DISPLAY "Nome@25" NOME
|
||||
DISPLAY "Nato il@10" DATANASC
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "soggetti.h"
|
||||
#include "donaz.h"
|
||||
#include "contsan.h"
|
||||
#include "idoneita.h"
|
||||
#include "rconvoc.h"
|
||||
|
||||
#include "atlib.h"
|
||||
@ -38,6 +39,7 @@ class TGiornalieroDC : public TApplication
|
||||
TLocalisamfile* _rconvoc;
|
||||
TRecord_array* _sdonazioni;
|
||||
TRecord_array* _scontrolli;
|
||||
TRecord_array* _sidoneita;
|
||||
// array dei soggetti inseriti per controllare doppio inserimento
|
||||
TAssoc_array* _asoggetti;
|
||||
bool _modified, _ricerca;
|
||||
@ -107,6 +109,7 @@ bool TGiornalieroDC::create()
|
||||
_rconvoc = new TLocalisamfile(LF_RCONVOC);
|
||||
_sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON);
|
||||
_scontrolli = new TRecord_array(LF_CONTSAN,CON_PROGCON);
|
||||
_sidoneita = new TRecord_array(LF_IDONEITA,IDO_PROGIDO);
|
||||
_asoggetti = new TAssoc_array();
|
||||
_msk->set_handler(F_INS_CONTROLLI,ins_controlli_handler);
|
||||
TSheet_field& ss = (TSheet_field&)_msk->field(F_SOGGETTI);
|
||||
@ -139,6 +142,7 @@ bool TGiornalieroDC::destroy()
|
||||
delete _rconvoc;
|
||||
delete _sdonazioni;
|
||||
delete _scontrolli;
|
||||
delete _sidoneita;
|
||||
delete _asoggetti;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
@ -369,7 +373,10 @@ int TGiornalieroDC::write(TSheet_field& s)
|
||||
if (!exist)
|
||||
{
|
||||
_scontrolli->write(TRUE);
|
||||
con_reord(sog.curr(),_scontrolli);
|
||||
TRectype* keyc = new TRectype(LF_IDONEITA);
|
||||
keyc->put(IDO_CODICE, row.get(0));
|
||||
int err = _sidoneita->read(keyc);
|
||||
con_reord(sog.curr(),_scontrolli,_sidoneita);
|
||||
}
|
||||
}
|
||||
_progins++;
|
||||
@ -650,6 +657,7 @@ bool TGiornalieroDC::soggetti_notify(TSheet_field& s, int r, KEY k)
|
||||
if (!row.empty_items())
|
||||
app()._modified = TRUE;
|
||||
const long codsog = row.get_long(0);
|
||||
const long etichetta = row.get_long(5);
|
||||
if (codsog != 0)
|
||||
for (int i=s.items()-1; i>=0; i--)
|
||||
{
|
||||
@ -658,6 +666,26 @@ bool TGiornalieroDC::soggetti_notify(TSheet_field& s, int r, KEY k)
|
||||
TToken_string& row = s.row(i);
|
||||
if (codsog == row.get_long(0))
|
||||
return s.sheet_mask().field(F_S_CODICE).error_box("Soggetto gia' inserito");
|
||||
else
|
||||
if (etichetta != 0)
|
||||
{
|
||||
if (etichetta == row.get_long(5))
|
||||
return s.sheet_mask().field(F_S_ETICHETTA).error_box("Etichetta sacca gia' inserita");
|
||||
else
|
||||
{
|
||||
TLocalisamfile donaz(LF_DONAZ);
|
||||
donaz.setkey(5);
|
||||
donaz.zero();
|
||||
donaz.put(DON_ETICHETTA, etichetta);
|
||||
for(donaz.read(); !donaz.eof(); donaz.next())
|
||||
{
|
||||
const long etic = donaz.get_long(DON_ETICHETTA);
|
||||
const TDate datadon = donaz.get_date(DON_DATADON);
|
||||
if (etichetta!=etic) break;
|
||||
if ((etichetta==etic) && (app()._datadon.year()==datadon.year())) return s.sheet_mask().field(F_S_ETICHETTA).error_box("Etichetta sacca gia' inserita");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "soggetti.h"
|
||||
#include "donaz.h"
|
||||
#include "contsan.h"
|
||||
#include "idoneita.h"
|
||||
|
||||
#include "atlib.h"
|
||||
|
||||
@ -36,6 +37,7 @@ class TGiornalieroC : public TApplication
|
||||
TLocalisamfile* _contsan;
|
||||
TRecord_array* _sdonazioni;
|
||||
TRecord_array* _scontrolli;
|
||||
TRecord_array* _sidoneita;
|
||||
TAssoc_array* _asoggetti; // array dei soggetti inseriti per controllare doppio ins.
|
||||
bool _modified;
|
||||
|
||||
@ -82,6 +84,7 @@ bool TGiornalieroC::create()
|
||||
_contsan = new TLocalisamfile(LF_CONTSAN);
|
||||
_sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON);
|
||||
_scontrolli = new TRecord_array(LF_CONTSAN,CON_PROGCON);
|
||||
_sidoneita = new TRecord_array(LF_IDONEITA,IDO_PROGIDO);
|
||||
_asoggetti = new TAssoc_array();
|
||||
|
||||
TSheet_field& ss = (TSheet_field&)_msk->field(F_SOGGETTI);
|
||||
@ -105,6 +108,7 @@ bool TGiornalieroC::destroy()
|
||||
delete _contsan;
|
||||
delete _sdonazioni;
|
||||
delete _scontrolli;
|
||||
delete _sidoneita;
|
||||
delete _asoggetti;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
@ -261,7 +265,10 @@ int TGiornalieroC::write(TSheet_field& s)
|
||||
}
|
||||
if (!exist)
|
||||
_scontrolli->write(TRUE);
|
||||
con_reord(sog.curr(), _scontrolli);
|
||||
TRectype* keyi = new TRectype(LF_IDONEITA);
|
||||
keyi->put(IDO_CODICE, row.get(0));
|
||||
err = _sidoneita->read(keyi);
|
||||
con_reord(sog.curr(),_scontrolli,_sidoneita);
|
||||
const TDate oggi(TODAY);
|
||||
sog.put(SOG_DATAULTAGG,oggi);
|
||||
sog.put(SOG_UTENULTAGG,user());
|
||||
|
154
at/at0400.cpp
154
at/at0400.cpp
@ -59,7 +59,13 @@ protected:
|
||||
virtual bool changing_mask(int mode) { return FALSE; }
|
||||
virtual TMask* get_mask( int mode = 0) { return _msk; }
|
||||
virtual TRelation* get_relation() const { return _rel; }
|
||||
|
||||
virtual void init_query_insert_mode(TMask& m);
|
||||
virtual void init_query_mode(TMask& m) { init_query_insert_mode(m);};
|
||||
virtual void init_modify_mode(TMask& m);
|
||||
virtual void init_insert_mode(TMask& m) { init_modify_mode(m); }
|
||||
|
||||
static bool nome_handler(TMask_field& f, KEY k);
|
||||
static bool codice_handler(TMask_field& f, KEY k);
|
||||
static bool convocati_notify(TSheet_field& s, int r, KEY k);
|
||||
static bool esegui_handler(TMask_field& f, KEY k);
|
||||
static bool data_handler(TMask_field&f, KEY k);
|
||||
@ -74,6 +80,19 @@ public:
|
||||
|
||||
HIDDEN inline TGestioneConvocazioni& app() { return (TGestioneConvocazioni&) main_app(); }
|
||||
|
||||
void TGestioneConvocazioni::init_query_insert_mode(TMask& m)
|
||||
{
|
||||
disable_menu_item(M_FILE_NEW);
|
||||
m.hide(-1);
|
||||
m.show(-2);
|
||||
}
|
||||
|
||||
void TGestioneConvocazioni::init_modify_mode(TMask& m)
|
||||
{
|
||||
m.show(-1);
|
||||
m.hide(-2);
|
||||
}
|
||||
|
||||
bool TGestioneConvocazioni::filter_func_convoc(const TRelation* rel)
|
||||
{
|
||||
bool filtrato = FALSE;
|
||||
@ -390,7 +409,51 @@ bool TGestioneConvocazioni::esegui_handler(TMask_field& f, KEY k)
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TGestioneConvocazioni::nome_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
if (f.to_check(k))
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
long codsog = m.get_long(F_S_CODICE);
|
||||
if (codsog == 0)
|
||||
f.on_key(K_F9);
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool TGestioneConvocazioni::codice_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
if (f.to_check(k))
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
long codsog = m.get_long(F_S_CODICE);
|
||||
if (codsog != 0)
|
||||
{
|
||||
TLocalisamfile sog(LF_SOGGETTI); ;
|
||||
sog.setkey(1);
|
||||
sog.zero();
|
||||
sog.put(SOG_CODICE, codsog);
|
||||
int err = sog.read();
|
||||
if (err == NOERR)
|
||||
{
|
||||
m.set(F_S_COGNOME, sog.get(SOG_COGNOME));
|
||||
m.set(F_S_NOME, sog.get(SOG_NOME));
|
||||
m.set(F_S_DATANASC, sog.get(SOG_DATANASC));
|
||||
m.set(F_S_TESSAVIS, sog.get(SOG_TESSAVIS));
|
||||
m.set(F_S_CODSEZ, sog.get(SOG_CODSEZ));
|
||||
m.set(F_S_CODSOT, sog.get(SOG_CODSOT));
|
||||
m.set(F_S_CATDON, sog.get(SOG_CATDON));
|
||||
}
|
||||
else
|
||||
ok = FALSE; // codice non esistente
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool TGestioneConvocazioni::user_create()
|
||||
{
|
||||
_msk = new TMask("at0400a");
|
||||
@ -411,6 +474,9 @@ bool TGestioneConvocazioni::user_create()
|
||||
_msk->set_handler(F_CODSOT,sezione_handler);
|
||||
TSheet_field& sc = (TSheet_field&)_msk->field(F_CONVOCATI);
|
||||
sc.set_notify(convocati_notify);
|
||||
sc.sheet_mask().set_handler(F_S_NOME,nome_handler);
|
||||
sc.sheet_mask().set_handler(F_S_CODICE,codice_handler);
|
||||
|
||||
_rel->lfile().last();
|
||||
_lastcod = _rel->lfile().get_long(COV_NUMERO);
|
||||
enable_menu_item(M_FILE_PRINT);
|
||||
@ -441,6 +507,40 @@ bool TGestioneConvocazioni::remove()
|
||||
// cancella testata convocazione
|
||||
bool ok = TRUE;
|
||||
// cancella convocati
|
||||
// prima cancella dall'archivio soggetti la data ultima convocazione
|
||||
TLocalisamfile soggetti(LF_SOGGETTI);
|
||||
TLocalisamfile rconvoc(LF_RCONVOC);
|
||||
rconvoc.setkey(3);
|
||||
for (int r=1; r<=_sconvocati->rows(); r++)
|
||||
{
|
||||
const TRectype& riga = _sconvocati->row(r);
|
||||
const long codice = riga.get_long(RCV_CODICE);
|
||||
const TDate dataconv = riga.get_date(RCV_DATACONV);
|
||||
soggetti.put(SOG_CODICE,codice);
|
||||
if (soggetti.read() == NOERR)
|
||||
{
|
||||
int numconv = soggetti.get_int(SOG_NUMCONV);
|
||||
if (numconv > 0)
|
||||
{
|
||||
numconv--;
|
||||
soggetti.put(SOG_NUMCONV,numconv);
|
||||
TDate dataprec(NULLDATE);
|
||||
rconvoc.put(RCV_CODICE,codice);
|
||||
rconvoc.put(RCV_DATACONV,dataconv);
|
||||
if (rconvoc.read() == NOERR)
|
||||
{
|
||||
--rconvoc;
|
||||
const long codprec = rconvoc.get_long(RCV_CODICE);
|
||||
if (codprec == codice)
|
||||
soggetti.put(SOG_DATACONV, rconvoc.get(RCV_DATACONV));
|
||||
}
|
||||
soggetti.put(SOG_DATACONV,dataprec);
|
||||
}
|
||||
else
|
||||
soggetti.put(SOG_DATACONV, NULLDATE);
|
||||
soggetti.rewrite();
|
||||
}
|
||||
}
|
||||
int err = _sconvocati->remove();
|
||||
if (err == _iseof || err == _isemptyfile)
|
||||
err = NOERR;
|
||||
@ -539,20 +639,20 @@ int TGestioneConvocazioni::scrivi(const TMask& m, bool ri)
|
||||
rec.put(RCV_CHIAMATA,chiamata);
|
||||
rec.put(RCV_STAMPATO,row.get(5));
|
||||
rec.put(RCV_ANNULLATO,row.get(6));
|
||||
if (!ri)
|
||||
//if (!ri)
|
||||
//{
|
||||
// aggiornamento archivio soggetti
|
||||
soggetti.put(SOG_CODICE,codice);
|
||||
if (soggetti.read() == NOERR)
|
||||
{
|
||||
// aggiornamento archivio soggetti
|
||||
soggetti.put(SOG_CODICE,codice);
|
||||
if (soggetti.read() == NOERR)
|
||||
{
|
||||
if (chiamata == 'S')
|
||||
soggetti.put(SOG_DATAULTSOL,dataconv);
|
||||
soggetti.put(SOG_DATACONV,dataconv);
|
||||
int numconv = soggetti.get_int(SOG_NUMCONV);
|
||||
soggetti.put(SOG_NUMCONV,numconv+1);
|
||||
soggetti.rewrite();
|
||||
}
|
||||
}
|
||||
if (chiamata == 'S')
|
||||
soggetti.put(SOG_DATAULTSOL,dataconv);
|
||||
soggetti.put(SOG_DATACONV,dataconv);
|
||||
int numconv = soggetti.get_int(SOG_NUMCONV);
|
||||
soggetti.put(SOG_NUMCONV,numconv+1);
|
||||
soggetti.rewrite();
|
||||
}
|
||||
//}
|
||||
}
|
||||
err = ri ? _sconvocati->rewrite() : _sconvocati->write();
|
||||
}
|
||||
@ -570,6 +670,30 @@ bool TGestioneConvocazioni::convocati_notify(TSheet_field& s, int r, KEY k)
|
||||
s.mask().set(F_NUMCONV,numconv-1);
|
||||
}
|
||||
break;
|
||||
case K_CTRL+K_TAB:
|
||||
// uscita riga
|
||||
{
|
||||
TToken_string& row = s.row(r);
|
||||
const long codsog = row.get_long(0);
|
||||
if (codsog != 0)
|
||||
for (int i=s.items()-1; i>=0; i--)
|
||||
{
|
||||
if (i != r)
|
||||
{
|
||||
TToken_string& row = s.row(i);
|
||||
if (codsog == row.get_long(0))
|
||||
return s.sheet_mask().field(F_S_CODICE).error_box("Soggetto gia' inserito");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const char* cognome = row.get(1);
|
||||
if ((cognome != NULL) && (cognome != "\0"))
|
||||
s.sheet_mask().field(F_S_NOME).set_focusdirty();
|
||||
//s.set_focus_cell(r,2);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case K_CTRL+K_INS:
|
||||
{
|
||||
int numconv = s.mask().get_int(F_NUMCONV);
|
||||
@ -577,7 +701,7 @@ bool TGestioneConvocazioni::convocati_notify(TSheet_field& s, int r, KEY k)
|
||||
}
|
||||
break;
|
||||
case K_INS:
|
||||
result = FALSE;
|
||||
//result = FALSE;
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
|
@ -21,6 +21,8 @@
|
||||
#define F_NUMSOLL 118
|
||||
#define F_NUMRIT 119
|
||||
#define F_CONVOCATI 120
|
||||
#define F_CODSEZH 151
|
||||
#define F_CODSOTH 152
|
||||
|
||||
#define F_ESEGUI 140
|
||||
|
||||
@ -35,5 +37,9 @@
|
||||
#define F_S_DATANASC 108
|
||||
#define F_S_CATDON 109
|
||||
#define F_S_TESSAVIS 110
|
||||
#define F_S_CODSEZ 111
|
||||
#define F_S_CODSOT 112
|
||||
|
||||
#define F_S_DESC_CATDON 151
|
||||
#define F_S_DENSEZ 151
|
||||
#define F_S_DENSOT 152
|
||||
#define F_S_DESC_CATDON 153
|
||||
|
132
at/at0400a.uml
132
at/at0400a.uml
@ -168,6 +168,30 @@ BEGIN
|
||||
CHECKTYPE SEARCH
|
||||
HELP "Codice sezione da convocare"
|
||||
ADD MASK batbsez
|
||||
MESSAGE COPY,F_CODSEZH
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
STRING F_CODSEZH 2
|
||||
BEGIN
|
||||
PROMPT 2 5 "Sezione "
|
||||
FIELD CODSEZ
|
||||
FLAGS "U"
|
||||
USE LF_CONVOC KEY 3
|
||||
INPUT CODSEZ F_CODSEZ
|
||||
INPUT CODSOT F_CODSOT
|
||||
DISPLAY "Cod.sez" CODSEZ
|
||||
DISPLAY "Cod.sot." CODSOT
|
||||
DISPLAY "Data@10" DATA
|
||||
DISPLAY "Punto" PUNTO
|
||||
OUTPUT F_NUMERO NUMERO
|
||||
OUTPUT F_CODSEZ CODSEZ
|
||||
OUTPUT F_CODSOT CODSOT
|
||||
OUTPUT F_DATA DATA
|
||||
OUTPUT F_PUNTO PUNTO
|
||||
CHECKTYPE NORMAL
|
||||
GROUP 2
|
||||
MESSAGE COPY,F_CODSEZH
|
||||
END
|
||||
|
||||
STRING F_DENSEZ 25
|
||||
@ -194,6 +218,19 @@ BEGIN
|
||||
CHECKTYPE NORMAL
|
||||
HELP "Codice sottogruppo da convocare"
|
||||
ADD MASK batbsez
|
||||
GROUP 1
|
||||
MESSAGE COPY,F_CODSOTH
|
||||
END
|
||||
|
||||
STRING F_CODSOTH 2
|
||||
BEGIN
|
||||
PROMPT 2 6 "Sottogruppo "
|
||||
FIELD CODSOT
|
||||
FLAGS "U"
|
||||
COPY ALL F_CODSEZH
|
||||
CHECKTYPE NORMAL
|
||||
GROUP 2
|
||||
MESSAGE COPY,F_CODSOTH
|
||||
END
|
||||
|
||||
STRING F_DENSOT 25
|
||||
@ -273,7 +310,7 @@ PAGE "Soggetti" -1 -1 78 20
|
||||
SPREADSHEET F_CONVOCATI
|
||||
BEGIN
|
||||
PROMPT 1 1 "Convocati"
|
||||
ITEM "Codice@6"
|
||||
ITEM "Codice@10"
|
||||
ITEM "Cognome@25"
|
||||
ITEM "Nome@25"
|
||||
ITEM "Data conv."
|
||||
@ -283,6 +320,8 @@ BEGIN
|
||||
ITEM "Nato il@10"
|
||||
ITEM "Cat."
|
||||
ITEM "Tessera"
|
||||
ITEM "Se"
|
||||
ITEM "So"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
@ -291,9 +330,9 @@ ENDMASK
|
||||
|
||||
PAGE "Soggetto " -1 -1 78 20
|
||||
|
||||
GROUPBOX DLG_NULL 77 5
|
||||
GROUPBOX DLG_NULL 77 6
|
||||
BEGIN
|
||||
PROMPT 1 0 ""
|
||||
PROMPT 1 0 "Dati identificativi soggetto"
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
@ -317,7 +356,9 @@ BEGIN
|
||||
OUTPUT F_S_DATANASC DATANASC
|
||||
OUTPUT F_S_CATDON CATDON
|
||||
OUTPUT F_S_TESSAVIS TESSAVIS
|
||||
CHECKTYPE NORMAL
|
||||
OUTPUT F_S_CODSEZ CODSEZ
|
||||
OUTPUT F_S_CODSOT CODSOT
|
||||
//CHECKTYPE NORMAL
|
||||
ADD RUN at0 -0
|
||||
END
|
||||
|
||||
@ -336,7 +377,7 @@ BEGIN
|
||||
DISPLAY "C." CATDON
|
||||
DISPLAY "Tessera" TESSAVIS
|
||||
COPY OUTPUT F_S_CODICE
|
||||
CHECKTYPE SEARCH
|
||||
//CHECKTYPE SEARCH
|
||||
HELP "Cognome del soggetto"
|
||||
ADD RUN at0 -0
|
||||
END
|
||||
@ -344,31 +385,51 @@ END
|
||||
STRING F_S_NOME 25
|
||||
BEGIN
|
||||
PROMPT 46 2 ""
|
||||
COPY ALL F_S_COGNOME
|
||||
USE LF_SOGGETTI KEY 2
|
||||
INPUT COGNOME F_S_COGNOME
|
||||
INPUT NOME F_S_NOME
|
||||
DISPLAY "Cognome@25" COGNOME
|
||||
DISPLAY "Nome@25" NOME
|
||||
DISPLAY "Nato il@10" DATANASC
|
||||
DISPLAY "Codice@8" CODICE
|
||||
DISPLAY "Sez." CODSEZ
|
||||
DISPLAY "Sot." CODSOT
|
||||
DISPLAY "C." CATDON
|
||||
DISPLAY "Tessera" TESSAVIS
|
||||
COPY OUTPUT F_S_CODICE
|
||||
CHECKTYPE SEARCH
|
||||
HELP "Nome del soggetto"
|
||||
// CHECKTYPE NORMAL
|
||||
ADD RUN at0 -0
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 77 5
|
||||
BEGIN
|
||||
PROMPT 1 7 "Dati convocazione"
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
DATE F_S_DATACONV
|
||||
BEGIN
|
||||
PROMPT 2 5 "Convocato il "
|
||||
PROMPT 2 8 "Convocato il "
|
||||
END
|
||||
|
||||
STRING F_S_CHIAMATA 1
|
||||
LISTBOX F_S_CHIAMATA 15
|
||||
BEGIN
|
||||
PROMPT 30 5 "Chiamata "
|
||||
PROMPT 30 8 "Tipo convocazione "
|
||||
FLAGS "U"
|
||||
ITEM "C|Convocato"
|
||||
ITEM "S|Sollecitato"
|
||||
ITEM "R|Ritardatario"
|
||||
END
|
||||
|
||||
BOOLEAN F_S_STAMPATO
|
||||
BEGIN
|
||||
PROMPT 2 6 "Convocazione stampata"
|
||||
PROMPT 2 9 "Convocazione stampata"
|
||||
END
|
||||
|
||||
BOOLEAN F_S_ANNULLATO
|
||||
BEGIN
|
||||
PROMPT 2 7 "Convocazione annullata"
|
||||
PROMPT 2 10 "Convocazione annullata"
|
||||
END
|
||||
|
||||
DATE F_S_DATANASC
|
||||
@ -379,26 +440,57 @@ END
|
||||
|
||||
STRING F_S_CATDON 2
|
||||
BEGIN
|
||||
PROMPT 2 8 "Cat. "
|
||||
PROMPT 60 3 "Categoria "
|
||||
FLAGS "D"
|
||||
USE CTD
|
||||
INPUT CODTAB F_S_CATDON
|
||||
OUTPUT F_S_DESC_CATDON S0
|
||||
CHECKTYPE NORMAL
|
||||
//USE CTD
|
||||
//INPUT CODTAB F_S_CATDON
|
||||
//OUTPUT F_S_DESC_CATDON S0
|
||||
//CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_S_TESSAVIS 10
|
||||
BEGIN
|
||||
PROMPT 52 8 "Tessera AVIS "
|
||||
PROMPT 33 3 "Tessera AVIS "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_S_DESC_CATDON 25
|
||||
STRING F_S_CODSEZ 2
|
||||
BEGIN
|
||||
PROMPT 12 8 ""
|
||||
PROMPT 2 4 "Sez./Sottog. "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_S_CODSOT 2
|
||||
BEGIN
|
||||
PROMPT 46 4 ""
|
||||
FLAGS "D"
|
||||
USE LF_SEZIONI
|
||||
INPUT CODSEZ F_S_CODSEZ
|
||||
INPUT CODSOT F_S_CODSOT
|
||||
OUTPUT F_S_DENSEZ DENSEZ
|
||||
OUTPUT F_S_DENSOT DENSOT
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_S_DENSOT 25 23
|
||||
BEGIN
|
||||
PROMPT 49 4 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_S_DENSEZ 25 23
|
||||
BEGIN
|
||||
PROMPT 20 4 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
|
||||
//STRING F_S_DESC_CATDON 25
|
||||
//BEGIN
|
||||
// PROMPT 12 8 ""
|
||||
// FLAGS "D"
|
||||
//END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
|
@ -23,8 +23,10 @@ class TSpostamentoConv : public TPrintapp
|
||||
TString16 _punto,_tipo, _sezione, _sottog;
|
||||
TString16 _codsez, _codsot;
|
||||
int _quanti; // numero di convocazioni per giorni
|
||||
int _spostati; // contatore dei soggetti spostati
|
||||
int _spostati; // contatore dei soggetti spostati per giorno
|
||||
int _contatore;
|
||||
TDate _data; // data a cui spostare
|
||||
bool _stampa;
|
||||
//static bool filter_func_stconvoc(const TRelation* rel);
|
||||
|
||||
protected:
|
||||
@ -33,6 +35,7 @@ protected:
|
||||
virtual bool set_print(int m);
|
||||
virtual void set_page(int file, int cnt);
|
||||
virtual bool preprocess_page(int file, int counter);
|
||||
virtual print_action postprocess_print(int file, int counter);
|
||||
|
||||
public:
|
||||
TMask& app_mask() { return *_msk; }
|
||||
@ -56,9 +59,17 @@ void TSpostamentoConv::set_page(int file, int cnt)
|
||||
set_row(3, "");
|
||||
}
|
||||
|
||||
print_action TSpostamentoConv::postprocess_print(int file, int counter)
|
||||
{
|
||||
if (_contatore > 0)
|
||||
_msk->set(F_SPOSTATI,_contatore);
|
||||
return NEXT_PAGE;
|
||||
}
|
||||
|
||||
bool TSpostamentoConv::preprocess_page(int file, int counter)
|
||||
{
|
||||
TDate& data = app()._data;
|
||||
app()._contatore++;
|
||||
app()._spostati++;
|
||||
if (app()._spostati > app()._quanti)
|
||||
{
|
||||
@ -73,14 +84,17 @@ bool TSpostamentoConv::preprocess_page(int file, int counter)
|
||||
current_cursor()->file().setkey(2);
|
||||
current_cursor()->curr(LF_SOGGETTI).put(SOG_DATACONV,data);
|
||||
current_cursor()->file(LF_SOGGETTI).rewrite();
|
||||
return TRUE;
|
||||
return app()._stampa;
|
||||
}
|
||||
|
||||
bool TSpostamentoConv::set_print(int m)
|
||||
{
|
||||
_stampa = FALSE;
|
||||
KEY tasto;
|
||||
tasto = _msk->run();
|
||||
if (tasto == K_ENTER)
|
||||
if (tasto == F_STAMPA)
|
||||
_stampa = TRUE;
|
||||
if (tasto != K_QUIT)
|
||||
{
|
||||
_dataini = _msk->get(F_DATAINI);
|
||||
_datafin = _msk->get(F_DATAFIN);
|
||||
@ -89,7 +103,8 @@ bool TSpostamentoConv::set_print(int m)
|
||||
_codsez = _msk->get(F_CODSEZ);
|
||||
_codsot = _msk->get(F_CODSOT);
|
||||
_spostadal = _msk->get(F_SPOSTADAL);
|
||||
_spostaal = _msk->get(F_SPOSTAAL);
|
||||
_spostaal = _msk->get(F_SPOSTAAL);
|
||||
_contatore = 1;
|
||||
TString80 filtro = "";
|
||||
// filtro per punto di prelievo
|
||||
if (_punto.not_empty())
|
||||
|
@ -14,3 +14,4 @@
|
||||
#define F_SPOSTADAL 111
|
||||
#define F_SPOSTAAL 112
|
||||
#define F_SPOSTATI 113
|
||||
#define F_STAMPA 201
|
||||
|
@ -1,5 +1,26 @@
|
||||
#include "at0500a.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
BUTTON F_STAMPA 9 2
|
||||
BEGIN
|
||||
PROMPT -13 -11 "~Stampa"
|
||||
MESSAGE EXIT,F_STAMPA
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -23 -11 ""
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -33 -11 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Spostamento convocazioni" -1 -1 78 20
|
||||
|
||||
GROUPBOX DLG_NULL 77 8
|
||||
@ -135,15 +156,5 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 16 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 16 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
@ -55,7 +55,7 @@ public:
|
||||
void header_sezione(const TString16 codsez, const TString16 codsot);
|
||||
void footer_sezione();
|
||||
void fine_stampa();
|
||||
TSbloccoSospesi() : _data_sblocco(TODAY), _data_stampa(TODAY), _tiposo(""), _cognome_nome("",25), _operazione("",25) {}
|
||||
TSbloccoSospesi() : _data_sblocco(TODAY), _data_stampa(TODAY), _tiposo(""), _cognome_nome("",25), _operazione("",40) {}
|
||||
};
|
||||
|
||||
HIDDEN inline TSbloccoSospesi& app() { return (TSbloccoSospesi&) main_app(); }
|
||||
@ -122,6 +122,7 @@ bool TSbloccoSospesi::preprocess_page(int file, int counter)
|
||||
_cognome_nome = nome;
|
||||
|
||||
const TString16 stato = recsog.get(SOG_STATO);
|
||||
const TString16 pros_stato = recsog.get(SOG_PROS_STATO);
|
||||
const TString16 statosi = recsog.get(SOG_STATOSI);
|
||||
const TString16 statoaf = recsog.get(SOG_STATOAF);
|
||||
const TDate datafine = recsog.get_date(SOG_DATA_PROS);
|
||||
@ -133,17 +134,38 @@ bool TSbloccoSospesi::preprocess_page(int file, int counter)
|
||||
datafineaf = recsog.get_date(SOG_FINESOSAF);
|
||||
TString80 operazione = "";
|
||||
|
||||
if (stato == "SO" && datafine.ok() && datafine <= app()._data_sblocco)
|
||||
if (stato=="SO" && pros_stato==FINE_SOSPENSIONE && datafine.ok() && datafine<=app()._data_sblocco)
|
||||
{
|
||||
const TDate datastato = recsog.get_date(SOG_DATASTATO);
|
||||
operazione << datastato.string();
|
||||
operazione << " ";
|
||||
operazione << datafine.string();
|
||||
operazione << " ";
|
||||
operazione << "-- -- -- SO FS";
|
||||
}
|
||||
else
|
||||
if (statosi == "SO" && datafinesi.ok() && datafinesi <= app()._data_sblocco)
|
||||
{
|
||||
const TDate datastato = recsog.get_date(SOG_DATASI);
|
||||
operazione << datastato.string();
|
||||
operazione << " ";
|
||||
operazione << datafinesi.string();
|
||||
operazione << " ";
|
||||
operazione << "SI SO ID";
|
||||
}
|
||||
else
|
||||
if (statoaf == "SO" && datafineaf.ok() && datafineaf <= app()._data_sblocco)
|
||||
{
|
||||
const TDate datastato = recsog.get_date(SOG_DATAAF);
|
||||
operazione << datastato.string();
|
||||
operazione << " ";
|
||||
operazione << datafineaf.string();
|
||||
operazione << " ";
|
||||
operazione << "AF SO ID";
|
||||
}
|
||||
_operazione = operazione;
|
||||
if (_definitiva)
|
||||
{
|
||||
{
|
||||
if (stato == "SO" && datafine.ok() && datafine <= app()._data_sblocco)
|
||||
{
|
||||
TRectype* key = new TRectype(LF_CONTSAN);
|
||||
@ -159,7 +181,7 @@ bool TSbloccoSospesi::preprocess_page(int file, int counter)
|
||||
reccon.put(CON_TIPOCON, FINE_SOSPENSIONE);
|
||||
_scontrolli->add_row(reccon);
|
||||
_scontrolli->rewrite();
|
||||
con_reord(recsog, _scontrolli);
|
||||
//con_reord(recsog, _scontrolli);
|
||||
current_cursor()->file().rewrite();
|
||||
}
|
||||
if ((statosi == "SO" && datafinesi.ok() && datafinesi <= app()._data_sblocco) || (statoaf == "SO" && datafineaf.ok() && datafineaf <= app()._data_sblocco))
|
||||
@ -167,9 +189,10 @@ bool TSbloccoSospesi::preprocess_page(int file, int counter)
|
||||
TRectype* key = new TRectype(LF_IDONEITA);
|
||||
long codice = recsog.get_long(SOG_CODICE);
|
||||
key->put(IDO_CODICE, codice);
|
||||
int err = _sidoneita->read(key);
|
||||
if (statosi == "SO" && datafinesi.ok() && datafinesi <= app()._data_sblocco)
|
||||
{
|
||||
int err = _sidoneita->read(key);
|
||||
//int err = _sidoneita->read(key);
|
||||
int progido = _sidoneita->rows()+1;
|
||||
TRectype& recido = _idoneita->curr();
|
||||
recido.zero();
|
||||
@ -184,7 +207,7 @@ bool TSbloccoSospesi::preprocess_page(int file, int counter)
|
||||
}
|
||||
if (statoaf == "SO" && datafineaf.ok() && datafineaf <= app()._data_sblocco)
|
||||
{
|
||||
int err = _sidoneita->read(key);
|
||||
//int err = _sidoneita->read(key);
|
||||
int progido = _sidoneita->rows()+1;
|
||||
TRectype& recido = _idoneita->curr();
|
||||
recido.zero();
|
||||
@ -197,7 +220,7 @@ bool TSbloccoSospesi::preprocess_page(int file, int counter)
|
||||
_sidoneita->add_row(recido);
|
||||
_sidoneita->rewrite();
|
||||
}
|
||||
ido_reord(recsog, _sidoneita);
|
||||
//ido_reord(recsog, _sidoneita);
|
||||
current_cursor()->file().rewrite();
|
||||
}
|
||||
}
|
||||
@ -225,9 +248,10 @@ void TSbloccoSospesi::set_page(int file, int cnt)
|
||||
set_row(1,"@12g#a", &_cognome_nome);
|
||||
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS));
|
||||
set_row(1,"@57g@ld", FLD(LF_SOGGETTI,SOG_DATASTATO));
|
||||
set_row(1,"@68g@ld", FLD(LF_SOGGETTI,SOG_DATA_PROS));
|
||||
set_row(1,"@79g#a", &_operazione);
|
||||
//set_row(1,"@57g@ld", FLD(LF_SOGGETTI,SOG_DATASTATO));
|
||||
//set_row(1,"@68g@ld", FLD(LF_SOGGETTI,SOG_DATA_PROS));
|
||||
//set_row(1,"@79g#a", &_operazione);
|
||||
set_row(1,"@57g#a", &_operazione);
|
||||
}
|
||||
|
||||
bool TSbloccoSospesi::filter_func_sbloccosospesi(const TRelation* rel)
|
||||
@ -235,9 +259,13 @@ bool TSbloccoSospesi::filter_func_sbloccosospesi(const TRelation* rel)
|
||||
bool filtrato = FALSE;
|
||||
TRectype& recsog = rel->lfile().curr();
|
||||
const TString16 stato = recsog.get(SOG_STATO);
|
||||
const TString16 statopros = recsog.get(SOG_PROS_STATO);
|
||||
const TString16 statosi = recsog.get(SOG_STATOSI);
|
||||
const TString16 statoaf = recsog.get(SOG_STATOAF);
|
||||
const TDate datafine = recsog.get_date(SOG_DATA_PROS);
|
||||
|
||||
TDate datafine(NULLDATE);
|
||||
if (statopros == "FS")
|
||||
datafine = recsog.get_date(SOG_DATA_PROS);
|
||||
TDate datafinesi(NULLDATE);
|
||||
TDate datafineaf(NULLDATE);
|
||||
if (statosi == "SO")
|
||||
|
@ -99,7 +99,7 @@ bool TModificaIntervalli::preprocess_page(int file, int counter)
|
||||
reccon.put(CON_INTAF, recsog.get_int(SOG_INTAF));
|
||||
_scontrolli->add_row(reccon);
|
||||
_scontrolli->rewrite();
|
||||
con_reord(recsog, _scontrolli);
|
||||
//con_reord(recsog, _scontrolli);
|
||||
current_cursor()->file().rewrite();
|
||||
|
||||
// salto pagina se cambio sezione
|
||||
|
@ -303,6 +303,7 @@ bool TStampaDonBen::set_print(int m)
|
||||
// filtro per sezioni selezionati
|
||||
filtra_sezioni();
|
||||
// filtro per categorie
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
|
310
at/at1200.cpp
310
at/at1200.cpp
@ -1,6 +1,8 @@
|
||||
#include <form.h>
|
||||
#include <mask.h>
|
||||
#include <prefix.h>
|
||||
#include <printapp.h>
|
||||
#include <progind.h>
|
||||
#include <recarray.h>
|
||||
#include <tabutil.h>
|
||||
#include <utility.h>
|
||||
@ -15,6 +17,8 @@
|
||||
#include "donaz.h"
|
||||
#include "benem.h"
|
||||
#include "sezioni.h"
|
||||
#include "atopera.h"
|
||||
#include "atropera.h"
|
||||
|
||||
#define ALIAS_GAZ 300
|
||||
|
||||
@ -24,22 +28,20 @@ class TAttribuzioneBenemerenze : public TPrintapp
|
||||
TRelation* _rel;
|
||||
TLocalisamfile* _donaz;
|
||||
TLocalisamfile* _benem;
|
||||
TLocalisamfile* _atopera;
|
||||
TLocalisamfile* _atropera;
|
||||
TLocalisamfile* _sezioni;
|
||||
TRecord_array* _sdonazioni;
|
||||
TRecord_array* _sbenemerenze;
|
||||
TCursor* _cur;
|
||||
TAssoc_array _catdon;
|
||||
TString16 _gruppoazie, _gruppoold;
|
||||
TAssoc_array _tabben;
|
||||
TString16 _gruppoazie, _oldben;
|
||||
TDate _dataela, _datapre;
|
||||
bool _anchegruppi;
|
||||
TString16 _tipoben; // tipo benemerenza da assegnare
|
||||
bool _definitiva;
|
||||
int _numdon; // numero donazioni necessarie
|
||||
TDate _data_stampa;
|
||||
TString16 _codsez, _codsot;
|
||||
TParagraph_string _cognome_nome;
|
||||
int _contatore;
|
||||
|
||||
static bool filter_func_attriben(const TRelation* rel);
|
||||
|
||||
protected:
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
@ -49,81 +51,57 @@ protected:
|
||||
|
||||
public:
|
||||
void crea_intestazione();
|
||||
void header_sezione(const TString16 codsez, const TString16 codsot);
|
||||
TAttribuzioneBenemerenze() : _data_stampa(TODAY), _cognome_nome("",25) {}
|
||||
void header_ben(const TString16 tipoben);
|
||||
TAttribuzioneBenemerenze() : _cognome_nome("",25) {}
|
||||
};
|
||||
|
||||
HIDDEN inline TAttribuzioneBenemerenze& app() { return (TAttribuzioneBenemerenze&) main_app(); }
|
||||
|
||||
bool TAttribuzioneBenemerenze::preprocess_page(int file, int counter)
|
||||
{
|
||||
TRectype& recsez = current_cursor()->curr(LF_SEZIONI);
|
||||
TRectype& recsog = current_cursor()->curr();
|
||||
TLocalisamfile& filesog = current_cursor()->file();
|
||||
|
||||
|
||||
TRectype& recsog = current_cursor()->curr(LF_SOGGETTI);
|
||||
TString80 nome = recsog.get(SOG_COGNOME);
|
||||
nome << " ";
|
||||
nome << recsog.get(SOG_NOME);
|
||||
_cognome_nome = nome;
|
||||
|
||||
const int totdon = recsog.get_int(SOG_TOTDON);
|
||||
// salto pagina se cambio sezione
|
||||
const TString16 codsez = recsog.get(SOG_CODSEZ);
|
||||
const TString16 codsot = recsog.get(SOG_CODSOT);
|
||||
if ((_codsez!=codsez)||(_codsot!=codsot))
|
||||
// salto pagina se cambio benemerenza
|
||||
const TString16 tipoben = current_cursor()->curr().get(ROP_S0);
|
||||
if (tipoben!=_oldben)
|
||||
{
|
||||
if (_codsez != "**")
|
||||
if (_oldben != "**")
|
||||
printer().formfeed();
|
||||
_codsez = codsez;
|
||||
_codsot = codsot;
|
||||
header_sezione(codsez, codsot);
|
||||
_oldben = tipoben;
|
||||
header_ben(tipoben);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TAttribuzioneBenemerenze::set_page(int file, int cnt)
|
||||
{
|
||||
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
|
||||
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
|
||||
set_row(1,"@12g#a", &_cognome_nome);
|
||||
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(1,"@49g@pn", FLD(LF_SOGGETTI,SOG_TOTDON,"###"));
|
||||
}
|
||||
|
||||
bool TAttribuzioneBenemerenze::filter_func_attriben(const TRelation* rel)
|
||||
{
|
||||
bool filtrato;
|
||||
// filtro chi non ha già ricevuto la benemerenza richiesta
|
||||
TLocalisamfile ben(LF_BENEM);
|
||||
ben.setkey(3);
|
||||
TRectype& recben = ben.curr();
|
||||
recben.zero();
|
||||
recben.put(BEN_CODICE, rel->lfile().curr().get_long(SOG_CODICE));
|
||||
recben.put(BEN_TIPOBEN, app()._tipoben);
|
||||
filtrato = (ben.read() != NOERR); // se ha gia' la ben. non va filtrato
|
||||
// filtro chi ha il numero donazioni giuste
|
||||
if (filtrato)
|
||||
filtrato = rel->lfile().curr().get_int(SOG_TOTDON) >= app()._numdon;
|
||||
return filtrato;
|
||||
}
|
||||
|
||||
void TAttribuzioneBenemerenze::header_sezione(const TString16 codsez, const TString16 codsot)
|
||||
{
|
||||
const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
|
||||
const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
|
||||
TString intestazione(132);
|
||||
intestazione = "Sezione: ";
|
||||
intestazione << codsez;
|
||||
intestazione << "/";
|
||||
intestazione << codsot;
|
||||
intestazione << " ";
|
||||
intestazione << densez;
|
||||
if ((densot.ok())&& (densot.not_empty()))
|
||||
{
|
||||
if (file == LF_SOGGETTI)
|
||||
{
|
||||
intestazione << "/";
|
||||
intestazione << densot;
|
||||
}
|
||||
set_row(1,"@0g#a", &_cognome_nome);
|
||||
set_row(1,"@26g@S", FLD(LF_SOGGETTI,SOG_CATDON));
|
||||
set_row(1,"@29g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS));
|
||||
set_row(1,"@39g@pn", FLD(LF_SOGGETTI,SOG_TOTDON,"###"));
|
||||
}
|
||||
else
|
||||
set_row(1,"");
|
||||
}
|
||||
|
||||
void TAttribuzioneBenemerenze::header_ben(const TString16 tipoben)
|
||||
{
|
||||
TString intestazione(132);
|
||||
intestazione = "Benemerenza ";
|
||||
intestazione << tipoben;
|
||||
intestazione << " ";
|
||||
TTable ben("BNZ");
|
||||
ben.zero();
|
||||
ben.put("CODTAB", tipoben);
|
||||
ben.read();
|
||||
if (ben.good())
|
||||
|
||||
intestazione << ben.get("S0");
|
||||
intestazione.center_just();
|
||||
set_header(1,"@0g%s", (const char*) intestazione);
|
||||
return;
|
||||
@ -135,47 +113,14 @@ bool TAttribuzioneBenemerenze::set_print(int)
|
||||
tasto = _msk->run();
|
||||
if (tasto == K_ENTER)
|
||||
{
|
||||
_codsez = "**";
|
||||
_codsot = "**";
|
||||
_gruppoold = "**";
|
||||
_oldben = "**";
|
||||
_contatore = 0;
|
||||
TString80 chiave = "";
|
||||
_dataela = _msk->get(F_DATAELA);
|
||||
_datapre = _msk->get(F_DATAPRE);
|
||||
_gruppoazie = _msk->get(F_GRUPPOAZIE);
|
||||
_anchegruppi = _msk->get_bool(F_ANCHEGRUPPI);
|
||||
_tipoben = _msk->get(F_TIPOBEN);
|
||||
_definitiva = _msk->get_bool(F_DEFINITIVA);
|
||||
if (_gruppoazie.not_empty())
|
||||
chiave << "90->GRUPPOAZIE|UPPER(90->COGNOME)|UPPER(90->NOME)";
|
||||
else
|
||||
chiave = "90->CODSEZ|90->CODSOT|UPPER(90->COGNOME)|UPPER(90->NOME)";
|
||||
TString80 filtro = "";
|
||||
if (_gruppoazie.not_empty())
|
||||
filtro.format("(90->GRUPPOAZIE == \"%s\")",(const char*)_gruppoazie);
|
||||
else
|
||||
if (!_anchegruppi)
|
||||
filtro.format("(90->GRUPPOAZIE == \"\")");
|
||||
// filtro per sezioni
|
||||
const TString16 sezini = _msk->get(F_SEZINI);
|
||||
const TString16 sotini = _msk->get(F_SOTINI);
|
||||
const TString16 sezfin = _msk->get(F_SEZFIN);
|
||||
const TString16 sotfin = _msk->get(F_SOTFIN);
|
||||
TRectype da(LF_SOGGETTI);
|
||||
TRectype a(LF_SOGGETTI);
|
||||
if (sezini.not_empty())
|
||||
da.put(SOG_CODSEZ, sezini);
|
||||
if (sotini.not_empty())
|
||||
da.put(SOG_CODSOT, sotini);
|
||||
if (sezfin.not_empty())
|
||||
a.put(SOG_CODSEZ, sezfin);
|
||||
if (sotfin.not_empty())
|
||||
a.put(SOG_CODSOT, sotfin);
|
||||
current_cursor()->setregion(da, a);
|
||||
current_cursor()->setfilter(filtro, TRUE);
|
||||
((TSorted_cursor*)current_cursor())->change_order(chiave);
|
||||
reset_files();
|
||||
add_file(LF_SOGGETTI);
|
||||
_catdon.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
@ -194,8 +139,145 @@ bool TAttribuzioneBenemerenze::set_print(int)
|
||||
_catdon.add((const char*) catqui);
|
||||
if (catses.not_empty() && catses.ok())
|
||||
_catdon.add((const char*) catses);
|
||||
current_cursor()->setfilter("TOTDON!=0");
|
||||
current_cursor()->set_filterfunction(filter_func_attriben,TRUE);
|
||||
_tabben.destroy();
|
||||
TTable ben("BNZ");
|
||||
for(ben.first(); !ben.eof(); ben.next())
|
||||
{
|
||||
TString16 codben = ben.get("CODTAB");
|
||||
int numdonben = ben.get_int("I0");
|
||||
real* oggetto = new real(numdonben);
|
||||
_tabben.add((const char*)codben, (TObject*) oggetto);
|
||||
}
|
||||
TString80 filtro = "";
|
||||
if (_gruppoazie.not_empty())
|
||||
filtro.format("(90->GRUPPOAZIE == \"%s\")",(const char*)_gruppoazie);
|
||||
else
|
||||
if (!_anchegruppi)
|
||||
filtro.format("(90->GRUPPOAZIE == \"\")");
|
||||
// filtro per sezioni
|
||||
const TString16 sezini = _msk->get(F_SEZINI);
|
||||
const TString16 sotini = _msk->get(F_SOTINI);
|
||||
TRectype da(LF_SOGGETTI);
|
||||
if (sezini.not_empty())
|
||||
da.put(SOG_CODSEZ, sezini);
|
||||
if (sotini.not_empty())
|
||||
da.put(SOG_CODSOT, sotini);
|
||||
_cur = new TCursor(_rel, "", 3, &da, &da);
|
||||
_cur->setfilter(filtro, TRUE);
|
||||
|
||||
TLocalisamfile atopera(LF_ATOPERA);
|
||||
atopera.last();
|
||||
int progope = atopera.get_int(OPE_PROGOPE);
|
||||
progope++;
|
||||
atopera.zero();
|
||||
atopera.put(OPE_PROGOPE, progope);
|
||||
atopera.put(OPE_CODSEZ,sezini);
|
||||
atopera.put(OPE_CODSOT,sotini);
|
||||
atopera.put(OPE_GRUPPOAZIE,_gruppoazie);
|
||||
atopera.put(OPE_DATA1,_dataela);
|
||||
atopera.put(OPE_DATA2,_datapre);
|
||||
atopera.put(OPE_FLAG1,_anchegruppi);
|
||||
atopera.put(OPE_UTENTE,user());
|
||||
atopera.write();
|
||||
TLocalisamfile atropera(LF_ATROPERA);
|
||||
// cancelliamo l'elaborazione precedente
|
||||
for (atropera.first(); !atropera.eof(); atropera.next())
|
||||
atropera.remove();
|
||||
TRectype& sog = _cur->curr();
|
||||
long last = _cur->items();
|
||||
_benem->setkey(3);
|
||||
TProgind prg (last, "Elaborazione in corso... Prego attendere", FALSE, TRUE, 30);
|
||||
for ( *_cur=0; _cur->pos() < last; ++(*_cur) )
|
||||
{
|
||||
prg.addstatus(1);
|
||||
// controllare la categoria
|
||||
bool filtrato = TRUE;
|
||||
|
||||
long codice = sog.get_long(SOG_CODICE);
|
||||
if (_catdon.items() != 0)
|
||||
{
|
||||
const TString16 cat = sog.get(SOG_CATDON);
|
||||
filtrato = _catdon.is_key((const char*) cat);
|
||||
}
|
||||
if (filtrato)
|
||||
{
|
||||
TRectype* key = new TRectype(LF_DONAZ);
|
||||
key->put(DON_CODICE, codice);
|
||||
int err = _sdonazioni->read(key);
|
||||
if (err == NOERR)
|
||||
{
|
||||
int precsi = sog.get_int(SOG_DONPRECSI);
|
||||
int precaf = sog.get_int(SOG_DONPRECAF);
|
||||
int numdon = 0;
|
||||
if (precsi>0)
|
||||
numdon = numdon+precsi;
|
||||
if (precaf>0)
|
||||
numdon = numdon+precaf;
|
||||
for (int r=1; r<=_sdonazioni->rows(); r++)
|
||||
{
|
||||
const TRectype& riga = _sdonazioni->row(r);
|
||||
TDate datadon = riga.get_date(DON_DATADON);
|
||||
if (datadon<=_dataela)
|
||||
numdon++;
|
||||
}
|
||||
TString16 ultben = "**";
|
||||
TRectype* key = new TRectype(LF_BENEM);
|
||||
key->put(BEN_CODICE, codice);
|
||||
int err = _sbenemerenze->read(key);
|
||||
if (err == NOERR)
|
||||
{
|
||||
for (int r=1; r<=_sbenemerenze->rows(); r++)
|
||||
{
|
||||
const TRectype& riga = _sbenemerenze->row(r);
|
||||
ultben = riga.get(BEN_TIPOBEN);
|
||||
}
|
||||
}
|
||||
int bonusctrl = 0;
|
||||
if (ultben != "**")
|
||||
{
|
||||
real& ndonult = (real&) _tabben.find((const char*) ultben);
|
||||
bonusctrl = ndonult.integer();
|
||||
}
|
||||
_tabben.restart();
|
||||
real* c;
|
||||
for (c = (real*) _tabben.first_item(); c != NULL; c = (real*) _tabben.succ_item())
|
||||
{
|
||||
const char* tipoben = _tabben.get_hashobj()->key();
|
||||
int bonus = c->integer();
|
||||
if (bonus > bonusctrl)
|
||||
{
|
||||
if (numdon >= bonus)
|
||||
{
|
||||
// controllo che non abbia ricevuto la benemerenza
|
||||
//const char* tipoben = _tabben.get_hashobj()->key();
|
||||
_benem->zero();
|
||||
_benem->put(BEN_CODICE, codice);
|
||||
_benem->put(BEN_TIPOBEN, tipoben);
|
||||
_benem->read();
|
||||
if (_benem->bad())
|
||||
{
|
||||
atropera.zero();
|
||||
atropera.put(ROP_PROGOPE, progope);
|
||||
atropera.put(ROP_CODICE, codice);
|
||||
atropera.put(ROP_S0, tipoben);
|
||||
atropera.write();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
reset_files();
|
||||
TRelation* relope = new TRelation(LF_ATROPERA);
|
||||
relope->add(LF_SOGGETTI, "CODICE==CODICE");
|
||||
TString80 chiave = "131->S0|UPPER(90->COGNOME)|UPPER(90->NOME)";
|
||||
int curope = add_cursor(new TSorted_cursor(relope, (const char*) chiave, "", 1));
|
||||
filtro = "";
|
||||
current_cursor()->setfilter((const char*) filtro, TRUE);
|
||||
|
||||
add_file(LF_ATROPERA);
|
||||
add_file(LF_SOGGETTI,LF_ATROPERA);
|
||||
reset_print();
|
||||
crea_intestazione();
|
||||
return TRUE;
|
||||
@ -209,18 +291,11 @@ void TAttribuzioneBenemerenze::crea_intestazione()
|
||||
reset_header();
|
||||
|
||||
TString sep(132);
|
||||
sep = "ATTRIBUZIONE BENEMERENZA ";
|
||||
sep << _tipoben;
|
||||
const TString80 descr = _msk->get(F_D_TIPOBEN);
|
||||
sep << " ";
|
||||
sep << descr;
|
||||
sep = "ATTRIBUZIONE BENEMERENZE ";
|
||||
sep << " ALLA DATA ";
|
||||
TString16 data_stampa = _dataela.string();
|
||||
sep << data_stampa;
|
||||
sep << _dataela.string();;
|
||||
sep.center_just();
|
||||
set_header(2, "@0g%s", (const char*) sep);
|
||||
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);
|
||||
@ -228,21 +303,23 @@ void TAttribuzioneBenemerenze::crea_intestazione()
|
||||
sep = "";
|
||||
sep.fill('-');
|
||||
set_header(3, (const char *) sep);
|
||||
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47Num.don.");
|
||||
set_header(5,"@0g------@9g--@12g-------------------------@38g----------@49g--------");
|
||||
set_header(4,"@0gCognome e nome@26gC.@29gTessera@39gTot.don.");
|
||||
set_header(5,"@0-------------------------@26g--@29g--------@39g--------");
|
||||
}
|
||||
|
||||
bool TAttribuzioneBenemerenze::user_create()
|
||||
{
|
||||
{
|
||||
_msk = new TMask("at1200a");
|
||||
_rel = new TRelation(LF_SOGGETTI);
|
||||
_rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT");
|
||||
_rel->add("GAZ", "CODTAB==GRUPPOAZIE",1,0,ALIAS_GAZ);
|
||||
add_cursor(new TSorted_cursor(_rel,"SOG_CODSEZ","",3));
|
||||
_donaz = new TLocalisamfile(LF_DONAZ);
|
||||
_benem = new TLocalisamfile(LF_BENEM);
|
||||
_sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON);
|
||||
_sbenemerenze = new TRecord_array(LF_BENEM, BEN_PROGBEN);
|
||||
_atopera = new TLocalisamfile(LF_ATOPERA);
|
||||
_atropera = new TLocalisamfile(LF_ATROPERA);
|
||||
_sezioni = new TLocalisamfile(LF_SEZIONI);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -254,6 +331,9 @@ bool TAttribuzioneBenemerenze::user_destroy()
|
||||
delete _benem;
|
||||
delete _sdonazioni;
|
||||
delete _sbenemerenze;
|
||||
delete _atopera;
|
||||
delete _atropera;
|
||||
delete _sezioni;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
32
at/at1200a.h
32
at/at1200a.h
@ -5,10 +5,10 @@
|
||||
#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_SEZFIN 105
|
||||
//#define F_D_SEZFIN 106
|
||||
//#define F_SOTFIN 107
|
||||
//#define F_D_SOTFIN 108
|
||||
|
||||
#define F_CAT1 201
|
||||
#define F_D_CAT1 202
|
||||
@ -23,11 +23,19 @@
|
||||
#define F_CAT6 211
|
||||
#define F_D_CAT6 212
|
||||
|
||||
#define F_DATAELA 109
|
||||
#define F_DATAPRE 110
|
||||
#define F_GRUPPOAZIE 111
|
||||
#define F_D_GRUPPOAZIE 112
|
||||
#define F_ANCHEGRUPPI 113
|
||||
#define F_TIPOBEN 114
|
||||
#define F_D_TIPOBEN 115
|
||||
#define F_DEFINITIVA 116
|
||||
#define F_DATAELA 309
|
||||
#define F_DATAPRE 310
|
||||
#define F_GRUPPOAZIE 311
|
||||
#define F_D_GRUPPOAZIE 312
|
||||
#define F_ANCHEGRUPPI 313
|
||||
//#define F_TIPOBEN 314
|
||||
//#define F_D_TIPOBEN 315
|
||||
#define F_DEFINITIVA 314
|
||||
|
||||
#define F_O_CODSEZ 401
|
||||
#define F_O_CODSOT 402
|
||||
//#define F_O_GRUPPOAZIE 403
|
||||
//#define F_O_DATA1 404
|
||||
//#define F_O_DATA2 405
|
||||
//#define F_O_FLAG1 406
|
||||
//#define F_O_UTENTE 407
|
||||
|
129
at/at1200a.uml
129
at/at1200a.uml
@ -17,12 +17,12 @@ PAGE "Attribuzione benemerenze" -1 -1 78 18
|
||||
|
||||
GROUPBOX DLG_NULL 77 4
|
||||
BEGIN
|
||||
PROMPT 1 0 "Scelta sezioni/sottogruppi"
|
||||
PROMPT 1 0 "Scelta sezione/sottogruppo"
|
||||
END
|
||||
|
||||
STRING F_SEZINI 2
|
||||
BEGIN
|
||||
PROMPT 2 1 "Da "
|
||||
PROMPT 2 1 "Sezione "
|
||||
FLAGS "U"
|
||||
USE LF_SEZIONI
|
||||
INPUT CODSEZ F_SEZINI
|
||||
@ -36,12 +36,12 @@ BEGIN
|
||||
OUTPUT F_SOTINI CODSOT
|
||||
OUTPUT F_D_SOTINI DENSOT
|
||||
CHECKTYPE SEARCH
|
||||
HELP "Codice sezione da cui partire"
|
||||
HELP "Codice sezione da stampare"
|
||||
END
|
||||
|
||||
STRING F_D_SEZINI 25
|
||||
BEGIN
|
||||
PROMPT 11 1 ""
|
||||
PROMPT 20 1 ""
|
||||
FLAGS "U"
|
||||
USE LF_SEZIONI KEY 2
|
||||
INPUT DENSEZ F_D_SEZINI
|
||||
@ -51,20 +51,20 @@ BEGIN
|
||||
DISPLAY "Cod.sot." CODSOT
|
||||
COPY OUTPUT F_SEZINI
|
||||
CHECKTYPE NORMAL
|
||||
HELP "Sezione da cui partire"
|
||||
HELP "Sezione da stampare"
|
||||
END
|
||||
|
||||
STRING F_SOTINI 2
|
||||
BEGIN
|
||||
PROMPT 2 2 " "
|
||||
PROMPT 2 2 "Sottogruppo "
|
||||
COPY ALL F_SEZINI
|
||||
CHECKTYPE SEARCH
|
||||
HELP "Codice sottogruppo da cui partire"
|
||||
HELP "Codice sottogruppo da stampare"
|
||||
END
|
||||
|
||||
STRING F_D_SOTINI 25
|
||||
BEGIN
|
||||
PROMPT 11 2 ""
|
||||
PROMPT 20 2 ""
|
||||
FLAGS "U"
|
||||
COPY USE F_D_SEZINI
|
||||
INPUT DENSEZ F_D_SEZINI
|
||||
@ -75,61 +75,6 @@ BEGIN
|
||||
HELP "Sottogruppo da cui partire"
|
||||
END
|
||||
|
||||
STRING F_SEZFIN 2
|
||||
BEGIN
|
||||
PROMPT 41 1 "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 1 ""
|
||||
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 2 " "
|
||||
COPY ALL F_SEZFIN
|
||||
CHECKTYPE SEARCH
|
||||
HELP "Codice sottogruppo finale"
|
||||
END
|
||||
|
||||
STRING F_D_SOTFIN 25
|
||||
BEGIN
|
||||
PROMPT 49 2 ""
|
||||
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 5
|
||||
BEGIN
|
||||
PROMPT 1 4 "Categorie donatori"
|
||||
@ -256,7 +201,7 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 77 8
|
||||
GROUPBOX DLG_NULL 77 7
|
||||
BEGIN
|
||||
PROMPT 1 9 "Opzioni per l'attribuzione"
|
||||
END
|
||||
@ -285,6 +230,8 @@ BEGIN
|
||||
OUTPUT F_GRUPPOAZIE CODTAB
|
||||
OUTPUT F_D_GRUPPOAZIE S0
|
||||
CHECKTYPE NORMAL
|
||||
MESSAGE DISABLE,F_ANCHEGRUPPI
|
||||
MESSAGE EMPTY ENABLE,F_ANCHEGRUPPI
|
||||
WARNING "Codice gruppo aziendale non presente"
|
||||
HELP "Gruppo aziendale di appartenenza"
|
||||
END
|
||||
@ -308,33 +255,41 @@ BEGIN
|
||||
PROMPT 2 13 "Includi soggetti appartenenti a gruppi aziendali"
|
||||
END
|
||||
|
||||
STRING F_TIPOBEN 2
|
||||
BEGIN
|
||||
PROMPT 2 14 "Benemerenza da attribuire "
|
||||
FLAGS "U"
|
||||
USE BNZ
|
||||
INPUT CODTAB F_TIPOBEN
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@40" S0
|
||||
OUTPUT F_TIPOBEN CODTAB
|
||||
OUTPUT F_D_TIPOBEN S0
|
||||
CHECKTYPE REQUIRED
|
||||
VALIDATE NOT_EMPTY_FUNC
|
||||
WARNING "Codice benemerenza non presente"
|
||||
HELP "Benemerenza da assegnare"
|
||||
END
|
||||
|
||||
STRING F_D_TIPOBEN 25
|
||||
BEGIN
|
||||
PROMPT 35 14 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BOOLEAN F_DEFINITIVA
|
||||
BEGIN
|
||||
PROMPT 2 15 "Attribuzione definitiva"
|
||||
PROMPT 2 14 "Attribuzione definitiva"
|
||||
HELP "Se attribuzione definitiva, le benemerenze stampate verranno registrate"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Ricerca" -1 -1 78 18
|
||||
|
||||
STRING F_O_CODSEZ 2
|
||||
BEGIN
|
||||
PROMPT 2 1 "Sezione "
|
||||
FLAGS "U"
|
||||
USE LF_ATOPERA KEY 2
|
||||
INPUT CODSEZ F_O_CODSEZ
|
||||
INPUT CODSOT F_O_CODSOT
|
||||
DISPLAY "Cod.sez" CODSEZ
|
||||
DISPLAY "Cod.sot." CODSOT
|
||||
DISPLAY "Gr.az." GRUPPOAZIE
|
||||
DISPLAY "Data ela.@10" DATA1
|
||||
DISPLAY "Data pr.con.@10" DATA2
|
||||
DISPLAY "Anche gruppi" FLAG1
|
||||
DISPLAY "Utente" UTENTE
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_O_CODSOT 2
|
||||
BEGIN
|
||||
PROMPT 2 2 "Sottogruppo "
|
||||
COPY ALL F_O_CODSEZ
|
||||
CHECKTYPE SEARCH
|
||||
HELP "Codice sottogruppo da stampare"
|
||||
END
|
||||
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
@ -311,6 +311,7 @@ bool TControlloBenemerenze::set_print(int m)
|
||||
((TSorted_cursor*)current_cursor())->change_order(chiave);
|
||||
reset_files();
|
||||
add_file(LF_SOGGETTI);
|
||||
_catdon.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
#include "at2.h"
|
||||
|
||||
#define usage "Error - usage : %s -[0|1|2|3|4|5|6|7]"
|
||||
#define usage "Error - usage : %s -[0|1|2|3|4|5|6|7|8]"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
@ -28,6 +28,8 @@ int main(int argc, char** argv)
|
||||
rt = at2700(argc, argv); break;
|
||||
case 7:
|
||||
rt = at2800(argc, argv); break;
|
||||
case 8:
|
||||
rt = at2900(argc, argv); break;
|
||||
default:
|
||||
error_box(usage, argv[0]) ; rt = 1; break;
|
||||
}
|
||||
|
1
at/at2.h
1
at/at2.h
@ -9,6 +9,7 @@ int at2500(int argc, char* argv[]); // elenco soggetti idonei
|
||||
int at2600(int argc, char* argv[]); // elenco soggetti iscritti/dimessi
|
||||
int at2700(int argc, char* argv[]); // elenco soggetti per categorie
|
||||
int at2800(int argc, char* argv[]); // elenco soggetti che non donano dal
|
||||
int at2900(int argc, char* argv[]); // elenco soggetti per frequenza donazioni
|
||||
|
||||
#endif // __AT2_H
|
||||
|
||||
|
@ -44,3 +44,8 @@ MENUBAR MENU_BAR(7)
|
||||
MENU MENU_BAR(7)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* at2 -8 elenco soggetti per frequenza donazione */
|
||||
MENUBAR MENU_BAR(8)
|
||||
MENU MENU_BAR(8)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
|
@ -210,6 +210,7 @@ bool TStampaSospesi::set_print(int m)
|
||||
else
|
||||
current_cursor()->setfilter("TCS->S6 == \"S\"", TRUE);
|
||||
// filtro per categorie
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
|
109
at/at2200.cpp
109
at/at2200.cpp
@ -42,6 +42,8 @@ class TStampaPerEta : public TPrintapp
|
||||
ts _tipostampa;
|
||||
TString16 _codsez, _codsot;
|
||||
int _etlarghezza, _etcolonne;
|
||||
bool _stampa80;
|
||||
|
||||
|
||||
protected:
|
||||
virtual bool user_create();
|
||||
@ -91,28 +93,60 @@ void TStampaPerEta::set_page(int file, int cnt)
|
||||
case etichette:
|
||||
{
|
||||
TPrint_section& corpo = _form_eti->get_body();
|
||||
corpo.update();
|
||||
for (word i = 0; i < corpo.height(); i++)
|
||||
{
|
||||
TPrintrow& riga = corpo.row(i);
|
||||
set_row(i+1,riga);
|
||||
}
|
||||
// serve perchè alla prossima etichetta rifaccia la setpage
|
||||
// altrimenti stampa sempre la stessa etichetta
|
||||
force_setpage(TRUE);
|
||||
for (int r=1;r<=_etcolonne;r++)
|
||||
{
|
||||
if (current_cursor()->pos()<current_cursor()->items())
|
||||
{
|
||||
force_setpage(TRUE);
|
||||
corpo.update();
|
||||
for (word i = 0; i < corpo.height(); i++)
|
||||
{
|
||||
TPrintrow& riga = corpo.row(i);
|
||||
TString256 riga1 = riga.row();
|
||||
riga1.cut(_etlarghezza);
|
||||
int colonna = ((r-1)*_etlarghezza);
|
||||
TString16 formato;
|
||||
formato << '@' << colonna << "g";
|
||||
riga1.insert(formato,0);
|
||||
set_row(i+1,riga1);
|
||||
}
|
||||
if (r < _etcolonne)
|
||||
++(*current_cursor());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case elenco:
|
||||
{
|
||||
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
|
||||
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
|
||||
set_row(1,"@12g#a", &_cognome_nome);
|
||||
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
|
||||
set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI));
|
||||
set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
|
||||
set_row(2,"@49g#a", &_dencom);
|
||||
set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT));
|
||||
if (_stampa80)
|
||||
{
|
||||
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
|
||||
set_row(2,"@6g@S", FLD(LF_SOGGETTI,SOG_CATDON));
|
||||
set_row(3,"@2g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS));
|
||||
|
||||
set_row(1,"@12g#a", &_cognome_nome);
|
||||
set_row(2,"@12g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(3,"@12g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
|
||||
set_row(4,"@12g#a", &_dencom);
|
||||
|
||||
set_row(1,"@62g@S", FLD(LF_SOGGETTI,SOG_TELABI));
|
||||
set_row(2,"@62g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
|
||||
set_row(3,"@62g@S", FLD(LF_SOGGETTI,SOG_TELALT));
|
||||
|
||||
set_row(5,"");
|
||||
}
|
||||
else
|
||||
{
|
||||
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
|
||||
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
|
||||
set_row(1,"@12g#a", &_cognome_nome);
|
||||
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
|
||||
set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI));
|
||||
set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
|
||||
set_row(2,"@49g#a", &_dencom);
|
||||
set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -157,7 +191,10 @@ void TStampaPerEta::header_sezione(const TString16 codsez, const TString16 codso
|
||||
intestazione << "/";
|
||||
intestazione << densot;
|
||||
}
|
||||
intestazione.center_just();
|
||||
if (_stampa80)
|
||||
intestazione.center_just(80);
|
||||
else
|
||||
intestazione.center_just(132);
|
||||
set_header(1,"@0g%s", (const char*) intestazione);
|
||||
return;
|
||||
}
|
||||
@ -199,6 +236,8 @@ bool TStampaPerEta::preprocess_page(int file, int counter)
|
||||
_codsot = codsot;
|
||||
header_sezione(codsez, codsot);
|
||||
}
|
||||
if (printer().rows_left()<5)
|
||||
printer().formfeed();
|
||||
}
|
||||
if (_tipostampa==etichette)
|
||||
if (printer().rows_left() < _form_eti->get_body().height())
|
||||
@ -229,6 +268,7 @@ bool TStampaPerEta::set_print(int m)
|
||||
filtra_sezioni();
|
||||
_dataini = _msk->get(F_DATAINI);
|
||||
_datafin = _msk->get(F_DATAFIN);
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
@ -274,20 +314,38 @@ void TStampaPerEta::crea_intestazione()
|
||||
{
|
||||
sep << " al ";
|
||||
sep << data.string();
|
||||
}
|
||||
sep.center_just();
|
||||
}
|
||||
if (_stampa80)
|
||||
sep.center_just(80);
|
||||
else
|
||||
sep.center_just(132);
|
||||
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);
|
||||
if (_stampa80)
|
||||
set_header(2, "@73g%s", (const char*) sep);
|
||||
else
|
||||
set_header(2, "@110g%s", (const char*) sep);
|
||||
sep = "";
|
||||
sep.fill('-');
|
||||
set_header(3, (const char *) sep);
|
||||
set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro");
|
||||
set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro");
|
||||
set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------");
|
||||
if (_stampa80)
|
||||
{
|
||||
_cognome_nome.set_width(51);
|
||||
set_header(4,"@0gCodice@9gCognome e nome@62gTelefono abit.");
|
||||
set_header(5,"@0gCat.@9gData di nascita@62gTelefono lavoro");
|
||||
set_header(6,"@0gTessera@9gIndirizzo@62gTelefono altro");
|
||||
set_header(7,"@0g--------@9g--------------------------------------------------@62g---------------");
|
||||
}
|
||||
else
|
||||
{
|
||||
_cognome_nome.set_width(25);
|
||||
set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro");
|
||||
set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro");
|
||||
set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -305,6 +363,7 @@ bool TStampaPerEta::user_create()
|
||||
_etcolonne = config.get_int("EtColonne");
|
||||
_form_eti = new TEti_pereta_form(etformato);
|
||||
_msk = new TMask("at2200a");
|
||||
_stampa80 = config.get_bool("Stampa80");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -213,6 +213,7 @@ bool TStampaEsclusi::set_print(int)
|
||||
else
|
||||
current_cursor()->setfilter("ESCLUSO != \"\"");
|
||||
// filtro per categorie
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
|
@ -254,6 +254,7 @@ bool TStampaModificati::set_print(int)
|
||||
_dataini = _msk->get(F_DATAINI);
|
||||
filtra_sezioni();
|
||||
// filtro per categorie
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
|
@ -251,6 +251,7 @@ bool TStampaIdonei::set_print(int m)
|
||||
else
|
||||
current_cursor()->setfilter("(TCS->S6 == \"I\") || (TCS->S6 == \"F\")", TRUE);
|
||||
// filtro per categorie
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
|
@ -227,6 +227,7 @@ bool TStampaIscritti::set_print(int m)
|
||||
// filtro per sezioni
|
||||
filtra_sezioni();
|
||||
// filtro per categorie
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
|
@ -635,6 +635,7 @@ bool TStampaPerCategorie::set_print(int m)
|
||||
((TSorted_cursor*)current_cursor())->change_order(chiave);
|
||||
reset_files();
|
||||
add_file(LF_SOGGETTI);
|
||||
_catdon.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
@ -653,6 +654,7 @@ bool TStampaPerCategorie::set_print(int m)
|
||||
_catdon.add((const char*) catqui);
|
||||
if (catses.not_empty() && catses.ok())
|
||||
_catdon.add((const char*) catses);
|
||||
_catnondon.destroy();
|
||||
const TString16 catnpri = _msk->get(F_CATN1);
|
||||
const TString16 catnsec = _msk->get(F_CATN2);
|
||||
const TString16 catnter = _msk->get(F_CATN3);
|
||||
|
@ -265,6 +265,7 @@ bool TStampaNonDon::set_print(int m)
|
||||
add_file(LF_SOGGETTI);
|
||||
filtra_sezioni();
|
||||
_data = _msk->get(F_DATA);
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
|
414
at/at2900.cpp
Executable file
414
at/at2900.cpp
Executable file
@ -0,0 +1,414 @@
|
||||
#include <form.h>
|
||||
#include <mask.h>
|
||||
#include <printapp.h>
|
||||
#include <recarray.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include "donaz.h"
|
||||
#include "soggetti.h"
|
||||
#include "sezioni.h"
|
||||
#include <comuni.h>
|
||||
|
||||
#include "at2.h"
|
||||
#include "at2900a.h"
|
||||
|
||||
#define ALIAS_LCP 100
|
||||
#define ALIAS_TCS 200
|
||||
|
||||
enum ts { undefined = 0, elenco = 1, etichette = 2 };
|
||||
|
||||
// definizione form per etichette
|
||||
class TEti_freq_form : public TForm
|
||||
{
|
||||
public:
|
||||
|
||||
virtual TCursor* cursor() const;
|
||||
virtual TRelation* relation() const;
|
||||
TPrint_section& get_body() { return section('B'); } ;
|
||||
TEti_freq_form(): TForm() {};
|
||||
TEti_freq_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
|
||||
: TForm(form,code,editlevel,desc) {};
|
||||
virtual ~TEti_freq_form() {};
|
||||
};
|
||||
|
||||
class TFrequenza : public TPrintapp
|
||||
{
|
||||
static bool filter_func_freq(const TRelation* rel);
|
||||
|
||||
TRelation* _rel;
|
||||
TMask* _msk;
|
||||
TLocalisamfile* _donaz;
|
||||
TRecord_array* _sdonazioni;
|
||||
TEti_freq_form* _form_eti;
|
||||
TAssoc_array _categorie;
|
||||
int _cur;
|
||||
TParagraph_string _cognome_nome, _dencom, _numdonsog;
|
||||
TDate _data_stampa;
|
||||
TDate _dataini,_datafin;
|
||||
int _numdon;
|
||||
ts _tipostampa;
|
||||
TString16 _codsez, _codsot;
|
||||
int _etlarghezza, _etcolonne;
|
||||
bool _stampa80;
|
||||
|
||||
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 filtra_sezioni();
|
||||
void header_sezione(const TString16 codsez, const TString16 codsot);
|
||||
TMask& app_mask() { return *_msk; }
|
||||
|
||||
TFrequenza() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50), _numdonsog("",5) {}
|
||||
};
|
||||
|
||||
HIDDEN inline TFrequenza& app() { return (TFrequenza&) main_app(); }
|
||||
|
||||
TCursor* TEti_freq_form::cursor() const { return app().current_cursor(); }
|
||||
|
||||
TRelation* TEti_freq_form::relation() const { return cursor()->relation(); }
|
||||
|
||||
void TFrequenza::filtra_sezioni()
|
||||
{
|
||||
const TString16 sezini = _msk->get(F_SEZINI);
|
||||
const TString16 sotini = _msk->get(F_SOTINI);
|
||||
const TString16 sezfin = _msk->get(F_SEZFIN);
|
||||
const TString16 sotfin = _msk->get(F_SOTFIN);
|
||||
TRectype da(LF_SOGGETTI);
|
||||
TRectype a(LF_SOGGETTI);
|
||||
if (sezini.not_empty())
|
||||
da.put(SOG_CODSEZ, sezini);
|
||||
if (sotini.not_empty())
|
||||
da.put(SOG_CODSOT, sotini);
|
||||
if (sezfin.not_empty())
|
||||
a.put(SOG_CODSEZ, sezfin);
|
||||
if (sotfin.not_empty())
|
||||
a.put(SOG_CODSOT, sotfin);
|
||||
current_cursor()->setregion(da, a);
|
||||
}
|
||||
|
||||
void TFrequenza::set_page(int file, int cnt)
|
||||
{
|
||||
switch (_tipostampa)
|
||||
{
|
||||
case etichette:
|
||||
{
|
||||
TPrint_section& corpo = _form_eti->get_body();
|
||||
for (int r=1;r<=_etcolonne;r++)
|
||||
{
|
||||
if (current_cursor()->pos()<current_cursor()->items())
|
||||
{
|
||||
force_setpage(TRUE);
|
||||
corpo.update();
|
||||
for (word i = 0; i < corpo.height(); i++)
|
||||
{
|
||||
TPrintrow& riga = corpo.row(i);
|
||||
TString256 riga1 = riga.row();
|
||||
riga1.cut(_etlarghezza);
|
||||
int colonna = ((r-1)*_etlarghezza);
|
||||
TString16 formato;
|
||||
formato << '@' << colonna << "g";
|
||||
riga1.insert(formato,0);
|
||||
set_row(i+1,riga1);
|
||||
}
|
||||
if (r < _etcolonne)
|
||||
++(*current_cursor());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case elenco:
|
||||
{
|
||||
if (_stampa80)
|
||||
{
|
||||
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
|
||||
set_row(2,"@0g@8,rs", FLD(LF_SOGGETTI,SOG_TESSAVIS));
|
||||
set_row(3,"@6g@S", FLD(LF_SOGGETTI,SOG_CATDON));
|
||||
set_row(1,"@9g#a", &_cognome_nome);
|
||||
set_row(3,"@9g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(1,"@44g@S", FLD(LF_SOGGETTI,SOG_TELABI));
|
||||
set_row(2,"@44g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
|
||||
set_row(3,"@44g@S", FLD(LF_SOGGETTI,SOG_TELALT));
|
||||
//set_row(1,"@60g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON));
|
||||
//set_row(2,"@64g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON));
|
||||
set_row(1,"@60g#a", &_numdonsog);
|
||||
set_row(4,"");
|
||||
}
|
||||
else
|
||||
{
|
||||
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
|
||||
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
|
||||
set_row(1,"@12g#a", &_cognome_nome);
|
||||
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
|
||||
set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI));
|
||||
set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
|
||||
//set_row(1,"@132g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON));
|
||||
set_row(2,"@49g#a", &_dencom);
|
||||
set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT));
|
||||
//set_row(2,"@132g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON));
|
||||
set_row(1,"@132g#a", &_numdonsog);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool TFrequenza::filter_func_freq(const TRelation* rel)
|
||||
{
|
||||
bool filtrato = TRUE;
|
||||
TLocalisamfile& sog = rel->lfile();
|
||||
// filtro per categorie
|
||||
TAssoc_array& categorie = app()._categorie;
|
||||
if (categorie.items() != 0)
|
||||
{
|
||||
const TString16 cat = sog.get(SOG_CATDON);
|
||||
filtrato = categorie.is_key((const char*) cat);
|
||||
}
|
||||
// filtro per numero donazioni nel periodo
|
||||
if (filtrato)
|
||||
{
|
||||
filtrato = FALSE;
|
||||
const long codice = sog.get_long(SOG_CODICE);
|
||||
TRectype* key = new TRectype(LF_DONAZ);
|
||||
key->put(DON_CODICE, codice);
|
||||
int err = app()._sdonazioni->read(key);
|
||||
if (err == NOERR)
|
||||
{
|
||||
int numdon = 0;
|
||||
for (int r=1; r<=app()._sdonazioni->rows(); r++)
|
||||
{
|
||||
const TRectype& riga = app()._sdonazioni->row(r);
|
||||
TDate datadon = riga.get_date(DON_DATADON);
|
||||
if ((datadon>=app()._dataini) && (datadon<=app()._datafin))
|
||||
numdon++;
|
||||
}
|
||||
if (numdon >= app()._numdon)
|
||||
filtrato = TRUE;
|
||||
}
|
||||
}
|
||||
return filtrato;
|
||||
}
|
||||
|
||||
void TFrequenza::header_sezione(const TString16 codsez, const TString16 codsot)
|
||||
{
|
||||
const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
|
||||
const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
|
||||
TString intestazione(132);
|
||||
intestazione = "Sezione: ";
|
||||
intestazione << codsez;
|
||||
intestazione << "/";
|
||||
intestazione << codsot;
|
||||
intestazione << " ";
|
||||
intestazione << densez;
|
||||
if ((densot.ok())&& (densot.not_empty()))
|
||||
{
|
||||
intestazione << "/";
|
||||
intestazione << densot;
|
||||
}
|
||||
if (_stampa80)
|
||||
intestazione.center_just(80);
|
||||
else
|
||||
intestazione.center_just(132);
|
||||
set_header(1,"@0g%s", (const char*) intestazione);
|
||||
return;
|
||||
}
|
||||
|
||||
bool TFrequenza::preprocess_page(int file, int counter)
|
||||
{
|
||||
if (_tipostampa == elenco)
|
||||
{
|
||||
TRectype recsog = current_cursor()->curr();
|
||||
const long codice = recsog.get_long(SOG_CODICE);
|
||||
TRectype* key = new TRectype(LF_DONAZ);
|
||||
key->put(DON_CODICE, codice);
|
||||
int err = _sdonazioni->read(key);
|
||||
if (err == NOERR)
|
||||
{
|
||||
int numdon = 0;
|
||||
for (int r=1; r<=_sdonazioni->rows(); r++)
|
||||
{
|
||||
const TRectype& riga = _sdonazioni->row(r);
|
||||
TDate datadon = riga.get_date(DON_DATADON);
|
||||
if ((datadon>=_dataini) && (datadon<=_datafin))
|
||||
numdon++;
|
||||
}
|
||||
_numdonsog = format("%3d",numdon);
|
||||
}
|
||||
TString80 nome = recsog.get(SOG_COGNOME);
|
||||
nome << " ";
|
||||
nome << recsog.get(SOG_NOME);
|
||||
_cognome_nome = nome;
|
||||
TString256 localita = "";
|
||||
localita << current_cursor()->curr(-ALIAS_LCP).get("S6");
|
||||
if (localita.not_empty() && localita.ok())
|
||||
{
|
||||
localita << " ";
|
||||
localita << current_cursor()->curr(-ALIAS_LCP).get("S0");
|
||||
localita << " - ";
|
||||
}
|
||||
else
|
||||
{
|
||||
localita = current_cursor()->curr(LF_COMUNI).get(COM_CAPCOM);
|
||||
localita << " ";
|
||||
}
|
||||
localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM);
|
||||
localita.trim();
|
||||
_dencom = localita;
|
||||
|
||||
// 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();
|
||||
_codsez = codsez;
|
||||
_codsot = codsot;
|
||||
header_sezione(codsez, codsot);
|
||||
}
|
||||
}
|
||||
if (_tipostampa==etichette)
|
||||
if (printer().rows_left() < _form_eti->get_body().height())
|
||||
printer().formfeed();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TFrequenza::set_print(int m)
|
||||
{
|
||||
_tipostampa = undefined;
|
||||
KEY tasto;
|
||||
tasto = _msk->run();
|
||||
switch (tasto)
|
||||
{
|
||||
case F_ELENCO:
|
||||
_tipostampa = elenco;
|
||||
_codsez = "**";
|
||||
_codsot = "**";
|
||||
break;
|
||||
case F_ETICHETTE:
|
||||
_tipostampa = etichette;
|
||||
break;
|
||||
}
|
||||
if (_tipostampa != undefined)
|
||||
{
|
||||
reset_files();
|
||||
add_file(LF_SOGGETTI);
|
||||
filtra_sezioni();
|
||||
_numdon = _msk->get_int(F_NUMDON);
|
||||
_dataini = _msk->get(F_DATAINI);
|
||||
_datafin = _msk->get(F_DATAFIN);
|
||||
_categorie.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() && catpri.ok())
|
||||
_categorie.add((const char*) catpri);
|
||||
if (catsec.not_empty() && catsec.ok())
|
||||
_categorie.add((const char*) catsec);
|
||||
if (catter.not_empty() && catter.ok())
|
||||
_categorie.add((const char*) catter);
|
||||
if (catqua.not_empty() && catqua.ok())
|
||||
_categorie.add((const char*) catqua);
|
||||
if (catqui.not_empty() && catqui.ok())
|
||||
_categorie.add((const char*) catqui);
|
||||
if (catses.not_empty() && catses.ok())
|
||||
_categorie.add((const char*) catses);
|
||||
current_cursor()->set_filterfunction (filter_func_freq);
|
||||
reset_print();
|
||||
crea_intestazione();
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TFrequenza::crea_intestazione()
|
||||
{
|
||||
reset_header();
|
||||
if (_tipostampa == elenco)
|
||||
{
|
||||
TString sep(132);
|
||||
sep = "SOGGETTI CHE HANNO FATTO ALMENO ";
|
||||
sep << _numdon;
|
||||
sep << " DONAZIONI DAL ";
|
||||
sep << _dataini.string();
|
||||
sep << " AL ";
|
||||
sep << _datafin.string();
|
||||
if (_stampa80)
|
||||
sep.center_just(80);
|
||||
else
|
||||
sep.center_just(132);
|
||||
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. @#";
|
||||
if (_stampa80)
|
||||
set_header(2, "@73g%s", (const char*) sep);
|
||||
else
|
||||
set_header(2, "@110g%s", (const char*) sep);
|
||||
set_header(3, "");
|
||||
if (_stampa80)
|
||||
{
|
||||
set_header(4,"@0gCodice@9gCognome e nome@44gTelefono abit.@60gNum.don.");
|
||||
set_header(5,"@0gTessera@44gTelefono lavoro");
|
||||
set_header(6,"@0gCateg.@9gNato il@44gTelefono altro");
|
||||
set_header(7,"@0g--------@9g----------------------------------@44g--------------@60g--------");
|
||||
_cognome_nome.set_width(35);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro@132gNum.don.");
|
||||
set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro");
|
||||
set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------@132g--------");
|
||||
_cognome_nome.set_width(25);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool TFrequenza::user_create()
|
||||
{
|
||||
_rel = new TRelation(LF_SOGGETTI);
|
||||
_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS);
|
||||
_rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCP);
|
||||
_rel->add(LF_COMUNI, "COM==DOM_CODCOM");
|
||||
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
|
||||
_cur = add_cursor(new TCursor(_rel, "", 3));
|
||||
_msk = new TMask("at2900a");
|
||||
_donaz = new TLocalisamfile(LF_DONAZ);
|
||||
_sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON);
|
||||
TConfig config(CONFIG_STUDIO);
|
||||
TString16 etformato = config.get("EtFormato");
|
||||
_etlarghezza = config.get_int("EtLarghezza");
|
||||
_etcolonne = config.get_int("EtColonne");
|
||||
_form_eti = new TEti_freq_form(etformato);
|
||||
_stampa80 = config.get_bool("Stampa80");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TFrequenza::user_destroy()
|
||||
{
|
||||
delete _msk;
|
||||
delete _rel;
|
||||
delete _form_eti;
|
||||
delete _donaz;
|
||||
delete _sdonazioni;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int at2900(int argc, char* argv[])
|
||||
{
|
||||
TFrequenza a;
|
||||
a.run(argc, argv, "Soggetti per frequenza di donazione");
|
||||
return 0;
|
||||
}
|
31
at/at2900a.h
Executable file
31
at/at2900a.h
Executable file
@ -0,0 +1,31 @@
|
||||
// stampa lista frequenza
|
||||
// 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_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_NUMDON 301
|
||||
#define F_DATAINI 302
|
||||
#define F_DATAFIN 303
|
||||
|
||||
#define F_ELENCO 401
|
||||
#define F_ETICHETTE 402
|
289
at/at2900a.uml
Executable file
289
at/at2900a.uml
Executable file
@ -0,0 +1,289 @@
|
||||
#include "at2900a.h"
|
||||
|
||||
PAGE "Soggetti per frequenza di donazione" -1 -1 78 20
|
||||
|
||||
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 5
|
||||
BEGIN
|
||||
PROMPT 1 5 "Categorie"
|
||||
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 3
|
||||
BEGIN
|
||||
PROMPT 1 10 "Opzioni di elaborazione"
|
||||
END
|
||||
|
||||
NUMBER F_NUMDON 3
|
||||
BEGIN
|
||||
PROMPT 2 11 "Almeno "
|
||||
END
|
||||
|
||||
DATE F_DATAINI
|
||||
BEGIN
|
||||
PROMTP 14 11 "donazioni dal "
|
||||
END
|
||||
|
||||
DATE F_DATAFIN
|
||||
BEGIN
|
||||
PROMPT 40 11 "al "
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 77 4
|
||||
BEGIN
|
||||
PROMPT 1 13 "Stampa"
|
||||
END
|
||||
|
||||
BUTTON F_ELENCO 9 2
|
||||
BEGIN
|
||||
PROMPT -13 14 "Elenco"
|
||||
MESSAGE EXIT,F_ELENCO
|
||||
END
|
||||
|
||||
BUTTON F_ETICHETTE 9 2
|
||||
BEGIN
|
||||
PROMPT -23 14 "Etichette"
|
||||
MESSAGE EXIT,F_ETICHETTE
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -33 14 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
18
at/at3.cpp
18
at/at3.cpp
@ -4,18 +4,28 @@
|
||||
|
||||
#include "at3.h"
|
||||
|
||||
#define usage "Error - usage : %s -{0}"
|
||||
#define usage "Error - usage : %s -{0|1|2|3|4|5|6}"
|
||||
|
||||
int main(int argc,char** argv)
|
||||
|
||||
{
|
||||
int rt = -1 ;
|
||||
int rt = -1 ;
|
||||
const int r = (argc > 1) ? atoi(&argv[1][1]) : -1;
|
||||
|
||||
switch (r)
|
||||
{
|
||||
case 0:
|
||||
rt = at3100(argc,argv) ; break;
|
||||
case 1:
|
||||
rt = at3200(argc,argv) ; break;
|
||||
case 2:
|
||||
rt = at3300(argc,argv) ; break;
|
||||
case 3:
|
||||
rt = at3400(argc,argv) ; break;
|
||||
case 4:
|
||||
rt = at3500(argc,argv) ; break;
|
||||
case 5:
|
||||
rt = at3600(argc,argv) ; break;
|
||||
case 6:
|
||||
rt = at3700(argc,argv) ; break;
|
||||
default:
|
||||
error_box(usage, argv[0]) ; break;
|
||||
}
|
||||
|
6
at/at3.h
6
at/at3.h
@ -2,6 +2,12 @@
|
||||
#define __AT3_H
|
||||
|
||||
int at3100(int argc, char* argv[]);
|
||||
int at3200(int argc, char* argv[]);
|
||||
int at3300(int argc, char* argv[]);
|
||||
int at3400(int argc, char* argv[]);
|
||||
int at3500(int argc, char* argv[]);
|
||||
int at3600(int argc, char* argv[]);
|
||||
int at3700(int argc, char* argv[]);
|
||||
|
||||
#endif // __AT3_H
|
||||
|
||||
|
50
at/at3.url
50
at/at3.url
@ -5,53 +5,37 @@
|
||||
|
||||
#include <default.url>
|
||||
|
||||
/* ----------------------------------------------------
|
||||
* at3 -0
|
||||
* ---------------------------------------------------- */
|
||||
/* at3 -0 statistica soggetti per sesso e fascia di eta'*/
|
||||
MENU TASK_MENUBAR
|
||||
SUBMENU MENU_FILE "~File"
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* ----------------------------------------------------
|
||||
* at1 -1
|
||||
* ---------------------------------------------------- */
|
||||
/* at3 -1 statistica donazioni per mese e gruppo/rh */
|
||||
MENUBAR MENU_BAR(1)
|
||||
|
||||
MENU MENU_BAR(1)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
|
||||
/* ----------------------------------------------------
|
||||
* at1 -2
|
||||
* ---------------------------------------------------- */
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* at3 -2 statistica soggetti per categorie */
|
||||
MENUBAR MENU_BAR(2)
|
||||
|
||||
MENU MENU_BAR(2)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* ----------------------------------------------------
|
||||
* at1 -3
|
||||
*
|
||||
* ----------------------------------------------------*/
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* at3 -3 statistica donazioni per mese e tipo don. */
|
||||
MENUBAR MENU_BAR(3)
|
||||
|
||||
MENU MENU_BAR(3)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* ----------------------------------------------------
|
||||
* at1 -4
|
||||
* ---------------------------------------------------- */
|
||||
/* at3 -4 statistica giornaliera donazioni per tipo */
|
||||
MENUBAR MENU_BAR(4)
|
||||
|
||||
MENU MENU_BAR(4)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* ----------------------------------------------------
|
||||
* at1 -5
|
||||
* ---------------------------------------------------- */
|
||||
/* at3 -5 statistica donazioni/donatori per sesso, gruppo e rh */
|
||||
MENUBAR MENU_BAR(5)
|
||||
|
||||
MENU MENU_BAR(5)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* at3 -6 statistica soggetti per sesso, gruppo e rh */
|
||||
MENUBAR MENU_BAR(6)
|
||||
MENU MENU_BAR(6)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
|
567
at/at3100.cpp
567
at/at3100.cpp
@ -1,113 +1,562 @@
|
||||
#include <applicat.h>
|
||||
#include <execp.h>
|
||||
#include <mask.h>
|
||||
#include <msksheet.h>
|
||||
#include <printer.h>
|
||||
#include <progind.h>
|
||||
#include <real.h>
|
||||
#include <relation.h>
|
||||
#include <tabutil.h>
|
||||
#include <urldefid.h>
|
||||
#include <..\include\filetext.h>
|
||||
#include <..\include\filetext.cpp>
|
||||
#include <lffiles.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include "at3.h"
|
||||
|
||||
// nomi campi maschera
|
||||
//#include "at3100a.h"
|
||||
#include "at3100a.h"
|
||||
|
||||
// nomi dei campi
|
||||
#include "soggetti.h"
|
||||
#include "atstats.h"
|
||||
#include "sezioni.h"
|
||||
|
||||
//#include "atlib.h"
|
||||
// classe per la definizione di una riga di statistica
|
||||
class TRigaSFascia : public TObject
|
||||
{
|
||||
int _etaini,_etafin;
|
||||
TArray _valori;
|
||||
|
||||
class TCarica_app : public TApplication
|
||||
protected:
|
||||
const TRigaSFascia& copy(const TRigaSFascia& riga);
|
||||
public:
|
||||
const int etaini() const { return _etaini; }
|
||||
const int etafin() const { return _etafin; }
|
||||
TObject* dup() const { return new TRigaSFascia(*this); }
|
||||
const TRigaSFascia& operator = (const TRigaSFascia& riga);
|
||||
const real& operator [] (int colonna) const;
|
||||
void aggiorna_valore(int colonna, const real& numero) ;
|
||||
void azzera_valori();
|
||||
// costruttore
|
||||
TRigaSFascia(int etaini, int etafin) {_etaini = etaini; _etafin = etafin;}
|
||||
// costruttore di copia
|
||||
TRigaSFascia(const TRigaSFascia& riga) { copy(riga); }
|
||||
virtual ~TRigaSFascia() {};
|
||||
};
|
||||
|
||||
const TRigaSFascia& TRigaSFascia::copy(const TRigaSFascia& riga)
|
||||
{
|
||||
_etaini = riga._etaini;
|
||||
_etafin = riga._etafin;
|
||||
_valori = riga._valori;
|
||||
return (*this);
|
||||
}
|
||||
|
||||
const TRigaSFascia& TRigaSFascia::operator = (const TRigaSFascia& riga)
|
||||
{
|
||||
copy(riga);
|
||||
return (*this);
|
||||
}
|
||||
|
||||
const real& TRigaSFascia::operator [] (int colonna) const
|
||||
{
|
||||
real* valore = (real*)_valori.objptr(colonna);
|
||||
if (valore == NULL)
|
||||
return ZERO;
|
||||
else
|
||||
return *valore;
|
||||
}
|
||||
|
||||
void TRigaSFascia::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 TRigaSFascia::azzera_valori()
|
||||
{
|
||||
_valori.destroy();
|
||||
}
|
||||
|
||||
class TStatSogxEta : public TApplication
|
||||
{
|
||||
TMask* _msk;
|
||||
TRelation* _rel;
|
||||
TFile_text* _trasfile;
|
||||
|
||||
TLocalisamfile* _soggetti;
|
||||
|
||||
TCursor* _cur;
|
||||
TLocalisamfile* _sezioni;
|
||||
TLocalisamfile* _soggetti;
|
||||
TLocalisamfile* _atstats;
|
||||
TAssoc_array* _colonne;
|
||||
TArray _righe;
|
||||
TString16 _sezini, _sotini, _sezfin, _sotfin;
|
||||
TString16 _catdon;
|
||||
TDate _data;
|
||||
TArray _etaini, _etafin;
|
||||
|
||||
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 write();
|
||||
|
||||
int data2row(const int eta);
|
||||
bool riepilogo();
|
||||
bool stampa();
|
||||
bool crea_colonne();
|
||||
bool crea_righe();
|
||||
void azzera_righe();
|
||||
void stampa_sezione(TString16 codsez, TString16 codsot);
|
||||
void crea_intestazione();
|
||||
public:
|
||||
TCarica_app() {}
|
||||
TStatSogxEta() {}
|
||||
|
||||
};
|
||||
|
||||
HIDDEN inline TCarica_app& app() { return (TCarica_app&) main_app(); }
|
||||
HIDDEN inline TStatSogxEta& app() { return (TStatSogxEta&) main_app(); }
|
||||
|
||||
bool TCarica_app::create()
|
||||
int TStatSogxEta::data2row(const int eta)
|
||||
{
|
||||
int indice = 0;
|
||||
for (int i=0; i<_etaini.items(); i++)
|
||||
{
|
||||
real valore;
|
||||
real* val1 = (real*) _etaini.objptr(i);
|
||||
valore = *val1;
|
||||
int etaini = valore.integer();
|
||||
real* val2 = (real*) _etafin.objptr(i);
|
||||
valore = *val2;
|
||||
int etafin = valore.integer();
|
||||
if ((eta >= etaini) && (eta <= etafin))
|
||||
indice = i;
|
||||
}
|
||||
return indice;
|
||||
}
|
||||
|
||||
bool TStatSogxEta::crea_colonne()
|
||||
{
|
||||
_colonne->destroy();
|
||||
real contatore(ZERO);
|
||||
real* oggetto = new real(contatore);
|
||||
const char* indice = "0";
|
||||
_colonne->add(indice,(TObject*)oggetto);
|
||||
indice = "1"; // maschi
|
||||
contatore = contatore+1;
|
||||
real* oggetto2 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto2);
|
||||
indice = "2"; // femmine
|
||||
contatore = contatore+1;
|
||||
real* oggetto3 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto3);
|
||||
indice = "9"; // non spec.
|
||||
contatore = contatore+1;
|
||||
real* oggetto4 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto4);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TStatSogxEta::crea_righe()
|
||||
{
|
||||
for (int i=0;i<_etaini.items();i++)
|
||||
{
|
||||
real valore;
|
||||
real* val1 = (real*) _etaini.objptr(i);
|
||||
valore = *val1;
|
||||
int etaini = valore.integer();
|
||||
real* val2 = (real*) _etafin.objptr(i);
|
||||
valore = *val2;
|
||||
int etafin = valore.integer();
|
||||
_righe.add(new TRigaSFascia(etaini, etafin), i);
|
||||
}
|
||||
return _righe.items()>0;
|
||||
}
|
||||
|
||||
bool TStatSogxEta::create()
|
||||
{
|
||||
TApplication::create();
|
||||
_msk = new TMask("at3100a");
|
||||
_rel = new TRelation(LF_SOGGETTI);
|
||||
_trasfile = new TFile_text("sogg.txt","sogg.ini");
|
||||
_soggetti = new TLocalisamfile(LF_SOGGETTI);
|
||||
_atstats = new TLocalisamfile(LF_ATSTATS);
|
||||
_sezioni = new TLocalisamfile(LF_SEZIONI);
|
||||
_colonne = new TAssoc_array();
|
||||
dispatch_e_menu(BAR_ITEM(1));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCarica_app::destroy()
|
||||
bool TStatSogxEta::destroy()
|
||||
{
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
delete _trasfile;
|
||||
delete _soggetti;
|
||||
delete _atstats;
|
||||
delete _sezioni;
|
||||
delete _colonne;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
bool TCarica_app::menu(MENU_TAG m)
|
||||
bool TStatSogxEta::menu(MENU_TAG m)
|
||||
{
|
||||
TMask& msk = get_mask();
|
||||
KEY tasto;
|
||||
do
|
||||
{
|
||||
tasto = msk.run();
|
||||
switch (tasto)
|
||||
{
|
||||
case K_ENTER: // registra
|
||||
{
|
||||
TCarica_app::write();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (tasto != K_QUIT);
|
||||
return FALSE;
|
||||
tasto = msk.run();
|
||||
if (tasto == K_ENTER)
|
||||
{
|
||||
_sezini = _msk->get(F_SEZINI);
|
||||
_sotini = _msk->get(F_SOTINI);
|
||||
_sezfin = _msk->get(F_SEZFIN);
|
||||
_sotfin = _msk->get(F_SOTFIN);
|
||||
_catdon = _msk->get(F_CATDON);
|
||||
_data = _msk->get_date(F_DATA);
|
||||
TSheet_field& s = (TSheet_field&)_msk->field(F_FASCIE);
|
||||
for (int r=0; r<s.items(); r++)
|
||||
{
|
||||
TToken_string& row = s.row(r);
|
||||
const int etaini = row.get_int(0);
|
||||
const int etafin = row.get_int();
|
||||
if (etaini != 0 || etafin != 0)
|
||||
{
|
||||
_etaini.add(new real(etaini),r);
|
||||
_etafin.add(new real(etafin),r);
|
||||
}
|
||||
}
|
||||
if (riepilogo())
|
||||
stampa();
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int TCarica_app::write()
|
||||
void TStatSogxEta::crea_intestazione()
|
||||
{
|
||||
|
||||
TProgind *pi;
|
||||
pi = new TProgind(10,"Caricamento dati da file di testo", FALSE, TRUE, 1);
|
||||
pi->setstatus(1);
|
||||
|
||||
_trasfile->open("sogg.txt",'r');
|
||||
_rel->lfile().setkey(2);
|
||||
_rel->write_enable();
|
||||
TRecord_text rec;
|
||||
while (_trasfile->ok_r())
|
||||
{
|
||||
pi->addstatus(1);
|
||||
if (_trasfile->read(rec) == NOERR)
|
||||
{
|
||||
_trasfile->autosave(*_rel, rec);
|
||||
}
|
||||
}
|
||||
delete pi;
|
||||
|
||||
return NOERR;
|
||||
TPrintrow row;
|
||||
TString256 sep;
|
||||
sep = "STATISTICA SOGGETTI PER SESSO E ETA' al ";
|
||||
sep << _data.string();
|
||||
sep.center_just(80);
|
||||
row.put(sep);
|
||||
row.put("@>", 1);
|
||||
row.put("Pag. @#", 70);
|
||||
printer().setheaderline(2, row);
|
||||
sep = "";
|
||||
sep << "Categoria ";
|
||||
sep << _catdon;
|
||||
sep.center_just(80);
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(3, row);
|
||||
sep = "";
|
||||
sep << "Fascia di eta' Sconosciuto Maschi Femmine Non spec. Totale";
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(5, row);
|
||||
sep = "";
|
||||
sep.fill('-');
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(6, row);
|
||||
}
|
||||
|
||||
bool TStatSogxEta::stampa()
|
||||
{
|
||||
if (printer().open())
|
||||
{
|
||||
crea_intestazione();
|
||||
TRelation* relstat = new TRelation(LF_ATSTATS);
|
||||
TCursor* curstat = new TCursor(relstat, "", 1);
|
||||
TString16 oldsez = "**";
|
||||
TString16 oldsot = "**";
|
||||
double numero;
|
||||
TString16 actsez, actsot;
|
||||
TString16 sesso;
|
||||
int fascia;
|
||||
long last = curstat->items();
|
||||
for ( *curstat=0; curstat->pos() < last; ++(*curstat) )
|
||||
{
|
||||
actsez = curstat->curr().get(ATSS_CODSEZ);
|
||||
actsot = curstat->curr().get(ATSS_CODSOT);
|
||||
fascia = curstat->curr().get_int(ATSS_FASCIA);
|
||||
sesso = curstat->curr().get(ATSS_SESSO);
|
||||
if (sesso.empty())
|
||||
sesso = "9";
|
||||
numero = (double)curstat->curr().get_int(ATSS_NUMERO);
|
||||
if (actsez != oldsez || actsot != oldsot)
|
||||
{
|
||||
if (oldsez != "**" && oldsot != "**")
|
||||
{
|
||||
stampa_sezione(oldsez,oldsot);
|
||||
azzera_righe();
|
||||
}
|
||||
oldsez = actsez;
|
||||
oldsot = actsot;
|
||||
}
|
||||
TRigaSFascia& riga = (TRigaSFascia&)_righe[fascia];
|
||||
real& colonna = (real&)_colonne->find((const char*)sesso);
|
||||
real n = numero;
|
||||
riga.aggiorna_valore(colonna.integer(),n);
|
||||
}
|
||||
if (oldsez != "**" && oldsot != "**")
|
||||
stampa_sezione(oldsez,oldsot);
|
||||
delete curstat;
|
||||
delete relstat;
|
||||
printer().close();
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TStatSogxEta::azzera_righe()
|
||||
{
|
||||
for (int i=0;i<_etaini.items();i++)
|
||||
{
|
||||
TRigaSFascia& riga = (TRigaSFascia&)_righe[i];
|
||||
riga.azzera_valori();
|
||||
}
|
||||
}
|
||||
|
||||
void TStatSogxEta::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);
|
||||
|
||||
TRigaSFascia rigatotali(0,0);
|
||||
TString16 valore;
|
||||
real totalefascia = ZERO;
|
||||
for (int r=0;r<_etaini.items();r++)
|
||||
{
|
||||
TRigaSFascia& riga = (TRigaSFascia&)_righe[r];
|
||||
row.reset();
|
||||
real valreal;
|
||||
rigastampa = "da ";
|
||||
real* val1 = (real*)_etaini.objptr(r);
|
||||
valreal = *val1;
|
||||
rigastampa << valreal.string();
|
||||
rigastampa << " a ";
|
||||
real* val2 = (real*)_etafin.objptr(r);
|
||||
valreal = *val2;
|
||||
rigastampa << valreal.string();
|
||||
rigastampa << " anni";
|
||||
totalefascia = ZERO;
|
||||
// ciclo per totali
|
||||
for (int i=0;i<_colonne->items();i++)
|
||||
{
|
||||
rigatotali.aggiorna_valore(i,riga[i]);
|
||||
totalefascia+=riga[i];
|
||||
}
|
||||
// ciclo per stampa
|
||||
int pos = 15;
|
||||
for (int j=0;j<_colonne->items();j++)
|
||||
{
|
||||
//rigatotali.aggiorna_valore(i,riga[i]);
|
||||
//totalefascia+=riga[i];
|
||||
valore = "";
|
||||
valore.format("%8d",riga[i].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
real perc = (riga[j]/totalefascia)*100;
|
||||
pos=pos+6;
|
||||
valore = "";
|
||||
valore << perc.string(3,2);
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+10;
|
||||
}
|
||||
if (totalefascia != 0)
|
||||
{
|
||||
valore = "";
|
||||
valore.format("%8d",totalefascia.integer());
|
||||
rigastampa.overwrite((const char*)valore, pos+4);
|
||||
row.put((const char*) rigastampa);
|
||||
printer().print(row);
|
||||
}
|
||||
}
|
||||
|
||||
// stampa totali per sezione
|
||||
rigastampa = "";
|
||||
rigastampa.fill('-');
|
||||
row.reset();
|
||||
row.put(rigastampa);
|
||||
printer().print(row);
|
||||
row.reset();
|
||||
rigastampa = "";
|
||||
rigastampa = "Totale";
|
||||
real totale;
|
||||
totale = ZERO;
|
||||
int pos = 21;
|
||||
for (int i=0;i<_colonne->items();i++)
|
||||
{
|
||||
totale+=rigatotali[i];
|
||||
valore = "";
|
||||
valore.format("%8d",rigatotali[i].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+10;
|
||||
}
|
||||
valore = "";
|
||||
valore.format("%8d",totale.integer());
|
||||
rigastampa.overwrite((const char*)valore, pos+4);
|
||||
row.put((const char*) rigastampa);
|
||||
printer().print(row);
|
||||
printer().formfeed();
|
||||
}
|
||||
|
||||
bool TStatSogxEta::riepilogo()
|
||||
{
|
||||
if (crea_colonne() && crea_righe())
|
||||
{
|
||||
// cancello i risultati della elaborazione precedente
|
||||
TLocalisamfile stat(LF_ATSTATS);
|
||||
for (stat.first(); !stat.eof(); stat.next())
|
||||
stat.remove();
|
||||
stat.setkey(1);
|
||||
_cur = new TCursor(_rel, "", 1);
|
||||
TString256 filtro = "";
|
||||
|
||||
// filtro per categoria
|
||||
if (_catdon.not_empty())
|
||||
{
|
||||
if (filtro.empty())
|
||||
filtro = format("(90->CATDON == \"%s\")",(const char*)_catdon);
|
||||
else
|
||||
{
|
||||
filtro << " && ";
|
||||
filtro << format("(90->CATDON == \"%s\")",(const char*)_catdon);
|
||||
}
|
||||
if (_data.ok())
|
||||
{
|
||||
TTable ctd("CTD");
|
||||
ctd.put("CODTAB",_catdon);
|
||||
if (ctd.read() == NOERR)
|
||||
{
|
||||
bool dimissione = ctd.get_bool("B0");
|
||||
if (dimissione)
|
||||
filtro << " && (ANSI(90->DATADIM)<=" << _data.string(ANSI) << ")";
|
||||
else
|
||||
filtro << " && (ANSI(90->DATAISC)<=" << _data.string(ANSI) << ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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;
|
||||
long numero;
|
||||
TString16 sesso;
|
||||
int eta, fascia;
|
||||
TDate datanasc;
|
||||
|
||||
const TDate oggi(TODAY);
|
||||
const int anno = oggi.year();
|
||||
TRectype& recsog = _cur->curr();
|
||||
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 = recsog.get(SOG_CODSEZ);
|
||||
codsot = recsog.get(SOG_CODSOT);
|
||||
datanasc = recsog.get_date(SOG_DATANASC);
|
||||
eta = _data.year() - datanasc.year();
|
||||
fascia = data2row(eta);
|
||||
sesso = recsog.get(SOG_SESSO);
|
||||
if (sesso.empty())
|
||||
sesso = "9";
|
||||
stat.zero();
|
||||
stat.put(ATSS_CODSEZ, codsez);
|
||||
stat.put(ATSS_CODSOT, codsot);
|
||||
stat.put(ATSS_SESSO, sesso);
|
||||
stat.put(ATSS_FASCIA, fascia);
|
||||
if (stat.read() == NOERR)
|
||||
{
|
||||
numero = stat.get_long(ATSS_NUMERO);
|
||||
numero++;
|
||||
stat.put(ATSS_NUMERO, numero);
|
||||
stat.rewrite();
|
||||
}
|
||||
else
|
||||
{
|
||||
stat.put(ATSS_CODSEZ, codsez);
|
||||
stat.put(ATSS_CODSOT, codsot);
|
||||
stat.put(ATSS_SESSO, sesso);
|
||||
stat.put(ATSS_FASCIA, fascia);
|
||||
numero = 1;
|
||||
stat.put(ATSS_NUMERO, numero);
|
||||
stat.write();
|
||||
}
|
||||
}
|
||||
return (stat.eod() > 0);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int at3100(int argc, char* argv[])
|
||||
{
|
||||
TCarica_app a;
|
||||
a.run(argc, argv, "Carica dati da file di testo");
|
||||
TStatSogxEta a;
|
||||
a.run(argc, argv, "Statistica soggetti per sesso e eta'");
|
||||
return 0;
|
||||
}
|
19
at/at3100a.h
Executable file
19
at/at3100a.h
Executable file
@ -0,0 +1,19 @@
|
||||
// statistica donatori per sesso e fascie di eta'
|
||||
// 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_CATDON 301
|
||||
#define F_D_CATDON 302
|
||||
#define F_DATA 303
|
||||
#define F_FASCIE 304
|
||||
|
||||
#define F_ETAINI 101
|
||||
#define F_ETAFIN 102
|
198
at/at3100a.uml
198
at/at3100a.uml
@ -1,22 +1,204 @@
|
||||
TOOLBAR "" 0 20 0 2
|
||||
#include "at3100a.h"
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
PAGE "Statistica donatori per sesso e fascie di eta'" -1 -1 78 20
|
||||
|
||||
GROUPBOX DLG_NULL 77 4
|
||||
BEGIN
|
||||
PROMPT -12 -11 ""
|
||||
PROMPT 1 1 "Scelta sezioni/sottogruppi"
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
STRING F_SEZINI 2
|
||||
BEGIN
|
||||
PROMPT -22 -11 ""
|
||||
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
|
||||
|
||||
ENDPAGE
|
||||
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
|
||||
|
||||
PAGE "Trasferimento dati da file di testo: prova" -1 -1 78 20
|
||||
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 14
|
||||
BEGIN
|
||||
PROMPT 1 5 "Opzioni per la statistica"
|
||||
END
|
||||
|
||||
STRING F_CATDON 2
|
||||
BEGIN
|
||||
PROMPT 2 6 "Cat. "
|
||||
FLAGS "U"
|
||||
USE CTD
|
||||
INPUT CODTAB F_CATDON
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@40" S0
|
||||
OUTPUT F_CATDON CODTAB
|
||||
OUTPUT F_D_CATDON S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice categoria non presente"
|
||||
HELP "Categoria di appartenenza"
|
||||
END
|
||||
|
||||
STRING F_D_CATDON 25
|
||||
BEGIN
|
||||
PROMPT 12 6 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
DATE F_DATA
|
||||
BEGIN
|
||||
PROMPT 45 6 "Data elaborazione "
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 5 5 "Premere CONFERMA per iniziare"
|
||||
PROMPT 2 7 "Fascie di eta'"
|
||||
END
|
||||
|
||||
SPREADSHEET F_FASCIE 15 9
|
||||
BEGIN
|
||||
PROMPT 3 8 ""
|
||||
ITEM "Da "
|
||||
ITEM "A "
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
PAGE "Fascia di eta'" -1 -1 75 16
|
||||
|
||||
NUMBER F_ETAINI 3
|
||||
BEGIN
|
||||
PROMPT 2 2 "Eta' iniziale "
|
||||
END
|
||||
|
||||
NUMBER F_ETAFIN 3
|
||||
BEGIN
|
||||
PROMPT 3 2 "Eta' finale "
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 9 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 9 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 ""
|
||||
MESSAGE EXIT, K_DEL
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
642
at/at3200.cpp
Executable file
642
at/at3200.cpp
Executable file
@ -0,0 +1,642 @@
|
||||
#include <applicat.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 "at3.h"
|
||||
|
||||
// nomi campi maschera
|
||||
#include "at3200a.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 TRigaMDxG : public TObject
|
||||
{
|
||||
int _anno, _mese;
|
||||
TArray _valori;
|
||||
|
||||
protected:
|
||||
const TRigaMDxG& copy(const TRigaMDxG& riga);
|
||||
public:
|
||||
const int anno() const { return _anno; }
|
||||
const int mese() const { return _mese; }
|
||||
TObject* dup() const { return new TRigaMDxG(*this); }
|
||||
const TRigaMDxG& operator = (const TRigaMDxG& riga);
|
||||
const real& operator [] (int colonna) const;
|
||||
void aggiorna_valore(int colonna, const real& numero) ;
|
||||
void azzera_valori();
|
||||
// costruttore
|
||||
TRigaMDxG(int anno, int mese) {_anno = anno; _mese = mese;}
|
||||
// costruttore di copia
|
||||
TRigaMDxG(const TRigaMDxG& riga) { copy(riga); }
|
||||
virtual ~TRigaMDxG() {};
|
||||
};
|
||||
|
||||
const TRigaMDxG& TRigaMDxG::copy(const TRigaMDxG& riga)
|
||||
{
|
||||
_anno = riga._anno;
|
||||
_mese = riga._mese;
|
||||
_valori = riga._valori;
|
||||
return (*this);
|
||||
}
|
||||
|
||||
const TRigaMDxG& TRigaMDxG::operator = (const TRigaMDxG& riga)
|
||||
{
|
||||
copy(riga);
|
||||
return (*this);
|
||||
}
|
||||
|
||||
const real& TRigaMDxG::operator [] (int colonna) const
|
||||
{
|
||||
real* valore = (real*)_valori.objptr(colonna);
|
||||
if (valore == NULL)
|
||||
return ZERO;
|
||||
else
|
||||
return *valore;
|
||||
}
|
||||
|
||||
void TRigaMDxG::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 TRigaMDxG::azzera_valori()
|
||||
{
|
||||
_valori.destroy();
|
||||
}
|
||||
|
||||
class TMensileDonxGr : public TApplication
|
||||
{
|
||||
TMask* _msk;
|
||||
TRelation* _rel;
|
||||
TCursor* _cur;
|
||||
TLocalisamfile* _sezioni;
|
||||
TLocalisamfile* _soggetti;
|
||||
TLocalisamfile* _donaz;
|
||||
TLocalisamfile* _atstatd;
|
||||
TDate _dataini, _datafin;
|
||||
TAssoc_array* _colonne;
|
||||
TArray _righe; // array per riepilogo donazioni
|
||||
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);
|
||||
TString16 gruppo2col(TString16 gruppo, TString16 rh);
|
||||
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:
|
||||
TMensileDonxGr() {}
|
||||
|
||||
};
|
||||
|
||||
HIDDEN inline TMensileDonxGr& app() { return (TMensileDonxGr&) main_app(); }
|
||||
|
||||
TString16 TMensileDonxGr::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 TMensileDonxGr::data2row(const int anno, const int mese)
|
||||
{
|
||||
const int annoini = _dataini.year();
|
||||
return (anno-annoini)*12 + mese;
|
||||
}
|
||||
|
||||
bool TMensileDonxGr::crea_colonne()
|
||||
{
|
||||
_colonne->destroy();
|
||||
real contatore(ZERO);
|
||||
real* oggetto = new real(contatore);
|
||||
const char* indice = "0P";
|
||||
_colonne->add(indice,(TObject*)oggetto);
|
||||
indice = "0N";
|
||||
contatore = contatore+1;
|
||||
real* oggetto2 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto2);
|
||||
indice = "AP";
|
||||
contatore = contatore+1;
|
||||
real* oggetto3 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto3);
|
||||
indice = "AN";
|
||||
contatore = contatore+1;
|
||||
real* oggetto4 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto4);
|
||||
indice = "BP";
|
||||
contatore = contatore+1;
|
||||
real* oggetto5 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto5);
|
||||
indice = "BN";
|
||||
contatore = contatore+1;
|
||||
real* oggetto6 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto6);
|
||||
indice = "CP";
|
||||
contatore = contatore+1;
|
||||
real* oggetto7 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto7);
|
||||
indice = "CN";
|
||||
contatore = contatore+1;
|
||||
real* oggetto8 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto8);
|
||||
indice = "NN";
|
||||
contatore = contatore+1;
|
||||
real* oggetto9 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto9);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
TString16 TMensileDonxGr::gruppo2col(TString16 gruppo, TString16 rh)
|
||||
{
|
||||
TString16 indice = "NN";
|
||||
if (gruppo == "0")
|
||||
indice = "0";
|
||||
if (gruppo == "A")
|
||||
indice = "A";
|
||||
if (gruppo == "A1")
|
||||
indice = "A";
|
||||
if (gruppo == "A2")
|
||||
indice = "A";
|
||||
if (gruppo == "A1B")
|
||||
indice = "C";
|
||||
if (gruppo == "A2B")
|
||||
indice = "C";
|
||||
if (gruppo == "AB")
|
||||
indice = "C";
|
||||
if (gruppo == "B")
|
||||
indice = "B";
|
||||
if (rh.empty())
|
||||
indice = "NN";
|
||||
if (rh == "POS")
|
||||
indice << "P";;
|
||||
if (rh == "NEG")
|
||||
indice << "N";;
|
||||
return indice;
|
||||
}
|
||||
bool TMensileDonxGr::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 TRigaMDxG(anno, mese), data2row(anno, mese));
|
||||
anno++;
|
||||
}
|
||||
return _righe.items()>0;
|
||||
}
|
||||
|
||||
bool TMensileDonxGr::create()
|
||||
{
|
||||
TApplication::create();
|
||||
_msk = new TMask("at3200a");
|
||||
_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 TMensileDonxGr::destroy()
|
||||
{
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
delete _soggetti;
|
||||
delete _donaz;
|
||||
delete _atstatd;
|
||||
delete _sezioni;
|
||||
delete _colonne;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
bool TMensileDonxGr::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);
|
||||
_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 TMensileDonxGr::crea_intestazione()
|
||||
{
|
||||
TPrintrow row;
|
||||
TString256 sep;
|
||||
sep = "MENSILE DONAZIONI PER GRUPPO E RH";
|
||||
sep.center_just(80);
|
||||
row.put(sep);
|
||||
row.put("@>", 1);
|
||||
row.put("Pag. @#", 70);
|
||||
printer().setheaderline(2, row);
|
||||
row.reset();
|
||||
sep = "";
|
||||
if (_dataini.ok())
|
||||
{
|
||||
sep << " dal ";
|
||||
sep << _dataini.string();
|
||||
}
|
||||
if (_datafin.ok())
|
||||
{
|
||||
sep << " al ";
|
||||
sep << _datafin.string();
|
||||
}
|
||||
sep.center_just(80);
|
||||
row.put(sep);
|
||||
printer().setheaderline(3, row);
|
||||
row.reset();
|
||||
printer().setheaderline(4, row);
|
||||
sep = "Mese ";
|
||||
int pos = 21;
|
||||
sep.overwrite("0 POS 0 NEG A POS A NEG B POS B NEG AB POS AB NEG NON DEF. TOTALE",pos);
|
||||
//sep.overwrite("Totale",pos);
|
||||
row.put(sep);
|
||||
printer().setheaderline(5, row);
|
||||
sep = "";
|
||||
sep.fill('-');
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(6, row);
|
||||
}
|
||||
|
||||
bool TMensileDonxGr::stampa()
|
||||
{
|
||||
if (printer().open())
|
||||
{
|
||||
crea_intestazione();
|
||||
TRelation* relstat = new TRelation(LF_ATSTATD);
|
||||
TCursor* curstat = new TCursor(relstat, "", 1);
|
||||
TString16 oldsez = "**";
|
||||
TString16 oldsot = "**";
|
||||
double numero;
|
||||
TString16 actsez, actsot, gruppo, rh;
|
||||
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);
|
||||
gruppo = curstat->curr().get(ATS_GRUPPO);
|
||||
rh = curstat->curr().get(ATS_RH);
|
||||
numero = (double)curstat->curr().get_int(ATS_NUMERO);
|
||||
if (actsez != oldsez || actsot != oldsot)
|
||||
{
|
||||
if (oldsez != "**" && oldsot != "**")
|
||||
{
|
||||
stampa_sezione(oldsez,oldsot);
|
||||
azzera_righe();
|
||||
}
|
||||
oldsez = actsez;
|
||||
oldsot = actsot;
|
||||
}
|
||||
TRigaMDxG& riga = (TRigaMDxG&)_righe[data2row(anno,mese)];
|
||||
TString16 indcol = gruppo2col(gruppo,rh);
|
||||
real& colonna = (real&)_colonne->find((const char*)indcol);
|
||||
real n = numero;
|
||||
riga.aggiorna_valore(colonna.integer(),n);
|
||||
}
|
||||
if (oldsez != "**" && oldsot != "**")
|
||||
stampa_sezione(oldsez,oldsot);
|
||||
delete curstat;
|
||||
delete relstat;
|
||||
printer().close();
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TMensileDonxGr::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++)
|
||||
{
|
||||
TRigaMDxG& riga = (TRigaMDxG&)_righe[data2row(anno,mese)];
|
||||
riga.azzera_valori();
|
||||
}
|
||||
anno++;
|
||||
}
|
||||
}
|
||||
|
||||
void TMensileDonxGr::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);
|
||||
|
||||
TRigaMDxG 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++)
|
||||
{
|
||||
TRigaMDxG& riga = (TRigaMDxG&)_righe[data2row(anno,mese)];
|
||||
row.reset();
|
||||
rigastampa = "";
|
||||
rigastampa.format("%s %4d", (const char*)int2month(mese), anno);
|
||||
totalemese = ZERO;
|
||||
int pos = 16;
|
||||
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+8;
|
||||
}
|
||||
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 = 16;
|
||||
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+8;
|
||||
}
|
||||
valore = "";
|
||||
valore.format("%8d",totalemese.integer());
|
||||
rigastampa.overwrite((const char*)valore, pos+4);
|
||||
row.put((const char*) rigastampa);
|
||||
printer().print(row);
|
||||
printer().formfeed();
|
||||
}
|
||||
|
||||
bool TMensileDonxGr::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(1);
|
||||
// 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, gruppo, rh;
|
||||
TDate datadon;
|
||||
int anno, mese;
|
||||
long numero;
|
||||
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);
|
||||
anno = datadon.year();
|
||||
mese = datadon.month();
|
||||
gruppo = recsog.get(SOG_GRUPPOAB0);
|
||||
rh = recsog.get(SOG_RHANTID);
|
||||
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, " ");
|
||||
stat.put(ATS_GRUPPO, gruppo);
|
||||
stat.put(ATS_RH, rh);
|
||||
if (stat.read() == NOERR)
|
||||
{
|
||||
numero = stat.get_long(ATS_NUMERO);
|
||||
numero++;
|
||||
stat.put(ATS_NUMERO, 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, " ");
|
||||
stat.put(ATS_GRUPPO, gruppo);
|
||||
stat.put(ATS_RH, rh);
|
||||
numero = 1;
|
||||
stat.put(ATS_NUMERO, numero);
|
||||
stat.write();
|
||||
}
|
||||
}
|
||||
return (stat.eod() > 0);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int at3200(int argc, char* argv[])
|
||||
{
|
||||
TMensileDonxGr a;
|
||||
a.run(argc, argv, "Mensile donazioni per gruppo e rh");
|
||||
return 0;
|
||||
}
|
16
at/at3200a.h
Executable file
16
at/at3200a.h
Executable file
@ -0,0 +1,16 @@
|
||||
// statistica donazioni per gruppo e rh
|
||||
// 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_TIPODON 303
|
||||
//#define F_D_TIPODON 304
|
168
at/at3200a.uml
Executable file
168
at/at3200a.uml
Executable file
@ -0,0 +1,168 @@
|
||||
#include "at3200a.h"
|
||||
|
||||
PAGE "Mensile donazioni per gruppo e rh" -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 la statistica"
|
||||
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
|
||||
|
||||
//STRING F_TIPODON 2
|
||||
//BEGIN
|
||||
// PROMPT 2 7 "Tipo donazioni "
|
||||
// FLAGS "U"
|
||||
// USE TDN
|
||||
// INPUT CODTAB F_TIPODON
|
||||
// DISPLAY "Codice" CODTAB
|
||||
// DISPLAY "Descrizione@30" S0
|
||||
// OUTPUT F_TIPODON CODTAB
|
||||
// OUTPUT F_D_TIPODON S0
|
||||
// CHECKTYPE NORMAL
|
||||
// WARNING "Codice non presente"
|
||||
//END
|
||||
|
||||
//STRING F_D_TIPODON 30
|
||||
//BEGIN
|
||||
// PROMPT 23 7 ""
|
||||
// FLAGS "D"
|
||||
//END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
526
at/at3300.cpp
Executable file
526
at/at3300.cpp
Executable file
@ -0,0 +1,526 @@
|
||||
#include <applicat.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 "at3.h"
|
||||
|
||||
// nomi campi maschera
|
||||
#include "at3300a.h"
|
||||
|
||||
// nomi dei campi
|
||||
#include "soggetti.h"
|
||||
#include "atstats.h"
|
||||
#include "sezioni.h"
|
||||
|
||||
// classe per la definizione di una riga di statistica
|
||||
class TRigaSxCat : public TObject
|
||||
{
|
||||
TString16 _catdon;
|
||||
TArray _valori;
|
||||
|
||||
protected:
|
||||
const TRigaSxCat& copy(const TRigaSxCat& riga);
|
||||
public:
|
||||
const TString16 catdon() const { return _catdon; }
|
||||
TObject* dup() const { return new TRigaSxCat(*this); }
|
||||
const TRigaSxCat& operator = (const TRigaSxCat& riga);
|
||||
const real& operator [] (int colonna) const;
|
||||
void aggiorna_valore(int colonna, const real& numero) ;
|
||||
void azzera_valori();
|
||||
// costruttore
|
||||
TRigaSxCat(TString16 catdon) {_catdon = catdon;}
|
||||
// costruttore di copia
|
||||
TRigaSxCat(const TRigaSxCat& riga) { copy(riga); }
|
||||
virtual ~TRigaSxCat() {};
|
||||
};
|
||||
|
||||
const TRigaSxCat& TRigaSxCat::copy(const TRigaSxCat& riga)
|
||||
{
|
||||
_catdon = riga._catdon;
|
||||
_valori = riga._valori;
|
||||
return (*this);
|
||||
}
|
||||
|
||||
const TRigaSxCat& TRigaSxCat::operator = (const TRigaSxCat& riga)
|
||||
{
|
||||
copy(riga);
|
||||
return (*this);
|
||||
}
|
||||
|
||||
const real& TRigaSxCat::operator [] (int colonna) const
|
||||
{
|
||||
real* valore = (real*)_valori.objptr(colonna);
|
||||
if (valore == NULL)
|
||||
return ZERO;
|
||||
else
|
||||
return *valore;
|
||||
}
|
||||
|
||||
void TRigaSxCat::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 TRigaSxCat::azzera_valori()
|
||||
{
|
||||
_valori.destroy();
|
||||
}
|
||||
|
||||
class TStatSogxCat : public TApplication
|
||||
{
|
||||
TMask* _msk;
|
||||
TRelation* _rel;
|
||||
TCursor* _cur;
|
||||
TLocalisamfile* _sezioni;
|
||||
TLocalisamfile* _soggetti;
|
||||
TLocalisamfile* _atstats;
|
||||
TAssoc_array* _colonne;
|
||||
TAssoc_array* _categorie;
|
||||
TArray _righe;
|
||||
TString16 _sezini, _sotini, _sezfin, _sotfin;
|
||||
TDate _dataini, _datafin;
|
||||
|
||||
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 TString16 catdon);
|
||||
bool riepilogo();
|
||||
bool stampa();
|
||||
bool crea_colonne();
|
||||
bool crea_righe();
|
||||
void azzera_righe();
|
||||
void stampa_sezione(TString16 codsez, TString16 codsot);
|
||||
void crea_intestazione();
|
||||
public:
|
||||
TStatSogxCat() {}
|
||||
|
||||
};
|
||||
|
||||
HIDDEN inline TStatSogxCat& app() { return (TStatSogxCat&) main_app(); }
|
||||
|
||||
int TStatSogxCat::data2row(const TString16 catdon)
|
||||
{
|
||||
real& indicer = (real&)_categorie->find((const char*) catdon);
|
||||
return indicer.integer();
|
||||
}
|
||||
|
||||
bool TStatSogxCat::crea_colonne()
|
||||
{
|
||||
_colonne->destroy();
|
||||
real contatore(ZERO);
|
||||
real* oggetto = new real(contatore);
|
||||
const char* indice = "N"; // nuovi
|
||||
_colonne->add(indice,(TObject*)oggetto);
|
||||
indice = "T"; // totale
|
||||
contatore = contatore+1;
|
||||
real* oggetto2 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto2);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TStatSogxCat::crea_righe()
|
||||
{
|
||||
TTable ctd("CTD");
|
||||
TString16 catdon = "**";
|
||||
int indice = 0;
|
||||
_categorie->destroy();
|
||||
real* oggetto1 = new real(indice);
|
||||
_categorie->add((const char*) catdon, (TObject*) oggetto1);
|
||||
_righe.add(new TRigaSxCat(catdon), indice);
|
||||
for (ctd.first(); !ctd.eof(); ctd.next())
|
||||
{
|
||||
indice++;
|
||||
catdon = ctd.get("CODTAB");
|
||||
_righe.add(new TRigaSxCat(catdon), indice);
|
||||
real* oggetto = new real(indice);
|
||||
_categorie->add((const char*) catdon,(TObject*) oggetto);
|
||||
}
|
||||
return _righe.items()>0;
|
||||
}
|
||||
|
||||
bool TStatSogxCat::create()
|
||||
{
|
||||
TApplication::create();
|
||||
_msk = new TMask("at3300a");
|
||||
_rel = new TRelation(LF_SOGGETTI);
|
||||
_soggetti = new TLocalisamfile(LF_SOGGETTI);
|
||||
_atstats = new TLocalisamfile(LF_ATSTATS);
|
||||
_sezioni = new TLocalisamfile(LF_SEZIONI);
|
||||
_colonne = new TAssoc_array();
|
||||
_categorie = new TAssoc_array();
|
||||
dispatch_e_menu(BAR_ITEM(1));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TStatSogxCat::destroy()
|
||||
{
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
delete _soggetti;
|
||||
delete _atstats;
|
||||
delete _sezioni;
|
||||
delete _colonne;
|
||||
delete _categorie;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
bool TStatSogxCat::menu(MENU_TAG m)
|
||||
{
|
||||
TMask& msk = get_mask();
|
||||
KEY tasto;
|
||||
tasto = msk.run();
|
||||
if (tasto == K_ENTER)
|
||||
{
|
||||
_sezini = _msk->get(F_SEZINI);
|
||||
_sotini = _msk->get(F_SOTINI);
|
||||
_sezfin = _msk->get(F_SEZFIN);
|
||||
_sotfin = _msk->get(F_SOTFIN);
|
||||
_dataini = _msk->get_date(F_DATAINI);
|
||||
_datafin = _msk->get_date(F_DATAFIN);
|
||||
if (riepilogo())
|
||||
stampa();
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TStatSogxCat::crea_intestazione()
|
||||
{
|
||||
TPrintrow row;
|
||||
TString256 sep;
|
||||
sep = "STATISTICA SOGGETTI PER CATEGORIA";
|
||||
sep.center_just(80);
|
||||
row.put(sep);
|
||||
row.put("@>", 1);
|
||||
row.put("Pag. @#", 70);
|
||||
printer().setheaderline(2, row);
|
||||
sep = "dal ";
|
||||
sep << _dataini.string();
|
||||
sep << " al ";
|
||||
sep << _datafin.string();
|
||||
sep.center_just(80);
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(3, row);
|
||||
sep = "";
|
||||
sep << "Categoria Nuovi Totale";
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(5, row);
|
||||
sep = "";
|
||||
sep.fill('-');
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(6, row);
|
||||
}
|
||||
|
||||
bool TStatSogxCat::stampa()
|
||||
{
|
||||
if (printer().open())
|
||||
{
|
||||
crea_intestazione();
|
||||
TRelation* relstat = new TRelation(LF_ATSTATS);
|
||||
TCursor* curstat = new TCursor(relstat, "", 1);
|
||||
TString16 oldsez = "**";
|
||||
TString16 oldsot = "**";
|
||||
double numero, numero2;
|
||||
TString16 actsez, actsot;
|
||||
TString16 catdon;
|
||||
long last = curstat->items();
|
||||
for ( *curstat=0; curstat->pos() < last; ++(*curstat) )
|
||||
{
|
||||
actsez = curstat->curr().get(ATSS_CODSEZ);
|
||||
actsot = curstat->curr().get(ATSS_CODSOT);
|
||||
catdon = curstat->curr().get(ATSS_CATDON);
|
||||
numero = (double)curstat->curr().get_int(ATSS_NUMERO);
|
||||
numero2 = (double)curstat->curr().get_int(ATSS_NUMERO2);
|
||||
if (actsez != oldsez || actsot != oldsot)
|
||||
{
|
||||
if (oldsez != "**" && oldsot != "**")
|
||||
{
|
||||
stampa_sezione(oldsez,oldsot);
|
||||
azzera_righe();
|
||||
}
|
||||
oldsez = actsez;
|
||||
oldsot = actsot;
|
||||
}
|
||||
if (catdon.empty())
|
||||
catdon = "**";
|
||||
TRigaSxCat& riga = (TRigaSxCat&)_righe[data2row(catdon)];
|
||||
const char* indicen = "N";
|
||||
real& colonnan = (real&)_colonne->find(indicen);
|
||||
real n = numero;
|
||||
riga.aggiorna_valore(colonnan.integer(),n);
|
||||
const char* indicet = "T";
|
||||
real& colonnat = (real&)_colonne->find(indicet);
|
||||
n = numero2;
|
||||
riga.aggiorna_valore(colonnat.integer(),n);
|
||||
}
|
||||
if (oldsez != "**" && oldsot != "**")
|
||||
stampa_sezione(oldsez,oldsot);
|
||||
delete curstat;
|
||||
delete relstat;
|
||||
printer().close();
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TStatSogxCat::azzera_righe()
|
||||
{
|
||||
TString16 catdon = "**";
|
||||
int indice = data2row(catdon);
|
||||
TRigaSxCat& riga = (TRigaSxCat&)_righe[indice];
|
||||
riga.azzera_valori();
|
||||
TTable ctd("CTD");
|
||||
for (ctd.first(); !ctd.eof(); ctd.next())
|
||||
{
|
||||
catdon = ctd.get("CODTAB");
|
||||
indice = data2row(catdon);
|
||||
TRigaSxCat& riga = (TRigaSxCat&)_righe[indice];
|
||||
riga.azzera_valori();
|
||||
}
|
||||
}
|
||||
|
||||
void TStatSogxCat::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);
|
||||
|
||||
TRigaSxCat rigatotali(" ");
|
||||
TString16 valore;
|
||||
TString16 catdon;
|
||||
|
||||
TTable ctd("CTD");
|
||||
for (ctd.first(); !ctd.eof(); ctd.next())
|
||||
{
|
||||
TString16 catdon = ctd.get("CODTAB");
|
||||
TRigaSxCat& riga = (TRigaSxCat&)_righe[data2row(catdon)];
|
||||
row.reset();
|
||||
rigastampa = "";
|
||||
rigastampa << catdon;
|
||||
rigastampa << " ";
|
||||
rigastampa << ctd.get("S0");
|
||||
int pos = 41;
|
||||
const char* indicen = "N";
|
||||
real& colonnan = (real&)_colonne->find(indicen);
|
||||
rigatotali.aggiorna_valore(colonnan.integer(),riga[colonnan.integer()]);
|
||||
valore = "";
|
||||
valore.format("%8d",riga[colonnan.integer()].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+8;
|
||||
const char* indicet = "T";
|
||||
real& colonnat = (real&)_colonne->find(indicet);
|
||||
rigatotali.aggiorna_valore(colonnat.integer(),riga[colonnat.integer()]);
|
||||
valore = "";
|
||||
valore.format("%8d",riga[colonnat.integer()].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+8;
|
||||
row.put((const char*) rigastampa);
|
||||
printer().print(row);
|
||||
}
|
||||
|
||||
// stampa totali per sezione
|
||||
rigastampa = "";
|
||||
rigastampa.fill('-');
|
||||
row.reset();
|
||||
row.put(rigastampa);
|
||||
printer().print(row);
|
||||
row.reset();
|
||||
rigastampa = "";
|
||||
rigastampa = "Totale";
|
||||
int pos = 41;
|
||||
const char* indicen = "N";
|
||||
real& colonnan = (real&)_colonne->find(indicen);
|
||||
valore = "";
|
||||
valore.format("%8d",rigatotali[colonnan.integer()].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+8;
|
||||
const char* indicet = "T";
|
||||
real& colonnat = (real&)_colonne->find(indicet);
|
||||
valore = "";
|
||||
valore.format("%8d",rigatotali[colonnat.integer()].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+8;
|
||||
row.put((const char*) rigastampa);
|
||||
printer().print(row);
|
||||
printer().formfeed();
|
||||
}
|
||||
|
||||
bool TStatSogxCat::riepilogo()
|
||||
{
|
||||
if (crea_colonne() && crea_righe())
|
||||
{
|
||||
// cancello i risultati della elaborazione precedente
|
||||
TLocalisamfile stat(LF_ATSTATS);
|
||||
for (stat.first(); !stat.eof(); stat.next())
|
||||
stat.remove();
|
||||
stat.setkey(1);
|
||||
_cur = new TCursor(_rel, "", 1);
|
||||
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;
|
||||
long numero,numero2;
|
||||
TString16 catdon;
|
||||
TDate dataisc, datadim;
|
||||
bool nuovo, totale;
|
||||
TTable ctd("CTD");
|
||||
TRectype& recsog = _cur->curr();
|
||||
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);
|
||||
nuovo = FALSE;
|
||||
totale = FALSE;
|
||||
codsez = recsog.get(SOG_CODSEZ);
|
||||
codsot = recsog.get(SOG_CODSOT);
|
||||
catdon = recsog.get(SOG_CATDON);
|
||||
if (catdon.not_empty())
|
||||
{
|
||||
ctd.put("CODTAB",catdon);
|
||||
if (ctd.read() == NOERR)
|
||||
{
|
||||
bool dimissione = ctd.get_bool("B0");
|
||||
if (dimissione)
|
||||
{
|
||||
datadim = recsog.get_date(SOG_DATADIM);
|
||||
nuovo = (datadim >= _dataini && datadim <= _datafin);
|
||||
totale = (datadim <= _datafin);
|
||||
}
|
||||
else
|
||||
{
|
||||
dataisc = recsog.get_date(SOG_DATAISC);
|
||||
nuovo = (dataisc >= _dataini && dataisc <= _datafin);
|
||||
totale = (dataisc <= _datafin);
|
||||
}
|
||||
}
|
||||
}
|
||||
stat.zero();
|
||||
stat.put(ATSS_CODSEZ, codsez);
|
||||
stat.put(ATSS_CODSOT, codsot);
|
||||
stat.put(ATSS_CATDON, catdon);
|
||||
if (stat.read() == NOERR)
|
||||
{
|
||||
numero = stat.get_long(ATSS_NUMERO);
|
||||
numero2 = stat.get_long(ATSS_NUMERO2);
|
||||
if (nuovo)
|
||||
numero++;
|
||||
if (totale)
|
||||
numero2++;
|
||||
stat.put(ATSS_NUMERO, numero);
|
||||
stat.put(ATSS_NUMERO2, numero2);
|
||||
stat.rewrite();
|
||||
}
|
||||
else
|
||||
{
|
||||
stat.put(ATSS_CODSEZ, codsez);
|
||||
stat.put(ATSS_CODSOT, codsot);
|
||||
stat.put(ATSS_CATDON, catdon);
|
||||
if (nuovo)
|
||||
numero = 1;
|
||||
else
|
||||
numero = 0;
|
||||
if (totale)
|
||||
numero2 = 1;
|
||||
else
|
||||
numero2 = 0;
|
||||
stat.put(ATSS_NUMERO, numero);
|
||||
stat.put(ATSS_NUMERO2, numero2);
|
||||
stat.write();
|
||||
}
|
||||
}
|
||||
return (stat.eod() > 0);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int at3300(int argc, char* argv[])
|
||||
{
|
||||
TStatSogxCat a;
|
||||
a.run(argc, argv, "Statistica soggetti per categoria");
|
||||
return 0;
|
||||
}
|
14
at/at3300a.h
Executable file
14
at/at3300a.h
Executable file
@ -0,0 +1,14 @@
|
||||
// statistica SOGGETTI PER CATEGORIE con nuovi iscritti
|
||||
// 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
|
146
at/at3300a.uml
Executable file
146
at/at3300a.uml
Executable file
@ -0,0 +1,146 @@
|
||||
#include "at3300a.h"
|
||||
|
||||
PAGE "Statistica donatori per categoria" -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 3
|
||||
BEGIN
|
||||
PROMPT 1 5 "Opzioni per la statistica"
|
||||
END
|
||||
|
||||
DATE F_DATAINI
|
||||
BEGIN
|
||||
PROMPT 2 6 "Segnala i cambi di categoria dal "
|
||||
END
|
||||
|
||||
DATE F_DATAFIN
|
||||
BEGIN
|
||||
PROMPT 50 6 "al "
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
698
at/at3400.cpp
Executable file
698
at/at3400.cpp
Executable file
@ -0,0 +1,698 @@
|
||||
#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 "at3.h"
|
||||
|
||||
// nomi campi maschera
|
||||
#include "at3400a.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;
|
||||
bool _perpunto;
|
||||
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("at3400a");
|
||||
_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);
|
||||
//_perpunto = msk.get_bool(F_PERPUNTO);
|
||||
_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 = "MENSILE DONAZIONI";
|
||||
//if (_perpunto)
|
||||
// sep << " PER PUNTO PRELIEVO";
|
||||
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 at3400(int argc, char* argv[])
|
||||
{
|
||||
TRiepilogoDonazioni a;
|
||||
a.run(argc, argv, "Riepilogo mensile donazioni");
|
||||
return 0;
|
||||
}
|
16
at/at3400a.h
Executable file
16
at/at3400a.h
Executable file
@ -0,0 +1,16 @@
|
||||
// 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
|
||||
//#define F_PERPUNTO 304
|
153
at/at3400a.uml
Executable file
153
at/at3400a.uml
Executable file
@ -0,0 +1,153 @@
|
||||
#include "at3400a.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 5
|
||||
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
|
876
at/at3500.cpp
876
at/at3500.cpp
@ -1,360 +1,580 @@
|
||||
#include <applicat.h>
|
||||
//#include <execp.h>
|
||||
#include <mask.h>
|
||||
#include <form.h>
|
||||
#include <printapp.h>
|
||||
#include <printer.h>
|
||||
#include <progind.h>
|
||||
#include <real.h>
|
||||
#include <relation.h>
|
||||
#include <tabutil.h>
|
||||
#include <urldefid.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include "lf.h"
|
||||
#include "at3.h"
|
||||
|
||||
// nomi campi maschera
|
||||
#include "at3500a.h"
|
||||
|
||||
// nomi dei campi
|
||||
#include "soggetti.h"
|
||||
#include "donaz.h"
|
||||
#include "atstatd.h"
|
||||
#include "sezioni.h"
|
||||
|
||||
#include "at3.h"
|
||||
#include "at3500a.h"
|
||||
// classe per la definizione di una riga di statistica
|
||||
class TRigaG : public TObject
|
||||
{
|
||||
TDate _data;
|
||||
TArray _valori;
|
||||
|
||||
#define ALIAS_LCP 100
|
||||
#define ALIAS_TCS 200
|
||||
#define IDON_SI "SI"
|
||||
#define IDON_AF "AF"
|
||||
|
||||
enum ts { undefined = 0, elenco = 1, etichette = 2, cartoline = 3 };
|
||||
|
||||
// definizione form per etichette
|
||||
class TScadenze_form : public TForm
|
||||
{
|
||||
public:
|
||||
|
||||
virtual TCursor* cursor() const;
|
||||
virtual TRelation* relation() const;
|
||||
TPrint_section& get_body() { return section('B'); } ;
|
||||
TScadenze_form(): TForm() {};
|
||||
TScadenze_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
|
||||
: TForm(form,code,editlevel,desc) {};
|
||||
virtual ~TScadenze_form() {};
|
||||
};
|
||||
|
||||
class TScadenze_application : public TPrintapp
|
||||
{
|
||||
TRelation* _rel;
|
||||
TMask* _msk;
|
||||
TScadenze_form* _form_eti;
|
||||
TAssoc_array _categorie;
|
||||
|
||||
int _cur1, _cur2, _cur3, _cur4;
|
||||
TParagraph_string _cognome_nome;
|
||||
TDate _data_stampa;
|
||||
TDate _dataini, _datafin;
|
||||
TString16 _procdon;
|
||||
ts _tipo_stampa;
|
||||
TString16 _codsez, _codsot;
|
||||
|
||||
static bool filter_func_scadenze(const TRelation* rel);
|
||||
|
||||
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);
|
||||
|
||||
const TRigaG& copy(const TRigaG& riga);
|
||||
public:
|
||||
void crea_intestazione();
|
||||
void filtra_sezioni();
|
||||
void header_sezione(TString16 codsez, TString16 codsot);
|
||||
TMask& app_mask() { return *_msk; }
|
||||
TScadenze_application() : _data_stampa(TODAY), _cognome_nome("",25) {}
|
||||
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() {};
|
||||
};
|
||||
|
||||
HIDDEN inline TScadenze_application& app() { return (TScadenze_application&) main_app(); }
|
||||
|
||||
TCursor* TScadenze_form::cursor() const { return app().current_cursor(); }
|
||||
|
||||
TRelation* TScadenze_form::relation() const { return cursor()->relation(); }
|
||||
|
||||
void TScadenze_application::filtra_sezioni()
|
||||
const TRigaG& TRigaG::copy(const TRigaG& riga)
|
||||
{
|
||||
TString16 sezini = _msk->get(F_SEZINI);
|
||||
TString16 sotini = _msk->get(F_SOTINI);
|
||||
TString16 sezfin = _msk->get(F_SEZFIN);
|
||||
TString16 sotfin = _msk->get(F_SOTFIN);
|
||||
select_cursor(_cur4);
|
||||
TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI);
|
||||
TRectype da(fl.curr());
|
||||
TRectype a(fl.curr());
|
||||
da.zero();
|
||||
a.zero();
|
||||
if ((sezini.not_empty()) && (sezini.ok()))
|
||||
da.put(SOG_CODSEZ, sezini);
|
||||
if ((sotini.not_empty()) && (sotini.ok()))
|
||||
da.put(SOG_CODSOT, sotini);
|
||||
if ((sezfin.not_empty()) && (sezfin.ok()))
|
||||
a.put(SOG_CODSEZ, sezfin);
|
||||
if ((sotfin.not_empty()) && (sotfin.ok()))
|
||||
a.put(SOG_CODSOT, sotfin);
|
||||
current_cursor()->setregion(da, a);
|
||||
_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("at3500a");
|
||||
_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;
|
||||
}
|
||||
|
||||
void TScadenze_application::set_page(int file, int cnt)
|
||||
bool TRiepilogoGiornaliero::destroy()
|
||||
{
|
||||
// costruzione etichette
|
||||
switch (_tipo_stampa)
|
||||
{
|
||||
case etichette:
|
||||
{
|
||||
TPrint_section& corpo = _form_eti->get_body();
|
||||
corpo.reset();
|
||||
corpo.update();
|
||||
for (int i = 0; i < corpo.height(); i++)
|
||||
{
|
||||
TPrintrow& riga = corpo.row(i);
|
||||
set_row(i+1,riga);
|
||||
}
|
||||
force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage
|
||||
// altrimenti stampa sempre la stessa etichetta
|
||||
}
|
||||
break;
|
||||
case elenco:
|
||||
{
|
||||
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
|
||||
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
|
||||
set_row(1,"@10g#a", &_cognome_nome);
|
||||
set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(1,"@47g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID)); // potremmo mettere anche datastato
|
||||
set_row(1,"@58g@S", FLD(LF_SOGGETTI,SOG_IDON1));
|
||||
set_row(1,"@61g@S", FLD(LF_SOGGETTI,SOG_IDON2));
|
||||
set_row(1,"@64g@S", FLD(LF_SOGGETTI,SOG_IDON3));
|
||||
set_row(1,"@67g@S", FLD(LF_SOGGETTI,SOG_IDON4));
|
||||
|
||||
set_row(2,"@50g@S", FLD(LF_SOGGETTI,SOG_STATO));
|
||||
}
|
||||
break;
|
||||
}
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
delete _soggetti;
|
||||
delete _donaz;
|
||||
delete _atstatd;
|
||||
delete _sezioni;
|
||||
delete _colonne;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
bool TScadenze_application::filter_func_scadenze(const TRelation* rel)
|
||||
{
|
||||
bool filtrato = TRUE;
|
||||
TLocalisamfile& sog = rel->lfile();
|
||||
// filtro per categorie
|
||||
TAssoc_array categorie = app()._categorie;
|
||||
if (categorie.items() != 0)
|
||||
{
|
||||
TString16 cat = sog.get(SOG_CATDON);
|
||||
filtrato = categorie.is_key((const char*) cat);
|
||||
}
|
||||
// filtro per data di prossima donazione
|
||||
if (filtrato)
|
||||
{
|
||||
TRectype from = sog->curr();
|
||||
TRectype to = sog->curr();
|
||||
from.zero();
|
||||
to.zero();
|
||||
if (app()._dataini.ok())
|
||||
{
|
||||
if (app()._procdon == IDON_SI)
|
||||
from.put(SOG_DATAPROSSI, app()._dataini);
|
||||
else
|
||||
from.put(SOG_DATAPROSAF, app()._dataini);
|
||||
}
|
||||
if (app()._datafin.ok())
|
||||
{
|
||||
if (app()._procdon == IDON_SI)
|
||||
to.put(SOG_DATAPROSSI, app()._datafin);
|
||||
else
|
||||
to.put(SOG_DATAPROSAF, app()._datafin);
|
||||
}
|
||||
filtrato = (sog->curr() >= from) && (sog->curr() <= to);
|
||||
}
|
||||
return filtrato;
|
||||
}
|
||||
|
||||
bool TScadenze_application::preprocess_page(int file, int counter)
|
||||
{
|
||||
// contatore soggetti stampati
|
||||
// per ora non c'è
|
||||
if (_tipo_stampa == elenco)
|
||||
{
|
||||
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
|
||||
nome << " ";
|
||||
nome << current_cursor()->curr().get(SOG_NOME);
|
||||
_cognome_nome = nome;
|
||||
|
||||
// salto pagina se cambio sezione
|
||||
TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
|
||||
TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
|
||||
if ((_codsez!=codsez)||(_codsot!=codsot))
|
||||
{
|
||||
if (_codsez != "**")
|
||||
printer().formfeed();
|
||||
_codsez = codsez;
|
||||
_codsot = codsot;
|
||||
header_sezione(codsez, codsot);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TScadenze_application::header_sezione(TString16 codsez, TString16 codsot)
|
||||
{
|
||||
TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
|
||||
TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
|
||||
TString256 intestazione(132);
|
||||
intestazione = "Sezione: ";
|
||||
intestazione << codsez;
|
||||
intestazione << "/";
|
||||
intestazione << codsot;
|
||||
intestazione << " ";
|
||||
intestazione << densez;
|
||||
if ((densot.ok())&& (densot.not_empty()))
|
||||
{
|
||||
intestazione << "/";
|
||||
intestazione << densot;
|
||||
}
|
||||
intestazione.center_just();
|
||||
set_header(1,"@0g%s", (const char*) intestazione);
|
||||
return;
|
||||
}
|
||||
|
||||
bool TScadenze_application::set_print(int m)
|
||||
bool TRiepilogoGiornaliero::menu(MENU_TAG m)
|
||||
{
|
||||
_tipo_stampa = undefined;
|
||||
KEY tasto;
|
||||
tasto = _msk->run();
|
||||
switch (tasto)
|
||||
{
|
||||
case F_ELENCO:
|
||||
_tipo_stampa = elenco;
|
||||
_codsez = "**";
|
||||
_codsot = "**";
|
||||
break;
|
||||
case F_ETICHETTE:
|
||||
_tipo_stampa = etichette;
|
||||
case F_CARTOLINE:
|
||||
_tipo_stampa = cartoline;
|
||||
break;
|
||||
}
|
||||
if (_tipo_stampa != undefined)
|
||||
{
|
||||
reset_files();
|
||||
add_file(LF_SOGGETTI);
|
||||
_dataini = _msk->get(F_DATAINI);
|
||||
_datafin = _msk->get(F_DATAFIN);
|
||||
_procdon = _msk->get(F_PROCDON1);
|
||||
// filtro per sezioni selezionati
|
||||
filtra_sezioni();
|
||||
// filtro per categorie
|
||||
TString16 catpri = _msk->get(F_CAT1);
|
||||
TString16 catsec = _msk->get(F_CAT2);
|
||||
TString16 catter = _msk->get(F_CAT3);
|
||||
TString16 catqua = _msk->get(F_CAT4);
|
||||
TString16 catqui = _msk->get(F_CAT5);
|
||||
TString16 catses = _msk->get(F_CAT6);
|
||||
if (catpri.not_empty() && catpri.ok())
|
||||
_categorie.add((const char*) catpri);
|
||||
if (catsec.not_empty() && catsec.ok())
|
||||
_categorie.add((const char*) catsec);
|
||||
if (catter.not_empty() && catter.ok())
|
||||
_categorie.add((const char*) catter);
|
||||
if (catqua.not_empty() && catqua.ok())
|
||||
_categorie.add((const char*) catqua);
|
||||
if (catqui.not_empty() && catqui.ok())
|
||||
_categorie.add((const char*) catqui);
|
||||
if (catses.not_empty() && catses.ok())
|
||||
_categorie.add((const char*) catses);
|
||||
// filtro per idoneo e non escluso
|
||||
current_cursor()->setfilter("((TCS->S6 == \"I\" ) || (TCS->S6 == \"F\")) && (ESCLUSO == \"\")", TRUE);
|
||||
|
||||
// filtro per procedura di donazione (controllo che abbia la data)
|
||||
/* questo filtro è nella filter_function
|
||||
TString16 procdon = _msk->get(F_PROCDON1);
|
||||
if (procdon == IDON_SI)
|
||||
current_cursor()->setfilter("(DATAPROSSI == \"\")", TRUE);
|
||||
else
|
||||
current_cursor()->setfilter("(DATAPROSAF == \"\")", TRUE);
|
||||
*/
|
||||
// filtro per categorie
|
||||
current_cursor()->set_filterfunction(filter_func_scadenze);
|
||||
reset_print();
|
||||
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();
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
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 TScadenze_application::crea_intestazione()
|
||||
void TRiepilogoGiornaliero::azzera_righe()
|
||||
{
|
||||
reset_header();
|
||||
|
||||
if (_tipo_stampa == elenco)
|
||||
{
|
||||
TString256 sep(132);
|
||||
sep = "SCADENZE DI DONAZIONE ";
|
||||
TString16 procdon = _msk->get(F_PROCDON1);
|
||||
sep << procdon ;
|
||||
TDate data = _msk->get(F_DATAINI);
|
||||
if (data.ok())
|
||||
TDate data = _dataini;
|
||||
while (data<=_datafin)
|
||||
{
|
||||
TRigaG& riga = (TRigaG&)_righe[data2row(data)];
|
||||
riga.azzera_valori();
|
||||
if (_primedon)
|
||||
{
|
||||
sep << " dal ";
|
||||
sep << data.string();
|
||||
TRigaG& riga_prime = (TRigaG&)_righe_prime[data2row(data)];
|
||||
riga_prime.azzera_valori();
|
||||
}
|
||||
data = _msk->get(F_DATAFIN);
|
||||
if (data.ok())
|
||||
++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())
|
||||
{
|
||||
sep << " al ";
|
||||
sep << data.string();
|
||||
rigastampa << "/";
|
||||
rigastampa << den;
|
||||
}
|
||||
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);
|
||||
|
||||
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gData ID@58gTipi idon.");
|
||||
set_header(5,"@47gTipo/Esito");
|
||||
set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g----------@58g-- -- -- --");
|
||||
}
|
||||
}
|
||||
|
||||
bool TScadenze_application::user_create()
|
||||
{
|
||||
_rel = new TRelation(LF_SOGGETTI);
|
||||
_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS);
|
||||
_rel->add("LCP", "CODTAB==LOCALITA",1,0,ALIAS_LCP);
|
||||
_rel->add(LF_COMUNI, "COM==COM");
|
||||
// per stampare la denominazione della sezione nell'intestazione
|
||||
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
|
||||
|
||||
_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
|
||||
_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome
|
||||
_cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
|
||||
_cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome
|
||||
|
||||
_msk = new TMask("at3500a");
|
||||
}
|
||||
rigastampa.center_just(80);
|
||||
row.put(rigastampa);
|
||||
printer().setheaderline(1, row);
|
||||
|
||||
_form_eti = new TScadenze_form("AT_ETSOG");
|
||||
|
||||
return TRUE;
|
||||
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 TScadenze_application::user_destroy()
|
||||
{
|
||||
delete _msk;
|
||||
delete _rel;
|
||||
delete _form_eti;
|
||||
return TRUE;
|
||||
}
|
||||
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 at3500(int argc, char* argv[])
|
||||
{
|
||||
|
||||
TScadenze_application a;
|
||||
|
||||
a.run(argc, argv, "Scadenze di donazione");
|
||||
|
||||
return 0;
|
||||
}
|
||||
TRiepilogoGiornaliero a;
|
||||
a.run(argc, argv, "Riepilogo giornaliero donazioni");
|
||||
return 0;
|
||||
}
|
15
at/at3500a.h
Executable file
15
at/at3500a.h
Executable file
@ -0,0 +1,15 @@
|
||||
// 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
|
153
at/at3500a.uml
Executable file
153
at/at3500a.uml
Executable file
@ -0,0 +1,153 @@
|
||||
#include "at3500a.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
|
1074
at/at3600.cpp
1074
at/at3600.cpp
File diff suppressed because it is too large
Load Diff
26
at/at3600a.h
26
at/at3600a.h
@ -1,16 +1,16 @@
|
||||
// Convocazione per BOLOGNA
|
||||
// statistica donazioni per gruppo e rh
|
||||
// definizione campi per maschera di selezione
|
||||
|
||||
#define F_DATACONV 101
|
||||
#define F_PUNTO 102
|
||||
#define F_D_PUNTO 103
|
||||
#define F_TIPODON 104
|
||||
#define F_D_TIPODON 105
|
||||
#define F_CODSEZ 106
|
||||
#define F_DENSEZ 107
|
||||
#define F_CODSOT 108
|
||||
#define F_DENSOT 109
|
||||
#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_ELENCO 401
|
||||
#define F_ETICHETTE 402
|
||||
#define F_CARTOLINE 403
|
||||
#define F_DATAINI 301
|
||||
#define F_DATAFIN 302
|
||||
#define F_TIPODON 303
|
||||
#define F_D_TIPODON 304
|
||||
|
168
at/at3600a.uml
Executable file
168
at/at3600a.uml
Executable file
@ -0,0 +1,168 @@
|
||||
#include "at3600a.h"
|
||||
|
||||
PAGE "Statistica donazioni/donatori" -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 la statistica"
|
||||
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
|
||||
|
||||
STRING F_TIPODON 2
|
||||
BEGIN
|
||||
PROMPT 2 7 "Tipo donazioni "
|
||||
FLAGS "U"
|
||||
USE TDN
|
||||
INPUT CODTAB F_TIPODON
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@30" S0
|
||||
OUTPUT F_TIPODON CODTAB
|
||||
OUTPUT F_D_TIPODON S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice non presente"
|
||||
END
|
||||
|
||||
STRING F_D_TIPODON 30
|
||||
BEGIN
|
||||
PROMPT 23 7 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
601
at/at3700.cpp
Executable file
601
at/at3700.cpp
Executable file
@ -0,0 +1,601 @@
|
||||
#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 "at3.h"
|
||||
|
||||
// nomi campi maschera
|
||||
#include "at3700a.h"
|
||||
|
||||
// nomi dei campi
|
||||
#include "soggetti.h"
|
||||
#include "atstats.h"
|
||||
#include "sezioni.h"
|
||||
|
||||
// classe per la definizione di una riga di statistica
|
||||
class TRigaSGruppo : public TObject
|
||||
{
|
||||
TString16 _gruppo, _rh;
|
||||
TArray _valori;
|
||||
|
||||
protected:
|
||||
const TRigaSGruppo& copy(const TRigaSGruppo& riga);
|
||||
public:
|
||||
const TString16 gruppo() const { return _gruppo; }
|
||||
const TString16 rh() const { return _rh; }
|
||||
TObject* dup() const { return new TRigaSGruppo(*this); }
|
||||
const TRigaSGruppo& operator = (const TRigaSGruppo& riga);
|
||||
const real& operator [] (int colonna) const;
|
||||
void aggiorna_valore(int colonna, const real& numero) ;
|
||||
void azzera_valori();
|
||||
// costruttore
|
||||
TRigaSGruppo(TString16 gruppo, TString16 rh) {_gruppo = gruppo; _rh = rh;}
|
||||
// costruttore di copia
|
||||
TRigaSGruppo(const TRigaSGruppo& riga) { copy(riga); }
|
||||
virtual ~TRigaSGruppo() {};
|
||||
};
|
||||
|
||||
const TRigaSGruppo& TRigaSGruppo::copy(const TRigaSGruppo& riga)
|
||||
{
|
||||
_gruppo = riga._gruppo;
|
||||
_rh = riga._rh;
|
||||
_valori = riga._valori;
|
||||
return (*this);
|
||||
}
|
||||
|
||||
const TRigaSGruppo& TRigaSGruppo::operator = (const TRigaSGruppo& riga)
|
||||
{
|
||||
copy(riga);
|
||||
return (*this);
|
||||
}
|
||||
|
||||
const real& TRigaSGruppo::operator [] (int colonna) const
|
||||
{
|
||||
real* valore = (real*)_valori.objptr(colonna);
|
||||
if (valore == NULL)
|
||||
return ZERO;
|
||||
else
|
||||
return *valore;
|
||||
}
|
||||
|
||||
void TRigaSGruppo::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 TRigaSGruppo::azzera_valori()
|
||||
{
|
||||
_valori.destroy();
|
||||
}
|
||||
|
||||
class TStatisticaSog : public TApplication
|
||||
{
|
||||
TMask* _msk;
|
||||
TRelation* _rel;
|
||||
TCursor* _cur;
|
||||
TLocalisamfile* _sezioni;
|
||||
TLocalisamfile* _soggetti;
|
||||
TLocalisamfile* _atstats;
|
||||
TAssoc_array* _colonne;
|
||||
TArray _righe;
|
||||
TString16 _sezini, _sotini, _sezfin, _sotfin;
|
||||
TString16 _catdon;
|
||||
TDate _data;
|
||||
|
||||
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 TString16 gruppo, const TString16 rh);
|
||||
bool riepilogo();
|
||||
bool stampa();
|
||||
bool crea_colonne();
|
||||
bool crea_righe();
|
||||
void azzera_righe();
|
||||
void stampa_sezione(TString16 codsez, TString16 codsot);
|
||||
void crea_intestazione();
|
||||
public:
|
||||
TStatisticaSog() {}
|
||||
|
||||
};
|
||||
|
||||
HIDDEN inline TStatisticaSog& app() { return (TStatisticaSog&) main_app(); }
|
||||
|
||||
int TStatisticaSog::data2row(const TString16 gruppo, const TString16 rh)
|
||||
{
|
||||
int igruppo = 0;
|
||||
int irh = 0;
|
||||
if (gruppo == "0")
|
||||
igruppo = 1;
|
||||
if (gruppo == "A")
|
||||
igruppo = 2;
|
||||
if (gruppo == "A1")
|
||||
igruppo = 3;
|
||||
if (gruppo == "A2")
|
||||
igruppo = 4;
|
||||
if (gruppo == "A1B")
|
||||
igruppo = 5;
|
||||
if (gruppo == "A2B")
|
||||
igruppo = 6;
|
||||
if (gruppo == "AB")
|
||||
igruppo = 7;
|
||||
if (gruppo == "B")
|
||||
igruppo = 8;
|
||||
if (rh == "POS")
|
||||
irh = 1;
|
||||
if (rh == "NEG")
|
||||
irh = 2;
|
||||
return igruppo*10 + irh;
|
||||
}
|
||||
|
||||
bool TStatisticaSog::crea_colonne()
|
||||
{
|
||||
_colonne->destroy();
|
||||
real contatore(ZERO);
|
||||
real* oggetto = new real(contatore);
|
||||
const char* indice = "0";
|
||||
_colonne->add(indice,(TObject*)oggetto);
|
||||
indice = "1"; // maschi
|
||||
contatore = contatore+1;
|
||||
real* oggetto2 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto2);
|
||||
indice = "2"; // femmine
|
||||
contatore = contatore+1;
|
||||
real* oggetto3 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto3);
|
||||
indice = "9"; // non spec.
|
||||
contatore = contatore+1;
|
||||
real* oggetto4 = new real(contatore);
|
||||
_colonne->add(indice,(TObject*)oggetto4);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TStatisticaSog::crea_righe()
|
||||
{
|
||||
TString16 gruppo, rh;
|
||||
for (int igruppo=0;igruppo<=8;igruppo++)
|
||||
{
|
||||
switch (igruppo)
|
||||
{
|
||||
case 0 : gruppo = ""; break;
|
||||
case 1 : gruppo = "0"; break;
|
||||
case 2 : gruppo = "A"; break;
|
||||
case 3 : gruppo = "A1"; break;
|
||||
case 4 : gruppo = "A2"; break;
|
||||
case 5 : gruppo = "A1B"; break;
|
||||
case 6 : gruppo = "A2B"; break;
|
||||
case 7 : gruppo = "AB"; break;
|
||||
case 8 : gruppo = "B"; break;
|
||||
}
|
||||
for (int irh=0;irh <=2;irh++)
|
||||
{
|
||||
switch (irh)
|
||||
{
|
||||
case 1 : rh = "POS"; break;
|
||||
case 2 : rh = "NEG"; break;
|
||||
default : rh = " "; break;
|
||||
}
|
||||
_righe.add(new TRigaSGruppo(gruppo, rh), data2row(gruppo, rh));
|
||||
}
|
||||
}
|
||||
return _righe.items()>0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool TStatisticaSog::create()
|
||||
{
|
||||
TApplication::create();
|
||||
_msk = new TMask("at3700a");
|
||||
_rel = new TRelation(LF_SOGGETTI);
|
||||
_soggetti = new TLocalisamfile(LF_SOGGETTI);
|
||||
_atstats = new TLocalisamfile(LF_ATSTATS);
|
||||
_sezioni = new TLocalisamfile(LF_SEZIONI);
|
||||
_colonne = new TAssoc_array();
|
||||
dispatch_e_menu(BAR_ITEM(1));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TStatisticaSog::destroy()
|
||||
{
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
delete _soggetti;
|
||||
delete _atstats;
|
||||
delete _sezioni;
|
||||
delete _colonne;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
bool TStatisticaSog::menu(MENU_TAG m)
|
||||
{
|
||||
TMask& msk = get_mask();
|
||||
KEY tasto;
|
||||
tasto = msk.run();
|
||||
if (tasto == K_ENTER)
|
||||
{
|
||||
_sezini = _msk->get(F_SEZINI);
|
||||
_sotini = _msk->get(F_SOTINI);
|
||||
_sezfin = _msk->get(F_SEZFIN);
|
||||
_sotfin = _msk->get(F_SOTFIN);
|
||||
_catdon = _msk->get(F_CATDON);
|
||||
_data = _msk->get_date(F_DATA);
|
||||
if (riepilogo())
|
||||
stampa();
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TStatisticaSog::crea_intestazione()
|
||||
{
|
||||
TPrintrow row;
|
||||
TString256 sep;
|
||||
sep = "STATISTICA SOGGETTI PER SESSO, GRUPPO E RH al ";
|
||||
sep << _data.string();
|
||||
sep.center_just(80);
|
||||
row.put(sep);
|
||||
row.put("@>", 1);
|
||||
row.put("Pag. @#", 70);
|
||||
printer().setheaderline(2, row);
|
||||
sep = "";
|
||||
sep << "Categoria ";
|
||||
sep << _catdon;
|
||||
sep.center_just(80);
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(3, row);
|
||||
sep = "";
|
||||
sep << "Gruppo/Rh Sconosciuto Maschi Femmine Non spec. Totale";
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(5, row);
|
||||
sep = "";
|
||||
sep.fill('-');
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(6, row);
|
||||
}
|
||||
|
||||
bool TStatisticaSog::stampa()
|
||||
{
|
||||
if (printer().open())
|
||||
{
|
||||
crea_intestazione();
|
||||
TRelation* relstat = new TRelation(LF_ATSTATS);
|
||||
TCursor* curstat = new TCursor(relstat, "", 1);
|
||||
TString16 oldsez = "**";
|
||||
TString16 oldsot = "**";
|
||||
double numero;
|
||||
TString16 actsez, actsot;
|
||||
TString16 gruppo, rh, sesso;
|
||||
long last = curstat->items();
|
||||
for ( *curstat=0; curstat->pos() < last; ++(*curstat) )
|
||||
{
|
||||
actsez = curstat->curr().get(ATSS_CODSEZ);
|
||||
actsot = curstat->curr().get(ATSS_CODSOT);
|
||||
gruppo = curstat->curr().get(ATSS_GRUPPO);
|
||||
rh = curstat->curr().get(ATSS_RH);
|
||||
sesso = curstat->curr().get(ATSS_SESSO);
|
||||
if (sesso.empty())
|
||||
sesso = "9";
|
||||
numero = (double)curstat->curr().get_int(ATSS_NUMERO);
|
||||
if (actsez != oldsez || actsot != oldsot)
|
||||
{
|
||||
if (oldsez != "**" && oldsot != "**")
|
||||
{
|
||||
stampa_sezione(oldsez,oldsot);
|
||||
azzera_righe();
|
||||
}
|
||||
oldsez = actsez;
|
||||
oldsot = actsot;
|
||||
}
|
||||
TRigaSGruppo& riga = (TRigaSGruppo&)_righe[data2row(gruppo,rh)];
|
||||
real& colonna = (real&)_colonne->find((const char*)sesso);
|
||||
real n = numero;
|
||||
riga.aggiorna_valore(colonna.integer(),n);
|
||||
}
|
||||
if (oldsez != "**" && oldsot != "**")
|
||||
stampa_sezione(oldsez,oldsot);
|
||||
delete curstat;
|
||||
delete relstat;
|
||||
printer().close();
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TStatisticaSog::azzera_righe()
|
||||
{
|
||||
TString16 gruppo, rh;
|
||||
for (int igruppo=0;igruppo<=8;igruppo++)
|
||||
{
|
||||
switch (igruppo)
|
||||
{
|
||||
case 0 : gruppo = ""; break;
|
||||
case 1 : gruppo = "0"; break;
|
||||
case 2 : gruppo = "A"; break;
|
||||
case 3 : gruppo = "A1"; break;
|
||||
case 4 : gruppo = "A2"; break;
|
||||
case 5 : gruppo = "A1B"; break;
|
||||
case 6 : gruppo = "A2B"; break;
|
||||
case 7 : gruppo = "AB"; break;
|
||||
case 8 : gruppo = "B"; break;
|
||||
}
|
||||
for (int irh=0;irh <=2;irh++)
|
||||
{
|
||||
switch (irh)
|
||||
{
|
||||
case 1 : rh = "POS"; break;
|
||||
case 2 : rh = "NEG"; break;
|
||||
default : rh = " "; break;
|
||||
}
|
||||
TRigaSGruppo& riga = (TRigaSGruppo&)_righe[data2row(gruppo,rh)];
|
||||
riga.azzera_valori();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TStatisticaSog::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);
|
||||
|
||||
TRigaSGruppo rigatotali(" "," ");
|
||||
TString16 valore;
|
||||
TString16 gruppo, rh;
|
||||
real totalegruppo = ZERO;
|
||||
for (int igruppo=0;igruppo<=8;igruppo++)
|
||||
{
|
||||
switch (igruppo)
|
||||
{
|
||||
case 0 : gruppo = ""; break;
|
||||
case 1 : gruppo = "0"; break;
|
||||
case 2 : gruppo = "A"; break;
|
||||
case 3 : gruppo = "A1"; break;
|
||||
case 4 : gruppo = "A2"; break;
|
||||
case 5 : gruppo = "A1B"; break;
|
||||
case 6 : gruppo = "A2B"; break;
|
||||
case 7 : gruppo = "AB"; break;
|
||||
case 8 : gruppo = "B"; break;
|
||||
}
|
||||
for (int irh=0;irh <=2;irh++)
|
||||
{
|
||||
switch (irh)
|
||||
{
|
||||
case 1 : rh = "POS"; break;
|
||||
case 2 : rh = "NEG"; break;
|
||||
default : rh = " "; break;
|
||||
}
|
||||
TRigaSGruppo& riga = (TRigaSGruppo&)_righe[data2row(gruppo,rh)];
|
||||
row.reset();
|
||||
rigastampa = "";
|
||||
rigastampa << gruppo;
|
||||
rigastampa << " ";
|
||||
rigastampa << rh;
|
||||
totalegruppo = ZERO;
|
||||
int pos = 21;
|
||||
for (int i=0;i<_colonne->items();i++)
|
||||
{
|
||||
rigatotali.aggiorna_valore(i,riga[i]);
|
||||
totalegruppo+=riga[i];
|
||||
valore = "";
|
||||
valore.format("%8d",riga[i].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+10;
|
||||
}
|
||||
if (totalegruppo != 0)
|
||||
{
|
||||
valore = "";
|
||||
valore.format("%8d",totalegruppo.integer());
|
||||
rigastampa.overwrite((const char*)valore, pos+4);
|
||||
row.put((const char*) rigastampa);
|
||||
printer().print(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// stampa totali per sezione
|
||||
rigastampa = "";
|
||||
rigastampa.fill('-');
|
||||
row.reset();
|
||||
row.put(rigastampa);
|
||||
printer().print(row);
|
||||
row.reset();
|
||||
rigastampa = "";
|
||||
rigastampa = "Totale";
|
||||
real totale;
|
||||
totale = ZERO;
|
||||
int pos = 21;
|
||||
for (int i=0;i<_colonne->items();i++)
|
||||
{
|
||||
totale+=rigatotali[i];
|
||||
valore = "";
|
||||
valore.format("%8d",rigatotali[i].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+10;
|
||||
}
|
||||
valore = "";
|
||||
valore.format("%8d",totale.integer());
|
||||
rigastampa.overwrite((const char*)valore, pos+4);
|
||||
row.put((const char*) rigastampa);
|
||||
printer().print(row);
|
||||
printer().formfeed();
|
||||
}
|
||||
|
||||
bool TStatisticaSog::riepilogo()
|
||||
{
|
||||
if (crea_colonne() && crea_righe())
|
||||
{
|
||||
// cancello i risultati della elaborazione precedente
|
||||
TLocalisamfile stat(LF_ATSTATS);
|
||||
for (stat.first(); !stat.eof(); stat.next())
|
||||
stat.remove();
|
||||
stat.setkey(1);
|
||||
_cur = new TCursor(_rel, "", 1);
|
||||
TString256 filtro = "";
|
||||
|
||||
// filtro per categoria
|
||||
if (_catdon.not_empty())
|
||||
{
|
||||
if (filtro.empty())
|
||||
filtro = format("(90->CATDON == \"%s\")",(const char*)_catdon);
|
||||
else
|
||||
{
|
||||
filtro << " && ";
|
||||
filtro << format("(90->CATDON == \"%s\")",(const char*)_catdon);
|
||||
}
|
||||
if (_data.ok())
|
||||
{
|
||||
TTable ctd("CTD");
|
||||
ctd.put("CODTAB",_catdon);
|
||||
if (ctd.read() == NOERR)
|
||||
{
|
||||
bool dimissione = ctd.get_bool("B0");
|
||||
if (dimissione)
|
||||
filtro << " && (ANSI(90->DATADIM)<=" << _data.string(ANSI) << ")";
|
||||
else
|
||||
filtro << " && (ANSI(90->DATAISC)<=" << _data.string(ANSI) << ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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;
|
||||
long numero;
|
||||
TString16 gruppo, rh, sesso;
|
||||
|
||||
TRectype& recsog = _cur->curr();
|
||||
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 = recsog.get(SOG_CODSEZ);
|
||||
codsot = recsog.get(SOG_CODSOT);
|
||||
gruppo = recsog.get(SOG_GRUPPOAB0);
|
||||
rh = recsog.get(SOG_RHANTID);
|
||||
sesso = recsog.get(SOG_SESSO);
|
||||
if (sesso.empty())
|
||||
sesso = "9";
|
||||
if (gruppo == "A1" || gruppo == "A2")
|
||||
gruppo = "A";
|
||||
if (gruppo == "A1B" || gruppo == "A2B")
|
||||
gruppo = "AB";
|
||||
stat.zero();
|
||||
stat.put(ATSS_CODSEZ, codsez);
|
||||
stat.put(ATSS_CODSOT, codsot);
|
||||
stat.put(ATSS_SESSO, sesso);
|
||||
stat.put(ATSS_GRUPPO, gruppo);
|
||||
stat.put(ATSS_RH, rh);
|
||||
if (stat.read() == NOERR)
|
||||
{
|
||||
numero = stat.get_long(ATSS_NUMERO);
|
||||
numero++;
|
||||
stat.put(ATSS_NUMERO, numero);
|
||||
stat.rewrite();
|
||||
}
|
||||
else
|
||||
{
|
||||
stat.put(ATSS_CODSEZ, codsez);
|
||||
stat.put(ATSS_CODSOT, codsot);
|
||||
stat.put(ATSS_SESSO, sesso);
|
||||
stat.put(ATSS_GRUPPO, gruppo);
|
||||
stat.put(ATSS_RH, rh);
|
||||
numero = 1;
|
||||
stat.put(ATSS_NUMERO, numero);
|
||||
stat.write();
|
||||
}
|
||||
}
|
||||
return (stat.eod() > 0);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int at3700(int argc, char* argv[])
|
||||
{
|
||||
TStatisticaSog a;
|
||||
a.run(argc, argv, "Statistica soggetti per sesso, gruppo e rh");
|
||||
return 0;
|
||||
}
|
15
at/at3700a.h
Executable file
15
at/at3700a.h
Executable file
@ -0,0 +1,15 @@
|
||||
// statistica SOGGETTI PER SESSO E GRUPPO/RH
|
||||
// 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_CATDON 301
|
||||
#define F_D_CATDON 302
|
||||
#define F_DATA 303
|
163
at/at3700a.uml
Executable file
163
at/at3700a.uml
Executable file
@ -0,0 +1,163 @@
|
||||
#include "at3700a.h"
|
||||
|
||||
PAGE "Statistica donatori per sesso, gruppo e rh" -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 3
|
||||
BEGIN
|
||||
PROMPT 1 5 "Opzioni per la statistica"
|
||||
END
|
||||
|
||||
STRING F_CATDON 2
|
||||
BEGIN
|
||||
PROMPT 2 6 "Cat. "
|
||||
FLAGS "U"
|
||||
USE CTD
|
||||
INPUT CODTAB F_CATDON
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@40" S0
|
||||
OUTPUT F_CATDON CODTAB
|
||||
OUTPUT F_D_CATDON S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice categoria non presente"
|
||||
HELP "Categoria di appartenenza"
|
||||
END
|
||||
|
||||
STRING F_D_CATDON 25
|
||||
BEGIN
|
||||
PROMPT 12 6 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
DATE F_DATA
|
||||
BEGIN
|
||||
PROMPT 45 6 "Data elaborazione "
|
||||
END
|
||||
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
@ -47,7 +47,7 @@ MENUBAR MENU_BAR(6)
|
||||
MENU MENU_BAR(6)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* at4 -6 stampa cartoline/... da codice a codice */
|
||||
/* at4 -7 stampa cartoline/... da codice a codice */
|
||||
MENUBAR MENU_BAR(7)
|
||||
|
||||
MENU MENU_BAR(7)
|
||||
|
180
at/at4100.cpp
180
at/at4100.cpp
@ -4,19 +4,32 @@
|
||||
#include <utility.h>
|
||||
|
||||
#include "soggetti.h"
|
||||
#include "sezioni.h"
|
||||
#include "sezioni.h"
|
||||
#include <comuni.h>
|
||||
|
||||
#include "at4.h"
|
||||
#include "at4100a.h"
|
||||
#include "at4100b.h"
|
||||
#include "at4100c.h"
|
||||
|
||||
#define ALIAS_LCP 100
|
||||
#define ALIAS_TCS 200
|
||||
#define ALIAS_CTD 700 // categoria donatori
|
||||
#define ALIAS_CTN1 701 // categoria non donatori 1
|
||||
#define ALIAS_CTN2 702 // categoria non donatori 2
|
||||
|
||||
#define ALIAS_TCS 200 // tipi/esiti controlli sanitari
|
||||
#define ALIAS_LDN 400 // punti di prelievo
|
||||
|
||||
#define ALIAS_LCPDOM 100 // localita' postale di domicilio
|
||||
#define ALIAS_COMDOM 501 // comune di domicilio
|
||||
#define ALIAS_COMNAS 500 // comune di nascita
|
||||
|
||||
#define ALIAS_BNZ 600 // benemerenze
|
||||
#define ALIAS_GAZ 300 // gruppi aziendale
|
||||
|
||||
#define IDON_SI "SI"
|
||||
#define IDON_AF "AF"
|
||||
|
||||
enum ts { undefined = 0, elenco = 1, etichette = 2, cartoline = 3 };
|
||||
enum ts { undefined = 0, elenco = 1, completo = 2, etichette = 3, cartoline = 4 };
|
||||
|
||||
// definizione form per etichette
|
||||
class TScadenze_form : public TForm
|
||||
@ -39,7 +52,7 @@ class TStampaScadenze : public TPrintapp
|
||||
TScadenze_form* _form_eti;
|
||||
TScadenze_form* _form_car;
|
||||
TAssoc_array _categorie;
|
||||
TParagraph_string _cognome_nome;
|
||||
TParagraph_string _cognome_nome, _dencom;
|
||||
TDate _data_stampa;
|
||||
TDate _dataini, _datafin, _dataultid;
|
||||
bool _usomodo, _usasez;
|
||||
@ -50,6 +63,7 @@ class TStampaScadenze : public TPrintapp
|
||||
TString80 _invitoper, _data, _presso1, _presso2, _presso3, _presso4;
|
||||
TString80 _note, _intest1, _intest2, _intest3, _intest4;
|
||||
int _etlarghezza, _etcolonne;
|
||||
int _contatore, _totfinestampa;
|
||||
|
||||
static bool filter_func_scadenze(const TRelation* rel);
|
||||
|
||||
@ -59,15 +73,18 @@ protected:
|
||||
virtual bool set_print(int m);
|
||||
virtual void set_page(int file, int cnt);
|
||||
virtual bool preprocess_page(int file, int counter);
|
||||
virtual print_action postprocess_print(int file, int counter);
|
||||
ts dati_cartoline();
|
||||
|
||||
public:
|
||||
void crea_intestazione();
|
||||
void filtra_sezioni();
|
||||
void footer_sezione();
|
||||
void fine_stampa();
|
||||
void header_sezione(const TString16 codsez, const TString16 codsot);
|
||||
void dati_sezione(const TString16 codsez, const TString16 codsot);
|
||||
TMask& app_mask() { return *_msk; }
|
||||
TStampaScadenze() : _data_stampa(TODAY), _cognome_nome("",25) {}
|
||||
TStampaScadenze() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",25) {}
|
||||
};
|
||||
|
||||
HIDDEN inline TStampaScadenze& app() { return (TStampaScadenze&) main_app(); }
|
||||
@ -97,6 +114,29 @@ ts TStampaScadenze::dati_cartoline()
|
||||
return undefined;
|
||||
}
|
||||
|
||||
void TStampaScadenze::fine_stampa()
|
||||
{
|
||||
// stampa totale soggetti a fine stampa
|
||||
|
||||
reset_footer();
|
||||
printer().footerlen(20);
|
||||
TString sep(80);
|
||||
sep.fill('-');
|
||||
set_footer(1, (const char *) sep);
|
||||
set_footer(2,"TOTALE SOGGETTI IN SCADENZA %d", _totfinestampa);
|
||||
printer().formfeed();
|
||||
reset_footer();
|
||||
}
|
||||
|
||||
print_action TStampaScadenze::postprocess_print(int file, int counter)
|
||||
{
|
||||
if (_contatore > 0)
|
||||
footer_sezione();
|
||||
if (_totfinestampa > 0 && _contatore != _totfinestampa)
|
||||
fine_stampa();
|
||||
return NEXT_PAGE;
|
||||
}
|
||||
|
||||
void TStampaScadenze::filtra_sezioni()
|
||||
{
|
||||
const TString16 sezini = _msk->get(F_SEZINI);
|
||||
@ -223,6 +263,39 @@ void TStampaScadenze::set_page(int file, int cnt)
|
||||
//set_row(3,"");
|
||||
}
|
||||
break;
|
||||
case completo:
|
||||
{
|
||||
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"#########"));
|
||||
set_row(1,"@10g#a", &_cognome_nome);
|
||||
set_row(3,"@10g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
|
||||
set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
|
||||
set_row(2,"@36g#a", &_dencom);
|
||||
|
||||
set_row(1,"@62g@S", FLD(LF_SOGGETTI,SOG_TELABI));
|
||||
set_row(2,"@62g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
|
||||
set_row(3,"@62g@S", FLD(LF_SOGGETTI,SOG_TELALT));
|
||||
|
||||
|
||||
set_row(1,"@77g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSSI));
|
||||
set_row(2,"@77g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSAF));
|
||||
|
||||
set_row(1,"@88g@ld", FLD(LF_SOGGETTI,SOG_DATAULTSI));
|
||||
set_row(2,"@88g@ld", FLD(LF_SOGGETTI,SOG_DATAULTAF));
|
||||
|
||||
set_row(1,"@99g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID));
|
||||
|
||||
set_row(3,"@77g@S", FLD(LF_SOGGETTI,SOG_GRUPPOAB0));
|
||||
set_row(3,"@81g@S", FLD(LF_SOGGETTI,SOG_RHANTID));
|
||||
set_row(3,"@85g@S", FLD(LF_SOGGETTI,SOG_FENOTIPORH));
|
||||
set_row(3,"@92g@S", FLD(LF_SOGGETTI,SOG_KELL));
|
||||
set_row(3,"@96g@S", FLD(LF_SOGGETTI,SOG_DU));
|
||||
set_row(3,"@100g@S", FLD(LF_SOGGETTI,SOG_ANTICORPI));
|
||||
set_row(3,"@102g@S", FLD(LF_SOGGETTI,SOG_CMV));
|
||||
set_row(4,"");
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -297,7 +370,7 @@ bool TStampaScadenze::filter_func_scadenze(const TRelation* rel)
|
||||
|
||||
bool TStampaScadenze::preprocess_page(int file, int counter)
|
||||
{
|
||||
if (_tipostampa==elenco)
|
||||
if (_tipostampa==elenco || _tipostampa== completo)
|
||||
{
|
||||
TRectype& recsog = current_cursor()->curr();
|
||||
const TString16 codsez = recsog.get(SOG_CODSEZ);
|
||||
@ -305,19 +378,41 @@ bool TStampaScadenze::preprocess_page(int file, int counter)
|
||||
TString80 nome = recsog.get(SOG_COGNOME);
|
||||
nome << " ";
|
||||
nome << recsog.get(SOG_NOME);
|
||||
nome << " ";
|
||||
nome << recsog.get(SOG_COGNOME_SP);
|
||||
_cognome_nome = nome;
|
||||
TString256 localita = "";
|
||||
localita << current_cursor()->curr(-ALIAS_LCPDOM).get("S6");
|
||||
if (localita.not_empty() && localita.ok())
|
||||
{
|
||||
localita << " ";
|
||||
localita << current_cursor()->curr(-ALIAS_LCPDOM).get("S0");
|
||||
localita << " - ";
|
||||
}
|
||||
else
|
||||
{
|
||||
localita = current_cursor()->curr(LF_COMUNI).get(COM_CAPCOM);
|
||||
localita << " ";
|
||||
}
|
||||
localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM);
|
||||
localita.trim();
|
||||
_dencom = localita;
|
||||
|
||||
// salto pagina se cambio sezione
|
||||
if ((_codsez!=codsez)||(_codsot!=codsot))
|
||||
{
|
||||
if (_codsez != "**")
|
||||
printer().formfeed();
|
||||
footer_sezione();
|
||||
_codsez = codsez;
|
||||
_codsot = codsot;
|
||||
header_sezione(codsez, codsot);
|
||||
_contatore = 0;
|
||||
}
|
||||
else
|
||||
if (printer().rows_left() < 4)
|
||||
else
|
||||
if ((printer().rows_left()<4 && _tipostampa==elenco) || (printer().rows_left()<3 && _tipostampa==completo))
|
||||
printer().formfeed();
|
||||
_contatore++;
|
||||
_totfinestampa++;
|
||||
}
|
||||
if (_tipostampa==etichette)
|
||||
if (printer().rows_left() < _form_eti->get_body().height())
|
||||
@ -346,6 +441,20 @@ void TStampaScadenze::header_sezione(const TString16 codsez, const TString16 cod
|
||||
return;
|
||||
}
|
||||
|
||||
void TStampaScadenze::footer_sezione()
|
||||
{
|
||||
// stampa totale soggetti a fine pagina
|
||||
reset_footer();
|
||||
TString sep(80);
|
||||
sep.fill('-');
|
||||
set_footer(1, (const char *) sep);
|
||||
set_footer(2,"SOGGETTI IN SCADENZA PER SEZIONE %d", _contatore);
|
||||
printer().formfeed();
|
||||
reset_footer();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void TStampaScadenze::dati_sezione(const TString16 codsez, const TString16 codsot)
|
||||
{
|
||||
_intest1 = current_cursor()->curr(LF_SEZIONI).get(SEZ_INTESTAZ1);
|
||||
@ -379,6 +488,9 @@ bool TStampaScadenze::set_print(int m)
|
||||
case F_ELENCO:
|
||||
_tipostampa = elenco;
|
||||
break;
|
||||
case F_COMPLETO:
|
||||
_tipostampa = completo;
|
||||
break;
|
||||
case F_ETICHETTE:
|
||||
_tipostampa = etichette;
|
||||
break;
|
||||
@ -419,7 +531,8 @@ bool TStampaScadenze::set_print(int m)
|
||||
_giorni[6] = 'X';
|
||||
// filtro per sezioni selezionati
|
||||
filtra_sezioni();
|
||||
// filtro per categorie
|
||||
// filtro per categorie
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
@ -445,6 +558,8 @@ bool TStampaScadenze::set_print(int m)
|
||||
current_cursor()->setfilter("((TCS->S6 == \"I\" ) || (TCS->S6 == \"F\")) && (ESCLUSO == \"\")", TRUE);
|
||||
// filtro per categorie e altro
|
||||
current_cursor()->set_filterfunction(filter_func_scadenze);
|
||||
_contatore = 0;
|
||||
_totfinestampa = 0;
|
||||
reset_print();
|
||||
crea_intestazione();
|
||||
return TRUE;
|
||||
@ -456,7 +571,7 @@ bool TStampaScadenze::set_print(int m)
|
||||
void TStampaScadenze::crea_intestazione()
|
||||
{
|
||||
reset_header();
|
||||
if (_tipostampa == elenco)
|
||||
if (_tipostampa == elenco || _tipostampa == completo)
|
||||
{
|
||||
TString sep(132);
|
||||
sep = "SCADENZE DI DONAZIONE ";
|
||||
@ -474,6 +589,26 @@ void TStampaScadenze::crea_intestazione()
|
||||
sep << " al ";
|
||||
sep << data.string();
|
||||
}
|
||||
if (_ab01.not_empty())
|
||||
{
|
||||
sep << " Gruppi ";
|
||||
sep << _ab01;
|
||||
}
|
||||
if (_ab02.not_empty())
|
||||
{
|
||||
sep << ", ";
|
||||
sep << _ab02;
|
||||
}
|
||||
if (_ab03.not_empty())
|
||||
{
|
||||
sep << ", ";
|
||||
sep << _ab03;
|
||||
}
|
||||
if (_rh.not_empty())
|
||||
{
|
||||
sep << " - Rh ";
|
||||
sep << _rh;
|
||||
}
|
||||
sep.center_just();
|
||||
set_header(2, "@0g%s", (const char*) sep);
|
||||
TString16 data_stampa = _data_stampa.string();
|
||||
@ -484,9 +619,20 @@ void TStampaScadenze::crea_intestazione()
|
||||
sep = "";
|
||||
sep.fill('-');
|
||||
set_header(3, (const char *) sep);
|
||||
set_header(5,"@0gCod.@10gC.@13gCognome@39gNato il@50gData pr.SI@61gData pr.AF@72gData/Tipo@83gData/Tipo@94gIdon.@100gAB0");
|
||||
set_header(6,"@13gNome@50gInterv. SI@61gInterv. AF@72gult. don.@83gult. idon.@94gper@100gRh");
|
||||
set_header(7,"@0g---------@10g--@13g-------------------------@39g----------@50g----------@61g----------@72g----------@83g----------@94g-----");
|
||||
if (_tipostampa == elenco)
|
||||
{
|
||||
set_header(5,"@0gCod.@10gC.@13gCognome@39gNato il@50gData pr.SI@61gData pr.AF@72gData/Tipo@83gData/Tipo@94gIdon.@100gAB0");
|
||||
set_header(6,"@13gNome@50gInterv. SI@61gInterv. AF@72gult. don.@83gult. idon.@94gper@100gRh");
|
||||
set_header(7,"@0g---------@10g--@13g-------------------------@39g----------@50g----------@61g----------@72g----------@83g----------@94g-----");
|
||||
}
|
||||
if (_tipostampa == completo)
|
||||
{
|
||||
set_header(5,"@0gCod.@10gCognome e Nome@36gIndirizzo@62gTelefoni@77gData pr.SI@88gData ult.SI@99g Ult.idon.");
|
||||
set_header(6,"@10gData nasc.@77gData pr.AF@88gData ult.AF");
|
||||
set_header(7,"@77gGr. Rh. Fen. Kell Du A CMV");
|
||||
set_header(8,"");
|
||||
}
|
||||
printer().footerlen(3);
|
||||
}
|
||||
}
|
||||
|
||||
@ -494,8 +640,8 @@ bool TStampaScadenze::user_create()
|
||||
{
|
||||
_rel = new TRelation(LF_SOGGETTI);
|
||||
_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS);
|
||||
_rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCP);
|
||||
_rel->add(LF_COMUNI, "COM==DOM_CODCOM");
|
||||
_rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCPDOM);
|
||||
_rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,0,ALIAS_COMDOM);
|
||||
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
|
||||
add_cursor(new TCursor(_rel, "", 3));
|
||||
_msk = new TMask("at4100a");
|
||||
|
@ -43,5 +43,6 @@
|
||||
#define F_RHANTID 318
|
||||
|
||||
#define F_ELENCO 401
|
||||
#define F_ETICHETTE 402
|
||||
#define F_CARTOLINE 403
|
||||
#define F_COMPLETO 402
|
||||
#define F_ETICHETTE 403
|
||||
#define F_CARTOLINE 404
|
||||
|
@ -366,25 +366,31 @@ END
|
||||
|
||||
BUTTON F_ELENCO 9 2
|
||||
BEGIN
|
||||
PROMPT -14 18 "Elenco"
|
||||
PROMPT -15 18 "Elenco"
|
||||
MESSAGE EXIT,F_ELENCO
|
||||
END
|
||||
|
||||
BUTTON F_COMPLETO 9 2
|
||||
BEGIN
|
||||
PROMPT -25 18 "Completo"
|
||||
MESSAGE EXIT,F_COMPLETO
|
||||
END
|
||||
|
||||
BUTTON F_ETICHETTE 9 2
|
||||
BEGIN
|
||||
PROMPT -24 18 "Etichette"
|
||||
PROMPT -35 18 "Etichette"
|
||||
MESSAGE EXIT,F_ETICHETTE
|
||||
END
|
||||
|
||||
BUTTON F_CARTOLINE 9 2
|
||||
BEGIN
|
||||
PROMPT -34 18 "Cartoline"
|
||||
PROMPT -45 18 "Cartoline"
|
||||
MESSAGE EXIT,F_CARTOLINE
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -44 18 ""
|
||||
PROMPT -55 18 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
@ -303,6 +303,7 @@ bool TStampaUrgenze::set_print(int)
|
||||
add_file(LF_SOGGETTI);
|
||||
filtra_sezioni();
|
||||
// filtro per categorie
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
|
@ -189,6 +189,7 @@ void TConvocazioniPerSezione::set_page(int file, int cnt)
|
||||
set_row(1,"@59g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON));
|
||||
set_row(1,"@62g@ld", FLD(LF_RCONVOC,RCV_DATACONV));
|
||||
set_row(1,"@73g@S", FLD(LF_RCONVOC,RCV_CHIAMATA));
|
||||
set_row(1,"@75g@S", FLD(LF_CONVOC,COV_DATA));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -317,8 +318,8 @@ bool TConvocazioniPerSezione::set_print(int m)
|
||||
_datafin = _msk->get(F_DATAFIN);
|
||||
_punto = _msk->get(F_PUNTO);
|
||||
_tipo = _msk->get(F_TIPO);
|
||||
_codsez = _msk->get(F_CODSEZ);
|
||||
_codsot = _msk->get(F_CODSOT);
|
||||
_sezione = _msk->get(F_CODSEZ);
|
||||
_sottog = _msk->get(F_CODSOT);
|
||||
_aggiorna = _msk->get_bool(F_AGGIORNA);
|
||||
_ordina = _msk->get(F_ORDINA);
|
||||
TString256 chiave = "";
|
||||
|
@ -178,6 +178,7 @@ bool TStampaTessere::set_print(int m)
|
||||
//const char* filtro = format("T_STAMPATA!=\"X\"");
|
||||
//const char* filtro = format("TOTDON>=%i",_numdon);
|
||||
//current_cursor()->setfilter(filtro);
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
#include "at6.h"
|
||||
|
||||
#define usage "Error - usage : %s -[0|1|2|3|4|5|6]"
|
||||
#define usage "Error - usage : %s -[0|1|2|3|4]"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
@ -22,10 +22,6 @@ int main(int argc, char** argv)
|
||||
rt = at6400(argc, argv); break;
|
||||
case 4:
|
||||
rt = at6500(argc, argv); break;
|
||||
case 5:
|
||||
rt = at6600(argc, argv); break;
|
||||
case 6:
|
||||
rt = at6700(argc, argv); break;
|
||||
default:
|
||||
error_box(usage, argv[0]) ; rt = 1; break;
|
||||
}
|
||||
|
2
at/at6.h
2
at/at6.h
@ -6,7 +6,5 @@ int at6200(int argc, char* argv[]); // stampa tabella sezioni/sottogruppi
|
||||
int at6300(int argc, char* argv[]); // stampa di controllo donazioni
|
||||
int at6400(int argc, char* argv[]); // stampa di controllo soggetti incompleti
|
||||
int at6500(int argc, char* argv[]); // stampa di controllo controlli sanitari
|
||||
int at6600(int argc, char* argv[]); // riepilogo mensile donazioni
|
||||
int at6700(int argc, char* argv[]); // riepilogo giornaliero donazioni
|
||||
#endif // __AT6_H
|
||||
|
||||
|
16
at/at6.url
16
at/at6.url
@ -11,36 +11,20 @@ MENU TASK_MENUBAR
|
||||
|
||||
/* at6 -1 stampa archivio sezioni */
|
||||
MENUBAR MENU_BAR(1)
|
||||
|
||||
MENU MENU_BAR(1)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* at6 -2 stampa di controllo donazioni */
|
||||
MENUBAR MENU_BAR(2)
|
||||
|
||||
MENU MENU_BAR(2)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* at6 -3 stampa soggetti incompleti */
|
||||
MENUBAR MENU_BAR(3)
|
||||
|
||||
MENU MENU_BAR(3)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* at6 -4 stampa di controllo controlli sanitari */
|
||||
MENUBAR MENU_BAR(4)
|
||||
|
||||
MENU MENU_BAR(4)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* at6 -5 riepilogo mensile donazioni */
|
||||
MENUBAR MENU_BAR(5)
|
||||
|
||||
MENU MENU_BAR(5)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
/* at6 -6 riepilogo giornaliero donazioni */
|
||||
MENUBAR MENU_BAR(6)
|
||||
|
||||
MENU MENU_BAR(6)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
114
at/at6300.cpp
114
at/at6300.cpp
@ -25,7 +25,7 @@ class TControlloDonazioni : public TPrintapp
|
||||
TString16 _tipodon, _luogodon, _luogoold, _sezold;
|
||||
TString16 _sezini, _sotini, _tipostampa,_ordinamento;
|
||||
TString16 _controllo;
|
||||
bool _stampa80, _primedon;
|
||||
bool _stampa80, _primedon, _breve;
|
||||
TParagraph_string _cognome_nome;
|
||||
|
||||
protected:
|
||||
@ -49,42 +49,58 @@ HIDDEN inline TControlloDonazioni& app() { return (TControlloDonazioni&) main_ap
|
||||
|
||||
void TControlloDonazioni::set_page(int file, int cnt)
|
||||
{
|
||||
if (_stampa80)
|
||||
if (_breve)
|
||||
{
|
||||
set_row(1,"@0g#D", &_contatore);
|
||||
set_row(1,"@6g@pn", FLD(LF_DONAZ,DON_ETICHETTA,"#########"));
|
||||
set_row(1,"@16g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
|
||||
set_row(2,"@16g@8,rs", FLD(LF_SOGGETTI,SOG_TESSAVIS));
|
||||
set_row(1,"@0g@ld", FLD(LF_DONAZ,DON_DATADON));
|
||||
set_row(1,"@11g@S", FLD(LF_DONAZ, DON_LUOGODON));
|
||||
set_row(1,"@20g@S", FLD(LF_DONAZ,DON_TIPODON));
|
||||
set_row(1,"@25g#a", &_cognome_nome);
|
||||
set_row(2,"@25g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(1,"@61g@S", FLD(LF_SOGGETTI,SOG_CODSEZ));
|
||||
set_row(2,"@64g@S", FLD(LF_SOGGETTI,SOG_CODSOT));
|
||||
set_row(1,"@64g@ld", FLD(LF_DONAZ,DON_DATADON));
|
||||
set_row(2,"@64g@S", FLD(LF_DONAZ,DON_TIPODON));
|
||||
//set_row(1,"@104g@S", FLD(LF_DONAZ, DON_LUOGODON));
|
||||
set_row(1,"@75g@S", FLD(LF_SOGGETTI, SOG_GRUPPOAB0));
|
||||
set_row(2,"@75g@S", FLD(LF_SOGGETTI, SOG_RHANTID));
|
||||
set_row(1,"@79g#t", &_controllo);
|
||||
set_row(1,"@76g@S", FLD(LF_SOGGETTI,SOG_CODSEZ));
|
||||
set_row(1,"@79g@S", FLD(LF_SOGGETTI,SOG_CODSOT));
|
||||
set_row(1,"@82g@S", FLD(LF_SOGGETTI, SOG_GRUPPOAB0));
|
||||
set_row(1,"@87g@S", FLD(LF_SOGGETTI, SOG_RHANTID));
|
||||
set_row(1,"@91g@S", FLD(LF_SOGGETTI, SOG_FENOTIPORH));
|
||||
set_row(1,"@98g@S", FLD(LF_SOGGETTI, SOG_KELL));
|
||||
set_row(1,"@102g@S", FLD(LF_SOGGETTI, SOG_DU));
|
||||
set_row(1,"@106g@pn", FLD(LF_DONAZ,DON_ETICHETTA,"#########"));
|
||||
}
|
||||
else
|
||||
{
|
||||
set_row(1,"@0g#D", &_contatore);
|
||||
set_row(1,"@7g@pn", FLD(LF_DONAZ,DON_ETICHETTA,"#########"));
|
||||
set_row(1,"@17g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
|
||||
set_row(1,"@26g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS));
|
||||
set_row(1,"@34g#a", &_cognome_nome);
|
||||
set_row(1,"@70g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(1,"@81g@S", FLD(LF_SOGGETTI,SOG_CODSEZ));
|
||||
set_row(1,"@84g@S", FLD(LF_SOGGETTI,SOG_CODSOT));
|
||||
set_row(1,"@87g@ld", FLD(LF_DONAZ,DON_DATADON));
|
||||
set_row(1,"@98g@S", FLD(LF_DONAZ,DON_TIPODON));
|
||||
set_row(1,"@104g@S", FLD(LF_DONAZ, DON_LUOGODON));
|
||||
set_row(1,"@110g@S", FLD(LF_SOGGETTI, SOG_GRUPPOAB0));
|
||||
set_row(1,"@114g@S", FLD(LF_SOGGETTI, SOG_RHANTID));
|
||||
set_row(1,"@118g@S", FLD(LF_SOGGETTI, SOG_FENOTIPORH));
|
||||
set_row(1,"@125g@S", FLD(LF_SOGGETTI, SOG_KELL));
|
||||
set_row(1,"@129g@S", FLD(LF_SOGGETTI, SOG_DU));
|
||||
}
|
||||
if (_stampa80)
|
||||
{
|
||||
set_row(1,"@0g#D", &_contatore);
|
||||
set_row(1,"@6g@pn", FLD(LF_DONAZ,DON_ETICHETTA,"#########"));
|
||||
set_row(1,"@16g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
|
||||
set_row(2,"@16g@8,rs", FLD(LF_SOGGETTI,SOG_TESSAVIS));
|
||||
set_row(1,"@25g#a", &_cognome_nome);
|
||||
set_row(2,"@25g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(1,"@61g@S", FLD(LF_SOGGETTI,SOG_CODSEZ));
|
||||
set_row(2,"@64g@S", FLD(LF_SOGGETTI,SOG_CODSOT));
|
||||
set_row(1,"@64g@ld", FLD(LF_DONAZ,DON_DATADON));
|
||||
set_row(2,"@64g@S", FLD(LF_DONAZ,DON_TIPODON));
|
||||
//set_row(1,"@104g@S", FLD(LF_DONAZ, DON_LUOGODON));
|
||||
set_row(1,"@75g@S", FLD(LF_SOGGETTI, SOG_GRUPPOAB0));
|
||||
set_row(2,"@75g@S", FLD(LF_SOGGETTI, SOG_RHANTID));
|
||||
set_row(1,"@79g#t", &_controllo);
|
||||
}
|
||||
else
|
||||
{
|
||||
set_row(1,"@0g#D", &_contatore);
|
||||
set_row(1,"@7g@pn", FLD(LF_DONAZ,DON_ETICHETTA,"#########"));
|
||||
set_row(1,"@17g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
|
||||
set_row(1,"@26g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS));
|
||||
set_row(1,"@34g#a", &_cognome_nome);
|
||||
set_row(1,"@70g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
|
||||
set_row(1,"@81g@S", FLD(LF_SOGGETTI,SOG_CODSEZ));
|
||||
set_row(1,"@84g@S", FLD(LF_SOGGETTI,SOG_CODSOT));
|
||||
set_row(1,"@87g@ld", FLD(LF_DONAZ,DON_DATADON));
|
||||
set_row(1,"@98g@S", FLD(LF_DONAZ,DON_TIPODON));
|
||||
set_row(1,"@104g@S", FLD(LF_DONAZ, DON_LUOGODON));
|
||||
set_row(1,"@110g@S", FLD(LF_SOGGETTI, SOG_GRUPPOAB0));
|
||||
set_row(1,"@114g@S", FLD(LF_SOGGETTI, SOG_RHANTID));
|
||||
set_row(1,"@118g@S", FLD(LF_SOGGETTI, SOG_FENOTIPORH));
|
||||
set_row(1,"@125g@S", FLD(LF_SOGGETTI, SOG_KELL));
|
||||
set_row(1,"@129g@S", FLD(LF_SOGGETTI, SOG_DU));
|
||||
}
|
||||
}
|
||||
|
||||
bool TControlloDonazioni::preprocess_page(int file, int counter)
|
||||
@ -163,7 +179,7 @@ print_action TControlloDonazioni::postprocess_print(int file, int counter)
|
||||
{
|
||||
if (_contatore > 0)
|
||||
footer_stampa();
|
||||
if (_totfinestampa > 0)
|
||||
if (_totfinestampa > 0 && _contatore != _totfinestampa)
|
||||
fine_stampa();
|
||||
return NEXT_PAGE;
|
||||
}
|
||||
@ -272,7 +288,9 @@ bool TControlloDonazioni::set_print(int m)
|
||||
_tipodon = _msk->get(F_TIPODON);
|
||||
_luogodon = _msk->get(F_LUOGODON);
|
||||
_primedon = _msk->get_bool(F_PRIMEDON);
|
||||
|
||||
_breve = _msk->get_bool(F_BREVE);
|
||||
if (_breve)
|
||||
_cognome_nome.set_width(50);
|
||||
_tipostampa = _msk->get(F_TIPOSTAMPA);
|
||||
_ordinamento = _msk->get(F_ORDINAMENTO);
|
||||
TString80 chiave = "";
|
||||
@ -422,17 +440,23 @@ void TControlloDonazioni::crea_intestazione()
|
||||
else
|
||||
sep.center_just(132);
|
||||
set_header(2,"@0g%s", (const char*) sep);
|
||||
if (_stampa80)
|
||||
{
|
||||
set_header(3,"@0gProg.@6gEt.sacca@16gCodice@25gCognome e nome@61gSe@64gData don.@75gGr.");
|
||||
set_header(4,"@16gTessera@25gData nascita@61gSo@64gTipo don.@75gRh");
|
||||
set_header(5,"@0g-----@6g---------@16g--------@25g-----------------------------------@61g--@64g----------@75g---");
|
||||
if (_breve)
|
||||
{
|
||||
set_header(3,"@0gData@11gPunto@20gTipo@25gCognome e nome@76gSe/So@82gAB0 Rh/A Fen.Rh Kell Du@106gEtichetta");
|
||||
set_header(4,"@0g----------@11g-----@20g----@25g--------------------------------------------------@76g-----@82g--- ---- ------ ---- --@106g---------");
|
||||
}
|
||||
else
|
||||
{
|
||||
set_header(3,"@0gProg.@7gEt.sacca@17gCodice@26gTessera@34gCognome e nome@70gNato il@81gSe/So@87gData don.@98gTipo@104gLuogo@110gGr.@114gRh@118gFen.Rh@125gKellDu");
|
||||
set_header(4,"@0g------@7g---------@17g--------@26g-------@34g-----------------------------------@70g----------@81g-----@87g----------@98g----@104g-----@110g---@114g---@118g------@125g--- ---");
|
||||
}
|
||||
else
|
||||
if (_stampa80)
|
||||
{
|
||||
set_header(3,"@0gProg.@6gEt.sacca@16gCodice@25gCognome e nome@61gSe@64gData don.@75gGr.");
|
||||
set_header(4,"@16gTessera@25gData nascita@61gSo@64gTipo don.@75gRh");
|
||||
set_header(5,"@0g-----@6g---------@16g--------@25g-----------------------------------@61g--@64g----------@75g---");
|
||||
}
|
||||
else
|
||||
{
|
||||
set_header(3,"@0gProg.@7gEt.sacca@17gCodice@26gTessera@34gCognome e nome@70gNato il@81gSe/So@87gData don.@98gTipo@104gLuogo@110gGr.@114gRh@118gFen.Rh@125gKellDu");
|
||||
set_header(4,"@0g------@7g---------@17g--------@26g-------@34g-----------------------------------@70g----------@81g-----@87g----------@98g----@104g-----@110g---@114g---@118g------@125g--- ---");
|
||||
}
|
||||
printer().footerlen(3);
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,8 @@
|
||||
#define F_TIPODON 111
|
||||
#define F_LUOGODON 112
|
||||
#define F_PRIMEDON 113
|
||||
#define F_TIPOSTAMPA 114
|
||||
#define F_ORDINAMENTO 115
|
||||
#define F_BREVE 114
|
||||
#define F_TIPOSTAMPA 115
|
||||
#define F_ORDINAMENTO 116
|
||||
#define F_D_TIPODON 201
|
||||
#define F_D_LUOGODON 202
|
||||
|
@ -177,6 +177,11 @@ BEGIN
|
||||
PROMPT 2 9 "Stampa solo prime donazioni"
|
||||
END
|
||||
|
||||
BOOLEAN F_BREVE
|
||||
BEGIN
|
||||
PROMPT 36 9 "Formato di stampa breve"
|
||||
END
|
||||
|
||||
RADIOBUTTON F_TIPOSTAMPA 25
|
||||
BEGIN
|
||||
PROMPT 1 11 "Stampa per "
|
||||
|
@ -229,6 +229,7 @@ bool TStampaIncompleti::set_print(int m)
|
||||
reset_files();
|
||||
add_file(LF_SOGGETTI);
|
||||
filtra_sezioni();
|
||||
_catdon.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
@ -247,6 +248,7 @@ bool TStampaIncompleti::set_print(int m)
|
||||
_catdon.add((const char*) catqui);
|
||||
if (catses.not_empty() && catses.ok())
|
||||
_catdon.add((const char*) catses);
|
||||
_catnondon.destroy();
|
||||
const TString16 catnpri = _msk->get(F_CATN1);
|
||||
const TString16 catnsec = _msk->get(F_CATN2);
|
||||
const TString16 catnter = _msk->get(F_CATN3);
|
||||
|
146
at/at7300.cpp
146
at/at7300.cpp
@ -1,28 +1,28 @@
|
||||
#include <mask.h>
|
||||
#include <printapp.h>
|
||||
#include <recarray.h>
|
||||
#include <tabutil.h>
|
||||
#include <recarray.h>
|
||||
#include <utility.h>
|
||||
#include <lffiles.h>
|
||||
|
||||
#include "at7.h"
|
||||
|
||||
#include "atlib.h"
|
||||
|
||||
|
||||
// nomi dei campi
|
||||
#include "soggetti.h"
|
||||
#include "contsan.h"
|
||||
#include "idoneita.h"
|
||||
|
||||
class TFS_NoData_app : public TPrintapp
|
||||
class TBologna90 : public TPrintapp
|
||||
{
|
||||
TMask* _msk;
|
||||
TRelation* _rel;
|
||||
int _cur;
|
||||
TLocalisamfile* _soggetti;
|
||||
TLocalisamfile* _contsan;
|
||||
TRecord_array* _scontrolli;
|
||||
TString16 _sospensione, _finesospensione;
|
||||
|
||||
int _cur;
|
||||
TLocalisamfile* _contsan;
|
||||
TRecord_array* _scontrolli;
|
||||
TLocalisamfile* _idoneita;
|
||||
TRecord_array* _sidoneita;
|
||||
|
||||
protected:
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
@ -31,94 +31,122 @@ protected:
|
||||
virtual bool preprocess_page(int file, int counter);
|
||||
|
||||
public:
|
||||
TFS_NoData_app() {}
|
||||
TBologna90() {}
|
||||
};
|
||||
|
||||
HIDDEN inline TFS_NoData_app& app() { return (TFS_NoData_app&) main_app(); }
|
||||
HIDDEN inline TBologna90& app() { return (TBologna90&) main_app(); }
|
||||
|
||||
bool TFS_NoData_app::preprocess_page(int file, int counter)
|
||||
bool TBologna90::preprocess_page(int file, int counter)
|
||||
{
|
||||
|
||||
bool rew = FALSE;
|
||||
bool rewrite = FALSE;
|
||||
TRectype& recsog = current_cursor()->curr();
|
||||
const long codice = recsog.get_long(SOG_CODICE);
|
||||
TRectype* key = new TRectype(LF_CONTSAN);
|
||||
key->put(CON_CODICE, codice);
|
||||
int err = _scontrolli->read(key);
|
||||
if (err == NOERR)
|
||||
{
|
||||
const int numrighe = _scontrolli->rows();
|
||||
if (numrighe > 0)
|
||||
{
|
||||
const TRectype& riga = _scontrolli->row(numrighe);
|
||||
const TString16 tipocon = riga.get(CON_TIPOCON);
|
||||
const TString16 prosstipo = riga.get(CON_PROSSTIPO);
|
||||
const TDate prossdata = riga.get(CON_PROSSDATA);
|
||||
const TDate datanulla(NULLDATE);
|
||||
if ((tipocon == _sospensione) && (prosstipo == _finesospensione) && (prossdata != datanulla))
|
||||
{
|
||||
TString16 statopross = recsog.get(SOG_PROS_STATO);
|
||||
TDate datapross = recsog.get(SOG_DATA_PROS);
|
||||
if (statopross.empty() && datapross == datanulla)
|
||||
const int intaf = recsog.get_int(SOG_INTAF);
|
||||
if (intaf != 0 && intaf != 45)
|
||||
{
|
||||
recsog.put(SOG_INTAF, 45);
|
||||
const long codice = recsog.get_long(SOG_CODICE);
|
||||
TRectype* keyc = new TRectype(LF_CONTSAN);
|
||||
keyc->put(CON_CODICE, codice);
|
||||
int err = _scontrolli->read(keyc);
|
||||
TRectype* keyi = new TRectype(LF_IDONEITA);
|
||||
keyi->put(IDO_CODICE, codice);
|
||||
int erri = _sidoneita->read(keyi);
|
||||
if ((err == NOERR || erri == NOERR) && (_scontrolli->rows() > 0 || _sidoneita->rows() > 0))
|
||||
{
|
||||
for (int c=1; c<=_scontrolli->rows(); c++)
|
||||
{
|
||||
TRectype& riga = _scontrolli->row(c, TRUE);
|
||||
int intaf = riga.get_int(CON_INTAF);
|
||||
if (intaf != 0 && intaf != 45)
|
||||
riga.put(CON_INTAF, 45);
|
||||
}
|
||||
for (int r=1; r<=_sidoneita->rows(); r++)
|
||||
{
|
||||
TRectype& riga = _sidoneita->row(r, TRUE);
|
||||
const TString16 tipoido = riga.get(IDO_TIPOIDO);
|
||||
if (tipoido == "AF")
|
||||
{
|
||||
recsog.put(SOG_PROS_STATO, prosstipo);
|
||||
recsog.put(SOG_DATA_PROS, prossdata);
|
||||
current_cursor()->file().rewrite();
|
||||
rew = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return rew;
|
||||
int intaf = riga.get_int(IDO_INTERVALLO);
|
||||
if (intaf != 0 && intaf != 45)
|
||||
riga.put(CON_INTAF, 45);
|
||||
}
|
||||
}
|
||||
_scontrolli->rewrite();
|
||||
_sidoneita->rewrite();
|
||||
con_reord(recsog,_scontrolli, _sidoneita);
|
||||
//ido_reord(recsog,_sidoneita);
|
||||
rewrite = TRUE;
|
||||
}
|
||||
}
|
||||
if (rewrite)
|
||||
current_cursor()->file().rewrite();
|
||||
return rewrite;
|
||||
}
|
||||
|
||||
void TFS_NoData_app::set_page(int file, int cnt)
|
||||
void TBologna90::set_page(int file, int cnt)
|
||||
{
|
||||
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
|
||||
set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
|
||||
set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_NOME));
|
||||
//set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
|
||||
//set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_NOME));
|
||||
}
|
||||
|
||||
bool TFS_NoData_app::set_print(int)
|
||||
bool TBologna90::set_print(int)
|
||||
{
|
||||
KEY tasto;
|
||||
tasto = _msk->run();
|
||||
if (tasto == K_ENTER)
|
||||
{
|
||||
reset_files();
|
||||
/*
|
||||
TRectype da(LF_SOGGETTI);
|
||||
TRectype a(LF_SOGGETTI);
|
||||
const long codini = _msk->get_long(F_CODINI);
|
||||
const long codfin = _msk->get_long(F_CODFIN);
|
||||
da.zero();
|
||||
a.zero();
|
||||
if (codini != 0)
|
||||
da.put(SOG_CODICE, codini);
|
||||
if (codfin != 0)
|
||||
a.put(SOG_CODICE, codfin);
|
||||
current_cursor()->setregion(da,a);
|
||||
*/
|
||||
//current_cursor()->setfilter(format("STATO == \"RF\""));
|
||||
|
||||
reset_files();
|
||||
add_file(LF_SOGGETTI);
|
||||
reset_print();
|
||||
_sospensione = "SO";
|
||||
_finesospensione = "FS";
|
||||
current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)_sospensione));
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool TFS_NoData_app::user_create()
|
||||
bool TBologna90::user_create()
|
||||
{
|
||||
_msk = new TMask("at7300a");
|
||||
_rel = new TRelation(LF_SOGGETTI);
|
||||
_contsan = new TLocalisamfile(LF_CONTSAN);
|
||||
_scontrolli = new TRecord_array(LF_CONTSAN,CON_PROGCON);
|
||||
_contsan = new TLocalisamfile(LF_CONTSAN);
|
||||
_scontrolli = new TRecord_array(LF_CONTSAN,CON_PROGCON);
|
||||
_idoneita = new TLocalisamfile(LF_IDONEITA);
|
||||
_sidoneita = new TRecord_array(LF_IDONEITA,IDO_PROGIDO);
|
||||
_cur = add_cursor(new TCursor(_rel, "", 1));
|
||||
long items = _rel->lfile().items();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TFS_NoData_app::user_destroy()
|
||||
bool TBologna90::user_destroy()
|
||||
{
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
delete _contsan;
|
||||
delete _rel;
|
||||
delete _scontrolli;
|
||||
delete _contsan;
|
||||
delete _sidoneita;
|
||||
delete _idoneita;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int at7300(int argc, char* argv[])
|
||||
{
|
||||
TFS_NoData_app a;
|
||||
a.run(argc, argv, "Correzione stato e data prossimo stato");
|
||||
TBologna90 a;
|
||||
a.run(argc, argv, "Bologna: intaf = 90");
|
||||
return 0;
|
||||
}
|
@ -1,5 +1,4 @@
|
||||
PAGE "Stampa SO senza data FS" -1 -1 78 20
|
||||
|
||||
PAGE "Bologna AF 90->45" -1 -1 78 20
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 14 ""
|
||||
|
@ -35,7 +35,7 @@ BEGIN
|
||||
GRID ""
|
||||
END
|
||||
|
||||
SECTION BODY ODD 60
|
||||
SECTION BODY ODD 30
|
||||
|
||||
STRINGA 1 50
|
||||
BEGIN
|
||||
|
@ -5,6 +5,7 @@ bool is_idon_one(TString16 idon, const char* tipo);
|
||||
bool is_idon(TString16 id1, TString16 id2, TString16 id3, TString16 id4, const char* tipo);
|
||||
bool is_donaz(TString16 don, const char* tipo);
|
||||
char modstato_tcs(TString16 tipo);
|
||||
void con_reord(TRectype& soggetto, TRecord_array* controlli);
|
||||
void con_reord(TRectype& soggetto, TRecord_array* controlli, TRecord_array* idoneita);
|
||||
void ido_reord(TRectype& soggetto, TRecord_array* idoneita);
|
||||
void don_datepross(TRectype& soggetto);
|
||||
void calcola_donazioni_lib(TRectype& soggetto, TRecord_array* donazioni);
|
||||
|
332
at/atlib1.cpp
332
at/atlib1.cpp
@ -4,6 +4,7 @@
|
||||
|
||||
#include "soggetti.h"
|
||||
#include "contsan.h"
|
||||
#include "donaz.h"
|
||||
#include "idoneita.h"
|
||||
|
||||
#define IDON_SI "SI"
|
||||
@ -62,37 +63,31 @@ char modstato_tcs(TString16 tipo)
|
||||
return modstato;
|
||||
}
|
||||
|
||||
void con_reord(TRectype& soggetto, TRecord_array* controlli)
|
||||
{
|
||||
TDate data, prossdata;
|
||||
TString16 tipo, prosstipo;
|
||||
void con_reord(TRectype& soggetto, TRecord_array* controlli, TRecord_array* idoneita)
|
||||
{
|
||||
const TDate datanulla(NULLDATE);
|
||||
TDate data(NULLDATE);
|
||||
TDate prossdata(NULLDATE);
|
||||
TString16 tipo = " ";
|
||||
TString16 prosstipo = " ";
|
||||
char modstato = ' ';
|
||||
int r_modifica = -1; // eventuale ultima riga di modifica id.
|
||||
int r_ultid = -1; // riga ultima idoneità
|
||||
int r_ultstato = -1; // riga ultimo stato valido
|
||||
int r_ultid = -1; // riga ultima idoneità
|
||||
int r_ultstato = -1; // riga ultimo stato valido
|
||||
char penultstato = ' '; // penultimo stato valido
|
||||
char ultstato = ' '; // ultimo stato valido
|
||||
TDate dataultstato(NULLDATE); // data ultimo stato valido
|
||||
|
||||
for (int r=controlli->rows(); r>=1; r--)
|
||||
for (int r=controlli->rows(); r>0; r--)
|
||||
{
|
||||
const TRectype& row = controlli->row(r);
|
||||
tipo = row.get(CON_TIPOCON);
|
||||
modstato = modstato_tcs(tipo);
|
||||
if (modstato == 'M')
|
||||
{
|
||||
if (r_modifica == -1)
|
||||
r_modifica = r;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((modstato != ' ') && (r_ultstato == -1))
|
||||
if ((modstato != 'N') && (r_ultstato == -1))
|
||||
r_ultstato = r;
|
||||
else if ((modstato != ' ') && (penultstato == ' '))
|
||||
else if ((modstato != 'N') && (penultstato == ' '))
|
||||
penultstato = modstato;
|
||||
if ((modstato == 'I') && (r_ultid == -1))
|
||||
r_ultid = r;
|
||||
}
|
||||
}
|
||||
TString16 id1 = ' ';
|
||||
TString16 id2 = ' ';
|
||||
@ -116,16 +111,6 @@ void con_reord(TRectype& soggetto, TRecord_array* controlli)
|
||||
id4 = row.get(CON_IDON4);
|
||||
intsi = row.get_int(CON_INTSI);
|
||||
intaf = row.get_int(CON_INTAF);
|
||||
if (r_modifica > r_ultid)
|
||||
{
|
||||
const TRectype& rowm = controlli->row(r_modifica);
|
||||
id1 = rowm.get(CON_IDON1);
|
||||
id2 = rowm.get(CON_IDON2);
|
||||
id3 = rowm.get(CON_IDON3);
|
||||
id4 = rowm.get(CON_IDON4);
|
||||
intsi = rowm.get_int(CON_INTSI);
|
||||
intaf = rowm.get_int(CON_INTAF);
|
||||
}
|
||||
}
|
||||
soggetto.put(SOG_DATAULTID,data);
|
||||
soggetto.put(SOG_TIPOULTID,tipo);
|
||||
@ -133,13 +118,10 @@ void con_reord(TRectype& soggetto, TRecord_array* controlli)
|
||||
soggetto.put(SOG_IDON2,id2);
|
||||
soggetto.put(SOG_IDON3,id3);
|
||||
soggetto.put(SOG_IDON4,id4);
|
||||
const int intsisog = soggetto.get_int(SOG_INTSI);
|
||||
if (intsi > 0 || intsisog == 0)
|
||||
if (intsi > 0)
|
||||
soggetto.put(SOG_INTSI,intsi);
|
||||
const int intafsog = soggetto.get_int(SOG_INTAF);
|
||||
if (intaf > 0 || intafsog == 0)
|
||||
if (intaf > 0)
|
||||
soggetto.put(SOG_INTAF,intaf);
|
||||
|
||||
tipo = ' ';
|
||||
if (r_ultstato != -1)
|
||||
{
|
||||
@ -154,100 +136,124 @@ void con_reord(TRectype& soggetto, TRecord_array* controlli)
|
||||
soggetto.put(SOG_DATASTATO,dataultstato);
|
||||
soggetto.put(SOG_PROS_STATO,prosstipo);
|
||||
soggetto.put(SOG_DATA_PROS,prossdata);
|
||||
|
||||
|
||||
soggetto.put(SOG_STATOSI, " ");
|
||||
soggetto.put(SOG_STATOAF, " ");
|
||||
soggetto.put(SOG_DATASI, datanulla);
|
||||
soggetto.put(SOG_DATAAF, datanulla);
|
||||
soggetto.put(SOG_FINESOSSI, datanulla);
|
||||
soggetto.put(SOG_FINESOSAF, datanulla);
|
||||
|
||||
// riordino le idoneita
|
||||
for (int ri=1; ri<=idoneita->rows(); ri++)
|
||||
{
|
||||
const TRectype& row = idoneita->row(ri);
|
||||
TDate dataido = row.get_date(IDO_DATAIDO);
|
||||
TString16 tipoido = row.get(IDO_TIPOIDO);
|
||||
TString16 ido_sos = row.get(IDO_IDO_SOS);
|
||||
int intervallo = row.get_int(IDO_INTERVALLO);
|
||||
TDate finesos = row.get_date(IDO_FINESOS);
|
||||
if (tipoido == IDON_SI)
|
||||
if ((intervallo != 0) && (intsi == 0))
|
||||
soggetto.put(SOG_INTSI, intervallo);
|
||||
if (tipoido == IDON_AF)
|
||||
if ((intervallo != 0) && (intaf == 0))
|
||||
soggetto.put(SOG_INTAF, intervallo);
|
||||
if (dataido >= dataultstato)
|
||||
{
|
||||
if (tipoido == IDON_SI)
|
||||
{
|
||||
soggetto.put(SOG_DATASI,dataido);
|
||||
soggetto.put(SOG_STATOSI,ido_sos);
|
||||
soggetto.put(SOG_FINESOSSI,finesos);
|
||||
if (intervallo != 0 && ido_sos == IDONEITA)
|
||||
{
|
||||
soggetto.put(SOG_INTSI,intervallo);
|
||||
if (id1 != IDON_SI && id2 != IDON_SI && id3 != IDON_SI && id4 != IDON_SI)
|
||||
if (id1.empty())
|
||||
soggetto.put(SOG_IDON1,IDON_SI);
|
||||
else
|
||||
if (id2.empty())
|
||||
soggetto.put(SOG_IDON2,IDON_SI);
|
||||
else
|
||||
if (id3.empty())
|
||||
soggetto.put(SOG_IDON3,IDON_SI);
|
||||
else
|
||||
if (id4.empty())
|
||||
soggetto.put(SOG_IDON4,IDON_SI);
|
||||
}
|
||||
}
|
||||
if (tipoido == IDON_AF)
|
||||
{
|
||||
soggetto.put(SOG_DATAAF,dataido);
|
||||
soggetto.put(SOG_STATOAF,ido_sos);
|
||||
soggetto.put(SOG_FINESOSAF,finesos);
|
||||
if (intervallo != 0 && ido_sos == IDONEITA)
|
||||
{
|
||||
soggetto.put(SOG_INTAF,intervallo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
TTable tcs("TCS");
|
||||
tcs.put("CODTAB",tipo);
|
||||
if (tcs.read() == NOERR)
|
||||
{
|
||||
TString catcoll = tcs.get("S7");
|
||||
if (catcoll.not_empty())
|
||||
{
|
||||
mask.set(F_CATDON,catcoll);
|
||||
mask.field(F_CATDON).on_key(K_TAB);
|
||||
}
|
||||
}
|
||||
*/
|
||||
// verifico la concordanza di stato soggetto e stato idoneita
|
||||
TString16 statosi = soggetto.get(SOG_STATOSI);
|
||||
TString16 statoaf = soggetto.get(SOG_STATOAF);
|
||||
TDate datastatosi = soggetto.get_date(SOG_DATASI);
|
||||
TDate datastatoaf = soggetto.get_date(SOG_DATAAF);
|
||||
if (statosi.not_empty() || statoaf.not_empty())
|
||||
{
|
||||
TString16 stato = soggetto.get(SOG_STATO);
|
||||
char modstato = modstato_tcs(stato);
|
||||
if ((statosi == IDONEITA || statosi.empty()) && (statoaf == IDONEITA || statoaf.empty()))
|
||||
if ((modstato != 'I') || (modstato != 'F'))
|
||||
stato = IDONEITA;
|
||||
if ((statosi == SOSPENSIONE || statosi.empty()) && (statoaf == SOSPENSIONE || statoaf.empty()))
|
||||
if (modstato != 'S')
|
||||
stato = SOSPENSIONE;
|
||||
char statocalcolato = modstato_tcs(stato);
|
||||
if (modstato != statocalcolato)
|
||||
{
|
||||
soggetto.put(SOG_STATO, stato);
|
||||
soggetto.put(SOG_PROS_STATO," ");
|
||||
soggetto.put(SOG_DATA_PROS, datanulla);
|
||||
if (statocalcolato == 'I')
|
||||
{
|
||||
TDate datacalcolata = NULLDATE;
|
||||
if (statosi == IDONEITA)
|
||||
datacalcolata = datastatosi;
|
||||
if ((statoaf == IDONEITA) && (datastatoaf > datacalcolata))
|
||||
datacalcolata = datastatoaf;
|
||||
soggetto.put(SOG_DATASTATO,datacalcolata);
|
||||
}
|
||||
else
|
||||
if (datastatoaf > datastatosi)
|
||||
soggetto.put(SOG_DATASTATO,datastatoaf);
|
||||
else
|
||||
soggetto.put(SOG_DATASTATO,datastatosi);
|
||||
}
|
||||
}
|
||||
don_datepross(soggetto);
|
||||
|
||||
if ((penultstato == 'S') && ((ultstato == 'I') || (ultstato == 'F')))
|
||||
|
||||
if (((penultstato == 'S') || (penultstato == 'I')) && ((ultstato == 'I') || (ultstato == 'F')))
|
||||
{
|
||||
data = soggetto.get_date(SOG_DATAPROSSI);
|
||||
if (data < dataultstato && data.ok()) soggetto.put(SOG_DATAPROSSI,dataultstato);
|
||||
data = soggetto.get_date(SOG_DATAPROSAF);
|
||||
if (data < dataultstato && data.ok()) soggetto.put(SOG_DATAPROSAF,dataultstato);
|
||||
}
|
||||
if ((penultstato == '1') && (ultstato == 'F'))
|
||||
{
|
||||
data = soggetto.get_date(SOG_DATAPROSSI);
|
||||
if (data < dataultstato) soggetto.put(SOG_DATAPROSSI,dataultstato);
|
||||
}
|
||||
if ((penultstato == '2') && (ultstato == 'F'))
|
||||
{
|
||||
data = soggetto.get_date(SOG_DATAPROSAF);
|
||||
if (data < dataultstato) soggetto.put(SOG_DATAPROSAF,dataultstato);
|
||||
}
|
||||
}
|
||||
|
||||
void ido_reord(TRectype& soggetto, TRecord_array* idoneita)
|
||||
{
|
||||
TDate dataido, finesos;
|
||||
TString16 tipoido, ido_sos;
|
||||
int intervallo;
|
||||
bool fattoSI = FALSE;
|
||||
bool fattoAF = FALSE;
|
||||
TString16 id1 = soggetto.get(SOG_IDON1);
|
||||
TString16 id2 = soggetto.get(SOG_IDON2);
|
||||
TString16 id3 = soggetto.get(SOG_IDON3);
|
||||
TString16 id4 = soggetto.get(SOG_IDON4);
|
||||
const TDate datastato = soggetto.get_date(SOG_DATASTATO);
|
||||
for (int r=idoneita->rows(); r>=1; r--)
|
||||
{
|
||||
const TRectype& row = idoneita->row(r);
|
||||
dataido = row.get_date(IDO_DATAIDO);
|
||||
if (dataido >= datastato)
|
||||
{
|
||||
tipoido = row.get(IDO_TIPOIDO);
|
||||
ido_sos = row.get(IDO_IDO_SOS);
|
||||
intervallo = row.get_int(IDO_INTERVALLO);
|
||||
finesos = row.get_date(IDO_FINESOS);
|
||||
if (tipoido == IDON_SI && !fattoSI)
|
||||
{
|
||||
fattoSI = TRUE;
|
||||
soggetto.put(SOG_DATASI,dataido);
|
||||
soggetto.put(SOG_STATOSI,ido_sos);
|
||||
soggetto.put(SOG_FINESOSSI,finesos);
|
||||
if (intervallo != 0 && ido_sos == IDONEITA)
|
||||
soggetto.put(SOG_INTSI,intervallo);
|
||||
// sistemare le idoneita idon1,2,3,4
|
||||
}
|
||||
if (tipoido == IDON_AF && !fattoAF)
|
||||
{
|
||||
fattoAF = TRUE;
|
||||
soggetto.put(SOG_DATAAF,dataido);
|
||||
soggetto.put(SOG_STATOAF,ido_sos);
|
||||
soggetto.put(SOG_FINESOSAF,finesos);
|
||||
if (intervallo != 0 && ido_sos == IDONEITA)
|
||||
soggetto.put(SOG_INTAF,intervallo);
|
||||
// sistemare le idoneita idon1,2,3,4
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fattoSI || fattoAF)
|
||||
{
|
||||
TDate datastato = soggetto.get_date(SOG_DATASTATO);
|
||||
TDate datastatosi = soggetto.get_date(SOG_DATASI);
|
||||
TDate datastatoaf = soggetto.get_date(SOG_DATAAF);
|
||||
if (datastato < datastatosi || datastato < datastatoaf)
|
||||
{
|
||||
TString16 stato = soggetto.get(SOG_STATO);
|
||||
TString16 statosi = soggetto.get(SOG_STATOSI);
|
||||
TString16 statoaf = soggetto.get(SOG_STATOAF);
|
||||
if (statosi == SOSPENSIONE && statoaf == SOSPENSIONE)
|
||||
stato = SOSPENSIONE;
|
||||
else
|
||||
stato = IDONEITA;
|
||||
soggetto.put(SOG_STATO,stato);
|
||||
don_datepross(soggetto);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
soggetto.put(SOG_STATOSI," ");
|
||||
soggetto.put(SOG_DATASI,NULLDATE);
|
||||
soggetto.put(SOG_FINESOSSI,NULLDATE);
|
||||
soggetto.put(SOG_STATOAF," ");
|
||||
soggetto.put(SOG_DATAAF,NULLDATE);
|
||||
soggetto.put(SOG_FINESOSAF,NULLDATE);
|
||||
don_datepross(soggetto);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void don_datepross(TRectype& soggetto)
|
||||
@ -271,11 +277,11 @@ void don_datepross(TRectype& soggetto)
|
||||
bool id_af = FALSE; // il soggetto è idoneo per af?
|
||||
|
||||
modstato = modstato_tcs(stato);
|
||||
if (modstato == 'I' || modstato == 'F' || modstato == '1' || modstato == '2') // il soggetto è idoneo
|
||||
if (modstato == 'I' || modstato == 'F') // il soggetto è idoneo
|
||||
{
|
||||
id_si = (is_idon(id1,id2,id3,id4,IDON_SI) && intsi != 0); // il soggetto è idoneo SI
|
||||
id_af = (is_idon(id1,id2,id3,id4,IDON_AF) && intaf != 0); // il soggetto è idoneo AF
|
||||
|
||||
id_si = ((is_idon(id1,id2,id3,id4,IDON_SI) || (soggetto.get(SOG_STATOSI) == IDONEITA)) && (intsi != 0)); // il soggetto è idoneo SI
|
||||
id_af = ((is_idon(id1,id2,id3,id4,IDON_AF) || (soggetto.get(SOG_STATOAF) == IDONEITA)) && (intaf != 0)); // il soggetto è idoneo AF
|
||||
|
||||
if (dataultdon.ok()) // se ha fatto almeno una donazione
|
||||
{
|
||||
if (is_donaz(tipoultdon,IDON_SI)) // se l'ultima donazione è una SI
|
||||
@ -326,11 +332,79 @@ void don_datepross(TRectype& soggetto)
|
||||
dataaf = soggetto.get_date(SOG_DATAULTID);
|
||||
}
|
||||
}
|
||||
if (modstato == '1')
|
||||
datasi = NULLDATE;
|
||||
if (modstato == '2')
|
||||
dataaf = NULLDATE;
|
||||
TString16 statoparziale;
|
||||
TDate datastatoparziale;
|
||||
statoparziale = soggetto.get(SOG_STATOSI);
|
||||
datastatoparziale = soggetto.get_date(SOG_DATASI);
|
||||
if (statoparziale == SOSPENSIONE)
|
||||
datasi = NULLDATE;
|
||||
if (statoparziale == IDONEITA)
|
||||
if (datastatoparziale > datasi)
|
||||
datasi = datastatoparziale;
|
||||
statoparziale = soggetto.get(SOG_STATOAF);
|
||||
datastatoparziale = soggetto.get_date(SOG_DATAAF);
|
||||
if (statoparziale == SOSPENSIONE)
|
||||
dataaf = NULLDATE;
|
||||
if (statoparziale == IDONEITA)
|
||||
if (datastatoparziale > dataaf)
|
||||
dataaf = datastatoparziale;
|
||||
soggetto.put(SOG_DATAPROSSI,datasi);
|
||||
soggetto.put(SOG_DATAPROSAF,dataaf);
|
||||
}
|
||||
|
||||
void calcola_donazioni_lib(TRectype& soggetto, TRecord_array* donazioni)
|
||||
{
|
||||
TDate ultdata(NULLDATE);
|
||||
TString16 ulttipo = ' ';
|
||||
const int i = donazioni->rows();
|
||||
const int donprecsi = soggetto.get_int(SOG_DONPRECSI);
|
||||
const int donprecaf = soggetto.get_int(SOG_DONPRECAF);
|
||||
if (i < 0) // non ha donazioni
|
||||
{
|
||||
int zerodon = 0;
|
||||
soggetto.put(SOG_DATAULTDON,ultdata);
|
||||
soggetto.put(SOG_DATAULTSI,ultdata);
|
||||
soggetto.put(SOG_DATAULTAF,ultdata);
|
||||
soggetto.put(SOG_TOTDONSI,donprecsi);
|
||||
soggetto.put(SOG_TOTDONAF,donprecaf);
|
||||
soggetto.put(SOG_TIPOULTDON,ulttipo);
|
||||
}
|
||||
else
|
||||
{
|
||||
const TRectype& row = donazioni->row(i);
|
||||
|
||||
ultdata = row.get_date(DON_DATADON);
|
||||
ulttipo = row.get(DON_TIPODON);
|
||||
soggetto.put(SOG_DATAULTDON,ultdata);
|
||||
soggetto.put(SOG_TIPOULTDON,ulttipo);
|
||||
TDate dataultsi(NULLDATE);
|
||||
TDate dataultaf(NULLDATE);
|
||||
int totdonsi = 0;
|
||||
int totdonaf = 0;
|
||||
for (int r=1; r<=donazioni->rows(); r++)
|
||||
{
|
||||
const TRectype& row = donazioni->row(r);
|
||||
ultdata = row.get_date(DON_DATADON);
|
||||
ulttipo = row.get(DON_TIPODON);
|
||||
if (is_donaz(ulttipo,IDON_SI))
|
||||
{
|
||||
dataultsi = ultdata;
|
||||
totdonsi++;
|
||||
}
|
||||
else
|
||||
if (is_donaz(ulttipo,IDON_AF))
|
||||
{
|
||||
dataultaf = ultdata;
|
||||
totdonaf++;
|
||||
}
|
||||
}
|
||||
soggetto.put(SOG_DATAULTSI, dataultsi);
|
||||
soggetto.put(SOG_TOTDONSI, totdonsi+donprecsi);
|
||||
soggetto.put(SOG_DATAULTAF, dataultaf);
|
||||
soggetto.put(SOG_TOTDONAF, totdonaf+donprecaf);
|
||||
|
||||
soggetto.put(SOG_TOTDON, totdonsi+donprecsi+totdonaf+donprecaf);
|
||||
}
|
||||
don_datepross(soggetto);
|
||||
}
|
||||
|
||||
|
10
at/atopera.h
Executable file
10
at/atopera.h
Executable file
@ -0,0 +1,10 @@
|
||||
// definizione campi dell'archivio ATOPERA
|
||||
|
||||
#define OPE_PROGOPE "PROGOPE"
|
||||
#define OPE_CODSEZ "CODSEZ"
|
||||
#define OPE_CODSOT "CODSOT"
|
||||
#define OPE_GRUPPOAZIE "GRUPPOAZIE"
|
||||
#define OPE_DATA1 "DATA1"
|
||||
#define OPE_DATA2 "DATA2"
|
||||
#define OPE_FLAG1 "FLAG1"
|
||||
#define OPE_UTENTE "UTENTE"
|
5
at/atropera.h
Executable file
5
at/atropera.h
Executable file
@ -0,0 +1,5 @@
|
||||
// definizione campi dell'archivio ATROPERA
|
||||
|
||||
#define ROP_PROGOPE "PROGOPE"
|
||||
#define ROP_CODICE "CODICE"
|
||||
#define ROP_S0 "S0"
|
@ -8,4 +8,8 @@
|
||||
#define ATS_GIORNO "GIORNO"
|
||||
#define ATS_TIPODON "TIPODON"
|
||||
#define ATS_NUMERO "NUMERO"
|
||||
#define ATS_NUMPRIME "NUMPRIME"
|
||||
#define ATS_NUMPRIME "NUMPRIME"
|
||||
#define ATS_NUMERO2 "NUMERO2"
|
||||
#define ATS_NUMPRIME2 "NUMPRIME2"
|
||||
#define ATS_GRUPPO "GRUPPO"
|
||||
#define ATS_RH "RH"
|
||||
|
@ -4,3 +4,6 @@ ITEM " |"
|
||||
ITEM "NEG|NEG"
|
||||
ITEM "POS|POS"
|
||||
ITEM "DPO|++"
|
||||
ITEM "KK|KK"
|
||||
ITEM "Kk|Kk"
|
||||
ITEM "kk|kk"
|
||||
|
@ -8,3 +8,9 @@ ITEM "POS|POS"
|
||||
MESSAGE COPY,9@
|
||||
ITEM "DPO|++"
|
||||
MESSAGE COPY,9@
|
||||
ITEM "KK|KK"
|
||||
MESSAGE COPY,9@
|
||||
ITEM "Kk|Kk"
|
||||
MESSAGE COPY,9@
|
||||
ITEM "kk|kk"
|
||||
MESSAGE COPY,9@
|
||||
|
Loading…
x
Reference in New Issue
Block a user