versione del 17/06/97

git-svn-id: svn://10.65.10.50/trunk@4688 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 1997-06-17 15:50:08 +00:00
parent a3ec4ba116
commit 550569575d
128 changed files with 6797 additions and 4170 deletions

View File

@ -4,7 +4,7 @@
#include "at0.h"
#define usage "Error - usage : %s -{0|1|2|3}"
#define usage "Error - usage : %s -{0|1|2|3|4}"
int main(int argc,char** argv)
@ -22,6 +22,8 @@ int main(int argc,char** argv)
rt = at0300(argc,argv) ; break;
case 3:
rt = at0400(argc,argv) ; break;
case 4:
rt = at0500(argc,argv) ; break;
default:
error_box(usage, argv[0]) ; break;
}

View File

@ -5,6 +5,7 @@ int at0100(int argc, char* argv[]);
int at0200(int argc, char* argv[]);
int at0300(int argc, char* argv[]);
int at0400(int argc, char* argv[]);
int at0500(int argc, char* argv[]);
#endif // __AT0_H

View File

@ -23,9 +23,15 @@ MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
/* at0 -3 gestione convocazione */
/* at0 -3 gestione convocazione su punto di raccolta*/
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
/* at0 -4 spostamento convocazioni su punto di raccolta */
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"

View File

@ -7,40 +7,39 @@
#define F_NOME 103
#define F_DATANASC 104
#define F_TESSAVIS 105
#define F_T_STAMPATA 106
#define F_CODSEZ 107
#define F_DENSEZ 108
#define F_CODSOT 109
#define F_DENSOT 110
#define F_CATDON 111
#define F_DESC_CATDON 112
#define F_DATAISC 113
#define F_DATADIM 114
#define F_DOM_INDIR 115
#define F_DOM_CODCOM 116
#define F_DOM_DENCOM 117
#define F_DOM_CAPCOM 118
#define F_DOM_PROVCOM 119
#define F_DOM_CODLOC 120
#define F_DOM_DENLOC 121
#define F_DOM_STRADA 122
#define F_DOM_DISTRI 123
#define F_RES_INDIR 124
#define F_RES_CODCOM 125
#define F_RES_DENCOM 126
#define F_RES_CAPCOM 127
#define F_RES_PROVCOM 128
#define F_RES_CODLOC 129
#define F_RES_DENLOC 130
#define F_COMNASC 131
#define F_DENCOMNASC 132
#define F_PROVCOMNASC 133
#define F_SESSO 134
#define F_CF 135
#define F_DOCID 136
#define F_TELABI 137
#define F_TELLAV 138
#define F_TELALT 139
#define F_CODSEZ 106
#define F_DENSEZ 107
#define F_CODSOT 108
#define F_DENSOT 109
#define F_CATDON 110
#define F_DESC_CATDON 111
#define F_DATAISC 112
#define F_DATADIM 113
#define F_DOM_INDIR 114
#define F_DOM_CODCOM 115
#define F_DOM_DENCOM 116
#define F_DOM_CAPCOM 117
#define F_DOM_PROVCOM 118
#define F_DOM_CODLOC 119
#define F_DOM_DENLOC 120
#define F_DOM_STRADA 121
#define F_DOM_DISTRI 122
#define F_RES_INDIR 123
#define F_RES_CODCOM 124
#define F_RES_DENCOM 125
#define F_RES_CAPCOM 126
#define F_RES_PROVCOM 127
#define F_RES_CODLOC 128
#define F_RES_DENLOC 129
#define F_COMNASC 130
#define F_DENCOMNASC 131
#define F_PROVCOMNASC 132
#define F_SESSO 133
#define F_CF 134
#define F_DOCID 135
#define F_TELABI 136
#define F_TELLAV 137
#define F_TELALT 138
// pagina 2
#define F_CATNOND1 201
@ -56,58 +55,65 @@
#define F_CODMED 211
#define F_COGNMED 212
#define F_NOMMED 213
#define F_GRUPPOAB0 214
#define F_RHANTID 215
#define F_KELL 216
#define F_FENOTIPORH 217
#define F_DU 218
#define F_MODCONV 219
#define F_PUNTORACC 220
#define F_DESC_PUNTORACC 221
#define F_GPD_LUN 222
#define F_GPD_MAR 223
#define F_GPD_MER 224
#define F_GPD_GIO 225
#define F_GPD_VEN 226
#define F_GPD_SAB 227
#define F_GPD_DOM 228
#define F_GPC_LUN 229
#define F_GPC_MAR 230
#define F_GPC_MER 231
#define F_GPC_GIO 232
#define F_GPC_VEN 233
#define F_GPC_SAB 234
#define F_GPC_DOM 235
#define F_NOTIZIARIO 214
#define F_BENEM 215
#define F_GRUPPOAB0 216
#define F_RHANTID 217
#define F_KELL 218
#define F_FENOTIPORH 219
#define F_DU 220
#define F_ANTICORPI 221
#define F_CMV 222
#define F_MODCONV 223
#define F_PUNTORACC 224
#define F_DESC_PUNTORACC 225
#define F_GPD_LUN 226
#define F_GPD_MAR 227
#define F_GPD_MER 228
#define F_GPD_GIO 229
#define F_GPD_VEN 230
#define F_GPD_SAB 231
#define F_GPD_DOM 232
#define F_GPC_LUN 233
#define F_GPC_MAR 234
#define F_GPC_MER 235
#define F_GPC_GIO 236
#define F_GPC_VEN 237
#define F_GPC_SAB 238
#define F_GPC_DOM 239
// pagina 3
#define F_STATO 301
#define F_DESCSTATO 302
#define F_DATASTATO 303
#define F_IDON1 304
#define F_DESC_ID1 305
#define F_IDON2 306
#define F_DESC_ID2 307
#define F_IDON3 308
#define F_DESC_ID3 309
#define F_IDON4 310
#define F_DESC_ID4 311
#define F_DATAULTID 312
#define F_TIPOULTID 313
#define F_INTSI 314
#define F_INTAF 315
#define F_TOTDON 316
#define F_DATAULTDON 317
#define F_TIPOULTDON 318
#define F_DESC_ULTDON 319
#define F_DATAPROSSI 320
#define F_DATAPROSAF 321
#define F_DATAULTSI 322
#define F_DATAULTAF 323
#define F_TOTDONSI 324
#define F_TOTDONAF 325
#define F_DATACONV 326
#define F_NUMCONV 327
#define F_PROS_STATO 304
#define F_DESCPROS_STATO 305
#define F_DATA_PROS 306
#define F_IDON1 307
#define F_DESC_ID1 308
#define F_IDON2 309
#define F_DESC_ID2 310
#define F_IDON3 311
#define F_DESC_ID3 312
#define F_IDON4 313
#define F_DESC_ID4 314
#define F_DATAULTID 315
#define F_TIPOULTID 316
#define F_INTSI 317
#define F_INTAF 318
#define F_TOTDON 319
#define F_DATAULTDON 320
#define F_TIPOULTDON 321
#define F_DESC_ULTDON 322
#define F_DATAPROSSI 323
#define F_DATAPROSAF 324
#define F_DATAULTSI 325
#define F_DATAULTAF 326
#define F_TOTDONSI 327
#define F_TOTDONAF 328
#define F_DATACONV 329
#define F_NUMCONV 330
// pagina 4
#define F_CONDOCC 401
@ -123,33 +129,42 @@
#define F_MOTESCL 411
#define F_UTENULTAGG 412
#define F_DATAULTAGG 413
#define F_NOTE 414
#define F_T_STAMPATA 414
#define F_FAMIGLIA 415
#define F_NOTE 416
// pagina 5
#define F_DONAZIONI 501
#define F_GENERA 502
#define F_DONPRECSI 503
#define F_DATAPRISI 504
#define F_DONPRECAF 505
#define F_DATAPRIAF 506
// pagina 6
#define F_CONTROLLI 601
// pagina 7
#define F_BENEMERENZE 701
#define F_FAMIGLIA 702
#define F_STORICO 703
#define F_STORICO 702
// pagina donazioni
#define F_D_DATADON 101
#define F_D_TIPODON 102
#define F_D_LUOGODON 103
#define F_D_ETICHETTA 104
#define F_D_CC 105
#define F_D_PA 106
#define F_D_HB 107
#define F_D_SGPT 108
#define F_D_PROTIDEMIA 109
#define F_D_PRIMADON 110
#define F_D_DESC_TIPODON 211
#define F_D_DESC_LUOGODON 212
#define F_D_DESC_LUOGODON 104
#define F_D_ETICHETTA 105
#define F_D_PRIMADON 106
#define F_D_CODSEZ 107
#define F_D_CODSOT 108
#define F_D_DENSEZ 109
#define F_D_DENSOT 110
#define F_D_CC 111
#define F_D_PA 112
#define F_D_HB 113
#define F_D_SGPT 114
#define F_D_PROTIDEMIA 115
#define F_D_DESC_TIPODON 151
// pagina controlli sanitari
#define F_C_DATACON 101
@ -162,18 +177,30 @@
#define F_C_INTAF 108
#define F_C_PROSSTIPO 109
#define F_C_PROSSDATA 110
#define F_C_DESC_TIPOCON 211
#define F_C_DESC_IDON1 212
#define F_C_DESC_IDON2 213
#define F_C_DESC_IDON3 214
#define F_C_DESC_IDON4 215
#define F_C_DESC_PROSSTIPO 216
#define F_C_MOTIVO 111
#define F_C_RESPONSAB 112
#define F_C_DESC_TIPOCON 151
#define F_C_DESC_IDON1 152
#define F_C_DESC_IDON2 153
#define F_C_DESC_IDON3 154
#define F_C_DESC_IDON4 155
#define F_C_DESC_PROSSTIPO 156
#define F_C_DESC_MOTIVO 157
// pagina benemerenze
#define F_B_TIPOBEN 101
#define F_B_DATABEN 102
#define F_B_RITIRATA 103
#define F_B_DESC_TIPOBEN 211
#define F_B_DESC_TIPOBEN 102
#define F_B_DATAMAT 103
#define F_B_BONUS 104
#define F_B_DATABEN 105
#define F_B_DATACON 106
#define F_B_RITIRATA 107
#define F_B_CODSEZ 108
#define F_B_CODSOT 109
#define F_B_GRUPPOAZIE 110
#define F_B_DENSEZ 111
#define F_B_DENSOT 112
#define F_B_DESC_GRUPPOAZIE 151
// pagina storico iscrizioni e dimissioni
#define F_S_DATAISC 101
@ -182,7 +209,7 @@
#define F_S_CODSOT 104
#define F_S_CATISC 105
#define F_S_MOTDIM 106
#define F_S_DENSEZ 211
#define F_S_DENSOT 212
#define F_S_DESC_CATISC 213
#define F_S_DENSEZ 151
#define F_S_DENSOT 152
#define F_S_DESC_CATISC 153

File diff suppressed because it is too large Load Diff

View File

@ -30,14 +30,14 @@ BEGIN
GROUP 1
END
NUMBER F_ES_CODICE 6
NUMBER F_ES_CODICE 8
BEGIN
PROMPT 31 2 "Codice "
FLAGS "RG"
USE LF_SOGGETTI SELECT LF_FAMIGLIE->CODFAM!=0
JOIN LF_FAMIGLIE TO LF_SOGGETTI KEY 2 INTO CODFAM=CODICE
INPUT CODICE F_ES_CODICE
DISPLAY "Codice@6" CODICE
DISPLAY "Codice@8" CODICE
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
@ -63,7 +63,7 @@ BEGIN
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Codice@6" CODICE
DISPLAY "Codice@8" CODICE
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
@ -90,7 +90,7 @@ SPREADSHEET F_FAMIGLIARI
BEGIN
PROMPT 2 6 ""
ITEM "Grado"
ITEM "Codice"
ITEM "Codice@8"
ITEM "Cognome@25"
ITEM "Nome@25"
ITEM "Nato il@10"
@ -120,7 +120,7 @@ BEGIN
#include "parenti.h"
END
NUMBER F_F_CODICE 6
NUMBER F_F_CODICE 8
BEGIN
PROMPT 2 2 "Codice "
FLAGS "RG"
@ -155,7 +155,7 @@ BEGIN
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Codice@6" CODICE
DISPLAY "Codice@8" CODICE
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON

View File

@ -21,6 +21,7 @@
#include "soggetti.h"
#include "donaz.h"
#include "contsan.h"
#include "rconvoc.h"
#include "atlib.h"
@ -34,6 +35,7 @@ class TDonaz_app : public TApplication
TLocalisamfile* _soggetti;
TLocalisamfile* _donaz;
TLocalisamfile* _contsan;
TLocalisamfile* _rconvoc;
TRecord_array* _sdonazioni;
TRecord_array* _scontrolli;
TAssoc_array* _asoggetti; // array dei soggetti inseriti per controllare doppio ins.
@ -91,6 +93,7 @@ bool TDonaz_app::create()
_rel->add("CTD", "CODTAB==CATDON",1,0,ALIAS_CTD);
_donaz = new TLocalisamfile(LF_DONAZ);
_contsan = new TLocalisamfile(LF_CONTSAN);
_rconvoc = new TLocalisamfile(LF_RCONVOC);
_sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON);
_scontrolli = new TRecord_array(LF_CONTSAN,CON_PROGCON);
_asoggetti = new TAssoc_array();
@ -112,6 +115,7 @@ bool TDonaz_app::destroy()
delete _msk;
delete _donaz;
delete _contsan;
delete _rconvoc;
delete _sdonazioni;
delete _scontrolli;
delete _asoggetti;
@ -181,7 +185,8 @@ int TDonaz_app::write(TSheet_field& s)
TProgind *pi;
pi = new TProgind(items,"Registrazione donazioni e controlli", FALSE, TRUE, 10);
pi->setstatus(1);
TLocalisamfile& sog = get_relation()->lfile();
TLocalisamfile& rconv(LF_RCONVOC);
for (int r=1; r<=s.items(); r++)
{
@ -191,7 +196,7 @@ int TDonaz_app::write(TSheet_field& s)
const long codsog = row.get_long(0);
if (codsog != 0)
{
TLocalisamfile& sog = get_relation()->lfile();
//TLocalisamfile& sog = get_relation()->lfile();
sog.setkey(1);
sog.zero();
sog.put(SOG_CODICE, codsog);
@ -252,6 +257,10 @@ int TDonaz_app::write(TSheet_field& s)
rec->put(DON_DATADON, m.get(F_DATADON));
rec->put(DON_TIPODON, m.get(F_TIPODON));
rec->put(DON_LUOGODON, m.get(F_LUOGODON));
rec->put(DON_ETICHETTA, row.get(4));
rec->put(DON_CODSEZ,sog.get(SOG_CODSEZ));
rec->put(DON_CODSOT,sog.get(SOG_CODSOT));
bool insert = FALSE;
bool exist = FALSE;
@ -295,9 +304,30 @@ int TDonaz_app::write(TSheet_field& s)
if (!exist)
{
_sdonazioni->write(TRUE);
// se ha una convocazione successiva alla donazione,
// va cancellata, anche dall'archivio convocazioni
TDate dataultdon = sog.get_date(SOG_DATAULTDON);
TDate dataconv = sog.get_date(SOG_DATACONV);
if (dataultdon >= dataconv)
{
rconv.setkey(2);
rconv.zero();
rconv.put(RCV_DATACONV, dataconv);
rconv.put(RCV_CODICE, codsog);
int err = rconv.read();
if (err == NOERR)
{
rconv.put(RCV_ANNULLATO,TRUE)
rconv.rewrite();
}
sog.put(SOG_DATACONV, NULLDATE);
sog.put(SOG_DATAULTSOL, NULLDATE);
const int zeroconv = 0;
sog.put(SOG_NUMCONV, zeroconv);
}
// controllo se è idoneo
const TString16 tipo = m.get(F_TIPODON);
int totdon = sog.get_int(SOG_TOTDON);
sog.put(SOG_TOTDON,totdon+1);
@ -412,7 +442,7 @@ int TDonaz_app::write(TSheet_field& s)
sog.put(SOG_CATDON,ctd.get("S6"));
}
// controllo se è idoneo
// aggiorno data e utente ultimo aggiornamento
sog.put(SOG_DATAULTAGG,TODAY);
sog.put(SOG_UTENULTAGG,user());

View File

@ -16,11 +16,12 @@
#define F_S_COGNOME 102
#define F_S_NOME 103
#define F_S_TIPOCON 104
#define F_S_DATANASC 105
#define F_S_CODSEZ 106
#define F_S_CODSOT 107
#define F_S_CATDON 108
#define F_S_TESSAVIS 109
#define F_S_ETICHETTA 105
#define F_S_DATANASC 106
#define F_S_CODSEZ 107
#define F_S_CODSOT 108
#define F_S_CATDON 109
#define F_S_TESSAVIS 110
#define F_S_DENSEZ 151
#define F_S_DENSOT 152

View File

@ -76,7 +76,7 @@ BEGIN
USE LDN
INPUT CODTAB F_LUOGODON
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
DISPLAY "Descrizione@50" S0
OUTPUT F_LUOGODON CODTAB
OUTPUT F_DESC_LUOGODON S0
CHECKTYPE NORMAL
@ -84,13 +84,13 @@ BEGIN
HELP "Luogo donazione"
END
STRING F_DESC_TIPODON 25
STRING F_DESC_TIPODON 30
BEGIN
PROMPT 30 2 ""
FLAGS "D"
END
STRING F_DESC_LUOGODON 25
STRING F_DESC_LUOGODON 50
BEGIN
PROMPT 30 3 ""
FLAGS "D"
@ -104,10 +104,11 @@ END
SPREADSHEET F_SOGGETTI
BEGIN
PROMPT 2 6 "Soggetti"
ITEM "Codice@6"
ITEM "Codice@8"
ITEM "Cognome@25"
ITEM "Nome@25"
ITEM "Con."
ITEM "Et. sacca"
ITEM "Nato il@10"
ITEM "Sez."
ITEM "Sot."
@ -127,13 +128,13 @@ BEGIN
FLAGS "R"
END
NUMBER F_S_CODICE 6
NUMBER F_S_CODICE 8
BEGIN
PROMPT 2 1 "Codice "
FLAGS "RG"
USE LF_SOGGETTI KEY 1
INPUT CODICE F_S_CODICE
DISPLAY "Codice@6" CODICE
DISPLAY "Codice@8" CODICE
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
@ -162,7 +163,7 @@ BEGIN
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Codice@6" CODICE
DISPLAY "Codice@8" CODICE
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
@ -205,6 +206,12 @@ BEGIN
HELP "Tipo/Esito controllo sanitario"
END
NUMBER F_S_ETICHETTA 9
BEGIN
PROMPT 2 17 "Etichetta sacca "
END
DATE F_S_DATANASC
BEGIN
PROMPT 2 3 "Nato il "

View File

@ -104,7 +104,7 @@ END
SPREADSHEET F_SOGGETTI
BEGIN
PROMPT 2 6 "Soggetti"
ITEM "Codice@6"
ITEM "Codice@8"
ITEM "Cognome@25"
ITEM "Nome@25"
ITEM "Contr."
@ -129,13 +129,13 @@ BEGIN
FLAGS "R"
END
NUMBER F_S_CODICE 6
NUMBER F_S_CODICE 8
BEGIN
PROMPT 2 1 "Codice "
FLAGS "RG"
USE LF_SOGGETTI KEY 1
INPUT CODICE F_S_CODICE
DISPLAY "Codice@6" CODICE
DISPLAY "Codice@8" CODICE
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
@ -164,7 +164,7 @@ BEGIN
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Codice@6" CODICE
DISPLAY "Codice@8" CODICE
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON

View File

@ -7,21 +7,27 @@
#include <utility.h>
#include "at0.h"
#include "lf.h" // se non lo metto non riesco a usare gli LF
#include "lf.h"
#include "atlib.h"
// nomi campi maschera
#include "at0400a.h"
// nomi dei campi
#include "soggetti.h"
#include "sezioni.h"
#include "convoc.h"
#include "rconvoc.h"
#define ALIAS_CTD -100
#define ALIAS_TCS -200
#define IDON_SI "SI"
#define IDON_AF "AF"
class TConvoc_app: public TRelation_application
{
static bool filter_func_convoc(const TRelation* rel);
TMask* _msk;
TRelation* _rel;
TRelation* _relsog;
@ -36,6 +42,9 @@ class TConvoc_app: public TRelation_application
TString16 _tipo; // tipo donazione
TString16 _codsez; // codice sezione convocata
TString16 _codsot; // codice sottogruppo
TDate _dataini;
bool _ritarda;
int _maxrit;
protected:
virtual bool user_create();
@ -52,6 +61,7 @@ protected:
static bool convocati_notify(TSheet_field& s, int r, KEY k);
static bool esegui_handler(TMask_field& f, KEY k);
static bool data_handler(TMask_field&f, KEY k);
public:
TConvoc_app() {}
@ -60,30 +70,101 @@ public:
HIDDEN inline TConvoc_app& app() { return (TConvoc_app&) main_app(); }
/*
bool is_idon_one(TString16 idon, const char* tipo)
// verifica che l'idoneità "idon" sia del tipo "tipo"
// esempio: se passo PL, AF restituisce TRUE
{
bool is_idon = FALSE;
TTable ido("IDO");
ido.put("CODTAB",idon);
if (ido.read() == NOERR)
{
TString16 tipol(2);
tipol = ido.get("S6");
if (tipol == tipo)
is_idon = TRUE;
}
return is_idon;
bool TConvoc_app::filter_func_convoc(const TRelation* rel)
{
bool filtrato = FALSE;
TRectype& sog = rel->curr();
const TString16 cat = sog.get(SOG_CATDON);
const char stato = modstato_tcs(sog.get(SOG_STATO));
const TString16 escluso = sog.get(SOG_ESCLUSO);
const bool dimesso = rel->lfile(ALIAS_CTD).get_bool("B0");
filtrato = (cat.not_empty() && (stato == 'I' || stato == 'F') && !dimesso && escluso.empty());
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() && app()._codsez == codsez)
filtrato = (punto.empty());
if ((app()._codsot.not_empty()) && (app()._codsot != codsot))
filtrato = FALSE;
}
// 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;
const TDate data = app()._data;
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;
}
bool is_idon(TString16 id1, TString16 id2, TString16 id3, TString16 id4, const char* tipo)
//verifica che almeno una delle "id" sia del tipo "tipo"
bool TConvoc_app::data_handler(TMask_field& f, KEY k)
{
return (is_idon_one(id1,tipo) || is_idon_one(id2,tipo) || is_idon_one(id3,tipo) || is_idon_one(id4,tipo));
if (f.to_check(k))
{
const TDate data = f.get();
const int giorno = data.wday();
TString16 datagio = "";
switch (giorno)
{
case 0:
datagio = "Domenica";
break;
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;
}
f.mask().set(F_DATAGIO,datagio);
}
return TRUE;
}
*/
bool TConvoc_app::esegui_handler(TMask_field& f, KEY k)
{
@ -92,45 +173,158 @@ bool TConvoc_app::esegui_handler(TMask_field& f, KEY k)
TMask& m = f.mask();
TCursor* cur = app()._cur;
app()._numero = m.get_long(F_NUMERO);
app()._data = m.get(F_DATA);
app()._punto = m.get(F_PUNTO);
app()._tipo = m.get(F_TIPO);
app()._codsez = m.get(F_CODSEZ);
app()._codsot = m.get(F_CODSOT);
app()._numero = m.get_long(F_NUMERO);
app()._data = m.get(F_DATA);
app()._punto = m.get(F_PUNTO);
app()._tipo = m.get(F_TIPO);
app()._codsez = m.get(F_CODSEZ);
app()._codsot = m.get(F_CODSOT);
app()._dataini = m.get(F_DATAINI);
app()._ritarda = m.get_bool(F_RITARDA);
app()._maxrit = m.get_int(F_MAXRIT);
if (app()._numero == 0 || !app()._data.ok() || app()._punto.empty() || app()._tipo.empty())
return f.error_box("Mancano i dati fondamentali per la convocazione");
// filtro per sezione
TRectype da(LF_SOGGETTI);
if (app()._codsez.not_empty())
da.put(SOG_CODSEZ, app()._codsez);
if (app()._codsot.not_empty())
da.put(SOG_CODSOT, app()._codsot);
cur->setregion(da, da);
//TRectype da(LF_SOGGETTI);
//if (app()._codsez.not_empty())
// da.put(SOG_CODSEZ, app()._codsez);
//if (app()._codsot.not_empty())
// da.put(SOG_CODSOT, app()._codsot);
//cur->setregion(da, da);
//TString256 filtro;
// 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);
// filtro per punto di raccolta
cur->setfilter(format("PUNTORACC == \"%s\"",(const char*)app()._punto));
// altri filtri piu' complicati
//cur->set_filterfunction(filter_func_convoc);
//filtro << " && ";
//if (app()._codsez.empty())
// filtro << format("(PUNTORACC == \"%s\")",(const char*)app()._punto);
//else
// filtro << "(PUNTORACC == \"\")";
// filtro per data donazione non vuota
// e <= data inizio convocazione
// per ora subito SI
// lo facciamo con la set_filterfunction
//cur->setfilter((const char*) filtro, TRUE);
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);
TSheet_field& s = (TSheet_field&)m.field(F_CONVOCATI);
s.destroy();
TRectype& rec = cur->curr();
long last = cur->items();
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];
int quanti = ((int)(cur->items())/(giorni+1)); // quanti donatori per giorno
if (quanti < 1)
quanti = 1;
for (int i=0; i<giorni+1; i++)
numperdata[i] = 0;
long last = cur->items();
int r=0;
TProgind prg (last, "Elaborazione in corso... Prego attendere", FALSE, TRUE, 30);
for ( *cur=0; cur->pos() < last; ++(*cur) )
{
{
prg.addstatus(1);
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)
chiamata = 'C';
else
if ((numconv == 1) && (data-dataultconv>=giocarsol))
chiamata = 'S';
else
if ((numconv >= 2 && numconv <= numsol-1) && (data-dataultconv >= giosolsol))
chiamata = 'S';
else
if ((numconv == numsol && numsol > 0) && (data-dataultconv >= gioultsol))
chiamata = 'S';
else
if ((numconv > numsol && numsol > 0) && (app()._ritarda) && (data-dataultsol<=app()._maxrit) && (data-dataultconv>=giorit))
chiamata = 'R';
switch (chiamata)
{
case 'C':
nconv++;
break;
case 'S':
nsoll++;
break;
case 'R':
nrit++;
break;
}
if (giorni > 0)
{
datasog = NULLDATE;
int partenza;
if (dataprossi <= dataini)
partenza = 0;
else
partenza = (int)(dataprossi-dataini);
for (int r=partenza;r<=giorni;r++)
{
if ((numperdata[r]<quanti) && (!datasog.ok()))
{
datasog = dataini+(long)(r);
numperdata[r]++;
}
}
if (!datasog.ok())
{
if (dataprossi < dataini)
datasog = dataini;
else
datasog = dataprossi;
}
}
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));
r++;
}
m.set(F_NUMCONV,nconv);
m.set(F_NUMSOLL,nsoll);
m.set(F_NUMRIT,nrit);
s.force_update();
delete numperdata;
}
return TRUE;
}
@ -140,11 +334,15 @@ bool TConvoc_app::user_create()
_msk = new TMask("at0400a");
_rel = new TRelation(LF_CONVOC);
_relsog = new TRelation(LF_SOGGETTI);
_cur = new TCursor(_relsog, "", 4); //cursore ordinamento per sezione+sottogruppo+cognome+nome
_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");
_cur = new TCursor(_relsog, "", 6); //cursore ordinamento per data prossima donazione
_rconvoc = new TLocalisamfile(LF_RCONVOC);
_soggetti = new TLocalisamfile(LF_SOGGETTI);
_sconvocati = new TRecord_array(LF_RCONVOC,RCV_PROGCONV);
_msk->set_handler(F_ESEGUI,esegui_handler);
_msk->set_handler(F_DATA,data_handler);
TSheet_field& sc = (TSheet_field&)_msk->field(F_CONVOCATI);
sc.set_notify(convocati_notify);
//TMask& scmask = sc.sheet_mask();
@ -158,6 +356,7 @@ bool TConvoc_app::user_destroy()
delete _rel;
delete _relsog;
delete _msk;
delete _cur;
delete _rconvoc;
delete _soggetti;
delete _sconvocati;
@ -208,7 +407,10 @@ int TConvoc_app::read(TMask& m)
soggetti.zero();
row.add(soggetti.get(SOG_COGNOME));
row.add(soggetti.get(SOG_NOME));
row.add(riga.get(RCV_DATACONV));
row.add(riga.get(RCV_CHIAMATA));
row.add(riga.get(RCV_STAMPATO));
row.add(riga.get(RCV_ANNULLATO));
row.add(soggetti.get(SOG_DATANASC));
row.add(soggetti.get(SOG_CATDON));
row.add(soggetti.get(SOG_TESSAVIS));
@ -243,6 +445,7 @@ int TConvoc_app::scrivi(const TMask& m, bool ri)
int err = ri ? TRelation_application::rewrite(m) : TRelation_application::write(m);
if (err == NOERR)
{
TLocalisamfile soggetti(LF_SOGGETTI);
_sconvocati->destroy_rows();
TSheet_field& s = (TSheet_field&)m.field(F_CONVOCATI);
TRectype* key = new TRectype(LF_RCONVOC);
@ -252,8 +455,28 @@ int TConvoc_app::scrivi(const TMask& m, bool ri)
{
TToken_string& row = s.row(r-1);
TRectype& rec = _sconvocati->row(r,TRUE);
rec.put(RCV_CODICE, row.get(0));
rec.put(RCV_STAMPATO, row.get(3));
const long codice = row.get_long(0);
const TDate dataconv = row.get(3);
const char chiamata = row.get_char(4);
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));
if (!ri)
{
// aggiornamento archivio soggetti
soggetti.put(SOG_CODICE,codice);
if (soggetti.read() == NOERR)
{
if (chiamata == 'S')
soggetti.put(SOG_DATAULTSOL,dataconv);
soggetti.put(SOG_DATACONV,dataconv);
int numconv = soggetti.get_int(SOG_NUMCONV);
soggetti.put(SOG_NUMCONV,numconv+1);
soggetti.rewrite();
}
}
}
err = ri ? _sconvocati->rewrite() : _sconvocati->write();
}
@ -262,79 +485,28 @@ int TConvoc_app::scrivi(const TMask& m, bool ri)
bool TConvoc_app::convocati_notify(TSheet_field& s, int r, KEY k)
{
return TRUE;
}
/*
bool TSoggetti_app::controlli_notify(TSheet_field& s, int r, KEY k)
{
static bool delete_l = FALSE; // flag per cancellazione ultima riga
static TToken_string oldrow;
bool modified = FALSE;
TMask& mask = s.mask();
if (k == K_CTRL+K_DEL) // avvenuta cancellazione riga
{
if (delete_l)
modified = TRUE;
delete_l = FALSE;
}
else
bool result = TRUE;
switch (k)
{
switch (k)
case K_CTRL+K_DEL: // avvenuta cancellazione riga
{
int numconv = s.mask().get_int(F_NUMCONV);
s.mask().set(F_NUMCONV,numconv-1);
}
break;
case K_CTRL+K_INS:
{
case K_SPACE: // inizio modifica riga
oldrow = s.row(r);
break;
case K_ENTER: // uscita da riga modificata
{
TToken_string& row = s.row(r);
const TDate actdata(row.get(0));
const TString16 acttipo(row.get());
const TDate olddata(oldrow.get(0));
const TString16 oldtipo(oldrow.get());
if (olddata != actdata)
{
ordina_sheet_data(s);
app().tipocon_set_sheet(s);
s.force_update();
}
if (modstato_tcs(oldtipo) != ' ' || modstato_tcs(acttipo) != ' ')
modified = TRUE;
}
break;
case K_DEL: // richiesta di cancellazione riga
{
oldrow = s.row(r);
const TString16 oldtipo(oldrow.get(1));
if (r == (s.items()-1) && modstato_tcs(oldtipo) != ' ')
delete_l = TRUE;
}
break;
}
}
if (modified)
c_reord(s);
return TRUE;
int numconv = s.mask().get_int(F_NUMCONV);
s.mask().set(F_NUMCONV,numconv+1);
}
break;
case K_INS:
result = FALSE;
break;
}
return result;
}
bool TSoggetti_app::benemerenze_notify(TSheet_field& s, int r, KEY k)
{
if (k == K_ENTER)
{
}
return TRUE;
}
bool TSoggetti_app::storico_notify(TSheet_field& s, int r, KEY k)
{
if (k == K_ENTER)
{
}
return TRUE;
}
*/
int at0400(int argc, char* argv[])
{
TConvoc_app a;

View File

@ -3,16 +3,23 @@
#define F_NUMERO 101
#define F_DATA 102
#define F_PUNTO 103
#define F_D_PUNTO 104
#define F_TIPO 105
#define F_D_TIPO 106
#define F_CODSEZ 107
#define F_DENSEZ 108
#define F_CODSOT 109
#define F_DENSOT 110
#define F_NOTE 111
#define F_CONVOCATI 112
#define F_DATAGIO 103
#define F_PUNTO 104
#define F_D_PUNTO 105
#define F_TIPO 106
#define F_D_TIPO 107
#define F_CODSEZ 108
#define F_DENSEZ 109
#define F_CODSOT 110
#define F_DENSOT 111
#define F_DATAINI 112
#define F_RITARDA 113
#define F_MAXRIT 114
#define F_NOTE 115
#define F_NUMCONV 116
#define F_NUMSOLL 117
#define F_NUMRIT 118
#define F_CONVOCATI 119
#define F_ESEGUI 140
@ -20,9 +27,12 @@
#define F_S_CODICE 101
#define F_S_COGNOME 102
#define F_S_NOME 103
#define F_S_STAMPATO 104
#define F_S_DATANASC 105
#define F_S_CATDON 106
#define F_S_TESSAVIS 107
#define F_S_DATACONV 104
#define F_S_CHIAMATA 105
#define F_S_STAMPATO 106
#define F_S_ANNULLATO 107
#define F_S_DATANASC 108
#define F_S_CATDON 109
#define F_S_TESSAVIS 110
#define F_S_DESC_CATDON 151

View File

@ -9,7 +9,7 @@ ENDPAGE
PAGE "Testata" -1 -1 78 20
GROUPBOX DLG_NULL 77 9
GROUPBOX DLG_NULL 77 12
BEGIN
PROMPT 1 0 "Opzioni per la convocazione"
END
@ -55,6 +55,12 @@ BEGIN
VALIDATE NOT_EMPTY_FUNC
END
STRING F_DATAGIO 10
BEGIN
PROMPT 35 2 ""
FLAGS "D"
END
STRING F_PUNTO 4
BEGIN
PROMPT 2 3 "Punto di raccolta "
@ -63,7 +69,7 @@ BEGIN
USE LDN
INPUT CODTAB F_PUNTO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
DISPLAY "Descrizione@50" S0
OUTPUT F_PUNTO CODTAB
OUTPUT F_D_PUNTO S0
CHECKTYPE REQUIRED
@ -72,7 +78,7 @@ BEGIN
VALIDATE NOT_EMPTY_FUNC
END
STRING F_D_PUNTO 25
STRING F_D_PUNTO 50
BEGIN
PROMPT 27 3 ""
FLAGS "D"
@ -97,7 +103,7 @@ END
STRING F_D_TIPO 25
BEGIN
PROMPT 27 4 ""
PROMPT 25 4 ""
FLAGS "D"
END
@ -124,7 +130,7 @@ END
STRING F_DENSEZ 25
BEGIN
PROMPT 27 5 ""
PROMPT 25 5 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_DENSEZ
@ -150,7 +156,7 @@ END
STRING F_DENSOT 25
BEGIN
PROMPT 27 6 ""
PROMPT 25 6 ""
FLAGS "U"
COPY USE F_DENSEZ
INPUT DENSEZ F_DENSEZ
@ -162,30 +168,70 @@ BEGIN
ADD MASK at0700a
END
STRING F_NOTE 100 60
DATE F_DATAINI
BEGIN
PROMPT 2 7 "Note "
PROMPT 2 7 "Data inizio conv. "
FIELD DATAINI
END
BOOLEAN F_RITARDA
BEGIN
PROMPT 2 8 "Ritardatari"
FIELD RITARDA
END
NUMBER F_MAXRIT 3
BEGIN
PROMPT 20 8 "Massimo ritardo in giorni"
FIELD MAXRIT
END
STRING F_NOTE 100 50
BEGIN
PROMPT 2 9 "Note "
FIELD NOTE
END
NUMBER F_NUMCONV 4
BEGIN
PROMPT 2 10 "Numero convocati "
FIELD NUMCONV
FLAGS "D"
END
NUMBER F_NUMSOLL 4
BEGIN
PROMPT 27 10 "sollecitati "
FIELD NUMSOLL
FLAGS "D"
END
NUMBER F_NUMRIT 4
BEGIN
PROMPT 50 10 "ritardatari "
FIELD NUMRIT
FLAGS "D"
END
BUTTON F_ESEGUI 20 2
BEGIN
PROMPT -11 -1 "Esegui convocazione"
END
ENDPAGE
PAGE "Soggetti" -1 -1 78 20
SPREADSHEET F_CONVOCATI
BEGIN
PROMPT 0 1 ""
PROMPT 1 1 "Convocati"
ITEM "Codice@6"
ITEM "Cognome@25"
ITEM "Nome@25"
ITEM "Data conv."
ITEM "Tipo"
ITEM "St."
ITEM "An."
ITEM "Nato il@10"
ITEM "Cat."
ITEM "Tessera"
@ -203,13 +249,13 @@ BEGIN
FLAGS "R"
END
NUMBER F_S_CODICE 6
NUMBER F_S_CODICE 8
BEGIN
PROMPT 2 1 "Codice "
FLAGS "RG"
USE LF_SOGGETTI KEY 1
INPUT CODICE F_S_CODICE
DISPLAY "Codice@6" CODICE
DISPLAY "Codice@8" CODICE
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
@ -236,7 +282,7 @@ BEGIN
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Codice@6" CODICE
DISPLAY "Codice@8" CODICE
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
@ -257,9 +303,24 @@ BEGIN
ADD RUN at0 -0
END
DATE F_S_DATACONV
BEGIN
PROMPT 2 5 "Convocato il "
END
STRING F_S_CHIAMATA 1
BEGIN
PROMPT 30 5 "Chiamata "
END
BOOLEAN F_S_STAMPATO
BEGIN
PROMPT 46 3 "Convoc. stampata"
PROMPT 2 6 "Convocazione stampata"
END
BOOLEAN F_S_ANNULLATO
BEGIN
PROMPT 2 7 "Convocazione annullata"
END
DATE F_S_DATANASC
@ -270,7 +331,7 @@ END
STRING F_S_CATDON 2
BEGIN
PROMPT 2 7 "Cat. "
PROMPT 2 8 "Cat. "
FLAGS "D"
USE CTD
INPUT CODTAB F_S_CATDON
@ -280,13 +341,13 @@ END
STRING F_S_TESSAVIS 10
BEGIN
PROMPT 52 7 "Tessera AVIS "
PROMPT 52 8 "Tessera AVIS "
FLAGS "D"
END
STRING F_S_DESC_CATDON 25
BEGIN
PROMPT 12 7 ""
PROMPT 12 8 ""
FLAGS "D"
END

179
at/at0500.cpp Executable file
View File

@ -0,0 +1,179 @@
#include <mask.h>
#include <printapp.h>
#include <utility.h>
#include "lf.h"
#include "soggetti.h"
#include "sezioni.h"
#include "convoc.h"
#include "rconvoc.h"
#include "lf.h"
#include "at0.h"
#include "at0500a.h"
class TSpostamento_app : public TPrintapp
{
TRelation* _rel;
TMask* _msk;
int _cur1;
TLocalisamfile* _rconvoc;
TLocalisamfile* _soggetti;
TDate _dataini, _datafin, _spostadal, _spostaal;
TString16 _punto,_tipo, _sezione, _sottog;
TString16 _codsez, _codsot;
int _quanti; // numero di convocazioni per giorni
int _spostati; // contatore dei soggetti spostati
TDate _data; // data a cui spostare
//static bool filter_func_stconvoc(const TRelation* rel);
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter);
public:
TMask& app_mask() { return *_msk; }
TSpostamento_app() {}
};
HIDDEN inline TSpostamento_app& app() { return (TSpostamento_app&) main_app(); }
void TSpostamento_app::set_page(int file, int cnt)
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"#########"));
set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@13g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@39g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@50g@ld", FLD(LF_RCONVOC,RCV_DATACONV));
set_row(2,"@13g@S", FLD(LF_SOGGETTI,SOG_NOME));
set_row(2,"@50g@S", FLD(LF_RCONVOC,RCV_CHIAMATA));
set_row(3, "");
}
bool TSpostamento_app::preprocess_page(int file, int counter)
{
TDate& data = app()._data;
app()._spostati++;
if (app()._spostati > app()._quanti)
{
++data;
if (data > app()._spostaal)
data = app()._spostaal;
app()._spostati = 1;
}
current_cursor()->curr().put(RCV_DATACONV,data);
current_cursor()->file().setkey(1);
const int err = current_cursor()->file().rewrite();
current_cursor()->file().setkey(2);
current_cursor()->curr(LF_SOGGETTI).put(SOG_DATACONV,data);
current_cursor()->file(LF_SOGGETTI).rewrite();
return TRUE;
}
bool TSpostamento_app::set_print(int m)
{
KEY tasto;
tasto = _msk->run();
if (tasto == K_ENTER)
{
_dataini = _msk->get(F_DATAINI);
_datafin = _msk->get(F_DATAFIN);
_punto = _msk->get(F_PUNTO);
_tipo = _msk->get(F_TIPO);
_codsez = _msk->get(F_CODSEZ);
_codsot = _msk->get(F_CODSOT);
_spostadal = _msk->get(F_SPOSTADAL);
_spostaal = _msk->get(F_SPOSTAAL);
TString80 filtro = "";
// filtro per punto di raccolta
if (_punto.not_empty())
{
if (filtro.not_empty())
filtro << " && ";
filtro << format("(115->PUNTO == \"%s\")",(const char*)_punto);
}
// filtro per tipo
if (_tipo.not_empty())
{
if (filtro.not_empty())
filtro << " && ";
filtro << format("(115->TIPO == \"%s\")",(const char*)_tipo);
}
// filtro per sezione/sottogruppo
if (_sezione.not_empty())
{
if (filtro.not_empty())
filtro << " && ";
filtro << format("(90->CODSEZ == \"%s\")",(const char*)_sezione);
if (_sottog.not_empty())
{
if (filtro.not_empty())
filtro << " && ";
filtro << format("(90->CODSOT == \"%s\")",(const char*)_sottog);
}
}
// filtro per data
TRectype da(LF_RCONVOC);
TRectype a (LF_RCONVOC);
if (_dataini.ok())
da.put(RCV_DATACONV, _dataini);
if (_datafin.ok())
a.put(RCV_DATACONV, _datafin);
_cur1 = add_cursor(new TCursor(_rel,"", 2, &da, &a));
// non posso metterlo nel costruttore del tcursor perchè
// non c'è la possibilità di specificare il parametro TRUE che c'è
// nella setfilter
current_cursor()->setfilter((const char*) filtro, TRUE);
current_cursor()->freeze();
const int giorni = (int)(_spostaal-_spostadal)+1; // giorni su cui suddividere la chiamata
_quanti = ((int)(current_cursor()->items())/giorni); // quanti donatori per giorno
if (_quanti < 1)
_quanti = 1;
_spostati = 0;
_data = _spostadal;
reset_files();
add_file(LF_RCONVOC);
reset_print();
return TRUE;
}
else
return FALSE;
}
bool TSpostamento_app::user_create()
{
_rel = new TRelation(LF_RCONVOC);
_rel->add(LF_SOGGETTI, "CODICE==CODICE");
_rel->add(LF_CONVOC, "NUMERO==NUMERO");
/*
_rel->add("LCP", "CODTAB==DOM_CODLOC",1,LF_SOGGETTI,ALIAS_LCP);
_rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,LF_SOGGETTI);
// per stampare la denominazione della sezione nell'intestazione
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT",1,LF_SOGGETTI);
*/
_msk = new TMask("at0500a");
return TRUE;
}
bool TSpostamento_app::user_destroy()
{
delete _msk;
delete _rel;
return TRUE;
}
int at0500(int argc, char* argv[])
{
TSpostamento_app a;
a.run(argc, argv, "Spostamento convocazioni su punto di raccolta");
return 0;
}

