Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            : Soggetti per frequenza: possibilita' di impostare la condizione sul numero di donazioni (Almeno, Esattamente, Da 1 a)


git-svn-id: svn://10.65.10.50/trunk@7739 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 1999-02-02 14:41:50 +00:00
parent f7042030d7
commit 725ef771e3
3 changed files with 108 additions and 63 deletions

View File

@ -51,8 +51,9 @@ class TFrequenza : public TPrintapp
ts _tipostampa; ts _tipostampa;
TString16 _codsez, _codsot; TString16 _codsez, _codsot;
int _etlarghezza, _etcolonne; int _etlarghezza, _etcolonne;
bool _stampa80; bool _stampa80, _ctrltotale;
int _contatore; int _contatore;
char _condizione;
protected: protected:
virtual bool user_create(); virtual bool user_create();
@ -175,27 +176,42 @@ bool TFrequenza::filter_func_freq(const TRelation* rel)
// filtro per numero donazioni nel periodo // filtro per numero donazioni nel periodo
if (filtrato) if (filtrato)
{ {
int numdon = 0;
filtrato = FALSE; filtrato = FALSE;
if (app()._ctrltotale)
numdon = sog.get_int(SOG_TOTDON);
else
{
const long codice = sog.get_long(SOG_CODICE); const long codice = sog.get_long(SOG_CODICE);
TRectype* key = new TRectype(LF_DONAZ); TRectype* key = new TRectype(LF_DONAZ);
key->put(DON_CODICE, codice); key->put(DON_CODICE, codice);
int err = app()._sdonazioni->read(key); int err = app()._sdonazioni->read(key);
if (err == NOERR) if (err == NOERR)
{ {
int numdon = 0;
for (int r=1; r<=app()._sdonazioni->rows(); r++) for (int r=1; r<=app()._sdonazioni->rows(); r++)
{ {
const TRectype& riga = app()._sdonazioni->row(r); const TRectype& riga = app()._sdonazioni->row(r);
TDate datadon = riga.get_date(DON_DATADON); TDate datadon = riga.get_date(DON_DATADON);
if ((datadon>=app()._dataini) && (datadon<=app()._datafin)) if ((datadon>=app()._dataini || !app()._dataini.ok()) && (datadon<=app()._datafin || !app()._datafin.ok()))
{ {
TString16 tipodon = riga.get(DON_TIPODON); TString16 tipodon = riga.get(DON_TIPODON);
if ((app()._tipodon.empty()) || (app()._tipodon == tipodon)) if ((app()._tipodon.empty()) || (app()._tipodon == tipodon))
numdon++; numdon++;
} }
} }
if (numdon >= app()._numdon) }
filtrato = TRUE; }
switch (app()._condizione)
{
case 'A':
filtrato = (numdon >= app()._numdon);
break;
case 'E':
filtrato = (numdon == app()._numdon);
break;
case 'D':
filtrato = (numdon > 1 && numdon <= app()._numdon);
break;
} }
} }
return filtrato; return filtrato;
@ -230,14 +246,21 @@ bool TFrequenza::preprocess_page(int file, int counter)
if (_tipostampa == elenco) if (_tipostampa == elenco)
{ {
TRectype recsog = current_cursor()->curr(); TRectype recsog = current_cursor()->curr();
int numdon = 0;
TDate dataultdon(NULLDATE);
if (_ctrltotale)
{
numdon = recsog.get_int(SOG_TOTDON);
dataultdon = recsog.get_date(SOG_DATAULTDON);
}
else
{
const long codice = recsog.get_long(SOG_CODICE); const long codice = recsog.get_long(SOG_CODICE);
TRectype* key = new TRectype(LF_DONAZ); TRectype* key = new TRectype(LF_DONAZ);
key->put(DON_CODICE, codice); key->put(DON_CODICE, codice);
int err = _sdonazioni->read(key); int err = _sdonazioni->read(key);
if (err == NOERR) if (err == NOERR)
{ {
int numdon = 0;
TDate dataultdon(NULLDATE);
for (int r=1; r<=_sdonazioni->rows(); r++) for (int r=1; r<=_sdonazioni->rows(); r++)
{ {
const TRectype& riga = _sdonazioni->row(r); const TRectype& riga = _sdonazioni->row(r);
@ -252,30 +275,25 @@ bool TFrequenza::preprocess_page(int file, int counter)
} }
} }
} }
}
}
_numdonsog = format("%3d",numdon); _numdonsog = format("%3d",numdon);
_dataultdon = dataultdon.string(); _dataultdon = dataultdon.string();
}
TString80 nome = recsog.get(SOG_COGNOME); TString80 nome = recsog.get(SOG_COGNOME);
nome << " "; nome << " ";
nome << recsog.get(SOG_NOME); nome << recsog.get(SOG_NOME);
_cognome_nome = nome; _cognome_nome = nome;
TString256 localita = ""; TString256 localita = "";
localita << current_cursor()->curr(-ALIAS_LCP).get("S6"); localita = recsog.get(SOG_DOM_CAP);
if (localita.not_empty() && localita.ok()) localita << ' ';
if (recsog.get(SOG_DOM_CODLOC).not_empty())
{ {
localita << " ";
localita << current_cursor()->curr(-ALIAS_LCP).get("S0"); localita << current_cursor()->curr(-ALIAS_LCP).get("S0");
localita << " - "; localita << " - ";
} }
else
{
localita = current_cursor()->curr(LF_COMUNI).get(COM_CAPCOM);
localita << " ";
}
localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM);
localita.trim(); localita.trim();
_dencom = localita; _dencom = localita;
// salto pagina se cambio sezione // salto pagina se cambio sezione
const TString16 codsez = recsog.get(SOG_CODSEZ); const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT); const TString16 codsot = recsog.get(SOG_CODSOT);
@ -340,10 +358,15 @@ bool TFrequenza::set_print(int m)
reset_files(); reset_files();
add_file(LF_SOGGETTI); add_file(LF_SOGGETTI);
filtra_sezioni(); filtra_sezioni();
_condizione = _msk->get(F_CONDIZIONE)[0];
_numdon = _msk->get_int(F_NUMDON); _numdon = _msk->get_int(F_NUMDON);
_dataini = _msk->get(F_DATAINI); _dataini = _msk->get(F_DATAINI);
_datafin = _msk->get(F_DATAFIN); _datafin = _msk->get(F_DATAFIN);
_tipodon = _msk->get(F_TIPODON); _tipodon = _msk->get(F_TIPODON);
if ((_tipodon.empty()) && (!_dataini.ok()) && (!_datafin.ok()))
_ctrltotale = TRUE;
else
_ctrltotale = FALSE;
_categorie.destroy(); _categorie.destroy();
const TString16 catpri = _msk->get(F_CAT1); const TString16 catpri = _msk->get(F_CAT1);
const TString16 catsec = _msk->get(F_CAT2); const TString16 catsec = _msk->get(F_CAT2);
@ -379,12 +402,25 @@ void TFrequenza::crea_intestazione()
if (_tipostampa == elenco) if (_tipostampa == elenco)
{ {
TString sep(132); TString sep(132);
sep = "SOGGETTI CHE HANNO FATTO ALMENO "; sep = "SOGGETTI CHE HANNO FATTO ";
switch (app()._condizione)
{
case 'A':
sep << "ALMENO ";
break;
case 'E':
sep << "ESATTAMENTE ";
break;
case 'D':
sep << "DA 1 A ";
break;
}
sep << _numdon; sep << _numdon;
sep << " DONAZIONI DAL "; sep << " DONAZIONI";
sep << _dataini.string(); if (_dataini.ok())
sep << " AL "; sep << " DAL " << _dataini.string();
sep << _datafin.string(); if (_datafin.ok())
sep << "AL " << _datafin.string();
if (_tipodon.not_empty()) if (_tipodon.not_empty())
sep << " DI TIPO " << _tipodon; sep << " DI TIPO " << _tipodon;
if (_stampa80) if (_stampa80)

View File

@ -23,11 +23,12 @@
#define F_CAT6 211 #define F_CAT6 211
#define F_D_CAT6 212 #define F_D_CAT6 212
#define F_NUMDON 301 #define F_CONDIZIONE 301
#define F_DATAINI 302 #define F_NUMDON 302
#define F_DATAFIN 303 #define F_DATAINI 303
#define F_TIPODON 304 #define F_DATAFIN 304
#define F_D_TIPODON 305 #define F_TIPODON 305
#define F_D_TIPODON 306
#define F_ELENCO 401 #define F_ELENCO 401
#define F_ETICHETTE 402 #define F_ETICHETTE 402

View File

@ -269,24 +269,32 @@ BEGIN
PROMPT 1 10 "Opzioni di elaborazione" PROMPT 1 10 "Opzioni di elaborazione"
END END
LISTBOX F_CONDIZIONE 11
BEGIN
PROMPT 2 11 ""
ITEM "A|Almeno"
ITEM "E|Esattamente"
ITEM "D|Da 1 a "
END
NUMBER F_NUMDON 3 NUMBER F_NUMDON 3
BEGIN BEGIN
PROMPT 2 11 "Almeno " PROMPT 18 11 ""
END END
DATE F_DATAINI DATE F_DATAINI
BEGIN BEGIN
PROMTP 17 11 "donazioni dal " PROMTP 24 11 "donazioni dal "
END END
DATE F_DATAFIN DATE F_DATAFIN
BEGIN BEGIN
PROMPT 43 11 "al " PROMPT 50 11 "al "
END END
STRING F_TIPODON 2 STRING F_TIPODON 2
BEGIN BEGIN
PROMPT 2 12 "Tipo don. " PROMPT 2 12 "Tipo donazioni "
FLAGS "U" FLAGS "U"
USE TDN USE TDN
INPUT CODTAB F_TIPODON INPUT CODTAB F_TIPODON
@ -300,7 +308,7 @@ END
STRING F_D_TIPODON 30 STRING F_D_TIPODON 30
BEGIN BEGIN
PROMPT 17 12 "" PROMPT 24 12 ""
FLAGS "D" FLAGS "D"
END END