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;
TString16 _codsez, _codsot;
int _etlarghezza, _etcolonne;
bool _stampa80;
bool _stampa80, _ctrltotale;
int _contatore;
char _condizione;
protected:
virtual bool user_create();
@ -175,27 +176,42 @@ bool TFrequenza::filter_func_freq(const TRelation* rel)
// filtro per numero donazioni nel periodo
if (filtrato)
{
int numdon = 0;
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)
if (app()._ctrltotale)
numdon = sog.get_int(SOG_TOTDON);
else
{
int numdon = 0;
for (int r=1; r<=app()._sdonazioni->rows(); r++)
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)
{
const TRectype& riga = app()._sdonazioni->row(r);
TDate datadon = riga.get_date(DON_DATADON);
if ((datadon>=app()._dataini) && (datadon<=app()._datafin))
for (int r=1; r<=app()._sdonazioni->rows(); r++)
{
TString16 tipodon = riga.get(DON_TIPODON);
if ((app()._tipodon.empty()) || (app()._tipodon == tipodon))
numdon++;
}
}
if (numdon >= app()._numdon)
filtrato = TRUE;
const TRectype& riga = app()._sdonazioni->row(r);
TDate datadon = riga.get_date(DON_DATADON);
if ((datadon>=app()._dataini || !app()._dataini.ok()) && (datadon<=app()._datafin || !app()._datafin.ok()))
{
TString16 tipodon = riga.get(DON_TIPODON);
if ((app()._tipodon.empty()) || (app()._tipodon == tipodon))
numdon++;
}
}
}
}
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;
@ -230,52 +246,54 @@ 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;
TDate dataultdon(NULLDATE);
if (_ctrltotale)
{
int numdon = 0;
TDate dataultdon(NULLDATE);
for (int r=1; r<=_sdonazioni->rows(); r++)
numdon = recsog.get_int(SOG_TOTDON);
dataultdon = recsog.get_date(SOG_DATAULTDON);
}
else
{
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)
{
const TRectype& riga = _sdonazioni->row(r);
TDate datadon = riga.get_date(DON_DATADON);
if ((datadon>=_dataini) && (datadon<=_datafin))
for (int r=1; r<=_sdonazioni->rows(); r++)
{
TString16 tipodon = riga.get(DON_TIPODON);
if ((app()._tipodon.empty()) || (app()._tipodon == tipodon))
{
numdon++;
dataultdon = datadon;
}
}
}
_numdonsog = format("%3d",numdon);
_dataultdon = dataultdon.string();
const TRectype& riga = _sdonazioni->row(r);
TDate datadon = riga.get_date(DON_DATADON);
if ((datadon>=_dataini) && (datadon<=_datafin))
{
TString16 tipodon = riga.get(DON_TIPODON);
if ((app()._tipodon.empty()) || (app()._tipodon == tipodon))
{
numdon++;
dataultdon = datadon;
}
}
}
}
}
_numdonsog = format("%3d",numdon);
_dataultdon = dataultdon.string();
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 = recsog.get(SOG_DOM_CAP);
localita << ' ';
if (recsog.get(SOG_DOM_CODLOC).not_empty())
{
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);
@ -340,10 +358,15 @@ bool TFrequenza::set_print(int m)
reset_files();
add_file(LF_SOGGETTI);
filtra_sezioni();
_condizione = _msk->get(F_CONDIZIONE)[0];
_numdon = _msk->get_int(F_NUMDON);
_dataini = _msk->get(F_DATAINI);
_datafin = _msk->get(F_DATAFIN);
_tipodon = _msk->get(F_TIPODON);
if ((_tipodon.empty()) && (!_dataini.ok()) && (!_datafin.ok()))
_ctrltotale = TRUE;
else
_ctrltotale = FALSE;
_categorie.destroy();
const TString16 catpri = _msk->get(F_CAT1);
const TString16 catsec = _msk->get(F_CAT2);
@ -379,12 +402,25 @@ void TFrequenza::crea_intestazione()
if (_tipostampa == elenco)
{
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 << " DONAZIONI DAL ";
sep << _dataini.string();
sep << " AL ";
sep << _datafin.string();
sep << " DONAZIONI";
if (_dataini.ok())
sep << " DAL " << _dataini.string();
if (_datafin.ok())
sep << "AL " << _datafin.string();
if (_tipodon.not_empty())
sep << " DI TIPO " << _tipodon;
if (_stampa80)

View File

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

View File

@ -269,24 +269,32 @@ BEGIN
PROMPT 1 10 "Opzioni di elaborazione"
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
BEGIN
PROMPT 2 11 "Almeno "
PROMPT 18 11 ""
END
DATE F_DATAINI
BEGIN
PROMTP 17 11 "donazioni dal "
PROMTP 24 11 "donazioni dal "
END
DATE F_DATAFIN
BEGIN
PROMPT 43 11 "al "
PROMPT 50 11 "al "
END
STRING F_TIPODON 2
BEGIN
PROMPT 2 12 "Tipo don. "
PROMPT 2 12 "Tipo donazioni "
FLAGS "U"
USE TDN
INPUT CODTAB F_TIPODON
@ -300,7 +308,7 @@ END
STRING F_D_TIPODON 30
BEGIN
PROMPT 17 12 ""
PROMPT 24 12 ""
FLAGS "D"
END