16
at/at0500a.h Executable file
View File

@ -0,0 +1,16 @@
// Spostamento convocazioni per BOLOGNA
// definizione campi per maschera
#define F_DATAINI 101
#define F_DATAFIN 102
#define F_PUNTO 103
#define F_D_PUNTO 104
#define F_TIPO 105
#define F_D_TIPO 106
#define F_CODSEZ 107
#define F_DENSEZ 108
#define F_CODSOT 109
#define F_DENSOT 110
#define F_SPOSTADAL 111
#define F_SPOSTAAL 112
#define F_SPOSTATI 113

149
at/at0500a.uml Executable file
View File

@ -0,0 +1,149 @@
#include "at0500a.h"
#include "lf.h"
PAGE "Spostamento convocazioni" -1 -1 78 20
GROUPBOX DLG_NULL 77 8
BEGIN
PROMPT 1 1 "Convocoazioni da spostare"
END
DATE F_DATAINI
BEGIN
PROMPT 2 2 "Data iniziale "
END
DATE F_DATAFIN
BEGIN
PROMPT 2 3 "Data finale "
END
STRING F_PUNTO 4
BEGIN
PROMPT 2 4 "Punto raccolta "
FLAGS "U"
USE LDN
INPUT CODTAB F_PUNTO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_PUNTO CODTAB
OUTPUT F_D_PUNTO S0
CHECTYPE NORMAL
END
STRING F_D_PUNTO 50
BEGIN
PROMPT 25 4 ""
FLAGS "D"
END
STRING F_TIPO 2
BEGIN
PROMPT 2 5 "Tipo donazione "
FLAGS "U"
USE TDN
INPUT CODTAB F_TIPO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_TIPO CODTAB
OUTPUT F_D_TIPO S0
CHECKTYPE NORMAL
END
STRING F_D_TIPO 25
BEGIN
PROMPT 23 5 ""
FLAGS "D"
END
STRING F_CODSEZ 2
BEGIN
PROMPT 2 6 "Sezione "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_CODSEZ
INPUT CODSOT F_CODSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_CODSEZ CODSEZ
OUTPUT F_DENSEZ DENSEZ
OUTPUT F_CODSOT CODSOT
OUTPUT F_DENSOT DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione da convocare"
ADD MASK at0700a
END
STRING F_DENSEZ 25
BEGIN
PROMPT 23 6 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_DENSEZ
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_CODSEZ
CHECKTYPE NORMAL
HELP "Denominazione sezione da convocare"
ADD MASK at0700a
END
STRING F_CODSOT 2
BEGIN
PROMPT 2 7 "Sottogruppo "
COPY ALL F_CODSEZ
CHECKTYPE NORMAL
HELP "Codice sottogruppo da convocare"
ADD MASK at0700a
END
STRING F_DENSOT 25
BEGIN
PROMPT 23 7 ""
FLAGS "U"
COPY USE F_DENSEZ
INPUT DENSEZ F_DENSEZ
INPUT DENSOT F_DENSOT
COPY DISPLAY F_DENSEZ
COPY OUTPUT F_DENSEZ
CHECKTYPE NORMAL
HELP "Sottogruppo da convocare"
ADD MASK at0700a
END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 10 "Periodo su cui distribuire le convocazioni"
END
DATE F_SPOSTADAL
BEGIN
PROMPT 2 11 "Data iniziale "
END
DATE F_SPOSTAAL
BEGIN
PROMPT 2 12 "Data finale "
END
NUMBER F_SPOSTATI 4
BEGIN
PROMPT 50 11 "Numero spostati "
FLAGS "D"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 16 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 16 ""
END
ENDPAGE
ENDMASK

View File

@ -38,3 +38,8 @@
#define F_DESC_CATESTI 136
#define F_CATCANC 137
#define F_DESC_CATCANC 138
#define F_GIOCARSOL 140
#define F_GIOSOLSOL 141
#define F_GIOULTSOL 142
#define F_GIOPERRIT 143
#define F_NUMMAXSOL 144

View File

@ -121,7 +121,7 @@ BEGIN
USE LCP SELECT S7=#F_COM
INPUT CODTAB F_LOCALITA
DISPLAY "Codice" CODTAB
DISPLAY "Località@30" S0
DISPLAY "Localita'@30" S0
DISPLAY "CAP@5" S6
OUTPUT F_LOCALITA CODTAB
OUTPUT F_DENLOC S0
@ -134,7 +134,7 @@ END
STRING F_DENLOC 30
BEGIN
PROMPT 19 7 ""
COPY USE F_LOCALITA
USE LCP KEY 2 SELECT S7=#F_COM
INPUT S0 F_DENLOC
DISPLAY "Località@30" S0
DISPLAY "CAP@5" S6
@ -159,7 +159,7 @@ END
STRING F_TELEFONO 15
BEGIN
PROMPT 2 8 "Telefono "
PROMPT 2 8 "Telefono "
FIELD TELEFONO
END
@ -183,75 +183,76 @@ BEGIN
ITEM "E|Estinta"
END
GROUPBOX DLG_NULL 35 7
BEGIN
PROMPT 16 11 "Parametri convocazione"
END
NUMBER F_INTMINCONV 4
BEGIN
PROMPT 17 12 "Int. min. convoc. "
FIELD INTMINCONV
HELP "Intervallo minimo di convocazione in giorni (dall'ultima don.)"
END
NUMBER F_INTMIN 4
BEGIN
PROMPT 17 13 "Int. avvisi: min. "
FIELD INTMIN
END
NUMBER F_INTMAX 4
BEGIN
PROMPT 17 14 " max. "
FIELD INTMAX
END
LISTBOX F_TIPOCONV 11
BEGIN
PROMPT 17 15 "Tipo convocazione "
FIELD TIPOCONV
ITEM "D|Data fissa"
ITEM "G|dal Giorno"
END
DATE F_DATAULTCON
BEGIN
PROMPT 17 16 "Data ultima conv. "
FIELD DATAULTCON
FLAGS "D"
END
GROUPBOX DLG_NULL 25 6
BEGIN
PROMPT 53 11 "Intestazione tessere"
PROMPT 16 11 "Intestazione tessere"
END
STRING F_INTESTAZ1 20
BEGIN
PROMPT 55 12 ""
PROMPT 17 12 ""
FIELD INTESTAZ1
END
STRING F_INTESTAZ2 20
BEGIN
PROMPT 55 13 ""
PROMPT 17 13 ""
FIELD INTESTAZ2
END
STRING F_INTESTAZ3 20
BEGIN
PROMPT 55 14 ""
PROMPT 17 14 ""
FIELD INTESTAZ3
END
STRING F_INTESTAZ4 20
BEGIN
PROMPT 55 15 ""
PROMPT 17 15 ""
FIELD INTESTAZ4
END
GROUPBOX DLG_NULL 35 8
BEGIN
PROMPT 43 11 "Dati per stampa cartolina"
END
STRING F_CONVORA 20
BEGIN
PROMPT 44 12 "Orario "
FIELD CONVORA
END
STRING F_CONVSEDE1 25
BEGIN
PROMPT 44 13 "Sede "
FIELD CONVSEDE1
END
STRING F_CONVSEDE2 25
BEGIN
PROMPT 44 14 " "
FIELD CONVSEDE2
END
STRING F_CONVSEDE3 25
BEGIN
PROMPT 44 15 " "
FIELD CONVSEDE3
END
STRING F_CONVSEDE4 25
BEGIN
PROMPT 44 16 " "
FIELD CONVSEDE4
END
STRING F_CONVNOTE 25
BEGIN
PROMPT 44 17 "Note "
FIELD CONVNOTE
END
ENDPAGE
PAGE "Sezioni 2" -1 -1 78 20
@ -290,46 +291,84 @@ BEGIN
GROUP 4
END
GROUPBOX DLG_NULL 35 8
GROUPBOX DLG_NULL 35 7
BEGIN
PROMPT 1 4 "Dati per stampa cartolina"
PROMPT 1 4 "Parametri convocazione"
END
STRING F_CONVORA 20
NUMBER F_INTMINCONV 4
BEGIN
PROMPT 2 5 "Orario "
FIELD CONVORA
PROMPT 2 5 "Int. min. convoc. "
FIELD INTMINCONV
HELP "Intervallo minimo di convocazione in giorni (dall'ultima don.)"
END
STRING F_CONVSEDE1 25
NUMBER F_INTMIN 4
BEGIN
PROMPT 2 6 "Sede "
FIELD CONVSEDE1
PROMPT 2 6 "Int. avvisi: min. "
FIELD INTMIN
END
STRING F_CONVSEDE2 25
NUMBER F_INTMAX 4
BEGIN
PROMPT 2 7 " "
FIELD CONVSEDE2
PROMPT 2 7 " max. "
FIELD INTMAX
END
STRING F_CONVSEDE3 25
LISTBOX F_TIPOCONV 11
BEGIN
PROMPT 2 8 " "
FIELD CONVSEDE3
END
STRING F_CONVSEDE4 25
BEGIN
PROMPT 2 9 " "
FIELD CONVSEDE4
PROMPT 2 8 "Tipo convocazione "
FIELD TIPOCONV
ITEM "D|Data fissa"
ITEM "G|dal Giorno"
END
STRING F_CONVNOTE 25
DATE F_DATAULTCON
BEGIN
PROMPT 2 10 "Note "
FIELD CONVNOTE
END
PROMPT 2 9 "Data ultima conv. "
FIELD DATAULTCON
FLAGS "D"
END
GROUPBOX DLG_NULL 35 7
BEGIN
PROMPT 1 11 "Parametri convocazione BO"
END
NUMBER F_GIOCARSOL 3
BEGIN
PROMPT 2 12 "Gio. tra cart. e soll. "
FIELD GIOCARSOL
HELP "Intervallo in giorni tra cartolina e primo sollecito"
END
NUMBER F_GIOSOLSOL 3
BEGIN
PROMPT 2 13 "Gio. tra soll. e soll. "
FIELD GIOSOLSOL
HELP "Intervallo in giorni tra solleciti"
END
NUMBER F_GIOULTSOL 3
BEGIN
PROMPT 2 14 "Gio. tra penult. e ult. soll. "
FIELD GIOULTSOL
HELP "Intervallo tra penultimo e ultimo sollecito"
END
NUMBER F_GIOPERRIT 3
BEGIN
PROMPT 2 15 "Gio. tra chiamate per ritard. "
FIELD GIOPERRIT
HELP "Giorni tra le chiamate per ritardatari"
END
NUMBER F_NUMMAXSOL 2
BEGIN
PROMPT 2 16 "Num. max di solleciti "
FIELD NUMMAXSOL
HELP "Numero massimo di solleciti inviabili per soggetto"
END
GROUPBOX DLG_NULL 41 8
BEGIN

View File

@ -114,7 +114,7 @@ END
STRING F_DENLOC 30
BEGIN
PROMPT 19 9 ""
COPY USE F_LOCALITA
USE LCP KEY 2 SELECT S7=#F_COM
INPUT S0 F_DENLOC
DISPLAY "Località@30" S0
DISPLAY "CAP@5" S6

View File

@ -4,7 +4,7 @@
#include "at1.h"
#define usage "Error - usage : %s -{0|1|2|3}"
#define usage "Error - usage : %s -{0|1|2|3|4|5}"
int main(int argc,char** argv)
@ -22,6 +22,10 @@ int main(int argc,char** argv)
rt = at1300(argc,argv) ; break;
case 3:
rt = at1400(argc,argv) ; break;
case 4:
rt = at1500(argc,argv) ; break;
case 5:
rt = at1600(argc,argv) ; break;
default:
error_box(usage, argv[0]) ; break;
}

View File

@ -29,3 +29,15 @@ MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
/* at1 -4 modifica intervalli di donazione */
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"
/* at1 -5 sblocco esclusi */
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"

View File

@ -1,10 +1,9 @@
#include <form.h>
#include <mask.h>
#include <printapp.h>
#include <utility.h>
#include "at1.h"
#include "lf.h" // se non lo metto non riesco a usare gli LF
#include "lf.h"
// nomi campi maschera
#include "at1100a.h"
@ -19,7 +18,7 @@
class TChiusura_app : public TPrintapp
{
static bool filter_func_chiusura(const TRelation *);
static bool filter_func_chiusura(const TRelation* rel);
TMask* _msk;
TRelation* _rel;
@ -71,7 +70,8 @@ bool TChiusura_app::preprocess_page(int file, int counter)
_operazione = "Nulla";
TRectype& recsez = current_cursor()->curr(LF_SEZIONI);
TLocalisamfile& sogg = current_cursor()->file(LF_SOGGETTI);
TRectype& recsog = current_cursor()->curr();
TLocalisamfile& filesog = current_cursor()->file();
const TString16 cat_estinti = recsez.get(SEZ_CATESTI);
const TString16 cat_cancellati = recsez.get(SEZ_CATCANC);
@ -80,31 +80,31 @@ bool TChiusura_app::preprocess_page(int file, int counter)
const int intesti = recsez.get_int(SEZ_INTESTI);
const int donemer = recsez.get_int(SEZ_DONEMER);
const TString16 catsog = sogg.get(SOG_CATDON);
const TString16 catsog = recsog.get(SOG_CATDON);
if (catsog==cat_estinti || catsog==cat_cancellati)
{
const int totdon = sogg.get_int(SOG_TOTDON);
const int totdon = recsog.get_int(SOG_TOTDON);
if (totdon >= donemer && donemer != 0)
{
_operazione = "Passaggio a emeriti";
sogg.put(SOG_CATDON,cat_emeriti);
sogg.rewrite();
recsog.put(SOG_CATDON,cat_emeriti);
filesog.rewrite();
}
else
_operazione = "Cancellato";
sogg.remove();
filesog.remove();
}
else
{
TDate dataultdon = sogg.get(SOG_DATAULTDON);
TDate dataultdon = recsog.get(SOG_DATAULTDON);
if (dataultdon.ok())
{
dataultdon.addyear(intesti);
if (dataultdon < _data_chiusura)
{
_operazione = "Passaggio a estinti";
sogg.put(SOG_CATDON,cat_estinti);
sogg.rewrite();
recsog.put(SOG_CATDON,cat_estinti);
filesog.rewrite();
}
else
_operazione = "Non doveva essere filtrato: data ancora valida";
@ -118,14 +118,14 @@ bool TChiusura_app::preprocess_page(int file, int counter)
void TChiusura_app::set_page(int file, int cnt)
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_NOME));
set_row(1,"@63g#a", &_operazione);
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@38g@S", FLD(LF_SOGGETTI,SOG_NOME));
set_row(1,"@65g#a", &_operazione);
}
bool TChiusura_app::filter_func_chiusura(const TRelation * rel)
bool TChiusura_app::filter_func_chiusura(const TRelation* rel)
{
bool filtrato = FALSE;

View File

@ -6,7 +6,7 @@
#include <utility.h>
#include "at1.h"
#include "lf.h" // se non lo metto non riesco a usare gli LF
#include "lf.h"
// nomi campi maschera
#include "at1200a.h"
@ -44,8 +44,6 @@ protected:
virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter);
//virtual TMask& get_mask() { return *_msk; }
public:
void filtra_sezioni();
void crea_intestazione();
@ -76,17 +74,20 @@ void TAttriben_app::filtra_sezioni()
bool TAttriben_app::preprocess_page(int file, int counter)
{
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
TRectype& recsez = current_cursor()->curr(LF_SEZIONI);
TRectype& recsog = current_cursor()->curr();
TLocalisamfile& filesog = current_cursor()->file();
TString80 nome = recsog.get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(SOG_NOME);
nome << recsog.get(SOG_NOME);
_cognome_nome = nome;
TRectype& recsez = current_cursor()->curr(LF_SEZIONI);
TLocalisamfile& sogg = current_cursor()->file(LF_SOGGETTI);
const int totdon = sogg.get_int(SOG_TOTDON);
const int totdon = recsog.get_int(SOG_TOTDON);
// salto pagina se cambio sezione
const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
@ -100,16 +101,11 @@ bool TAttriben_app::preprocess_page(int file, int counter)
void TAttriben_app::set_page(int file, int cnt)
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_NOME));
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g#a", &_cognome_nome);
set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@47g@pn", FLD(LF_SOGGETTI,SOG_TOTDON,"###"));
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g#a", &_cognome_nome);
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@49g@pn", FLD(LF_SOGGETTI,SOG_TOTDON,"###"));
}
bool TAttriben_app::filter_func_attriben(const TRelation* rel)
@ -205,7 +201,7 @@ void TAttriben_app::crea_intestazione()
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47Num.don.");
set_header(5,"@0g------@7g--@10g-------------------------@36g----------@47g--------");
set_header(5,"@0g------@9g--@12g-------------------------@38g----------@49g--------");
}
bool TAttriben_app::user_create()

View File

@ -91,8 +91,8 @@ bool TSbloccoSO_app::preprocess_page(int file, int counter)
current_cursor()->file().rewrite();
// salto pagina se cambio sezione
const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
@ -106,11 +106,11 @@ bool TSbloccoSO_app::preprocess_page(int file, int counter)
void TSbloccoSO_app::set_page(int file, int cnt)
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_NOME));
set_row(1,"@61g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@38g@S", FLD(LF_SOGGETTI,SOG_NOME));
set_row(1,"@63g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
}
bool TSbloccoSO_app::filter_func_sbloccoSO(const TRelation* rel)
@ -213,8 +213,8 @@ void TSbloccoSO_app::crea_intestazione()
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il");
set_header(5,"@0g------@7g--@10g-------------------------@36g----------");
set_header(4,"@0gCod.@9gC.@12gCognome e nome@38gNato il");
set_header(5,"@0g------@9g--@12g-------------------------@38g----------");
}
bool TSbloccoSO_app::user_create()

View File

@ -292,7 +292,7 @@ END
SPREADSHEET F_SOGGETTI
BEGIN
PROMPT 2 4 "Soggetti"
ITEM "Codice@6"
ITEM "Codice@8"
ITEM "Cognome@25"
ITEM "Nome@25"
ITEM "Nato il@10"
@ -315,13 +315,13 @@ BEGIN
FLAGS "R"
END
NUMBER F_S_CODICE 6
NUMBER F_S_CODICE 8
BEGIN
PROMPT 2 1 "Codice "
FLAGS "RG"
USE LF_SOGGETTI KEY 1
INPUT CODICE F_S_CODICE
DISPLAY "Codice@6" CODICE
DISPLAY "Codice@8" CODICE
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
@ -350,7 +350,7 @@ BEGIN
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Codice@6" CODICE
DISPLAY "Codice@8" CODICE
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON

252
at/at1500.cpp Executable file
View File

