diff --git a/at/at2900.cpp b/at/at2900.cpp index ac273aabf..3968caefa 100755 --- a/at/at2900.cpp +++ b/at/at2900.cpp @@ -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) diff --git a/at/at2900a.h b/at/at2900a.h index 9e5b946ee..36824f18e 100755 --- a/at/at2900a.h +++ b/at/at2900a.h @@ -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 diff --git a/at/at2900a.uml b/at/at2900a.uml index b2b40100e..416bf1367 100755 --- a/at/at2900a.uml +++ b/at/at2900a.uml @@ -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