1997-12-05 16:26:15 +00:00
# include <form.h>
1997-03-20 10:33:28 +00:00
# include <msksheet.h>
1997-12-05 16:26:15 +00:00
# include <printer.h>
1997-03-20 10:33:28 +00:00
# include <progind.h>
# include <recarray.h>
# include <relapp.h>
# include <tabutil.h>
# include <utility.h>
# include "at0.h"
1997-06-17 15:50:08 +00:00
# include "atlib.h"
1997-03-20 10:33:28 +00:00
// nomi campi maschera
# include "at0400a.h"
// nomi dei campi
# include "soggetti.h"
1997-06-17 15:50:08 +00:00
# include "sezioni.h"
1997-03-20 10:33:28 +00:00
# include "convoc.h"
# include "rconvoc.h"
1997-12-05 16:26:15 +00:00
# define ALIAS_CTD -700
1997-06-17 15:50:08 +00:00
# define ALIAS_TCS -200
1997-03-20 10:33:28 +00:00
# define IDON_SI "SI"
# define IDON_AF "AF"
1997-08-01 14:49:53 +00:00
class TGestioneConvocazioni : public TRelation_application
1997-03-20 10:33:28 +00:00
{
1997-06-17 15:50:08 +00:00
static bool filter_func_convoc ( const TRelation * rel ) ;
1997-03-20 10:33:28 +00:00
TMask * _msk ;
TRelation * _rel ;
1998-03-27 13:41:26 +00:00
TRelation * _tmprel ;
1997-03-20 10:33:28 +00:00
TRelation * _relsog ;
TCursor * _cur ; // cursore per selezione soggetti
1998-03-27 13:41:26 +00:00
TIsamtempfile * _tmpconv ;
TIsamtempfile * _tmprconv ;
1997-03-20 10:33:28 +00:00
TLocalisamfile * _rconvoc ;
TLocalisamfile * _soggetti ;
1997-12-05 16:26:15 +00:00
TLocalisamfile * _sezioni ;
1997-03-20 10:33:28 +00:00
TRecord_array * _sconvocati ; // sheet convocati
long _lastcod ; // progressivo convocazione da assegnare
long _numero ; // numero convocazione
TDate _data ; // data convocazione
1997-08-01 14:49:53 +00:00
TString16 _punto ; // punto di prelievo
1997-03-20 10:33:28 +00:00
TString16 _tipo ; // tipo donazione
TString16 _codsez ; // codice sezione convocata
TString16 _codsot ; // codice sottogruppo
1999-02-12 12:26:59 +00:00
TString16 _modconv ; // modalita di convocazione
1997-06-17 15:50:08 +00:00
TDate _dataini ;
1998-08-07 09:35:35 +00:00
bool _tutti , _ritarda ;
1997-06-17 15:50:08 +00:00
int _maxrit ;
2000-03-03 11:47:59 +00:00
bool _inserimento ;
TBit_array _modified ;
1997-03-20 10:33:28 +00:00
protected :
virtual bool user_create ( ) ;
virtual bool user_destroy ( ) ;
virtual const char * get_next_key ( ) ;
virtual int scrivi ( const TMask & m , bool ri ) ;
virtual int write ( const TMask & m ) ;
virtual int rewrite ( const TMask & m ) ;
virtual int read ( TMask & m ) ;
virtual bool remove ( ) ;
virtual bool changing_mask ( int mode ) { return FALSE ; }
virtual TMask * get_mask ( int mode = 0 ) { return _msk ; }
virtual TRelation * get_relation ( ) const { return _rel ; }
1998-02-04 13:46:27 +00:00
virtual void init_query_insert_mode ( TMask & m ) ;
1998-03-27 13:41:26 +00:00
virtual void init_query_mode ( TMask & m ) { _inserimento = FALSE ; init_query_insert_mode ( m ) ; } ;
1998-02-04 13:46:27 +00:00
virtual void init_modify_mode ( TMask & m ) ;
1998-03-27 13:41:26 +00:00
virtual void init_insert_mode ( TMask & m ) { _inserimento = TRUE ; init_modify_mode ( m ) ; }
1998-02-04 13:46:27 +00:00
static bool nome_handler ( TMask_field & f , KEY k ) ;
static bool codice_handler ( TMask_field & f , KEY k ) ;
1997-03-20 10:33:28 +00:00
static bool convocati_notify ( TSheet_field & s , int r , KEY k ) ;
static bool esegui_handler ( TMask_field & f , KEY k ) ;
1999-04-08 10:58:51 +00:00
static bool sistampa_handler ( TMask_field & f , KEY k ) ;
static bool nostampa_handler ( TMask_field & f , KEY k ) ;
1997-06-17 15:50:08 +00:00
static bool data_handler ( TMask_field & f , KEY k ) ;
1997-12-05 16:26:15 +00:00
static bool dataini_handler ( TMask_field & f , KEY k ) ;
static bool sezione_handler ( TMask_field & f , KEY k ) ;
1997-03-20 10:33:28 +00:00
public :
2000-03-03 11:47:59 +00:00
virtual void print ( ) ;
1997-08-01 14:49:53 +00:00
TGestioneConvocazioni ( ) { }
1997-03-20 10:33:28 +00:00
} ;
1997-08-01 14:49:53 +00:00
HIDDEN inline TGestioneConvocazioni & app ( ) { return ( TGestioneConvocazioni & ) main_app ( ) ; }
1997-03-20 10:33:28 +00:00
1998-02-04 13:46:27 +00:00
void TGestioneConvocazioni : : init_query_insert_mode ( TMask & m )
{
disable_menu_item ( M_FILE_NEW ) ;
m . hide ( - 1 ) ;
m . show ( - 2 ) ;
1998-09-25 07:51:18 +00:00
m . enable ( - 3 ) ;
1998-02-04 13:46:27 +00:00
}
void TGestioneConvocazioni : : init_modify_mode ( TMask & m )
{
m . show ( - 1 ) ;
1998-09-02 14:04:44 +00:00
m . hide ( - 2 ) ;
1998-09-25 07:51:18 +00:00
if ( app ( ) . _inserimento )
1999-02-12 12:26:59 +00:00
{
m . enable ( - 3 ) ;
m . set ( F_TUTTI , TRUE ) ;
m . set ( F_MODCONV , " PO " ) ;
}
1998-09-25 07:51:18 +00:00
else
m . disable ( - 3 ) ;
1998-02-04 13:46:27 +00:00
}
1997-08-01 14:49:53 +00:00
bool TGestioneConvocazioni : : filter_func_convoc ( const TRelation * rel )
1997-06-17 15:50:08 +00:00
{
bool filtrato = FALSE ;
TRectype & sog = rel - > curr ( ) ;
1997-12-05 16:26:15 +00:00
const long codice = sog . get_long ( SOG_CODICE ) ;
1997-06-17 15:50:08 +00:00
const TString16 cat = sog . get ( SOG_CATDON ) ;
const char stato = modstato_tcs ( sog . get ( SOG_STATO ) ) ;
const TString16 escluso = sog . get ( SOG_ESCLUSO ) ;
1998-03-27 13:41:26 +00:00
const TString16 modconv = sog . get ( SOG_MODCONV ) ;
1997-06-17 15:50:08 +00:00
const bool dimesso = rel - > lfile ( ALIAS_CTD ) . get_bool ( " B0 " ) ;
filtrato = ( cat . not_empty ( ) & & ( stato = = ' I ' | | stato = = ' F ' ) & & ! dimesso & & escluso . empty ( ) ) ;
1998-03-27 13:41:26 +00:00
if ( filtrato )
1999-02-12 12:26:59 +00:00
filtrato = ( ( modconv . empty ( ) ) | | ( modconv = = app ( ) . _modconv ) | | ( modconv = = " IN " ) ) ;
1997-06-17 15:50:08 +00:00
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 ) ;
1998-03-27 13:41:26 +00:00
if ( app ( ) . _codsez . not_empty ( ) )
1997-06-17 15:50:08 +00:00
{
1998-03-27 13:41:26 +00:00
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 ) ;
1998-08-07 09:35:35 +00:00
if ( app ( ) . _tutti & & ! filtrato )
filtrato = ( punto = = app ( ) . _punto ) ;
1997-06-17 15:50:08 +00:00
// filtro per data prossima donazione
//const TDate dataprossi = sog.get(SOG_DATAPROSSI);
//filtrato = (dataprossi.ok()) && (dataprossi <= data) && filtrato;
// filtro per intervallo tra cartoline/solleciti/ritardatari
if ( filtrato )
{
filtrato = FALSE ;
1998-03-27 13:41:26 +00:00
const TDate data = app ( ) . _data ;
//TDate data = app()._dataini; prima era cosi'
1997-06-17 15:50:08 +00:00
const int numconv = sog . get_int ( SOG_NUMCONV ) ;
const TDate dataultconv = sog . get ( SOG_DATACONV ) ;
const TDate dataultsol = sog . get ( SOG_DATAULTSOL ) ;
TRectype & sez = rel - > curr ( LF_SEZIONI ) ;
const int giocarsol = sez . get_int ( SEZ_GIOCARSOL ) ;
const int giosolsol = sez . get_int ( SEZ_GIOSOLSOL ) ;
const int gioultsol = sez . get_int ( SEZ_GIOULTSOL ) ;
const int giorit = sez . get_int ( SEZ_GIOPERRIT ) ;
const int numsol = sez . get_int ( SEZ_NUMMAXSOL ) ;
if ( numconv = = 0 )
filtrato = TRUE ;
else
if ( ( numconv = = 1 ) & & ( data - dataultconv > = giocarsol ) )
filtrato = TRUE ;
else
if ( ( numconv > = 2 & & numconv < = numsol - 1 ) & & ( data - dataultconv > = giosolsol ) )
filtrato = TRUE ;
else
if ( ( numconv = = numsol & & numsol > 0 ) & & ( data - dataultconv > = gioultsol ) )
filtrato = TRUE ;
else
if ( ( numconv > numsol & & numsol > 0 ) & & ( app ( ) . _ritarda ) & & ( data - dataultsol < = app ( ) . _maxrit ) & & ( data - dataultconv > = giorit ) )
filtrato = TRUE ;
}
}
return filtrato ;
1997-03-20 10:33:28 +00:00
}
1997-12-05 16:26:15 +00:00
bool TGestioneConvocazioni : : sezione_handler ( TMask_field & f , KEY k )
1998-08-07 09:35:35 +00:00
{
1997-12-05 16:26:15 +00:00
if ( f . to_check ( k ) )
{
TMask & m = f . mask ( ) ;
1999-02-12 12:26:59 +00:00
if ( m . get ( F_DATAINI ) . empty ( ) & & ( m . mode ( ) = = MODE_INS ) )
//if (m.mode() == MODE_INS)
1997-12-05 16:26:15 +00:00
{
1998-03-17 09:24:10 +00:00
//const TString16 codsez = m.get(F_CODSEZ);
//const TString16 codsot = m.get(F_CODSOT);
TLocalisamfile sez ( LF_SEZIONI ) ;
sez . setkey ( 1 ) ;
TRectype & recsez = sez . curr ( ) ;
recsez . zero ( ) ;
recsez . put ( SEZ_CODSEZ , m . get ( F_CODSEZ ) ) ;
recsez . put ( SEZ_CODSOT , m . get ( F_CODSOT ) ) ;
if ( sez . read ( ) = = NOERR )
{
TDate data = sez . get_date ( SEZ_DATAULTCON ) ;
+ + data ;
1998-09-25 07:51:18 +00:00
if ( data < = m . get_date ( F_DATA ) & & data . ok ( ) )
1998-08-07 09:35:35 +00:00
{
m . set ( F_DATAINI , data ) ;
m . check_field ( F_DATAINI ) ;
}
1998-03-17 09:24:10 +00:00
}
1997-12-05 16:26:15 +00:00
}
}
return TRUE ;
}
1997-08-01 14:49:53 +00:00
bool TGestioneConvocazioni : : data_handler ( TMask_field & f , KEY k )
1997-03-20 10:33:28 +00:00
{
1997-06-17 15:50:08 +00:00
if ( f . to_check ( k ) )
{
const TDate data = f . get ( ) ;
const int giorno = data . wday ( ) ;
TString16 datagio = " " ;
switch ( giorno )
{
case 1 :
datagio = " Lunedi " ;
break ;
case 2 :
datagio = " Martedi " ;
break ;
case 3 :
datagio = " Mercoledi " ;
break ;
case 4 :
datagio = " Giovedi " ;
break ;
case 5 :
datagio = " Venerdi " ;
break ;
case 6 :
datagio = " Sabato " ;
break ;
1998-08-07 09:35:35 +00:00
case 7 :
datagio = " Domenica " ;
break ;
1997-06-17 15:50:08 +00:00
}
f . mask ( ) . set ( F_DATAGIO , datagio ) ;
}
return TRUE ;
1997-03-20 10:33:28 +00:00
}
1997-12-05 16:26:15 +00:00
bool TGestioneConvocazioni : : dataini_handler ( TMask_field & f , KEY k )
{
if ( f . to_check ( k ) )
{
const TDate data = f . get ( ) ;
1998-05-11 09:43:54 +00:00
if ( data > f . mask ( ) . get_date ( F_DATA ) )
return f . error_box ( " ATTENZIONE! La data iniziale non puo' essere superiore alla data finale " ) ;
1997-12-05 16:26:15 +00:00
const int giorno = data . wday ( ) ;
TString16 datagio = " " ;
switch ( giorno )
{
case 1 :
datagio = " Lunedi " ;
break ;
case 2 :
datagio = " Martedi " ;
break ;
case 3 :
datagio = " Mercoledi " ;
break ;
case 4 :
datagio = " Giovedi " ;
break ;
case 5 :
datagio = " Venerdi " ;
break ;
case 6 :
datagio = " Sabato " ;
break ;
1998-08-07 09:35:35 +00:00
case 7 :
datagio = " Domenica " ;
break ;
1997-12-05 16:26:15 +00:00
}
f . mask ( ) . set ( F_DATAINIGIO , datagio ) ;
}
return TRUE ;
}
1997-08-01 14:49:53 +00:00
bool TGestioneConvocazioni : : esegui_handler ( TMask_field & f , KEY k )
1997-03-20 10:33:28 +00:00
{
if ( k = = K_SPACE )
{
1999-02-12 12:26:59 +00:00
f . disable ( ) ;
1997-03-20 10:33:28 +00:00
TMask & m = f . mask ( ) ;
TCursor * cur = app ( ) . _cur ;
1997-06-17 15:50:08 +00:00
app ( ) . _numero = m . get_long ( F_NUMERO ) ;
app ( ) . _data = m . get ( F_DATA ) ;
app ( ) . _punto = m . get ( F_PUNTO ) ;
1999-02-12 12:26:59 +00:00
app ( ) . _tutti = m . get_bool ( F_TUTTI ) ;
1997-06-17 15:50:08 +00:00
app ( ) . _tipo = m . get ( F_TIPO ) ;
app ( ) . _codsez = m . get ( F_CODSEZ ) ;
app ( ) . _codsot = m . get ( F_CODSOT ) ;
app ( ) . _dataini = m . get ( F_DATAINI ) ;
1997-12-05 16:26:15 +00:00
if ( app ( ) . _dataini . empty ( ) )
app ( ) . _dataini = app ( ) . _data ;
1997-06-17 15:50:08 +00:00
app ( ) . _ritarda = m . get_bool ( F_RITARDA ) ;
app ( ) . _maxrit = m . get_int ( F_MAXRIT ) ;
1999-02-12 12:26:59 +00:00
app ( ) . _modconv = m . get ( F_MODCONV ) ;
1997-03-20 10:33:28 +00:00
if ( app ( ) . _numero = = 0 | | ! app ( ) . _data . ok ( ) | | app ( ) . _punto . empty ( ) | | app ( ) . _tipo . empty ( ) )
return f . error_box ( " Mancano i dati fondamentali per la convocazione " ) ;
1997-06-17 15:50:08 +00:00
const TDate data = app ( ) . _data ;
const TDate dataini = app ( ) . _dataini ;
TDate datalimite = dataini ;
datalimite . set_year ( datalimite . year ( ) - 2 ) ;
// filtro per data prossima donazione
TRectype da ( LF_SOGGETTI ) ;
TRectype a ( LF_SOGGETTI ) ;
da . put ( SOG_DATAPROSSI , datalimite ) ;
a . put ( SOG_DATAPROSSI , data ) ;
cur - > setregion ( da , a ) ;
cur - > set_filterfunction ( filter_func_convoc , TRUE ) ;
2000-03-03 11:47:59 +00:00
app ( ) . _modified . reset ( ) ;
1997-03-20 10:33:28 +00:00
TSheet_field & s = ( TSheet_field & ) m . field ( F_CONVOCATI ) ;
s . destroy ( ) ;
TRectype & rec = cur - > curr ( ) ;
1997-06-17 15:50:08 +00:00
TRectype & sez = cur - > curr ( LF_SEZIONI ) ;
int nconv = 0 ;
int nsoll = 0 ;
int nrit = 0 ;
TDate datasog = data ;
const int giorni = ( int ) ( data - dataini ) ; // giorni su cui suddividere la chiamata -1
const int dim = giorni + 1 ;
int * numperdata = new int [ dim ] ;
1998-03-27 13:41:26 +00:00
int quanti = ( ( int ) ( cur - > items ( ) ) / ( giorni + 1 ) ) + 1 ; // quanti donatori per giorno
1997-06-17 15:50:08 +00:00
if ( quanti < 1 )
quanti = 1 ;
for ( int i = 0 ; i < giorni + 1 ; i + + )
numperdata [ i ] = 0 ;
long last = cur - > items ( ) ;
1997-03-20 10:33:28 +00:00
int r = 0 ;
TProgind prg ( last , " Elaborazione in corso... Prego attendere " , FALSE , TRUE , 30 ) ;
for ( * cur = 0 ; cur - > pos ( ) < last ; + + ( * cur ) )
1997-06-17 15:50:08 +00:00
{
1997-03-20 10:33:28 +00:00
prg . addstatus ( 1 ) ;
1998-03-27 13:41:26 +00:00
TDate datarif ( NULLDATE ) ;
1997-06-17 15:50:08 +00:00
const int numconv = rec . get_int ( SOG_NUMCONV ) ;
const TDate dataultconv = rec . get ( SOG_DATACONV ) ;
const TDate dataultsol = rec . get ( SOG_DATAULTSOL ) ;
const TDate dataprossi = rec . get ( SOG_DATAPROSSI ) ;
const int giocarsol = sez . get_int ( SEZ_GIOCARSOL ) ;
const int giosolsol = sez . get_int ( SEZ_GIOSOLSOL ) ;
const int gioultsol = sez . get_int ( SEZ_GIOULTSOL ) ;
const int giorit = sez . get_int ( SEZ_GIOPERRIT ) ;
const int numsol = sez . get_int ( SEZ_NUMMAXSOL ) ;
char chiamata = ' ' ;
if ( numconv = = 0 )
1998-03-27 13:41:26 +00:00
{
1997-06-17 15:50:08 +00:00
chiamata = ' C ' ;
1998-03-27 13:41:26 +00:00
datarif = dataprossi ;
}
else
{
1997-06-17 15:50:08 +00:00
if ( ( numconv = = 1 ) & & ( data - dataultconv > = giocarsol ) )
1998-03-27 13:41:26 +00:00
{
1997-06-17 15:50:08 +00:00
chiamata = ' S ' ;
1998-03-27 13:41:26 +00:00
datarif = dataultconv + ( long ) giocarsol ;
}
else
{
1997-06-17 15:50:08 +00:00
if ( ( numconv > = 2 & & numconv < = numsol - 1 ) & & ( data - dataultconv > = giosolsol ) )
1998-03-27 13:41:26 +00:00
{
1997-06-17 15:50:08 +00:00
chiamata = ' S ' ;
1998-03-27 13:41:26 +00:00
datarif = dataultconv + ( long ) giosolsol ;
}
1997-06-17 15:50:08 +00:00
else
1998-03-27 13:41:26 +00:00
{
1997-06-17 15:50:08 +00:00
if ( ( numconv = = numsol & & numsol > 0 ) & & ( data - dataultconv > = gioultsol ) )
1998-03-27 13:41:26 +00:00
{
1997-06-17 15:50:08 +00:00
chiamata = ' S ' ;
1998-03-27 13:41:26 +00:00
datarif = dataultconv + ( long ) gioultsol ;
}
1997-06-17 15:50:08 +00:00
else
1998-03-27 13:41:26 +00:00
{
1997-06-17 15:50:08 +00:00
if ( ( numconv > numsol & & numsol > 0 ) & & ( app ( ) . _ritarda ) & & ( data - dataultsol < = app ( ) . _maxrit ) & & ( data - dataultconv > = giorit ) )
1998-03-27 13:41:26 +00:00
{
1997-06-17 15:50:08 +00:00
chiamata = ' R ' ;
1998-03-27 13:41:26 +00:00
datarif = dataultconv + ( long ) giorit ;
}
}
}
}
}
1999-02-12 12:26:59 +00:00
if ( dataprossi < = data )
1997-06-17 15:50:08 +00:00
{
1999-02-12 12:26:59 +00:00
switch ( chiamata )
1997-06-17 15:50:08 +00:00
{
1999-02-12 12:26:59 +00:00
case ' C ' :
nconv + + ;
break ;
case ' S ' :
nsoll + + ;
break ;
case ' R ' :
nrit + + ;
break ;
}
if ( giorni > 0 )
1997-06-17 15:50:08 +00:00
{
1999-02-12 12:26:59 +00:00
datasog = NULLDATE ;
int partenza ;
if ( datarif < = dataini )
partenza = 0 ;
else
partenza = ( int ) ( datarif - dataini ) ;
for ( int r = partenza ; r < = giorni ; r + + )
{
if ( ( numperdata [ r ] < quanti ) & & ( ! datasog . ok ( ) ) )
{
datasog = dataini + ( long ) ( r ) ;
numperdata [ r ] + + ;
}
}
if ( ! datasog . ok ( ) )
{
2000-03-03 11:47:59 +00:00
//if (dataprossi < dataini)
// datasog = dataini;
//else
// datasog = dataprossi;
datasog = datarif ; //aggiunto da Marco in data 24/09/99 per sostituire le azioni commentate in quanto non rispettava gli intervalli fra cartoline
1999-02-12 12:26:59 +00:00
}
}
TToken_string & row = s . row ( r ) ;
row . add ( rec . get ( SOG_CODICE ) ) ;
row . add ( rec . get ( SOG_COGNOME ) ) ;
row . add ( rec . get ( SOG_NOME ) ) ;
row . add ( datasog ) ;
row . add ( chiamata ) ;
row . add ( ' ' ) ; // stampato
row . add ( ' ' ) ; // annullato
row . add ( rec . get ( SOG_DATANASC ) ) ;
row . add ( rec . get ( SOG_CATDON ) ) ;
row . add ( rec . get ( SOG_TESSAVIS ) ) ;
row . add ( rec . get ( SOG_CODSEZ ) ) ;
row . add ( rec . get ( SOG_CODSOT ) ) ;
row . add ( rec . get ( SOG_DATAULTDON ) ) ;
1999-04-08 10:58:51 +00:00
row . add ( rec . get ( SOG_DATAPROSSI ) ) ;
1999-02-12 12:26:59 +00:00
r + + ;
}
1997-03-20 10:33:28 +00:00
}
1997-06-17 15:50:08 +00:00
m . set ( F_NUMCONV , nconv ) ;
m . set ( F_NUMSOLL , nsoll ) ;
m . set ( F_NUMRIT , nrit ) ;
1997-03-20 10:33:28 +00:00
s . force_update ( ) ;
1997-06-17 15:50:08 +00:00
delete numperdata ;
1997-03-20 10:33:28 +00:00
}
return TRUE ;
}
1999-04-08 10:58:51 +00:00
bool TGestioneConvocazioni : : sistampa_handler ( TMask_field & f , KEY k )
{
if ( k = = K_SPACE )
{
TSheet_field & s = f . mask ( ) . sfield ( F_CONVOCATI ) ;
const int pos = s . cid2index ( F_S_STAMPATO ) ;
const int posann = s . cid2index ( F_S_ANNULLATO ) ;
FOR_EACH_SHEET_ROW ( s , r , row )
if ( row - > get ( posann ) [ 0 ] ! = ' X ' )
row - > add ( ' X ' , pos ) ;
s . force_update ( ) ;
}
return TRUE ;
}
bool TGestioneConvocazioni : : nostampa_handler ( TMask_field & f , KEY k )
{
if ( k = = K_SPACE )
{
TSheet_field & s = f . mask ( ) . sfield ( F_CONVOCATI ) ;
const int pos = s . cid2index ( F_S_STAMPATO ) ;
const int posann = s . cid2index ( F_S_ANNULLATO ) ;
FOR_EACH_SHEET_ROW ( s , r , row )
if ( row - > get ( posann ) [ 0 ] ! = ' X ' )
row - > add ( ' ' , pos ) ;
s . force_update ( ) ;
}
return TRUE ;
}
1998-02-04 13:46:27 +00:00
bool TGestioneConvocazioni : : nome_handler ( TMask_field & f , KEY k )
{
bool ok = TRUE ;
if ( f . to_check ( k ) )
{
TMask & m = f . mask ( ) ;
long codsog = m . get_long ( F_S_CODICE ) ;
if ( codsog = = 0 )
f . on_key ( K_F9 ) ;
}
return ok ;
}
1997-03-20 10:33:28 +00:00
1998-02-04 13:46:27 +00:00
bool TGestioneConvocazioni : : codice_handler ( TMask_field & f , KEY k )
{
bool ok = TRUE ;
if ( f . to_check ( k ) )
{
TMask & m = f . mask ( ) ;
long codsog = m . get_long ( F_S_CODICE ) ;
if ( codsog ! = 0 )
{
TLocalisamfile sog ( LF_SOGGETTI ) ; ;
sog . setkey ( 1 ) ;
sog . zero ( ) ;
sog . put ( SOG_CODICE , codsog ) ;
int err = sog . read ( ) ;
if ( err = = NOERR )
{
m . set ( F_S_COGNOME , sog . get ( SOG_COGNOME ) ) ;
m . set ( F_S_NOME , sog . get ( SOG_NOME ) ) ;
m . set ( F_S_DATANASC , sog . get ( SOG_DATANASC ) ) ;
m . set ( F_S_TESSAVIS , sog . get ( SOG_TESSAVIS ) ) ;
m . set ( F_S_CODSEZ , sog . get ( SOG_CODSEZ ) ) ;
m . set ( F_S_CODSOT , sog . get ( SOG_CODSOT ) ) ;
m . set ( F_S_CATDON , sog . get ( SOG_CATDON ) ) ;
1999-02-12 12:26:59 +00:00
m . set ( F_S_DATAULTDON , sog . get ( SOG_DATAULTDON ) ) ;
1999-04-08 10:58:51 +00:00
m . set ( F_S_DATAPROSSI , sog . get ( SOG_DATAPROSSI ) ) ;
1998-02-04 13:46:27 +00:00
}
else
ok = FALSE ; // codice non esistente
}
}
return ok ;
}
1997-08-01 14:49:53 +00:00
bool TGestioneConvocazioni : : user_create ( )
1997-03-20 10:33:28 +00:00
{
1998-03-27 13:41:26 +00:00
_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 " ) ;
1997-03-20 10:33:28 +00:00
_msk = new TMask ( " at0400a " ) ;
_rel = new TRelation ( LF_CONVOC ) ;
_relsog = new TRelation ( LF_SOGGETTI ) ;
1997-06-17 15:50:08 +00:00
_relsog - > add ( " CTD " , " CODTAB==CATDON " , 1 , 0 , - ALIAS_CTD ) ;
_relsog - > add ( " TCS " , " CODTAB==STATO " , 1 , 0 , - ALIAS_TCS ) ;
_relsog - > add ( LF_SEZIONI , " CODSEZ==CODSEZ|CODSOT==CODSOT " ) ;
1997-08-01 14:49:53 +00:00
// ordinamento per data prossima donazione
_cur = new TCursor ( _relsog , " " , 5 ) ;
1997-03-20 10:33:28 +00:00
_rconvoc = new TLocalisamfile ( LF_RCONVOC ) ;
_soggetti = new TLocalisamfile ( LF_SOGGETTI ) ;
_sconvocati = new TRecord_array ( LF_RCONVOC , RCV_PROGCONV ) ;
1999-04-08 10:58:51 +00:00
_msk - > set_handler ( F_SISTAMPA , sistampa_handler ) ;
_msk - > set_handler ( F_NOSTAMPA , nostampa_handler ) ;
1997-03-20 10:33:28 +00:00
_msk - > set_handler ( F_ESEGUI , esegui_handler ) ;
1997-06-17 15:50:08 +00:00
_msk - > set_handler ( F_DATA , data_handler ) ;
1997-12-05 16:26:15 +00:00
_msk - > set_handler ( F_DATAINI , dataini_handler ) ;
_msk - > set_handler ( F_CODSEZ , sezione_handler ) ;
_msk - > set_handler ( F_CODSOT , sezione_handler ) ;
1997-03-20 10:33:28 +00:00
TSheet_field & sc = ( TSheet_field & ) _msk - > field ( F_CONVOCATI ) ;
sc . set_notify ( convocati_notify ) ;
1998-02-04 13:46:27 +00:00
sc . sheet_mask ( ) . set_handler ( F_S_NOME , nome_handler ) ;
sc . sheet_mask ( ) . set_handler ( F_S_CODICE , codice_handler ) ;
1997-03-20 10:33:28 +00:00
_rel - > lfile ( ) . last ( ) ;
_lastcod = _rel - > lfile ( ) . get_long ( COV_NUMERO ) ;
1997-12-05 16:26:15 +00:00
enable_menu_item ( M_FILE_PRINT ) ;
1997-03-20 10:33:28 +00:00
return TRUE ;
}
1997-08-01 14:49:53 +00:00
bool TGestioneConvocazioni : : user_destroy ( )
1998-03-27 13:41:26 +00:00
{
1998-08-07 09:35:35 +00:00
delete _sconvocati ;
delete _soggetti ;
delete _rconvoc ;
delete _cur ;
1997-03-20 10:33:28 +00:00
delete _relsog ;
1998-08-07 09:35:35 +00:00
delete _rel ;
1997-03-20 10:33:28 +00:00
delete _msk ;
1998-08-07 09:35:35 +00:00
delete _tmprel ;
delete _tmprconv ;
delete _tmpconv ;
1997-03-20 10:33:28 +00:00
return TRUE ;
}
1997-08-01 14:49:53 +00:00
const char * TGestioneConvocazioni : : get_next_key ( )
1997-03-20 10:33:28 +00:00
{
// autonumerazione progressiva delle convocazioni
1998-08-07 09:35:35 +00:00
_rel - > lfile ( ) . last ( ) ;
_lastcod = _rel - > lfile ( ) . get_long ( COV_NUMERO ) ;
1997-03-20 10:33:28 +00:00
return format ( " %d|%ld " , F_NUMERO , _lastcod + 1 ) ;
}
1997-08-01 14:49:53 +00:00
bool TGestioneConvocazioni : : remove ( )
1997-03-20 10:33:28 +00:00
{
2000-03-03 11:47:59 +00:00
TWait_cursor hourglass ;
1997-03-20 10:33:28 +00:00
// cancella convocati
// cancella testata convocazione
bool ok = TRUE ;
// cancella convocati
1998-02-04 13:46:27 +00:00
// prima cancella dall'archivio soggetti la data ultima convocazione
TLocalisamfile soggetti ( LF_SOGGETTI ) ;
1998-07-03 13:12:55 +00:00
soggetti . setkey ( 1 ) ;
1998-02-04 13:46:27 +00:00
TLocalisamfile rconvoc ( LF_RCONVOC ) ;
rconvoc . setkey ( 3 ) ;
for ( int r = 1 ; r < = _sconvocati - > rows ( ) ; r + + )
{
const TRectype & riga = _sconvocati - > row ( r ) ;
const long codice = riga . get_long ( RCV_CODICE ) ;
const TDate dataconv = riga . get_date ( RCV_DATACONV ) ;
soggetti . put ( SOG_CODICE , codice ) ;
if ( soggetti . read ( ) = = NOERR )
{
1999-04-08 10:58:51 +00:00
const TDate dataprossi = soggetti . get_date ( SOG_DATAPROSSI ) ;
1998-02-04 13:46:27 +00:00
int numconv = soggetti . get_int ( SOG_NUMCONV ) ;
if ( numconv > 0 )
{
numconv - - ;
soggetti . put ( SOG_NUMCONV , numconv ) ;
rconvoc . put ( RCV_CODICE , codice ) ;
rconvoc . put ( RCV_DATACONV , dataconv ) ;
if ( rconvoc . read ( ) = = NOERR )
1999-04-08 10:58:51 +00:00
{
bool ok = TRUE ;
while ( ok )
1998-07-03 13:12:55 +00:00
{
1999-04-08 10:58:51 +00:00
- - rconvoc ;
const long codprec = rconvoc . get_long ( RCV_CODICE ) ;
if ( codprec = = codice )
{
if ( rconvoc . get ( RCV_ANNULLATO ) [ 0 ] ! = ' X ' )
{
ok = FALSE ;
soggetti . put ( SOG_DATACONV , rconvoc . get ( RCV_DATACONV ) ) ;
}
}
else
{
ok = FALSE ;
soggetti . put ( SOG_NUMCONV , 0 ) ;
soggetti . put ( SOG_DATACONV , NULLDATE ) ;
soggetti . put ( SOG_DATAULTSOL , NULLDATE ) ;
}
}
1998-07-03 13:12:55 +00:00
if ( numconv = = 1 )
soggetti . put ( SOG_DATAULTSOL , NULLDATE ) ;
}
else
{
1999-04-08 10:58:51 +00:00
soggetti . put ( SOG_NUMCONV , 0 ) ;
1998-07-03 13:12:55 +00:00
soggetti . put ( SOG_DATACONV , NULLDATE ) ;
soggetti . put ( SOG_DATAULTSOL , NULLDATE ) ;
1998-02-04 13:46:27 +00:00
}
}
else
1998-07-03 13:12:55 +00:00
{
1999-04-08 10:58:51 +00:00
soggetti . put ( SOG_NUMCONV , 0 ) ;
soggetti . put ( SOG_DATACONV , NULLDATE ) ;
soggetti . put ( SOG_DATAULTSOL , NULLDATE ) ;
}
const TDate dataconvsog = soggetti . get_date ( SOG_DATACONV ) ;
if ( dataconvsog < dataprossi )
{
soggetti . put ( SOG_NUMCONV , 0 ) ;
1998-02-04 13:46:27 +00:00
soggetti . put ( SOG_DATACONV , NULLDATE ) ;
1998-07-03 13:12:55 +00:00
soggetti . put ( SOG_DATAULTSOL , NULLDATE ) ;
}
1998-02-04 13:46:27 +00:00
soggetti . rewrite ( ) ;
}
}
1997-03-20 10:33:28 +00:00
int err = _sconvocati - > remove ( ) ;
if ( err = = _iseof | | err = = _isemptyfile )
err = NOERR ;
1998-08-07 09:35:35 +00:00
if ( err = = NOERR )
{
TLocalisamfile sez ( LF_SEZIONI ) ;
sez . setkey ( 1 ) ;
2000-03-03 11:47:59 +00:00
sez . zero ( ) ;
TMask & m = curr_mask ( ) ;
sez . put ( SEZ_CODSEZ , m . get ( F_CODSEZ ) ) ;
sez . put ( SEZ_CODSOT , m . get ( F_CODSOT ) ) ;
1998-08-07 09:35:35 +00:00
if ( sez . read ( ) = = NOERR )
{
TLocalisamfile convoc ( LF_CONVOC ) ;
convoc . setkey ( 3 ) ;
2000-03-03 11:47:59 +00:00
convoc . put ( COV_CODSEZ , m . get ( F_CODSEZ ) ) ;
convoc . put ( COV_CODSOT , m . get ( F_CODSOT ) ) ;
convoc . put ( COV_DATA , m . get ( F_DATA ) ) ;
1998-08-07 09:35:35 +00:00
convoc . read ( ) ;
- - convoc ;
TDate dataini = convoc . get_date ( COV_DATAINI ) ;
TDate datanulla ( NULLDATE ) ;
while ( ! convoc . eof ( ) & & ( dataini = = datanulla ) )
{
- - convoc ;
dataini = convoc . get_date ( COV_DATAINI ) ;
}
2000-03-03 11:47:59 +00:00
if ( ( convoc . get ( COV_CODSEZ ) = = m . get ( F_CODSEZ ) ) & & ( convoc . get ( COV_CODSOT ) = = m . get ( F_CODSOT ) ) )
1998-08-07 09:35:35 +00:00
sez . put ( SEZ_DATAULTCON , convoc . get_date ( COV_DATA ) ) ;
else
sez . put ( SEZ_DATAULTCON , NULLDATE ) ;
sez . rewrite ( ) ;
}
}
1997-03-20 10:33:28 +00:00
// cancella la testata
if ( err = = NOERR ) ok = TRelation_application : : remove ( ) ;
return ( ok & & err = = NOERR ) ;
}
1997-08-01 14:49:53 +00:00
int TGestioneConvocazioni : : read ( TMask & m )
1997-03-20 10:33:28 +00:00
{
int err = TRelation_application : : read ( m ) ;
if ( err = = NOERR )
2000-03-03 11:47:59 +00:00
{
TRectype * key = new TRectype ( LF_RCONVOC ) ;
1997-03-20 10:33:28 +00:00
key - > put ( RCV_NUMERO , m . get ( F_NUMERO ) ) ;
err = _sconvocati - > read ( key ) ;
if ( err = = NOERR )
{
TLocalisamfile soggetti ( LF_SOGGETTI ) ;
TSheet_field & s = ( TSheet_field & ) m . field ( F_CONVOCATI ) ;
2000-03-03 11:47:59 +00:00
app ( ) . _modified . reset ( ) ;
1997-03-20 10:33:28 +00:00
s . destroy ( ) ;
for ( int r = 1 ; r < = _sconvocati - > rows ( ) ; r + + )
{
TToken_string & row = s . row ( r - 1 ) ;
const TRectype & riga = _sconvocati - > row ( r ) ;
const TString & codice = riga . get ( RCV_CODICE ) ;
row . add ( codice ) ;
soggetti . put ( SOG_CODICE , codice ) ;
if ( soggetti . read ( ) ! = NOERR )
soggetti . zero ( ) ;
row . add ( soggetti . get ( SOG_COGNOME ) ) ;
row . add ( soggetti . get ( SOG_NOME ) ) ;
1997-06-17 15:50:08 +00:00
row . add ( riga . get ( RCV_DATACONV ) ) ;
row . add ( riga . get ( RCV_CHIAMATA ) ) ;
1997-03-20 10:33:28 +00:00
row . add ( riga . get ( RCV_STAMPATO ) ) ;
1997-06-17 15:50:08 +00:00
row . add ( riga . get ( RCV_ANNULLATO ) ) ;
1997-03-20 10:33:28 +00:00
row . add ( soggetti . get ( SOG_DATANASC ) ) ;
row . add ( soggetti . get ( SOG_CATDON ) ) ;
row . add ( soggetti . get ( SOG_TESSAVIS ) ) ;
1998-03-27 13:41:26 +00:00
row . add ( soggetti . get ( SOG_CODSEZ ) ) ;
row . add ( soggetti . get ( SOG_CODSOT ) ) ;
1999-02-12 12:26:59 +00:00
row . add ( soggetti . get ( SOG_DATAULTDON ) ) ;
1999-04-08 10:58:51 +00:00
row . add ( soggetti . get ( SOG_DATAPROSSI ) ) ;
1997-03-20 10:33:28 +00:00
}
}
else
if ( err = = _iseof | | err = = _isemptyfile )
err = NOERR ;
}
return err ;
}
1997-08-01 14:49:53 +00:00
int TGestioneConvocazioni : : write ( const TMask & m )
1997-03-20 10:33:28 +00:00
{
long curcod = m . get_long ( F_NUMERO ) ;
if ( curcod > _lastcod ) _lastcod = curcod ;
1998-03-27 13:41:26 +00:00
_inserimento = FALSE ;
1997-08-01 14:49:53 +00:00
return TGestioneConvocazioni : : scrivi ( m , FALSE ) ;
1997-03-20 10:33:28 +00:00
}
1997-08-01 14:49:53 +00:00
int TGestioneConvocazioni : : rewrite ( const TMask & m )
1997-03-20 10:33:28 +00:00
{
1997-08-01 14:49:53 +00:00
return TGestioneConvocazioni : : scrivi ( m , TRUE ) ;
1997-03-20 10:33:28 +00:00
}
1997-08-01 14:49:53 +00:00
int TGestioneConvocazioni : : scrivi ( const TMask & m , bool ri )
1997-03-20 10:33:28 +00:00
{
int err = ri ? TRelation_application : : rewrite ( m ) : TRelation_application : : write ( m ) ;
if ( err = = NOERR )
{
1997-12-05 16:26:15 +00:00
TLocalisamfile sez ( LF_SEZIONI ) ;
sez . setkey ( 1 ) ;
sez . zero ( ) ;
sez . put ( SEZ_CODSEZ , app ( ) . _codsez ) ;
sez . put ( SEZ_CODSOT , app ( ) . _codsot ) ;
if ( sez . read ( ) = = NOERR )
{
sez . put ( SEZ_DATAULTCON , app ( ) . _data ) ;
sez . rewrite ( ) ;
}
1997-06-17 15:50:08 +00:00
TLocalisamfile soggetti ( LF_SOGGETTI ) ;
1997-03-20 10:33:28 +00:00
_sconvocati - > destroy_rows ( ) ;
TRectype * key = new TRectype ( LF_RCONVOC ) ;
key - > put ( RCV_NUMERO , m . get ( F_NUMERO ) ) ;
_sconvocati - > set_key ( key ) ;
2000-10-10 07:57:16 +00:00
TSheet_field & s = ( TSheet_field & ) m . field ( F_CONVOCATI ) ;
2000-05-03 10:03:27 +00:00
TProgind prg ( s . items ( ) , " Registrazione in corso... Prego attendere " , FALSE , TRUE , 30 ) ;
1997-03-20 10:33:28 +00:00
for ( int r = s . items ( ) ; r > 0 ; r - - )
{
2000-05-03 10:03:27 +00:00
prg . addstatus ( 1 ) ;
1997-03-20 10:33:28 +00:00
TToken_string & row = s . row ( r - 1 ) ;
TRectype & rec = _sconvocati - > row ( r , TRUE ) ;
1997-06-17 15:50:08 +00:00
const long codice = row . get_long ( 0 ) ;
const TDate dataconv = row . get ( 3 ) ;
const char chiamata = row . get_char ( 4 ) ;
2000-03-03 11:47:59 +00:00
const bool annullato = ( row . get ( 6 ) [ 0 ] = = ' X ' ) ;
1997-06-17 15:50:08 +00:00
rec . put ( RCV_CODICE , codice ) ;
rec . put ( RCV_DATACONV , dataconv ) ;
rec . put ( RCV_CHIAMATA , chiamata ) ;
rec . put ( RCV_STAMPATO , row . get ( 5 ) ) ;
rec . put ( RCV_ANNULLATO , row . get ( 6 ) ) ;
2000-10-10 07:57:16 +00:00
}
err = ri ? _sconvocati - > rewrite ( ) : _sconvocati - > write ( ) ;
if ( err = = NOERR )
{
for ( int r = s . items ( ) ; r > 0 ; r - - )
1997-06-17 15:50:08 +00:00
{
2000-10-10 07:57:16 +00:00
prg . addstatus ( 1 ) ;
TToken_string & row = s . row ( r - 1 ) ;
//TRectype& rec = _sconvocati->row(r,TRUE);
const long codice = row . get_long ( 0 ) ;
const TDate dataconv = row . get ( 3 ) ;
const char chiamata = row . get_char ( 4 ) ;
const bool annullato = ( row . get ( 6 ) [ 0 ] = = ' X ' ) ;
//rec.put(RCV_CODICE,codice);
//rec.put(RCV_DATACONV,dataconv);
//rec.put(RCV_CHIAMATA,chiamata);
//rec.put(RCV_STAMPATO,row.get(5));
//rec.put(RCV_ANNULLATO,row.get(6));
// aggiornamento archivio soggetti
soggetti . put ( SOG_CODICE , codice ) ;
/* Messo il < invece del != nel primo if, spostato il controllo se sollecito
o meno all ' interno del controllo sulla data da Marco in data 23 / 08 / 99
*/
if ( soggetti . read ( ) = = NOERR )
1998-08-07 09:35:35 +00:00
{
2000-10-10 07:57:16 +00:00
if ( soggetti . get_date ( SOG_DATACONV ) < dataconv ) //Aggiungo 30/08/99 da qui
2000-03-03 11:47:59 +00:00
{
2000-10-10 07:57:16 +00:00
if ( ! _modified [ r - 1 ] & & ( ! annullato ) )
{ //Fino a qui
2000-03-03 11:47:59 +00:00
if ( chiamata = = ' S ' )
soggetti . put ( SOG_DATAULTSOL , dataconv ) ;
soggetti . put ( SOG_DATACONV , dataconv ) ;
2000-10-10 07:57:16 +00:00
int numconv = soggetti . get_int ( SOG_NUMCONV ) ;
soggetti . put ( SOG_NUMCONV , numconv + 1 ) ;
} //Aggiungo 30/08/99 da qui
2000-03-03 11:47:59 +00:00
else
{
2000-10-10 07:57:16 +00:00
if ( _modified [ r - 1 ] & & ( ! annullato ) )
{
if ( chiamata = = ' S ' )
soggetti . put ( SOG_DATAULTSOL , dataconv ) ;
soggetti . put ( SOG_DATACONV , dataconv ) ;
}
else
2000-03-03 11:47:59 +00:00
{
2000-10-10 07:57:16 +00:00
if ( _modified [ r - 1 ] & & ( annullato ) )
{
const TDate dataprossi = soggetti . get_date ( SOG_DATAPROSSI ) ;
int numconv = soggetti . get_int ( SOG_NUMCONV ) ;
numconv - - ;
2002-02-28 09:11:05 +00:00
if ( numconv > 0 )
soggetti . put ( SOG_NUMCONV , numconv ) ;
2000-10-10 07:57:16 +00:00
TRectype da ( LF_RCONVOC ) ;
da . put ( RCV_CODICE , codice ) ;
TRectype a ( LF_RCONVOC ) ;
a . put ( RCV_CODICE , codice ) ;
TRelation rel ( LF_RCONVOC ) ;
TCursor cur ( & rel , " " , 3 , & da , & a ) ;
const TRecnotype convocazioni = cur . items ( ) ;
TRectype & rec = cur . curr ( ) ;
for ( TRecnotype pos = convocazioni - 2 ; pos > = 0 ; pos - - )
2000-03-03 11:47:59 +00:00
{
cur = pos ;
2000-10-10 07:57:16 +00:00
//TRectype& rec = cur.curr();
2000-03-03 11:47:59 +00:00
if ( rec . get ( RCV_ANNULLATO ) [ 0 ] ! = ' X ' )
{
soggetti . put ( SOG_DATACONV , rec . get ( RCV_DATACONV ) ) ;
break ;
}
}
2000-10-10 07:57:16 +00:00
if ( pos < 0 )
{
soggetti . put ( SOG_NUMCONV , 0 ) ;
soggetti . put ( SOG_DATACONV , NULLDATE ) ;
soggetti . put ( SOG_DATAULTSOL , NULLDATE ) ;
}
2000-03-03 11:47:59 +00:00
else
2000-10-10 07:57:16 +00:00
{
if ( numconv > 1 )
soggetti . put ( SOG_DATAULTSOL , rec . get ( RCV_DATACONV ) ) ;
else
soggetti . put ( SOG_DATAULTSOL , NULLDATE ) ;
}
const TDate dataconvsog = soggetti . get_date ( SOG_DATACONV ) ;
if ( dataconvsog < dataprossi )
{
soggetti . put ( SOG_NUMCONV , 0 ) ;
soggetti . put ( SOG_DATACONV , NULLDATE ) ;
soggetti . put ( SOG_DATAULTSOL , NULLDATE ) ;
}
}
}
}
}
else
2000-03-03 11:47:59 +00:00
{
2000-10-10 07:57:16 +00:00
if ( ( annullato ) & & ( dataconv = = soggetti . get_date ( SOG_DATACONV ) ) )
{
const TDate dataprossi = soggetti . get_date ( SOG_DATAPROSSI ) ;
int numconv = soggetti . get_int ( SOG_NUMCONV ) ;
numconv - - ;
2002-02-28 09:11:05 +00:00
if ( numconv > 0 )
soggetti . put ( SOG_NUMCONV , numconv ) ;
2000-10-10 07:57:16 +00:00
TLocalisamfile rconvoc ( LF_RCONVOC ) ;
rconvoc . setkey ( 3 ) ;
rconvoc . put ( RCV_CODICE , codice ) ;
rconvoc . put ( RCV_DATACONV , dataconv ) ;
if ( rconvoc . read ( ) = = NOERR )
{
bool ok = TRUE ;
while ( ok )
2000-03-03 11:47:59 +00:00
{
2000-10-10 07:57:16 +00:00
- - rconvoc ;
const long codprec = rconvoc . get_long ( RCV_CODICE ) ;
if ( codprec = = codice )
2000-03-03 11:47:59 +00:00
{
2000-10-10 07:57:16 +00:00
if ( rconvoc . get ( RCV_ANNULLATO ) [ 0 ] ! = ' X ' )
{
ok = FALSE ;
soggetti . put ( SOG_DATACONV , rconvoc . get ( RCV_DATACONV ) ) ;
}
2000-03-03 11:47:59 +00:00
}
2000-10-10 07:57:16 +00:00
else
{
ok = FALSE ;
soggetti . put ( SOG_NUMCONV , 0 ) ;
soggetti . put ( SOG_DATACONV , NULLDATE ) ;
soggetti . put ( SOG_DATAULTSOL , NULLDATE ) ;
}
2000-03-03 11:47:59 +00:00
}
2000-10-10 07:57:16 +00:00
if ( numconv > 1 )
soggetti . put ( SOG_DATAULTSOL , rconvoc . get ( RCV_DATACONV ) ) ;
2000-03-03 11:47:59 +00:00
else
soggetti . put ( SOG_DATAULTSOL , NULLDATE ) ;
2000-10-10 07:57:16 +00:00
}
const TDate dataconvsog = soggetti . get_date ( SOG_DATACONV ) ;
if ( dataconvsog < dataprossi )
{
soggetti . put ( SOG_NUMCONV , 0 ) ;
soggetti . put ( SOG_DATACONV , NULLDATE ) ;
2000-03-03 11:47:59 +00:00
soggetti . put ( SOG_DATAULTSOL , NULLDATE ) ;
2000-10-10 07:57:16 +00:00
}
2000-03-03 11:47:59 +00:00
}
2000-10-10 07:57:16 +00:00
} //Fino a qui
soggetti . rewrite ( ) ;
}
}
//err = ri ? _sconvocati->rewrite() : _sconvocati->write();
message_box ( " Convocazione registrata " ) ;
1997-03-20 10:33:28 +00:00
}
2000-10-10 07:57:16 +00:00
else
error_box ( " Errore %d durante la scrittura. Convocazione non registrata correttamente " , err ) ;
}
2000-05-03 10:03:27 +00:00
else
error_box ( " Errore %d durante la scrittura. Convocazione non registrata correttamente " , err ) ;
1997-03-20 10:33:28 +00:00
return err ;
}
1997-08-01 14:49:53 +00:00
bool TGestioneConvocazioni : : convocati_notify ( TSheet_field & s , int r , KEY k )
1997-03-20 10:33:28 +00:00
{
2000-03-03 11:47:59 +00:00
static TToken_string oldrow ;
1997-06-17 15:50:08 +00:00
bool result = TRUE ;
switch ( k )
2000-03-03 11:47:59 +00:00
{
/* Tolto da Marco in data 26/08/99 in quanto si vuole impedire l'eliminazione di una singola riga
dello sheet dei convocati
case K_CTRL + K_DEL : // avvenuta cancellazione riga
1997-06-17 15:50:08 +00:00
{
int numconv = s . mask ( ) . get_int ( F_NUMCONV ) ;
s . mask ( ) . set ( F_NUMCONV , numconv - 1 ) ;
}
2000-03-03 11:47:59 +00:00
break ;
Aggiunto da Marco in data 26 / 08 / 99 per impedire l ' eliminazione di una singola riga dallo sheet
dei convocati
*/
case K_DEL : //richiesta cancellazione riga
{
message_box ( " Impossibile eliminare la convocazione di un singolo soggetto!/n Eventualmente annullarla. " ) ;
result = FALSE ;
}
break ;
// Aggiunto da Marco in data 26/08/99 per gestire la modifica di una singola convocazione
case K_SPACE :
{
oldrow = s . row ( r ) ;
TDate olddata = oldrow . get ( s . cid2index ( F_S_DATACONV ) ) ; // Le righe seguenti impostano un blocco per impedire di modificare una convocazione che non sia l'ultima per il soggetto
const long codice = oldrow . get_long ( 0 ) ;
TLocalisamfile soggetti ( LF_SOGGETTI ) ;
soggetti . put ( SOG_CODICE , codice ) ;
if ( soggetti . read ( ) = = NOERR )
if ( olddata ! = soggetti . get_date ( SOG_DATACONV ) )
{
message_box ( " Impossibile modificare una convocazione che non sia l'ultima per il soggetto in questione. " ) ;
result = FALSE ;
s . row ( r ) = oldrow ;
s . force_update ( ) ;
}
}
break ;
case K_ENTER :
{
TToken_string & newrow = s . row ( r ) ;
TDate olddata = oldrow . get ( s . cid2index ( F_S_DATACONV ) ) ;
TDate newdata = newrow . get ( s . cid2index ( F_S_DATACONV ) ) ;
if ( newdata ! = olddata )
{
app ( ) . _modified . set ( r ) ;
}
}
break ;
1998-02-04 13:46:27 +00:00
case K_CTRL + K_TAB :
// uscita riga
{
TToken_string & row = s . row ( r ) ;
const long codsog = row . get_long ( 0 ) ;
if ( codsog ! = 0 )
for ( int i = s . items ( ) - 1 ; i > = 0 ; i - - )
{
if ( i ! = r )
{
TToken_string & row = s . row ( i ) ;
if ( codsog = = row . get_long ( 0 ) )
return s . sheet_mask ( ) . field ( F_S_CODICE ) . error_box ( " Soggetto gia' inserito " ) ;
}
}
else
{
const char * cognome = row . get ( 1 ) ;
if ( ( cognome ! = NULL ) & & ( cognome ! = " \0 " ) )
s . sheet_mask ( ) . field ( F_S_NOME ) . set_focusdirty ( ) ;
//s.set_focus_cell(r,2);
}
}
break ;
1997-06-17 15:50:08 +00:00
case K_CTRL + K_INS :
1997-03-20 10:33:28 +00:00
{
1997-06-17 15:50:08 +00:00
int numconv = s . mask ( ) . get_int ( F_NUMCONV ) ;
s . mask ( ) . set ( F_NUMCONV , numconv + 1 ) ;
}
break ;
case K_INS :
2000-03-03 11:47:59 +00:00
result = FALSE ;
1997-06-17 15:50:08 +00:00
break ;
}
return result ;
1997-03-20 10:33:28 +00:00
}
1997-12-05 16:26:15 +00:00
void TGestioneConvocazioni : : print ( )
{
TForm elenco ( " ATCONVOC " ) ;
TCursor & cur = * elenco . cursor ( ) ;
1998-03-27 13:41:26 +00:00
if ( _inserimento )
{
message_box ( " Convocazione non registrata; non <20> 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 ) ;
}
1997-12-05 16:26:15 +00:00
}
1997-03-20 10:33:28 +00:00
int at0400 ( int argc , char * argv [ ] )
{
1997-08-01 14:49:53 +00:00
TGestioneConvocazioni a ;
1997-03-20 10:33:28 +00:00
a . run ( argc , argv , " Gestione convocazione " ) ;
return 0 ;
}