@ -0,0 +1,252 @@
#include <form.h>
#include <mask.h>
#include <printapp.h>
#include <recarray.h>
#include <tabutil.h>
#include <utility.h>
#include "at1.h"
#include "lf.h"
#include "atlib.h"
#define ALIAS_TCS 200 // alias tabella tipi/esiti controlli sanitari
#define MODIFICA_ID "MI" // controllo per modificare idoneita' precedente
// nomi campi maschera
#include "at1500a.h"
// nomi dei campi
#include "soggetti.h"
#include "contsan.h"
#include "sezioni.h"
class TCambiaInt_app : public TPrintapp
{
TMask* _msk;
TRelation* _rel;
TLocalisamfile* _contsan;
TRecord_array* _scontrolli;
int _cur;
bool _modsi, _modaf;
int _oldsi, _oldaf, _newsi, _newaf;
TDate _data_stampa;
TString16 _codsez, _codsot;
static bool filter_func_cambiaint(const TRelation* rel);
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter);
public:
void filtra_sezioni();
void crea_intestazione();
void header_sezione(const TString16 codsez, const TString16 codsot);
TCambiaInt_app() : _data_stampa(TODAY) {}
};
HIDDEN inline TCambiaInt_app& app() { return (TCambiaInt_app&) main_app(); }
void TCambiaInt_app::filtra_sezioni()
{
const TString16 sezini = _msk->get(F_SEZINI);
const TString16 sotini = _msk->get(F_SOTINI);
const TString16 sezfin = _msk->get(F_SEZFIN);
const TString16 sotfin = _msk->get(F_SOTFIN);
TRectype da(LF_SOGGETTI);
TRectype a(LF_SOGGETTI);
if (sezini.not_empty())
da.put(SOG_CODSEZ, sezini);
if (sotini.not_empty())
da.put(SOG_CODSOT, sotini);
if (sezfin.not_empty())
a.put(SOG_CODSEZ, sezfin);
if (sotfin.not_empty())
a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a);
}
bool TCambiaInt_app::preprocess_page(int file, int counter)
{
TRectype& recsog = current_cursor()->curr();
TRectype* key = new TRectype(LF_CONTSAN);
long codice = recsog.get_long(SOG_CODICE);
key->put(CON_CODICE, codice);
int err = _scontrolli->read(key);
int progcon = _scontrolli->rows()+1;
TRectype& reccon = _contsan->curr();
reccon.zero();
reccon.put(CON_CODICE, codice);
reccon.put(CON_PROGCON, progcon);
reccon.put(CON_DATACON, _data_stampa);
reccon.put(CON_TIPOCON, MODIFICA_ID);
reccon.put(CON_IDON1, recsog.get(SOG_IDON1));
reccon.put(CON_IDON2, recsog.get(SOG_IDON2));
reccon.put(CON_IDON3, recsog.get(SOG_IDON3));
reccon.put(CON_IDON4, recsog.get(SOG_IDON4));
if (_modsi)
reccon.put(CON_INTSI, _newsi);
else
reccon.put(CON_INTSI, recsog.get_int(SOG_INTSI));
if (_modaf)
reccon.put(CON_INTAF, _newaf);
else
reccon.put(CON_INTAF, recsog.get_int(SOG_INTAF));
_scontrolli->add_row(reccon);
_scontrolli->rewrite();
con_reord(recsog, _scontrolli);
current_cursor()->file().rewrite();
// salto pagina se cambio sezione
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
printer().formfeed();
_codsez = codsez;
_codsot = codsot;
header_sezione(codsez, codsot);
}
return TRUE;
}
void TCambiaInt_app::set_page(int file, int cnt)
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@38g@S", FLD(LF_SOGGETTI,SOG_NOME));
set_row(1,"@63g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
}
bool TCambiaInt_app::filter_func_cambiaint(const TRelation* rel)
{
bool filtrato = FALSE;
TRectype& recsog = rel->lfile().curr();
if (app()._modsi)
filtrato = (app()._oldsi == recsog.get_int(SOG_INTSI));
if (app()._modaf && !filtrato)
filtrato = (app()._oldaf == recsog.get_int(SOG_INTAF));
return filtrato;
}
void TCambiaInt_app::header_sezione(const TString16 codsez, const TString16 codsot)
{
const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString intestazione(132);
intestazione = "Sezione: ";
intestazione << codsez;
intestazione << "/";
intestazione << codsot;
intestazione << " ";
intestazione << densez;
if ((densot.ok())&& (densot.not_empty()))
{
intestazione << "/";
intestazione << densot;
}
intestazione.center_just();
set_header(1,"@0g%s", (const char*) intestazione);
return;
}
bool TCambiaInt_app::set_print(int)
{
KEY tasto;
tasto = _msk->run();
if (tasto == K_ENTER)
{
_codsez = "**";
_codsot = "**";
_modsi = _msk->get_bool(F_MOD_SI);
_modaf = _msk->get_bool(F_MOD_AF);
_oldsi = _msk->get_int(F_OLD_SI);
_oldaf = _msk->get_int(F_OLD_AF);
_newsi = _msk->get_int(F_NEW_SI);
_newaf = _msk->get_int(F_NEW_AF);
reset_files();
add_file(LF_SOGGETTI);
filtra_sezioni();
// non si puo' fare il filtro per intervalli perche' la setfilter
// non funziona bene con i campi numerici
current_cursor()->set_filterfunction(filter_func_cambiaint, TRUE);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TCambiaInt_app::crea_intestazione()
{
reset_header();
TString sep(132);
sep = "MODIFICA INTERVALLI DI DONAZIONE ";
if (_modsi)
{
sep << "SI da ";
sep << _oldsi ;
sep << " a ";
sep << _newsi;
}
if (_modaf)
{
if (_modsi)
sep << " - ";
sep << "AF da ";
sep << _oldaf ;
sep << " a ";
sep << _newaf;
}
sep.center_just();
set_header(2, "@0g%s", (const char*) sep);
TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa);
sep = "";
sep << "Pag. @#";
set_header(2, "@120g%s", (const char*) sep);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@9gC.@12gCognome e nome@38gNato il");
set_header(5,"@0g------@9g--@12g-------------------------@38g----------");
}
bool TCambiaInt_app::user_create()
{
_msk = new TMask("at1500a");
_rel = new TRelation(LF_SOGGETTI);
_rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT");
_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS);
_cur = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
_contsan = new TLocalisamfile(LF_CONTSAN);
_scontrolli = new TRecord_array(LF_CONTSAN, CON_PROGCON);
return TRUE;
}
bool TCambiaInt_app::user_destroy()
{
delete _rel;
delete _msk;
delete _contsan;
delete _scontrolli;
return TRUE;
}
int at1500(int argc, char* argv[])
{
TCambiaInt_app a;
a.run(argc, argv, "Modifica intervalli di donazione");
return 0;
}

17
at/at1500a.h Executable file
View File

@ -0,0 +1,17 @@
// modifica intervalli di donazione
// definizione campi per maschera di selezione
#define F_SEZINI 101
#define F_D_SEZINI 102
#define F_SOTINI 103
#define F_D_SOTINI 104
#define F_SEZFIN 105
#define F_D_SEZFIN 106
#define F_SOTFIN 107
#define F_D_SOTFIN 108
#define F_MOD_SI 109
#define F_OLD_SI 110
#define F_NEW_SI 111
#define F_MOD_AF 112
#define F_OLD_AF 113
#define F_NEW_AF 114

View File

@ -1,6 +1,6 @@
#include "at3400a.h"
#include "at1500a.h"
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 78 20
PAGE "Modifica intervalli di donazione" -1 -1 78 11
GROUPBOX DLG_NULL 77 4
BEGIN
@ -117,171 +117,63 @@ BEGIN
HELP "Sottogruppo finale"
END
GROUPBOX DLG_NULL 77 5
BEGIN
PROMPT 1 5 "Categorie"
END
STRING F_CAT1 2
BEGIN
PROMPT 2 6 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_CAT1 CODTAB
OUTPUT F_D_CAT1 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT1 30
BEGIN
PROMPT 8 6 ""
FLAGS "D"
END
STRING F_CAT2 2
BEGIN
PROMPT 2 7 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT2
COPY DISPLAY F_CAT1
OUTPUT F_CAT2 CODTAB
OUTPUT F_D_CAT2 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT2 30
BEGIN
PROMPT 8 7 ""
FLAGS "D"
END
STRING F_CAT3 2
BEGIN
PROMPT 2 8 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT3
COPY DISPLAY F_CAT1
OUTPUT F_CAT3 CODTAB
OUTPUT F_D_CAT3 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT3 30
BEGIN
PROMPT 8 8 ""
FLAGS "D"
END
STRING F_CAT4 2
BEGIN
PROMPT 40 6 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT4
COPY DISPLAY F_CAT1
OUTPUT F_CAT4 CODTAB
OUTPUT F_D_CAT4 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT4 30
BEGIN
PROMPT 46 6 ""
FLAGS "D"
END
STRING F_CAT5 2
BEGIN
PROMPT 40 7 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT5
COPY DISPLAY F_CAT1
OUTPUT F_CAT5 CODTAB
OUTPUT F_D_CAT5 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT5 30
BEGIN
PROMPT 46 7 ""
FLAGS "D"
END
STRING F_CAT6 2
BEGIN
PROMPT 40 8 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT6
COPY DISPLAY F_CAT1
OUTPUT F_CAT6 CODTAB
OUTPUT F_D_CAT6 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT6 30
BEGIN
PROMPT 46 8 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 77 3
BEGIN
PROMPT 1 10 "Selezione soggetti"
END
DATE F_DATAINI
BEGIN
PROMPT 2 11 "Soggetti modificati dal "
HELP "Data iniziale"
END
//DATE F_DATAFIN
//BEGIN
// PROMPT 20 11 "Al "
// HELP "Data di nascita finale"
//END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 13 "Stampa"
PROMPT 1 5 "Opzioni per la modifica"
END
BUTTON F_ELENCO 9 2
BOOLEAN F_MOD_SI
BEGIN
PROMPT -13 14 "Elenco"
MESSAGE EXIT,F_ELENCO
PROMPT 2 6 "Modifica intervallo SI"
HELP "Si vuole modificare l'intervallo per la donazione SI"
MESSAGE TRUE ENABLE, 1@
MESSAGE FALSE DISABLE, 1@
END
BUTTON F_PAGINE 9 2
NUMBER F_OLD_SI 3
BEGIN
PROMPT -23 14 "Pagine"
MESSAGE EXIT,F_PAGINE
PROMPT 30 6 "Vecchio "
HELP "Indicare l'intervallo di donazione SI che si vuole modificare"
GROUP 1
END
NUMBER F_NEW_SI 3
BEGIN
PROMPT 45 6 "Nuovo "
HELP "Indicare il nuovo intervallo di donazione SI"
GROUP 1
END
BOOLEAN F_MOD_AF
BEGIN
PROMPT 2 7 "Modifica intervallo AF"
HELP "Si vuole modificare l'intervallo per la donazione AF"
MESSAGE TRUE ENABLE, 2@
MESSAGE FALSE DISABLE, 2@
END
NUMBER F_OLD_AF 3
BEGIN
PROMPT 30 7 "Vecchio "
HELP "Indicare l'intervallo di donazione AF che si vuole modificare"
GROUP 2
END
NUMBER F_NEW_AF 3
BEGIN
PROMPT 45 7 "Nuovo "
HELP "Indicare il nuovo intervallo di donazione AF"
GROUP 2
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -33 14 ""
PROMPT -22 -1 ""
END
ENDPAGE

190
at/at1600.cpp Executable file
View File

@ -0,0 +1,190 @@
#include <form.h>
#include <mask.h>
#include <printapp.h>
#include <recarray.h>
#include <tabutil.h>
#include <utility.h>
#include "at1.h"
#include "lf.h"
// nomi campi maschera
#include "at1600a.h"
// nomi dei campi
#include "soggetti.h"
#include "sezioni.h"
class TSbloccoES_app : public TPrintapp
{
TMask* _msk;
TRelation* _rel;
int _cur;
TDate _data_sblocco; // data scadenza esclusione fino a _data_sblocco
TDate _data_stampa;
TString16 _codsez, _codsot;
static bool filter_func_sbloccoES(const TRelation* rel);
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter);
public:
void filtra_sezioni();
void crea_intestazione();
void header_sezione(const TString16 codsez, const TString16 codsot);
TSbloccoES_app() : _data_sblocco(TODAY), _data_stampa(TODAY) {}
};
HIDDEN inline TSbloccoES_app& app() { return (TSbloccoES_app&) main_app(); }
void TSbloccoES_app::filtra_sezioni()
{
const TString16 sezini = _msk->get(F_SEZINI);
const TString16 sotini = _msk->get(F_SOTINI);
const TString16 sezfin = _msk->get(F_SEZFIN);
const TString16 sotfin = _msk->get(F_SOTFIN);
TRectype da(LF_SOGGETTI);
TRectype a(LF_SOGGETTI);
if (sezini.not_empty())
da.put(SOG_CODSEZ, sezini);
if (sotini.not_empty())
da.put(SOG_CODSOT, sotini);
if (sezfin.not_empty())
a.put(SOG_CODSEZ, sezfin);
if (sotfin.not_empty())
a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a);
}
bool TSbloccoES_app::preprocess_page(int file, int counter)
{
TRectype& recsog = current_cursor()->curr();
recsog.put(SOG_ESCLUSO, " ");
recsog.put(SOG_TERMESCL, NULLDATE);
current_cursor()->file().rewrite();
// salto pagina se cambio sezione
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
printer().formfeed();
_codsez = codsez;
_codsot = codsot;
header_sezione(codsez, codsot);
}
return TRUE;
}
void TSbloccoES_app::set_page(int file, int cnt)
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@38g@S", FLD(LF_SOGGETTI,SOG_NOME));
set_row(1,"@63g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
}
bool TSbloccoES_app::filter_func_sbloccoES(const TRelation* rel)
{
TRectype& recsog = rel->lfile().curr();
TDate scadenza = recsog.get(SOG_TERMESCL);
return (scadenza.ok() && scadenza <= app()._data_sblocco);
}
void TSbloccoES_app::header_sezione(const TString16 codsez, const TString16 codsot)
{
const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString intestazione(132);
intestazione = "Sezione: ";
intestazione << codsez;
intestazione << "/";
intestazione << codsot;
intestazione << " ";
intestazione << densez;
if ((densot.ok())&& (densot.not_empty()))
{
intestazione << "/";
intestazione << densot;
}
intestazione.center_just();
set_header(1,"@0g%s", (const char*) intestazione);
return;
}
bool TSbloccoES_app::set_print(int)
{
KEY tasto;
tasto = _msk->run();
if (tasto == K_ENTER)
{
_codsez = "**";
_codsot = "**";
_data_sblocco = _msk->get(F_DATA);
reset_files();
add_file(LF_SOGGETTI);
filtra_sezioni();
current_cursor()->setfilter("ESCLUSO == \"TD\"", TRUE);
current_cursor()->set_filterfunction(filter_func_sbloccoES, TRUE);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TSbloccoES_app::crea_intestazione()
{
reset_header();
TString sep(132);
sep = "SBLOCCO ESCLUSO ";
sep << " FINO ALLA DATA ";
TString16 data_stampa = _data_sblocco.string();
sep << data_stampa;
sep.center_just();
set_header(2, "@0g%s", (const char*) sep);
data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa);
sep = "";
sep << "Pag. @#";
set_header(2, "@120g%s", (const char*) sep);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@9gC.@12gCognome e nome@38gNato il");
set_header(5,"@0g--------@9g--@12g-------------------------@38g----------");
}
bool TSbloccoES_app::user_create()
{
_msk = new TMask("at1600a");
_rel = new TRelation(LF_SOGGETTI);
_rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT");
_cur = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
return TRUE;
}
bool TSbloccoES_app::user_destroy()
{
delete _rel;
delete _msk;
return TRUE;
}
int at1600(int argc, char* argv[])
{
TSbloccoES_app a;
a.run(argc, argv, "Sblocco esclusi");
return 0;
}

12
at/at1600a.h Executable file
View File

@ -0,0 +1,12 @@
// sblocco esclusi
// definizione campi per maschera di selezione
#define F_SEZINI 101
#define F_D_SEZINI 102
#define F_SOTINI 103
#define F_D_SOTINI 104
#define F_SEZFIN 105
#define F_D_SEZFIN 106
#define F_SOTFIN 107
#define F_D_SOTFIN 108
#define F_DATA 109

143
at/at1600a.uml Executable file
View File

@ -0,0 +1,143 @@
#include "at1600a.h"
#include "lf.h"
PAGE "Sblocco esclusi" -1 -1 78 11
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 1 "Scelta sezioni/sottogruppi"
END
STRING F_SEZINI 2
BEGIN
PROMPT 2 2 "Da "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_SEZINI
INPUT CODSOT F_SOTINI
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_SEZINI CODSEZ
OUTPUT F_D_SEZINI DENSEZ
OUTPUT F_SOTINI CODSOT
OUTPUT F_D_SOTINI DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione da cui partire"
END
STRING F_D_SEZINI 25
BEGIN
PROMPT 11 2 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZINI
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_SEZINI
CHECKTYPE NORMAL
HELP "Sezione da cui partire"
END
STRING F_SOTINI 2
BEGIN
PROMPT 2 3 " "
COPY ALL F_SEZINI
CHECKTYPE SEARCH
HELP "Codice sottogruppo da cui partire"
END
STRING F_D_SOTINI 25
BEGIN
PROMPT 11 3 ""
FLAGS "U"
COPY USE F_D_SEZINI
INPUT DENSEZ F_D_SEZINI
INPUT DENSOT F_D_SOTINI
COPY DISPLAY F_D_SEZINI
COPY OUTPUT F_D_SEZINI
CHECKTYPE NORMAL
HELP "Sottogruppo da cui partire"
END
STRING F_SEZFIN 2
BEGIN
PROMPT 41 2 "A "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_SEZFIN
INPUT CODSOT F_SOTFIN
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_SEZFIN CODSEZ
OUTPUT F_D_SEZFIN DENSEZ
OUTPUT F_SOTFIN CODSOT
OUTPUT F_D_SOTFIN DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione finale"
END
STRING F_D_SEZFIN 25
BEGIN
PROMPT 49 2 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZFIN
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_SEZFIN
CHECKTYPE NORMAL
HELP "Sezione finale"
END
STRING F_SOTFIN 2
BEGIN
PROMPT 41 3 " "
COPY ALL F_SEZFIN
CHECKTYPE SEARCH
HELP "Codice sottogruppo finale"
END
STRING F_D_SOTFIN 25
BEGIN
PROMPT 49 3 ""
FLAGS "U"
COPY USE F_D_SEZFIN
INPUT DENSEZ F_D_SEZFIN
INPUT DENSOT F_D_SOTFIN
COPY DISPLAY F_D_SEZFIN
COPY OUTPUT F_D_SEZFIN
CHECKTYPE NORMAL
HELP "Sottogruppo finale"
END
GROUPBOX DLG_NULL 77 3
BEGIN
PROMPT 1 5 "Opzioni per lo sblocco"
END
DATE F_DATA
BEGIN
PROMPT 2 6 "Scadenza fino al "
CHECKTYPE REQUIRED
HELP "Data di riferimento per la scadenza (fino al)"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -3,7 +3,7 @@
#include "at2.h"
#define usage "Error - usage : %s -[0,1,2,3,4,5]"
#define usage "Error - usage : %s -[0,1,2,3,4,5,6]"
int main(int argc, char** argv)
{
@ -24,6 +24,8 @@ int main(int argc, char** argv)
rt = at2500(argc, argv); break;
case 5:
rt = at2600(argc, argv); break;
case 6:
rt = at2700(argc, argv); break;
default:
error_box(usage, argv[0]) ; rt = 1; break;
}

View File

@ -7,6 +7,7 @@ int at2300(int argc, char* argv[]); // elenco soggetti esclusi
int at2400(int argc, char* argv[]); // elenco soggetti modificati
int at2500(int argc, char* argv[]); // elenco soggetti idonei
int at2600(int argc, char* argv[]); // elenco soggetti iscritti/dimessi
int at2700(int argc, char* argv[]); // elenco soggetti per categorie
#endif // __AT2_H

View File

@ -39,3 +39,9 @@ MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"
/* at2 -6 elenco per categorie */
MENUBAR MENU_BAR(6)
MENU MENU_BAR(6)
SUBMENU MENU_FILE "~File"

View File

@ -107,18 +107,18 @@ void TSospesi_application::set_page(int file, int cnt)
break;
case elenco:
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g#a", &_cognome_nome);
set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@47g@ld", FLD(LF_SOGGETTI,SOG_DATASTATO));
set_row(1,"@58g@S", FLD(LF_SOGGETTI,SOG_STATO));
set_row(1,"@61g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID));
set_row(1,"@72g@S", FLD(LF_SOGGETTI,SOG_TIPOULTID));
set_row(1,"@75g@pn", FLD(LF_SOGGETTI,SOG_INTSI,"###"));
set_row(1,"@79g@pn", FLD(LF_SOGGETTI,SOG_INTAF,"###"));
set_row(1,"@86g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON));
set_row(1,"@97g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON));
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g#a", &_cognome_nome);
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@49g@ld", FLD(LF_SOGGETTI,SOG_DATASTATO));
set_row(1,"@60g@S", FLD(LF_SOGGETTI,SOG_STATO));
set_row(1,"@63g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID));
set_row(1,"@74g@S", FLD(LF_SOGGETTI,SOG_TIPOULTID));
set_row(1,"@77g@pn", FLD(LF_SOGGETTI,SOG_INTSI,"###"));
set_row(1,"@81g@pn", FLD(LF_SOGGETTI,SOG_INTAF,"###"));
set_row(1,"@88g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON));
set_row(1,"@99g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON));
}
break;
}
@ -140,21 +140,19 @@ bool TSospesi_application::filter_func_sospesi(const TRelation* rel)
bool TSospesi_application::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
if (_tipo_stampa == elenco)
{
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
TRectype& recsog = current_cursor()->curr();
TString80 nome = recsog.get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(SOG_NOME);
nome << recsog.get(SOG_NOME);
_cognome_nome = nome;
// salto pagina se cambio sezione
const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
//if (!_codsez.blank())
if (_codsez != "**")
printer().formfeed();
_codsez = codsez;
@ -195,8 +193,6 @@ bool TSospesi_application::set_print(int m)
{
case F_ELENCO:
_tipo_stampa = elenco;
//_codsez.spaces(2);
//_codsot.spaces(2);
_codsez = "**";
_codsot = "**";
break;
@ -277,9 +273,9 @@ void TSospesi_application::crea_intestazione()
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gSospensione@61gUltima idon.@75gIntervalli@86gUltima donaz.@100gUlt.controllo@114gPross.contr.");
set_header(5,"@76gSI AF");
set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g-------------@61g-------------@75g----------@86g-------------@100g-------------@114g-------------");
set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gSospensione@63gUltima idon.@77gIntervalli@88gUltima donaz.@102gUlt.controllo@116gPross.contr.");
set_header(5,"@78gSI AF");
set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g-------------@63g-------------@77g----------@88g-------------@102g-------------@116g-------------");
}
}

View File

@ -110,15 +110,15 @@ void TPereta_application::set_page(int file, int cnt)
break;
case elenco:
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g#a", &_cognome_nome);
set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@47g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
set_row(1,"@98g@S", FLD(LF_SOGGETTI,SOG_TELABI));
set_row(1,"@114g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
set_row(2,"@47g#a", &_dencom);
set_row(2,"@114g@S", FLD(LF_SOGGETTI,SOG_TELALT));
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g#a", &_cognome_nome);
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI));
set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
set_row(2,"@49g#a", &_dencom);
set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT));
}
break;
}
@ -170,13 +170,12 @@ void TPereta_application::header_sezione(const TString16 codsez, const TString16
bool TPereta_application::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
if (_tipo_stampa == elenco)
{
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
TRectype recsog = current_cursor()->curr();
TString80 nome = recsog.get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(SOG_NOME);
nome << recsog.get(SOG_NOME);
_cognome_nome = nome;
TString256 localita = "";
localita << current_cursor()->curr(-ALIAS_LCP).get("S6");
@ -196,8 +195,8 @@ bool TPereta_application::preprocess_page(int file, int counter)
_dencom = localita;
// salto pagina se cambio sezione
const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
@ -294,9 +293,9 @@ void TPereta_application::crea_intestazione()
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gIndirizzo@98gTelefono abit.@114gTelefono lavoro");
set_header(5,"@47gCAP/Località/Comune/Prov.@114gTelefono altro");
set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g--------------------------------------------------@98g---------------@114g---------------");
set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro");
set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro");
set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------");
}
}

View File

@ -109,13 +109,13 @@ void TEsclusi_application::set_page(int file, int cnt)
break;
case elenco:
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g#a", &_cognome_nome);
set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@47g@S", FLD(LF_SOGGETTI,SOG_ESCLUSO));
set_row(1,"@50g@ld", FLD(LF_SOGGETTI,SOG_TERMESCL));
set_row(1,"@61g@S", FLD(LF_SOGGETTI,SOG_MOTESCL));
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g#a", &_cognome_nome);
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_ESCLUSO));
set_row(1,"@52g@ld", FLD(LF_SOGGETTI,SOG_TERMESCL));
set_row(1,"@63g@S", FLD(LF_SOGGETTI,SOG_MOTESCL));
}
break;
}
@ -143,17 +143,16 @@ bool TEsclusi_application::filter_func_esclusi(const TRelation * rel)
bool TEsclusi_application::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
if (_tipo_stampa == elenco)
{
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
TRectype& recsog = current_cursor()->curr();
TString80 nome = recsog.get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(SOG_NOME);
nome << recsog.get(SOG_NOME);
_cognome_nome = nome;
// salto pagina se cambio sezione
const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
@ -278,14 +277,9 @@ void TEsclusi_application::crea_intestazione()
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gEsclusione@61gMotivo");
set_header(5,"@47gTipo Termine");
set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g-------------@61g------------------------------");
//set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gSospensione@61gUltima idon.@75gIntervalli@86gUltima donaz.@100gUlt.controllo@114gPross.contr.");
//set_header(5,"@76gSI AF");
//set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g-------------@61g-------------@75g----------@86g-------------@100g-------------@114g-------------");
set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gEsclusione@63gMotivo");
set_header(5,"@49gTipo Termine");
set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g-------------@63g------------------------------");
}
}

View File

@ -118,15 +118,15 @@ void TModificati_application::set_page(int file, int cnt)
break;
case elenco:
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g#a", &_cognome_nome);
set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@47g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
set_row(1,"@98g@S", FLD(LF_SOGGETTI,SOG_TELABI));
set_row(1,"@114g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
set_row(2,"@47g#a", &_dencom);
set_row(2,"@114g@S", FLD(LF_SOGGETTI,SOG_TELALT));
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g#a", &_cognome_nome);
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI));
set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
set_row(2,"@49g#a", &_dencom);
set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT));
}
break;
}
@ -154,13 +154,12 @@ bool TModificati_application::filter_func_modificati(const TRelation* rel)
bool TModificati_application::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
if (_tipo_stampa == elenco)
{
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
TRectype& recsog = current_cursor()->curr();
TString80 nome = recsog.get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(SOG_NOME);
nome << recsog.get(SOG_NOME);
_cognome_nome = nome;
TString256 localita = "";
localita << current_cursor()->curr(-ALIAS_LCPDOM).get("S6");
@ -180,11 +179,10 @@ bool TModificati_application::preprocess_page(int file, int counter)
_dencom = localita;
// salto pagina se cambio sezione
const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
//if (!_codsez.blank())
if (_codsez != "**")
printer().formfeed();
_codsez = codsez;
@ -294,9 +292,9 @@ void TModificati_application::crea_intestazione()
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gIndirizzo@98gTelefono abit.@114gTelefono lavoro");
set_header(5,"@47gCAP/Località/Comune/Prov.@114gTelefono altro");
set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g--------------------------------------------------@98g---------------@114g---------------");
set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro");
set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro");
set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------");
}
}

View File

@ -108,17 +108,17 @@ void TIdonei_application::set_page(int file, int cnt)
break;
case elenco:
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g#a", &_cognome_nome);
set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@47g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID)); // potremmo mettere anche datastato
set_row(1,"@58g@S", FLD(LF_SOGGETTI,SOG_IDON1));
set_row(1,"@61g@S", FLD(LF_SOGGETTI,SOG_IDON2));
set_row(1,"@64g@S", FLD(LF_SOGGETTI,SOG_IDON3));
set_row(1,"@67g@S", FLD(LF_SOGGETTI,SOG_IDON4));
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g#a", &_cognome_nome);
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@49g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID)); // potremmo mettere anche datastato
set_row(1,"@60g@S", FLD(LF_SOGGETTI,SOG_IDON1));
set_row(1,"@63g@S", FLD(LF_SOGGETTI,SOG_IDON2));
set_row(1,"@66g@S", FLD(LF_SOGGETTI,SOG_IDON3));
set_row(1,"@69g@S", FLD(LF_SOGGETTI,SOG_IDON4));
set_row(2,"@50g@S", FLD(LF_SOGGETTI,SOG_STATO));
set_row(2,"@52g@S", FLD(LF_SOGGETTI,SOG_STATO));
}
break;
}
@ -168,18 +168,17 @@ bool TIdonei_application::filter_func_idonei(const TRelation * rel)
bool TIdonei_application::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
if (_tipo_stampa == elenco)
{
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
TRectype& recsog = current_cursor()->curr();
TString80 nome = recsog.get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(SOG_NOME);
nome << recsog.get(SOG_NOME);
_cognome_nome = nome;
// salto pagina se cambio sezione
const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
@ -330,9 +329,9 @@ void TIdonei_application::crea_intestazione()
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gData ID@58gTipi idon.");
set_header(5,"@47gTipo/Esito");
set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g----------@58g-- -- -- --");
set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gData ID@60gTipi idon.");
set_header(5,"@49gTipo/Esito");
set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g----------@60g-- -- -- --");
}
}

View File

@ -150,18 +150,16 @@ bool TIscritti_application::filter_func_iscritti(const TRelation * rel)
bool TIscritti_application::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
if (_tipo_stampa == elenco)
{
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
TRectype& recsog = current_cursor()->curr();
TString80 nome = recsog.get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(SOG_NOME);
nome << recsog.get(SOG_NOME);
_cognome_nome = nome;
// salto pagina se cambio sezione
const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
@ -285,8 +283,8 @@ void TIscritti_application::crea_intestazione()
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gData isc.@58gData dim.");
set_header(5,"@0g------@7g--@10g-------------------------@36g----------@47g----------@58g----------");
set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gData isc.@60gData dim.");
set_header(5,"@0g--------@9g--@12g-------------------------@38g----------@49g----------@60g----------");
}
}

352
at/at2700.cpp Executable file
View File

