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
This commit is contained in:
cris 1998-03-27 13:41:26 +00:00
parent 8238766232
commit dbe1d0a78a

View File

@ -30,8 +30,11 @@ class TGestioneConvocazioni: public TRelation_application
TMask* _msk; TMask* _msk;
TRelation* _rel; TRelation* _rel;
TRelation* _tmprel;
TRelation* _relsog; TRelation* _relsog;
TCursor* _cur; // cursore per selezione soggetti TCursor* _cur; // cursore per selezione soggetti
TIsamtempfile* _tmpconv;
TIsamtempfile* _tmprconv;
TLocalisamfile* _rconvoc; TLocalisamfile* _rconvoc;
TLocalisamfile* _soggetti; TLocalisamfile* _soggetti;
TLocalisamfile* _sezioni; TLocalisamfile* _sezioni;
@ -46,6 +49,7 @@ class TGestioneConvocazioni: public TRelation_application
TDate _dataini; TDate _dataini;
bool _ritarda; bool _ritarda;
int _maxrit; int _maxrit;
bool _inserimento;
protected: protected:
virtual bool user_create(); virtual bool user_create();
@ -60,9 +64,9 @@ protected:
virtual TMask* get_mask( int mode = 0) { return _msk; } virtual TMask* get_mask( int mode = 0) { return _msk; }
virtual TRelation* get_relation() const { return _rel; } virtual TRelation* get_relation() const { return _rel; }
virtual void init_query_insert_mode(TMask& m); 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_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 nome_handler(TMask_field& f, KEY k);
static bool codice_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 TString16 cat = sog.get(SOG_CATDON);
const char stato = modstato_tcs(sog.get(SOG_STATO)); const char stato = modstato_tcs(sog.get(SOG_STATO));
const TString16 escluso = sog.get(SOG_ESCLUSO); const TString16 escluso = sog.get(SOG_ESCLUSO);
const TString16 modconv = sog.get(SOG_MODCONV);
const bool dimesso = rel->lfile(ALIAS_CTD).get_bool("B0"); const bool dimesso = rel->lfile(ALIAS_CTD).get_bool("B0");
filtrato = (cat.not_empty() && (stato == 'I' || stato == 'F') && !dimesso && escluso.empty()); filtrato = (cat.not_empty() && (stato == 'I' || stato == 'F') && !dimesso && escluso.empty());
if (filtrato)
filtrato = ((modconv.empty()) || (modconv == "PO") || (modconv == "IN"));
if (filtrato) if (filtrato)
{ {
filtrato = FALSE; filtrato = FALSE;
const TString16 punto = sog.get(SOG_PUNTORACC); const TString16 punto = sog.get(SOG_PUNTORACC);
const TString16 codsez = sog.get(SOG_CODSEZ); const TString16 codsez = sog.get(SOG_CODSEZ);
const TString16 codsot = sog.get(SOG_CODSOT); const TString16 codsot = sog.get(SOG_CODSOT);
if (punto == app()._punto) if (app()._codsez.not_empty())
filtrato = TRUE;
else
{ {
if (app()._codsez.not_empty() && app()._codsez == codsez) filtrato = (codsez == app()._codsez);
filtrato = (punto.empty()); if ((filtrato) && (app()._codsot.not_empty()))
if ((app()._codsot.not_empty()) && (app()._codsot != codsot)) filtrato = (codsot == app()._codsot);
filtrato = FALSE; if (filtrato)
filtrato = ((punto == app()._punto) || punto.empty());
} }
else
filtrato = (punto == app()._punto);
// filtro per data prossima donazione // filtro per data prossima donazione
//const TDate dataprossi = sog.get(SOG_DATAPROSSI); //const TDate dataprossi = sog.get(SOG_DATAPROSSI);
//filtrato = (dataprossi.ok()) && (dataprossi <= data) && filtrato; //filtrato = (dataprossi.ok()) && (dataprossi <= data) && filtrato;
@ -125,8 +133,8 @@ bool TGestioneConvocazioni::filter_func_convoc(const TRelation* rel)
if (filtrato) if (filtrato)
{ {
filtrato = FALSE; filtrato = FALSE;
//const TDate data = app()._data; const TDate data = app()._data;
TDate data = app()._dataini; //TDate data = app()._dataini; prima era cosi'
const int numconv = sog.get_int(SOG_NUMCONV); const int numconv = sog.get_int(SOG_NUMCONV);
const TDate dataultconv = sog.get(SOG_DATACONV); const TDate dataultconv = sog.get(SOG_DATACONV);
const TDate dataultsol = sog.get(SOG_DATAULTSOL); 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); // da.put(SOG_CODSOT, app()._codsot);
//cur->setregion(da, da); //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 // filtro per categoria donatori non vuota e non dimessi
// e non escluso e idoneo // e non escluso e idoneo
//filtro.format("(CATDON != \"\") && (%d->B0 == \"\") && (ESCLUSO == \"\") && ((%d->S6 == \"I\" ) || (%d->S6 == \"F\"))",ALIAS_CTD,ALIAS_TCS,ALIAS_TCS); //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 giorni = (int)(data-dataini); // giorni su cui suddividere la chiamata -1
const int dim = giorni+1; const int dim = giorni+1;
int* numperdata = new int[dim]; 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) if (quanti < 1)
quanti = 1; quanti = 1;
for (int i=0; i<giorni+1; i++) for (int i=0; i<giorni+1; i++)
@ -331,6 +343,7 @@ bool TGestioneConvocazioni::esegui_handler(TMask_field& f, KEY k)
for ( *cur=0; cur->pos() < last; ++(*cur) ) for ( *cur=0; cur->pos() < last; ++(*cur) )
{ {
prg.addstatus(1); prg.addstatus(1);
TDate datarif(NULLDATE);
const int numconv = rec.get_int(SOG_NUMCONV); const int numconv = rec.get_int(SOG_NUMCONV);
const TDate dataultconv = rec.get(SOG_DATACONV); const TDate dataultconv = rec.get(SOG_DATACONV);
const TDate dataultsol = rec.get(SOG_DATAULTSOL); 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); const int numsol = sez.get_int(SEZ_NUMMAXSOL);
char chiamata = ' '; char chiamata = ' ';
if (numconv == 0) if (numconv == 0)
{
chiamata = 'C'; chiamata = 'C';
datarif = dataprossi;
}
else else
{
if ((numconv == 1) && (data-dataultconv>=giocarsol)) if ((numconv == 1) && (data-dataultconv>=giocarsol))
{
chiamata = 'S'; chiamata = 'S';
datarif = dataultconv+(long)giocarsol;
}
else else
{
if ((numconv >= 2 && numconv <= numsol-1) && (data-dataultconv >= giosolsol)) if ((numconv >= 2 && numconv <= numsol-1) && (data-dataultconv >= giosolsol))
{
chiamata = 'S'; chiamata = 'S';
datarif = dataultconv+(long)giosolsol;
}
else else
{
if ((numconv == numsol && numsol > 0) && (data-dataultconv >= gioultsol)) if ((numconv == numsol && numsol > 0) && (data-dataultconv >= gioultsol))
{
chiamata = 'S'; chiamata = 'S';
datarif = dataultconv+(long)gioultsol;
}
else else
{
if ((numconv > numsol && numsol > 0) && (app()._ritarda) && (data-dataultsol<=app()._maxrit) && (data-dataultconv>=giorit)) if ((numconv > numsol && numsol > 0) && (app()._ritarda) && (data-dataultsol<=app()._maxrit) && (data-dataultconv>=giorit))
{
chiamata = 'R'; chiamata = 'R';
datarif = dataultconv+(long)giorit;
}
}
}
}
}
switch (chiamata) switch (chiamata)
{ {
case 'C': case 'C':
@ -371,10 +407,11 @@ bool TGestioneConvocazioni::esegui_handler(TMask_field& f, KEY k)
{ {
datasog = NULLDATE; datasog = NULLDATE;
int partenza; int partenza;
if (dataprossi <= dataini) if (datarif <= dataini)
partenza = 0; partenza = 0;
else else
partenza = (int)(dataprossi-dataini); partenza = (int)(datarif-dataini);
for (int r=partenza;r<=giorni;r++) for (int r=partenza;r<=giorni;r++)
{ {
if ((numperdata[r]<quanti) && (!datasog.ok())) if ((numperdata[r]<quanti) && (!datasog.ok()))
@ -402,6 +439,8 @@ bool TGestioneConvocazioni::esegui_handler(TMask_field& f, KEY k)
row.add(rec.get(SOG_DATANASC)); row.add(rec.get(SOG_DATANASC));
row.add(rec.get(SOG_CATDON)); row.add(rec.get(SOG_CATDON));
row.add(rec.get(SOG_TESSAVIS)); row.add(rec.get(SOG_TESSAVIS));
row.add(rec.get(SOG_CODSEZ));
row.add(rec.get(SOG_CODSOT));
r++; r++;
} }
m.set(F_NUMCONV,nconv); m.set(F_NUMCONV,nconv);
@ -459,6 +498,12 @@ bool TGestioneConvocazioni::codice_handler(TMask_field& f, KEY k)
bool TGestioneConvocazioni::user_create() bool TGestioneConvocazioni::user_create()
{ {
_tmpconv = new TIsamtempfile(LF_CONVOC,NULL,TRUE,TRUE);
_tmprconv = new TIsamtempfile(LF_RCONVOC,NULL,TRUE,TRUE);
_tmprel = new TRelation(LF_CONVOC);
_tmprel->add(LF_RCONVOC, "CODICE==CODICE");
_msk = new TMask("at0400a"); _msk = new TMask("at0400a");
_rel = new TRelation(LF_CONVOC); _rel = new TRelation(LF_CONVOC);
_relsog = new TRelation(LF_SOGGETTI); _relsog = new TRelation(LF_SOGGETTI);
@ -488,6 +533,9 @@ bool TGestioneConvocazioni::user_create()
bool TGestioneConvocazioni::user_destroy() bool TGestioneConvocazioni::user_destroy()
{ {
delete _tmpconv;
delete _tmprconv;
delete _tmprel;
delete _rel; delete _rel;
delete _relsog; delete _relsog;
delete _msk; delete _msk;
@ -581,6 +629,8 @@ int TGestioneConvocazioni::read(TMask& m)
row.add(soggetti.get(SOG_DATANASC)); row.add(soggetti.get(SOG_DATANASC));
row.add(soggetti.get(SOG_CATDON)); row.add(soggetti.get(SOG_CATDON));
row.add(soggetti.get(SOG_TESSAVIS)); row.add(soggetti.get(SOG_TESSAVIS));
row.add(soggetti.get(SOG_CODSEZ));
row.add(soggetti.get(SOG_CODSOT));
} }
} }
else else
@ -594,6 +644,7 @@ int TGestioneConvocazioni::write(const TMask& m)
{ {
long curcod = m.get_long(F_NUMERO); long curcod = m.get_long(F_NUMERO);
if (curcod > _lastcod) _lastcod = curcod; if (curcod > _lastcod) _lastcod = curcod;
_inserimento = FALSE;
return TGestioneConvocazioni::scrivi(m, FALSE); return TGestioneConvocazioni::scrivi(m, FALSE);
} }
@ -712,11 +763,18 @@ void TGestioneConvocazioni::print()
{ {
TForm elenco("ATCONVOC"); TForm elenco("ATCONVOC");
TCursor& cur = *elenco.cursor(); TCursor& cur = *elenco.cursor();
TLocalisamfile& convoc = cur.file(); if (_inserimento)
const long numero = app()._msk->get_long(F_NUMERO); {
convoc.put(COV_NUMERO, numero); message_box("Convocazione non registrata; non è possibile la stampa");
cur.read(); }
elenco.print(-1); 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[]) int at0400(int argc, char* argv[])