From dbe1d0a78a3289705b0c92aa35078d634e6663da Mon Sep 17 00:00:00 2001 From: cris Date: Fri, 27 Mar 1998 13:41:26 +0000 Subject: [PATCH] Patch level : Files correlati : Ricompilazione Demo : [ ] Commento : Corretto suddivisione dei convocati sui giorni della convocazione git-svn-id: svn://10.65.10.50/trunk@6446 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- at/at0400.cpp | 106 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 82 insertions(+), 24 deletions(-) diff --git a/at/at0400.cpp b/at/at0400.cpp index 0f765ce3c..5eab17183 100755 --- a/at/at0400.cpp +++ b/at/at0400.cpp @@ -30,8 +30,11 @@ class TGestioneConvocazioni: public TRelation_application TMask* _msk; TRelation* _rel; + TRelation* _tmprel; TRelation* _relsog; TCursor* _cur; // cursore per selezione soggetti + TIsamtempfile* _tmpconv; + TIsamtempfile* _tmprconv; TLocalisamfile* _rconvoc; TLocalisamfile* _soggetti; TLocalisamfile* _sezioni; @@ -46,6 +49,7 @@ class TGestioneConvocazioni: public TRelation_application TDate _dataini; bool _ritarda; int _maxrit; + bool _inserimento; protected: virtual bool user_create(); @@ -60,9 +64,9 @@ protected: 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_query_mode(TMask& m) { _inserimento = FALSE; init_query_insert_mode(m);}; virtual void init_modify_mode(TMask& m); - virtual void init_insert_mode(TMask& m) { init_modify_mode(m); } + virtual void init_insert_mode(TMask& m) { _inserimento = TRUE; init_modify_mode(m); } static bool nome_handler(TMask_field& f, KEY k); static bool codice_handler(TMask_field& f, KEY k); @@ -101,23 +105,27 @@ bool TGestioneConvocazioni::filter_func_convoc(const TRelation* rel) const TString16 cat = sog.get(SOG_CATDON); const char stato = modstato_tcs(sog.get(SOG_STATO)); const TString16 escluso = sog.get(SOG_ESCLUSO); + const TString16 modconv = sog.get(SOG_MODCONV); const bool dimesso = rel->lfile(ALIAS_CTD).get_bool("B0"); filtrato = (cat.not_empty() && (stato == 'I' || stato == 'F') && !dimesso && escluso.empty()); + if (filtrato) + filtrato = ((modconv.empty()) || (modconv == "PO") || (modconv == "IN")); if (filtrato) { filtrato = FALSE; const TString16 punto = sog.get(SOG_PUNTORACC); const TString16 codsez = sog.get(SOG_CODSEZ); const TString16 codsot = sog.get(SOG_CODSOT); - if (punto == app()._punto) - filtrato = TRUE; - else + if (app()._codsez.not_empty()) { - if (app()._codsez.not_empty() && app()._codsez == codsez) - filtrato = (punto.empty()); - if ((app()._codsot.not_empty()) && (app()._codsot != codsot)) - filtrato = FALSE; - } + filtrato = (codsez == app()._codsez); + if ((filtrato) && (app()._codsot.not_empty())) + filtrato = (codsot == app()._codsot); + if (filtrato) + filtrato = ((punto == app()._punto) || punto.empty()); + } + else + filtrato = (punto == app()._punto); // filtro per data prossima donazione //const TDate dataprossi = sog.get(SOG_DATAPROSSI); //filtrato = (dataprossi.ok()) && (dataprossi <= data) && filtrato; @@ -125,8 +133,8 @@ bool TGestioneConvocazioni::filter_func_convoc(const TRelation* rel) if (filtrato) { filtrato = FALSE; - //const TDate data = app()._data; - TDate data = app()._dataini; + const TDate data = app()._data; + //TDate data = app()._dataini; prima era cosi' const int numconv = sog.get_int(SOG_NUMCONV); const TDate dataultconv = sog.get(SOG_DATACONV); const TDate dataultsol = sog.get(SOG_DATAULTSOL); @@ -281,7 +289,11 @@ bool TGestioneConvocazioni::esegui_handler(TMask_field& f, KEY k) // da.put(SOG_CODSOT, app()._codsot); //cur->setregion(da, da); - //TString256 filtro; + //TString filtro; + // filtro per non esclusi e modalita di convocazione + //filtro << '(' << SOG_ESCLUSO << " == \"\")"; + //filtro << " && (" << SOG_MODCONV << " == \"\" || " << SOG_MODCONV << " == \"PO\" || " << SOG_MODCONV << " == \"IN\")"; + // filtro per categoria donatori non vuota e non dimessi // e non escluso e idoneo //filtro.format("(CATDON != \"\") && (%d->B0 == \"\") && (ESCLUSO == \"\") && ((%d->S6 == \"I\" ) || (%d->S6 == \"F\"))",ALIAS_CTD,ALIAS_TCS,ALIAS_TCS); @@ -320,7 +332,7 @@ bool TGestioneConvocazioni::esegui_handler(TMask_field& f, KEY k) const int giorni = (int)(data-dataini); // giorni su cui suddividere la chiamata -1 const int dim = giorni+1; int* numperdata = new int[dim]; - int quanti = ((int)(cur->items())/(giorni+1)); // quanti donatori per giorno + int quanti = ((int)(cur->items())/(giorni+1))+1; // quanti donatori per giorno if (quanti < 1) quanti = 1; for (int i=0; ipos() < last; ++(*cur) ) { prg.addstatus(1); + TDate datarif(NULLDATE); const int numconv = rec.get_int(SOG_NUMCONV); const TDate dataultconv = rec.get(SOG_DATACONV); const TDate dataultsol = rec.get(SOG_DATAULTSOL); @@ -342,19 +355,42 @@ bool TGestioneConvocazioni::esegui_handler(TMask_field& f, KEY k) const int numsol = sez.get_int(SEZ_NUMMAXSOL); char chiamata = ' '; if (numconv == 0) + { chiamata = 'C'; - else + datarif = dataprossi; + } + else + { if ((numconv == 1) && (data-dataultconv>=giocarsol)) + { chiamata = 'S'; - else + datarif = dataultconv+(long)giocarsol; + } + else + { if ((numconv >= 2 && numconv <= numsol-1) && (data-dataultconv >= giosolsol)) + { chiamata = 'S'; + datarif = dataultconv+(long)giosolsol; + } else + { if ((numconv == numsol && numsol > 0) && (data-dataultconv >= gioultsol)) + { chiamata = 'S'; + datarif = dataultconv+(long)gioultsol; + } else + { if ((numconv > numsol && numsol > 0) && (app()._ritarda) && (data-dataultsol<=app()._maxrit) && (data-dataultconv>=giorit)) + { chiamata = 'R'; + datarif = dataultconv+(long)giorit; + } + } + } + } + } switch (chiamata) { case 'C': @@ -371,10 +407,11 @@ bool TGestioneConvocazioni::esegui_handler(TMask_field& f, KEY k) { datasog = NULLDATE; int partenza; - if (dataprossi <= dataini) + if (datarif <= dataini) partenza = 0; else - partenza = (int)(dataprossi-dataini); + partenza = (int)(datarif-dataini); + for (int r=partenza;r<=giorni;r++) { if ((numperdata[r]add(LF_RCONVOC, "CODICE==CODICE"); + _msk = new TMask("at0400a"); _rel = new TRelation(LF_CONVOC); _relsog = new TRelation(LF_SOGGETTI); @@ -487,7 +532,10 @@ bool TGestioneConvocazioni::user_create() } bool TGestioneConvocazioni::user_destroy() -{ +{ + delete _tmpconv; + delete _tmprconv; + delete _tmprel; delete _rel; delete _relsog; delete _msk; @@ -581,6 +629,8 @@ int TGestioneConvocazioni::read(TMask& m) row.add(soggetti.get(SOG_DATANASC)); row.add(soggetti.get(SOG_CATDON)); row.add(soggetti.get(SOG_TESSAVIS)); + row.add(soggetti.get(SOG_CODSEZ)); + row.add(soggetti.get(SOG_CODSOT)); } } else @@ -594,6 +644,7 @@ int TGestioneConvocazioni::write(const TMask& m) { long curcod = m.get_long(F_NUMERO); if (curcod > _lastcod) _lastcod = curcod; + _inserimento = FALSE; return TGestioneConvocazioni::scrivi(m, FALSE); } @@ -712,11 +763,18 @@ void TGestioneConvocazioni::print() { TForm elenco("ATCONVOC"); TCursor& cur = *elenco.cursor(); - TLocalisamfile& convoc = cur.file(); - const long numero = app()._msk->get_long(F_NUMERO); - convoc.put(COV_NUMERO, numero); - cur.read(); - elenco.print(-1); + if (_inserimento) + { + message_box("Convocazione non registrata; non è possibile la stampa"); + } + else + { + TLocalisamfile& convoc = cur.file(); + const long numero = app()._msk->get_long(F_NUMERO); + convoc.put(COV_NUMERO, numero); + cur.read(); + elenco.print(-1); + } } int at0400(int argc, char* argv[])