@ -0,0 +1,352 @@
#include <form.h>
#include <mask.h>
#include <printapp.h>
#include "lf.h"
#include "soggetti.h"
#include "sezioni.h"
#include <comuni.h>
#include "at2.h"
#include "at2700a.h"
#define ALIAS_LCP 100
#define ALIAS_TCS 200
enum ts { undefined = 0, elenco = 1, etichette = 2 };
// definizione form per etichette
class TEti_percat_form : public TForm
{
public:
virtual TCursor* cursor() const;
virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ;
TEti_percat_form(): TForm() {};
TEti_percat_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {};
virtual ~TEti_percat_form() {};
};
class TPercat_application : public TPrintapp
{
static bool filter_func_percat(const TRelation* rel);
TRelation* _rel;
TMask* _msk;
TEti_percat_form* _form_eti;
TAssoc_array _catdon;
TAssoc_array _catnondon;
int _cur1;
TParagraph_string _cognome_nome, _dencom;
TDate _data_stampa;
ts _tipo_stampa;
TString16 _codsez, _codsot;
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page (int file, int counter);
public:
void crea_intestazione();
void filtra_sezioni();
void header_sezione(const TString16 codsez, const TString16 codsot);
TMask& app_mask() { return *_msk; }
TPercat_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {}
};
HIDDEN inline TPercat_application& app() { return (TPercat_application&) main_app(); }
TCursor* TEti_percat_form::cursor() const { return app().current_cursor(); }
TRelation* TEti_percat_form::relation() const { return cursor()->relation(); }
void TPercat_application::filtra_sezioni()
{
const TString16 sezini = _msk->get(F_SEZINI);
const TString16 sotini = _msk->get(F_SOTINI);
const TString16 sezfin = _msk->get(F_SEZFIN);
const TString16 sotfin = _msk->get(F_SOTFIN);
TRectype da(LF_SOGGETTI);
TRectype a(LF_SOGGETTI);
if (sezini.not_empty())
da.put(SOG_CODSEZ, sezini);
if (sotini.not_empty())
da.put(SOG_CODSOT, sotini);
if (sezfin.not_empty())
a.put(SOG_CODSEZ, sezfin);
if (sotfin.not_empty())
a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a);
}
void TPercat_application::set_page(int file, int cnt)
{
switch (_tipo_stampa)
{
case etichette:
{
TPrint_section& corpo = _form_eti->get_body();
corpo.reset();
corpo.update();
for (int i = 0; i < corpo.height(); i++)
{
TPrintrow& riga = corpo.row(i);
set_row(i+1,riga);
}
force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage
// altrimenti stampa sempre la stessa etichetta
}
break;
case elenco:
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g#a", &_cognome_nome);
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI));
set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
set_row(2,"@49g#a", &_dencom);
set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT));
}
break;
}
}
bool TPercat_application::filter_func_percat(const TRelation* rel)
{
bool filtrato = FALSE;
TLocalisamfile& sog = rel->lfile();
// filtro per categorie
TAssoc_array& categorie = app()._catdon;
if (categorie.items() != 0)
{
const TString16 cat = sog.get(SOG_CATDON);
filtrato = categorie.is_key((const char*) cat);
}
if (!filtrato)
{
// filtro per categorie non donatori
TAssoc_array& categorie = app()._catnondon;
if (categorie.items() != 0)
{
const TString16 cat1 = sog.get(SOG_CATNOND1);
const TString16 cat2 = sog.get(SOG_CATNOND2);
filtrato = (categorie.is_key((const char*) cat1) || categorie.is_key((const char*) cat2)) ;
}
}
if (app()._catdon.items() == 0 && app()._catnondon.items() == 0)
filtrato = TRUE;
return filtrato;
}
void TPercat_application::header_sezione(const TString16 codsez, const TString16 codsot)
{
const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString intestazione(132);
intestazione = "Sezione: ";
intestazione << codsez;
intestazione << "/";
intestazione << codsot;
intestazione << " ";
intestazione << densez;
if ((densot.ok())&& (densot.not_empty()))
{
intestazione << "/";
intestazione << densot;
}
intestazione.center_just();
set_header(1,"@0g%s", (const char*) intestazione);
return;
}
bool TPercat_application::preprocess_page(int file, int counter)
{
if (_tipo_stampa == elenco)
{
TRectype& recsog = current_cursor()->curr();
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 << " ";
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);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
printer().formfeed();
_codsez = codsez;
_codsot = codsot;
header_sezione(codsez, codsot);
}
}
return TRUE;
}
bool TPercat_application::set_print(int m)
{
_tipo_stampa = undefined;
KEY tasto;
tasto = _msk->run();
switch (tasto)
{
case F_ELENCO:
_tipo_stampa = elenco;
_codsez = "**";
_codsot = "**";
break;
case F_ETICHETTE:
_tipo_stampa = etichette;
break;
}
if (_tipo_stampa != undefined)
{
TString80 chiave = "";
bool percap = _msk->get_bool(F_PERCAP);
if (percap)
chiave = "13->CAPCOM|UPPER(90->COGNOME)|UPPER(90->NOME)";
else
chiave = "UPPER(90->COGNOME)|UPPER(90->NOME)";
_cur1 = add_cursor(new TSorted_cursor(_rel, (const char*) chiave));
TString80 filtro = "";
current_cursor()->setfilter((const char*) filtro, TRUE);
reset_files();
add_file(LF_SOGGETTI);
//filtra_sezioni();
const TString16 catpri = _msk->get(F_CAT1);
const TString16 catsec = _msk->get(F_CAT2);
const TString16 catter = _msk->get(F_CAT3);
const TString16 catqua = _msk->get(F_CAT4);
const TString16 catqui = _msk->get(F_CAT5);
const TString16 catses = _msk->get(F_CAT6);
if (catpri.not_empty() && catpri.ok())
_catdon.add((const char*) catpri);
if (catsec.not_empty() && catsec.ok())
_catdon.add((const char*) catsec);
if (catter.not_empty() && catter.ok())
_catdon.add((const char*) catter);
if (catqua.not_empty() && catqua.ok())
_catdon.add((const char*) catqua);
if (catqui.not_empty() && catqui.ok())
_catdon.add((const char*) catqui);
if (catses.not_empty() && catses.ok())
_catdon.add((const char*) catses);
const TString16 catnpri = _msk->get(F_CATN1);
const TString16 catnsec = _msk->get(F_CATN2);
const TString16 catnter = _msk->get(F_CATN3);
const TString16 catnqua = _msk->get(F_CATN4);
const TString16 catnqui = _msk->get(F_CATN5);
const TString16 catnses = _msk->get(F_CATN6);
if (catnpri.not_empty() && catnpri.ok())
_catnondon.add((const char*) catnpri);
if (catnsec.not_empty() && catnsec.ok())
_catnondon.add((const char*) catnsec);
if (catnter.not_empty() && catnter.ok())
_catnondon.add((const char*) catnter);
if (catnqua.not_empty() && catnqua.ok())
_catnondon.add((const char*) catnqua);
if (catnqui.not_empty() && catnqui.ok())
_catnondon.add((const char*) catnqui);
if (catnses.not_empty() && catnses.ok())
_catnondon.add((const char*) catnses);
current_cursor()->set_filterfunction (filter_func_percat);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TPercat_application::crea_intestazione()
{
reset_header();
if (_tipo_stampa == elenco)
{
TString sep(132);
sep = "ELENCO PER CATEGORIE";
sep.center_just();
set_header(2, "@0g%s", (const char*) sep);
TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa);
sep = "";
sep << "Pag. @#";
set_header(2, "@120g%s", (const char*) sep);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro");
set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro");
set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------");
}
}
bool TPercat_application::user_create()
{
_rel = new TRelation(LF_SOGGETTI);
_rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCP);
_rel->add(LF_COMUNI, "COM==DOM_CODCOM");
// per stampare nell'intestazione la denominazione della sezione
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
//_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
//_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome
//_cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
//_cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome
_form_eti = new TEti_percat_form("AT_ETSOG");
_msk = new TMask("at2700a");
return TRUE;
}
bool TPercat_application::user_destroy()
{
delete _msk;
delete _rel;
delete _form_eti;
return TRUE;
}
int at2700(int argc, char* argv[])
{
TPercat_application a;
a.run(argc, argv, "Elenco per categorie");
return 0;
}

View File

@ -1,4 +1,4 @@
// convocazione urgente
// stampa elenco soggetti per categoria
// definizione campi per maschera di selezione
#define F_SEZINI 101
@ -23,15 +23,20 @@
#define F_CAT6 211
#define F_D_CAT6 212
#define F_CATN1 301
#define F_D_CATN1 302
#define F_CATN2 303
#define F_D_CATN2 304
#define F_CATN3 305
#define F_D_CATN3 306
#define F_CATN4 307
#define F_D_CATN4 308
#define F_CATN5 309
#define F_D_CATN5 310
#define F_CATN6 311
#define F_D_CATN6 312
#define F_GRUPPOAB0 301
#define F_RHANTID 302
#define F_KELL 303
#define F_FENOTIPORH 304
#define F_DU 305
#define F_PERCAP 401
#define F_NUMERO 306
#define F_GIORNI 307
#define F_ELENCO 401
#define F_ETICHETTE 402
#define F_ELENCO 501
#define F_ETICHETTE 502

View File

@ -1,4 +1,4 @@
#include "at3300a.h"
#include "at2700a.h"
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 78 20
@ -119,10 +119,9 @@ END
GROUPBOX DLG_NULL 77 5
BEGIN
PROMPT 1 5 "Categorie"
PROMPT 1 5 "Categorie donatori"
END
STRING F_CAT1 2
BEGIN
PROMPT 2 6 ""
@ -244,71 +243,138 @@ BEGIN
FLAGS "D"
END
GROUPBOX DLG_NULL 77 3
GROUPBOX DLG_NULL 77 5
BEGIN
PROMPT 1 10 "Tipizzazione richiesta"
PROMPT 1 10 "Categorie non donatori"
END
LISTBOX F_GRUPPOAB0 4
STRING F_CATN1 2
BEGIN
PROMPT 2 11 "Gruppo AB0 "
FIELD GRUPPOAB0
PROMPT 2 11 ""
FLAGS "U"
#include "gruppo.h"
END
USE CTN
INPUT CODTAB F_CATN1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_CATN1 CODTAB
OUTPUT F_D_CATN1 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
LISTBOX F_RHANTID 3
STRING F_D_CATN1 30
BEGIN
PROMPT 22 11 "Rh/AntiD "
FIELD RHANTID
PROMPT 8 11 ""
FLAGS "D"
END
STRING F_CATN2 2
BEGIN
PROMPT 2 12 ""
FLAGS "U"
#include "rh.h"
USE CTN
INPUT CODTAB F_CATN2
COPY DISPLAY F_CATN1
OUTPUT F_CATN2 CODTAB
OUTPUT F_D_CATN2 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_FENOTIPORH 6
STRING F_D_CATN2 30
BEGIN
PROMPT 39 11 "Fen.Rh "
FIELD FENOTIPORH
PROMPT 8 12 ""
FLAGS "D"
END
LISTBOX F_KELL 3
STRING F_CATN3 2
BEGIN
PROMPT 55 11 "Kell "
FIELD KELL
PROMPT 2 13 ""
FLAGS "U"
#include "rh.h"
USE CTN
INPUT CODTAB F_CATN3
COPY DISPLAY F_CATN1
OUTPUT F_CATN3 CODTAB
OUTPUT F_D_CATN3 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
LISTBOX F_DU 3
STRING F_D_CATN3 30
BEGIN
PROMPT 68 11 "Du "
FIELD DU
PROMPT 8 13 ""
FLAGS "D"
END
STRING F_CATN4 2
BEGIN
PROMPT 40 11 ""
FLAGS "U"
#include "rh.h"
USE CTN
INPUT CODTAB F_CATN4
COPY DISPLAY F_CATN1
OUTPUT F_CATN4 CODTAB
OUTPUT F_D_CATN4 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
GROUPBOX DLG_NULL 77 3
STRING F_D_CATN4 30
BEGIN
PROMPT 1 13 "Richieste"
PROMPT 46 11 ""
FLAGS "D"
END
NUMBER F_NUMERO 3
STRING F_CATN5 2
BEGIN
PROMPT 2 14 "Soggetti richiesti "
CHECKTYPE REQUIRED
WARNING "Inserire il numero dei soggetti richiesti"
HELP "Numero dei soggetti richiesti per l'urgenza"
PROMPT 40 12 ""
FLAGS "U"
USE CTN
INPUT CODTAB F_CATN5
COPY DISPLAY F_CATN1
OUTPUT F_CATN5 CODTAB
OUTPUT F_D_CATN5 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
NUMBER F_GIORNI 3
STRING F_D_CATN5 30
BEGIN
PROMPT 40 14 "Giorni dall'ultima donazione"
CHECKTYPE REQUIRED
WARNING "Inserire il numero giorni"
HELP "N.ro minimo di giorni che devono essere trascorsi dall'ultima donazione"
PROMPT 46 12 ""
FLAGS "D"
END
STRING F_CATN6 2
BEGIN
PROMPT 40 13 ""
FLAGS "U"
USE CTN
INPUT CODTAB F_CATN6
COPY DISPLAY F_CATN1
OUTPUT F_CATN6 CODTAB
OUTPUT F_D_CATN6 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CATN6 30
BEGIN
PROMPT 46 13 ""
FLAGS "D"
END
BOOLEAN F_PERCAP
BEGIN
PROMPT 2 15 "Ordinamento per CAP"
END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 16 "Stampa"

View File

@ -1,31 +1,23 @@
#include <xvt.h>
#include <strings.h>
#include <checks.h>
#include "at3.h"
#define usage "Error - usage : %s -[0,1,2,3,4,5]"
#define usage "Error - usage : %s -{0}"
int main(int argc,char** argv)
int main(int argc, char** argv)
{
int rt = 0 ;
int rt = -1 ;
const int r = (argc > 1) ? atoi(&argv[1][1]) : -1;
switch (r)
{
case 0:
rt = at3100(argc, argv); break;
case 1:
rt = at3200(argc, argv); break;
case 2:
rt = at3300(argc, argv); break;
case 3:
rt = at3400(argc, argv); break;
case 4:
rt = at3500(argc, argv); break;
case 5:
rt = at3600(argc, argv); break;
default:
error_box(usage, argv[0]) ; rt = 1; break;
rt = at3100(argc,argv) ; break;
default:
error_box(usage, argv[0]) ; break;
}
return rt;
}

View File

@ -1,12 +1,7 @@
#ifndef __AT3_H
#define __AT3_H
int at3100(int argc, char* argv[]); // convocazioni
int at3200(int argc, char* argv[]); // tessere e pagine
int at3300(int argc, char* argv[]); // urgenze
int at3400(int argc, char* argv[]); // elenco soggetti modificati
int at3500(int argc, char* argv[]); // scadenze di donazione
int at3600(int argc, char* argv[]); // convocazioni su punto di raccolta
int at3100(int argc, char* argv[]);
#endif // __AT3_H

View File

@ -1,446 +1,110 @@
#include <applicat.h>
#include <execp.h>
#include <mask.h>
#include <msksheet.h>
#include <form.h>
#include <printapp.h>
#include "lf.h"
#include "soggetti.h"
#include "sezioni.h"
#include <progind.h>
#include <relation.h>
#include <urldefid.h>
#include <..\ef\filetext.h>
#include <..\ef\filetext.cpp>
#include "at3.h"
#include "at3100a.h"
#include "lf.h"
#define ALIAS_TABCTD 100 // alias tabella categorie donatori
#define ALIAS_TABTCS 200 // alias tabella tipi/esiti controlli sanitari
#define ALIAS_TABLCP 300 // alias tabella località postali
// nomi campi maschera
//#include "at3100a.h"
// nomi dei campi
#include "soggetti.h"
#define STATO_IDONEO 'I' // IDONEITA'
#define STATO_FINESO 'F' // FINE SOSPENSIONE
// tpi di stampa
enum ts { undefined = 0, elenco = 1, etichette = 2, cartoline = 3 };
//#include "atlib.h"
// definizione form per etichette e cartoline
class TConv_form : public TForm
class TCarica_app : public TApplication
{
public:
TMask* _msk;
TRelation* _rel;
TFile_text* _trasfile;
TLocalisamfile* _soggetti;
virtual TCursor* cursor() const;
virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ;
TConv_form(): TForm() {};
TConv_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {};
virtual ~TConv_form() {};
};
class TConv_application : public TPrintapp
{
static bool filter_func_conv(const TRelation* rel);
TRelation* _rel;
TMask* _msk;
TConv_form* _form_eti; // per etichette
TConv_form* _form_car; // per cartoline
TAssoc_array _asezioni;
int _cur1, _cur2, _cur3, _cur4;
TDate _data_stampa;
int _sez_corrente;
ts _tipo_stampa;
bool _intesta;
// completare con tutti i dati selezionabili
TString16 _codsez, _codsot;
TDate _dataconv;
long _intmin, _intmax;
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual void print();
virtual bool preprocess_page (int file, int counter);
static bool check_sez_sheet(const char* codice);
static bool convocazioni_notify(TSheet_field& s, int r, KEY k);
static void add_rows_convocazioni(TSheet_field& s, int count = 10, int start = 1);
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG m);
virtual TMask& get_mask() { return *_msk; }
virtual TRelation* get_relation() const { return _rel; }
int write();
public:
void crea_intestazione();
void filtra_sezione();
void header_sezione();
TConv_application() : _data_stampa(TODAY) {}
TCarica_app() {}
};
HIDDEN inline TConv_application& app() { return (TConv_application&) main_app(); }
HIDDEN inline TCarica_app& app() { return (TCarica_app&) main_app(); }
TCursor* TConv_form::cursor() const { return app().current_cursor(); }
TRelation* TConv_form::relation() const { return cursor()->relation(); }
void TConv_application::add_rows_convocazioni(TSheet_field& s, int count, int start)
bool TCarica_app::create()
{
if (start == 1)
s.destroy();
for (int r=start; r<start+count; r++)
TToken_string& row = s.row(r-1);
}
void TConv_application::set_page(int file, int cnt)
{
switch (_tipo_stampa)
{
case elenco:
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"#########"));
set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@13g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@39g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@50g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSSI));
set_row(1,"@61g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSAF));
set_row(1,"@72g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON));
set_row(1,"@83g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID));
set_row(1,"@94g@S", FLD(LF_SOGGETTI,SOG_IDON1));
set_row(1,"@97g@S", FLD(LF_SOGGETTI,SOG_IDON2));
set_row(2,"@13g@S", FLD(LF_SOGGETTI,SOG_NOME));
set_row(2,"@53g@pn", FLD(LF_SOGGETTI,SOG_INTSI,"###"));
set_row(2,"@64g@pn", FLD(LF_SOGGETTI,SOG_INTAF,"###"));
set_row(2,"@76g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON));
set_row(2,"@87g@S", FLD(LF_SOGGETTI,SOG_TIPOULTID));
set_row(2,"@94g@S", FLD(LF_SOGGETTI,SOG_IDON3));
set_row(2,"@97g@S", FLD(LF_SOGGETTI,SOG_IDON4));
}
break;
case etichette:
{
TPrint_section& corpo = _form_eti->get_body();
corpo.reset();
corpo.update();
for (int i = 0; i < corpo.items(); i++)
{
TPrintrow& riga = corpo.row(i);
set_row(i+1,"%s",riga.row());
}
force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage
// altrimenti stampa sempre la stessa etichetta
}
break;
case cartoline:
{
TPrint_section& corpo = _form_car->get_body();
corpo.reset();
corpo.update();
for (int i = 0; i < corpo.items(); i++)
{
TPrintrow& riga = corpo.row(i);
set_row(i+1,"%s",riga.row());
}
force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage
// altrimenti stampa sempre la stessa etichetta
}
break;
}
}
bool TConv_application::filter_func_conv (const TRelation* rel)
{
TLocalisamfile& sog = rel->lfile();
TDate dataprossi = sog.get_date(SOG_DATAPROSSI);
const char stato = rel->curr(-ALIAS_TABTCS).get_char("S6");
const bool dimesso = rel->curr(-ALIAS_TABCTD).get_char("B0");
//TDate dataultconv = sog.curr().get_date(SOG_DATAULTCONV);
if (dataprossi.ok())
{
// intervallo tra data convocazione e data calcolata per pross. si
long intconvsi = app()._dataconv - dataprossi;
// intervallo tra data convocazione e data ultima convocazione
//long intultconvsi = app()._data - dataultconv;
if ((intconvsi >= 0) && (intconvsi < app()._intmax) && ((stato == STATO_IDONEO) || (stato == STATO_FINESO)) && (dimesso != 'X'))
return TRUE;
else
return FALSE;
}
else
// non ha la data di prossima donazione SI
return FALSE;
}
bool TConv_application::preprocess_page(int file, int counter)
{
if ((_tipo_stampa == elenco) && (!_intesta))
{
_intesta = TRUE;
header_sezione();
}
// contatore soggetti stampati
return TRUE;
}
void TConv_application::print()
{
_intesta = FALSE;
filtra_sezione();
TPrint_application::print();
TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI);
_sez_corrente++;
if (_sez_corrente <= s.items())
repeat_print();
return;
}
void TConv_application::filtra_sezione()
{
TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI);
TToken_string& row = s.row(_sez_corrente-1);
_codsez = row.get(0);
_codsot = row.get();
_dataconv = row.get();
// deve diventare un membro
TString16 _giorno = row.get();
_intmin = row.get_int();
_intmax = row.get_int();
// deve diventare un membro
TString16 _tipoconv = row.get();
select_cursor(_cur4);
TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI);
TRectype da(fl.curr());
TRectype a(fl.curr());
da.zero();
a.zero('Z');
if ((_codsez.not_empty()) && (_codsez.ok()))
{
da.put(SOG_CODSEZ, _codsez);
a.put(SOG_CODSEZ, _codsez);
}
if ((_codsot.not_empty()) && (_codsot.ok()))
{
da.put(SOG_CODSOT, _codsot);
a.put(SOG_CODSOT, _codsot);
}
current_cursor()->freeze(FALSE);
current_cursor()->setregion(da, a);
}
bool TConv_application::set_print(int)
{
TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI);
if (s.items()==0)
add_rows_convocazioni(s,8);
_asezioni.destroy();
for (int r=0; r < s.items(); r++)
{
TToken_string& row = s.row(r);
TString16 codice = row.get(0);
TString16 codsot = row.get();
codice << codsot;
if (codice.not_empty())
_asezioni.add(codice);
}
_tipo_stampa = undefined;
KEY tasto;
tasto = _msk->run();
switch (tasto)
{
case F_ELENCO:
_tipo_stampa = elenco;
break;
case F_ETICHETTE:
_tipo_stampa = etichette;
break;
case F_CARTOLINE:
_tipo_stampa = cartoline;
break;
case K_ESC:
_msk->reset();
}
if (_tipo_stampa != undefined)
{
reset_files();
add_file(LF_SOGGETTI);
select_cursor(_cur4);
TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI);
for (int r=s.items()-1; r>=s.first_empty(); r--)
{
TToken_string& row = s.row(r);
_codsez = row.get(0);
_codsot = row.get();
if (_codsez.empty() || (!_codsez.ok()))
s.destroy(r);
}
// filtro su non esclusi, idonei e categorie non dimessi
// questo filtro non funziona perchè non funziona il riconoscimento dell'alias
// nelle espressioni; sarebbe molto bello averlo a disposizione!
//current_cursor()->setfilter("((ESCLUSO == \"\") && (-100->B0!=\"X\") && ((-200->S6 == \"I\") || (-200->S6 == \"F\")))", TRUE);
// filtro su non esclusi
current_cursor()->setfilter("(ESCLUSO == \"\")", TRUE);
// filtro su data e altri filtri che non posso mettere nella setfilter
current_cursor()->set_filterfunction (filter_func_conv, TRUE);
reset_print();
_sez_corrente = 1;
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TConv_application::crea_intestazione()
{
reset_header();
_msk = new TMask("at3100a");
_rel = new TRelation(LF_SOGGETTI);
_trasfile = new TFile_text("sogg.txt","sogg.ini");
dispatch_e_menu(BAR_ITEM(1));
if (_tipo_stampa == elenco)
{
TString256 sep(132);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
set_header(5,"@0gCod.@10gC.@13gCognome@39gNato il@50gData pr.SI@61gData pr.AF@72gData/Tipo@83gData/Tipo@94gIdon.");
set_header(6,"@13gNome@50gInterv. SI@61gInterv. AF@72gult. don.@83gult. idon.@94gper");
set_header(7,"@0g---------@10g--@13g-------------------------@39g----------@50g----------@61g----------@72g----------@83g----------@94g-----");
}
}
return TRUE;
}
void TConv_application::header_sezione()
bool TCarica_app::destroy()
{
TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString256 intestazione(132);
intestazione = "Sezione: ";
intestazione << _codsez;
intestazione << "/";
intestazione << _codsot;
intestazione << " ";
intestazione << densez;
if ((densot.ok())&& (densot.not_empty()))
{
intestazione << "/";
intestazione << densot;
}
intestazione.center_just();
set_header(1,"@0g%s", (const char*) intestazione);
intestazione = "ELENCO CONVOCATI PER IL ";
intestazione << _dataconv.string();
intestazione.center_just();
set_header(2, "@0g%s", (const char*) intestazione);
TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa);
intestazione = "";
intestazione << "Pag. @#";
set_header(2, "@120g%s", (const char*) intestazione);
return;
delete _rel;
delete _msk;
delete _trasfile;
return TRUE;
}
bool TConv_application::user_create()
{
_rel = new TRelation(LF_SOGGETTI);
_rel->add("TCS", "CODTAB==STATO", 1, 0, ALIAS_TABTCS); // per verificare che sia IDONEO
_rel->add("CTD", "CODTAB==CATDON", 1, 0, ALIAS_TABCTD); // per verificare che sia DONATORE NON DIMESSO
_rel->add("LCP", "CODTAB==DOM_CODLOC", 1, 0, ALIAS_TABLCP); // per verificare che sia DONATORE NON DIMESSO
_rel->add(LF_COMUNI, "COM==DOMC_CODCOM");
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome
_cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
_cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome
_msk = new TMask("at3100a");
TSheet_field& sc = (TSheet_field&)_msk->field(F_CONVOCAZIONI);
sc.set_notify(convocazioni_notify);
_form_eti = new TConv_form("AT_ETSOG");
_form_car = new TConv_form("AT_CARTO");
return TRUE;
}
bool TConv_application::user_destroy()
{
delete _msk;
delete _rel;
delete _form_eti;
delete _form_car;
return TRUE;
}
bool TConv_application::check_sez_sheet(const char* codice)
bool TCarica_app::menu(MENU_TAG m)
{
TAssoc_array& sez = app()._asezioni;
if (sez.is_key(codice))
return FALSE;
else
TMask& msk = get_mask();
KEY tasto;
do
{
sez.add(codice);
return TRUE;
tasto = msk.run();
switch (tasto)
{
case K_ENTER: // registra
{
TCarica_app::write();
}
break;
}
}
while (tasto != K_QUIT);
return FALSE;
}
int TCarica_app::write()
{
TProgind *pi;
pi = new TProgind(10,"Caricamento dati da file di testo", FALSE, TRUE, 1);
pi->setstatus(1);
_trasfile->open("sogg.txt",'r');
_rel->lfile().setkey(2);
_rel->write_enable();
TRecord_text rec;
while (_trasfile->ok_r())
{
pi->addstatus(1);
if (_trasfile->read(rec) == NOERR)
_trasfile->autosave(*_rel, rec);
}
}
bool TConv_application::convocazioni_notify(TSheet_field& s, int r, KEY k)
{
bool ok = TRUE;
switch (k)
{
case K_TAB:
// entrata riga
{
TToken_string& row = s.row(r);
TString16 codice = row.get(0);
TString16 codsot = row.get();
codice << codsot;
if (codice.not_empty())
{
TAssoc_array& array_sez = app()._asezioni;
if (array_sez.is_key(codice))
array_sez.remove(codice);
}
if ((r == s.items()-1) && (r == s.first_empty()))
{
add_rows_convocazioni(s,8,r+1);
s.select(r);
}
}
break;
case K_CTRL+K_TAB:
// uscita riga
{
TToken_string& row = s.row(r);
TString16 codice = row.get(0);
TString16 codsot = row.get();
codice << codsot;
if (codice.not_empty())
{
ok = check_sez_sheet(codice);
if (!ok)
return s.error_box("Sezione già convocata");
}
if ((r == s.items()-1) && (r == s.first_empty()))
{
add_rows_convocazioni(s,8,r+1);
s.select(r);
}
}
break;
}
return ok;
delete pi;
return NOERR;
}
int at3100(int argc, char* argv[])
{
TConv_application a;
a.run(argc, argv, "Convocazioni");
return 0;
}
TCarica_app a;
a.run(argc, argv, "Carica dati da file di testo");
return 0;
}

View File

@ -1,18 +0,0 @@
// convocazioni
// definizione campi per maschera di selezione
#define F_CONVOCAZIONI 101
#define F_ELENCO 401
#define F_ETICHETTE 402
#define F_CARTOLINE 404
// campi di ogni riga
#define F_C_CODSEZ 101
#define F_C_CODSOT 102
#define F_C_DATA 103
#define F_C_GIORNO 104
#define F_C_INTMIN 105
#define F_C_INTMAX 106
#define F_C_CONV 107
#define F_C_DENSEZ 151
#define F_C_DENSOT 152

View File

@ -1,173 +1,23 @@
#include "at3100a.h"
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 78 20
TOOLBAR "" 0 20 0 2
GROUPBOX DLG_NULL 77 12
BUTTON DLG_OK 10 2
BEGIN
PROMPT 1 1 "Selezioni per la convocazione"
PROMPT -12 -11 ""
END
SPREADSHEET F_CONVOCAZIONI 75 10
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT 2 2 ""
ITEM "Sez."
ITEM "Sot."
ITEM "Data@10"
ITEM "Giorno@15"
ITEM "Int.min"
ITEM "Int.max"
ITEM "Tipo@15"
END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 13 "Stampa"
END
BUTTON F_ELENCO 9 2
BEGIN
PROMPT -15 14 "Elenco"
MESSAGE EXIT,F_ELENCO
END
BUTTON F_ETICHETTE 9 2
BEGIN
PROMPT -25 14 "Etichette"
MESSAGE EXIT,F_ETICHETTE
END
BUTTON F_CARTOLINE 9 2
BEGIN
PROMPT -35 14 "Cartoline"
MESSAGE EXIT,F_ETICHETTE
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -45 14 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -55 14 ""
PROMPT -22 -11 ""
END
ENDPAGE
ENDMASK
PAGE "Trasferimento dati da file di testo: prova" -1 -1 78 20
PAGE "Convocazioni" -1 -1 78 12
STRING F_C_CODSEZ 2
TEXT DLG_NULL
BEGIN
PROMPT 2 1 "Sezione "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_C_CODSEZ
INPUT CODSOT F_C_CODSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_C_CODSEZ CODSEZ
OUTPUT F_C_DENSEZ DENSEZ
OUTPUT F_C_CODSOT CODSOT
OUTPUT F_C_DENSOT DENSOT
OUTPUT F_C_INTMIN INTMIN
OUTPUT F_C_INTMAX INTMAX
OUTPUT F_C_CONV TIPOCONV
CHECKTYPE SEARCH
HELP "Codice sezione di appartenenza"
END
STRING F_C_DENSEZ 25
BEGIN
PROMPT 16 1 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_C_DENSEZ
INPUT DENSOT F_C_DENSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_C_CODSEZ
CHECKTYPE SEARCH
HELP "Denominazione sezione di appartenenza"
END
STRING F_C_CODSOT 2
BEGIN
PROMPT 2 2 "Sottog. "
COPY ALL F_C_CODSEZ
CHECKTYPE REQUIRED
HELP "Codice sottogruppo di appartenenza"
END
STRING F_C_DENSOT 25
BEGIN
PROMPT 16 2 ""
FLAGS "U"
COPY ALL F_C_DENSEZ
CHECKTYPE SEARCH
HELP "Sottogruppo di appartenenza"
END
DATE F_C_DATA
BEGIN
PROMPT 2 4 "Data convocazione "
HELP "Data convocazione"
CHECKTYPE REQUIRED
END
LISTBOX F_C_GIORNO 13
BEGIN
PROMPT 2 5 "Giorno preferito "
#include "giorni.h"
END
NUMBER F_C_INTMIN 4
BEGIN
PROMPT 2 6 "Intervallo minimo "
END
NUMBER F_C_INTMAX 4
BEGIN
PROMPT 2 7 "Intervallo massimo "
END
LISTBOX F_C_CONV 11
BEGIN
PROMPT 2 8 "Tipo convocazione "
ITEM "D|Data fissa"
ITEM "G|dal Giorno"
END
//DATE F_DATAULTCON
//BEGIN
// PROMPT 40 14 "Data ultima convocazione "
// FIELD DATAULTCON
// FLAGS "D"
//END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_DELREC 9 2
BEGIN
PROMPT -33 -1 ""
MESSAGE EXIT, K_DEL
PROMPT 5 5 "Premere CONFERMA per iniziare"
END
ENDPAGE
ENDMASK

View File

@ -1,218 +0,0 @@
#include <mask.h>
#include <form.h>
#include <printapp.h>
#include "lf.h"
#include "soggetti.h"
#include "sezioni.h"
#include <comuni.h>
#include "at3.h"
#include "at3200a.h"
#define ALIAS_COMRES 100
#define ALIAS_COMNAS 200
enum ts { undefined = 0, tessere = 1, pagine = 2 };
// definizione form per pagine anagrafiche
class TTessere_form : public TForm
{
public:
virtual TCursor* cursor() const;
virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ;
TTessere_form(): TForm() {};
TTessere_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {};
virtual ~TTessere_form() {};
};
class TTessere_application : public TPrintapp
{
TRelation* _rel;
TMask* _msk;
TTessere_form* _form_pag;
int _cur1, _cur2, _cur3, _cur4;
TDate _data_stampa;
ts _tipo_stampa;
TString _riepilogodon;
static bool filter_func_tessere(const TRelation* rel);
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter);
public:
void crea_intestazione();
TMask& app_mask() { return *_msk; }
TTessere_application() : _data_stampa(TODAY), _riepilogodon(50) {}
};
HIDDEN inline TTessere_application& app() { return (TTessere_application&) main_app(); }
TCursor* TTessere_form::cursor() const { return app().current_cursor(); }
TRelation* TTessere_form::relation() const { return cursor()->relation(); }
void TTessere_application::set_page(int file, int cnt)
{
// costruzione pagine
switch (_tipo_stampa)
{
case pagine:
{
TPrint_section& corpo = _form_pag->get_body();
corpo.reset();
corpo.update();
for (int i = 0; i < corpo.items(); i++)
{
TPrintrow& riga = corpo.row(i);
set_row(i+1,"%s",riga.row());
}
force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage
// altrimenti stampa sempre la stessa etichetta
}
break;
case tessere:
{
TString16 data_stampa = _data_stampa.string();
set_row(3, "@30g@S", FLD(LF_SEZIONI,SEZ_DENSEZ));
set_row(4, "@30g@S", FLD(LF_SEZIONI,SEZ_DENSOT));
set_row(9,"@33g%s@1j@pn", "Cod. prov.",FLD(LF_SOGGETTI,SOG_CODICE,"#########"));
set_row(12,"@37g@10ls", FLD(LF_SOGGETTI,SOG_TESSAVIS));
set_row(14,"@45g%10s", (const char*) data_stampa);
set_row(16,"@8g@ls@1j@ls", FLD(LF_SOGGETTI,SOG_COGNOME), FLD(LF_SOGGETTI,SOG_NOME));
set_row(18,"@8g@ls@1j@2s", FLD(-ALIAS_COMNAS,COM_DENCOM),FLD(-ALIAS_COMNAS,COM_PROVCOM));
set_row(18,"@45g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(20,"@10g@ls@1j@2s",FLD(-ALIAS_COMRES,COM_DENCOM),FLD(-ALIAS_COMRES,COM_PROVCOM));
set_row(20,"@45g@15ls", FLD(LF_SOGGETTI,SOG_TELABI));
set_row(22,"@2g@50ls", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
set_row(24,"@10g@16ls", FLD(LF_SOGGETTI,SOG_CF));
set_row(28,"@4g@4ls", FLD(LF_SOGGETTI,SOG_GRUPPOAB0));
set_row(28,"@17g@3ls", FLD(LF_SOGGETTI,SOG_RHANTID));
set_row(28,"@30g@6ls", FLD(LF_SOGGETTI,SOG_FENOTIPORH));
set_row(28,"@48g@3ls", FLD(LF_SOGGETTI,SOG_KELL));
set_row(28,"@58g@3ls", FLD(LF_SOGGETTI,SOG_DU));
set_row(32,"@4g@20ls", FLD(LF_SOGGETTI,SOG_DOCID));
set_row(41,"@4g#t", &_riepilogodon);
set_row(72,"");
}
break;
}
}
bool TTessere_application::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
int totdon = current_cursor()->curr(LF_SOGGETTI).get_int(SOG_TOTDON);
TDate dataultima = current_cursor()->curr(LF_SOGGETTI).get(SOG_DATAULTDON);
_riepilogodon = "";
if (totdon != 0)
{
_riepilogodon = "Donazioni effettuate fino al ";
_riepilogodon << dataultima.string();
_riepilogodon << " n.ro ";
_riepilogodon << totdon;
}
return TRUE;
}
bool TTessere_application::set_print(int m)
{
_tipo_stampa = undefined;
KEY tasto;
tasto = _msk->run();
switch (tasto)
{
case F_TESSERE:
_tipo_stampa = tessere;
break;
case F_PAGINE:
_tipo_stampa = pagine;
break;
}
if (_tipo_stampa != undefined)
{
reset_files();
add_file(LF_SOGGETTI);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TTessere_application::crea_intestazione()
{
TString256 sep(132);
TString16 data_stampa;
reset_header();
if (_tipo_stampa == pagine)
{
sep.fill('-');
set_header(1, (const char *) sep);
sep = "";
sep << "Pag. @#";
sep.right_just(132);
set_header(2,(const char*) sep);
set_header(2,"@0gSTAMPA PAGINE ANAGRAFICHE@64gDATA");
data_stampa = _data_stampa.string();
set_header(2,"@69g%10s", (const char*) data_stampa);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
}
}
bool TTessere_application::user_create()
{
_rel = new TRelation(LF_SOGGETTI);
_rel->add(LF_COMUNI, "COM==COMNASC",1,0,ALIAS_COMNAS);
_rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,0,ALIAS_COMRES);
_rel->add("LCP", "CODTAB==DOM_CODLOC");
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome
_cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
_cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome
_msk = new TMask("at3200a");
_form_pag = new TTessere_form("AT_PAGIN"); // dovrà esserci PAGINE
return TRUE;
}
bool TTessere_application::user_destroy()
{
delete _msk;
delete _rel;
delete _form_pag;
return TRUE;
}
int at3200(int argc, char* argv[])
{
TTessere_application a;
a.run(argc, argv, "Stampa tessere e pagine");
return 0;
}

View File

@ -1,8 +0,0 @@
// stampa tessere associative e pagine anagrafiche
// definizione campi per maschera di selezione
#define F_CODINI 101
#define F_CODFIN 102
#define F_TESSERE 401
#define F_PAGINE 402

View File

@ -1,44 +0,0 @@
#include "at3200a.h"
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 78 20
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 1 "Selezione codici"
END
NUMBER F_CODINI 6
BEGIN
PROMPT 2 2 "Iniziale "
END
NUMBER F_CODFIN 6
BEGIN
PROMPT 40 2 "Finale "
END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 16 "Stampa"
END
BUTTON F_TESSERE 9 2
BEGIN
PROMPT -13 17 "Tessere"
MESSAGE EXIT,F_TESSERE
END
BUTTON F_PAGINE 9 2
BEGIN
PROMPT -23 17 "Pagine"
MESSAGE EXIT,F_PAGINE
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -33 17 ""
END
ENDPAGE
ENDMASK

View File

@ -1,359 +0,0 @@
#include <mask.h>
#include <form.h>
#include <printapp.h>
#include "lf.h"
#include "soggetti.h"
#include "sezioni.h"
#include <comuni.h>
#include "at3.h"
#include "at3300a.h"
#define ALIAS_LCP 100
#define ALIAS_TCS 200
enum ts { undefined = 0, elenco = 1, etichette = 2 };
// definizione form per etichette
class TUrgenze_form : public TForm
{
public:
virtual TCursor* cursor() const;
virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ;
TUrgenze_form(): TForm() {};
TUrgenze_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {};
virtual ~TUrgenze_form() {};
};
class TUrgenze_application : public TPrintapp
{
static bool filter_func_urgenze(const TRelation* rel);
TRelation* _rel;
TMask* _msk;
TUrgenze_form* _form_eti;
TRectype* _sangue;
TAssoc_array _categorie;
long _giorni;
int _cur1, _cur2, _cur3, _cur4;
TParagraph_string _cognome_nome, _dencom;
TDate _data_stampa;
TDate _dataini, _datafin;
ts _tipo_stampa;
TString16 _codsez, _codsot;
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page (int file, int counter);
public:
void crea_intestazione();
void filtra_sezioni();
void header_sezione(TString16 codsez, TString16 codsot);
TMask& app_mask() { return *_msk; }
TRectype& get_sangue() { return *_sangue; }
TUrgenze_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {}
};
HIDDEN inline TUrgenze_application& app() { return (TUrgenze_application&) main_app(); }
TCursor* TUrgenze_form::cursor() const { return app().current_cursor(); }
TRelation* TUrgenze_form::relation() const { return cursor()->relation(); }
void TUrgenze_application::filtra_sezioni()
{
TString16 sezini = _msk->get(F_SEZINI);
TString16 sotini = _msk->get(F_SOTINI);
TString16 sezfin = _msk->get(F_SEZFIN);
TString16 sotfin = _msk->get(F_SOTFIN);
select_cursor(_cur4);
TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI);
TRectype da(fl.curr());
TRectype a(fl.curr());
da.zero();
a.zero();
if ((sezini.not_empty()) && (sezini.ok()))
da.put(SOG_CODSEZ, sezini);
if ((sotini.not_empty()) && (sotini.ok()))
da.put(SOG_CODSOT, sotini);
if ((sezfin.not_empty()) && (sezfin.ok()))
a.put(SOG_CODSEZ, sezfin);
if ((sotfin.not_empty()) && (sotfin.ok()))
a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a);
}
void TUrgenze_application::set_page(int file, int cnt)
{
switch (_tipo_stampa)
{
case etichette:
{
TPrint_section& corpo = _form_eti->get_body();
corpo.reset();
corpo.update();
for (int i = 0; i < corpo.height(); i++)
{
TPrintrow& riga = corpo.row(i);
set_row(i+1,riga);
}
force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage
// altrimenti stampa sempre la stessa etichetta
}
break;
case elenco:
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g#a", &_cognome_nome);
set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@47g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
set_row(1,"@98g@S", FLD(LF_SOGGETTI,SOG_TELABI));
set_row(1,"@114g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
set_row(2,"@47g#a", &_dencom);
set_row(2,"@114g@S", FLD(LF_SOGGETTI,SOG_TELALT));
set_row(2,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON));
}
break;
}
}
bool TUrgenze_application::filter_func_urgenze(const TRelation* rel)
{
bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile();
//filtro per categorie
TAssoc_array& categorie = app()._categorie;
if (categorie.items() != 0)
{
TString16 cat = sog.get(SOG_CATDON);
filtrato = categorie.is_key((const char*) cat);
}
// filtro per tipizzazione
if (filtrato)
{
TRectype from = app().get_sangue();
filtrato = (sog.curr()==from);
}
// filtro su data donazione
if (filtrato)
{
long giorni_sez = rel->lfile(LF_SEZIONI).get_long(SEZ_INTMINCONV);
long giorni = (giorni_sez > app()._giorni) ? giorni_sez : app()._giorni;
TDate data(TODAY);
data = data - (const long) giorni;
TDate dataultdon = sog.get(SOG_DATAULTDON);
filtrato = (dataultdon <= data);
}
return filtrato;
}
bool TUrgenze_application::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
if (_tipo_stampa == elenco)
{
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(SOG_NOME);
_cognome_nome = nome;
TString256 localita = "";
localita << current_cursor()->curr(-ALIAS_LCP).get("S6");
if (localita.not_empty() && localita.ok())
{
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
TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
printer().formfeed();
_codsez = codsez;
_codsot = codsot;
header_sezione(codsez, codsot);
}
}
return TRUE;
}
void TUrgenze_application::header_sezione(TString16 codsez, TString16 codsot)
{
TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString256 intestazione(132);
intestazione = "Sezione: ";
intestazione << codsez;
intestazione << "/";
intestazione << codsot;
intestazione << " ";
intestazione << densez;
if ((densot.ok())&& (densot.not_empty()))
{
intestazione << "/";
intestazione << densot;
}
intestazione.center_just();
set_header(1,"@0g%s", (const char*) intestazione);
return;
}
bool TUrgenze_application::set_print(int)
{
_tipo_stampa = undefined;
KEY tasto;
tasto = _msk->run();
switch (tasto)
{
case F_ELENCO:
_tipo_stampa = elenco;
_codsez = "**";
_codsot = "**";
break;
case F_ETICHETTE:
_tipo_stampa = etichette;
break;
}
if (_tipo_stampa != undefined)
{
reset_files();
add_file(LF_SOGGETTI);
filtra_sezioni();
// filtro per categorie
TString16 catpri = _msk->get(F_CAT1);
TString16 catsec = _msk->get(F_CAT2);
TString16 catter = _msk->get(F_CAT3);
TString16 catqua = _msk->get(F_CAT4);
TString16 catqui = _msk->get(F_CAT5);
TString16 catses = _msk->get(F_CAT6);
if (catpri.not_empty() && catpri.ok())
_categorie.add((const char*) catpri);
if (catsec.not_empty() && catsec.ok())
_categorie.add((const char*) catsec);
if (catter.not_empty() && catter.ok())
_categorie.add((const char*) catter);
if (catqua.not_empty() && catqua.ok())
_categorie.add((const char*) catqua);
if (catqui.not_empty() && catqui.ok())
_categorie.add((const char*) catqui);
if (catses.not_empty() && catses.ok())
_categorie.add((const char*) catses);
// filtro per tipizzazione
_sangue->zero();
TString16 gruppoab0 = _msk->get(F_GRUPPOAB0);
TString16 rhantid = _msk->get(F_RHANTID);
TString16 kell = _msk->get(F_KELL);
TString16 fenotiporh = _msk->get(F_FENOTIPORH);
TString16 du = _msk->get(F_DU);
if ((gruppoab0.ok()) && (gruppoab0.not_empty()))
_sangue->put(SOG_GRUPPOAB0, gruppoab0);
if ((rhantid.ok()) && (rhantid.not_empty()))
_sangue->put(SOG_RHANTID, rhantid);
if ((kell.ok()) && (kell.not_empty()))
_sangue->put(SOG_KELL, kell);
if ((fenotiporh.ok()) && (fenotiporh.not_empty()))
_sangue->put(SOG_FENOTIPORH, fenotiporh);
if ((du.ok()) && (du.not_empty()))
_sangue->put(SOG_DU, du);
_giorni = _msk->get_long(F_GIORNI);
// filtra solo idonei
current_cursor()->setfilter("TCS->S6 == \"I\"", TRUE);
// filtra per categorie, tipizzazione e data donazione
current_cursor()->set_filterfunction (filter_func_urgenze, TRUE);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TUrgenze_application::crea_intestazione()
{
reset_header();
if (_tipo_stampa == elenco)
{
TString256 sep(132);
sep = "CONVOCAZIONI URGENTI";
sep.center_just();
set_header(2, "@0g%s", (const char*) sep);
TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa);
sep = "";
sep << "Pag. @#";
set_header(2, "@120g%s", (const char*) sep);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gIndirizzo@98gTelefono abit.@114gTelefono lavoro");
set_header(5,"@47gCAP/Località/Comune/Prov.@114gTelefono altro");
set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g--------------------------------------------------@98g---------------@114g---------------");
}
}
bool TUrgenze_application::user_create()
{
_rel = new TRelation(LF_SOGGETTI);
_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS);
_rel->add("LCP", "CODTAB==LOCALITA",1,0,ALIAS_LCP);
_rel->add(LF_COMUNI, "COM==COM");
// per stampare nell'intestazione la denominazione della sezione
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome
_cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
_cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome
_form_eti = new TUrgenze_form("AT_ETSOG");
_msk = new TMask("at3300a");
_sangue = new TRectype(LF_SOGGETTI);
return TRUE;
}
bool TUrgenze_application::user_destroy()
{
delete _msk;
delete _rel;
delete _form_eti;
delete _sangue;
return TRUE;
}
int at3300(int argc, char* argv[])
{
TUrgenze_application a;
a.run(argc, argv, "Urgenze");
return 0;
}

View File

@ -1,334 +0,0 @@
#include <mask.h>
#include <form.h>
#include <printapp.h>
#include "lf.h"
#include "soggetti.h"
#include "sezioni.h"
#include <comuni.h>
#include "at3.h"
#include "at3400a.h"
#define ALIAS_LCP 100
//#define ALIAS_TCS 200
enum ts { undefined = 0, elenco = 1, pagine = 2 };
// definizione form per pagine anagrafiche
class TModificati_form : public TForm
{
public:
virtual TCursor* cursor() const;
virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ;
TModificati_form(): TForm() {};
TModificati_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {};
virtual ~TModificati_form() {};
};
class TModificati_application : public TPrintapp
{
static bool filter_func_modificati(const TRelation* rel);
TRelation* _rel;
TMask* _msk;
TModificati_form* _form_pag;
TAssoc_array _categorie;
int _cur1, _cur2, _cur3, _cur4;
TParagraph_string _cognome_nome, _dencom;
TDate _data_stampa;
TDate _dataini, _datafin;
ts _tipo_stampa;
TString16 _codsez, _codsot;
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page (int file, int counter);
public:
void crea_intestazione();
void filtra_sezioni();
void header_sezione(TString16 codsez, TString16 codsot);
TMask& app_mask() { return *_msk; }
TModificati_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {}
};
HIDDEN inline TModificati_application& app() { return (TModificati_application&) main_app(); }
TCursor* TModificati_form::cursor() const { return app().current_cursor(); }
TRelation* TModificati_form::relation() const { return cursor()->relation(); }
void TModificati_application::filtra_sezioni()
{
TString16 sezini = _msk->get(F_SEZINI);
TString16 sotini = _msk->get(F_SOTINI);
TString16 sezfin = _msk->get(F_SEZFIN);
TString16 sotfin = _msk->get(F_SOTFIN);
select_cursor(_cur4);
TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI);
TRectype da(fl.curr());
TRectype a(fl.curr());
da.zero();
a.zero();
if ((sezini.not_empty()) && (sezini.ok()))
da.put(SOG_CODSEZ, sezini);
if ((sotini.not_empty()) && (sotini.ok()))
da.put(SOG_CODSOT, sotini);
if ((sezfin.not_empty()) && (sezfin.ok()))
a.put(SOG_CODSEZ, sezfin);
if ((sotfin.not_empty()) && (sotfin.ok()))
a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a);
}
void TModificati_application::set_page(int file, int cnt)
{
switch (_tipo_stampa)
{
case pagine:
{
TPrint_section& corpo = _form_pag->get_body();
corpo.reset();
corpo.update();
for (int i = 0; i < corpo.height(); i++)
{
TPrintrow& riga = corpo.row(i);
set_row(i+1,riga);
}
force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage
// altrimenti stampa sempre la stessa etichetta
}
break;
case elenco:
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g#a", &_cognome_nome);
set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@47g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
set_row(1,"@98g@S", FLD(LF_SOGGETTI,SOG_TELABI));
set_row(1,"@114g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
set_row(2,"@47g#a", &_dencom);
set_row(2,"@114g@S", FLD(LF_SOGGETTI,SOG_TELALT));
}
break;
}
}
bool TModificati_application::filter_func_modificati(const TRelation* rel)
{
bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile();
//filtro per categorie
TAssoc_array& categorie = app()._categorie;
if (categorie.items() != 0)
{
TString16 cat = sog.get(SOG_CATDON);
filtrato = categorie.is_key((const char*) cat);
}
// filtro per data aggiornamento
if (filtrato && app()._dataini.ok())
{
TDate datamod = sog.get(SOG_DATAULTAGG);
filtrato = (datamod > app()._dataini);
}
return filtrato;
}
bool TModificati_application::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
if (_tipo_stampa == elenco)
{
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(SOG_NOME);
_cognome_nome = nome;
TString256 localita = "";
localita << current_cursor()->curr(-ALIAS_LCP).get("S6");
if (localita.not_empty() && localita.ok())
{
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
TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
//if (!_codsez.blank())
if (_codsez != "**")
printer().formfeed();
_codsez = codsez;
_codsot = codsot;
header_sezione(codsez, codsot);
}
}
return TRUE;
}
void TModificati_application::header_sezione(TString16 codsez, TString16 codsot)
{
TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString256 intestazione(132);
intestazione = "Sezione: ";
intestazione << codsez;
intestazione << "/";
intestazione << codsot;
intestazione << " ";
intestazione << densez;
if ((densot.ok())&& (densot.not_empty()))
{
intestazione << "/";
intestazione << densot;
}
intestazione.center_just();
set_header(1,"@0g%s", (const char*) intestazione);
return;
}
bool TModificati_application::set_print(int)
{
_tipo_stampa = undefined;
KEY tasto;
tasto = _msk->run();
switch (tasto)
{
case F_ELENCO:
_tipo_stampa = elenco;
//_codsez.spaces(2);
//_codsot.spaces(2);
_codsez = "**";
_codsez = "**";
break;
case F_PAGINE:
_tipo_stampa = pagine;
break;
}
if (_tipo_stampa != undefined)
{
reset_files();
add_file(LF_SOGGETTI);
_dataini = _msk->get(F_DATAINI);
filtra_sezioni();
// filtro per categorie
TString16 catpri = _msk->get(F_CAT1);
TString16 catsec = _msk->get(F_CAT2);
TString16 catter = _msk->get(F_CAT3);
TString16 catqua = _msk->get(F_CAT4);
TString16 catqui = _msk->get(F_CAT5);
TString16 catses = _msk->get(F_CAT6);
if (catpri.not_empty() && catpri.ok())
_categorie.add((const char*) catpri);
if (catsec.not_empty() && catsec.ok())
_categorie.add((const char*) catsec);
if (catter.not_empty() && catter.ok())
_categorie.add((const char*) catter);
if (catqua.not_empty() && catqua.ok())
_categorie.add((const char*) catqua);
if (catqui.not_empty() && catqui.ok())
_categorie.add((const char*) catqui);
if (catses.not_empty() && catses.ok())
_categorie.add((const char*) catses);
current_cursor()->set_filterfunction(filter_func_modificati);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TModificati_application::crea_intestazione()
{
reset_header();
if (_tipo_stampa == elenco)
{
TString256 sep(132);
sep = "ELENCO MODIFICATI";
TDate data = _msk->get(F_DATAINI);
if (data.ok())
{
sep << " dal ";
sep << data.string();
}
sep.center_just();
set_header(2, "@0g%s", (const char*) sep);
TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa);
sep = "";
sep << "Pag. @#";
set_header(2, "@120g%s", (const char*) sep);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gIndirizzo@98gTelefono abit.@114gTelefono lavoro");
set_header(5,"@47gCAP/Località/Comune/Prov.@114gTelefono altro");
set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g--------------------------------------------------@98g---------------@114g---------------");
}
}
bool TModificati_application::user_create()
{
_rel = new TRelation(LF_SOGGETTI);
//_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS);
_rel->add("LCP", "CODTAB==LOCALITA",1,0,ALIAS_LCP);
_rel->add(LF_COMUNI, "COM==COM");
// per stampare nell'intestazione la denominazione della sezione
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome
_cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
_cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome
_form_pag = new TModificati_form("AT_PAGIN");
_msk = new TMask("at3400a");
return TRUE;
}
bool TModificati_application::user_destroy()
{
delete _msk;
delete _rel;
delete _form_pag;
return TRUE;
}
int at3400(int argc, char* argv[])
{
TModificati_application a;
a.run(argc, argv, "Elenco soggetti modificati");
return 0;
}

View File

@ -1,30 +0,0 @@
// stampa elenco soggetti modficati a partire dal ...
// definizione campi per maschera di selezione
#define F_SEZINI 101
#define F_D_SEZINI 102
#define F_SOTINI 103
#define F_D_SOTINI 104
#define F_SEZFIN 105
#define F_D_SEZFIN 106
#define F_SOTFIN 107
#define F_D_SOTFIN 108
#define F_CAT1 201
#define F_D_CAT1 202
#define F_CAT2 203
#define F_D_CAT2 204
#define F_CAT3 205
#define F_D_CAT3 206
#define F_CAT4 207
#define F_D_CAT4 208
#define F_CAT5 209
#define F_D_CAT5 210
#define F_CAT6 211
#define F_D_CAT6 212
#define F_DATAINI 301
//#define F_DATAFIN 302
#define F_ELENCO 401
#define F_PAGINE 402

View File

@ -1,42 +0,0 @@
// Scadenze di donazione
// definizione campi per maschera di selezione
#define F_SEZINI 101
#define F_D_SEZINI 102
#define F_SOTINI 103
#define F_D_SOTINI 104
#define F_SEZFIN 105
#define F_D_SEZFIN 106
#define F_SOTFIN 107
#define F_D_SOTFIN 108
#define F_CAT1 201
#define F_D_CAT1 202
#define F_CAT2 203
#define F_D_CAT2 204
#define F_CAT3 205
#define F_D_CAT3 206
#define F_CAT4 207
#define F_D_CAT4 208
#define F_CAT5 209
#define F_D_CAT5 210
#define F_CAT6 211
#define F_D_CAT6 212
#define F_PROCDON1 301
//#define F_PROCDON2 302
#define F_DATAINI 303
#define F_DATAFIN 304
#define F_USOGIORNO 305
#define F_GIORNO 306
#define F_USOMODO 307
#define F_MODO 308
#define F_DATAULTID 309
#define F_AB01 310
#define F_AB02 311
#define F_AB03 312
#define F_RHANTID 313
#define F_ELENCO 401
#define F_ETICHETTE 402
#define F_CARTOLINE 403

View File

@ -1,364 +0,0 @@
#include "at3500a.h"
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 78 20
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 0 "Scelta sezioni/sottogruppi"
END
STRING F_SEZINI 2
BEGIN
PROMPT 2 1 "Da "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_SEZINI
INPUT CODSOT F_SOTINI
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_SEZINI CODSEZ
OUTPUT F_D_SEZINI DENSEZ
OUTPUT F_SOTINI CODSOT
OUTPUT F_D_SOTINI DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione da cui partire"
END
STRING F_D_SEZINI 25
BEGIN
PROMPT 11 1 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZINI
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_SEZINI
CHECKTYPE NORMAL
HELP "Sezione da cui partire"
END
STRING F_SOTINI 2
BEGIN
PROMPT 2 2 " "
COPY ALL F_SEZINI
CHECKTYPE SEARCH
HELP "Codice sottogruppo da cui partire"
END
STRING F_D_SOTINI 25
BEGIN
PROMPT 11 2 ""
FLAGS "U"
COPY USE F_D_SEZINI
INPUT DENSEZ F_D_SEZINI
INPUT DENSOT F_D_SOTINI
COPY DISPLAY F_D_SEZINI
COPY OUTPUT F_D_SEZINI
CHECKTYPE NORMAL
HELP "Sottogruppo da cui partire"
END
STRING F_SEZFIN 2
BEGIN
PROMPT 41 1 "A "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_SEZFIN
INPUT CODSOT F_SOTFIN
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_SEZFIN CODSEZ
OUTPUT F_D_SEZFIN DENSEZ
OUTPUT F_SOTFIN CODSOT
OUTPUT F_D_SOTFIN DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione finale"
END
STRING F_D_SEZFIN 25
BEGIN
PROMPT 49 1 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZFIN
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_SEZFIN
CHECKTYPE NORMAL
HELP "Sezione finale"
END
STRING F_SOTFIN 2
BEGIN
PROMPT 41 2 " "
COPY ALL F_SEZFIN
CHECKTYPE SEARCH
HELP "Codice sottogruppo finale"
END
STRING F_D_SOTFIN 25
BEGIN
PROMPT 49 2 ""
FLAGS "U"
COPY USE F_D_SEZFIN
INPUT DENSEZ F_D_SEZFIN
INPUT DENSOT F_D_SOTFIN
COPY DISPLAY F_D_SEZFIN
COPY OUTPUT F_D_SEZFIN
CHECKTYPE NORMAL
HELP "Sottogruppo finale"
END
GROUPBOX DLG_NULL 77 5
BEGIN
PROMPT 1 4 "Categorie"
END
STRING F_CAT1 2
BEGIN
PROMPT 2 5 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT1
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_CAT1 CODTAB
OUTPUT F_D_CAT1 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT1 30
BEGIN
PROMPT 8 5 ""
FLAGS "D"
END
STRING F_CAT2 2
BEGIN
PROMPT 2 6 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT2
COPY DISPLAY F_CAT1
OUTPUT F_CAT2 CODTAB
OUTPUT F_D_CAT2 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT2 30
BEGIN
PROMPT 8 6 ""
FLAGS "D"
END
STRING F_CAT3 2
BEGIN
PROMPT 2 7 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT3
COPY DISPLAY F_CAT1
OUTPUT F_CAT3 CODTAB
OUTPUT F_D_CAT3 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT3 30
BEGIN
PROMPT 8 7 ""
FLAGS "D"
END
STRING F_CAT4 2
BEGIN
PROMPT 40 5 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT4
COPY DISPLAY F_CAT1
OUTPUT F_CAT4 CODTAB
OUTPUT F_D_CAT4 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT4 30
BEGIN
PROMPT 46 5 ""
FLAGS "D"
END
STRING F_CAT5 2
BEGIN
PROMPT 40 6 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT5
COPY DISPLAY F_CAT1
OUTPUT F_CAT5 CODTAB
OUTPUT F_D_CAT5 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT5 30
BEGIN
PROMPT 46 6 ""
FLAGS "D"
END
STRING F_CAT6 2
BEGIN
PROMPT 40 7 ""
FLAGS "U"
USE CTD
INPUT CODTAB F_CAT6
COPY DISPLAY F_CAT1
OUTPUT F_CAT6 CODTAB
OUTPUT F_D_CAT6 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Categoria di appartenenza"
END
STRING F_D_CAT6 30
BEGIN
PROMPT 46 7 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 50 8
BEGIN
PROMPT 1 9 "Opzioni di convocazione"
END
LISTBOX F_PROCDON1 17
BEGIN
PROMPT 2 10 "Procedura di donazione "
#include "procdon.h"
END
//LISTBOX F_PROCDON2 17
//BEGIN
// PROMPT 50 10 ""
// #include "procdon.h"
//END
DATE F_DATAINI
BEGIN
PROMPT 2 11 "Data prossima don. da "
END
DATE F_DATAFIN
BEGIN
PROMPT 37 11 "a "
END
BOOLEAN F_USOGIORNO
BEGIN
PROMPT 2 13 "Uso giorno preferito "
MESSAGE TRUE ENABLE,F_GIORNO
MESSAGE FALSE RESET,F_GIORNO|DISABLE,F_GIORNO
END
LISTBOX F_GIORNO 13
BEGIN
PROMPT 30 13 ""
#include "giorni.h"
END
BOOLEAN F_USOMODO
BEGIN
PROMPT 2 14 "Uso modalità preferita "
MESSAGE TRUE ENABLE,F_MODO
MESSAGE FALSE RESET,F_MODO|DISABLE,F_MODO
END
LISTBOX F_MODO 13
BEGIN
PROMPT 30 14 ""
#include "modalita.h"
END
DATE F_DATAULTID
BEGIN
PROMPT 2 15 "Blocco per id. precedente a "
END
GROUPBOX DLG_NULL 25 8
BEGIN
PROMPT 53 9 "Tipizzazione"
END
LISTBOX F_AB01 5
BEGIN
PROMPT 54 10 "Gruppi AB0 "
#include "gruppo.h"
END
LISTBOX F_AB02 5
BEGIN
PROMPT 54 11 " "
#include "gruppo.h"
END
LISTBOX F_AB03 5
BEGIN
PROMPT 54 12 " "
#include "gruppo.h"
END
LISTBOX F_RHANTID 5
BEGIN
PROMPT 54 13 "Rh/AntiD "
#include "rh.h"
END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 17 "Stampa"
END
BUTTON F_ELENCO 9 2
BEGIN
PROMPT -14 18 "Elenco"
MESSAGE EXIT,F_ELENCO
END
BUTTON F_ETICHETTE 9 2
BEGIN
PROMPT -24 18 "Etichette"
MESSAGE EXIT,F_ETICHETTE
END
BUTTON F_CARTOLINE 9 2
BEGIN
PROMPT -34 18 "Cartoline"
MESSAGE EXIT,F_CARTOLINE
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -44 18 ""
END
ENDPAGE
ENDMASK

View File

@ -4,7 +4,7 @@
#include "at4.h"
#define usage "Error - usage : %s -{0|1|2}"
#define usage "Error - usage : %s -{0|1|2|3}"
int main(int argc,char** argv)
@ -20,6 +20,8 @@ int main(int argc,char** argv)
rt = at4200(argc,argv) ; break;
case 2:
rt = at4300(argc,argv) ; break;
case 3:
rt = at4400(argc,argv) ; break;
default:
error_box(usage, argv[0]) ; break;
}

View File

@ -23,3 +23,9 @@ MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
/* at4 -3 stampa convocazioni bologna */
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"

View File

@ -283,23 +283,18 @@ bool TScadenze_application::filter_func_scadenze(const TRelation* rel)
bool TScadenze_application::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
switch (_tipo_stampa)
{
case elenco:
{
const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
TRectype& recsog = current_cursor()->curr();
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
TString80 nome = recsog.get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(SOG_NOME);
nome << recsog.get(SOG_NOME);
_cognome_nome = nome;
// salto pagina se cambio sezione
//const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
//const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")

View File

@ -112,16 +112,16 @@ void TUrgenze_application::set_page(int file, int cnt)
break;
case elenco:
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@10g#a", &_cognome_nome);
set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@47g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
set_row(1,"@98g@S", FLD(LF_SOGGETTI,SOG_TELABI));
set_row(1,"@114g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
set_row(2,"@47g#a", &_dencom);
set_row(2,"@114g@S", FLD(LF_SOGGETTI,SOG_TELALT));
set_row(2,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON));
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@12g#a", &_cognome_nome);
set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR));
set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI));
set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV));
set_row(2,"@49g#a", &_dencom);
set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT));
set_row(2,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON));
}
break;
}
@ -159,13 +159,12 @@ bool TUrgenze_application::filter_func_urgenze(const TRelation* rel)
bool TUrgenze_application::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
if (_tipo_stampa == elenco)
{
TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
TRectype& recsog = current_cursor()->curr();
TString80 nome = recsog.get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(SOG_NOME);
nome << recsog.get(SOG_NOME);
_cognome_nome = nome;
TString256 localita = "";
localita << current_cursor()->curr(-ALIAS_LCP).get("S6");
@ -183,10 +182,9 @@ bool TUrgenze_application::preprocess_page(int file, int counter)
localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM);
localita.trim();
_dencom = localita;
// salto pagina se cambio sezione
const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
const TString16 codsez = recsog.get(SOG_CODSEZ);
const TString16 codsot = recsog.get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
@ -310,9 +308,9 @@ void TUrgenze_application::crea_intestazione()
sep.fill('-');
set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gIndirizzo@98gTelefono abit.@114gTelefono lavoro");
set_header(5,"@47gCAP/Località/Comune/Prov.@114gTelefono altro");
set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g--------------------------------------------------@98g---------------@114g---------------");
set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro");
set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro");
set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------");
}
}

View File

@ -153,14 +153,14 @@ bool TConv_application::filter_func_conv (const TRelation* rel)
const TDate dataprossi = sog.get_date(SOG_DATAPROSSI);
const char stato = rel->curr(-ALIAS_TABTCS).get_char("S6");
const bool dimesso = rel->curr(-ALIAS_TABCTD).get_char("B0");
//TDate dataultconv = sog.curr().get_date(SOG_DATAULTCONV);
TDate dataconv = sog.curr().get_date(SOG_DATACONV);
if (dataprossi.ok())
{
// intervallo tra data convocazione e data calcolata per pross. si
// intervallo tra data convocazione e data pross. si
long intconvsi = app()._dataconv - dataprossi;
// intervallo tra data convocazione e data ultima convocazione
//long intultconvsi = app()._data - dataultconv;
if ((intconvsi >= 0) && (intconvsi < app()._intmax) && ((stato == STATO_IDONEO) || (stato == STATO_FINESO)) && (dimesso != 'X'))
long intultconvsi = app()._dataconv - dataconv;
if ((intconvsi >= 0) && (intconvsi < app()._intmax) && (intultconvsi > app()._intmin) && ((stato == STATO_IDONEO) || (stato == STATO_FINESO)) && (dimesso != 'X'))
return TRUE;
else
return FALSE;
@ -177,7 +177,16 @@ bool TConv_application::preprocess_page(int file, int counter)
_intesta = TRUE;
header_sezione();
}
// contatore soggetti stampati
if (_tipo_stampa == etichette || _tipo_stampa == cartoline)
{
TRectype& recsog = current_cursor()->curr();
recsog.put(SOG_DATACONV,app()._dataconv);
int numconv = recsog.get_int(SOG_NUMCONV);
numconv++;
recsog.put(SOG_NUMCONV, numconv);
current_cursor()->file().rewrite();
}
return TRUE;
}

View File

@ -73,8 +73,8 @@ BEGIN
OUTPUT F_C_DENSEZ DENSEZ
OUTPUT F_C_CODSOT CODSOT
OUTPUT F_C_DENSOT DENSOT
OUTPUT F_C_INTMIN INTMIN
OUTPUT F_C_INTMAX INTMAX
//OUTPUT F_C_INTMIN INTMIN
//OUTPUT F_C_INTMAX INTMAX
OUTPUT F_C_CONV TIPOCONV
CHECKTYPE SEARCH
HELP "Codice sezione di appartenenza"
@ -83,7 +83,7 @@ END
STRING F_C_DENSEZ 25
BEGIN
PROMPT 16 1 ""
FLAGS "U"
//FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_C_DENSEZ
INPUT DENSOT F_C_DENSOT
@ -92,7 +92,7 @@ BEGIN
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_C_CODSEZ
CHECKTYPE SEARCH
CHECKTYPE NORMAL
HELP "Denominazione sezione di appartenenza"
END
@ -100,17 +100,18 @@ END
STRING F_C_CODSOT 2
BEGIN
PROMPT 2 2 "Sottog. "
FLAGS "U"
COPY ALL F_C_CODSEZ
CHECKTYPE REQUIRED
CHECKTYPE NORMAL
HELP "Codice sottogruppo di appartenenza"
END
STRING F_C_DENSOT 25
BEGIN
PROMPT 16 2 ""
FLAGS "U"
//FLAGS "U"
COPY ALL F_C_DENSEZ
CHECKTYPE SEARCH
CHECKTYPE NORMAL
HELP "Sottogruppo di appartenenza"
END

431
at/at4400.cpp Executable file
View File

@ -0,0 +1,431 @@
#include <form.h>
#include <mask.h>
#include <printapp.h>
#include <utility.h>
#include "lf.h"
#include "soggetti.h"
#include "sezioni.h"
#include "convoc.h"
#include "rconvoc.h"
#include "at4.h"
#include "at4400a.h"
#include "at4100b.h"
#include "at4100c.h"
#define ALIAS_LCP 100
#define ALIAS_TCS 200
enum ts { undefined = 0, elenco = 1, etichette = 2, cartoline = 3 };
// definizione form per etichette
class TStConvoc_form : public TForm
{
public:
virtual TCursor* cursor() const;
virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ;
TStConvoc_form(): TForm() {};
TStConvoc_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {};
virtual ~TStConvoc_form() {};
};
class TStConvoc_app : public TPrintapp
{
TRelation* _rel;
TMask* _msk;
TStConvoc_form* _form_eti;
TStConvoc_form* _form_car;
int _cur1;
TParagraph_string _cognome_nome;
TDate _data_stampa;
TDate _dataini, _datafin;
bool _aggiorna;
TString16 _punto,_tipo, _sezione, _sottog, _ordina;
TString16 _codsez, _codsot;
TString16 _orario, _datacart;
TString80 _invitoper, _data, _presso1, _presso2, _presso3, _presso4;
TString80 _note, _intest1, _intest2, _intest3, _intest4;
bool _usasez;
ts _tipo_stampa;
//static bool filter_func_stconvoc(const TRelation* rel);
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter);
ts dati_cartoline();
public:
void crea_intestazione();
void header_sezione(const TString16 codsez, const TString16 codsot);
void dati_sezione(const TString16 codsez, const TString16 codsot);
TMask& app_mask() { return *_msk; }
TStConvoc_app() : _data_stampa(TODAY), _cognome_nome("",25) {}
};
HIDDEN inline TStConvoc_app& app() { return (TStConvoc_app&) main_app(); }
TCursor* TStConvoc_form::cursor() const { return app().current_cursor(); }
TRelation* TStConvoc_form::relation() const { return cursor()->relation(); }
ts TStConvoc_app::dati_cartoline()
{
TMask msk("at4100b");
if (msk.run() == K_ENTER)
{
_invitoper = msk.get(F_INVITOPER);
_data = msk.get(F_DATA);
_presso1 = msk.get(F_PRESSO1);
_presso2 = msk.get(F_PRESSO2);
_presso3 = msk.get(F_PRESSO3);
_presso4 = msk.get(F_PRESSO4);
_datacart = msk.get(F_DATACART);
_orario = msk.get(F_ORARIO);
_note = msk.get(F_NOTE);
_usasez = msk.get_bool(F_USASEZ);
return cartoline;
}
else
return undefined;
}
void TStConvoc_app::set_page(int file, int cnt)
{
// costruzione etichette
switch (_tipo_stampa)
{
case etichette:
{
TPrint_section& corpo = _form_eti->get_body();
corpo.update();
for (int i = 0; i < corpo.height(); i++)
{
TPrintrow& riga = corpo.row(i);
set_row(i+1,riga);
}
force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage
// altrimenti stampa sempre la stessa etichetta
}
break;
case cartoline:
{
TPrint_section& corpo = _form_car->get_body();
const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
_codsez = codsez;
_codsot = codsot;
dati_sezione(codsez, codsot);
corpo.reset();
TForm_item& intest1 = corpo.find_field(CAR_INTEST1);
intest1.set(_intest1);
TForm_item& intest2 = corpo.find_field(CAR_INTEST2);
intest2.set(_intest2);
TForm_item& intest3 = corpo.find_field(CAR_INTEST3);
intest3.set(_intest3);
TForm_item& intest4 = corpo.find_field(CAR_INTEST4);
intest4.set(_intest4);
TForm_item& invito = corpo.find_field(CAR_INVITOPER);
invito.set(_invitoper);
TForm_item& data = corpo.find_field(CAR_DATA);
data.set(_data);
TForm_item& presso1 = corpo.find_field(CAR_PRESSO1);
presso1.set(_presso1);
TForm_item& presso2 = corpo.find_field(CAR_PRESSO2);
presso2.set(_presso2);
TForm_item& presso3 = corpo.find_field(CAR_PRESSO3);
presso3.set(_presso3);
TForm_item& presso4 = corpo.find_field(CAR_PRESSO4);
presso4.set(_presso4);
TForm_item& orario = corpo.find_field(CAR_ORARIO);
orario.set(_orario);
TForm_item& datacart = corpo.find_field(CAR_DATACART);
datacart.set(_datacart);
TForm_item& note = corpo.find_field(CAR_NOTE);
note.set(_note);
}
corpo.update();
for (int i = 0; i < corpo.height(); i++)
{
TPrintrow& riga = corpo.row(i);
set_row(i+1,riga);
}
force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage
// altrimenti stampa sempre la stessa etichetta
}
break;
case elenco:
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"#########"));
set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_CATDON));
set_row(1,"@13g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@39g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@50g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSSI));
set_row(1,"@61g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSAF));
set_row(1,"@72g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON));
set_row(1,"@83g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID));
set_row(1,"@94g@S", FLD(LF_SOGGETTI,SOG_IDON1));
set_row(1,"@97g@S", FLD(LF_SOGGETTI,SOG_IDON2));
set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_GRUPPOAB0));
set_row(1,"@105g@ld", FLD(LF_RCONVOC,RCV_DATACONV));
set_row(2,"@13g@S", FLD(LF_SOGGETTI,SOG_NOME));
set_row(2,"@53g@pn", FLD(LF_SOGGETTI,SOG_INTSI,"###"));
set_row(2,"@64g@pn", FLD(LF_SOGGETTI,SOG_INTAF,"###"));
set_row(2,"@76g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON));
set_row(2,"@87g@S", FLD(LF_SOGGETTI,SOG_TIPOULTID));
set_row(2,"@94g@S", FLD(LF_SOGGETTI,SOG_IDON3));
set_row(2,"@97g@S", FLD(LF_SOGGETTI,SOG_IDON4));
set_row(2,"@100g@S", FLD(LF_SOGGETTI,SOG_RHANTID));
set_row(2,"@105g@S", FLD(LF_RCONVOC,RCV_CHIAMATA));
set_row(3, "");
}
break;
}
}
bool TStConvoc_app::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
switch (_tipo_stampa)
{
case elenco:
{
TString80 nome = current_cursor()->curr(LF_SOGGETTI).get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr(LF_SOGGETTI).get(SOG_NOME);
_cognome_nome = nome;
// salto pagina se cambio sezione
const TString16 codsez = current_cursor()->curr(LF_SOGGETTI).get(SOG_CODSEZ);
const TString16 codsot = current_cursor()->curr(LF_SOGGETTI).get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
printer().formfeed();
_codsez = codsez;
_codsot = codsot;
header_sezione(codsez, codsot);
}
}
break;
}
return TRUE;
}
void TStConvoc_app::header_sezione(const TString16 codsez, const TString16 codsot)
{
const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString intestazione(132);
intestazione = "Sezione: ";
intestazione << codsez;
intestazione << "/";
intestazione << codsot;
intestazione << " ";
intestazione << densez;
if ((densot.ok())&& (densot.not_empty()))
{
intestazione << "/";
intestazione << densot;
}
intestazione.center_just();
set_header(1,"@0g%s", (const char*) intestazione);
return;
}
void TStConvoc_app::dati_sezione(const TString16 codsez, const TString16 codsot)
{
_intest1 = current_cursor()->curr(LF_SEZIONI).get(SEZ_INTESTAZ1);
_intest2 = current_cursor()->curr(LF_SEZIONI).get(SEZ_INTESTAZ2);
_intest3 = current_cursor()->curr(LF_SEZIONI).get(SEZ_INTESTAZ3);
_intest4 = current_cursor()->curr(LF_SEZIONI).get(SEZ_INTESTAZ4);
if (_usasez)
{
if (_presso1.blank())
{
_presso1 = current_cursor()->curr(LF_SEZIONI).get(SEZ_CONVSEDE1);
_presso2 = current_cursor()->curr(LF_SEZIONI).get(SEZ_CONVSEDE2);
_presso3 = current_cursor()->curr(LF_SEZIONI).get(SEZ_CONVSEDE3);
_presso4 = current_cursor()->curr(LF_SEZIONI).get(SEZ_CONVSEDE4);
}
if (_orario.blank())
_orario = current_cursor()->curr(LF_SEZIONI).get(SEZ_CONVORA);
if (_note.blank())
_note = current_cursor()->curr(LF_SEZIONI).get(SEZ_CONVNOTE);
}
return;
}
bool TStConvoc_app::set_print(int m)
{
_tipo_stampa = undefined;
KEY tasto;
tasto = _msk->run();
switch (tasto)
{
case F_ELENCO:
_tipo_stampa = elenco;
break;
case F_ETICHETTE:
_tipo_stampa = etichette;
break;
case F_CARTOLINE:
_tipo_stampa = dati_cartoline();
break;
}
if (_tipo_stampa != undefined)
{
_dataini = _msk->get(F_DATAINI);
_datafin = _msk->get(F_DATAFIN);
_punto = _msk->get(F_PUNTO);
_tipo = _msk->get(F_TIPO);
_codsez = _msk->get(F_CODSEZ);
_codsot = _msk->get(F_CODSOT);
_aggiorna = _msk->get_bool(F_AGGIORNA);
_ordina = _msk->get(F_ORDINA);
TString256 chiave = "";
switch (_ordina[0])
{
case 'A':
chiave = "90->CODSEZ|90->CODSOT|UPPER(90->COGNOME)|UPPER(90->NOME)|116->DATACONV";
break;
case 'C':
chiave = "90->CODSEZ|90->CODSOT|90->DOM_CAP|UPPER(90->COGNOME)|UPPER(90->NOME)|116->DATACONV";
break;
}
TString80 filtro = "";
// filtro per punto di raccolta
if (_punto.not_empty())
{
if (filtro.not_empty())
filtro << " && ";
filtro << format("(115->PUNTO == \"%s\")",(const char*)_punto);
}
// filtro per tipo
if (_tipo.not_empty())
{
if (filtro.not_empty())
filtro << " && ";
filtro << format("(115->TIPO == \"%s\")",(const char*)_tipo);
}
// filtro per sezione/sottogruppo
if (_sezione.not_empty())
{
if (filtro.not_empty())
filtro << " && ";
filtro << format("(90->CODSEZ == \"%s\")",(const char*)_sezione);
if (_sottog.not_empty())
{
if (filtro.not_empty())
filtro << " && ";
filtro << format("(90->CODSOT == \"%s\")",(const char*)_sottog);
}
}
// filtro per data
TRectype da(LF_RCONVOC);
TRectype a (LF_RCONVOC);
if (_dataini.ok())
da.put(RCV_DATACONV, _dataini);
if (_datafin.ok())
a.put(RCV_DATACONV, _datafin);
_cur1 = add_cursor(new TSorted_cursor(_rel, (const char*) chiave,"", 2, &da, &a));
current_cursor()->setfilter((const char*) filtro, TRUE);
//current_cursor()->set_filterfunction(filter_func_stconvoc);
_codsez = "**";
_codsot = "**";
reset_files();
add_file(LF_RCONVOC);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TStConvoc_app::crea_intestazione()
{
reset_header();
if (_tipo_stampa == elenco)
{
TString sep(132);
sep = "STAMPA CONVOCATI";
if (_tipo.not_empty())
{
sep << " per ";
sep << _tipo;
}
sep << " dal ";
sep << _dataini.string();
sep << " al ";
sep << _datafin.string();
sep << " - PUNTO ";
sep << _punto;
sep.center_just();
set_header(2, "@0g%s", (const char*) sep);
TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa);
sep = "";
sep << "Pag. @#";
set_header(2, "@120g%s", (const char*) sep);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
set_header(5,"@0gCod.@10gC.@13gCognome@39gNato il@50gData pr.SI@61gData pr.AF@72gData/Tipo@83gData/Tipo@94gIdon.@100gAB0@105gData conv.");
set_header(6,"@13gNome@50gInterv. SI@61gInterv. AF@72gult. don.@83gult. idon.@94gper@100gRh@105gTipo conv.");
set_header(7,"@0g---------@10g--@13g-------------------------@39g----------@50g----------@61g----------@72g----------@83g----------@94g-----@100g----@105g----------");
}
}
bool TStConvoc_app::user_create()
{
_rel = new TRelation(LF_RCONVOC);
_rel->add(LF_SOGGETTI, "CODICE==CODICE");
_rel->add(LF_CONVOC, "NUMERO==NUMERO");
_rel->add("LCP", "CODTAB==DOM_CODLOC",1,LF_SOGGETTI,ALIAS_LCP);
_rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,LF_SOGGETTI);
// per stampare la denominazione della sezione nell'intestazione
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT",1,LF_SOGGETTI);
_msk = new TMask("at4400a");
_form_eti = new TStConvoc_form("AT_ETSOG");
_form_car = new TStConvoc_form("AT_ETCAR");
return TRUE;
}
bool TStConvoc_app::user_destroy()
{
delete _msk;
delete _rel;
delete _form_eti;
delete _form_car;
return TRUE;
}
int at4400(int argc, char* argv[])
{
TStConvoc_app a;
a.run(argc, argv, "Stampa convocazioni Bologna");
return 0;
}

19
at/at4400a.h Executable file
View File

@ -0,0 +1,19 @@
// Stampa convocazioni per BOLOGNA
// definizione campi per maschera
#define F_DATAINI 101
#define F_DATAFIN 102
#define F_PUNTO 103
#define F_D_PUNTO 104
#define F_TIPO 105
#define F_D_TIPO 106
#define F_CODSEZ 107
#define F_DENSEZ 108
#define F_CODSOT 109
#define F_DENSOT 110
#define F_AGGIORNA 111
#define F_ORDINA 112
#define F_ELENCO 151
#define F_ETICHETTE 152
#define F_CARTOLINE 153

View File

@ -1,21 +1,25 @@
#include "at3600a.h"
#include "at4400a.h"
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 78 20
GROUPBOX DLG_NULL 77 7
GROUPBOX DLG_NULL 77 12
BEGIN
PROMPT 1 0 "Opzioni per la convocazione"
PROMPT 1 1 "Opzioni per la stampa convocazioni"
END
DATE F_DATACONV
DATE F_DATAINI
BEGIN
PROMPT 2 1 "Data convocazione "
PROMPT 2 2 "Data iniziale "
END
DATE F_DATAFIN
BEGIN
PROMPT 2 3 "Data finale "
END
STRING F_PUNTO 4
BEGIN
PROMPT 2 2 "Punto di raccolta "
PROMPT 2 4 "Punto raccolta "
FLAGS "U"
USE LDN
INPUT CODTAB F_PUNTO
@ -23,42 +27,37 @@ BEGIN
DISPLAY "Descrizione@40" S0
OUTPUT F_PUNTO CODTAB
OUTPUT F_D_PUNTO S0
CHECKTYPE REQUIRED
WARNING "Codice non presente"
HELP "Punto di raccolta per la convocazione"
CHECTYPE NORMAL
END
STRING F_D_PUNTO 25
STRING F_D_PUNTO 50
BEGIN
PROMPT 27 2 ""
PROMPT 25 4 ""
FLAGS "D"
END
STRING F_TIPODON 2
STRING F_TIPO 2
BEGIN
PROMPT 2 3 "Tipo donazione "
PROMPT 2 5 "Tipo donazione "
FLAGS "U"
USE TDN
INPUT CODTAB F_D_TIPODON
INPUT CODTAB F_TIPO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_TIPODON CODTAB
OUTPUT F_D_TIPODON S0
CHECKTYPE REQUIRED
VALIDATE NOT_EMPTY_FUNC
WARNING "Codice non presente"
HELP "Tipo donazione"
OUTPUT F_TIPO CODTAB
OUTPUT F_D_TIPO S0
CHECKTYPE NORMAL
END
STRING F_D_TIPODON 25
STRING F_D_TIPO 25
BEGIN
PROMPT 27 3 ""
PROMPT 23 5 ""
FLAGS "D"
END
STRING F_CODSEZ 2
BEGIN
PROMPT 2 4 "Sezione "
PROMPT 2 6 "Sezione "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_CODSEZ
@ -73,12 +72,12 @@ BEGIN
OUTPUT F_DENSOT DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione da convocare"
//ADD MASK at0700a
ADD MASK at0700a
END
STRING F_DENSEZ 25
BEGIN
PROMPT 27 4 ""
PROMPT 23 6 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_DENSEZ
@ -89,22 +88,21 @@ BEGIN
COPY OUTPUT F_CODSEZ
CHECKTYPE NORMAL
HELP "Denominazione sezione da convocare"
//ADD MASK at0700a
ADD MASK at0700a
END
STRING F_CODSOT 2
BEGIN
PROMPT 2 5 "Sottogruppo "
FIELD CODSOT
PROMPT 2 7 "Sottogruppo "
COPY ALL F_CODSEZ
CHECKTYPE NORMAL
HELP "Codice sottogruppo da convocare"
//ADD MASK at0700a
ADD MASK at0700a
END
STRING F_DENSOT 25
BEGIN
PROMPT 27 5 ""
PROMPT 23 7 ""
FLAGS "U"
COPY USE F_DENSEZ
INPUT DENSEZ F_DENSEZ
@ -113,35 +111,48 @@ BEGIN
COPY OUTPUT F_DENSEZ
CHECKTYPE NORMAL
HELP "Sottogruppo da convocare"
//ADD MASK at0700a
ADD MASK at0700a
END
BOOLEAN F_AGGIORNA
BEGIN
PROMPT 2 9 "Aggiorna campo convocazione stampata"
END
LISTBOX F_ORDINA 12
BEGIN
PROMPT 2 11 "Ordinamento "
FLAGS "U"
ITEM "A|Alfabetico"
ITEM "C|CAP"
END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 17 "Stampa"
PROMPT 1 15 "Stampa"
END
BUTTON F_ELENCO 9 2
BEGIN
PROMPT -14 18 "Elenco"
PROMPT -14 16 "Elenco"
MESSAGE EXIT,F_ELENCO
END
BUTTON F_ETICHETTE 9 2
BEGIN
PROMPT -24 18 "Etichette"
PROMPT -24 16 "Etichette"
MESSAGE EXIT,F_ETICHETTE
END
BUTTON F_CARTOLINE 9 2
BEGIN
PROMPT -34 18 "Cartoline"
PROMPT -34 16 "Cartoline"
MESSAGE EXIT,F_CARTOLINE
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -44 18 ""
PROMPT -44 16 ""
END
ENDPAGE

View File

@ -3,7 +3,7 @@
#include "at6.h"
#define usage "Error - usage : %s -[0,1]"
#define usage "Error - usage : %s -[0|1|2]"
int main(int argc, char** argv)
{
@ -16,7 +16,9 @@ int main(int argc, char** argv)
rt = at6100(argc, argv); break;
case 1:
rt = at6200(argc, argv); break;
default:
case 2:
rt = at6300(argc, argv); break;
default:
error_box(usage, argv[0]) ; rt = 1; break;
}
return rt;

View File

@ -3,5 +3,6 @@
int at6100(int argc, char* argv[]); // stampa tabella medici
int at6200(int argc, char* argv[]); // stampa tabella sezioni/sottogruppi
int at6300(int argc, char* argv[]); // stampa di controllo donazioni
#endif // __AT6_H

View File

@ -9,11 +9,14 @@
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
/* at6 -1 stampa archivio sezioni */
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
/* at6 -2 stampa di controllo donazioni */
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"

301
at/at6300.cpp Executable file
View File

@ -0,0 +1,301 @@
#include <form.h>
#include <mask.h>
#include <printapp.h>
#include <utility.h>
#include "lf.h"
#include "donaz.h"
#include "soggetti.h"
#include "sezioni.h"
#include "at6.h"
#include "at6300a.h"
#define ALIAS_LDN 100
class TElencoDon_app : public TPrintapp
{
TRelation* _rel;
TMask* _msk;
int _counter;
int _cur1;
TDate _dataold, _dataini, _datafin;
TString16 _tipodon, _luogodon, _luogoold, _sezold;
TString16 _sezini, _sotini, _tipostampa;
TParagraph_string _cognome_nome;
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter);
public:
void crea_intestazione();
void header_data(const TDate data, const TString16 luogo, const TString16 sezione);
TMask& app_mask() { return *_msk; }
TElencoDon_app() : _cognome_nome("",35) {}
};
HIDDEN inline TElencoDon_app& app() { return (TElencoDon_app&) main_app(); }
void TElencoDon_app::set_page(int file, int cnt)
{
set_row(1,"@0g#D", &_counter);
set_row(1,"@7g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######"));
set_row(1,"@14g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS));
set_row(1,"@22g#a", &_cognome_nome);
set_row(1,"@58g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@69g@S", FLD(LF_SOGGETTI,SOG_CODSEZ));
set_row(1,"@72g@S", FLD(LF_SOGGETTI,SOG_CODSOT));
set_row(1,"@75g@ld", FLD(LF_DONAZ,DON_DATADON));
set_row(1,"@86g@S", FLD(LF_DONAZ,DON_TIPODON));
set_row(1,"@92g@S", FLD(LF_DONAZ, DON_LUOGODON));
}
bool TElencoDon_app::preprocess_page(int file, int counter)
{
// contatore soggetti stampati
// per ora non c'è
TString80 nome = current_cursor()->curr(LF_SOGGETTI).get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr(LF_SOGGETTI).get(SOG_NOME);
_cognome_nome = nome;
// salto pagina se cambio punto di rottura
switch (_tipostampa[0])
{
case 'D':
{
const TDate datanew = current_cursor()->curr().get(DON_DATADON);
if (datanew != _dataold )
{
if (_dataold.ok())
printer().formfeed();
_dataold = datanew;
header_data(datanew,"","");
_counter = 0;
}
}
break;
case 'L':
{
const TString16 luogonew = current_cursor()->curr().get(DON_LUOGODON);
if (luogonew != _luogoold )
{
if (_luogoold != "****")
printer().formfeed();
_luogoold = luogonew;
header_data(NULLDATE,luogonew,"");
_counter = 0;
}
}
break;
case 'S':
{
TString16 seznew = current_cursor()->curr(LF_SOGGETTI).get(SOG_CODSEZ);
seznew << "/";
seznew << current_cursor()->curr(LF_SOGGETTI).get(SOG_CODSOT);
if (seznew != _sezold )
{
if (_sezold != "****")
printer().formfeed();
_sezold = seznew;
header_data(NULLDATE,"",seznew);
_counter = 0;
}
}
break;
}
_counter++;
return TRUE;
}
void TElencoDon_app::header_data(const TDate data, const TString16 luogo, const TString16 sezione)
{
TString intestazione(132);
intestazione = "STAMPA DI CONTROLLO DONAZIONI ";
switch (_tipostampa[0])
{
case 'D':
{
intestazione << "PER DATA ";
intestazione << data;
}
break;
case 'L':
{
intestazione << "PER LUOGO ";
intestazione << luogo;
}
break;
case 'S':
{
intestazione << "PER SEZIONE ";
intestazione << sezione;
}
break;
}
intestazione.center_just();
set_header(1,"@0g%s", (const char*) intestazione);
intestazione = "Pag. @#";
set_header(1, "@110g%s", (const char*) intestazione);
return;
}
bool TElencoDon_app::set_print(int m)
{
KEY tasto;
tasto = _msk->run();
if (tasto == K_ENTER)
{
_sezini = _msk->get(F_SEZINI);
_sotini = _msk->get(F_SOTINI);
_dataini = _msk->get_date(F_DATAINI);
_datafin = _msk->get_date(F_DATAFIN);
_tipodon = _msk->get(F_TIPODON);
_luogodon = _msk->get(F_LUOGODON);
_tipostampa = _msk->get(F_TIPOSTAMPA);
TString80 chiave = "";
switch (_tipostampa[0])
{
case 'D':
chiave = "92->DATADON|UPPER(90->COGNOME)|UPPER(90->NOME)";
break;
case 'L':
chiave = "92->LUOGODON|92->DATADON|UPPER(90->COGNOME)|UPPER(90->NOME)";
break;
case 'S':
chiave = "90->CODSEZ|90->CODSOT|92->DATADON|UPPER(90->COGNOME)|UPPER(90->NOME)";
break;
}
TString80 filtro = "";
// filtro per tipo donazione
if (_tipodon.not_empty())
filtro = format("(TIPODON == \"%s\")",(const char*)_tipodon);
// filtro per luogo donazione
if (_luogodon.not_empty())
{
if (filtro.empty())
filtro = format("(LUOGODON == \"%s\")",(const char*)_luogodon);
else
{
filtro << " && ";
filtro << format("(LUOGODON == \"%s\")",(const char*)_luogodon);
}
}
// filtro per sezione/sottogruppo
if (_sezini.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSEZ == \"%s\")",(const char*)_sezini);
else
{
filtro << " && ";
filtro << format("(90->CODSEZ == \"%s\")",(const char*)_sezini);
}
if (_sotini.not_empty())
{
if (filtro.empty())
filtro = format("(90->CODSOT == \"%s\")",(const char*)_sotini);
else
{
filtro << " && ";
filtro << format("(90->CODSOT == \"%s\")",(const char*)_sotini);
}
}
}
// filtro per data
TRectype da(LF_DONAZ);
TRectype a (LF_DONAZ);
if (_dataini.ok())
da.put(DON_DATADON, _dataini);
if (_datafin.ok())
a.put(DON_DATADON, _datafin);
_cur1 = add_cursor(new TSorted_cursor(_rel, (const char*) chiave, "", 2, &da, &a));
current_cursor()->setfilter((const char*) filtro, TRUE);
_counter = 0;
_dataold = NULLDATE;
_luogoold = "****";
_sezold = "****";
reset_files();
add_file(LF_DONAZ);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TElencoDon_app::crea_intestazione()
{
reset_header();
TString sep(132);
sep = "Selezioni della stampa: ";
if (_sezini.not_empty())
{
sep << "Sez. ";
sep << _sezini;
if (_sotini.not_empty())
{
sep << "/";
sep << _sotini;
}
sep << "; ";
}
if (_dataini.ok())
{
sep << "Dal ";
sep << _dataini.string();
}
if (_datafin.ok())
{
sep << " Al ";
sep << _datafin.string();
}
if (_dataini.ok() || _datafin.ok())
sep << "; ";
if (_tipodon.not_empty())
{
sep << "Tipo ";
sep << _tipodon;
sep << "; ";
}
if (_luogodon.not_empty())
{
sep << "Luogo ";
sep << _luogodon;
sep << "; ";
}
sep.center_just();
set_header(2,"@0g%s", (const char*) sep);
set_header(3,"@0gProg.@7gCodice@14gTessera@22gCognome e nome@58gNato il@69gSe/So@75gData don.@86gTipo@92gLuogo");
set_header(4,"@0g------@7g------@14g-------@22g-----------------------------------@58g----------@69g-----@75g----------@86g----@91g-------------------------");
}
bool TElencoDon_app::user_create()
{
_rel = new TRelation(LF_DONAZ);
_rel->add(LF_SOGGETTI, "CODICE==CODICE");
_rel->add("LDN", "CODTAB==LUOGODON",1,0,ALIAS_LDN);
_msk = new TMask("at6300a");
return TRUE;
}
bool TElencoDon_app::user_destroy()
{
delete _msk;
delete _rel;
return TRUE;
}
int at6300(int argc, char* argv[])
{
TElencoDon_app a;
a.run(argc, argv, "Stampa di controllo donazioni");
return 0;
}

18
at/at6300a.h Executable file
View File

@ -0,0 +1,18 @@
// stampa di controllo donazioni
// definizione campi per maschera di selezione
#define F_SEZINI 101
#define F_D_SEZINI 102
#define F_SOTINI 103
#define F_D_SOTINI 104
//#define F_SEZFIN 105
//#define F_D_SEZFIN 106
//#define F_SOTFIN 107
//#define F_D_SOTFIN 108
#define F_DATAINI 109
#define F_DATAFIN 110
#define F_TIPODON 111
#define F_LUOGODON 112
#define F_TIPOSTAMPA 113
#define F_D_TIPODON 201
#define F_D_LUOGODON 202

194
at/at6300a.uml Executable file
View File

@ -0,0 +1,194 @@
#include "at6300a.h"
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 78 20
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 1 "Scelta sezione/sottogruppo"
END
STRING F_SEZINI 2
BEGIN
PROMPT 2 2 "Sezione "
FLAGS "U"
USE LF_SEZIONI
INPUT CODSEZ F_SEZINI
INPUT CODSOT F_SOTINI
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_SEZINI CODSEZ
OUTPUT F_D_SEZINI DENSEZ
OUTPUT F_SOTINI CODSOT
OUTPUT F_D_SOTINI DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione da stampare"
END
STRING F_D_SEZINI 25
BEGIN
PROMPT 20 2 ""
FLAGS "U"
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZINI
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Cod.sez" CODSEZ
DISPLAY "Cod.sot." CODSOT
COPY OUTPUT F_SEZINI
CHECKTYPE NORMAL
HELP "Sezione da stampare"
END
STRING F_SOTINI 2
BEGIN
PROMPT 2 3 "Sottogruppo "
COPY ALL F_SEZINI
CHECKTYPE SEARCH
HELP "Codice sottogruppo da stampare"
END
STRING F_D_SOTINI 25
BEGIN
PROMPT 20 3 ""
FLAGS "U"
COPY USE F_D_SEZINI
INPUT DENSEZ F_D_SEZINI
INPUT DENSOT F_D_SOTINI
COPY DISPLAY F_D_SEZINI
COPY OUTPUT F_D_SEZINI
CHECKTYPE NORMAL
HELP "Sottogruppo da cui partire"
END
//STRING F_SEZFIN 2
//BEGIN
// PROMPT 41 2 "A "
// FLAGS "U"
// USE LF_SEZIONI
// INPUT CODSEZ F_SEZFIN
// INPUT CODSOT F_SOTFIN
// DISPLAY "Cod.sez" CODSEZ
// DISPLAY "Cod.sot." CODSOT
// DISPLAY "Sezione@25" DENSEZ
// DISPLAY "Sottogruppo@25" DENSOT
// OUTPUT F_SEZFIN CODSEZ
// OUTPUT F_D_SEZFIN DENSEZ
// OUTPUT F_SOTFIN CODSOT
// OUTPUT F_D_SOTFIN DENSOT
// CHECKTYPE SEARCH
// HELP "Codice sezione finale"
//END
//STRING F_D_SEZFIN 25
//BEGIN
// PROMPT 49 2 ""
// FLAGS "U"
// USE LF_SEZIONI KEY 2
// INPUT DENSEZ F_D_SEZFIN
// DISPLAY "Sezione@25" DENSEZ
// DISPLAY "Sottogruppo@25" DENSOT
// DISPLAY "Cod.sez" CODSEZ
// DISPLAY "Cod.sot." CODSOT
// COPY OUTPUT F_SEZFIN
// CHECKTYPE NORMAL
// HELP "Sezione finale"
//END
//STRING F_SOTFIN 2
//BEGIN
// PROMPT 41 3 " "
// COPY ALL F_SEZFIN
// CHECKTYPE SEARCH
// HELP "Codice sottogruppo finale"
//END
//STRING F_D_SOTFIN 25
//BEGIN
// PROMPT 49 3 ""
// FLAGS "U"
// COPY USE F_D_SEZFIN
// INPUT DENSEZ F_D_SEZFIN
// INPUT DENSOT F_D_SOTFIN
// COPY DISPLAY F_D_SEZFIN
// COPY OUTPUT F_D_SEZFIN
// CHECKTYPE NORMAL
// HELP "Sottogruppo finale"
//END
GROUPBOX DLG_NULL 77 5
BEGIN
PROMPT 1 5 "Selezione dati per la stampa"
END
DATA F_DATAINI
BEGIN
PROMPT 2 6 "Donazioni dal "
END
DATA F_DATAFIN
BEGIN
PROMPT 30 6 "al "
END
STRING F_TIPODON 2
BEGIN
PROMPT 2 7 "Tipo donazioni "
FLAGS "U"
USE TDN
INPUT CODTAB F_TIPODON
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_TIPODON CODTAB
OUTPUT F_D_TIPODON S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
END
STRING F_D_TIPODON 30
BEGIN
PROMPT 26 7 ""
FLAGS "D"
END
STRING F_LUOGODON 4
BEGIN
PROMPT 2 8 "Luogo donazione "
FLAGS "U"
USE LDN
INPUT CODTAB F_LUOGODON
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_LUOGODON CODTAB
OUTPUT F_D_LUOGODON S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
END
STRING F_D_LUOGODON 30
BEGIN
PROMPT 26 8 ""
FLAGS "D"
END
RADIOBUTTON F_TIPOSTAMPA 25
BEGIN
PROMPT 1 10 "Stampa per "
ITEM "D|Data donazione"
ITEM "L|Luogo donazione"
ITEM "S|Sezione/Sottogruppo"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

23
at/at7.cpp Executable file
View File

@ -0,0 +1,23 @@
#include <xvt.h>
#include <strings.h>
#include <checks.h>
#include "at7.h"
#define usage "Error - usage : %s -{0}"
int main(int argc,char** argv)
{
int rt = -1 ;
const int r = (argc > 1) ? atoi(&argv[1][1]) : -1;
switch (r)
{
case 0:
rt = at7100(argc,argv) ; break;
default:
error_box(usage, argv[0]) ; break;
}
return rt;
}

7
at/at7.h Executable file
View File

@ -0,0 +1,7 @@
#ifndef __AT7_H
#define __AT7_H
int at7100(int argc, char* argv[]);
#endif // __AT7_H

11
at/at7.url Executable file
View File

@ -0,0 +1,11 @@
#define APPNAME AVIS
#define QAPPNAME "AVIS"
#define LIBDIR f:\xvt.403\win_x86\ptk\lib
#define QFIRMNAME "AGA Informatica S.r.l."
#include <default.url>
/* at7 -0 sistema CAP*/
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"

117
at/at7100.cpp Executable file
View File

@ -0,0 +1,117 @@
#include <mask.h>
#include <printapp.h>
#include <tabutil.h>
#include <utility.h>
#include "at7.h"
#include "lf.h" // se non lo metto non riesco a usare gli LF
// nomi dei campi
#include "soggetti.h"
#define ALIAS_LCPD 100
#define ALIAS_LCPR 200
#define ALIAS_COMD 300
#define ALIAS_COMR 400
class TCAP_app : public TPrintapp
{
TMask* _msk;
TRelation* _rel;
int _cur;
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter);
public:
TCAP_app() {}
};
HIDDEN inline TCAP_app& app() { return (TCAP_app&) main_app(); }
bool TCAP_app::preprocess_page(int file, int counter)
{
bool rew = FALSE;
TString16 cap;
TString16 loc;
TString16 com;
TRectype& recsog = current_cursor()->curr();
cap = recsog.get(SOG_DOM_CAP);
com = recsog.get(SOG_DOM_CODCOM);
if (cap.empty() && com.not_empty())
{
loc = recsog.get(SOG_DOM_CODLOC);
if (loc.empty())
cap = current_cursor()->file(-ALIAS_COMD).get("CAPCOM");
else
cap = current_cursor()->file(-ALIAS_LCPD).get("S6");
recsog.put(SOG_DOM_CAP, cap);
rew = TRUE;
}
cap = recsog.get(SOG_RES_CAP);
com = recsog.get(SOG_RES_CODCOM);
if (cap.empty() && com.not_empty())
{
loc = recsog.get(SOG_RES_CODLOC);
if (loc.empty())
cap = current_cursor()->file(-ALIAS_COMR).get("CAPCOM");
else
cap = current_cursor()->file(-ALIAS_LCPR).get("S6");
recsog.put(SOG_RES_CAP, cap);
rew = TRUE;
}
if (rew)
current_cursor()->file().rewrite();
return rew;
}
void TCAP_app::set_page(int file, int cnt)
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_NOME));
}
bool TCAP_app::set_print(int)
{
KEY tasto;
tasto = _msk->run();
if (tasto == K_ENTER)
{
reset_files();
add_file(LF_SOGGETTI);
reset_print();
return TRUE;
}
else
return FALSE;
}
bool TCAP_app::user_create()
{
_msk = new TMask("at7100a");
_rel = new TRelation(LF_SOGGETTI);
_rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCPD);
_rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,0,ALIAS_COMD);
_rel->add("LCP", "CODTAB==RES_CODLOC",1,0,ALIAS_LCPR);
_rel->add(LF_COMUNI, "COM==RES_CODCOM",1,0,ALIAS_COMR);
_cur = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
return TRUE;
}
bool TCAP_app::user_destroy()
{
delete _rel;
delete _msk;
return TRUE;
}
int at7100(int argc, char* argv[])
{
TCAP_app a;
a.run(argc, argv, "Aggiornamento CAP su indirizzi");
return 0;
}

15
at/at7100a.uml Executable file
View File

@ -0,0 +1,15 @@
#include "lf.h"
PAGE "Aggiornamento CAP" -1 -1 78 20
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 14 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 14 ""
END
ENDPAGE
ENDMASK

117
at/at7200.cpp Executable file
View File

@ -0,0 +1,117 @@
#include <mask.h>
#include <printapp.h>
#include <tabutil.h>
#include <utility.h>
#include "at7.h"
#include "lf.h" // se non lo metto non riesco a usare gli LF
// nomi dei campi
#include "soggetti.h"
#include "donaz.h"
#include "contsan.h"
#define ALIAS_TDN 100
#define ALIAS_TCS 200
class TRiordina_app : public TPrintapp
{
TMask* _msk;
TRelation* _rel;
int _cur;
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual bool set_print(int m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter);
public:
TRiordina_app() {}
};
HIDDEN inline TRiordina_app& app() { return (TRiordina_app&) main_app(); }
bool TRiordina_app::preprocess_page(int file, int counter)
{
bool rew = FALSE;
TString16 cap;
TString16 loc;
TString16 com;
TRectype& recsog = current_cursor()->curr();
cap = recsog.get(SOG_DOM_CAP);
com = recsog.get(SOG_DOM_CODCOM);
if (cap.empty() && com.not_empty())
{
loc = recsog.get(SOG_DOM_CODLOC);
if (loc.empty())
cap = current_cursor()->file(-ALIAS_COMD).get("CAPCOM");
else
cap = current_cursor()->file(-ALIAS_LCPD).get("S6");
recsog.put(SOG_DOM_CAP, cap);
rew = TRUE;
}
cap = recsog.get(SOG_RES_CAP);
com = recsog.get(SOG_RES_CODCOM);
if (cap.empty() && com.not_empty())
{
loc = recsog.get(SOG_RES_CODLOC);
if (loc.empty())
cap = current_cursor()->file(-ALIAS_COMR).get("CAPCOM");
else
cap = current_cursor()->file(-ALIAS_LCPR).get("S6");
recsog.put(SOG_RES_CAP, cap);
rew = TRUE;
}
if (rew)
current_cursor()->file().rewrite();
return rew;
}
void TCAP_app::set_page(int file, int cnt)
{
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########"));
set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_NOME));
}
bool TCAP_app::set_print(int)
{
KEY tasto;
tasto = _msk->run();
if (tasto == K_ENTER)
{
reset_files();
add_file(LF_SOGGETTI);
reset_print();
return TRUE;
}
else
return FALSE;
}
bool TCAP_app::user_create()
{
_msk = new TMask("at7200a");
_rel = new TRelation(LF_SOGGETTI);
_rel->add("TDN", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCPD);
_rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,0,ALIAS_COMD);
_rel->add("LCP", "CODTAB==RES_CODLOC",1,0,ALIAS_LCPR);
_rel->add(LF_COMUNI, "COM==RES_CODCOM",1,0,ALIAS_COMR);
_cur = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
return TRUE;
}
bool TCAP_app::user_destroy()
{
delete _rel;
delete _msk;
return TRUE;
}
int at7200(int argc, char* argv[])
{
TRiordina_app a;
a.run(argc, argv, "Riordina donazioni e controlli");
return 0;
}

15
at/at7200a.uml Executable file
View File

@ -0,0 +1,15 @@
#include "lf.h"
PAGE "Riordina donazioni e controlli" -1 -1 78 20
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 14 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 14 ""
END
ENDPAGE
ENDMASK

View File

@ -1,118 +1,175 @@
USE 90
JOIN 13 INTO COM==DOM_CODCOM
JOIN LCP ALIAS 100 INTO CODTAB==DOM_CODLOC
END
DESCRIPTION
BEGIN
90->* "Soggetti Sezioni AVIS"
13->* "COMUNI"
LCP->* "Località postali"
END
GENERAL
BEGIN
OFFSET 0 0
FONT "Arial"
SIZE 12
GRID ""
END
SECTION BODY ODD 9
STRINGA 1 25
BEGIN
KEY "Cognome"
FIELD 90->COGNOME
PROMPT 0 0 ""
FLAGS "H"
MESSAGE RESET,3|COPY,3
END
STRINGA 2 25
BEGIN
KEY "Nome"
FIELD 90->NOME
PROMPT 0 0 ""
FLAGS "H"
MESSAGE APPEND,3
END
STRINGA 3 33 2
BEGIN
KEY "Cognome e nome"
PROMPT 1 1 ""
END
STRINGA 4 33 2
BEGIN
KEY "Indirizzo"
PROMPT 1 3 ""
FIELD 90->DOM_INDIR
END
STRINGA 5 4
BEGIN
KEY "Codice localita'"
PROMPT 0 0 ""
FLAG "H"
FIELD 90->DOM_CODLOC
MESSAGE ENABLE,1@|DISABLE,2@
MESSAGE EMPTY ENABLE,2@|DISABLE,1@
END
STRINGA 6 5
BEGIN
KEY "CAP loc."
PROMPT 1 5 ""
FIELD 100@->S6
GROUP 1
END
STRINGA 7 30
BEGIN
KEY "Localita'"
PROMPT 0 0 ""
FIELD 100@->S0
GROUP 1
FLAG "H"
MESSAGE RESET,11|COPY,11
END
STRINGA 8 5
BEGIN
KEY "CAP"
PROMPT 1 5 ""
FIELD 13->CAPCOM
FLAG "D"
GROUP 2
END
STRINGA 9 50
BEGIN
KEY "Comune"
PROMPT 0 0 ""
FIELD 13->DENCOM
GROUP 2
FLAG "HD"
MESSAGE RESET,11|COPY,11
END
STRINGA 10 5
BEGIN
KEY "Provincia"
PROMPT 0 0 ""
FIELD 13->PROVCOM
FLAG "H"
MESSAGE APPEND,11
END
STRINGA 11 27 2
BEGIN
KEY "Loc./Com. e Prov."
PROMPT 7 5 ""
END
END
END
USE 90
JOIN 13 INTO COM==DOM_CODCOM
JOIN LCP ALIAS 100 INTO CODTAB==DOM_CODLOC
END
DESCRIPTION
BEGIN
90->* "Soggetti Sezioni AVIS"
13->* "COMUNI"
100@->* "Localita' postali"
END
GENERAL
BEGIN
OFFSET 0 0
FONT "Roman"
SIZE 12
GRID ""
END
SECTION BODY ODD 24
STRINGA 1 25
BEGIN
KEY "Cognome"
FIELD 90->COGNOME
PROMPT 0 0 ""
FLAGS "H"
MESSAGE RESET,3|COPY,3
END
STRINGA 2 25
BEGIN
KEY "Nome"
FIELD 90->NOME
PROMPT 0 0 ""
FLAGS "H"
MESSAGE APPEND,3
END
STRINGA 3 33 2
BEGIN
KEY "Cognome e nome"
PROMPT 32 13 ""
END
STRINGA 4 33 2
BEGIN
KEY "Indirizzo"
FIELD 90->DOM_INDIR
PROMPT 32 15 ""
END
STRINGA 5 4
BEGIN
KEY "Codice localita'"
FIELD 90->DOM_CODLOC
PROMPT 0 0 ""
FLAGS "H"
END
STRINGA 6 5
BEGIN
KEY "CAP"
FIELD 100@->S6
FIELD 13->CAPCOM
PROMPT 32 17 ""
END
STRINGA 7 30
BEGIN
KEY "Denominazione localita' o comune"
FIELD 100@->S0
FIELD 13->DENCOM
PROMPT 0 0 ""
FLAGS "H"
MESSAGE RESET,9|COPY,9
END
STRINGA 8 5
BEGIN
KEY "Provincia"
FIELD 13->PROVCOM
PROMPT 0 0 ""
FLAGS "H"
MESSAGE APPEND,9
END
STRINGA 9 27 2
BEGIN
KEY "Loc./Com. e Prov."
PROMPT 38 17 ""
END
STRINGA 10 25
BEGIN
KEY "Invito per"
PROMPT 3 9 ""
END
STRINGA 11 25
BEGIN
KEY "Data convocazione"
PROMPT 3 12 ""
END
STRINGA 12 25
BEGIN
KEY "Presso: riga 1"
PROMPT 3 14 ""
END
STRINGA 13 25
BEGIN
KEY "Presso: riga 2"
PROMPT 3 15 ""
END
STRINGA 14 25
BEGIN
KEY "Presso: riga 3"
PROMPT 3 16 ""
END
STRINGA 15 25
BEGIN
KEY "Presso: riga 4"
PROMPT 3 17 ""
END
STRINGA 16 14
BEGIN
KEY "Orario"
PROMPT 14 19 ""
END
STRINGA 17 10
BEGIN
KEY "Data cartolina"
PROMPT 18 21 ""
END
STRINGA 18 25
BEGIN
KEY "Note"
PROMPT 3 23 ""
END
STRINGA 19 20
BEGIN
KEY "Intestazione 1"
PROMPT 15 4 ""
END
STRINGA 20 20
BEGIN
KEY "Intestazione 2"
PROMPT 15 5 ""
END
STRINGA 21 20
BEGIN
KEY "Intestazione 3"
PROMPT 15 6 ""
END
STRINGA 22 20
BEGIN
KEY "Intestazione 4"
PROMPT 15 7 ""
END
END
END

View File

@ -1,118 +1,97 @@
USE 90
JOIN 13 INTO COM==DOM_CODCOM
JOIN LCP ALIAS 100 INTO CODTAB==DOM_CODLOC
END
DESCRIPTION
BEGIN
90->* "Soggetti Sezioni AVIS"
13->* "COMUNI"
LCP->* "Località postali"
END
GENERAL
BEGIN
OFFSET 0 0
FONT "Arial"
SIZE 12
GRID ""
END
SECTION BODY ODD 9
STRINGA 1 25
BEGIN
KEY "Cognome"
FIELD 90->COGNOME
PROMPT 0 0 ""
FLAGS "H"
MESSAGE RESET,3|COPY,3
END
STRINGA 2 25
BEGIN
KEY "Nome"
FIELD 90->NOME
PROMPT 0 0 ""
FLAGS "H"
MESSAGE APPEND,3
END
STRINGA 3 33 2
BEGIN
KEY "Cognome e nome"
PROMPT 1 1 ""
END
STRINGA 4 33 2
BEGIN
KEY "Indirizzo"
PROMPT 1 3 ""
FIELD 90->DOM_INDIR
END
STRINGA 5 4
BEGIN
KEY "Codice localita'"
PROMPT 0 0 ""
FLAG "H"
FIELD 90->DOM_CODLOC
MESSAGE ENABLE,1@|DISABLE,2@
MESSAGE EMPTY ENABLE,2@|DISABLE,1@
END
STRINGA 6 5
BEGIN
KEY "CAP loc."
PROMPT 1 5 ""
FIELD 100@->S6
GROUP 1
END
STRINGA 7 30
BEGIN
KEY "Localita'"
PROMPT 0 0 ""
FIELD 100@->S0
GROUP 1
FLAG "H"
MESSAGE RESET,11|COPY,11
END
STRINGA 8 5
BEGIN
KEY "CAP"
PROMPT 1 5 ""
FIELD 13->CAPCOM
FLAG "D"
GROUP 2
END
STRINGA 9 50
BEGIN
KEY "Comune"
PROMPT 0 0 ""
FIELD 13->DENCOM
GROUP 2
FLAG "HD"
MESSAGE RESET,11|COPY,11
END
STRINGA 10 5
BEGIN
KEY "Provincia"
PROMPT 0 0 ""
FIELD 13->PROVCOM
FLAG "H"
MESSAGE APPEND,11
END
STRINGA 11 27 2
BEGIN
KEY "Loc./Com. e Prov."
PROMPT 7 5 ""
END
END
END
USE 90
JOIN 13 INTO COM==DOM_CODCOM
JOIN LCP ALIAS 100 INTO CODTAB==DOM_CODLOC
END
DESCRIPTION
BEGIN
90->* "Soggetti Sezioni AVIS"
13->* "COMUNI"
100@->* "Localita' postali"
END
GENERAL
BEGIN
OFFSET 0 0
FONT "Arial"
SIZE 12
GRID ""
END
SECTION BODY ODD 9
STRINGA 1 25
BEGIN
KEY "Cognome"
FIELD 90->COGNOME
PROMPT 0 0 ""
FLAGS "H"
MESSAGE RESET,3|COPY,3
END
STRINGA 2 25
BEGIN
KEY "Nome"
FIELD 90->NOME
PROMPT 0 0 ""
FLAGS "H"
MESSAGE APPEND,3
END
STRINGA 3 33 2
BEGIN
KEY "Cognome e nome"
PROMPT 1 1 ""
END
STRINGA 4 33 2
BEGIN
KEY "Indirizzo"
FIELD 90->DOM_INDIR
PROMPT 1 3 ""
END
STRINGA 5 4
BEGIN
KEY "Codice localita'"
FIELD 90->DOM_CODLOC
PROMPT 0 0 ""
FLAGS "H"
END
STRINGA 6 5
BEGIN
KEY "CAP"
FIELD 100@->S6
FIELD 13->CAPCOM
PROMPT 1 5 ""
END
STRINGA 7 30
BEGIN
KEY "Denominazione localita' o comune"
FIELD 100@->S0
FIELD 13->DENCOM
PROMPT 0 0 ""
FLAGS "H"
MESSAGE RESET,9|COPY,9
END
STRINGA 8 5
BEGIN
KEY "Provincia"
FIELD 13->PROVCOM
PROMPT 0 0 ""
FLAGS "H"
MESSAGE APPEND,9
END
STRINGA 9 27 2
BEGIN
KEY "Loc./Com. e Prov."
PROMPT 7 5 ""
END
END
END

836
at/at_pag02.frm Executable file
View File

@ -0,0 +1,836 @@
USE 90
JOIN CTD ALIAS 100 INTO CODTAB==CATDON
JOIN CTN ALIAS 110 INTO CODTAB==CATNOND1
JOIN CTN ALIAS 120 INTO CODTAB==CATNOND2
JOIN TCS ALIAS 200 INTO CODTAB==STATO
JOIN LDN ALIAS 300 INTO CODTAB==PUNTORACC
JOIN LCP ALIAS 400 INTO CODTAB==RES_CODLOC
JOIN LCP ALIAS 410 INTO CODTAB==DOM_CODLOC
JOIN 13 ALIAS 500 INTO COM==RES_CODCOM
JOIN 13 ALIAS 510 INTO COM==DOM_CODCOM
JOIN 13 ALIAS 520 INTO COM==COMNASC
JOIN 96 INTO CODSEZ==CODSEZ
JOIN 97 INTO CODMED==CODMED
END
DESCRIPTION
BEGIN
90->* "Soggetti Sezioni AVIS"
CTD->* "Categorie donatori"
CTN->* "Categorie non donatori"
TCS->* "Tipi/Esiti controlli sanitari"
LDN->* "Luoghi di donazione/Punti di raccolta"
LCP->* "Localita' postali"
13->* "COMUNI"
96->* "Sezioni AVIS"
97->* "Medici"
END
GENERAL
BEGIN
OFFSET 0 0
FONT "Arial"
SIZE 12
GRID ""
END
SECTION BODY ODD 33
NUMERO 1 15
BEGIN
KEY "Codice"
FIELD 90->CODICE
PROMPT 1 1 "Codice "
END
STRINGA 2 33
BEGIN
KEY "Cognome"
FIELD 90->COGNOME
PROMPT 17 1 "Cognome "
END
STRINGA 3 30
BEGIN
KEY "Nome"
FIELD 90->NOME
PROMPT 52 1 "Nome "
END
DATA 4 18
BEGIN
KEY "Data nascita"
FIELD 90->DATANASC
PROMPT 1 2 "Nato il "
END
STRINGA 5 30
BEGIN
KEY "Comune di nascita"
PROMPT 0 0 ""
FIELD 520@->DENCOM
FLAG "H"
MESSAGE RESET,7|COPY,7
END
STRINGA 6 5
BEGIN
KEY "Provincia di nascita"
PROMPT 0 0 ""
FIELD 520@->PROVCOM
FLAG "H"
MESSAGE APPEND,7
END
STRINGA 7 40
BEGIN
KEY "Comune e provincia di nascita"
PROMPT 20 2 "Nato a "
END
STRINGA 8 6
BEGIN
KEY "Testo"
PROMPT 62 2 "Sesso "
END
LISTA 9
BEGIN
KEY "Sesso"
PROMPT 68 2 "Sesso "
FIELD 90->SESSO
ITEM "0|Sconosciuto"
ITEM "1|Maschio"
ITEM "2|Femmina"
ITEM "9|Non specif."
END
STRINGA 10 7
BEGIN
KEY "Codice sezione"
FIELD 90->CODSEZ
PROMPT 1 4 "Sez. "
END
STRINGA 11 25
BEGIN
KEY "Denominazione sezione"
FIELD 96->DENSEZ
PROMPT 9 4 ""
END
STRINGA 12 7
BEGIN
KEY "Codice sottog."
FIELD 90->CODSOT
PROMPT 41 4 "Sot. "
END
STRINGA 13 25
BEGIN
KEY "Denominazione sottog."
FIELD 96->DENSOT
PROMPT 49 4 ""
END
STRINGA 14 7
BEGIN
KEY "Categoria don."
FIELD 90->CATDON
PROMPT 1 5 "Cat. "
END
STRINGA 15 25
BEGIN
KEY "Descrizione categoria"
FIELD 100@->S0
PROMPT 9 5 ""
END
DATA 16 21
BEGIN
KEY "Data iscrizione"
FIELD 90->DATAISC
PROMPT 36 5 "Data iscr. "
END
DATA 17 20
BEGIN
KEY "Data dimissione"
FIELD 90->DATADIM
PROMPT 59 5 "Data dim. "
END
STRINGA 18 16
BEGIN
KEY "Tessera AVIS"
FIELD 90->TESSAVIS
PROMPT 1 7 "Tess.AVIS "
END
STRINGA 19 13
BEGIN
KEY "Codice Centro Trasfusionale"
FIELD 90->CODCT
PROMPT 18 7 "Cod.CT "
END
STRINGA 20 16
BEGIN
KEY "Cartella clinica"
FIELD 90->CODCL
PROMPT 33 7 "Car.clin. "
END
STRINGA 21 28
BEGIN
KEY "Documento di identita'"
FIELD 90->DOCID
PROMPT 51 7 "Doc.id. "
END
STRINGA 22 26
BEGIN
KEY "Codice fiscale"
FIELD 90->CF
PROMPT 1 8 "Cod.fisc. "
END
STRINGA 23 10
BEGIN
KEY "Testo"
PROMPT 1 10 "Domicilio:"
END
STRINGA 24 30
BEGIN
KEY "Domicilio: indirizzo"
FIELD 90->DOM_INDIR
PROMPT 1 11 ""
MESSAGE RESET,30
END
STRINGA 25 4
BEGIN
KEY "Domicilio: codice localita'"
FIELD 90->DOM_CODLOC
PROMPT 0 0 ""
FLAG "H"
END
STRINGA 26 5
BEGIN
KEY "Domicilio: CAP"
FIELD 410@->S6
FIELD 510@->CAPCOM
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,30
END
STRINGA 27 30
BEGIN
KEY "Domicilio: localita'"
FIELD 410@->S0
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,30
END
STRINGA 28 50
BEGIN
KEY "Domicilio: comune"
FIELD 510@->DENCOM
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,30
END
STRINGA 29 5
BEGIN
KEY "Domicilio: provincia"
FIELD 510@->PROVCOM
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,30
END
STRINGA 30 39 3
BEGIN
KEY "Domicilio: Loc/Com/Prov"
PROMPT 1 12 ""
END
STRINGA 31 10
BEGIN
KEY "Testo"
PROMPT 41 10 "Residenza:"
END
STRINGA 32 30
BEGIN
KEY "Residenza: indirizzo"
FIELD 90->RES_INDIR
PROMPT 41 11 ""
MESSAGE RESET,38
END
STRINGA 33 4
BEGIN
KEY "Residenza: codice localita'"
FIELD 90->RES_CODLOC
PROMPT 0 0 ""
FLAG "H"
END
STRINGA 34 5
BEGIN
KEY "Residenza: CAP"
FIELD 400@->S6
FIELD 500@->CAPCOM
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,38
END
STRINGA 35 30
BEGIN
KEY "Residenza: localita'"
FIELD 400@->S0
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,38
END
STRINGA 36 50
BEGIN
KEY "Residenza: comune"
FIELD 500@->DENCOM
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,38
END
STRINGA 37 5
BEGIN
KEY "Residenza: provincia"
FIELD 500@->PROVCOM
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,38
END
STRINGA 38 39 3
BEGIN
KEY "Residenza: Loc/Com/Prov"
PROMPT 41 12 ""
END
STRINGA 39 23
BEGIN
KEY "Telefono abitazione"
FIELD 90->TELABI
PROMPT 1 15 "Tel.abi. "
END
STRINGA 40 23
BEGIN
KEY "Telefono lavoro"
FIELD 90->TELLAV
PROMPT 25 15 "Tel.lav. "
END
STRINGA 41 25
BEGIN
KEY "Telefono altro"
FIELD 90->TELALT
PROMPT 49 15 "Tel.altro "
END
STRINGA 42
BEGIN
KEY "Testo"
PROMPT 1 16 "Escluso "
END
LISTA 43
BEGIN
KEY "Esclusione"
FIELD 90->ESCLUSO
ITEM " | "
ITEM "TI|T. indeterminato"
ITEM "TD|T. determinato"
PROMPT 10 16 "Escluso "
END
DATA 44 18
BEGIN
KEY "Data termine esclusione"
FIELD 90->TERMESCL
PROMPT 27 16 "Termine "
END
STRINGA 45 35
BEGIN
KEY "Motivo esclusione"
FIELD 90->MOTESCL
PROMPT 46 16 "Per "
END
STRINGA 46 26
BEGIN
KEY "Descrizione stato"
FIELD 200@->S3
PROMPT 1 17 "Stato "
END
DATA 47 15
BEGIN
KEY "Data stato"
FIELD 90->DATASTATO
PROMPT 28 17 "Data "
END
STRINGA 48 11
BEGIN
KEY "Tipo ultima idoneita'"
FIELD 90->TIPOULTID
PROMPT 45 17 "Ult. id. "
END
DATA 49 10
BEGIN
KEY "Data ultima idoneita'"
FIELD 90->DATAULTID
PROMPT 58 17 ""
END
STRINGA 50 2
BEGIN
KEY "Idoneita' alla donazione 1"
FIELD 90->IDON1
PROMPT 70 17 ""
END
STRINGA 51 2
BEGIN
KEY "Idoneita' alla donazione 2"
FIELD 90->IDON2
PROMPT 73 17 ""
END
STRINGA 52 2
BEGIN
KEY "Idoneita' alla donazione 3"
FIELD 90->IDON3
PROMPT 76 17 ""
END
STRINGA 53 2
BEGIN
KEY "Idoneita' alla donazione 4"
FIELD 90->IDON4
PROMPT 79 17 ""
END
STRINGA 54
BEGIN
KEY "Testo"
PROMPT 1 19 "Situazione donazioni:"
END
NUMERO 55 8
BEGIN
KEY "Totale donazioni"
FIELD 90->TOTDON
PROMPT 1 20 "Tot. "
END
STRINGA 56 11
BEGIN
KEY "Tipo ultima donazione"
FIELD 90->TIPOULTDON
PROMPT 1 21 "Ult.don. "
END
DATA 57 10
BEGIN
KEY "Data ultima donazione"
FIELD 90->DATAULTDON
PROMPT 13 21 ""
END
STRINGA 58 13
BEGIN
KEY "Testo"
PROMPT 26 20 "Donazioni SI:"
END
STRINGA 59 13
BEGIN
KEY "Testo"
PROMPT 26 21 "Donazioni AF:"
END
STRINGA 60 4
BEGIN
KEY "Testo"
PROMPT 42 19 "Tot."
END
STRINGA 61 10
BEGIN
KEY "Testo"
PROMPT 48 19 "Ultima"
END
STRINGA 62 4
BEGIN
KEY "Testo"
PROMPT 60 19 "Int."
END
STRINGA 63 10
BEGIN
KEY "Testo"
PROMPT 66 19 "Prossima"
END
NUMERO 64 3
BEGIN
KEY "Totale donazioni SI"
FIELD 90->TOTDONSI
PROMPT 42 20 ""
END
NUMERO 65 3
BEGIN
KEY "Totale donazioni AF"
FIELD 90->TOTDONAF
PROMPT 42 21 ""
END
DATA 66 10
BEGIN
KEY "Data ultima donazione SI"
FIELD 90->DATAULTSI
PROMPT 48 20 ""
END
DATA 67 10
BEGIN
KEY "Data ultima donazione AF"
FIELD 90->DATAULTAF
PROMPT 48 21 ""
END
NUMERO 68 4
BEGIN
KEY "Intervallo SI"
FIELD 90->INTSI
PROMPT 60 20 ""
END
NUMERO 69 4
BEGIN
KEY "Intervallo AF"
FIELD 90->INTAF
PROMPT 60 21 ""
END
DATA 70 10
BEGIN
KEY "Data prossima SI"
FIELD 90->DATAPROSSI
PROMPT 66 20 ""
END
DATA 71 10
BEGIN
KEY "Data prossima AF"
FIELD 90->DATAPROSAF
PROMPT 66 21 ""
END
STRINGA 72 14
BEGIN
KEY "Gruppo AB0"
FIELD 90->GRUPPOAB0
PROMPT 1 23 "Gruppo AB0 "
END
STRINGA 73 12
BEGIN
KEY "Rh/AntiD"
FIELD 90->RHANTID
PROMPT 16 23 "Rh/AntiD "
END
STRINGA 74 8
BEGIN
KEY "Kell"
FIELD 90->KELL
PROMPT 30 23 "Kell "
END
STRINGA 75 18
BEGIN
KEY "Fenotipo Rh"
FIELD 90->FENOTIPORH
PROMPT 40 23 "Fenotipo Rh "
END
STRINGA 76 12
BEGIN
KEY "Du"
FIELD 90->DU
PROMPT 60 23 "Du "
END
NUMERO 77 13
BEGIN
KEY "Codice medico"
FIELD 90->CODMED
PROMPT 1 24 "Medico "
END
STRINGA 78 25
BEGIN
KEY "Cognome medico"
FIELD 97->COGNOME
FLAGS "H"
MESSAGE RESET,80|COPY,80
END
STRINGA 79 25
BEGIN
KEY "Nome medico"
FIELD 97->NOME
FLAGS "H"
MESSAGE APPEND,80
END
STRINGA 80 51
BEGIN
KEY "Cognome e nome medico"
PROMPT 15 24 ""
END
STRINGA 81 10
BEGIN
KEY "Testo"
PROMPT 1 25 "Mod.conv. "
END
LISTA 83 22
BEGIN
KEY "Modalita' di convocazione"
FIELD 90->MODCONV
PROMPT 11 25 ""
ITEM " |"
ITEM "PO|Postale"
ITEM "T1|Tel. abitaz."
ITEM "T2|Tel. lavoro"
ITEM "T3|Tel. altro"
ITEM "TE|Telefonica"
ITEM "IN|Indifferente"
END
STRINGA 84 19
BEGIN
KEY "Codice punto di racolta"
FIELD 90->PUNTORACC
PROMPT 35 25 "Punto di racc. "
END
STRINGA 85 25
BEGIN
KEY "Descrizione punto di raccolta"
FIELD 300@->S0
PROMPT 56 25 ""
END
STRINGA 86 27
BEGIN
KEY "Testo"
PROMPT 1 26 "Giorni pref.: L M M G V S D"
END
STRINGA 87 13
BEGIN
KEY "Testo"
PROMPT 1 27 " Donazione"
END
STRINGA 88 2
BEGIN
KEY "Lu"
FIELD 90->GIOPREDON[1,1]
PROMPT 15 27 ""
END
STRINGA 89 2
BEGIN
KEY "Ma"
FIELD 90->GIOPREDON[2,2]
PROMPT 17 27 ""
END
STRINGA 90 2
BEGIN
KEY "Me"
FIELD 90->GIOPREDON[3,3]
PROMPT 19 27 ""
END
STRINGA 91 2
BEGIN
KEY "Gi"
FIELD 90->GIOPREDON[4,4]
PROMPT 21 27 ""
END
STRINGA 92 2
BEGIN
KEY "Ve"
FIELD 90->GIOPREDON[5,5]
PROMPT 23 27 ""
END
STRINGA 93 2
BEGIN
KEY "Sa"
FIELD 90->GIOPREDON[6,6]
PROMPT 25 27 ""
END
STRINGA 94 2
BEGIN
KEY "Do"
FIELD 90->GIOPREDON[7,7]
PROMPT 27 27 ""
END
STRINGA 95 13
BEGIN
KEY "Testo"
PROMPT 1 28 " Controlli"
END
STRINGA 96 2
BEGIN
KEY "Lu"
FIELD 90->GIOPRECON[1,1]
PROMPT 15 28 ""
END
STRINGA 97 2
BEGIN
KEY "Ma"
FIELD 90->GIOPRECON[2,2]
PROMPT 17 28 ""
END
STRINGA 98 2
BEGIN
KEY "Me"
FIELD 90->GIOPRECON[3,3]
PROMPT 19 28 ""
END
STRINGA 99 2
BEGIN
KEY "Gi"
FIELD 90->GIOPRECON[4,4]
PROMPT 21 28 ""
END
STRINGA 100 2
BEGIN
KEY "Ve"
FIELD 90->GIOPRECON[5,5]
PROMPT 23 28 ""
END
STRINGA 101 2
BEGIN
KEY "Sa"
FIELD 90->GIOPRECON[6,6]
PROMPT 25 28 ""
END
STRINGA 102 2
BEGIN
KEY "Do"
FIELD 90->GIOPRECON[7,7]
PROMPT 27 28 ""
END
STRINGA 103 10
BEGIN
KEY "Testo"
PROMPT 33 26 "Cond.occ. "
END
LISTA 104 19
BEGIN
KEY "Condizione occupazionale"
FIELD 90->CONDOCC
ITEM " |"
ITEM "01|Occupato"
ITEM "02|Disoccupato"
ITEM "03|In cerca di 1^ occ."
ITEM "04|Pensionato"
ITEM "05|Casalinga"
ITEM "06|Studente"
ITEM "07|Religioso"
ITEM "99|Altro"
PROMPT 44 26 ""
END
STRINGA 105 10
BEGIN
KEY "Testo"
PROMPT 33 27 "Pos.prof. "
END
LISTA 106 19
BEGIN
KEY "Posizione professionale"
FIELD 90->POSPROF
ITEM " |"
ITEM "01|Imprend./Profess."
ITEM "02|Lavoratore autonomo"
ITEM "03|Coadiuvante"
ITEM "04|Impiegato/Dirigente"
ITEM "05|Altro lav. dip."
ITEM "99|Altro"
PROMPT 44 27 ""
END
STRINGA 107 10
BEGIN
KEY "Testo"
PROMPT 33 28 "Ramo att. "
END
LISTA 108 30
BEGIN
KEY "Ramo di attivita'"
FIELD 90->RAMOATT
ITEM " |"
ITEM "01|Agricoltura e associati"
ITEM "02|Industria costruzioni"
ITEM "03|Industria manifatturiera"
ITEM "04|Energia, acqua, gas"
ITEM "05|Commercio"
ITEM "06|Pubblica amministrazione"
ITEM "07|Trasporti e comunicazioni"
ITEM "08|Credito e assicurazioni"
ITEM "09|Altri servizi"
ITEM "99|Altro"
PROMPT 44 28 ""
END
END

File diff suppressed because it is too large Load Diff

View File

@ -58,9 +58,10 @@ char modstato_tcs(TString16 tipo)
void con_reord(TRectype& soggetto, TRecord_array* controlli)
{
TDate data;
TString16 tipo;
TDate data, prossdata;
TString16 tipo, prosstipo;
char modstato = ' ';
int r_modifica = -1; // eventuale ultima riga di modifica id.
int r_ultid = -1; // riga ultima idoneità
int r_ultstato = -1; // riga ultimo stato valido
char penultstato = ' '; // penultimo stato valido
@ -72,12 +73,20 @@ void con_reord(TRectype& soggetto, TRecord_array* controlli)
const TRectype& row = controlli->row(r);
tipo = row.get(CON_TIPOCON);
modstato = modstato_tcs(tipo);
if (modstato == 'M')
{
if (r_modifica == -1)
r_modifica = r;
}
else
{
if ((modstato != ' ') && (r_ultstato == -1))
r_ultstato = r;
else if ((modstato != ' ') && (penultstato == ' '))
penultstato = modstato;
if ((modstato == 'I') && (r_ultid == -1))
r_ultid = r;
}
}
TString16 id1 = ' ';
TString16 id2 = ' ';
@ -86,11 +95,13 @@ void con_reord(TRectype& soggetto, TRecord_array* controlli)
int intsi = 0;
int intaf = 0;
tipo = ' ';
prosstipo = ' ';
data = TDate(NULLDATE);
prossdata = TDate(NULLDATE);
if (r_ultid != -1)
{
const TRectype& row = controlli->row(r_ultid);
const TRectype& row = controlli->row(r_ultid);
data = TDate(row.get(CON_DATACON));
tipo = row.get(CON_TIPOCON);
id1 = row.get(CON_IDON1);
@ -99,6 +110,16 @@ void con_reord(TRectype& soggetto, TRecord_array* controlli)
id4 = row.get(CON_IDON4);
intsi = row.get_int(CON_INTSI);
intaf = row.get_int(CON_INTAF);
if (r_modifica > r_ultid)
{
const TRectype& rowm = controlli->row(r_modifica);
id1 = rowm.get(CON_IDON1);
id2 = rowm.get(CON_IDON2);
id3 = rowm.get(CON_IDON3);
id4 = rowm.get(CON_IDON4);
intsi = rowm.get_int(CON_INTSI);
intaf = rowm.get_int(CON_INTAF);
}
}
soggetto.put(SOG_DATAULTID,data);
soggetto.put(SOG_TIPOULTID,tipo);
@ -115,10 +136,14 @@ void con_reord(TRectype& soggetto, TRecord_array* controlli)
const TRectype& row = controlli->row(r_ultstato);
dataultstato = TDate(row.get(CON_DATACON));
tipo = row.get(CON_TIPOCON);
prosstipo = row.get(CON_PROSSTIPO);
prossdata = TDate(row.get(CON_PROSSDATA));
ultstato = modstato_tcs(tipo);
}
soggetto.put(SOG_STATO,tipo);
soggetto.put(SOG_DATASTATO,dataultstato);
soggetto.put(SOG_PROS_STATO,prosstipo);
soggetto.put(SOG_DATA_PROS,prossdata);
don_datepross(soggetto);
@ -129,6 +154,16 @@ void con_reord(TRectype& soggetto, TRecord_array* controlli)
data = soggetto.get_date(SOG_DATAPROSAF);
if (data < dataultstato) soggetto.put(SOG_DATAPROSAF,dataultstato);
}
if ((penultstato == '1') && (ultstato == 'F'))
{
data = soggetto.get_date(SOG_DATAPROSSI);
if (data < dataultstato) soggetto.put(SOG_DATAPROSSI,dataultstato);
}
if ((penultstato == '2') && (ultstato == 'F'))
{
data = soggetto.get_date(SOG_DATAPROSAF);
if (data < dataultstato) soggetto.put(SOG_DATAPROSAF,dataultstato);
}
}
void don_datepross(TRectype& soggetto)
@ -152,7 +187,7 @@ void don_datepross(TRectype& soggetto)
bool id_af = FALSE; // il soggetto è idoneo per af?
modstato = modstato_tcs(stato);
if (modstato == 'I' || modstato == 'F') // il soggetto è idoneo
if (modstato == 'I' || modstato == 'F' || modstato == '1' || modstato == '2') // il soggetto è idoneo
{
id_si = (is_idon(id1,id2,id3,id4,IDON_SI) && intsi != 0); // il soggetto è idoneo SI
id_af = (is_idon(id1,id2,id3,id4,IDON_AF) && intaf != 0); // il soggetto è idoneo AF
@ -207,6 +242,10 @@ void don_datepross(TRectype& soggetto)
dataaf = soggetto.get_date(SOG_DATAULTID);
}
}
if (modstato == '1')
datasi = NULLDATE;
if (modstato == '2')
dataaf = NULLDATE;
soggetto.put(SOG_DATAPROSSI,datasi);
soggetto.put(SOG_DATAPROSAF,dataaf);
}

View File

@ -1,8 +1,8 @@
0|Menu principale|20
0|Menu principale|
0|Archivi|1
0|Tabelle|2
0|Operazioni periodiche|3
0|Elenchi di soggetti|4
0|Elenchi|4
0|Stampe per convocazioni|5
0|Stampe di controllo|6
0|Stampa tessere associative|at1 -3
@ -11,18 +11,20 @@
1|Soggetti|at0 -0
1|Giornaliero donazioni/controlli|at0 -1
1|Giornaliero controlli|at0 -2
1|Convocazioni Bologna|at0 -3
1|Convocazioni su punto di raccolta|at0 -3
1|Spostamento convocazioni|at0 -4
2|Tabelle|23
2|Sezioni|ba3 -3 at0700a 96
2|Medici|ba3 -3 at0800a 97
2|Gruppi aziendali|ba3 -0 gaz
2|Benemerenze|ba3 -0 bnz
2|Categorie donatori|ba3 -0 ctd
2|Categorie non donatori|ba3 -0 ctn
2|Gruppi aziendali|ba3 -0 gaz
2|Idoneita' alla donazione|ba3 -0 ido
2|Localita' postali|ba3 -0 lcp
2|Luoghi di donazione|ba3 -0 ldn
2|Luoghi di lavoro|ba3 -0 ldl
2|Motivi per controlli sanitari|ba3 -0 mtc
2|Professioni|ba3 -0 prf
2|Tipi di donazione|ba3 -0 tdn
2|Tipi/Esiti controlli sanitari|ba3 -0 tcs
@ -32,32 +34,25 @@
3|Chiusura|at1 -0
3|Attribuzione benemerenze|at1 -1
3|Sblocco sospesi|at1 -2
4|Elenchi di soggetti|22
3|Modifica intervalli di don.|at1 -4
3|Sblocco esclusi|at1 -5
4|Elenchi|22
4|Elenco sospesi|at2 -0
4|Elenco per data di nascita|at2 -1
4|Elenco esclusi|at2 -2
4|Soggetti modificati|at2 -3
4|Elenco idonei|at2 -4
4|Elenco iscritti/dimessi|at2 -5
4|Elenco per categorie|at2 -6
5|Stampe per convocazioni|22
5|Scadenze di donazione|at4 -1
5|Urgenze|at4 -2
5|Convocazioni Parma|at4 -3
5|Scadenze di donazione|at4 -0
5|Urgenze|at4 -1
5|Convocazioni Parma|at4 -2
5|Stampa convocazioni su punto di raccolta|at4 -3
6|Stampe di controllo|25
6|Medici|at6 -0
6|Sezioni|at6 -1
6|Benemerenze|ba3 -1 bnz
6|Categorie donatori|ba3 -1 ctd
6|Categorie non donatori|ba3 -1 ctn
6|Idoneita' alla donazione|ba3 -1 ido
6|Localita' postali|ba3 -1 lcp
6|Luoghi di donazione|ba3 -1 ldn
6|Luoghi di lavoro|ba3 -1 ldl
6|Professioni|ba3 -1 prf
6|Tipi di donazione|ba3 -1 tdn
6|Tipi/Esiti controlli sanitari|ba3 -1 tcs
6|Stati esteri|ba3 -1 %sta
6|Comuni|ba6 -1
6|Donazioni|at6 -2
99|Manutenzione|04
99|Archivi|ba1
99|Utenti|ba1 -3

View File

@ -19,7 +19,7 @@ BEGIN
OUTPUT F_TABBNZ_CODTAB CODTAB
OUTPUT F_TABBNZ_DESCR S0
KEY 1
FLAGS "URZ"
FLAGS "U"
END
STRING F_TABBNZ_DESCR 30

View File

@ -19,7 +19,7 @@ BEGIN
OUTPUT F_TABCTD_CODTAB CODTAB
OUTPUT F_TABCTD_DESCR S0
KEY 1
FLAGS "URZ"
FLAGS "U"
END
STRING F_TABCTD_DESCR 30

View File

@ -19,7 +19,7 @@ BEGIN
OUTPUT F_TABCTN_CODTAB CODTAB
OUTPUT F_TABCTN_DESCR S0
KEY 1
FLAGS "URZ"
FLAGS "U"
END
STRING F_TABCTN_DESCR 30

View File

@ -19,7 +19,7 @@ BEGIN
OUTPUT F_TABGAZ_CODTAB CODTAB
OUTPUT F_TABGAZ_DESCR S0
KEY 1
FLAGS "URZ"
FLAGS "U"
END
STRING F_TABGAZ_DESCR 30

View File

@ -4,7 +4,7 @@ TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Idoneità alla donazione" -1 -1 78 7
PAGE "Idoneita' alla donazione" -1 -1 78 7
STRING F_TABIDO_CODTAB 2
BEGIN
@ -19,14 +19,14 @@ BEGIN
OUTPUT F_TABIDO_CODTAB CODTAB
OUTPUT F_TABIDO_DESCR S0
KEY 1
FLAGS "URZ"
FLAGS "U"
END
STRING F_TABIDO_DESCR 30
BEGIN
PROMPT 2 3 "Descrizione "
FIELD S0
HELP "Inserire la descrizione della idoneità"
HELP "Inserire la descrizione della idoneita'"
USE IDO KEY 2
CHECKTYPE REQUIRED
INPUT S0 F_TABIDO_DESCR
@ -41,7 +41,7 @@ BEGIN
PROMPT 2 5 "Procedura di don. "
FIELD S6
#include "procdon.h"
HELP "Indicare la procedura di donazione collegata alla idoneità"
HELP "Indicare la procedura di donazione collegata alla idoneita'"
END
ENDPAGE

View File

@ -20,7 +20,7 @@ BEGIN
OUTPUT F_TABLCP_CODTAB CODTAB
OUTPUT F_TABLCP_LOCALITA S0
KEY 1
FLAGS "URZ"
FLAGS "U"
END
STRING F_TABLCP_LOCALITA 30

View File

@ -19,7 +19,7 @@ BEGIN
OUTPUT F_TABLDL_CODTAB CODTAB
OUTPUT F_TABLDL_DESCR S0
KEY 1
FLAGS "URZ"
FLAGS "U"
END
STRING F_TABLDL_DESCR 40

View File

@ -1,3 +1,10 @@
#define F_TABLDN_CODTAB 100
#define F_TABLDN_DESCR 101
#define DLG_DEL 105
#define F_TABLDN_INDIR 102
#define F_TABLDN_LOC 103
#define F_TABLDN_COM 104
#define F_TABLDN_DENCOM 105
#define F_TABLDN_DENLOC 106
#define F_TABLDN_PROVCOM 107
#define F_TABLDN_CAPCOM 108
#define DLG_DEL 110

View File

@ -8,33 +8,109 @@ PAGE "Luoghi di donazione" -1 -1 78 7
STRING F_TABLDN_CODTAB 4
BEGIN
PROMPT 2 1 "Codice "
PROMPT 2 1 "Codice "
FIELD CODTAB
HELP "Inserire il codice del luogo di donazione"
USE LDN
CHECKTYPE REQUIRED
INPUT CODTAB F_TABLDN_CODTAB
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@25" S0
DISPLAY "Descrizione@50" S0
OUTPUT F_TABLDN_CODTAB CODTAB
OUTPUT F_TABLDN_DESCR S0
KEY 1
FLAGS "URZ"
FLAGS "U"
END
STRING F_TABLDN_DESCR 25
STRING F_TABLDN_DESCR 50
BEGIN
PROMPT 2 3 "Descrizione "
PROMPT 2 3 "Luogo "
FIELD S0
HELP "Inserire la descrizione del luogo"
USE LDN KEY 2
CHECKTYPE REQUIRED
INPUT S0 F_TABLDN_DESCR
DISPLAY "Descrizione@25" S0
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_TABLDN_CODTAB
KEY 2
END
STRING F_TABLDN_INDIR 50
BEGIN
PROMPT 2 5 "Indirizzo "
FIELD S1
END
STRING F_TABLDN_COM 4
BEGIN
PROMPT 2 6 "Comune "
FIELD S6
FLAGS "U"
USE LF_COMUNI
INPUT STATO ""
INPUT COM F_TABLDN_COM
#include <comdcod.h>
OUTPUT F_TABLDN_COM COM
OUTPUT F_TABLDN_DENCOM DENCOM
OUTPUT F_TABLDN_PROVCOM PROVCOM
OUTPUT F_TABLDN_CAPCOM CAPCOM
CHECKTYPE NORMAL
WARNING "Comune assente"
END
STRING F_TABLDN_DENCOM 48
BEGIN
PROMPT 19 6 ""
USE LF_COMUNI KEY 2
INPUT DENCOM F_TABLDN_DENCOM
#include <comdden.h>
COPY OUTPUT F_TABLDN_COM
CHECKTYPE NORMAL
END
STRING F_TABLDN_LOC 4
BEGIN
PROMPT 2 7 "Localita' "
FIELD S7
FLAGS "U"
USE LCP SELECT S7=#F_TABLDN_COM
INPUT CODTAB F_TABLDN_LOC
DISPLAY "Codice" CODTAB
DISPLAY "Localita'@30" S0
DISPLAY "CAP@5" S6
OUTPUT F_TABLDN_LOC CODTAB
OUTPUT F_TABLDN_DENLOC S0
OUTPUT F_TABLDN_CAPCOM S6
OUTPUT F_TABLDN_COM S7
CHECKTYPE NORMAL
HELP "Codice localit… postale se diversa dal comune"
END
STRING F_TABLDN_DENLOC 30
BEGIN
PROMPT 19 7 ""
USE LCP KEY 2 SELECT S7=#F_TABLDN_COM
INPUT S0 F_TABLDN_DENLOC
DISPLAY "Località@30" S0
DISPLAY "CAP@5" S6
DISPLAY "Codice" CODTAB
COPY OUTPUT F_TABLDN_LOC
CHECKTYPE NORMAL
HELP "Localit… postale se diversa dal comune"
END
STRING F_TABLDN_PROVCOM 5
BEGIN
PROMPT 71 6 ""
FLAGS "D"
END
STRING F_TABLDN_CAPCOM 5
BEGIN
PROMPT 67 7 "CAP "
FLAGS "D"
END
ENDPAGE
ENDMASK

3
at/batbmtc.h Executable file
View File

@ -0,0 +1,3 @@
#define F_TABMTC_CODTAB 100
#define F_TABMTC_DESCR 101
#define DLG_DEL 105

40
at/batbmtc.uml Executable file
View File

@ -0,0 +1,40 @@
#include "batbmtc.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Motivi per controlli sanitari" -1 -1 78 7
STRING F_TABMTC_CODTAB 4
BEGIN
PROMPT 2 1 "Codice "
FIELD CODTAB
HELP "Inserire il codice del motivo"
USE MTC
CHECKTYPE REQUIRED
INPUT CODTAB F_TABMTC_CODTAB
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@25" S0
OUTPUT F_TABMTC_CODTAB CODTAB
OUTPUT F_TABMTC_DESCR S0
KEY 1
FLAGS "U"
END
STRING F_TABMTC_DESCR 25
BEGIN
PROMPT 2 3 "Descrizione "
FIELD S0
HELP "Inserire la descrizione del motivo"
USE MTC KEY 2
CHECKTYPE REQUIRED
INPUT S0 F_TABMTC_DESCR
DISPLAY "Descrizione@25" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_TABMTC_CODTAB
KEY 2
END
ENDPAGE
ENDMASK

View File

@ -19,7 +19,7 @@ BEGIN
OUTPUT F_TABPRF_CODTAB CODTAB
OUTPUT F_TABPRF_DESCR S0
KEY 1
FLAGS "URZ"
FLAGS "U"
END
STRING F_TABPRF_DESCR 40

View File

@ -4,7 +4,7 @@ TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Tipi/Esiti controlli sanitari" -1 -1 78 7
PAGE "Tipi/Esiti controlli sanitari" -1 -1 78 18
STRING F_TABTCS_CODTAB 2
BEGIN
@ -19,7 +19,7 @@ BEGIN
OUTPUT F_TABTCS_CODTAB CODTAB
OUTPUT F_TABTCS_DESCR S0
KEY 1
FLAGS "URZ"
FLAGS "U"
END
STRING F_TABTCS_DESCR 30
@ -36,7 +36,7 @@ BEGIN
KEY 2
END
RADIOBUTTON F_TABTCS_MODSTATO 23
RADIOBUTTON F_TABTCS_MODSTATO 25
BEGIN
PROMPT 2 5 "Modifica stato"
FIELD S6
@ -49,12 +49,19 @@ BEGIN
MESSAGE ENABLE, F_TABTCS_STATO
ITEM "F|Fine sospensione"
MESSAGE ENABLE, F_TABTCS_STATO
HELP "Indicare se il controllo modifica lo stato e in che modo"
ITEM "1|Sospeso per SI"
MESSAGE ENABLE, F_TABTCS_STATO
ITEM "2|Sospeso per AF"
MESSAGE ENABLE, F_TABTCS_STATO
ITEM "M|Modifica id. pr."
MESSAGE CLEAR, F_TABTCS_STATO
MESSAGE DISABLE, F_TABTCS_STATO
HELP "Indicare se il controllo modifica lo stato e in che modo"
END
STRING F_TABTCS_STATO 20
BEGIN
PROMPT 24 5 "Stato "
PROMPT 30 6 "Stato "
FIELD S3
END

View File

@ -19,7 +19,7 @@ BEGIN
OUTPUT F_TABTDN_CODTAB CODTAB
OUTPUT F_TABTDN_DESCR S0
KEY 1
FLAGS "URZ"
FLAGS "U"
END
STRING F_TABTDN_DESCR 30
@ -55,6 +55,7 @@ BEGIN
OUTPUT F_TABTDN_IDON1 CODTAB
OUTPUT F_DESC_I1 S0
CHECKTYPE REQUIRED
FLAGS "U"
END
STRING F_DESC_I1 30
@ -74,6 +75,7 @@ BEGIN
OUTPUT F_TABTDN_IDON2 CODTAB
OUTPUT F_DESC_I2 S0
CHECKTYPE NORMAL
FLAGS "U"
END
STRING F_DESC_I2 30

View File

@ -3,5 +3,11 @@
#define BEN_CODICE "CODICE"
#define BEN_PROGBEN "PROGBEN"
#define BEN_TIPOBEN "TIPOBEN"
#define BEN_DATAMAT "DATAMAT"
#define BEN_BONUS "BONUS"
#define BEN_DATABEN "DATABEN"
#define BEN_DATACON "DATACON"
#define BEN_RITIRATA "RITIRATA"
#define BEN_CODSEZ "CODSEZ"
#define BEN_CODSOT "CODSOT"
#define BEN_GRUPPOAZIE "GRUPPOAZIE"

View File

@ -12,3 +12,5 @@
#define CON_INTAF "INTAF"
#define CON_PROSSTIPO "PROSSTIPO"
#define CON_PROSSDATA "PROSSDATA"
#define CON_MOTIVO "MOTIVO"
#define CON_RESPONSAB "RESPONSAB"

Some files were not shown because too many files have changed in this diff Show More