Cris nevert commit . Shame on her

git-svn-id: svn://10.65.10.50/trunk@4223 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 1997-03-20 10:33:28 +00:00
parent 00b0f2b8c2
commit e1594fd672
137 changed files with 19325 additions and 9675 deletions

57
at/acc.sql Executable file
View File

@ -0,0 +1,57 @@
PROMPT
PROMPT
PROMPT
PROMPT
PROMPT
PROMPT
PROMPT AGA Informatica S.r.l.
PROMPT
PROMPT
PROMPT Gestione Sezione Provinciale AVIS
PROMPT
PROMPT
PROMPT
PROMPT TRASFERIMENTO ARCHIVIO ACCESSI DEI DONATORI DA SOFTEAM (ORACLE)
PROMPT
PROMPT
PROMPT
PROMPT
PROMPT
PROMPT Inserire il numero (SOFTEAM) della sezione da trasferire
PROMPT
ACCEPT SEZIONE NUMBER PROMPT 'SEZIONE: '
SET HEADING OFF;
SET PAUSE OFF;
SET LINESIZE 500;
SET PAGESIZE 500;
COLUMN DINPACC FORMAT EDATE;
COLUMN DTAPRA FORMAT EDATE;
COLUMN DUIAD FORMAT EDATE;
COLUMN DPRIIADTLL FORMAT EDATE;
SPOOL ACC.TXT
SELECT '%',
NEVNACC,
DINPACC,
CPER,
CCAS,
CSAS,
CTIAPVS,
CTIAAVV,
CPRA,
ACCGGORPS,
EAGESAACC,
EAGFQDACC,
EAGSTTACC,
CUTR,
DTAPRA,
PROPRA,
DUIAD,
DPRIIADTLL
FROM ACC
WHERE CSAS = &SEZIONE;
SPOOL OFF;
SET LINESIZE 79;
SET PAGESIZE 25;
SET PAUSE ON;
SET HEADING ON;
QUIT

View File

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

View File

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

View File

@ -1,6 +1,7 @@
#define APPNAME AVIS #define APPNAME AVIS
#define QAPPNAME "AVIS" #define QAPPNAME "AVIS"
#define LIBDIR f:\xvt.403\win_x86\ptk\lib #define LIBDIR f:\xvt.403\win_x86\ptk\lib
#define QFIRMNAME "AGA Informatica S.r.l."
#include <default.url> #include <default.url>
@ -9,28 +10,22 @@ MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* at0 -1 inserimento donazioni */ /* at0 -1 giornaliero donazioni/controlli */
MENUBAR MENU_BAR(1) MENUBAR MENU_BAR(1)
MENU MENU_BAR(1) MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* at0 -2 chiusura annuale */ /* at0 -2 giornaliero controlli */
MENUBAR MENU_BAR(2) MENUBAR MENU_BAR(2)
MENU MENU_BAR(2) MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ba1 -3 */ /* at0 -3 gestione convocazione */
MENUBAR MENU_BAR(3) MENUBAR MENU_BAR(3)
MENU MENU_BAR(3) MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ba1 -4 */
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"

View File

@ -7,74 +7,77 @@
#define F_NOME 103 #define F_NOME 103
#define F_DATANASC 104 #define F_DATANASC 104
#define F_TESSAVIS 105 #define F_TESSAVIS 105
#define F_CODSEZ 106 #define F_T_STAMPATA 106
#define F_DENSEZ 107 #define F_CODSEZ 107
#define F_CODSOT 108 #define F_DENSEZ 108
#define F_DENSOT 109 #define F_CODSOT 109
#define F_CATDON 110 #define F_DENSOT 110
#define F_DESC_CATDON 111 #define F_CATDON 111
#define F_DATAISC 112 #define F_DESC_CATDON 112
#define F_DATADIM 113 #define F_DATAISC 113
#define F_DOM_INDIR 114 #define F_DATADIM 114
#define F_DOM_CODCOM 115 #define F_DOM_INDIR 115
#define F_DOM_DENCOM 116 #define F_DOM_CODCOM 116
#define F_DOM_CAPCOM 117 #define F_DOM_DENCOM 117
#define F_DOM_PROVCOM 118 #define F_DOM_CAPCOM 118
#define F_DOM_CODLOC 119 #define F_DOM_PROVCOM 119
#define F_DOM_DENLOC 120 #define F_DOM_CODLOC 120
#define F_DOM_STRADA 121 #define F_DOM_DENLOC 121
#define F_DOM_DISTRI 122 #define F_DOM_STRADA 122
#define F_RES_INDIR 123 #define F_DOM_DISTRI 123
#define F_RES_CODCOM 124 #define F_RES_INDIR 124
#define F_RES_DENCOM 125 #define F_RES_CODCOM 125
#define F_RES_CAPCOM 126 #define F_RES_DENCOM 126
#define F_RES_PROVCOM 127 #define F_RES_CAPCOM 127
#define F_RES_CODLOC 128 #define F_RES_PROVCOM 128
#define F_RES_DENLOC 129 #define F_RES_CODLOC 129
#define F_COMNASC 130 #define F_RES_DENLOC 130
#define F_DENCOMNASC 131 #define F_COMNASC 131
#define F_PROVCOMNASC 132 #define F_DENCOMNASC 132
#define F_SESSO 133 #define F_PROVCOMNASC 133
#define F_CF 134 #define F_SESSO 134
#define F_DOCID 135 #define F_CF 135
#define F_TELABI 136 #define F_DOCID 136
#define F_TELLAV 137 #define F_TELABI 137
#define F_TELALT 138 #define F_TELLAV 138
#define F_TELALT 139
// pagina 2 // pagina 2
#define F_CATNOND1 201 #define F_CATNOND1 201
#define F_DESC_CATNOND1 202 #define F_DESC_CATNOND1 202
#define F_CATNOND2 203 #define F_CATNOND2 203
#define F_DESC_CATNOND2 204 #define F_DESC_CATNOND2 204
#define F_CODCL 205 #define F_GRUPPOAZIE 205
#define F_CODCT 206 #define F_DESC_GRUPPOAZIE 206
#define F_TESSSSN 207 #define F_CODCL 207
#define F_TITINDIR 208 #define F_CODCT 208
#define F_CODMED 209 #define F_TESSSSN 209
#define F_COGNMED 210 #define F_TITINDIR 210
#define F_NOMMED 211 #define F_CODMED 211
#define F_GRUPPOAB0 212 #define F_COGNMED 212
#define F_RHANTID 213 #define F_NOMMED 213
#define F_KELL 214 #define F_GRUPPOAB0 214
#define F_FENOTIPORH 215 #define F_RHANTID 215
#define F_DU 216 #define F_KELL 216
#define F_MODCONV 217 #define F_FENOTIPORH 217
#define F_PUNTORACC 218 #define F_DU 218
#define F_DESC_PUNTORACC 219 #define F_MODCONV 219
#define F_GPD_LUN 220 #define F_PUNTORACC 220
#define F_GPD_MAR 221 #define F_DESC_PUNTORACC 221
#define F_GPD_MER 222 #define F_GPD_LUN 222
#define F_GPD_GIO 223 #define F_GPD_MAR 223
#define F_GPD_VEN 224 #define F_GPD_MER 224
#define F_GPD_SAB 225 #define F_GPD_GIO 225
#define F_GPD_DOM 226 #define F_GPD_VEN 226
#define F_GPC_LUN 227 #define F_GPD_SAB 227
#define F_GPC_MAR 228 #define F_GPD_DOM 228
#define F_GPC_MER 229 #define F_GPC_LUN 229
#define F_GPC_GIO 230 #define F_GPC_MAR 230
#define F_GPC_VEN 231 #define F_GPC_MER 231
#define F_GPC_SAB 232 #define F_GPC_GIO 232
#define F_GPC_DOM 233 #define F_GPC_VEN 233
#define F_GPC_SAB 234
#define F_GPC_DOM 235
// pagina 3 // pagina 3
@ -120,19 +123,19 @@
#define F_MOTESCL 411 #define F_MOTESCL 411
#define F_UTENULTAGG 412 #define F_UTENULTAGG 412
#define F_DATAULTAGG 413 #define F_DATAULTAGG 413
#define F_NOTE 414
// pagina 5 // pagina 5
#define F_DONAZIONI 501 #define F_DONAZIONI 501
#define F_GENERA 502
// pagina 6 // pagina 6
#define F_CONTROLLI 601 #define F_CONTROLLI 601
// pagina 7 // pagina 7
#define F_BENEMERENZE 701 #define F_BENEMERENZE 701
#define F_STORICO 702 #define F_FAMIGLIA 702
#define F_STORICO 703
// bottoni personalizzati per l'applicazione
#define DLG_GENDON 801
// pagina donazioni // pagina donazioni
#define F_D_DATADON 101 #define F_D_DATADON 101

View File

@ -86,9 +86,9 @@ BEGIN
HELP "Data di nascita" HELP "Data di nascita"
END END
STRING F_TESSAVIS 10 STRING F_TESSAVIS 6
BEGIN BEGIN
PROMPT 48 3 "Tessera AVIS " PROMPT 38 3 "Tessera "
FIELDS TESSAVIS FIELDS TESSAVIS
FLAGS "U" FLAGS "U"
KEY 5 KEY 5
@ -110,6 +110,12 @@ BEGIN
HELP "Numero tessera associativa AVIS" HELP "Numero tessera associativa AVIS"
END END
BOOLEAN F_T_STAMPATA
BEGIN
PROMPT 60 3 "Stampata "
FIELD T_STAMPATA
END
GROUPBOX DLG_NULL 77 4 GROUPBOX DLG_NULL 77 4
BEGIN BEGIN
PROMPT 1 5 "Dati associativi" PROMPT 1 5 "Dati associativi"
@ -131,16 +137,16 @@ BEGIN
OUTPUT F_DENSEZ DENSEZ OUTPUT F_DENSEZ DENSEZ
OUTPUT F_CODSOT CODSOT OUTPUT F_CODSOT CODSOT
OUTPUT F_DENSOT DENSOT OUTPUT F_DENSOT DENSOT
//CHECKTYPE NORMAL
CHECKTYPE SEARCH CHECKTYPE SEARCH
HELP "Codice sezione di appartenenza" HELP "Codice sezione di appartenenza"
ADD MASK at0700a ADD MASK at0700a
WARNING "Codice sezione assente"
END END
STRING F_DENSEZ 24 STRING F_DENSEZ 24
BEGIN BEGIN
PROMPT 12 6 "" PROMPT 12 6 ""
FLAGS "U" //FLAGS "U"
USE LF_SEZIONI KEY 2 USE LF_SEZIONI KEY 2
INPUT DENSEZ F_DENSEZ INPUT DENSEZ F_DENSEZ
DISPLAY "Sezione@25" DENSEZ DISPLAY "Sezione@25" DENSEZ
@ -151,6 +157,7 @@ BEGIN
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Denominazione sezione di appartenenza" HELP "Denominazione sezione di appartenenza"
ADD MASK at0700a ADD MASK at0700a
WARNING "Denominazione assente"
END END
STRING F_CODSOT 2 STRING F_CODSOT 2
@ -161,12 +168,13 @@ BEGIN
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Codice sottogruppo di appartenenza" HELP "Codice sottogruppo di appartenenza"
ADD MASK at0700a ADD MASK at0700a
WARNING "Codice sottogruppo assente"
END END
STRING F_DENSOT 24 STRING F_DENSOT 24
BEGIN BEGIN
PROMPT 50 6 "" PROMPT 50 6 ""
FLAGS "U" //FLAGS "U"
COPY USE F_DENSEZ COPY USE F_DENSEZ
INPUT DENSEZ F_DENSEZ INPUT DENSEZ F_DENSEZ
INPUT DENSOT F_DENSOT INPUT DENSOT F_DENSOT
@ -175,6 +183,7 @@ BEGIN
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Sottogruppo di appartenenza" HELP "Sottogruppo di appartenenza"
ADD MASK at0700a ADD MASK at0700a
WARNING "Denominazione sottogruppo assente"
END END
STRING F_CATDON 2 STRING F_CATDON 2
@ -189,7 +198,7 @@ BEGIN
OUTPUT F_CATDON CODTAB OUTPUT F_CATDON CODTAB
OUTPUT F_DESC_CATDON S0 OUTPUT F_DESC_CATDON S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice non presente" WARNING "Codice categoria non presente"
HELP "Categoria di appartenenza" HELP "Categoria di appartenenza"
END END
@ -213,7 +222,7 @@ BEGIN
HELP "Data di dimissione dalla sezione/categoria" HELP "Data di dimissione dalla sezione/categoria"
END END
GROUPBOX DLG_NULL 77 11 GROUPBOX DLG_NULL 77 12
BEGIN BEGIN
PROMPT 1 9 "Dati anagrafici" PROMPT 1 9 "Dati anagrafici"
END END
@ -266,6 +275,7 @@ BEGIN
COPY OUTPUT F_DOM_CODCOM COPY OUTPUT F_DOM_CODCOM
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Comune di residenza" HELP "Comune di residenza"
WARNING " Comune assente"
END END
STRING F_DOM_CODLOC 4 STRING F_DOM_CODLOC 4
@ -273,7 +283,7 @@ BEGIN
PROMPT 13 12 "Localita' " PROMPT 13 12 "Localita' "
FIELD DOM_CODLOC FIELD DOM_CODLOC
FLAGS "U" FLAGS "U"
USE LCP SELECT S7=#F_DOM_CODLOC USE LCP SELECT S7=#F_DOM_CODCOM
INPUT CODTAB F_DOM_CODLOC INPUT CODTAB F_DOM_CODLOC
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Localita'@30" S0 DISPLAY "Localita'@30" S0
@ -284,12 +294,14 @@ BEGIN
OUTPUT F_DOM_CODCOM S7 OUTPUT F_DOM_CODCOM S7
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Codice localita' postale se diversa dal comune" HELP "Codice localita' postale se diversa dal comune"
WARNING "Codice localita' assente"
END END
STRING F_DOM_DENLOC 30 STRING F_DOM_DENLOC 30
BEGIN BEGIN
PROMPT 30 12 "" PROMPT 30 12 ""
COPY USE F_DOM_CODLOC //FLAGS "U"
USE LCP KEY 2 SELECT S7=#F_DOM_CODCOM
INPUT S0 F_DOM_DENLOC INPUT S0 F_DOM_DENLOC
DISPLAY "Localita'@30" S0 DISPLAY "Localita'@30" S0
DISPLAY "CAP@5" S6 DISPLAY "CAP@5" S6
@ -297,6 +309,7 @@ BEGIN
COPY OUTPUT F_DOM_CODLOC COPY OUTPUT F_DOM_CODLOC
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Localita' postale se diversa dal comune" HELP "Localita' postale se diversa dal comune"
WARNING "Localita' assente"
END END
STRING F_DOM_CAPCOM 5 STRING F_DOM_CAPCOM 5
@ -349,6 +362,7 @@ BEGIN
COPY OUTPUT F_RES_CODCOM COPY OUTPUT F_RES_CODCOM
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Comune di residenza" HELP "Comune di residenza"
WARNING "Comune assente"
END END
STRING F_RES_CODLOC 4 STRING F_RES_CODLOC 4
@ -367,12 +381,13 @@ BEGIN
OUTPUT F_RES_CODCOM S7 OUTPUT F_RES_CODCOM S7
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Codice localita' postale se diversa dal comune" HELP "Codice localita' postale se diversa dal comune"
WARNING "Codice localita' assente"
END END
STRING F_RES_DENLOC 30 STRING F_RES_DENLOC 30
BEGIN BEGIN
PROMPT 30 15 "" PROMPT 30 15 ""
COPY USE F_RES_CODLOC USE LCP SELECT S7=#F_RES_CODLOC
INPUT S0 F_RES_DENLOC INPUT S0 F_RES_DENLOC
DISPLAY "Localita'@30" S0 DISPLAY "Localita'@30" S0
DISPLAY "CAP@5" S6 DISPLAY "CAP@5" S6
@ -380,6 +395,7 @@ BEGIN
COPY OUTPUT F_RES_CODLOC COPY OUTPUT F_RES_CODLOC
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Localita' postale se diversa dal comune" HELP "Localita' postale se diversa dal comune"
WARNING "Localita' assente"
END END
STRING F_RES_CAPCOM 5 STRING F_RES_CAPCOM 5
@ -396,7 +412,7 @@ END
STRING F_COMNASC 4 STRING F_COMNASC 4
BEGIN BEGIN
PROMPT 2 16 "Nato a " PROMPT 2 17 "Nato a "
FIELD COMNASC FIELD COMNASC
FLAGS "U" FLAGS "U"
USE LF_COMUNI USE LF_COMUNI
@ -413,24 +429,25 @@ END
STRING F_DENCOMNASC 50 30 STRING F_DENCOMNASC 50 30
BEGIN BEGIN
PROMPT 16 16 "" PROMPT 16 17 ""
USE LF_COMUNI KEY 2 USE LF_COMUNI KEY 2
INPUT DENCOM F_DENCOMNASC INPUT DENCOM F_DENCOMNASC
#include <comdden.h> #include <comdden.h>
COPY OUTPUT F_COMNASC COPY OUTPUT F_COMNASC
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Comune di nascita" HELP "Comune di nascita"
WARNING "Comune assente"
END END
STRING F_PROVCOMNASC 5 STRING F_PROVCOMNASC 5
BEGIN BEGIN
PROMPT 49 16 "" PROMPT 49 17 ""
FLAGS "D" FLAGS "D"
END END
LISTBOX F_SESSO 11 LISTBOX F_SESSO 11
BEGIN BEGIN
PROMPT 57 16 "Sesso " PROMPT 57 17 "Sesso "
FIELD SESSO FIELD SESSO
FLAGS "U" FLAGS "U"
#include "sesso.h" #include "sesso.h"
@ -438,7 +455,7 @@ END
STRING F_CF 16 STRING F_CF 16
BEGIN BEGIN
PROMPT 2 17 "Codice fiscale " PROMPT 2 18 "Codice fiscale "
FIELD CF FIELD CF
FLAGS "U" FLAGS "U"
HELP "Codice fiscale" HELP "Codice fiscale"
@ -446,7 +463,7 @@ END
STRING F_DOCID 20 STRING F_DOCID 20
BEGIN BEGIN
PROMPT 38 17 "Doc. di identita' " PROMPT 38 18 "Doc. di identita' "
FIELDS DOCID FIELDS DOCID
FLAGS "U" FLAGS "U"
HELP "Documento di identit…: tipo e numero" HELP "Documento di identit…: tipo e numero"
@ -454,21 +471,21 @@ END
STRING F_TELABI 14 STRING F_TELABI 14
BEGIN BEGIN
PROMPT 2 18 "Telefoni: Abit. " PROMPT 2 19 "Telefoni: Abit. "
FIELD TELABI FIELD TELABI
HELP "Telefono abitazione" HELP "Telefono abitazione"
END END
STRING F_TELLAV 14 STRING F_TELLAV 14
BEGIN BEGIN
PROMPT 35 18 "Lav. " PROMPT 35 19 "Lav. "
FIELD TELLAV FIELD TELLAV
HELP "Telefono lavoro" HELP "Telefono lavoro"
END END
STRING F_TELALT 14 STRING F_TELALT 14
BEGIN BEGIN
PROMPT 56 18 "Altro " PROMPT 56 19 "Altro "
FIELD TELALT FIELD TELALT
HELP "Altro numero telefonico per reperibilit…" HELP "Altro numero telefonico per reperibilit…"
END END
@ -511,7 +528,7 @@ BEGIN
GROUP 4 GROUP 4
END END
GROUPBOX DLG_NULL 77 3 GROUPBOX DLG_NULL 77 4
BEGIN BEGIN
PROMPT 1 5 "Altri dati associativi" PROMPT 1 5 "Altri dati associativi"
END END
@ -528,7 +545,7 @@ BEGIN
OUTPUT F_CATNOND1 CODTAB OUTPUT F_CATNOND1 CODTAB
OUTPUT F_DESC_CATNOND1 S0 OUTPUT F_DESC_CATNOND1 S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice non presente" WARNING "Codice categoria non presente"
HELP "Altra categoria non donatori" HELP "Altra categoria non donatori"
END END
@ -549,7 +566,7 @@ BEGIN
OUTPUT F_CATNOND2 CODTAB OUTPUT F_CATNOND2 CODTAB
OUTPUT F_DESC_CATNOND2 S0 OUTPUT F_DESC_CATNOND2 S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice non presente" WARNING "Codice categoria non presente"
HELP "Altra categoria non donatori" HELP "Altra categoria non donatori"
END END
@ -559,14 +576,45 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
STRING F_GRUPPOAZIE 4
BEGIN
PROMPT 2 7 "Gruppo aziend. "
FIELD GRUPPOAZIE
FLAGS "U"
USE GAZ
INPUT CODTAB F_GRUPPOAZIE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_GRUPPOAZIE CODTAB
OUTPUT F_DESC_GRUPPOAZIE S0
CHECKTYPE NORMAL
WARNING "Codice gruppo aziendale non presente"
HELP "Gruppo aziendale di appartenenza"
END
STRING F_DESC_GRUPPOAZIE 30
BEGIN
PROMPT 24 7 ""
FLAGS "U"
USE GAZ KEY 2
INPUT S0 F_DESC_GRUPPOAZIE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
COPY OUTPUT F_GRUPPOAZIE
CHECKTYPE NORMAL
WARNING "Gruppo aziendale non presente"
HELP "Gruppo aziendale di appartenenza"
END
GROUPBOX DLG_NULL 77 4 GROUPBOX DLG_NULL 77 4
BEGIN BEGIN
PROMPT 1 8 "Altri dati identificativi" PROMPT 1 9 "Altri dati identificativi"
END END
STRING F_CODCL 6 STRING F_CODCL 6
BEGIN BEGIN
PROMPT 2 9 "Cart. clinica " PROMPT 2 10 "Cart. clinica "
FIELDS CODCL FIELDS CODCL
FLAGS "U" FLAGS "U"
HELP "Numero cartella clinica" HELP "Numero cartella clinica"
@ -575,7 +623,7 @@ END
STRING F_CODCT 6 STRING F_CODCT 6
BEGIN BEGIN
PROMPT 25 9 "Cod. CT " PROMPT 25 10 "Cod. CT "
FIELDS CODCT FIELDS CODCT
FLAGS "U" FLAGS "U"
HELP "Codice Centro Trasfusionale" HELP "Codice Centro Trasfusionale"
@ -583,7 +631,7 @@ END
STRING F_TESSSSN 10 STRING F_TESSSSN 10
BEGIN BEGIN
PROMPT 42 9 "SSN " PROMPT 42 10 "SSN "
FIELDS TESSSSN FIELDS TESSSSN
FLAGS "U" FLAGS "U"
HELP "Numero tessera Servizio Sanitario Nazionale" HELP "Numero tessera Servizio Sanitario Nazionale"
@ -591,14 +639,14 @@ END
STRING F_TITINDIR 10 STRING F_TITINDIR 10
BEGIN BEGIN
PROMPT 59 9 "Titolo " PROMPT 59 10 "Titolo "
FIELDS TESSSSN FIELDS TESSSSN
HELP "Eventuale titolo da stampare prima del nome sull'indirizzo" HELP "Eventuale titolo da stampare prima del nome sull'indirizzo"
END END
NUMBER F_CODMED 6 NUMBER F_CODMED 6
BEGIN BEGIN
PROMPT 2 10 "Medico di base " PROMPT 2 11 "Medico di base "
FIELD CODMED FIELD CODMED
FLAGS "U" FLAGS "U"
USE LF_MEDICI USE LF_MEDICI
@ -617,7 +665,7 @@ END
STRING F_COGNMED 25 23 STRING F_COGNMED 25 23
BEGIN BEGIN
PROMPT 26 10 "" PROMPT 26 11 ""
USE LF_MEDICI KEY 2 USE LF_MEDICI KEY 2
INPUT COGNOME F_COGNMED INPUT COGNOME F_COGNMED
DISPLAY "Cognome@25" COGNOME DISPLAY "Cognome@25" COGNOME
@ -632,7 +680,7 @@ END
STRING F_NOMMED 25 22 STRING F_NOMMED 25 22
BEGIN BEGIN
PROMPT 52 10 "" PROMPT 52 11 ""
USE LF_MEDICI KEY 2 USE LF_MEDICI KEY 2
INPUT COGNOME F_COGNMED INPUT COGNOME F_COGNMED
INPUT NOME F_NOMMED INPUT NOME F_NOMMED
@ -648,12 +696,12 @@ END
GROUPBOX DLG_NULL 77 3 GROUPBOX DLG_NULL 77 3
BEGIN BEGIN
PROMPT 1 12 "Tipizzazione" PROMPT 1 13 "Tipizzazione"
END END
LISTBOX F_GRUPPOAB0 5 LISTBOX F_GRUPPOAB0 5
BEGIN BEGIN
PROMPT 2 13 "Gruppo AB0 " PROMPT 2 14 "Gruppo AB0 "
FIELD GRUPPOAB0 FIELD GRUPPOAB0
FLAGS "U" FLAGS "U"
#include "gruppo.h" #include "gruppo.h"
@ -661,7 +709,7 @@ END
LISTBOX F_RHANTID 4 LISTBOX F_RHANTID 4
BEGIN BEGIN
PROMPT 22 13 "Rh/AntiD " PROMPT 22 14 "Rh/AntiD "
FIELD RHANTID FIELD RHANTID
FLAGS "U" FLAGS "U"
#include "rh.h" #include "rh.h"
@ -669,13 +717,13 @@ END
STRING F_FENOTIPORH 6 STRING F_FENOTIPORH 6
BEGIN BEGIN
PROMPT 39 13 "Fen.Rh " PROMPT 39 14 "Fen.Rh "
FIELD FENOTIPORH FIELD FENOTIPORH
END END
LISTBOX F_KELL 4 LISTBOX F_KELL 4
BEGIN BEGIN
PROMPT 54 13 "Kell " PROMPT 54 14 "Kell "
FIELD KELL FIELD KELL
FLAGS "U" FLAGS "U"
#include "rh.h" #include "rh.h"
@ -683,7 +731,7 @@ END
LISTBOX F_DU 4 LISTBOX F_DU 4
BEGIN BEGIN
PROMPT 67 13 "Du " PROMPT 67 14 "Du "
FIELD DU FIELD DU
FLAGS "U" FLAGS "U"
#include "rh.h" #include "rh.h"
@ -691,19 +739,19 @@ END
GROUPBOX DLG_NULL 77 5 GROUPBOX DLG_NULL 77 5
BEGIN BEGIN
PROMPT 1 15 "Preferenze" PROMPT 1 16 "Preferenze"
END END
LISTBOX F_MODCONV 13 LISTBOX F_MODCONV 13
BEGIN BEGIN
PROMPT 2 16 "Mod. convoc. " PROMPT 2 17 "Mod. convoc. "
FIELD MODCONV FIELD MODCONV
#include "modalita.h" #include "modalita.h"
END END
STRING F_PUNTORACC 4 STRING F_PUNTORACC 4
BEGIN BEGIN
PROMPT 32 16 "Punto racc. " PROMPT 32 17 "Punto racc. "
FIELD PUNTORACC FIELD PUNTORACC
FLAGS "U" FLAGS "U"
USE LDN USE LDN
@ -713,107 +761,120 @@ BEGIN
OUTPUT F_PUNTORACC CODTAB OUTPUT F_PUNTORACC CODTAB
OUTPUT F_DESC_PUNTORACC S0 OUTPUT F_DESC_PUNTORACC S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice non presente" WARNING "Codice punto di raccolta non presente"
HELP "Punto di raccolta per la convocazione" HELP "Punto di raccolta per la convocazione"
END END
STRING F_DESC_PUNTORACC 25 STRING F_DESC_PUNTORACC 25
BEGIN BEGIN
PROMPT 51 16 "" PROMPT 51 17 ""
FLAGS "D" FLAGS "D"
END END
TEXT DLG_NULL TEXT DLG_NULL
BEGIN BEGIN
PROMPT 2 17 "Giorni: Lu Ma Me Gi Ve Sa Do" PROMPT 2 18 "Giorni: Lu Ma Me Gi Ve Sa Do"
END END
TEXT DLG_NULL TEXT DLG_NULL
BEGIN BEGIN
PROMPT 50 17 "Lu Ma Me Gi Ve Sa Do" PROMPT 50 18 "Lu Ma Me Gi Ve Sa Do"
END END
TEXT DLG_NULL TEXT DLG_NULL
BEGIN BEGIN
PROMPT 2 18 "Donazione" PROMPT 2 19 "Donazione"
END END
BOOLEAN F_GPD_LUN BOOLEAN F_GPD_LUN
BEGIN BEGIN
PROMPT 12 18 "" PROMPT 12 19 ""
FIELD GIOPREDON[1,1]
END END
BOOLEAN F_GPD_MAR BOOLEAN F_GPD_MAR
BEGIN BEGIN
PROMPT 16 18 "" PROMPT 16 19 ""
FIELD GIOPREDON[2,2]
END END
BOOLEAN F_GPD_MER BOOLEAN F_GPD_MER
BEGIN BEGIN
PROMPT 20 18 "" PROMPT 20 19 ""
FIELD GIOPREDON[3,3]
END END
BOOLEAN F_GPD_GIO BOOLEAN F_GPD_GIO
BEGIN BEGIN
PROMPT 24 18 "" PROMPT 24 19 ""
FIELD GIOPREDON[4,4]
END END
BOOLEAN F_GPD_VEN BOOLEAN F_GPD_VEN
BEGIN BEGIN
PROMPT 28 18 "" PROMPT 28 19 ""
FIELD GIOPREDON[5,5]
END END
BOOLEAN F_GPD_SAB BOOLEAN F_GPD_SAB
BEGIN BEGIN
PROMPT 32 18 "" PROMPT 32 19 ""
FIELD GIOPREDON[6,6]
END END
BOOLEAN F_GPD_DOM BOOLEAN F_GPD_DOM
BEGIN BEGIN
PROMPT 36 18 "" PROMPT 36 19 ""
FIELD GIOPREDON[7,7]
END END
TEXT DLG_NULL TEXT DLG_NULL
BEGIN BEGIN
PROMPT 40 18 "Controlli" PROMPT 40 19 "Controlli"
END END
BOOLEAN F_GPC_LUN BOOLEAN F_GPC_LUN
BEGIN BEGIN
PROMPT 50 18 "" PROMPT 50 19 ""
FIELD GIOPRECON[1,1]
END END
BOOLEAN F_GPC_MAR BOOLEAN F_GPC_MAR
BEGIN BEGIN
PROMPT 54 18 "" PROMPT 54 19 ""
FIELD GIOPRECON[2,2]
END END
BOOLEAN F_GPC_MER BOOLEAN F_GPC_MER
BEGIN BEGIN
PROMPT 58 18 "" PROMPT 58 19 ""
FIELD GIOPRECON[3,3]
END END
BOOLEAN F_GPC_GIO BOOLEAN F_GPC_GIO
BEGIN BEGIN
PROMPT 62 18 "" PROMPT 62 19 ""
FIELD GIOPRECON[4,4]
END END
BOOLEAN F_GPC_VEN BOOLEAN F_GPC_VEN
BEGIN BEGIN
PROMPT 66 18 "" PROMPT 66 19 ""
FIELD GIOPRECON[5,5]
END END
BOOLEAN F_GPC_SAB BOOLEAN F_GPC_SAB
BEGIN BEGIN
PROMPT 70 18 "" PROMPT 70 19 ""
FIELD GIOPRECON[6,6]
END END
BOOLEAN F_GPC_DOM BOOLEAN F_GPC_DOM
BEGIN BEGIN
PROMPT 74 18 "" PROMPT 74 19 ""
FIELD GIOPRECON[7,7]
END END
ENDPAGE ENDPAGE
PAGE "Dati 3" -1 -1 78 20 PAGE "Dati 3" -1 -1 78 20
@ -1147,30 +1208,62 @@ END
STRING F_PROFESS 4 STRING F_PROFESS 4
BEGIN BEGIN
PROMPT 2 8 "Professione " PROMPT 2 8 "Professione "
// FIELD PROFESS FIELD PROFESS
FLAGS "D" FLAGS "U"
// USE IDO USE PRF
// INPUT CODTAB F_IDON1 INPUT CODTAB F_PROFESS
// OUTPUT F_DESC_ID1 S0 DISPLAY "Codice" CODTAB
// CHECKTYPE NORMAL DISPLAY "Descrizione@40" S0
OUTPUT F_PROFESS CODTAB
OUTPUT F_DESC_PROFESS S0
CHECKTYPE NORMAL
WARNING "Codice professione non presente"
HELP "Professione"
END END
STRING F_DESC_PROFESS 40 STRING F_DESC_PROFESS 40
BEGIN BEGIN
PROMPT 21 8 "" PROMPT 21 8 ""
FLAGS "D" FLAGS "U"
USE PRF KEY 2
INPUT S0 F_DESC_PROFESS
DISPLAY "Descrizione@40" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_PROFESS
CHECKTYPE NORMAL
WARNING "Professione non presente"
HELP "Professione"
END END
STRING F_LUOGOLAV 4 STRING F_LUOGOLAV 4
BEGIN BEGIN
PROMPT 2 9 "Luogo lav. " PROMPT 2 9 "Luogo lav. "
FLAGS "D" FIELD LUOGOLAV
FLAGS "U"
USE LDL
INPUT CODTAB F_LUOGOLAV
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_LUOGOLAV CODTAB
OUTPUT F_DESC_LUOGOLAV S0
CHECKTYPE NORMAL
WARNING "Codice luogo di lavoro non presente"
HELP "Luogo di lavoro"
END END
STRING F_DESC_LUOGOLAV 40 STRING F_DESC_LUOGOLAV 40
BEGIN BEGIN
PROMPT 21 9 "" PROMPT 21 9 ""
FLAGS "D" FLAGS "U"
USE LDL KEY 2
INPUT S0 F_DESC_LUOGOLAV
DISPLAY "Descrizione@40" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_LUOGOLAV
OUTPUT F_LUOGOLAV CODTAB
CHECKTYPE NORMAL
WARNING "Luogo di lavoro non presente"
HELP "Luogo di lavoro"
END END
GROUPBOX DLG_NULL 41 5 GROUPBOX DLG_NULL 41 5
@ -1228,6 +1321,12 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
MEMO F_NOTE 77 4
BEGIN
PROMPT 1 16 "Note "
FIELD NOTE
END
ENDPAGE ENDPAGE
PAGE "Donazioni" -1 -1 78 20 PAGE "Donazioni" -1 -1 78 20
@ -1266,14 +1365,19 @@ BEGIN
GROUP 4 GROUP 4
END END
GROUPBOX DLG_NULL 77 14 BUTTON F_GENERA 18 1
BEGIN BEGIN
PROMPT 1 5 "Donazioni" PROMPT 1 5 "Genera donazioni"
END END
SPREADSHEET F_DONAZIONI 75 12 //GROUPBOX DLG_NULL 77 15
//BEGIN
// PROMPT 1 5 "Donazioni"
//END
SPREADSHEET F_DONAZIONI
BEGIN BEGIN
PROMPT 2 6 "" PROMPT 1 6 ""
ITEM "Data@10F" ITEM "Data@10F"
ITEM "Tipo@F" ITEM "Tipo@F"
ITEM "Luogo" ITEM "Luogo"
@ -1324,14 +1428,14 @@ BEGIN
GROUP 4 GROUP 4
END END
GROUPBOX DLG_NULL 77 14 //GROUPBOX DLG_NULL 77 15
//BEGIN
// PROMPT 1 5 "Controlli sanitari"
//END
SPREADSHEET F_CONTROLLI
BEGIN BEGIN
PROMPT 1 5 "Controlli sanitari" PROMPT 1 5 "Controlli sanitari"
END
SPREADSHEET F_CONTROLLI 75 12
BEGIN
PROMPT 2 6 ""
ITEM "Data@10F" ITEM "Data@10F"
ITEM "Tipo@F" ITEM "Tipo@F"
ITEM "Id.1" ITEM "Id.1"
@ -1346,7 +1450,7 @@ END
ENDPAGE ENDPAGE
PAGE "Ben./Sto." -1 -1 78 20 PAGE "Dati 5" -1 -1 78 20
GROUPBOX DLG_NULL 77 5 GROUPBOX DLG_NULL 77 5
BEGIN BEGIN
@ -1382,12 +1486,12 @@ BEGIN
GROUP 4 GROUP 4
END END
GROUPBOX DLG_NULL 77 8 GROUPBOX DLG_NULL 35 8
BEGIN BEGIN
PROMPT 1 5 "Benemerenze" PROMPT 1 5 "Benemerenze"
END END
SPREADSHEET F_BENEMERENZE 75 6 SPREADSHEET F_BENEMERENZE 33 6
BEGIN BEGIN
PROMPT 2 6 "" PROMPT 2 6 ""
ITEM "Tipo" ITEM "Tipo"
@ -1395,19 +1499,24 @@ BEGIN
ITEM "Ritirata?" ITEM "Ritirata?"
END END
GROUPBOX DLG_NULL 77 6 BUTTON F_FAMIGLIA 10 2
BEGIN
PROMPT 40 6 "Famiglia"
END
GROUPBOX DLG_NULL 77 7
BEGIN BEGIN
PROMPT 1 13 "Storico iscrizioni e dimissioni" PROMPT 1 13 "Storico iscrizioni e dimissioni"
END END
SPREADSHEET F_STORICO 75 4 SPREADSHEET F_STORICO 75 5
BEGIN BEGIN
PROMPT 2 14 "" PROMPT 2 14 ""
ITEM "Dal@10" ITEM "Dal@10"
ITEM "Al@10" ITEM "Al@10"
ITEM "Sezione" ITEM "Sez."
ITEM "Sottogruppo" ITEM "Sot."
ITEM "Cat. Isc." ITEM "Cat."
ITEM "Motivo dim." ITEM "Motivo dim."
END END
@ -1439,7 +1548,7 @@ BEGIN
OUTPUT F_D_DESC_TIPODON S0 OUTPUT F_D_DESC_TIPODON S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
VALIDATE NOT_EMPTY_FUNC VALIDATE NOT_EMPTY_FUNC
WARNING "Codice non presente" WARNING "Codice tipo donazione non presente"
HELP "Tipo donazione" HELP "Tipo donazione"
END END
@ -1455,7 +1564,7 @@ BEGIN
OUTPUT F_D_LUOGODON CODTAB OUTPUT F_D_LUOGODON CODTAB
OUTPUT F_D_DESC_LUOGODON S0 OUTPUT F_D_DESC_LUOGODON S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice non presente" WARNING "Codice luogo donazione non presente"
HELP "Luogo donazione" HELP "Luogo donazione"
END END
@ -1571,7 +1680,7 @@ BEGIN
OUTPUT F_C_DESC_TIPOCON S0 OUTPUT F_C_DESC_TIPOCON S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
VALIDATE NOT_EMPTY_FUNC VALIDATE NOT_EMPTY_FUNC
WARNING "Codice non presente" WARNING "Codice controllo sanitario non presente"
HELP "Tipo/Esito controllo sanitario" HELP "Tipo/Esito controllo sanitario"
END END
@ -1597,7 +1706,8 @@ BEGIN
OUTPUT F_C_IDON1 CODTAB OUTPUT F_C_IDON1 CODTAB
OUTPUT F_C_DESC_IDON1 S0 OUTPUT F_C_DESC_IDON1 S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice non presente" VALIDATE NOT_EMPTY_FUNC
WARNING "Codice idoneit… non presente"
HELP "Idoneita' alla donazione" HELP "Idoneita' alla donazione"
END END
@ -1613,7 +1723,7 @@ BEGIN
OUTPUT F_C_IDON2 CODTAB OUTPUT F_C_IDON2 CODTAB
OUTPUT F_C_DESC_IDON2 S0 OUTPUT F_C_DESC_IDON2 S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice non presente" WARNING "Codice idoneit… non presente"
HELP "Idoneita' alla donazione" HELP "Idoneita' alla donazione"
END END
@ -1629,7 +1739,7 @@ BEGIN
OUTPUT F_C_IDON3 CODTAB OUTPUT F_C_IDON3 CODTAB
OUTPUT F_C_DESC_IDON3 S0 OUTPUT F_C_DESC_IDON3 S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice non presente" WARNING "Codice idoneit… non presente"
HELP "Idoneita' alla donazione" HELP "Idoneita' alla donazione"
END END
@ -1645,7 +1755,7 @@ BEGIN
OUTPUT F_C_IDON4 CODTAB OUTPUT F_C_IDON4 CODTAB
OUTPUT F_C_DESC_IDON4 S0 OUTPUT F_C_DESC_IDON4 S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice non presente" WARNING "Codice idoneit… non presente"
HELP "Idoneita' alla donazione" HELP "Idoneita' alla donazione"
END END
@ -1659,6 +1769,7 @@ BEGIN
PROMPT 40 7 "Sangue intero " PROMPT 40 7 "Sangue intero "
FIELD LF_CONTSAN->INTSI FIELD LF_CONTSAN->INTSI
FLAGS "U" FLAGS "U"
VALIDATE NOT_EMPTY_FUNC
END END
NUMBER F_C_INTAF 3 0 NUMBER F_C_INTAF 3 0
@ -1666,6 +1777,7 @@ BEGIN
PROMPT 40 8 "Aferesi " PROMPT 40 8 "Aferesi "
FIELD LF_CONTSAN->INTAF FIELD LF_CONTSAN->INTAF
FLAGS "U" FLAGS "U"
VALIDATE NOT_EMPTY_FUNC
END END
GROUPBOX DLG_NULL 70 4 GROUPBOX DLG_NULL 70 4
@ -1686,7 +1798,7 @@ BEGIN
OUTPUT F_C_PROSSTIPO CODTAB OUTPUT F_C_PROSSTIPO CODTAB
OUTPUT F_C_DESC_PROSSTIPO S0 OUTPUT F_C_DESC_PROSSTIPO S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice non presente" WARNING "Codice controllo sanitario non presente"
HELP "Tipo/Esito controllo sanitario" HELP "Tipo/Esito controllo sanitario"
END END
@ -1771,7 +1883,7 @@ BEGIN
OUTPUT F_B_DESC_TIPOBEN S0 OUTPUT F_B_DESC_TIPOBEN S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
VALIDATE NOT_EMPTY_FUNC VALIDATE NOT_EMPTY_FUNC
WARNING "Codice non presente" WARNING "Codice benemerenza non presente"
HELP "Benemerenza assegnata" HELP "Benemerenza assegnata"
END END
@ -1903,7 +2015,7 @@ BEGIN
OUTPUT F_S_CATISC CODTAB OUTPUT F_S_CATISC CODTAB
OUTPUT F_S_DESC_CATISC S0 OUTPUT F_S_DESC_CATISC S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Codice non presente" WARNING "Codice categoria non presente"
HELP "Categoria di iscrizione" HELP "Categoria di iscrizione"
END END

20
at/at0100b.h Executable file
View File

@ -0,0 +1,20 @@
// definizione dei campi della maschera at0100c.msk
// genera donazioni
// pagina 1
#define F_QUANTEGEN 101
#define F_COMEGEN 102
#define F_FINOALGEN 103
#define F_TIPOGEN 104
#define F_D_TIPOGEN 105
#define F_LUOGOGEN 106
#define F_D_LUOGOGEN 107
#define F_ESEGUIGEN 108
#define F_DONGEN 109
// pagina donazione
#define F_G_DATA 101
#define F_G_TIPO 102
#define F_G_LUOGO 103
#define F_G_D_TIPO 210
#define F_G_D_LUOGO 211

159
at/at0100b.uml Executable file
View File

@ -0,0 +1,159 @@
#include "at0100b.h"
#include "lf.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -11 ""
END
//#include <toolbar.h>
ENDPAGE
PAGE "Genera donazioni" -1 -1 78 20
NUMBER F_QUANTEGEN 3
BEGIN
PROMPT 2 2 "Numero donazioni da generare "
HELP "Numero donazioni da generare"
END
RADIOBUTTON F_COMEGEN 17
BEGIN
PROMPT 2 3 "Modalita' "
ITEM "A|Automatica"
MESSAGE ENABLE,F_FINOALGEN
MESSAGE DISABLE,F_DONGEN
ITEM "M|Manuale"
MESSAGE ENABLE,F_DONGEN
MESSAGE DISABLE,F_FINOALGEN
HELP "Modalita' di generazione: automatica o manuale (inserire solo le date)"
END
DATE F_FINOALGEN
BEGIN
PROMTP 2 7 "Fino al "
VALIDATE NOT_EMPTY_FUNC
HELP "Data ultima donazione da generare"
END
STRING F_TIPOGEN 2
BEGIN
PROMPT 2 8 "Tipo don. "
FLAGS "U"
USE TDN
INPUT CODTAB F_TIPOGEN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_TIPOGEN CODTAB
OUTPUT F_D_TIPOGEN S0
CHECKTYPE REQUIRED
VALIDATE NOT_EMPTY_FUNC
WARNING "Codice tipo donazione non presente"
HELP "Tipo donazione"
END
STRING F_D_TIPOGEN 25
BEGIN
PROMPT 20 8 ""
FLAGS "D"
END
STRING F_LUOGOGEN 4
BEGIN
PROMPT 2 9 "Luogo don. "
FLAGS "U"
USE LDN
INPUT CODTAB F_LUOGOGEN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_LUOGOGEN CODTAB
OUTPUT F_D_LUOGOGEN S0
CHECKTYPE NORMAL
WARNING "Codice luogo donazione non presente"
HELP "Luogo donazione"
END
STRING F_D_LUOGOGEN 25
BEGIN
PROMPT 20 9 ""
FLAGS "D"
END
BUTTON F_ESEGUIGEN 21 2
BEGIN
PROMPT 2 11 "Esegui generazione"
END
SPREADSHEET F_DONGEN 29 18
BEGIN
PROMPT 50 2 ""
ITEM "Data@10"
ITEM "Tipo"
ITEM "Luogo"
END
ENDPAGE
ENDMASK
PAGE "Riga donazione" -1 -1 60 12
DATE F_G_DATA
BEGIN
PROMPT 2 2 "Data "
END
STRING F_G_TIPO 2
BEGIN
PROMPT 2 3 "Tipo "
FLAGS "U"
USE TDN
INPUT CODTAB F_G_TIPO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_G_TIPO CODTAB
OUTPUT F_G_D_TIPO S0
CHECKTYPE REQUIRED
VALIDATE NOT_EMPTY_FUNC
WARNING "Codice tipo donazione non presente"
HELP "Tipo donazione"
END
STRING F_G_LUOGO 4
BEGIN
PROMPT 2 5 "Luogo donazione "
FLAGS "U"
USE LDN
INPUT CODTAB F_G_LUOGO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_G_LUOGO CODTAB
OUTPUT F_G_D_LUOGO S0
CHECKTYPE NORMAL
WARNING "Codice luogo donazione non presente"
HELP "Luogo donazione"
END
STRING F_G_D_TIPO 25
BEGIN
PROMPT 30 4 ""
FLAGS "D"
END
STRING F_G_D_LUOGO 25
BEGIN
PROMPT 30 5 ""
FLAGS "D"
END
ENDPAGE
ENDMASK

25
at/at0100c.h Executable file
View File

@ -0,0 +1,25 @@
// definizione dei campi della maschera at0100c.msk
// famiglia (collegata a un soggetto)
// pagina 1
#define F_NUOVA 101 // crea nuova famiglia
#define F_ES_COLLEGA 102
#define F_ES_CODICE 103 // campi di ricerca (codice, cognome, nome)
#define F_ES_COGNOME 104 // per collegare il soggetto a una
#define F_ES_NOME 105 // famiglia gi… esistente
#define F_FAMIGLIARI 106 // sheet famigliari
// pagina famigliare
#define F_F_GRADOPAR 101
#define F_F_CODICE 102
#define F_F_COGNOME 103
#define F_F_NOME 104
#define F_F_DATANASC 105
#define F_F_CODSEZ 106
#define F_F_CODSOT 107
#define F_F_CATDON 108
#define F_F_TESSAVIS 109
#define F_F_DENSEZ 151
#define F_F_DENSOT 152
#define F_F_DESC_CATDON 154

260
at/at0100c.uml Executable file
View File

@ -0,0 +1,260 @@
#include "at0100c.h"
#include "lf.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -11 ""
END
//#include <toolbar.h>
ENDPAGE
PAGE "Famiglia" -1 -1 78 20
BUTTON F_NUOVA 21
BEGIN
PROMPT 2 1 "Crea nuova famiglia"
GROUP 1
END
GROUPBOX F_ES_COLLEGA 45 5
BEGIN
PROMPT 30 1 "Collega a famiglia esistente"
GROUP 1
END
NUMBER F_ES_CODICE 6
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 "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
DISPLAY "Tessera" TESSAVIS
OUTPUT F_ES_CODICE CODICE
OUTPUT F_ES_COGNOME COGNOME
OUTPUT F_ES_NOME NOME
CHECKTYPE NORMAL
ADD RUN at0 -0
GROUP 1
END
STRING F_ES_COGNOME 25
BEGIN
PROMPT 31 3 "Cognome "
USE LF_SOGGETTI KEY 2 SELECT LF_FAMIGLIE->CODFAM!=0
JOIN LF_FAMIGLIE TO LF_SOGGETTI KEY 2 INTO CODFAM=CODICE
INPUT COGNOME F_ES_COGNOME
INPUT NOME F_ES_NOME
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Codice@6" CODICE
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
DISPLAY "Tessera" TESSAVIS
COPY OUTPUT F_ES_CODICE
CHECKTYPE SEARCH
HELP "Cognome del soggetto"
ADD RUN at0 -0
GROUP 1
END
STRING F_ES_NOME 25
BEGIN
PROMPT 31 4 "Nome "
COPY ALL F_ES_COGNOME
CHECKTYPE SEARCH
HELP "Nome del soggetto"
ADD RUN at0 -0
GROUP 1
END
SPREADSHEET F_FAMIGLIARI
BEGIN
PROMPT 2 6 ""
ITEM "Grado"
ITEM "Codice"
ITEM "Cognome@25"
ITEM "Nome@25"
ITEM "Nato il@10"
ITEM "Sez."
ITEM "Sot."
ITEM "Cat."
ITEM "Tessera"
END
ENDPAGE
ENDMASK
PAGE "Soggetto familiare" -1 -1 78 20
GROUPBOX DLG_NULL 77 6
BEGIN
PROMPT 1 0 "Dati familiare"
END
LISTBOX F_F_GRADOPAR 12
BEGIN
PROMPT 2 1 "Grado parentela "
FLAGS "U"
#include "parenti.h"
END
NUMBER F_F_CODICE 6
BEGIN
PROMPT 2 2 "Codice "
FLAGS "RG"
USE LF_SOGGETTI KEY 1
INPUT CODICE F_F_CODICE
DISPLAY "Codice@6" CODICE
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
DISPLAY "Tessera" TESSAVIS
OUTPUT F_F_CODICE CODICE
OUTPUT F_F_COGNOME COGNOME
OUTPUT F_F_NOME NOME
OUTPUT F_F_DATANASC DATANASC
OUTPUT F_F_CODSEZ CODSEZ
OUTPUT F_F_CODSOT CODSOT
OUTPUT F_F_CATDON CATDON
OUTPUT F_F_TESSAVIS TESSAVIS
CHECKTYPE NORMAL
ADD RUN at0 -0
END
STRING F_F_COGNOME 25
BEGIN
PROMPT 2 3 "Cognome e nome "
USE LF_SOGGETTI KEY 2
INPUT COGNOME F_F_COGNOME
INPUT NOME F_F_NOME
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Codice@6" CODICE
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
DISPLAY "Tessera" TESSAVIS
COPY OUTPUT F_F_CODICE
CHECKTYPE SEARCH
HELP "Cognome del soggetto"
ADD RUN at0 -0
END
STRING F_F_NOME 25
BEGIN
PROMPT 46 3 ""
COPY ALL F_F_COGNOME
COPY OUTPUT F_F_CODICE
CHECKTYPE SEARCH
HELP "Nome del soggetto"
ADD RUN at0 -0
END
DATE F_F_DATANASC
BEGIN
PROMPT 2 4 "Nato il "
FLAGS "D"
END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 6 "Dati associativi"
END
STRING F_F_CODSEZ 2
BEGIN
PROMPT 2 7 "Sez. "
FLAGS "D"
END
STRING F_F_DENSEZ 25
BEGIN
PROMPT 12 7 ""
FLAGS "D"
END
STRING F_F_CODSOT 2
BEGIN
PROMPT 40 7 "Sot. "
FLAGS "D"
USE LF_SEZIONI
INPUT CODSEZ F_F_CODSEZ
INPUT CODSOT F_F_CODSOT
OUTPUT F_F_DENSEZ DENSEZ
OUTPUT F_F_DENSOT DENSOT
CHECKTYPE NORMAL
END
STRING F_F_DENSOT 25
BEGIN
PROMPT 50 7 ""
FLAGS "D"
END
STRING F_F_CATDON 2
BEGIN
PROMPT 2 8 "Cat. "
FLAGS "D"
USE CTD
INPUT CODTAB F_F_CATDON
OUTPUT F_F_DESC_CATDON S0
CHECKTYPE NORMAL
END
STRING F_F_TESSAVIS 10
BEGIN
PROMPT 52 8 "Tessera AVIS "
FLAGS "D"
END
STRING F_F_DESC_CATDON 25
BEGIN
PROMPT 12 8 ""
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
END
ENDPAGE
ENDMASK

View File

@ -1,9 +1,11 @@
#include <applicat.h>
#include <execp.h> #include <execp.h>
#include <mask.h> #include <mask.h>
#include <msksheet.h> #include <msksheet.h>
#include <mailbox.h> #include <mailbox.h>
#include <applicat.h> #include <prefix.h>
#include <progind.h> #include <progind.h>
#include <recarray.h>
#include <relation.h> #include <relation.h>
#include <tabutil.h> #include <tabutil.h>
#include <urldefid.h> #include <urldefid.h>
@ -20,7 +22,7 @@
#include "donaz.h" #include "donaz.h"
#include "contsan.h" #include "contsan.h"
#include "atlib1.cpp" #include "atlib.h"
#define ALIAS_CTD 100 #define ALIAS_CTD 100
@ -35,6 +37,7 @@ class TDonaz_app : public TApplication
TRecord_array* _sdonazioni; TRecord_array* _sdonazioni;
TRecord_array* _scontrolli; TRecord_array* _scontrolli;
TAssoc_array* _asoggetti; // array dei soggetti inseriti per controllare doppio ins. TAssoc_array* _asoggetti; // array dei soggetti inseriti per controllare doppio ins.
bool _modified;
protected: protected:
@ -50,7 +53,7 @@ protected:
bool check_sog_sheet(const char* codsog); bool check_sog_sheet(const char* codsog);
static bool nome_handler(TMask_field& f, KEY k); static bool nome_handler(TMask_field& f, KEY k);
static bool soggetti_notify(TSheet_field& s, int r, KEY k); static bool soggetti_notify(TSheet_field& s, int r, KEY k);
void add_rows_soggetti(TSheet_field& s, int count = 10, int start = 0); void add_rows_soggetti(TSheet_field& s, int count = 20, int start = 0);
static bool ins_controlli_handler(TMask_field& f, KEY k); static bool ins_controlli_handler(TMask_field& f, KEY k);
public: public:
@ -72,7 +75,6 @@ bool TDonaz_app::ins_controlli_handler(TMask_field& f, KEY k)
return TRUE; return TRUE;
} }
void TDonaz_app::add_rows_soggetti(TSheet_field& s, int count, int start) void TDonaz_app::add_rows_soggetti(TSheet_field& s, int count, int start)
{ {
if (start == 0) if (start == 0)
@ -83,6 +85,7 @@ void TDonaz_app::add_rows_soggetti(TSheet_field& s, int count, int start)
bool TDonaz_app::create() bool TDonaz_app::create()
{ {
_modified = FALSE;
_msk = new TMask("at0200a"); _msk = new TMask("at0200a");
_rel = new TRelation(LF_SOGGETTI); _rel = new TRelation(LF_SOGGETTI);
_rel->add("CTD", "CODTAB==CATDON",1,0,ALIAS_CTD); _rel->add("CTD", "CODTAB==CATDON",1,0,ALIAS_CTD);
@ -123,7 +126,7 @@ bool TDonaz_app::menu(MENU_TAG m)
do do
{ {
TSheet_field& s = (TSheet_field&)msk.field(F_SOGGETTI); TSheet_field& s = (TSheet_field&)msk.field(F_SOGGETTI);
s.destroy(); s.reset();
add_rows_soggetti(s); add_rows_soggetti(s);
_asoggetti->destroy(); _asoggetti->destroy();
msk.set(F_DATADON,oggi); msk.set(F_DATADON,oggi);
@ -132,27 +135,34 @@ bool TDonaz_app::menu(MENU_TAG m)
{ {
case K_ESC: // annulla case K_ESC: // annulla
{ {
if (_modified)
if (yesno_box("Registrare le modifiche?")) if (yesno_box("Registrare le modifiche?"))
TDonaz_app::write(s); TDonaz_app::write(s);
_modified = FALSE;
msk.reset(); msk.reset();
} }
break; break;
case K_SAVE: // registra case K_SAVE: // registra
{ {
TDonaz_app::write(s); TDonaz_app::write(s);
_modified = FALSE;
msk.reset(); msk.reset();
} }
break; break;
case K_INS: // nuovo case K_INS: // nuovo
{ {
TDonaz_app::write(s); TDonaz_app::write(s);
_modified = FALSE;
msk.reset(); msk.reset();
} }
break; break;
case K_QUIT: // fine case K_QUIT: // fine
{ {
if (_modified)
if (yesno_box("Registrare le modifiche?")) if (yesno_box("Registrare le modifiche?"))
TDonaz_app::write(s); TDonaz_app::write(s);
msk.reset();
_modified = FALSE;
} }
break; break;
} }
@ -182,12 +192,13 @@ int TDonaz_app::write(TSheet_field& s)
if (codsog != 0) if (codsog != 0)
{ {
TLocalisamfile& sog = get_relation()->lfile(); TLocalisamfile& sog = get_relation()->lfile();
sog.setkey(1);
sog.zero(); sog.zero();
sog.put(SOG_CODICE, codsog); sog.put(SOG_CODICE, codsog);
int err = sog.read(); int err = sog.read();
if (err == NOERR) if (err == NOERR)
{ {
TString tipocon = row.get(3); const TString16 tipocon = row.get(3);
if (!tipocon.blank()) if (!tipocon.blank())
{ {
TRectype* recc = new TRectype(LF_CONTSAN); TRectype* recc = new TRectype(LF_CONTSAN);
@ -247,7 +258,6 @@ int TDonaz_app::write(TSheet_field& s)
TRectype* key = new TRectype(LF_DONAZ); TRectype* key = new TRectype(LF_DONAZ);
key->put(DON_CODICE, row.get(0)); key->put(DON_CODICE, row.get(0));
//int err = _sdonazioni->read(key);
err = _sdonazioni->read(key); err = _sdonazioni->read(key);
if (err == NOERR) if (err == NOERR)
{ {
@ -256,7 +266,7 @@ int TDonaz_app::write(TSheet_field& s)
{ {
const TRectype& riga = _sdonazioni->row(r); const TRectype& riga = _sdonazioni->row(r);
const TDate d = riga.get(DON_DATADON); const TDate d = riga.get(DON_DATADON);
if (data==d) // esiste già una donazione in questa data if (data==d) // esiste gia' una donazione in questa data
{ {
exist=TRUE; exist=TRUE;
r=0; r=0;
@ -288,7 +298,7 @@ int TDonaz_app::write(TSheet_field& s)
TDate dataultdon = sog.get_date(SOG_DATAULTDON); TDate dataultdon = sog.get_date(SOG_DATAULTDON);
const TString tipo = m.get(F_TIPODON); const TString16 tipo = m.get(F_TIPODON);
int totdon = sog.get_int(SOG_TOTDON); int totdon = sog.get_int(SOG_TOTDON);
sog.put(SOG_TOTDON,totdon+1); sog.put(SOG_TOTDON,totdon+1);
if (data > dataultdon) if (data > dataultdon)
@ -296,7 +306,7 @@ int TDonaz_app::write(TSheet_field& s)
sog.put(SOG_DATAULTDON,data); sog.put(SOG_DATAULTDON,data);
sog.put(SOG_TIPOULTDON,tipo); sog.put(SOG_TIPOULTDON,tipo);
} }
if (xis_donaz(tipo,XIDON_SI)) if (is_donaz(tipo,IDON_SI))
{ {
totdon = sog.get_int(SOG_TOTDONSI); totdon = sog.get_int(SOG_TOTDONSI);
sog.put(SOG_TOTDONSI,totdon+1); sog.put(SOG_TOTDONSI,totdon+1);
@ -304,7 +314,7 @@ int TDonaz_app::write(TSheet_field& s)
if (data>dataultdon) if (data>dataultdon)
sog.put(SOG_DATAULTSI,data); sog.put(SOG_DATAULTSI,data);
} }
if (xis_donaz(tipo,XIDON_AF)) if (is_donaz(tipo,IDON_AF))
{ {
totdon = sog.get_int(SOG_TOTDONAF); totdon = sog.get_int(SOG_TOTDONAF);
sog.put(SOG_TOTDONAF,totdon+1); sog.put(SOG_TOTDONAF,totdon+1);
@ -313,15 +323,15 @@ int TDonaz_app::write(TSheet_field& s)
sog.put(SOG_DATAULTAF,data); sog.put(SOG_DATAULTAF,data);
} }
char modstato = ' '; char modstato = ' ';
const TString stato = sog.get(SOG_STATO); // stato attuale const TString16 stato = sog.get(SOG_STATO); // stato attuale
const TString id1 = sog.get(SOG_IDON1); // idon. 1 const TString16 id1 = sog.get(SOG_IDON1); // idon. 1
const TString id2 = sog.get(SOG_IDON2); // idon. 2 const TString16 id2 = sog.get(SOG_IDON2); // idon. 2
const TString id3 = sog.get(SOG_IDON3); // idon. 3 const TString16 id3 = sog.get(SOG_IDON3); // idon. 3
const TString id4 = sog.get(SOG_IDON4); // idon. 4 const TString16 id4 = sog.get(SOG_IDON4); // idon. 4
const int intsi = sog.get_int(SOG_INTSI); // intervallo per SI const int intsi = sog.get_int(SOG_INTSI); // intervallo per SI
const int intaf = sog.get_int(SOG_INTAF); // intervallo per AF const int intaf = sog.get_int(SOG_INTAF); // intervallo per AF
dataultdon = sog.get_date(SOG_DATAULTDON); // data ultima donazione dataultdon = sog.get_date(SOG_DATAULTDON); // data ultima donazione
const TString tipoultdon(sog.get(SOG_TIPOULTDON)); // tipo ultima donazione const TString16 tipoultdon(sog.get(SOG_TIPOULTDON)); // tipo ultima donazione
TDate datasi(NULLDATE); // data prossima si calcolata TDate datasi(NULLDATE); // data prossima si calcolata
TDate dataaf(NULLDATE); // data prossima af calcolata TDate dataaf(NULLDATE); // data prossima af calcolata
TDate dataultsi(NULLDATE); // data ultima donazione si TDate dataultsi(NULLDATE); // data ultima donazione si
@ -329,15 +339,15 @@ int TDonaz_app::write(TSheet_field& s)
bool id_si = FALSE; // il soggetto è idoneo per si? bool id_si = FALSE; // il soggetto è idoneo per si?
bool id_af = FALSE; // il soggetto è idoneo per af? bool id_af = FALSE; // il soggetto è idoneo per af?
modstato = xmodstato_tcs(stato); modstato = modstato_tcs(stato);
if (modstato == 'I' || modstato == 'F') // il soggetto è idoneo if (modstato == 'I' || modstato == 'F') // il soggetto è idoneo
{ {
id_si = (xis_idon(id1,id2,id3,id4,XIDON_SI) && intsi != 0); // il soggetto è idoneo SI id_si = (is_idon(id1,id2,id3,id4,IDON_SI) && intsi != 0); // il soggetto è idoneo SI
id_af = (xis_idon(id1,id2,id3,id4,XIDON_AF) && intaf != 0); // il soggetto è idoneo AF id_af = (is_idon(id1,id2,id3,id4,IDON_AF) && intaf != 0); // il soggetto è idoneo AF
if (dataultdon.ok()) // se ha fatto almeno una donazione if (dataultdon.ok()) // se ha fatto almeno una donazione
{ {
if (xis_donaz(tipoultdon,XIDON_SI)) // se l'ultima donazione è una SI if (is_donaz(tipoultdon,IDON_SI)) // se l'ultima donazione è una SI
{ {
if (id_si) if (id_si)
{ {
@ -350,19 +360,9 @@ int TDonaz_app::write(TSheet_field& s)
dataaf+=intaf; dataaf+=intaf;
} }
} }
if (xis_donaz(tipoultdon,XIDON_AF)) // se l'ultima donazione è una AF if (is_donaz(tipoultdon,IDON_AF)) // se l'ultima donazione è una AF
{ {
dataultsi = sog.get_date(SOG_DATAULTSI); dataultsi = sog.get_date(SOG_DATAULTSI);
// cerco l'ultima donazione SI
/*
for (int r=s.items(); r>0; r--)
{
TToken_string& row = s.row(r-1);
const TString tipo = row.get(1);
if (is_donaz(tipo,IDON_SI) && !dataultsi.ok())
dataultsi = TDate(row.get(0));
}
*/
if (id_si) if (id_si)
{ {
if (intaf != 0) if (intaf != 0)
@ -399,9 +399,11 @@ int TDonaz_app::write(TSheet_field& s)
sog.put(SOG_DATAPROSAF,dataaf); sog.put(SOG_DATAPROSAF,dataaf);
// controllo la sua categoria // controllo la sua categoria
// se dimesso diventa della categoria collegata
// se non c'e' la categoria collegata ???
TTable ctd("CTD"); TTable ctd("CTD");
TString catdon = sog.get(SOG_CATDON); TString16 catdon = sog.get(SOG_CATDON);
ctd.put("CODTAB",catdon); ctd.put("CODTAB",catdon);
if (ctd.read() == NOERR) if (ctd.read() == NOERR)
{ {
@ -411,6 +413,8 @@ int TDonaz_app::write(TSheet_field& s)
} }
// controllo se è idoneo // controllo se è idoneo
sog.put(SOG_DATAULTAGG,TODAY);
sog.put(SOG_UTENULTAGG,user());
sog.rewrite(); sog.rewrite();
} }
@ -451,6 +455,9 @@ bool TDonaz_app::soggetti_notify(TSheet_field& s, int r, KEY k)
app().add_rows_soggetti(s,10,r+1); app().add_rows_soggetti(s,10,r+1);
s.select(r); s.select(r);
} }
TToken_string& row = s.row(r);
if (row.empty_items())
s.set_focus_cell(r,1);
} }
break; break;
case K_ENTER: case K_ENTER:
@ -458,6 +465,7 @@ bool TDonaz_app::soggetti_notify(TSheet_field& s, int r, KEY k)
case K_CTRL+K_TAB: case K_CTRL+K_TAB:
// uscita riga // uscita riga
{ {
app()._modified = TRUE;
TToken_string& row = s.row(r); TToken_string& row = s.row(r);
const long codsog = row.get_long(0); const long codsog = row.get_long(0);
if (codsog != 0) if (codsog != 0)
@ -475,11 +483,11 @@ bool TDonaz_app::soggetti_notify(TSheet_field& s, int r, KEY k)
const char* cognome = row.get(1); const char* cognome = row.get(1);
if ((cognome != NULL) && (cognome != "\0")) if ((cognome != NULL) && (cognome != "\0"))
{ {
TMask& m = s.sheet_mask(); s.sheet_mask().field(F_S_NOME).set_focusdirty();
m.send_key(K_F9,F_S_CODICE); s.set_focus_cell(r,2);
} }
} }
/*if ((r == s.items()-1) && (r == s.first_empty())) */ s.force_update(r);
if (r == s.items()-1) if (r == s.items()-1)
{ {
app().add_rows_soggetti(s,10,r+1); app().add_rows_soggetti(s,10,r+1);
@ -494,7 +502,8 @@ bool TDonaz_app::soggetti_notify(TSheet_field& s, int r, KEY k)
bool TDonaz_app::nome_handler(TMask_field& f, KEY k) bool TDonaz_app::nome_handler(TMask_field& f, KEY k)
{ {
bool ok = TRUE; bool ok = TRUE;
if (k == K_TAB && f.focusdirty()) //if (k == K_TAB && f.focusdirty())
if (f.to_check(k))
{ {
TMask& m = f.mask(); TMask& m = f.mask();
long codsog = m.get_long(F_S_CODICE); long codsog = m.get_long(F_S_CODICE);

View File

@ -1,5 +1,5 @@
// definizione campi della maschera at0200a.msk // definizione campi della maschera at0200a.msk
// INSERIMENTO VELOCE DONAZIONI // GIORNALIERO DONAZIONI/CONTROLLI
// dati fissi // dati fissi
#define F_DATADON 101 #define F_DATADON 101
@ -21,21 +21,22 @@
#define F_S_CODSOT 107 #define F_S_CODSOT 107
#define F_S_CATDON 108 #define F_S_CATDON 108
#define F_S_TESSAVIS 109 #define F_S_TESSAVIS 109
#define F_S_DENSEZ 201
#define F_S_DENSOT 202
#define F_S_DESC_TIPOCON 203
#define F_S_DESC_CATDON 204
#define F_S_IDON1 205 #define F_S_DENSEZ 151
#define F_S_IDON2 206 #define F_S_DENSOT 152
#define F_S_IDON3 207 #define F_S_DESC_TIPOCON 153
#define F_S_IDON4 208 #define F_S_DESC_CATDON 154
#define F_S_INTSI 209
#define F_S_INTAF 210 #define F_S_IDON1 155
#define F_S_PROSSTIPO 211 #define F_S_IDON2 156
#define F_S_PROSSDATA 212 #define F_S_IDON3 157
#define F_S_DESC_IDON1 213 #define F_S_IDON4 158
#define F_S_DESC_IDON2 214 #define F_S_INTSI 159
#define F_S_DESC_IDON3 215 #define F_S_INTAF 160
#define F_S_DESC_IDON4 216 #define F_S_PROSSTIPO 161
#define F_S_DESC_PROSSTIPO 217 #define F_S_PROSSDATA 162
#define F_S_DESC_IDON1 163
#define F_S_DESC_IDON2 164
#define F_S_DESC_IDON3 165
#define F_S_DESC_IDON4 166
#define F_S_DESC_PROSSTIPO 167

View File

@ -48,7 +48,7 @@ END
DATE F_DATADON DATE F_DATADON
BEGIN BEGIN
PROMPT 2 1 "Data donazione " PROMPT 2 1 "Data donazione "
//VALIDATE NOT_EMPTY_FUNC VALIDATE NOT_EMPTY_FUNC
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
HELP "Data donazione" HELP "Data donazione"
END END
@ -101,14 +101,9 @@ BEGIN
PROMPT 2 4 "Inserimento controlli" PROMPT 2 4 "Inserimento controlli"
END END
GROUPBOX DLG_NULL 77 13 SPREADSHEET F_SOGGETTI
BEGIN BEGIN
PROMPT 1 6 "Soggetti" PROMPT 2 6 "Soggetti"
END
SPREADSHEET F_SOGGETTI 75 11
BEGIN
PROMPT 2 7 ""
ITEM "Codice@6" ITEM "Codice@6"
ITEM "Cognome@25" ITEM "Cognome@25"
ITEM "Nome@25" ITEM "Nome@25"
@ -163,7 +158,7 @@ BEGIN
PROMPT 2 2 "Cognome e nome " PROMPT 2 2 "Cognome e nome "
USE LF_SOGGETTI KEY 2 USE LF_SOGGETTI KEY 2
INPUT COGNOME F_S_COGNOME INPUT COGNOME F_S_COGNOME
INPUT NOME F_S_NOME //INPUT NOME F_S_NOME
DISPLAY "Cognome@25" COGNOME DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC DISPLAY "Nato il@10" DATANASC
@ -181,8 +176,11 @@ END
STRING F_S_NOME 25 STRING F_S_NOME 25
BEGIN BEGIN
PROMPT 46 2 "" PROMPT 46 2 ""
COPY ALL F_S_COGNOME USE LF_SOGGETTI KEY 2
COPY OUTPUT F_S_CODICE INPUT COGNOME F_S_COGNOME
INPUT NOME F_S_NOME
COPY DISPLAY F_S_COGNOME
COPY OUTPUT F_S_COGNOME
CHECKTYPE SEARCH CHECKTYPE SEARCH
HELP "Nome del soggetto" HELP "Nome del soggetto"
ADD RUN at0 -0 ADD RUN at0 -0

View File

@ -1,7 +1,15 @@
#include <applicat.h>
#include <execp.h>
#include <mask.h> #include <mask.h>
#include <form.h> #include <msksheet.h>
#include <printapp.h> #include <mailbox.h>
#include <utility.h> #include <prefix.h>
#include <progind.h>
#include <recarray.h>
#include <relation.h>
#include <tabutil.h>
#include <urldefid.h>
#include <validate.h>
#include "at0.h" #include "at0.h"
#include "lf.h" // se non lo metto non riesco a usare gli LF #include "lf.h" // se non lo metto non riesco a usare gli LF
@ -13,195 +21,346 @@
#include "soggetti.h" #include "soggetti.h"
#include "donaz.h" #include "donaz.h"
#include "contsan.h" #include "contsan.h"
#include "benem.h"
#include "storico.h"
#include "sezioni.h"
class TChiusura_app : public TPrintapp #include "atlib.h"
#define ALIAS_CTD 100
class TContsan_app : public TApplication
{ {
static bool filter_func_chiusura(const TRelation *);
TMask* _msk; TMask* _msk;
TRelation* _rel; TRelation* _rel;
int _cur; TLocalisamfile* _soggetti;
TDate _data_chiusura; TLocalisamfile* _donaz;
TParagraph_string _operazione; TLocalisamfile* _contsan;
TRecord_array* _sdonazioni;
TRecord_array* _scontrolli;
TAssoc_array* _asoggetti; // array dei soggetti inseriti per controllare doppio ins.
bool _modified;
protected: protected:
virtual bool user_create(); virtual bool create();
virtual bool user_destroy(); virtual bool destroy();
virtual bool set_print(int m); virtual bool menu(MENU_TAG m);
virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter);
virtual TMask& get_mask() { return *_msk; } virtual TMask& get_mask() { return *_msk; }
virtual TRelation* get_relation() const { return _rel; }
TAssoc_array& get_array_sogg() { return *_asoggetti; }
int write(TSheet_field& s);
bool check_sog_sheet(const char* codsog);
static bool nome_handler(TMask_field& f, KEY k);
static bool tipocon_handler(TMask_field& f, KEY k);
static bool soggetti_notify(TSheet_field& s, int r, KEY k);
void add_rows_soggetti(TSheet_field& s, int count = 20, int start = 0);
public: public:
void filtra_sezioni(); TContsan_app() {}
void crea_intestazione();
TChiusura_app() : _data_chiusura(TODAY), _operazione("",30) {}
}; };
HIDDEN inline TChiusura_app& app() { return (TChiusura_app&) main_app(); } HIDDEN inline TContsan_app& app() { return (TContsan_app&) main_app(); }
void TChiusura_app::filtra_sezioni() void TContsan_app::add_rows_soggetti(TSheet_field& s, int count, int start)
{ {
TString sezini = _msk->get(F_SEZINI); if (start == 0)
TString sotini = _msk->get(F_SOTINI); s.destroy();
TString sezfin = _msk->get(F_SEZFIN); for (int r=start; r<=start+count-1; r++)
TString sotfin = _msk->get(F_SOTFIN); TToken_string& row = s.row(r);
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);
} }
bool TChiusura_app::preprocess_page(int file, int counter) bool TContsan_app::create()
{
_operazione = "Nulla";
TString cat_estinti = current_cursor()->curr(LF_SEZIONI).get(SEZ_CATESTI);
TString cat_cancellati = current_cursor()->curr(LF_SEZIONI).get(SEZ_CATCANC);
int intesti = current_cursor()->curr(LF_SEZIONI).get_int(SEZ_INTESTI);
int donemer = current_cursor()->curr(LF_SEZIONI).get_int(SEZ_DONEMER);
TString catsog = current_cursor()->curr().get(SOG_CATDON);
if ((catsog==cat_estinti) || (catsog==cat_cancellati))
{
int totdon = current_cursor()->curr().get_int(SOG_TOTDON);
if (totdon >= donemer)
_operazione = "Passaggio a emeriti";
else
_operazione = "Cancellato";
}
else
{
TDate dataultdon = current_cursor()->curr().get(SOG_DATAULTDON);
if (dataultdon.ok())
{
dataultdon.addyear(intesti);
TMask& msk = app().get_mask();
//TDate data_chiusura = msk.get(F_DATA);
if (dataultdon < _data_chiusura)
_operazione = "Passaggio a estinti";
else
_operazione = "Non doveva essere filtrato: data ancora valida";
}
else
_operazione = "Non doveva essere filtrato: data vuota";
}
return TRUE;
}
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);
}
bool TChiusura_app::filter_func_chiusura(const TRelation * rel)
{
bool filtrato = FALSE;
TString cat_estinti = rel->lfile(LF_SEZIONI).curr().get(SEZ_CATESTI);
TString cat_cancellati = rel->lfile(LF_SEZIONI).curr().get(SEZ_CATCANC);
int intesti = rel->lfile(LF_SEZIONI).curr().get_int(SEZ_INTESTI);
TString catsog = rel->lfile().curr().get(SOG_CATDON);
if ((catsog==cat_estinti) || (catsog==cat_cancellati))
filtrato = TRUE;
if (!filtrato)
{
TDate dataultdon = rel->lfile().curr().get(SOG_DATAULTDON);
if (dataultdon.ok())
{
dataultdon.addyear(intesti);
TMask& msk = app().get_mask();
TDate data_chiusura = msk.get(F_DATA);
if (dataultdon < data_chiusura)
filtrato = TRUE;
}
}
return filtrato;
}
bool TChiusura_app::set_print(int)
{
KEY tasto;
tasto = _msk->run();
if (tasto == K_ENTER)
{
_data_chiusura = _msk->get(F_DATA);
reset_files();
add_file(LF_SOGGETTI);
filtra_sezioni();
current_cursor()->set_filterfunction(filter_func_chiusura,TRUE);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TChiusura_app::crea_intestazione()
{
reset_header();
TString sep(132);
TString data_stampa;
sep.fill('-');
set_header(1, (const char *) sep);
sep = "";
sep << "Pag. @#";
sep.right_just(132);
set_header(2,(const char*) sep);
set_header(2,"@0gCHIUSURA ANNUALE ALLA DATA");
data_stampa = _data_chiusura.string();
set_header(2,"@30g%10s", (const char*) data_stampa);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
}
bool TChiusura_app::user_create()
{ {
_modified = FALSE;
_msk = new TMask("at0300a"); _msk = new TMask("at0300a");
_rel = new TRelation(LF_SOGGETTI); _rel = new TRelation(LF_SOGGETTI);
_rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT"); _rel->add("CTD", "CODTAB==CATDON",1,0,ALIAS_CTD);
_donaz = new TLocalisamfile(LF_DONAZ);
_contsan = new TLocalisamfile(LF_CONTSAN);
_sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON);
_scontrolli = new TRecord_array(LF_CONTSAN,CON_PROGCON);
_asoggetti = new TAssoc_array();
TSheet_field& ss = (TSheet_field&)_msk->field(F_SOGGETTI);
ss.set_notify(soggetti_notify);
ss.sheet_mask().set_handler(F_S_NOME,nome_handler);
//ss.sheet_mask().set_handler(F_S_TIPOCON,tipocon_handler);
dispatch_e_menu(BAR_ITEM(1));
_cur = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
return TRUE; return TRUE;
} }
bool TChiusura_app::user_destroy() bool TContsan_app::destroy()
{ {
delete _rel; delete _rel;
delete _msk; delete _msk;
delete _donaz;
delete _contsan;
delete _sdonazioni;
delete _scontrolli;
delete _asoggetti;
return TRUE;
}
bool TContsan_app::menu(MENU_TAG m)
{
TMask& msk = get_mask();
const TDate oggi(TODAY);
KEY tasto;
do
{
TSheet_field& s = (TSheet_field&)msk.field(F_SOGGETTI);
s.reset();
add_rows_soggetti(s);
_asoggetti->destroy();
msk.set(F_DATACON,oggi);
tasto = msk.run();
switch (tasto)
{
case K_ESC: // annulla
{
if (_modified)
if (yesno_box("Registrare le modifiche?"))
TContsan_app::write(s);
_modified = FALSE;
msk.reset();
}
break;
case K_SAVE: // registra
{
TContsan_app::write(s);
_modified = FALSE;
msk.reset();
}
break;
case K_INS: // nuovo
{
TContsan_app::write(s);
_modified = FALSE;
msk.reset();
}
break;
case K_QUIT: // fine
{
if (_modified)
if (yesno_box("Registrare le modifiche?"))
TContsan_app::write(s);
msk.reset();
_modified = FALSE;
}
break;
}
}
while (tasto != K_QUIT);
return FALSE;
}
int TContsan_app::write(TSheet_field& s)
{
const TMask& m = s.mask();
const TDate data = m.get(F_DATACON);
int items = s.items();
TProgind *pi;
pi = new TProgind(items,"Registrazione controlli", FALSE, TRUE, 10);
pi->setstatus(1);
for (int r=1; r<=s.items(); r++)
{
pi->addstatus(1);
TToken_string& row = s.row(r-1);
const long codsog = row.get_long(0);
if (codsog != 0)
{
TLocalisamfile& sog = get_relation()->lfile();
sog.setkey(1);
sog.zero();
sog.put(SOG_CODICE, codsog);
int err = sog.read();
if (err == NOERR)
{
const TString16 tipocon = row.get(3);
if (!tipocon.blank())
{
TRectype* recc = new TRectype(LF_CONTSAN);
recc->put(CON_CODICE, row.get(0));
recc->put(CON_DATACON, m.get(F_DATACON));
recc->put(CON_TIPOCON, tipocon);
recc->put(CON_PROSSTIPO, row.get(4));
recc->put(CON_PROSSDATA, row.get(5));
bool insert = FALSE;
bool exist = FALSE;
TRectype* keyc = new TRectype(LF_CONTSAN);
keyc->put(CON_CODICE, row.get(0));
int err = _scontrolli->read(keyc);
if (err == NOERR)
{
int r=_scontrolli->rows();
while (r>=1 && !insert && !exist)
{
const TRectype& riga = _scontrolli->row(r);
const TDate d = riga.get(CON_DATACON);
if (data==d) // esiste gia' un controllo in questa data
{
exist=TRUE;
r=0;
}
else
if (data > d)
{
recc->put(CON_PROGCON,r+1);
_scontrolli->insert_row(recc);
insert=TRUE;
}
r--;
}
if (!exist && !insert)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
}
}
else
if (err == _iseof || err == _isemptyfile)
{
recc->put(CON_PROGCON,1);
_scontrolli->insert_row(recc);
}
if (!exist)
_scontrolli->write(TRUE);
con_reord(sog.curr(), _scontrolli);
sog.put(SOG_DATAULTAGG,TODAY);
sog.put(SOG_UTENULTAGG,user());
sog.rewrite();
}
}
}
}
delete pi;
return NOERR;
}
bool TContsan_app::check_sog_sheet(const char* codsog)
{
TAssoc_array& array_sogg = app().get_array_sogg();
if (array_sogg.is_key(codsog))
return FALSE;
else
return TRUE;
}
bool TContsan_app::soggetti_notify(TSheet_field& s, int r, KEY k)
{
bool ok = TRUE;
switch (k)
{
case K_CTRL+K_DEL:
// avvenuta cancellazione riga
break;
case K_SPACE:
// inizio modifica riga
break;
case K_TAB:
// entrata riga
{
if (r > 1)
{
if ((r == s.items()-1) && (r == s.first_empty()))
{
app().add_rows_soggetti(s,10,r+1);
s.select(r);
}
TToken_string& row = s.row(r);
if (row.empty_items())
s.set_focus_cell(r,1);
}
}
break;
case K_ENTER:
// uscita da riga modificata
case K_CTRL+K_TAB:
// uscita riga
{
app()._modified = TRUE;
TToken_string& row = s.row(r);
const long codsog = row.get_long(0);
if (codsog != 0)
for (int i=s.items()-1; i>=0; i--)
{
if (i != r)
{
TToken_string& row = s.row(i);
if (codsog == row.get_long(0))
return s.sheet_mask().field(F_S_CODICE).error_box("Soggetto gia' inserito");
}
}
else
{
const char* cognome = row.get(1);
if ((cognome != NULL) && (cognome != "\0"))
{
s.sheet_mask().field(F_S_NOME).set_focusdirty();
s.set_focus_cell(r,2);
}
}
s.force_update(r);
if (r == s.items()-1)
{
app().add_rows_soggetti(s,10,r+1);
s.select(r);
}
}
break;
}
return ok;
}
bool TContsan_app::nome_handler(TMask_field& f, KEY k)
{
bool ok = TRUE;
//if (k == K_TAB && f.focusdirty())
if (f.to_check(k))
{
TMask& m = f.mask();
long codsog = m.get_long(F_S_CODICE);
if (codsog == 0)
f.on_key(K_F9);
}
return ok;
}
bool TContsan_app::tipocon_handler(TMask_field& f, KEY k)
{
bool ok = TRUE;
if (k == K_TAB && !f.focusdirty())
{
TMask& m = f.mask();
TString16 tipoconsog = m.get(F_S_TIPOCON);
TString80 nome = m.get(F_S_NOME);
if (tipoconsog.empty() && nome.not_empty())
{
TString16 tipocon = app().get_mask().get(F_TIPOCON);
TString16 prosstipo = app().get_mask().get(F_PROSSTIPO);
TDate prossdata = app().get_mask().get(F_PROSSDATA);
m.field(F_S_TIPOCON).set(tipocon);
m.field(F_S_PROSSTIPO).set(prosstipo);
m.field(F_S_PROSSDATA).set(prossdata);
}
}
return TRUE; return TRUE;
} }
int at0300(int argc, char* argv[]) int at0300(int argc, char* argv[])
{ {
TChiusura_app a; TContsan_app a;
a.run(argc, argv, "Chiusura annuale"); a.run(argc, argv, "Giornaliero controlli");
return 0; return 0;
} }

View File

@ -1,12 +1,43 @@
// chiusura annuale // definizione campi della maschera at0300a.msk
// definizione campi per maschera di selezione // GIORNALIERO CONTROLLI
#define F_SEZINI 101 // dati fissi
#define F_D_SEZINI 102 #define F_DATACON 101
#define F_SOTINI 103 #define F_TIPOCON 102
#define F_D_SOTINI 104 #define F_PROSSTIPO 103
#define F_SEZFIN 105 #define F_PROSSDATA 104
#define F_D_SEZFIN 106 #define F_DESC_TIPOCON 105
#define F_SOTFIN 107 #define F_DESC_PROSSTIPO 106
#define F_D_SOTFIN 108
#define F_DATA 109 // spreadsheet
#define F_SOGGETTI 107
// pagina soggetti
#define F_S_CODICE 101
#define F_S_COGNOME 102
#define F_S_NOME 103
#define F_S_TIPOCON 104
#define F_S_PROSSTIPO 105
#define F_S_PROSSDATA 106
#define F_S_DATANASC 107
#define F_S_CODSEZ 108
#define F_S_CODSOT 109
#define F_S_CATDON 110
#define F_S_TESSAVIS 111
#define F_S_DENSEZ 151
#define F_S_DENSOT 152
#define F_S_DESC_TIPOCON 153
#define F_S_DESC_CATDON 155
#define F_S_IDON1 156
#define F_S_IDON2 157
#define F_S_IDON3 158
#define F_S_IDON4 159
#define F_S_INTSI 160
#define F_S_INTAF 161
#define F_S_DESC_IDON1 162
#define F_S_DESC_IDON2 163
#define F_S_DESC_IDON3 164
#define F_S_DESC_IDON4 165
#define F_S_DESC_PROSSTIPO 166

View File

@ -1,138 +1,430 @@
#include "at0300a.h" #include "at0300a.h"
#include "lf.h" #include "lf.h"
PAGE "Chiusura annuale" -1 -1 78 20
TOOLBAR "" 0 20 0 2
BUTTON DLG_SAVEREC 10 2
BEGIN
PROMPT -14 -11 "~Registra"
MESSAGE EXIT,K_SAVE
PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
END
BUTTON DLG_NEWREC 10 2
BEGIN
PROMPT -24 -11 "~Nuovo"
MESSAGE EXIT,K_INS
PICTURE BMP_NEWREC
PICTURE BMP_NEWRECDN
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -34 -11 "~Annulla"
MESSAGE EXIT,K_ESC
PICTURE 102
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -44 -11 "~Fine"
MESSAGE EXIT,K_QUIT
PICTURE BMP_QUIT
PICTURE BMP_QUITDN
END
ENDPAGE
PAGE "Giornaliero controlli" -1 -1 78 20
GROUPBOX DLG_NULL 77 6
BEGIN
PROMPT 1 0 "Dati fissi"
FLAGS "R"
END
DATE F_DATACON
BEGIN
PROMPT 2 1 "Data controllo "
VALIDATE NOT_EMPTY_FUNC
CHECKTYPE REQUIRED
HELP "Data donazione"
END
//STRING F_TIPOCON 2
//BEGIN
// PROMPT 2 2 "Tipo/Esito "
// FLAGS "U"
// USE TCS
// INPUT CODTAB F_TIPOCON
// DISPLAY "Codice" CODTAB
// DISPLAY "Descrizione@30" S0
// OUTPUT F_TIPOCON CODTAB
// OUTPUT F_DESC_TIPOCON S0
// CHECKTYPE NORMAL
// WARNING "Codice non presente"
// HELP "Tipo/Esito controllo sanitario"
//END
//
//STRING F_PROSSTIPO 2
//BEGIN
// PROMPT 2 3 "Prossimo tipo "
// FLAGS "U"
// USE TCS
// INPUT CODTAB F_PROSSTIPO
// DISPLAY "Codice" CODTAB
// DISPLAY "Descrizione@30" S0
// OUTPUT F_PROSSTIPO CODTAB
// OUTPUT F_DESC_PROSSTIPO S0
// CHECKTYPE NORMAL
// WARNING "Codice non presente"
// HELP "Tipo/Esito del prossimo controllo previsto"
//END
//
//DATE F_PROSSDATA
//BEGIN
// PROMPT 2 4 "Data prevista "
// HELP "Data prevista per il prossimo controllo"
//END
//
//STRING F_DESC_TIPOCON 25
//BEGIN
// PROMPT 30 2 ""
// FLAGS "D"
//END
//
//STRING F_DESC_PROSSTIPO 25
//BEGIN
// PROMPT 30 3 ""
// FLAGS "D"
//END
//
SPREADSHEET F_SOGGETTI
BEGIN
PROMPT 2 6 "Soggetti"
ITEM "Codice@6"
ITEM "Cognome@25"
ITEM "Nome@25"
ITEM "Contr."
ITEM "Pross."
ITEM "Data pross."
ITEM "Nato il@10"
ITEM "Sez."
ITEM "Sot."
ITEM "Cat."
ITEM "Tessera"
END
ENDPAGE
ENDMASK
PAGE "Soggetto " -1 -1 78 20
GROUPBOX DLG_NULL 77 5
BEGIN
PROMPT 1 0 ""
FLAGS "R"
END
NUMBER F_S_CODICE 6
BEGIN
PROMPT 2 1 "Codice "
FLAGS "RG"
USE LF_SOGGETTI KEY 1
INPUT CODICE F_S_CODICE
DISPLAY "Codice@6" CODICE
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
DISPLAY "Tessera" TESSAVIS
OUTPUT F_S_CODICE CODICE
OUTPUT F_S_COGNOME COGNOME
OUTPUT F_S_NOME NOME
OUTPUT F_S_DATANASC DATANASC
OUTPUT F_S_CODSEZ CODSEZ
OUTPUT F_S_CODSOT CODSOT
OUTPUT F_S_CATDON CATDON
OUTPUT F_S_TESSAVIS TESSAVIS
CHECKTYPE NORMAL
ADD RUN at0 -0
END
STRING F_S_COGNOME 25
BEGIN
PROMPT 2 2 "Cognome e nome "
USE LF_SOGGETTI KEY 2
INPUT COGNOME F_S_COGNOME
//INPUT NOME F_S_NOME
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Codice@6" CODICE
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
DISPLAY "Tessera" TESSAVIS
COPY OUTPUT F_S_CODICE
CHECKTYPE SEARCH
HELP "Cognome del soggetto"
ADD RUN at0 -0
END
STRING F_S_NOME 25
BEGIN
PROMPT 46 2 ""
USE LF_SOGGETTI KEY 2
INPUT COGNOME F_S_COGNOME
INPUT NOME F_S_NOME
COPY DISPLAY F_S_COGNOME
COPY OUTPUT F_S_COGNOME
CHECKTYPE SEARCH
HELP "Nome del soggetto"
ADD RUN at0 -0
END
GROUPBOX DLG_NULL 77 9
BEGIN
PROMPT 1 9 "Dati del controllo sanitario effettuato"
END
STRING F_S_TIPOCON 2
BEGIN
PROMPT 2 10 "Tipo controllo "
FLAGS "U"
USE TCS SELECT S6=="N"
INPUT CODTAB F_S_TIPOCON
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_S_TIPOCON CODTAB
OUTPUT F_S_DESC_TIPOCON S0
WARNING "Codice non presente"
HELP "Tipo/Esito controllo sanitario"
END
STRING F_S_PROSSTIPO 2
BEGIN
PROMPT 2 16 "Prossimo contr.: Tipo "
FLAGS "U"
USE TCS
INPUT CODTAB F_S_PROSSTIPO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_S_PROSSTIPO CODTAB
OUTPUT F_S_DESC_PROSSTIPO S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Tipo/Esito controllo sanitario"
END
DATE F_S_PROSSDATA
BEGIN
PROMPT 56 16 "Data "
HELP "Data controllo"
END
DATE F_S_DATANASC
BEGIN
PROMPT 2 3 "Nato il "
FLAGS "D"
END
GROUPBOX DLG_NULL 77 4 GROUPBOX DLG_NULL 77 4
BEGIN BEGIN
PROMPT 1 1 "Scelta sezioni/sottogruppi" PROMPT 1 5 "Dati associativi"
END END
STRING F_SEZINI 2 STRING F_S_CODSEZ 2
BEGIN BEGIN
PROMPT 2 2 "Da " PROMPT 2 6 "Sez. "
FLAGS "U" FLAGS "D"
END
STRING F_S_DENSEZ 25
BEGIN
PROMPT 12 6 ""
FLAGS "D"
END
STRING F_S_CODSOT 2
BEGIN
PROMPT 40 6 "Sot. "
FLAGS "D"
USE LF_SEZIONI USE LF_SEZIONI
INPUT CODSEZ F_SEZINI INPUT CODSEZ F_S_CODSEZ
INPUT CODSOT F_SOTINI INPUT CODSOT F_S_CODSOT
DISPLAY "Cod.sez" CODSEZ OUTPUT F_S_DENSEZ DENSEZ
DISPLAY "Cod.sot." CODSOT OUTPUT F_S_DENSOT DENSOT
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 CHECKTYPE NORMAL
HELP "Sezione da cui partire"
END END
STRING F_SOTINI 2 STRING F_S_DENSOT 25
BEGIN BEGIN
PROMPT 2 3 " " PROMPT 50 6 ""
COPY ALL F_SEZINI FLAGS "D"
CHECKTYPE SEARCH
HELP "Codice sottogruppo da cui partire"
END END
STRING F_D_SOTINI 25 STRING F_S_CATDON 2
BEGIN BEGIN
PROMPT 11 3 "" PROMPT 2 7 "Cat. "
FLAGS "U" FLAGS "D"
COPY USE F_D_SEZINI USE CTD
INPUT DENSEZ F_D_SEZINI INPUT CODTAB F_S_CATDON
INPUT DENSOT F_D_SOTINI OUTPUT F_S_DESC_CATDON S0
COPY DISPLAY F_D_SEZINI
COPY OUTPUT F_D_SEZINI
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Sottogruppo da cui partire"
END END
STRING F_SEZFIN 2 STRING F_S_TESSAVIS 10
BEGIN BEGIN
PROMPT 41 2 "A " PROMPT 52 7 "Tessera AVIS "
FLAGS "U" FLAGS "D"
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 END
STRING F_D_SEZFIN 25 STRING F_S_DESC_TIPOCON 25
BEGIN BEGIN
PROMPT 49 2 "" PROMPT 23 10 ""
FLAGS "D"
END
STRING F_S_DESC_CATDON 25
BEGIN
PROMPT 12 7 ""
FLAGS "D"
END
TEXT DLG_NULL
BEGIN
PROMPT 2 11 "Se idoneita': Tipi donazione ammessi"
END
STRING F_S_IDON1 2
BEGIN
PROMPT 40 11 ""
FLAGS "U" FLAGS "U"
USE LF_SEZIONI KEY 2 USE IDO
INPUT DENSEZ F_D_SEZFIN INPUT CODTAB F_S_IDON1
DISPLAY "Sezione@25" DENSEZ DISPLAY "Codice" CODTAB
DISPLAY "Sottogruppo@25" DENSOT DISPLAY "Descrizione@40" S0
DISPLAY "Cod.sez" CODSEZ OUTPUT F_S_IDON1 CODTAB
DISPLAY "Cod.sot." CODSOT OUTPUT F_S_DESC_IDON1 S0
COPY OUTPUT F_SEZFIN
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Sezione finale" WARNING "Codice non presente"
HELP "Idoneita' alla donazione"
END END
STRING F_SOTFIN 2 STRING F_S_IDON2 2
BEGIN BEGIN
PROMPT 41 3 " " PROMPT 40 12 ""
COPY ALL F_SEZFIN
CHECKTYPE SEARCH
HELP "Codice sottogruppo finale"
END
STRING F_D_SOTFIN 25
BEGIN
PROMPT 49 3 ""
FLAGS "U" FLAGS "U"
COPY USE F_D_SEZFIN USE IDO
INPUT DENSEZ F_D_SEZFIN INPUT CODTAB F_S_IDON2
INPUT DENSOT F_D_SOTFIN DISPLAY "Codice" CODTAB
COPY DISPLAY F_D_SEZFIN DISPLAY "Descrizione@40" S0
COPY OUTPUT F_D_SEZFIN OUTPUT F_S_IDON2 CODTAB
OUTPUT F_S_DESC_IDON2 S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
HELP "Sottogruppo finale" WARNING "Codice non presente"
HELP "Idoneita' alla donazione"
END END
DATE F_DATA STRING F_S_IDON3 2
BEGIN BEGIN
PROMPT 2 5 "Data chiusura " PROMPT 40 13 ""
CHECKTYPE REQUIRED FLAGS "U"
HELP "Data di riferimento per i conteggi di chiusura" USE IDO
INPUT CODTAB F_S_IDON3
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_S_IDON3 CODTAB
OUTPUT F_S_DESC_IDON3 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Idoneita' alla donazione"
END
STRING F_S_IDON4 2
BEGIN
PROMPT 40 14 ""
FLAGS "U"
USE IDO
INPUT CODTAB F_S_IDON4
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_S_IDON4 CODTAB
OUTPUT F_S_DESC_IDON4 S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Idoneita' alla donazione"
END
TEXT DLG_NULL
BEGIN
PROMPT 2 15 " Intervalli"
END
NUMBER F_S_INTSI 3 0
BEGIN
PROMPT 40 15 "Sangue intero "
FLAGS "U"
END
NUMBER F_S_INTAF 3 0
BEGIN
PROMPT 60 15 "Aferesi "
FLAGS "U"
END
STRING F_S_DESC_IDON1 25
BEGIN
PROMPT 46 11 ""
FLAGS "D"
END
STRING F_S_DESC_IDON2 25
BEGIN
PROMPT 46 12 ""
FLAGS "D"
END
STRING F_S_DESC_IDON3 25
BEGIN
PROMPT 46 13 ""
FLAGS "D"
END
STRING F_S_DESC_IDON4 25
BEGIN
PROMPT 46 14 ""
FLAGS "D"
END
STRING F_S_DESC_PROSSTIPO 25
BEGIN
PROMPT 29 16 ""
FLAGS "D"
END END
BUTTON DLG_OK 9 2 BUTTON DLG_OK 9 2
BEGIN BEGIN
PROMPT -12 14 "" PROMPT -13 -1 ""
END END
BUTTON DLG_QUIT 9 2 BUTTON DLG_CANCEL 9 2
BEGIN BEGIN
PROMPT -22 14 "" PROMPT -23 -1 ""
END
BUTTON DLG_DELREC 9 2
BEGIN
PROMPT -33 -1 ""
MESSAGE EXIT, K_DEL
END END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

343
at/at0400.cpp Executable file
View File

@ -0,0 +1,343 @@
#include <mask.h>
#include <msksheet.h>
#include <progind.h>
#include <recarray.h>
#include <relapp.h>
#include <tabutil.h>
#include <utility.h>
#include "at0.h"
#include "lf.h" // se non lo metto non riesco a usare gli LF
// nomi campi maschera
#include "at0400a.h"
// nomi dei campi
#include "soggetti.h"
#include "convoc.h"
#include "rconvoc.h"
#define IDON_SI "SI"
#define IDON_AF "AF"
class TConvoc_app: public TRelation_application
{
TMask* _msk;
TRelation* _rel;
TRelation* _relsog;
TCursor* _cur; // cursore per selezione soggetti
TLocalisamfile* _rconvoc;
TLocalisamfile* _soggetti;
TRecord_array* _sconvocati; // sheet convocati
long _lastcod; // progressivo convocazione da assegnare
long _numero; // numero convocazione
TDate _data; // data convocazione
TString16 _punto; // punto di raccolta
TString16 _tipo; // tipo donazione
TString16 _codsez; // codice sezione convocata
TString16 _codsot; // codice sottogruppo
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual const char* get_next_key();
virtual int scrivi(const TMask& m, bool ri);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
virtual int read(TMask& m);
virtual bool remove();
virtual bool changing_mask(int mode) { return FALSE; }
virtual TMask* get_mask( int mode = 0) { return _msk; }
virtual TRelation* get_relation() const { return _rel; }
static bool convocati_notify(TSheet_field& s, int r, KEY k);
static bool esegui_handler(TMask_field& f, KEY k);
public:
TConvoc_app() {}
};
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 is_idon(TString16 id1, TString16 id2, TString16 id3, TString16 id4, const char* tipo)
//verifica che almeno una delle "id" sia del tipo "tipo"
{
return (is_idon_one(id1,tipo) || is_idon_one(id2,tipo) || is_idon_one(id3,tipo) || is_idon_one(id4,tipo));
}
*/
bool TConvoc_app::esegui_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
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);
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);
// filtro per punto di raccolta
cur->setfilter(format("PUNTORACC == \"%s\"",(const char*)app()._punto));
// altri filtri piu' complicati
//cur->set_filterfunction(filter_func_convoc);
TSheet_field& s = (TSheet_field&)m.field(F_CONVOCATI);
s.destroy();
TRectype& rec = cur->curr();
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);
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(' '); // stampato
row.add(rec.get(SOG_DATANASC));
row.add(rec.get(SOG_CATDON));
row.add(rec.get(SOG_TESSAVIS));
r++;
}
s.force_update();
}
return TRUE;
}
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
_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);
TSheet_field& sc = (TSheet_field&)_msk->field(F_CONVOCATI);
sc.set_notify(convocati_notify);
//TMask& scmask = sc.sheet_mask();
_rel->lfile().last();
_lastcod = _rel->lfile().get_long(COV_NUMERO);
return TRUE;
}
bool TConvoc_app::user_destroy()
{
delete _rel;
delete _relsog;
delete _msk;
delete _rconvoc;
delete _soggetti;
delete _sconvocati;
return TRUE;
}
const char* TConvoc_app::get_next_key()
{
// autonumerazione progressiva delle convocazioni
return format("%d|%ld", F_NUMERO, _lastcod+1 );
}
bool TConvoc_app::remove()
{
// cancella convocati
// cancella testata convocazione
bool ok = TRUE;
// cancella convocati
int err = _sconvocati->remove();
if (err == _iseof || err == _isemptyfile)
err = NOERR;
// cancella la testata
if (err == NOERR) ok = TRelation_application::remove();
return (ok && err == NOERR);
}
int TConvoc_app::read(TMask& m)
{
int err = TRelation_application::read(m);
if (err == NOERR)
{
TRectype* key = new TRectype(LF_RCONVOC);
key->put(RCV_NUMERO, m.get(F_NUMERO));
err = _sconvocati->read(key);
if (err == NOERR)
{
TLocalisamfile soggetti(LF_SOGGETTI);
TSheet_field& s = (TSheet_field&)m.field(F_CONVOCATI);
s.destroy();
for (int r=1; r<=_sconvocati->rows(); r++)
{
TToken_string& row = s.row(r-1);
const TRectype& riga = _sconvocati->row(r);
const TString& codice = riga.get(RCV_CODICE);
row.add(codice);
soggetti.put(SOG_CODICE,codice);
if (soggetti.read() != NOERR)
soggetti.zero();
row.add(soggetti.get(SOG_COGNOME));
row.add(soggetti.get(SOG_NOME));
row.add(riga.get(RCV_STAMPATO));
row.add(soggetti.get(SOG_DATANASC));
row.add(soggetti.get(SOG_CATDON));
row.add(soggetti.get(SOG_TESSAVIS));
}
}
else
if (err == _iseof || err == _isemptyfile)
err = NOERR;
}
return err;
}
int TConvoc_app::write(const TMask& m)
{
long curcod = m.get_long(F_NUMERO);
if (curcod > _lastcod) _lastcod = curcod;
return TConvoc_app::scrivi(m, FALSE);
}
int TConvoc_app::rewrite(const TMask& m)
{
return TConvoc_app::scrivi(m, TRUE);
}
int TConvoc_app::scrivi(const TMask& m, bool ri)
{
// questo trucco è autorizzato dal capo!
//TMask& hmask = (TMask&) m;
//TDate oggi(TODAY);
//hmask.set(F_DATAULTAGG,oggi);
//hmask.set(F_UTENULTAGG,user());
int err = ri ? TRelation_application::rewrite(m) : TRelation_application::write(m);
if (err == NOERR)
{
_sconvocati->destroy_rows();
TSheet_field& s = (TSheet_field&)m.field(F_CONVOCATI);
TRectype* key = new TRectype(LF_RCONVOC);
key->put(RCV_NUMERO, m.get(F_NUMERO));
_sconvocati->set_key(key);
for (int r=s.items(); r>0; r--)
{
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));
}
err = ri ? _sconvocati->rewrite() : _sconvocati->write();
}
return err;
}
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
{
switch (k)
{
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;
}
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;
a.run(argc, argv, "Gestione convocazione");
return 0;
}

28
at/at0400a.h Executable file
View File

@ -0,0 +1,28 @@
// Gestione convocazioni per BOLOGNA
// definizione campi per maschera
#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_ESEGUI 140
// pagina soggetti
#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_DESC_CATDON 151

311
at/at0400a.uml Executable file
View File

@ -0,0 +1,311 @@
#include "at0400a.h"
#include "lf.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Testata" -1 -1 78 20
GROUPBOX DLG_NULL 77 9
BEGIN
PROMPT 1 0 "Opzioni per la convocazione"
END
NUMBER F_NUMERO 5
BEGIN
PROMPT 2 1 "Numero "
FIELD NUMERO
FLAGS "RG"
KEY 1
USE LF_CONVOC
INPUT NUMERO F_NUMERO
DISPLAY "Numero" NUMERO
DISPLAY "Data@10" DATA
DISPLAY "Punto" PUNTO
DISPLAY "Tipo" TIPO
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
OUTPUT F_NUMERO NUMERO
OUTPUT F_DATA DATA
OUTPUT F_PUNTO PUNTO
OUTPUT F_TIPO TIPO
OUTPUT F_CODSEZ CODSEZ
OUTPUT F_CODSOT CODSOT
CHECKTYPE REQUIRED
VALIDATE NOT_EMPTY_FUNC
END
DATE F_DATA
BEGIN
PROMPT 2 2 "Data "
FIELD DATA
KEY 2
USE LF_CONVOC KEY 2
INPUT DATA F_DATA
INPUT PUNTO F_PUNTO
INPUT TIPO F_TIPO
INPUT CODSEZ F_CODSEZ
INPUT CODSOT F_CODSOT
COPY DISPLAY F_NUMERO
COPY OUTPUT F_NUMERO
CHECKTYPE REQUIRED
VALIDATE NOT_EMPTY_FUNC
END
STRING F_PUNTO 4
BEGIN
PROMPT 2 3 "Punto di raccolta "
FIELD PUNTO
FLAGS "U"
USE LDN
INPUT CODTAB F_PUNTO
DISPLAY "Codice" CODTAB
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"
VALIDATE NOT_EMPTY_FUNC
END
STRING F_D_PUNTO 25
BEGIN
PROMPT 27 3 ""
FLAGS "D"
END
STRING F_TIPO 2
BEGIN
PROMPT 2 4 "Tipo donazione "
FIELD TIPO
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 REQUIRED
VALIDATE NOT_EMPTY_FUNC
WARNING "Codice non presente"
HELP "Tipo donazione"
END
STRING F_D_TIPO 25
BEGIN
PROMPT 27 4 ""
FLAGS "D"
END
STRING F_CODSEZ 2
BEGIN
PROMPT 2 5 "Sezione "
FIELD CODSEZ
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 27 5 ""
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 6 "Sottogruppo "
FIELD CODSOT
COPY ALL F_CODSEZ
CHECKTYPE NORMAL
HELP "Codice sottogruppo da convocare"
ADD MASK at0700a
END
STRING F_DENSOT 25
BEGIN
PROMPT 27 6 ""
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
STRING F_NOTE 100 60
BEGIN
PROMPT 2 7 "Note "
FIELD NOTE
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 ""
ITEM "Codice@6"
ITEM "Cognome@25"
ITEM "Nome@25"
ITEM "St."
ITEM "Nato il@10"
ITEM "Cat."
ITEM "Tessera"
END
ENDPAGE
ENDMASK
PAGE "Soggetto " -1 -1 78 20
GROUPBOX DLG_NULL 77 5
BEGIN
PROMPT 1 0 ""
FLAGS "R"
END
NUMBER F_S_CODICE 6
BEGIN
PROMPT 2 1 "Codice "
FLAGS "RG"
USE LF_SOGGETTI KEY 1
INPUT CODICE F_S_CODICE
DISPLAY "Codice@6" CODICE
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
DISPLAY "Tessera" TESSAVIS
OUTPUT F_S_CODICE CODICE
OUTPUT F_S_COGNOME COGNOME
OUTPUT F_S_NOME NOME
OUTPUT F_S_DATANASC DATANASC
OUTPUT F_S_CATDON CATDON
OUTPUT F_S_TESSAVIS TESSAVIS
CHECKTYPE NORMAL
ADD RUN at0 -0
END
STRING F_S_COGNOME 25
BEGIN
PROMPT 2 2 "Cognome e nome "
USE LF_SOGGETTI KEY 2
INPUT COGNOME F_S_COGNOME
INPUT NOME F_S_NOME
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Codice@6" CODICE
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
DISPLAY "Tessera" TESSAVIS
COPY OUTPUT F_S_CODICE
CHECKTYPE SEARCH
HELP "Cognome del soggetto"
ADD RUN at0 -0
END
STRING F_S_NOME 25
BEGIN
PROMPT 46 2 ""
COPY ALL F_S_COGNOME
COPY OUTPUT F_S_CODICE
CHECKTYPE SEARCH
HELP "Nome del soggetto"
ADD RUN at0 -0
END
BOOLEAN F_S_STAMPATO
BEGIN
PROMPT 46 3 "Convoc. stampata"
END
DATE F_S_DATANASC
BEGIN
PROMPT 2 3 "Nato il "
FLAGS "D"
END
STRING F_S_CATDON 2
BEGIN
PROMPT 2 7 "Cat. "
FLAGS "D"
USE CTD
INPUT CODTAB F_S_CATDON
OUTPUT F_S_DESC_CATDON S0
CHECKTYPE NORMAL
END
STRING F_S_TESSAVIS 10
BEGIN
PROMPT 52 7 "Tessera AVIS "
FLAGS "D"
END
STRING F_S_DESC_CATDON 25
BEGIN
PROMPT 12 7 ""
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
END
ENDPAGE
ENDMASK

View File

@ -115,7 +115,7 @@ END
STRING F_LOCALITA 4 STRING F_LOCALITA 4
BEGIN BEGIN
PROMPT 2 7 "Località " PROMPT 2 7 "Localita' "
FIELD LOCALITA FIELD LOCALITA
FLAGS "U" FLAGS "U"
USE LCP SELECT S7=#F_COM USE LCP SELECT S7=#F_COM

View File

@ -1,23 +1,29 @@
#include <xvt.h> #include <xvt.h>
#include <strings.h>
#include <checks.h> #include <checks.h>
#include "at1.h" #include "at1.h"
#define usage "Error - usage : %s -[0,1]" #define usage "Error - usage : %s -{0|1|2|3}"
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; const int r = (argc > 1) ? atoi(&argv[1][1]) : -1;
switch (r) switch (r)
{ {
case 0: case 0:
rt = at1100(argc, argv); break; rt = at1100(argc,argv) ; break;
case 1: case 1:
rt = at1200(argc, argv); break; rt = at1200(argc,argv) ; break;
default: case 2:
error_box(usage, argv[0]) ; rt = 1; break; rt = at1300(argc,argv) ; break;
case 3:
rt = at1400(argc,argv) ; break;
default:
error_box(usage, argv[0]) ; break;
} }
return rt; return rt;
} }

View File

@ -1,21 +1,31 @@
#define APPNAME AVIS #define APPNAME AVIS
#define QAPPNAME "AVIS" #define QAPPNAME "AVIS"
#define LIBDIR f:\xvt.403\win_x86\ptk\lib #define LIBDIR f:\xvt.403\win_x86\ptk\lib
#define QFIRMNAME "AGA Informatica S.r.l."
#include <default.url> #include <default.url>
/* ---------------------------------------------------- /* at1 -0 chiusura periodica */
* at1 -0
* ---------------------------------------------------- */
MENU TASK_MENUBAR MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ----------------------------------------------------
* at1 -1 /* at1 -1 attribuzione benemerenze */
* ---------------------------------------------------- */
MENUBAR MENU_BAR(1) MENUBAR MENU_BAR(1)
MENU MENU_BAR(1) MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* at1 -2 sblocco sospesi */
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
/* at1 -3 stampa tessere */
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"

View File

@ -1,159 +1,167 @@
#include <mask.h>
#include <form.h> #include <form.h>
#include <mask.h>
#include <printapp.h> #include <printapp.h>
#include <utility.h>
#include "lf.h"
#include "medici.h"
#include <comuni.h>
#include "at1.h" #include "at1.h"
#include "lf.h" // se non lo metto non riesco a usare gli LF
// nomi campi maschera
#include "at1100a.h" #include "at1100a.h"
enum ts { undefined = 0, elenco = 1, etichette = 2 }; // nomi dei campi
#include "soggetti.h"
#include "donaz.h"
#include "contsan.h"
#include "benem.h"
#include "storico.h"
#include "sezioni.h"
// definizione form per etichette class TChiusura_app : public TPrintapp
class TMed_form : public TForm
{ {
public: static bool filter_func_chiusura(const TRelation *);
virtual TCursor* cursor() const;
virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ;
TMed_form(): TForm() {};
TMed_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {};
virtual ~TMed_form() {};
};
class TMedprint_application : public TPrintapp
{
TRelation* _rel;
TMask* _msk; TMask* _msk;
TMed_form* _form_eti; TRelation* _rel;
int _cur;
TDate _data_chiusura;
TParagraph_string _operazione;
int _cur1, _cur2;
TParagraph_string _cognome_nome, _dencom, _indirizzo;
TDate _data_stampa;
ts _tipo_stampa;
protected: protected:
virtual bool user_create(); virtual bool user_create();
virtual bool user_destroy(); virtual bool user_destroy();
virtual bool set_print(int m); virtual bool set_print(int m);
virtual void set_page(int file, int cnt); virtual void set_page(int file, int cnt);
virtual bool preprocess_page (int file, int counter); virtual bool preprocess_page(int file, int counter);
virtual TMask& get_mask() { return *_msk; }
public: public:
void filtra_sezioni();
void crea_intestazione(); void crea_intestazione();
TMedprint_application() : _data_stampa(TODAY), _indirizzo("",25), _dencom("",25), _cognome_nome("",40) {} TChiusura_app() : _data_chiusura(TODAY), _operazione("",30) {}
}; };
HIDDEN inline TMedprint_application& app() { return (TMedprint_application&) main_app(); } HIDDEN inline TChiusura_app& app() { return (TChiusura_app&) main_app(); }
TCursor* TMed_form::cursor() const { return app().current_cursor(); } void TChiusura_app::filtra_sezioni()
TRelation* TMed_form::relation() const { return cursor()->relation(); }
void TMedprint_application::set_page(int file, int cnt)
{ {
// costruzione etichette const TString16 sezini = _msk->get(F_SEZINI);
switch (_tipo_stampa) const TString16 sotini = _msk->get(F_SOTINI);
{ const TString16 sezfin = _msk->get(F_SEZFIN);
case etichette: const TString16 sotfin = _msk->get(F_SOTFIN);
{ TRectype da(LF_SOGGETTI);
TPrint_section& corpo = _form_eti->get_body(); TRectype a(LF_SOGGETTI);
corpo.reset(); if (sezini.not_empty())
corpo.update(); da.put(SOG_CODSEZ, sezini);
for (int i = 0; i < corpo.height(); i++) if (sotini.not_empty())
{ da.put(SOG_CODSOT, sotini);
TPrintrow& riga = corpo.row(i); if (sezfin.not_empty())
set_row(i+1,riga); a.put(SOG_CODSEZ, sezfin);
} if (sotfin.not_empty())
force_setpage(TRUE); a.put(SOG_CODSOT, sotfin);
} current_cursor()->setregion(da, a);
break;
case elenco:
{
set_row(1,"@0g@pn",FLD(LF_MEDICI,MED_CODMED,"######"));
set_row(1,"@7g#a",&_cognome_nome);
set_row(1,"@48g#a",&_indirizzo);
set_row(1,"@74g#a",&_dencom);
set_row(1,"@100g@S",FLD(LF_MEDICI,MED_TELAMB));
set_row(1,"@116g@S",FLD(LF_MEDICI,MED_TELABI));
}
break;
}
} }
bool TMedprint_application::preprocess_page(int file, int counter)
bool TChiusura_app::preprocess_page(int file, int counter)
{ {
if (_tipo_stampa == elenco) _operazione = "Nulla";
TRectype& recsez = current_cursor()->curr(LF_SEZIONI);
TLocalisamfile& sogg = current_cursor()->file(LF_SOGGETTI);
const TString16 cat_estinti = recsez.get(SEZ_CATESTI);
const TString16 cat_cancellati = recsez.get(SEZ_CATCANC);
const TString16 cat_emeriti = recsez.get(SEZ_CATEMER);
const int intesti = recsez.get_int(SEZ_INTESTI);
const int donemer = recsez.get_int(SEZ_DONEMER);
const TString16 catsog = sogg.get(SOG_CATDON);
if (catsog==cat_estinti || catsog==cat_cancellati)
{ {
TString nome = current_cursor()->curr().get(MED_COGNOME); const int totdon = sogg.get_int(SOG_TOTDON);
nome << " "; if (totdon >= donemer && donemer != 0)
nome << current_cursor()->curr().get(MED_NOME); {
_cognome_nome = nome; _operazione = "Passaggio a emeriti";
TString localita = ""; sogg.put(SOG_CATDON,cat_emeriti);
localita << current_cursor()->curr("LCP").get("S0"); sogg.rewrite();
if (localita.not_empty() && localita.ok()) }
localita << " - "; else
localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); _operazione = "Cancellato";
_dencom = localita; sogg.remove();
_indirizzo = current_cursor()->curr(LF_MEDICI).get(MED_INDIRIZZO); }
else
{
TDate dataultdon = sogg.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();
}
else
_operazione = "Non doveva essere filtrato: data ancora valida";
}
else
_operazione = "Non doveva essere filtrato: data vuota";
} }
return TRUE; return TRUE;
} }
bool TMedprint_application::set_print(int)
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);
}
bool TChiusura_app::filter_func_chiusura(const TRelation * rel)
{
bool filtrato = FALSE;
TRectype& recsez = rel->lfile(LF_SEZIONI).curr();
TRectype& recsog = rel->lfile().curr();
const TString16 cat_estinti = recsez.get(SEZ_CATESTI);
const TString16 cat_cancellati = recsez.get(SEZ_CATCANC);
const TString16 cat_emeriti = recsez.get(SEZ_CATEMER);
const int intesti = recsez.get_int(SEZ_INTESTI);
const TString16 catsog = recsog.get(SOG_CATDON);
filtrato = (catsog == cat_estinti || catsog == cat_cancellati);
if (!filtrato && catsog != cat_emeriti)
{
TDate dataultdon = recsog.get(SOG_DATAULTDON);
if (dataultdon.ok())
{
dataultdon.addyear(intesti);
filtrato = (dataultdon < app()._data_chiusura);
}
}
return filtrato;
}
bool TChiusura_app::set_print(int)
{ {
_tipo_stampa = undefined;
KEY tasto; KEY tasto;
tasto = _msk->run(); tasto = _msk->run();
switch (tasto) if (tasto == K_ENTER)
{ {
case F_ELENCO: _data_chiusura = _msk->get(F_DATA);
_tipo_stampa = elenco;
break;
case F_ETICHETTE:
_tipo_stampa = etichette;
break;
}
if (_tipo_stampa != undefined)
{
long codfr, codto;
TString cogfr, cogto;
int sort = _msk->get_int(F_SORT);
reset_files(); reset_files();
add_file(LF_MEDICI); add_file(LF_SOGGETTI);
if (sort == 1) filtra_sezioni();
{ current_cursor()->set_filterfunction(filter_func_chiusura,TRUE);
codfr = _msk->get_long(F_CODFR);
codto = _msk->get_long(F_CODTO);
select_cursor(_cur1);
TLocalisamfile& fl = current_cursor()->file(LF_MEDICI);
TRectype da(fl.curr());
TRectype a(fl.curr());
da.zero();
a.zero();
da.put(MED_CODMED, codfr);
a.put(MED_CODMED, codto);
current_cursor()->setregion(da, a);
}
else
if (sort == 2)
{
cogfr = _msk->get(F_COGFR);
cogto = _msk->get(F_COGTO);
select_cursor(_cur2);
TLocalisamfile& fl = current_cursor()->file(LF_MEDICI);
TRectype da(fl.curr());
TRectype a(fl.curr());
da.zero();
a.zero();
da.put(MED_COGNOME, cogfr);
a.put (MED_COGNOME, cogto);
current_cursor()->setregion(da, a);
}
reset_print(); reset_print();
crea_intestazione(); crea_intestazione();
return TRUE; return TRUE;
@ -162,62 +170,50 @@ bool TMedprint_application::set_print(int)
return FALSE; return FALSE;
} }
void TMedprint_application::crea_intestazione()
void TChiusura_app::crea_intestazione()
{ {
reset_header(); reset_header();
if (_tipo_stampa == elenco)
{
TString sep(132); TString sep(132);
TString data_stampa; TString16 data_stampa;
sep.fill('-'); sep.fill('-');
set_header(1, (const char *) sep); set_header(1, (const char *) sep);
sep = ""; sep = "";
sep << "Pag. @#"; sep << "Pag. @#";
sep.right_just(132); sep.right_just(132);
set_header(2,(const char*) sep); set_header(2,(const char*) sep);
set_header(2,"@0gARCHIVIO MEDICI@104gDATA");
data_stampa = _data_stampa.string(); set_header(2,"@0gCHIUSURA PERIODICA ALLA DATA");
set_header(2,"@109g%10s", (const char*) data_stampa); data_stampa = _data_chiusura.string();
set_header(2,"@30g%10s", (const char*) data_stampa);
sep = ""; sep = "";
sep.fill('-'); sep.fill('-');
set_header(3, (const char *) sep); set_header(3, (const char *) sep);
set_header(5,"@0gCodice@7gCognome e nome@48gIndirizzo@74gLocalità/Comune@100gTel. amb.@116gTel. abi.");
set_header(6,"@0g------@7g----------------------------------------@48g-------------------------");
set_header(6,"@74g-------------------------@100g---------------@116g---------------");
}
} }
bool TMedprint_application::user_create() bool TChiusura_app::user_create()
{ {
_rel = new TRelation(LF_MEDICI);
_rel->add(LF_COMUNI, "COM==COM");
_rel->add("LCP", "CODTAB==LOCALITA");
_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome
_msk = new TMask("at1100a"); _msk = new TMask("at1100a");
_rel = new TRelation(LF_SOGGETTI);
_rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT");
_form_eti = new TMed_form("AT_ETMED"); _cur = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice
return TRUE; return TRUE;
} }
bool TMedprint_application::user_destroy() bool TChiusura_app::user_destroy()
{ {
delete _msk;
delete _rel; delete _rel;
delete _form_eti; delete _msk;
return TRUE; return TRUE;
} }
int at1100(int argc, char* argv[]) int at1100(int argc, char* argv[])
{ {
TChiusura_app a;
TMedprint_application a; a.run(argc, argv, "Chiusura periodica");
a.run(argc, argv, "Stampa Medici");
return 0; return 0;
} }

View File

@ -1,10 +1,12 @@
// stampa anagrafica medici // chiusura periodica
// definizione campi per maschera di selezione // definizione campi per maschera di selezione
#define F_SORT 101 // ordinamento: cod. o cognome/nome #define F_SEZINI 101
#define F_CODFR 102 // da codice #define F_D_SEZINI 102
#define F_CODTO 103 // a codice #define F_SOTINI 103
#define F_COGFR 104 // da cognome #define F_D_SOTINI 104
#define F_COGTO 105 // a cognome #define F_SEZFIN 105
#define F_ELENCO 106 // elenco #define F_D_SEZFIN 106
#define F_ETICHETTE 107 // etichette #define F_SOTFIN 107
#define F_D_SOTFIN 108
#define F_DATA 109

View File

@ -1,93 +1,137 @@
#include "at1100a.h" #include "at1100a.h"
#include <lffiles.h>
#include "lf.h" #include "lf.h"
PAGE "Definizione Stampe" -1 -1 70 17 PAGE "Chiusura annuale" -1 -1 78 20
RADIOBUTTON F_SORT 25 GROUPBOX DLG_NULL 77 4
BEGIN BEGIN
PROMPT 3 1 "Ordinamento" PROMPT 1 1 "Scelta sezioni/sottogruppi"
HELP "Selezionare il tipo di ordinamento per la stampa"
ITEM "1|per Codice"
MESSAGE DISABLE,5@|ENABLE,4@|RESET,5@
ITEM "2|per Cognome e nome"
MESSAGE DISABLE,4@|ENABLE,5@|RESET,4@
END END
GROUPBOX DLG_NULL 65 4 STRING F_SEZINI 2
BEGIN BEGIN
PROMPT 3 5 "Selezione " 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 END
NUMBER F_CODFR 6 STRING F_D_SEZINI 25
BEGIN BEGIN
PROMPT 4 6 "da Codice " PROMPT 11 2 ""
USE LF_MEDICI KEY 1 FLAGS "U"
INPUT CODMED F_CODFR USE LF_SEZIONI KEY 2
DISPLAY "Codice" CODMED INPUT DENSEZ F_D_SEZINI
DISPLAY "Cognome@25" COGNOME DISPLAY "Sezione@25" DENSEZ
DISPLAY "Nome@25" NOME DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_CODFR CODMED DISPLAY "Cod.sez" CODSEZ
FLAGS "R" DISPLAY "Cod.sot." CODSOT
HELP "Codice medico da cui iniziare la stampa: vuoto = inizio" COPY OUTPUT F_SEZINI
GROUP 1 4 CHECKTYPE NORMAL
HELP "Sezione da cui partire"
END END
NUMBER F_CODTO 6 STRING F_SOTINI 2
BEGIN BEGIN
PROMPT 4 7 " a Codice " PROMPT 2 3 " "
COPY USE F_CODFR COPY ALL F_SEZINI
INPUT CODMED F_CODTO CHECKTYPE SEARCH
COPY DISPLAY F_CODFR HELP "Codice sottogruppo da cui partire"
OUTPUT F_CODTO CODMED
FLAGS "R"
HELP "Codice medico finale per la stampa: vuoto = fine archivio"
GROUP 1 4
END END
STRING F_COGFR 25 STRING F_D_SOTINI 25
BEGIN BEGIN
PROMPT 27 6 "da Cognome " PROMPT 11 3 ""
USE LF_MEDICI KEY 2 FLAGS "U"
INPUT COGNOME F_COGFR COPY USE F_D_SEZINI
DISPLAY "Cognome@25" COGNOME INPUT DENSEZ F_D_SEZINI
DISPLAY "Nome@25" NOME INPUT DENSOT F_D_SOTINI
DISPLAY "Codice" CODMED COPY DISPLAY F_D_SEZINI
OUTPUT F_COGFR COGNOME COPY OUTPUT F_D_SEZINI
HELP "Cognome da cui iniziare stampa: vuoto = inizio archivio" CHECKTYPE NORMAL
GROUP 1 5 HELP "Sottogruppo da cui partire"
END END
STRING F_COGTO 25 STRING F_SEZFIN 2
BEGIN BEGIN
PROMPT 27 7 " a Cognome " PROMPT 41 2 "A "
COPY USE F_COGFR FLAGS "U"
INPUT COGNOME F_COGTO USE LF_SEZIONI
COPY DISPLAY F_COGFR INPUT CODSEZ F_SEZFIN
OUTPUT F_COGTO COGNOME INPUT CODSOT F_SOTFIN
HELP "Cognome finale per la stampa: vuoto = fine archivio" DISPLAY "Cod.sez" CODSEZ
GROUP 1 5 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 END
GROUPBOX DLG_NULL 50 4 STRING F_D_SEZFIN 25
BEGIN BEGIN
PROMPT 3 11 "Stampa" 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 END
BUTTON F_ELENCO 9 2 STRING F_SOTFIN 2
BEGIN BEGIN
PROMPT 4 12 "Elenco" PROMPT 41 3 " "
MESSAGE EXIT,F_ELENCO COPY ALL F_SEZFIN
CHECKTYPE SEARCH
HELP "Codice sottogruppo finale"
END END
BUTTON F_ETICHETTE 9 2 STRING F_D_SOTFIN 25
BEGIN BEGIN
PROMPT 16 12 "Etichette" PROMPT 49 3 ""
MESSAGE EXIT,F_ETICHETTE 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
DATE F_DATA
BEGIN
PROMPT 2 5 "Data chiusura "
CHECKTYPE REQUIRED
HELP "Data di riferimento per i conteggi di chiusura"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 14 ""
END END
BUTTON DLG_QUIT 9 2 BUTTON DLG_QUIT 9 2
BEGIN BEGIN
PROMPT 32 12 "" PROMPT -22 14 ""
END END
ENDPAGE ENDPAGE

View File

@ -1,168 +1,176 @@
#include <mask.h>
#include <form.h> #include <form.h>
#include <mask.h>
#include <printapp.h> #include <printapp.h>
#include <recarray.h>
#include <lffiles.h> #include <tabutil.h>
#include "lf.h" #include <utility.h>
#include "sezioni.h"
#include <comuni.h>
#include "at1.h" #include "at1.h"
#include "lf.h" // se non lo metto non riesco a usare gli LF
// nomi campi maschera
#include "at1200a.h" #include "at1200a.h"
enum ts { undefined = 0, elenco = 1, etichette = 2 };
// definizione form per etichette // nomi dei campi
class TSez_form : public TForm #include "soggetti.h"
#include "donaz.h"
#include "benem.h"
#include "sezioni.h"
class TAttriben_app : public TPrintapp
{ {
public:
virtual TCursor* cursor() const;
virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ;
TSez_form(): TForm() {};
TSez_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {};
virtual ~TSez_form() {};
};
class TSezprint_application : public TPrintapp
{
TRelation* _rel;
TMask* _msk; TMask* _msk;
TSez_form* _form_eti; TRelation* _rel;
int _cur1, _cur2; TLocalisamfile* _donaz;
TParagraph_string _dencom, _indirizzo; TLocalisamfile* _benem;
TRecord_array* _sdonazioni;
TRecord_array* _sbenemerenze;
int _cur;
TDate _data_attribuzione; // data attribuzione benemerenza
TDate _data_stampa; TDate _data_stampa;
ts _tipo_stampa; TString16 _tipoben; // tipo benemerenza da assegnare
int _numdon; // numero donazioni necessarie
TString16 _codsez, _codsot;
TParagraph_string _cognome_nome;
static bool filter_func_attriben(const TRelation* rel);
protected: protected:
virtual bool user_create(); virtual bool user_create();
virtual bool user_destroy(); virtual bool user_destroy();
virtual bool set_print(int m); virtual bool set_print(int m);
virtual void set_page(int file, int cnt); virtual void set_page(int file, int cnt);
virtual bool preprocess_page (int file, int counter); virtual bool preprocess_page(int file, int counter);
//virtual TMask& get_mask() { return *_msk; }
public: public:
void filtra_sezioni();
void crea_intestazione(); void crea_intestazione();
void header_sezione(const TString16 codsez, const TString16 codsot);
TSezprint_application() : _data_stampa(TODAY), _indirizzo("", 22), _dencom("", 25) {} TAttriben_app() : _data_attribuzione(TODAY), _data_stampa(TODAY), _tipoben(""), _cognome_nome("",25) {}
}; };
HIDDEN inline TSezprint_application& app() { return (TSezprint_application&) main_app(); } HIDDEN inline TAttriben_app& app() { return (TAttriben_app&) main_app(); }
TCursor* TSez_form::cursor() const { return app().current_cursor(); } void TAttriben_app::filtra_sezioni()
TRelation* TSez_form::relation() const { return cursor()->relation(); }
void TSezprint_application::set_page(int file, int cnt)
{ {
switch (_tipo_stampa) const TString16 sezini = _msk->get(F_SEZINI);
{ const TString16 sotini = _msk->get(F_SOTINI);
case etichette: const TString16 sezfin = _msk->get(F_SEZFIN);
{ const TString16 sotfin = _msk->get(F_SOTFIN);
TPrint_section& corpo = _form_eti->get_body(); TRectype da(LF_SOGGETTI);
corpo.reset(); TRectype a(LF_SOGGETTI);
corpo.update(); if (sezini.not_empty())
for (int i = 0; i < corpo.height(); i++) da.put(SOG_CODSEZ, sezini);
{ if (sotini.not_empty())
TPrintrow& riga = corpo.row(i); da.put(SOG_CODSOT, sotini);
set_row(i+1,riga); if (sezfin.not_empty())
} a.put(SOG_CODSEZ, sezfin);
force_setpage(TRUE); if (sotfin.not_empty())
} a.put(SOG_CODSOT, sotfin);
break; current_cursor()->setregion(da, a);
case elenco:
{
set_row(1,"@0g@S", FLD(LF_SEZIONI,SEZ_CODSEZ));
set_row(1,"@2g@S", FLD(LF_SEZIONI,SEZ_CODSOT));
set_row(1,"@5g@S", FLD(LF_SEZIONI,SEZ_DENSEZ));
set_row(1,"@31g@S", FLD(LF_SEZIONI,SEZ_DENSOT));
set_row(1,"@57g#a",&_indirizzo);
set_row(1,"@80g#a",&_dencom);
set_row(1,"@101g@S",FLD(LF_SEZIONI,SEZ_TELEFONO));
set_row(1,"@117g@S",FLD(LF_SEZIONI,SEZ_FAX));
}
break;
}
} }
bool TSezprint_application::preprocess_page(int file, int counter) bool TAttriben_app::preprocess_page(int file, int counter)
{ {
if (_tipo_stampa == elenco) TString80 nome = current_cursor()->curr().get(SOG_COGNOME);
nome << " ";
nome << current_cursor()->curr().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);
// 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))
{ {
TString localita = ""; if (_codsez != "**")
localita << current_cursor()->curr("LCP").get("S0"); printer().formfeed();
if (localita.not_empty() && localita.ok()) _codsez = codsez;
localita << " - "; _codsot = codsot;
localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); header_sezione(codsez, codsot);
_dencom = localita;
_indirizzo = current_cursor()->curr(LF_SEZIONI).get(SEZ_INDIRIZZO);
} }
return TRUE; return TRUE;
} }
bool TSezprint_application::set_print(int) 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,"###"));
}
bool TAttriben_app::filter_func_attriben(const TRelation* rel)
{
bool filtrato;
// filtro chi non ha già ricevuto la benemerenza richiesta
TLocalisamfile ben(LF_BENEM);
ben.setkey(3);
TRectype& recben = ben.curr();
recben.zero();
recben.put(BEN_CODICE, rel->lfile().curr().get_long(SOG_CODICE));
recben.put(BEN_TIPOBEN, app()._tipoben);
filtrato = (ben.read() != NOERR); // se ha gia' la ben. non va filtrato
// filtro chi ha il numero donazioni giuste
if (filtrato)
filtrato = rel->lfile().curr().get_int(SOG_TOTDON) >= app()._numdon;
return filtrato;
}
void TAttriben_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 TAttriben_app::set_print(int)
{ {
_tipo_stampa = undefined;
KEY tasto; KEY tasto;
tasto = _msk->run(); tasto = _msk->run();
if (tasto == K_ENTER)
switch (tasto)
{ {
case F_ELENCO: _codsez = "**";
_tipo_stampa = elenco; _codsot = "**";
break; _data_attribuzione = _msk->get(F_DATA);
case F_ETICHETTE: _tipoben = _msk->get(F_TIPOBEN);
_tipo_stampa = etichette; TTable bnz("BNZ");
break; bnz.put("CODTAB",(const char*) _tipoben);
} if (bnz.read() == NOERR)
if (_tipo_stampa != undefined) _numdon = bnz.get_int("I0");
{
TString codfr, codto;
TString denfr, dento;
int sort = _msk->get_int(F_SORT);
reset_files();
add_file(LF_SEZIONI);
if (sort == 1)
{
codfr = _msk->get(F_CODFR);
codto = _msk->get(F_CODTO);
select_cursor(_cur1);
TLocalisamfile& fl = current_cursor()->file(LF_SEZIONI);
TRectype da(fl.curr());
TRectype a(fl.curr());
da.zero();
a.zero();
da.put(SEZ_CODSEZ, codfr);
a.put(SEZ_CODSEZ, codto);
current_cursor()->setregion(da, a);
}
else else
if (sort == 2) return FALSE;
{ reset_files();
denfr = _msk->get(F_DENFR); add_file(LF_SOGGETTI);
dento = _msk->get(F_DENTO); filtra_sezioni();
current_cursor()->setfilter("TOTDON!=0");
select_cursor(_cur2); current_cursor()->set_filterfunction(filter_func_attriben,TRUE);
TLocalisamfile& fl = current_cursor()->file(LF_SEZIONI);
TRectype da(fl.curr());
TRectype a(fl.curr());
da.zero();
a.zero();
da.put(SEZ_DENSEZ, denfr);
a.put (SEZ_DENSEZ, dento);
current_cursor()->setregion(da, a);
}
reset_print(); reset_print();
crea_intestazione(); crea_intestazione();
return TRUE; return TRUE;
@ -171,64 +179,64 @@ bool TSezprint_application::set_print(int)
return FALSE; return FALSE;
} }
void TSezprint_application::crea_intestazione()
void TAttriben_app::crea_intestazione()
{ {
reset_header(); reset_header();
if (_tipo_stampa == elenco)
{
TString sep(132); TString sep(132);
TString data_stampa; sep = "ATTRIBUZIONE BENEMERENZA ";
sep.fill('-'); sep << _tipoben;
set_header(1, (const char *) sep); const TString80 descr = _msk->get(F_D_TIPOBEN);
sep << " ";
sep << descr;
sep << " ALLA DATA ";
TString16 data_stampa = _data_attribuzione.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 = "";
sep << "Pag. @#"; sep << "Pag. @#";
sep.right_just(132); set_header(2, "@120g%s", (const char*) sep);
set_header(2,(const char*) sep);
set_header(2,"@0gTABELLA SEZIONI/SOTTOGRUPPI@104gDATA");
data_stampa = _data_stampa.string();
set_header(2,"@109g%10s", (const char*) data_stampa);
sep = ""; sep = "";
sep.fill('-'); sep.fill('-');
set_header(3, (const char *) sep); set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47Num.don.");
set_header(5,"@0gCod.@5gDenominazione sezione@31gDenominazione sottogruppo@57gIndirizzo@80gComune@101gTelefono@117gFax"); set_header(5,"@0g------@7g--@10g-------------------------@36g----------@47g--------");
set_header(6,"@0g----@5g-------------------------@31g-------------------------");
set_header(6,"@57g-----------------------@80g--------------------@101g---------------@117g---------------");
}
} }
bool TSezprint_application::user_create() bool TAttriben_app::user_create()
{ {
_rel = new TRelation(LF_SEZIONI);
_rel->add(LF_COMUNI, "COM==COM");
_rel->add("LCP", "CODTAB==LOCALITA");
_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per denominazione
_msk = new TMask("at1200a"); _msk = new TMask("at1200a");
_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
_form_eti = new TSez_form("AT_ETSEZ"); _donaz = new TLocalisamfile(LF_DONAZ);
_benem = new TLocalisamfile(LF_BENEM);
_sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON);
_sbenemerenze = new TRecord_array(LF_BENEM, BEN_PROGBEN);
return TRUE; return TRUE;
} }
bool TSezprint_application::user_destroy() bool TAttriben_app::user_destroy()
{ {
delete _msk;
delete _rel; delete _rel;
delete _form_eti; delete _msk;
delete _donaz;
delete _benem;
delete _sdonazioni;
delete _sbenemerenze;
return TRUE; return TRUE;
} }
int at1200(int argc, char* argv[]) int at1200(int argc, char* argv[])
{ {
TAttriben_app a;
TSezprint_application a; a.run(argc, argv, "Attribuzione benemerenze");
a.run(argc, argv, "Stampa Sezioni");
return 0; return 0;
} }

View File

@ -1,10 +1,14 @@
// stampa anagrafica sezioni/sottogruppi // attribuzione benemerenze
// definizione campi per maschera di selezione // definizione campi per maschera di selezione
#define F_SORT 101 // ordinamento: cod. o denominazione #define F_SEZINI 101
#define F_CODFR 102 // da codice #define F_D_SEZINI 102
#define F_CODTO 103 // a codice #define F_SOTINI 103
#define F_DENFR 104 // da sezione #define F_D_SOTINI 104
#define F_DENTO 105 // a sezione #define F_SEZFIN 105
#define F_ELENCO 106 // elenco #define F_D_SEZFIN 106
#define F_ETICHETTE 107 // etichette #define F_SOTFIN 107
#define F_D_SOTFIN 108
#define F_DATA 109
#define F_TIPOBEN 110
#define F_D_TIPOBEN 111

View File

@ -1,93 +1,159 @@
#include "at1200a.h" #include "at1200a.h"
#include <lffiles.h>
#include "lf.h" #include "lf.h"
PAGE "Definizione Stampe" -1 -1 70 17 PAGE "Attribuzione benemerenze" -1 -1 78 10
RADIOBUTTON F_SORT 25 GROUPBOX DLG_NULL 77 4
BEGIN BEGIN
PROMPT 3 1 "Ordinamento" PROMPT 1 1 "Scelta sezioni/sottogruppi"
HELP "Selezionare il tipo di ordinamento per la stampa"
ITEM "1|per Codice"
MESSAGE DISABLE,5@|ENABLE,4@|RESET,5@
ITEM "2|per Sezione"
MESSAGE DISABLE,4@|ENABLE,5@|RESET,4@
END END
GROUPBOX DLG_NULL 65 4 STRING F_SEZINI 2
BEGIN BEGIN
PROMPT 3 5 "Selezione " PROMPT 2 2 "Da "
END FLAGS "U"
USE LF_SEZIONI
STRING F_CODFR 6 INPUT CODSEZ F_SEZINI
BEGIN INPUT CODSOT F_SOTINI
PROMPT 4 6 "da Codice " DISPLAY "Cod.sez" CODSEZ
USE LF_SEZIONI KEY 1 DISPLAY "Cod.sot." CODSOT
INPUT CODSEZ F_CODFR
DISPLAY "Codice" CODSEZ
DISPLAY "Sezione@25" DENSEZ DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_CODFR CODSEZ OUTPUT F_SEZINI CODSEZ
FLAGS "R" OUTPUT F_D_SEZINI DENSEZ
HELP "Codice sezione da cui iniziare la stampa: vuoto = inizio" OUTPUT F_SOTINI CODSOT
GROUP 1 4 OUTPUT F_D_SOTINI DENSOT
CHECKTYPE SEARCH
HELP "Codice sezione da cui partire"
END END
STRING F_CODTO 6 STRING F_D_SEZINI 25
BEGIN BEGIN
PROMPT 4 7 " a Codice " PROMPT 11 2 ""
COPY USE F_CODFR FLAGS "U"
INPUT CODSEZ F_CODTO
COPY DISPLAY F_CODFR
OUTPUT F_CODTO CODSEZ
FLAGS "R"
HELP "Codice sezione finale per la stampa: vuoto = fine archivio"
GROUP 1 4
END
STRING F_DENFR 25
BEGIN
PROMPT 27 6 "da Sezione "
USE LF_SEZIONI KEY 2 USE LF_SEZIONI KEY 2
INPUT DENSEZ F_DENFR INPUT DENSEZ F_D_SEZINI
DISPLAY "Sezione@25" DENSEZ DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Codice" CODSEZ DISPLAY "Cod.sez" CODSEZ
OUTPUT F_DENFR DENSEZ DISPLAY "Cod.sot." CODSOT
HELP "Sezione da cui iniziare stampa: vuoto = inizio archivio" COPY OUTPUT F_SEZINI
GROUP 1 5 CHECKTYPE NORMAL
HELP "Sezione da cui partire"
END END
STRING F_DENTO 25 STRING F_SOTINI 2
BEGIN BEGIN
PROMPT 27 7 " a Sezione " PROMPT 2 3 " "
COPY USE F_DENFR COPY ALL F_SEZINI
INPUT DENSEZ F_DENTO CHECKTYPE SEARCH
COPY DISPLAY F_DENFR HELP "Codice sottogruppo da cui partire"
OUTPUT F_DENTO DENSEZ
HELP "Sezione finale per la stampa: vuoto = fine archivio"
GROUP 1 5
END END
GROUPBOX DLG_NULL 50 4 STRING F_D_SOTINI 25
BEGIN BEGIN
PROMPT 3 11 "Stampa" 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 END
BUTTON F_ELENCO 9 2 STRING F_SEZFIN 2
BEGIN BEGIN
PROMPT 4 12 "Elenco" PROMPT 41 2 "A "
MESSAGE EXIT,F_ELENCO 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 END
BUTTON F_ETICHETTE 9 2 STRING F_D_SEZFIN 25
BEGIN BEGIN
PROMPT 16 12 "Etichette" PROMPT 49 2 ""
MESSAGE EXIT,F_ETICHETTE 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
DATE F_DATA
BEGIN
PROMPT 2 5 "Data attribuzione "
CHECKTYPE REQUIRED
HELP "Data di riferimento per l'attribuzione delle benemerenze"
END
STRING F_TIPOBEN 2
BEGIN
PROMPT 2 6 "Benemerenza "
FLAGS "U"
USE BNZ
INPUT CODTAB F_TIPOBEN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_TIPOBEN CODTAB
OUTPUT F_D_TIPOBEN S0
CHECKTYPE REQUIRED
VALIDATE NOT_EMPTY_FUNC
WARNING "Codice benemerenza non presente"
HELP "Benemerenza da assegnare"
END
STRING F_D_TIPOBEN 25
BEGIN
PROMPT 26 6 ""
FLAGS "D"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END END
BUTTON DLG_QUIT 9 2 BUTTON DLG_QUIT 9 2
BEGIN BEGIN
PROMPT 32 12 "" PROMPT -22 -1 ""
END END
ENDPAGE ENDPAGE

247
at/at1300.cpp Executable file
View File

@ -0,0 +1,247 @@
#include <form.h>
#include <mask.h>
#include <printapp.h>
#include <recarray.h>
#include <tabutil.h>
#include <utility.h>
#include "at1.h"
#include "lf.h" // se non lo metto non riesco a usare gli LF
#include "atlib.h"
#define ALIAS_TCS 200
#define FINE_SOSPENSIONE "FS"
// nomi campi maschera
#include "at1300a.h"
// nomi dei campi
#include "soggetti.h"
#include "contsan.h"
#include "sezioni.h"
class TSbloccoSO_app : public TPrintapp
{
TMask* _msk;
TRelation* _rel;
TLocalisamfile* _contsan;
TRecord_array* _scontrolli;
int _cur;
TDate _data_sblocco; // data scadenza sospensione fino a _data_sblocco
TDate _data_stampa;
TString16 _tiposo; // tipo sospesione da sbloccare
TString16 _codsez, _codsot;
static bool filter_func_sbloccoSO(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);
TSbloccoSO_app() : _data_sblocco(TODAY), _data_stampa(TODAY), _tiposo("") {}
};
HIDDEN inline TSbloccoSO_app& app() { return (TSbloccoSO_app&) main_app(); }
void TSbloccoSO_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 TSbloccoSO_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, FINE_SOSPENSIONE);
_scontrolli->add_row(reccon);
_scontrolli->rewrite();
con_reord(recsog, _scontrolli);
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);
if ((_codsez!=codsez)||(_codsot!=codsot))
{
if (_codsez != "**")
printer().formfeed();
_codsez = codsez;
_codsot = codsot;
header_sezione(codsez, codsot);
}
return TRUE;
}
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));
}
bool TSbloccoSO_app::filter_func_sbloccoSO(const TRelation* rel)
{
bool filtrato = FALSE;
TRectype& recsog = rel->lfile().curr();
TRectype* key = new TRectype(LF_CONTSAN);
long codice = recsog.get_long(SOG_CODICE);
key->put(CON_CODICE, codice);
int err = app()._scontrolli->read(key);
if (err == NOERR)
{
TString16 stato = recsog.get(SOG_STATO);
TDate datastato = recsog.get(SOG_DATASTATO);
for (int r=1; r<=app()._scontrolli->rows(); r++)
{
const TRectype& riga = app()._scontrolli->row(r);
TString16 tipo = riga.get(CON_TIPOCON);
TDate datatipo = riga.get(CON_DATACON);
if (tipo == stato && datatipo == datastato)
{
TString16 prosstipo = riga.get(CON_PROSSTIPO);
if (modstato_tcs(prosstipo) == 'F')
{
TDate datafine = riga.get(CON_PROSSDATA);
filtrato = datafine <= app()._data_sblocco;
}
}
}
}
return filtrato;
}
void TSbloccoSO_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 TSbloccoSO_app::set_print(int)
{
KEY tasto;
tasto = _msk->run();
if (tasto == K_ENTER)
{
_codsez = "**";
_codsot = "**";
_data_sblocco = _msk->get(F_DATA);
_tiposo = _msk->get(F_TIPO);
reset_files();
add_file(LF_SOGGETTI);
filtra_sezioni();
// filtro per tipo sospensione
if (_tiposo.not_empty())
current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)_tiposo));
else
current_cursor()->setfilter("TCS->S6 == \"S\"", TRUE);
current_cursor()->set_filterfunction(filter_func_sbloccoSO,TRUE);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TSbloccoSO_app::crea_intestazione()
{
reset_header();
TString sep(132);
sep = "SBLOCCO SOSPESI ";
sep << _tiposo;
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.@7gC.@10gCognome e nome@36gNato il");
set_header(5,"@0g------@7g--@10g-------------------------@36g----------");
}
bool TSbloccoSO_app::user_create()
{
_msk = new TMask("at1300a");
_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 TSbloccoSO_app::user_destroy()
{
delete _rel;
delete _msk;
delete _contsan;
delete _scontrolli;
return TRUE;
}
int at1300(int argc, char* argv[])
{
TSbloccoSO_app a;
a.run(argc, argv, "Sblocco sospesi");
return 0;
}

14
at/at1300a.h Executable file
View File

@ -0,0 +1,14 @@
// sblocco sospesi
// 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
#define F_TIPO 110
#define F_D_TIPO 111

164
at/at1300a.uml Executable file
View File

@ -0,0 +1,164 @@
#include "at1300a.h"
#include "lf.h"
PAGE "Sblocco sospesi" -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 4
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
STRING F_TIPO 2
BEGIN
PROMPT 2 7 "Tipo sospensione "
FLAGS "U"
USE TCS SELECT S6="S"
INPUT CODTAB F_TIPO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_TIPO CODTAB
OUTPUT F_D_TIPO S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Tipo sospensione: vuoto = tutti"
END
STRING F_D_TIPO 30
BEGIN
PROMPT 25 7 ""
FLAGS "D"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

346
at/at1400.cpp Executable file
View File

@ -0,0 +1,346 @@
//#include <form.h>
#include <mask.h>
#include <msksheet.h>
#include <printapp.h>
#include <utility.h>
#include "lf.h"
#include "soggetti.h"
#include "sezioni.h"
#include <comuni.h>
#include "at1.h"
#include "at1400a.h"
#define ALIAS_COMRES 300
#define ALIAS_COMNAS 400
//#define ALIAS_CTN1 500
//#define ALIAS_CTN2 600
#define ALIAS_LCP 700
#define ALIAS_CTD 800
/*
// definizione form per tessere associative
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;
TAssoc_array _categorie;
//TTessere_form* _form_pag;
TAssoc_array _asoggetti;
int _numdon;
bool _aggiorna;
int _cur1, _cur2, _cur3, _cur4;
TDate _data_stampa;
TString _riepilogodon;
static bool filter_func_auto(const TRelation* rel);
static bool filter_func_manuale(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);
virtual print_action postprocess_page(int file, int counter);
static void add_rows_soggetti(TSheet_field& s, int count = 10, int start = 1);
public:
void filtra_sezioni();
void filtra_codici();
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(); }
HIDDEN bool printer_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TMask& m = f.mask();
if (!m.query_mode())
{
TString16 config;
config << "TESSERE";
TPrinter& p = printer();
p.set_printtype(normprinter); // Force configuration update
p.read_configuration(config);
if (p.set())
f.message_box("Stampante configurata per stampa tessere");
}
}
return TRUE;
}
void TTessere_application::add_rows_soggetti(TSheet_field& s, int count, int start)
{
if (start == 1)
s.destroy();
for (int r=start; r<start+count; r++)
TToken_string& row = s.row(r-1);
}
void TTessere_application::filtra_codici()
{
select_cursor(_cur4);
TRectype da(LF_SOGGETTI);
TRectype a (LF_SOGGETTI);
TSheet_field& s = (TSheet_field&)_msk->field(F_SOGGETTI);
long maxcod = 0;
long mincod = 99999;
for (int r=0; r < s.items(); r++)
{
TToken_string& row = s.row(r);
const long codice = row.get_long(0);
if (codice != 0)
{
if (codice > maxcod)
maxcod = codice;
if (codice < mincod)
mincod = codice;
}
}
if (mincod != 0)
da.put(SOG_CODICE, mincod);
if (maxcod != 0)
a.put(SOG_CODICE, maxcod);
current_cursor()->setregion(da, a);
}
void TTessere_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);
select_cursor(_cur4);
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 TTessere_application::set_page(int file, int cnt)
{
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,"");
}
bool TTessere_application::filter_func_auto(const TRelation* rel)
{
bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile();
filtrato = !(sog.get_bool(SOG_T_STAMPATA));
if (filtrato)
filtrato = (sog.get_int(SOG_TOTDON) >= app()._numdon);
if (filtrato)
{
// filtro per categorie
TAssoc_array& categorie = app()._categorie;
if (categorie.items() != 0)
{
const TString16 cat = sog.get(SOG_CATDON);
filtrato = categorie.is_key((const char*) cat);
}
}
return filtrato;
}
bool TTessere_application::filter_func_manuale(const TRelation* rel)
{
TLocalisamfile& sog = rel->lfile();
TAssoc_array& array_sogg = app()._asoggetti;
const char* codice = sog.get(SOG_CODICE);
return (array_sogg.is_key(codice));
}
print_action TTessere_application::postprocess_page(int file, int counter)
{
printer().formfeed();
return NEXT_PAGE;
}
bool TTessere_application::preprocess_page(int file, int counter)
{
TLocalisamfile& sogg = current_cursor()->file(LF_SOGGETTI);
const int totdon = sogg.get_int(SOG_TOTDON);
const TDate dataultima = sogg.get(SOG_DATAULTDON);
_riepilogodon = "";
if (totdon != 0)
{
_riepilogodon = "Donazioni effettuate fino al ";
_riepilogodon << dataultima.string();
_riepilogodon << " n.ro ";
_riepilogodon << totdon;
}
if (_aggiorna)
{
sogg.put(SOG_T_STAMPATA,TRUE);
sogg.rewrite();
}
return TRUE;
}
bool TTessere_application::set_print(int m)
{
TSheet_field& s = (TSheet_field&)_msk->field(F_SOGGETTI);
s.destroy();
s.force_update();
if (s.items()==0)
add_rows_soggetti(s,8);
KEY tasto;
tasto = _msk->run();
if (tasto == K_ENTER)
{
reset_files();
add_file(LF_SOGGETTI);
_asoggetti.destroy();
for (int r=0; r < s.items(); r++)
{
TToken_string& row = s.row(r);
const long codice = row.get_long(0);
const char* scodice = row.get(0);
if (codice != 0)
_asoggetti.add(scodice);
}
if (_asoggetti.items() != 0)
{
_aggiorna = _msk->get_bool(F_AGGIORNA2);
filtra_codici();
current_cursor()->setfilter("");
current_cursor()->set_filterfunction (filter_func_manuale, TRUE);
}
else
{
filtra_sezioni();
_numdon = _msk->get_int(F_NUMDON);
_aggiorna = _msk->get_bool(F_AGGIORNA);
//const char* filtro = format("(NUM(TOTDON>=%i)) && (T_STAMPATA!=\"X\")",_numdon);
//const char* filtro = format("T_STAMPATA!=\"X\"");
//const char* filtro = format("TOTDON>=%i",_numdon);
//current_cursor()->setfilter(filtro);
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())
_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_auto, TRUE);
}
reset_print();
return TRUE;
}
else
return FALSE;
}
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",1,0,ALIAS_LCP);
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
//_rel->add("CTN", "CODTAB==CATNOND1",1,0,ALIAS_CTN1);
//_rel->add("CTN", "CODTAB==CATNOND2",1,0,ALIAS_CTN2);
_rel->add("CTD", "CODTAB==CATDON",1,0,ALIAS_CTD);
_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("at1400a");
_msk->set_handler(F_PRINTER, printer_handler);
//_form_pag = new TTessere_form("AT_PAGIN"); // dovrà esserci PAGINE
TString16 config;
config << "TESSERE";
printer().read_configuration(config);
return TRUE;
}
bool TTessere_application::user_destroy()
{
delete _msk;
delete _rel;
//delete _form_pag;
printer().read_configuration();
return TRUE;
}
int at1400(int argc, char* argv[])
{
TTessere_application a;
a.run(argc, argv, "Stampa tessere associative");
return 0;
}

46
at/at1400a.h Executable file
View File

@ -0,0 +1,46 @@
// stampa tessere associative
// 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_NUMDON 301
#define F_AGGIORNA 302
#define F_AGGIORNA2 303
#define F_SOGGETTI 304
#define F_PRINTER 401
// pagina soggetti
#define F_S_CODICE 101
#define F_S_COGNOME 102
#define F_S_NOME 103
#define F_S_DATANASC 104
#define F_S_CODSEZ 105
#define F_S_CODSOT 106
#define F_S_CATDON 107
#define F_S_TESSAVIS 108
#define F_S_DENSEZ 211
#define F_S_DENSOT 212
#define F_S_DESC_CATDON 213

455
at/at1400a.uml Executable file
View File

@ -0,0 +1,455 @@
#include "at1400a.h"
#include "lf.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_PRINT 9 2
BEGIN
PROMPT -13 -11 "~Stampa"
MESSAGE EXIT,K_ENTER
END
BUTTON F_PRINTER 19 2
BEGIN
PROMPT -23 -11 "Imposta stampante"
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -33 -11 ""
END
ENDPAGE
PAGE "Selezione automatica" -1 -1 78 20
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 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 "Opzioni per la stampa tessere"
END
NUMBER F_NUMDON 3
BEGIN
PROMPT 2 11 "Numero minimo di donazioni "
END
BOOLEAN F_AGGIORNA
BEGIN
PROMPT 40 11 "Aggiornare archivio soggetti"
END
ENDPAGE
PAGE "Selezione manuale" -1 -1 78 20
BOOLEAN F_AGGIORNA2
BEGIN
PROMPT 2 2 "Aggiornare archivio soggetti"
GROUP 1
END
SPREADSHEET F_SOGGETTI
BEGIN
PROMPT 2 4 "Soggetti"
ITEM "Codice@6"
ITEM "Cognome@25"
ITEM "Nome@25"
ITEM "Nato il@10"
ITEM "Sez."
ITEM "Sot."
ITEM "Cat."
ITEM "Tessera"
GROUP 1
END
ENDPAGE
ENDMASK
PAGE "Soggetto " -1 -1 78 20
GROUPBOX DLG_NULL 77 5
BEGIN
PROMPT 1 0 ""
FLAGS "R"
END
NUMBER F_S_CODICE 6
BEGIN
PROMPT 2 1 "Codice "
FLAGS "RG"
USE LF_SOGGETTI KEY 1
INPUT CODICE F_S_CODICE
DISPLAY "Codice@6" CODICE
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
DISPLAY "Tessera" TESSAVIS
OUTPUT F_S_CODICE CODICE
OUTPUT F_S_COGNOME COGNOME
OUTPUT F_S_NOME NOME
OUTPUT F_S_DATANASC DATANASC
OUTPUT F_S_CODSEZ CODSEZ
OUTPUT F_S_CODSOT CODSOT
OUTPUT F_S_CATDON CATDON
OUTPUT F_S_TESSAVIS TESSAVIS
CHECKTYPE NORMAL
ADD RUN at0 -0
END
STRING F_S_COGNOME 25
BEGIN
PROMPT 2 2 "Cognome e nome "
USE LF_SOGGETTI KEY 2
INPUT COGNOME F_S_COGNOME
INPUT NOME F_S_NOME
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Nato il@10" DATANASC
DISPLAY "Codice@6" CODICE
DISPLAY "Sez." CODSEZ
DISPLAY "Sot." CODSOT
DISPLAY "C." CATDON
DISPLAY "Tessera" TESSAVIS
COPY OUTPUT F_S_CODICE
CHECKTYPE SEARCH
HELP "Cognome del soggetto"
ADD RUN at0 -0
END
STRING F_S_NOME 25
BEGIN
PROMPT 46 2 ""
COPY ALL F_S_COGNOME
COPY OUTPUT F_S_CODICE
CHECKTYPE SEARCH
HELP "Nome del soggetto"
ADD RUN at0 -0
END
DATE F_S_DATANASC
BEGIN
PROMPT 2 3 "Nato il "
FLAGS "D"
END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 5 "Dati associativi"
END
STRING F_S_CODSEZ 2
BEGIN
PROMPT 2 6 "Sez. "
FLAGS "D"
END
STRING F_S_DENSEZ 25
BEGIN
PROMPT 12 6 ""
FLAGS "D"
END
STRING F_S_CODSOT 2
BEGIN
PROMPT 40 6 "Sot. "
FLAGS "D"
USE LF_SEZIONI
INPUT CODSEZ F_S_CODSEZ
INPUT CODSOT F_S_CODSOT
OUTPUT F_S_DENSEZ DENSEZ
OUTPUT F_S_DENSOT DENSOT
CHECKTYPE NORMAL
END
STRING F_S_DENSOT 25
BEGIN
PROMPT 50 6 ""
FLAGS "D"
END
STRING F_S_CATDON 2
BEGIN
PROMPT 2 7 "Cat. "
FLAGS "D"
USE CTD
INPUT CODTAB F_S_CATDON
OUTPUT F_S_DESC_CATDON S0
CHECKTYPE NORMAL
END
STRING F_S_TESSAVIS 10
BEGIN
PROMPT 52 7 "Tessera AVIS "
FLAGS "D"
END
STRING F_S_DESC_CATDON 25
BEGIN
PROMPT 12 7 ""
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
END
ENDPAGE
ENDMASK

View File

@ -1,12 +1,12 @@
#ifndef __AT2_H #ifndef __AT2_H
#define __AT2_H #define __AT2_H
int at2100(int argc, char* argv[]); // stampa soggetti sospesi int at2100(int argc, char* argv[]); // elenco soggetti sospesi
int at2200(int argc, char* argv[]); // stampa soggetti per etŕ (da data nasc. a data nasc.) int at2200(int argc, char* argv[]); // elenco soggetti per data di nascita
int at2300(int argc, char* argv[]); // stampa soggetti esclusi int at2300(int argc, char* argv[]); // elenco soggetti esclusi
int at2400(int argc, char* argv[]); // stampa benemerenze assegnate int at2400(int argc, char* argv[]); // elenco soggetti modificati
int at2500(int argc, char* argv[]); // stampa soggetti idonei int at2500(int argc, char* argv[]); // elenco soggetti idonei
int at2600(int argc, char* argv[]); // stampa soggetti iscritti/dimessi int at2600(int argc, char* argv[]); // elenco soggetti iscritti/dimessi
#endif // __AT2_H #endif // __AT2_H

View File

@ -1,54 +1,39 @@
#define APPNAME AVIS #define APPNAME AVIS
#define QAPPNAME "AVIS" #define QAPPNAME "AVIS"
#define LIBDIR f:\xvt.403\win_x86\ptk\lib #define LIBDIR f:\xvt.403\win_x86\ptk\lib
#define QFIRMNAME "AGA Informatica S.r.l."
#include <default.url> #include <default.url>
/* ---------------------------------------------------- /* at2 -0 elenco sospesi */
* at2 -0
* ---------------------------------------------------- */
MENU TASK_MENUBAR MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ---------------------------------------------------- /* at2 -1 elenco soggetti modificati */
* at2 -1
* ---------------------------------------------------- */
MENUBAR MENU_BAR(1) MENUBAR MENU_BAR(1)
MENU MENU_BAR(1) MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* at2 -2 elenco esclusi */
/* ----------------------------------------------------
* at2 -2
* ---------------------------------------------------- */
MENUBAR MENU_BAR(2) MENUBAR MENU_BAR(2)
MENU MENU_BAR(2) MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ---------------------------------------------------- /* at2 -3 elenco soggetti modificati */
* at2 -3
*
* ----------------------------------------------------*/
MENUBAR MENU_BAR(3) MENUBAR MENU_BAR(3)
MENU MENU_BAR(3) MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ---------------------------------------------------- /* at2 -4 elenco idonei */
* at2 -4
* ---------------------------------------------------- */
MENUBAR MENU_BAR(4) MENUBAR MENU_BAR(4)
MENU MENU_BAR(4) MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ---------------------------------------------------- /* at2 -5 elenco iscritti/dimessi */
* at2 -5
* ---------------------------------------------------- */
MENUBAR MENU_BAR(5) MENUBAR MENU_BAR(5)
MENU MENU_BAR(5) MENU MENU_BAR(5)

View File

@ -1,5 +1,5 @@
#include <mask.h>
#include <form.h> #include <form.h>
#include <mask.h>
#include <printapp.h> #include <printapp.h>
#include <utility.h> #include <utility.h>
@ -55,7 +55,7 @@ protected:
public: public:
void crea_intestazione(); void crea_intestazione();
void filtra_sezioni(); void filtra_sezioni();
void header_sezione(TString16 codsez, TString16 codsot); void header_sezione(const TString16 codsez, const TString16 codsot);
TMask& app_mask() { return *_msk; } TMask& app_mask() { return *_msk; }
TSospesi_application() : _data_stampa(TODAY), _cognome_nome("",25) {} TSospesi_application() : _data_stampa(TODAY), _cognome_nome("",25) {}
}; };
@ -68,23 +68,20 @@ TRelation* TEti_sospesi_form::relation() const { return cursor()->relation(); }
void TSospesi_application::filtra_sezioni() void TSospesi_application::filtra_sezioni()
{ {
TString16 sezini = _msk->get(F_SEZINI); const TString16 sezini = _msk->get(F_SEZINI);
TString16 sotini = _msk->get(F_SOTINI); const TString16 sotini = _msk->get(F_SOTINI);
TString16 sezfin = _msk->get(F_SEZFIN); const TString16 sezfin = _msk->get(F_SEZFIN);
TString16 sotfin = _msk->get(F_SOTFIN); const TString16 sotfin = _msk->get(F_SOTFIN);
select_cursor(_cur4); select_cursor(_cur4);
TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); TRectype da(LF_SOGGETTI);
TRectype da(fl.curr()); TRectype a (LF_SOGGETTI);
TRectype a(fl.curr()); if (sezini.not_empty())
da.zero();
a.zero();
if ((sezini.not_empty()) && (sezini.ok()))
da.put(SOG_CODSEZ, sezini); da.put(SOG_CODSEZ, sezini);
if ((sotini.not_empty()) && (sotini.ok())) if (sotini.not_empty())
da.put(SOG_CODSOT, sotini); da.put(SOG_CODSOT, sotini);
if ((sezfin.not_empty()) && (sezfin.ok())) if (sezfin.not_empty())
a.put(SOG_CODSEZ, sezfin); a.put(SOG_CODSEZ, sezfin);
if ((sotfin.not_empty()) && (sotfin.ok())) if (sotfin.not_empty())
a.put(SOG_CODSOT, sotfin); a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a); current_cursor()->setregion(da, a);
} }
@ -132,10 +129,10 @@ bool TSospesi_application::filter_func_sospesi(const TRelation* rel)
bool filtrato = TRUE; bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile(); TLocalisamfile& sog = rel->lfile();
// filtro per categorie // filtro per categorie
TAssoc_array categorie = app()._categorie; TAssoc_array& categorie = app()._categorie;
if (categorie.items() != 0) if (categorie.items() != 0)
{ {
TString16 cat = sog.get(SOG_CATDON); const TString16 cat = sog.get(SOG_CATDON);
filtrato = categorie.is_key((const char*) cat); filtrato = categorie.is_key((const char*) cat);
} }
return filtrato; return filtrato;
@ -153,8 +150,8 @@ bool TSospesi_application::preprocess_page(int file, int counter)
_cognome_nome = nome; _cognome_nome = nome;
// salto pagina se cambio sezione // salto pagina se cambio sezione
TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot)) if ((_codsez!=codsez)||(_codsot!=codsot))
{ {
//if (!_codsez.blank()) //if (!_codsez.blank())
@ -168,11 +165,11 @@ bool TSospesi_application::preprocess_page(int file, int counter)
return TRUE; return TRUE;
} }
void TSospesi_application::header_sezione(TString16 codsez, TString16 codsot) void TSospesi_application::header_sezione(const TString16 codsez, const TString16 codsot)
{ {
TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString256 intestazione(132); TString intestazione(132);
intestazione = "Sezione: "; intestazione = "Sezione: ";
intestazione << codsez; intestazione << codsez;
intestazione << "/"; intestazione << "/";
@ -216,19 +213,19 @@ bool TSospesi_application::set_print(int m)
filtra_sezioni(); filtra_sezioni();
// filtro per tipo sospensione // filtro per tipo sospensione
TString16 tiposo = _msk->get(F_TIPO); const TString16 tiposo = _msk->get(F_TIPO);
if (tiposo.not_empty() && tiposo.ok()) if (tiposo.not_empty() && tiposo.ok())
current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)tiposo)); current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)tiposo));
else else
current_cursor()->setfilter("TCS->S6 == \"S\"", TRUE); current_cursor()->setfilter("TCS->S6 == \"S\"", TRUE);
// filtro per categorie // filtro per categorie
TString16 catpri = _msk->get(F_CAT1); const TString16 catpri = _msk->get(F_CAT1);
TString16 catsec = _msk->get(F_CAT2); const TString16 catsec = _msk->get(F_CAT2);
TString16 catter = _msk->get(F_CAT3); const TString16 catter = _msk->get(F_CAT3);
TString16 catqua = _msk->get(F_CAT4); const TString16 catqua = _msk->get(F_CAT4);
TString16 catqui = _msk->get(F_CAT5); const TString16 catqui = _msk->get(F_CAT5);
TString16 catses = _msk->get(F_CAT6); const TString16 catses = _msk->get(F_CAT6);
if (catpri.not_empty() && catpri.ok()) if (catpri.not_empty() && catpri.ok())
_categorie.add((const char*) catpri); _categorie.add((const char*) catpri);
if (catsec.not_empty() && catsec.ok()) if (catsec.not_empty() && catsec.ok())
@ -257,20 +254,20 @@ void TSospesi_application::crea_intestazione()
if (_tipo_stampa == elenco) if (_tipo_stampa == elenco)
{ {
TString256 sep(132); TString sep(132);
sep = "ELENCO SOSPESI"; sep = "ELENCO SOSPESI";
TString16 tipo = _msk->get(F_TIPO); const TString16 tipo = _msk->get(F_TIPO);
if ((tipo.ok()) && (tipo.not_empty())) if ((tipo.ok()) && (tipo.not_empty()))
{ {
sep << ": tipo "; sep << ": tipo ";
sep << tipo; sep << tipo;
TString80 dtipo = _msk->get(F_D_TIPO); const TString80 dtipo = _msk->get(F_D_TIPO);
sep << " "; sep << " ";
sep << dtipo; sep << dtipo;
} }
sep.center_just(); sep.center_just();
set_header(2, "@0g%s", (const char*) sep); set_header(2, "@0g%s", (const char*) sep);
TString16 data_stampa = _data_stampa.string(); const TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa); set_header(2,"@0g%10s", (const char*) data_stampa);
sep = ""; sep = "";
sep << "Pag. @#"; sep << "Pag. @#";
@ -291,7 +288,7 @@ bool TSospesi_application::user_create()
_rel = new TRelation(LF_SOGGETTI); _rel = new TRelation(LF_SOGGETTI);
_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS); _rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS);
_rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCP); _rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCP);
_rel->add(LF_COMUNI, "COM==DOM_COMCOM"); _rel->add(LF_COMUNI, "COM==DOM_CODCOM");
// per stampare nell'intestazione la denominazione della sezione // per stampare nell'intestazione la denominazione della sezione
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");

View File

@ -1,5 +1,5 @@
#include <mask.h>
#include <form.h> #include <form.h>
#include <mask.h>
#include <printapp.h> #include <printapp.h>
#include "lf.h" #include "lf.h"
@ -58,7 +58,7 @@ protected:
public: public:
void crea_intestazione(); void crea_intestazione();
void filtra_sezioni(); void filtra_sezioni();
void header_sezione(TString16 codsez, TString16 codsot); void header_sezione(const TString16 codsez, const TString16 codsot);
TMask& app_mask() { return *_msk; } TMask& app_mask() { return *_msk; }
TPereta_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {} TPereta_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {}
@ -72,27 +72,20 @@ TRelation* TEti_pereta_form::relation() const { return cursor()->relation(); }
void TPereta_application::filtra_sezioni() void TPereta_application::filtra_sezioni()
{ {
const char* sezini = _msk->get(F_SEZINI); const TString16 sezini = _msk->get(F_SEZINI);
const char* sotini = _msk->get(F_SOTINI); const TString16 sotini = _msk->get(F_SOTINI);
const char* sezfin = _msk->get(F_SEZFIN); const TString16 sezfin = _msk->get(F_SEZFIN);
const char* sotfin = _msk->get(F_SOTFIN); const TString16 sotfin = _msk->get(F_SOTFIN);
select_cursor(_cur4); select_cursor(_cur4);
TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); TRectype da(LF_SOGGETTI);
TRectype da(fl.curr()); TRectype a(LF_SOGGETTI);
TRectype a(fl.curr()); if (sezini.not_empty())
da.zero();
a.zero();
//if ((sezini.not_empty()) && (sezini.ok()))
if (sezini != NULL)
da.put(SOG_CODSEZ, sezini); da.put(SOG_CODSEZ, sezini);
//if ((sotini.not_empty()) && (sotini.ok())) if (sotini.not_empty())
if (sotini != NULL)
da.put(SOG_CODSOT, sotini); da.put(SOG_CODSOT, sotini);
//if ((sezfin.not_empty()) && (sezfin.ok())) if (sezfin.not_empty())
if (sezfin != NULL)
a.put(SOG_CODSEZ, sezfin); a.put(SOG_CODSEZ, sezfin);
//if ((sotfin.not_empty()) && (sotfin.ok())) if (sotfin.not_empty())
if (sotfin != NULL)
a.put(SOG_CODSOT, sotfin); a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a); current_cursor()->setregion(da, a);
} }
@ -136,16 +129,16 @@ bool TPereta_application::filter_func_pereta(const TRelation* rel)
bool filtrato = TRUE; bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile(); TLocalisamfile& sog = rel->lfile();
// filtro per categorie // filtro per categorie
TAssoc_array categorie = app()._categorie; TAssoc_array& categorie = app()._categorie;
if (categorie.items() != 0) if (categorie.items() != 0)
{ {
TString16 cat = sog.get(SOG_CATDON); const TString16 cat = sog.get(SOG_CATDON);
filtrato = categorie.is_key((const char*) cat); filtrato = categorie.is_key((const char*) cat);
} }
// filtro per data di nascita // filtro per data di nascita
if (filtrato) if (filtrato)
{ {
TDate datanasc = sog.get(SOG_DATANASC); const TDate datanasc = sog.get(SOG_DATANASC);
if (app()._dataini.ok()) if (app()._dataini.ok())
filtrato = datanasc >= app()._dataini; filtrato = datanasc >= app()._dataini;
if (app()._datafin.ok()) if (app()._datafin.ok())
@ -154,11 +147,11 @@ bool TPereta_application::filter_func_pereta(const TRelation* rel)
return filtrato; return filtrato;
} }
void TPereta_application::header_sezione(TString16 codsez, TString16 codsot) void TPereta_application::header_sezione(const TString16 codsez, const TString16 codsot)
{ {
TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString256 intestazione(132); TString intestazione(132);
intestazione = "Sezione: "; intestazione = "Sezione: ";
intestazione << codsez; intestazione << codsez;
intestazione << "/"; intestazione << "/";
@ -203,8 +196,8 @@ bool TPereta_application::preprocess_page(int file, int counter)
_dencom = localita; _dencom = localita;
// salto pagina se cambio sezione // salto pagina se cambio sezione
TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot)) if ((_codsez!=codsez)||(_codsot!=codsot))
{ {
if (_codsez != "**") if (_codsez != "**")
@ -241,12 +234,12 @@ bool TPereta_application::set_print(int m)
_dataini = _msk->get(F_DATAINI); _dataini = _msk->get(F_DATAINI);
_datafin = _msk->get(F_DATAFIN); _datafin = _msk->get(F_DATAFIN);
TString16 catpri = _msk->get(F_CAT1); const TString16 catpri = _msk->get(F_CAT1);
TString16 catsec = _msk->get(F_CAT2); const TString16 catsec = _msk->get(F_CAT2);
TString16 catter = _msk->get(F_CAT3); const TString16 catter = _msk->get(F_CAT3);
TString16 catqua = _msk->get(F_CAT4); const TString16 catqua = _msk->get(F_CAT4);
TString16 catqui = _msk->get(F_CAT5); const TString16 catqui = _msk->get(F_CAT5);
TString16 catses = _msk->get(F_CAT6); const TString16 catses = _msk->get(F_CAT6);
if (catpri.not_empty() && catpri.ok()) if (catpri.not_empty() && catpri.ok())
_categorie.add((const char*) catpri); _categorie.add((const char*) catpri);
if (catsec.not_empty() && catsec.ok()) if (catsec.not_empty() && catsec.ok())
@ -275,7 +268,7 @@ void TPereta_application::crea_intestazione()
if (_tipo_stampa == elenco) if (_tipo_stampa == elenco)
{ {
TString256 sep(132); TString sep(132);
sep = "ELENCO PER DATA DI NASCITA"; sep = "ELENCO PER DATA DI NASCITA";
TDate data = _msk->get(F_DATAINI); TDate data = _msk->get(F_DATAINI);
if (data.ok()) if (data.ok())

View File

@ -1,5 +1,5 @@
#include <mask.h>
#include <form.h> #include <form.h>
#include <mask.h>
#include <printapp.h> #include <printapp.h>
#include <utility.h> #include <utility.h>
@ -57,7 +57,7 @@ protected:
public: public:
void crea_intestazione(); void crea_intestazione();
void filtra_sezioni(); void filtra_sezioni();
void header_sezione(TString16 codsez, TString16 codsot); void header_sezione(const TString16 codsez, const TString16 codsot);
TMask& app_mask() { return *_msk; } TMask& app_mask() { return *_msk; }
TEsclusi_application() : _data_stampa(TODAY), _cognome_nome("",25) {} TEsclusi_application() : _data_stampa(TODAY), _cognome_nome("",25) {}
}; };
@ -70,23 +70,20 @@ TRelation* TEti_esclusi_form::relation() const { return cursor()->relation(); }
void TEsclusi_application::filtra_sezioni() void TEsclusi_application::filtra_sezioni()
{ {
TString16 sezini = _msk->get(F_SEZINI); const TString16 sezini = _msk->get(F_SEZINI);
TString16 sotini = _msk->get(F_SOTINI); const TString16 sotini = _msk->get(F_SOTINI);
TString16 sezfin = _msk->get(F_SEZFIN); const TString16 sezfin = _msk->get(F_SEZFIN);
TString16 sotfin = _msk->get(F_SOTFIN); const TString16 sotfin = _msk->get(F_SOTFIN);
select_cursor(_cur4); select_cursor(_cur4);
TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); TRectype da(LF_SOGGETTI);
TRectype da(fl.curr()); TRectype a(LF_SOGGETTI);
TRectype a(fl.curr()); if (sezini.not_empty())
da.zero();
a.zero();
if ((sezini.not_empty()) && (sezini.ok()))
da.put(SOG_CODSEZ, sezini); da.put(SOG_CODSEZ, sezini);
if ((sotini.not_empty()) && (sotini.ok())) if (sotini.not_empty())
da.put(SOG_CODSOT, sotini); da.put(SOG_CODSOT, sotini);
if ((sezfin.not_empty()) && (sezfin.ok())) if (sezfin.not_empty())
a.put(SOG_CODSEZ, sezfin); a.put(SOG_CODSEZ, sezfin);
if ((sotfin.not_empty()) && (sotfin.ok())) if (sotfin.not_empty())
a.put(SOG_CODSOT, sotfin); a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a); current_cursor()->setregion(da, a);
} }
@ -129,16 +126,16 @@ bool TEsclusi_application::filter_func_esclusi(const TRelation * rel)
bool filtrato = TRUE; bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile(); TLocalisamfile& sog = rel->lfile();
//filtro per categorie //filtro per categorie
TAssoc_array categorie = app()._categorie; TAssoc_array& categorie = app()._categorie;
if (categorie.items() != 0) if (categorie.items() != 0)
{ {
TString16 cat = sog.get(SOG_CATDON); const TString16 cat = sog.get(SOG_CATDON);
filtrato = categorie.is_key((const char*) cat); filtrato = categorie.is_key((const char*) cat);
} }
// filtro per termine esclusione // filtro per termine esclusione
if (filtrato && app()._termineesc.ok()) if (filtrato && app()._termineesc.ok())
{ {
TDate terminesog = sog.get_date(SOG_TERMESCL); const TDate terminesog = sog.get_date(SOG_TERMESCL);
filtrato = terminesog <= app()._termineesc; filtrato = terminesog <= app()._termineesc;
} }
return filtrato; return filtrato;
@ -155,8 +152,8 @@ bool TEsclusi_application::preprocess_page(int file, int counter)
nome << current_cursor()->curr().get(SOG_NOME); nome << current_cursor()->curr().get(SOG_NOME);
_cognome_nome = nome; _cognome_nome = nome;
// salto pagina se cambio sezione // salto pagina se cambio sezione
TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot)) if ((_codsez!=codsez)||(_codsot!=codsot))
{ {
if (_codsez != "**") if (_codsez != "**")
@ -169,11 +166,11 @@ bool TEsclusi_application::preprocess_page(int file, int counter)
return TRUE; return TRUE;
} }
void TEsclusi_application::header_sezione(TString16 codsez, TString16 codsot) void TEsclusi_application::header_sezione(const TString16 codsez, const TString16 codsot)
{ {
TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString256 intestazione(132); TString intestazione(132);
intestazione = "Sezione: "; intestazione = "Sezione: ";
intestazione << codsez; intestazione << codsez;
intestazione << "/"; intestazione << "/";
@ -220,12 +217,12 @@ bool TEsclusi_application::set_print(int)
current_cursor()->setfilter("ESCLUSO != \"\""); current_cursor()->setfilter("ESCLUSO != \"\"");
// filtro per categorie // filtro per categorie
TString16 catpri = _msk->get(F_CAT1); const TString16 catpri = _msk->get(F_CAT1);
TString16 catsec = _msk->get(F_CAT2); const TString16 catsec = _msk->get(F_CAT2);
TString16 catter = _msk->get(F_CAT3); const TString16 catter = _msk->get(F_CAT3);
TString16 catqua = _msk->get(F_CAT4); const TString16 catqua = _msk->get(F_CAT4);
TString16 catqui = _msk->get(F_CAT5); const TString16 catqui = _msk->get(F_CAT5);
TString16 catses = _msk->get(F_CAT6); const TString16 catses = _msk->get(F_CAT6);
if (catpri.not_empty() && catpri.ok()) if (catpri.not_empty() && catpri.ok())
_categorie.add((const char*) catpri); _categorie.add((const char*) catpri);
if (catsec.not_empty() && catsec.ok()) if (catsec.not_empty() && catsec.ok())
@ -257,7 +254,7 @@ void TEsclusi_application::crea_intestazione()
if (_tipo_stampa == elenco) if (_tipo_stampa == elenco)
{ {
TString256 sep(90); TString sep(90);
sep = "ELENCO ESCLUSI"; sep = "ELENCO ESCLUSI";
if ((_tipoesc.ok()) && (_tipoesc.not_empty())) if ((_tipoesc.ok()) && (_tipoesc.not_empty()))
{ {
@ -271,7 +268,7 @@ void TEsclusi_application::crea_intestazione()
} }
sep.center_just(); sep.center_just();
set_header(2, "@0g%s", (const char*) sep); set_header(2, "@0g%s", (const char*) sep);
TString16 data_stampa = _data_stampa.string(); const TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa); set_header(2,"@0g%10s", (const char*) data_stampa);
sep = ""; sep = "";
sep << "Pag. @#"; sep << "Pag. @#";

View File

@ -1,28 +1,60 @@
#include <form.h>
#include <mask.h> #include <mask.h>
#include <printapp.h> #include <printapp.h>
#include <tabutil.h>
#include <utility.h>
#include <lffiles.h>
#include "lf.h" #include "lf.h"
#include "soggetti.h" #include "soggetti.h"
#include "benem.h" #include "sezioni.h"
#include <comuni.h>
#include "at2.h" #include "at2.h"
#include "at2400a.h" #include "at2400a.h"
class TBenem_application : public TPrintapp #define ALIAS_CTD 100 // categoria donatori
#define ALIAS_CTN1 110 // categoria non donatori 1
#define ALIAS_CTN2 120 // categoria non donatori 2
#define ALIAS_TCS 200 // tipi/esiti controlli sanitari
#define ALIAS_LDN 300 // luoghi di donazione/punti di raccolta
#define ALIAS_LCPRES 400 // localita' postale di residenza
#define ALIAS_LCPDOM 410 // localita' postale di domicilio
#define ALIAS_COMRES 500 // comune di residenza
#define ALIAS_COMDOM 510 // comune di domicilio
#define ALIAS_COMNAS 520 // comune di nascita
enum ts { undefined = 0, elenco = 1, pagine = 2 };
// definizione form per pagine anagrafiche
class TModificati_form : public TForm
{ {
static bool filter_func_benem(const TRelation* rel); 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; TRelation* _rel;
TMask* _msk; TMask* _msk;
TLocalisamfile* _benem; TModificati_form* _form_pag;
TRecord_array* _sbenemerenze; TAssoc_array _categorie;
int _cur1, _cur2, _cur3, _cur4; int _cur1, _cur2, _cur3, _cur4;
TDate _data_stampa; TParagraph_string _cognome_nome, _dencom;
TString _codsez, _codsot;
TDate _data_stampa, _dataini;
ts _tipo_stampa;
TString16 _codsez, _codsot;
protected: protected:
virtual bool user_create(); virtual bool user_create();
@ -34,96 +66,122 @@ protected:
public: public:
void crea_intestazione(); void crea_intestazione();
void filtra_sezioni(); void filtra_sezioni();
void header_sezione(const TString16 codsez, const TString16 codsot);
TMask& app_mask() { return *_msk; } TMask& app_mask() { return *_msk; }
TBenem_application() : _data_stampa(TODAY) {}
TModificati_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {}
}; };
HIDDEN inline TBenem_application& app() { return (TBenem_application&) main_app(); } HIDDEN inline TModificati_application& app() { return (TModificati_application&) main_app(); }
void TBenem_application::filtra_sezioni() TCursor* TModificati_form::cursor() const { return app().current_cursor(); }
TRelation* TModificati_form::relation() const { return cursor()->relation(); }
void TModificati_application::filtra_sezioni()
{ {
TString sezini = _msk->get(F_SEZINI); const TString16 sezini = _msk->get(F_SEZINI);
TString sotini = _msk->get(F_SOTINI); const TString16 sotini = _msk->get(F_SOTINI);
TString sezfin = _msk->get(F_SEZFIN); const TString16 sezfin = _msk->get(F_SEZFIN);
TString sotfin = _msk->get(F_SOTFIN); const TString16 sotfin = _msk->get(F_SOTFIN);
select_cursor(_cur4); select_cursor(_cur4);
TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); TRectype da(LF_SOGGETTI);
TRectype da(fl.curr()); TRectype a(LF_SOGGETTI);
TRectype a(fl.curr()); if (sezini.not_empty())
da.zero();
a.zero();
if ((sezini.not_empty()) && (sezini.ok()))
da.put(SOG_CODSEZ, sezini); da.put(SOG_CODSEZ, sezini);
if ((sotini.not_empty()) && (sotini.ok())) if (sotini.not_empty())
da.put(SOG_CODSOT, sotini); da.put(SOG_CODSOT, sotini);
if ((sezfin.not_empty()) && (sezfin.ok())) if (sezfin.not_empty())
a.put(SOG_CODSEZ, sezfin); a.put(SOG_CODSEZ, sezfin);
if ((sotfin.not_empty()) && (sotfin.ok())) if (sotfin.not_empty())
a.put(SOG_CODSOT, sotfin); a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a); current_cursor()->setregion(da, a);
} }
void TBenem_application::set_page(int file, int cnt) void TModificati_application::set_page(int file, int cnt)
{ {
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"#########")); switch (_tipo_stampa)
set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_CATDON)); {
set_row(1,"@13g@S", FLD(LF_SOGGETTI,SOG_COGNOME)); case pagine:
set_row(1,"@39g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); {
set_row(1,"@50g@S", FLD(LF_SOGGETTI,SOG_TOTDON)); TPrint_section& corpo = _form_pag->get_body();
corpo.reset();
set_row(2,"@13g@S", FLD(LF_SOGGETTI,SOG_NOME)); corpo.update();
set_row(2,"@50g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); 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 TBenem_application::filter_func_benem(const TRelation* rel) bool TModificati_application::filter_func_modificati(const TRelation* rel)
{ {
bool filtrato = TRUE; bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile();
TLocalisamfile* sog = &(rel->lfile(LF_SOGGETTI));
//filtro per categorie //filtro per categorie
TAssoc_array& categorie = app()._categorie;
TMask& msk = app().app_mask();
TString catpri = msk.get(F_CAT1);
TString catsec = msk.get(F_CAT2);
TString catter = msk.get(F_CAT3);
TString catqua = msk.get(F_CAT4);
TString catqui = msk.get(F_CAT5);
TString catses = msk.get(F_CAT6);
TAssoc_array categorie;
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);
if (categorie.items() != 0) if (categorie.items() != 0)
{ {
TString cat = sog->curr().get(SOG_CATDON); const TString16 cat = sog.get(SOG_CATDON);
if (categorie.is_key((const char*) cat)) filtrato = categorie.is_key((const char*) cat);
filtrato = TRUE; }
else // filtro per data aggiornamento
filtrato = FALSE; if (filtrato && app()._dataini.ok())
{
const TDate datamod = sog.get(SOG_DATAULTAGG);
filtrato = (datamod >= app()._dataini);
} }
return filtrato; return filtrato;
} }
bool TBenem_application::preprocess_page(int file, int counter) bool TModificati_application::preprocess_page(int file, int counter)
{ {
// contatore soggetti stampati // contatore soggetti stampati
// per ora non c'è // 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_LCPDOM).get("S6");
if (localita.not_empty() && localita.ok())
{
localita << " ";
localita << current_cursor()->curr(-ALIAS_LCPDOM).get("S0");
localita << " - ";
}
else
{
localita = current_cursor()->curr(-ALIAS_COMDOM).get(COM_CAPCOM);
localita << " ";
}
localita << current_cursor()->curr(-ALIAS_COMDOM).get(COM_DENCOM);
localita.trim();
_dencom = localita;
// salto pagina se cambio sezione // salto pagina se cambio sezione
TString codsez = current_cursor()->curr().get(SOG_CODSEZ); const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
TString codsot = current_cursor()->curr().get(SOG_CODSOT); const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot)) if ((_codsez!=codsez)||(_codsot!=codsot))
{ {
//if (!_codsez.blank()) //if (!_codsez.blank())
@ -131,45 +189,78 @@ bool TBenem_application::preprocess_page(int file, int counter)
printer().formfeed(); printer().formfeed();
_codsez = codsez; _codsez = codsez;
_codsot = codsot; _codsot = codsot;
header_sezione(codsez, codsot);
}
} }
return TRUE; return TRUE;
} }
int get_donbene(TString tipo) void TModificati_application::header_sezione(const TString16 codsez, const TString16 codsot)
{ {
int donbene = 0; const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
TTable bnz("BNZ"); const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
bnz.put("CODTAB",tipo); TString intestazione(132);
if (bnz.read() == NOERR) intestazione = "Sezione: ";
donbene = bnz.get_int("I0"); intestazione << codsez;
return donbene; 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 TBenem_application::set_print(int)
bool TModificati_application::set_print(int)
{ {
_tipo_stampa = undefined;
KEY tasto; KEY tasto;
tasto = _msk->run(); tasto = _msk->run();
if (tasto == F_ELENCO) switch (tasto)
{ {
//_codsez.spaces(2); case F_ELENCO:
//_codsot.spaces(2); _tipo_stampa = elenco;
_codsez = "**"; _codsez = "**";
_codsot = "**"; _codsez = "**";
break;
case F_PAGINE:
_tipo_stampa = pagine;
break;
}
if (_tipo_stampa != undefined)
{
reset_files(); reset_files();
add_file(LF_SOGGETTI); add_file(LF_SOGGETTI);
_dataini = _msk->get(F_DATAINI);
TString tipoben = _msk->get(F_TIPOBEN);
filtra_sezioni(); filtra_sezioni();
int donbene = get_donbene(tipoben); // filtro per categorie
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())
_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);
if (tipoben.not_empty() && tipoben.ok()) current_cursor()->set_filterfunction(filter_func_modificati);
current_cursor()->setfilter(format("TOTDON >= \"%i\"",donbene)); reset_print();
else
current_cursor()->setfilter(format("TOTDON >= \"%i\"",donbene));
// current_cursor()->setfilter("ESCLUSO != \"\"");
current_cursor()->set_filterfunction(filter_func_benem);
crea_intestazione(); crea_intestazione();
return TRUE; return TRUE;
} }
@ -177,65 +268,78 @@ bool TBenem_application::set_print(int)
return FALSE; return FALSE;
} }
void TBenem_application::crea_intestazione() void TModificati_application::crea_intestazione()
{ {
TString sep(132);
TString data_stampa;
reset_header(); reset_header();
sep.fill('-'); if (_tipo_stampa == elenco)
set_header(1, (const char *) sep); {
TString sep(132);
sep = "ELENCO MODIFICATI";
const 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 = "";
sep << "Pag. @#"; sep << "Pag. @#";
sep.right_just(132); set_header(2, "@120g%s", (const char*) sep);
set_header(2,(const char*) sep);
set_header(2,"@0gELENCO SOGGETTI CHE DEVONO RICEVERE LA BENEMERENZA xx@104gDATA");
data_stampa = _data_stampa.string();
set_header(2,"@109g%10s", (const char*) data_stampa);
sep = ""; sep = "";
sep.fill('-'); sep.fill('-');
set_header(3, (const char *) sep); set_header(3, (const char *) sep);
set_header(5,"@0gCod.@10gC.@13gCognome@39gNato il@50gData esc."); set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gIndirizzo@98gTelefono abit.@114gTelefono lavoro");
set_header(6,"@13gNome@50gTipo esc."); set_header(5,"@47gCAP/Località/Comune/Prov.@114gTelefono altro");
set_header(7,"@0g---------@10g--@13g-------------------------@39g----------@50g--------"); set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g--------------------------------------------------@98g---------------@114g---------------");
}
} }
bool TBenem_application::user_create() bool TModificati_application::user_create()
{ {
_rel = new TRelation(LF_SOGGETTI); _rel = new TRelation(LF_SOGGETTI);
//_rel->add(LF_BENEM, "CODICE==CODICE"); _rel->add("CTD", "CODTAB==CATDON",1,0,ALIAS_CTD);
_benem = new TLocalisamfile(LF_BENEM); _rel->add("CTN", "CODTAB==CATNOND1",1,0,ALIAS_CTN1);
_sbenemerenze = new TRecord_array(LF_BENEM,BEN_PROGBEN); _rel->add("CTN", "CODTAB==CATNOND2",1,0,ALIAS_CTN2);
_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS);
_rel->add("LDN", "CODTAB==PUNTORACC",1,0,ALIAS_LDN);
_rel->add("LCP", "CODTAB==RES_CODLOC",1,0,ALIAS_LCPRES);
_rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCPDOM);
_rel->add(LF_COMUNI, "COM==RES_CODCOM",1,0,ALIAS_COMRES);
_rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,0,ALIAS_COMDOM);
_rel->add(LF_COMUNI, "COM==COMNASC",1,0,ALIAS_COMNAS);
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
_rel->add(LF_MEDICI, "CODMED==CODMED");
_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice _cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome _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 _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 _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("at2400a"); _msk = new TMask("at2400a");
return TRUE; return TRUE;
} }
bool TBenem_application::user_destroy() bool TModificati_application::user_destroy()
{ {
delete _msk; delete _msk;
delete _rel; delete _rel;
delete _benem; delete _form_pag;
delete _sbenemerenze;
return TRUE; return TRUE;
} }
int at2400(int argc, char* argv[]) int at2400(int argc, char* argv[])
{ {
TBenem_application a; TModificati_application a;
a.run(argc, argv, "Elenco premiati"); a.run(argc, argv, "Elenco soggetti modificati");
return 0; return 0;
} }

View File

@ -1,4 +1,4 @@
// stampa benemerenze da assegnare // stampa elenco soggetti modficati a partire dal ...
// definizione campi per maschera di selezione // definizione campi per maschera di selezione
#define F_SEZINI 101 #define F_SEZINI 101
@ -23,9 +23,8 @@
#define F_CAT6 211 #define F_CAT6 211
#define F_D_CAT6 212 #define F_D_CAT6 212
#define F_TIPOBEN 301 #define F_DATAINI 301
#define F_D_TIPOBEN 302 //#define F_DATAFIN 302
#define F_ELENCO 401 #define F_ELENCO 401
#define F_ETICHETTE 402 #define F_PAGINE 402

View File

@ -246,30 +246,21 @@ END
GROUPBOX DLG_NULL 77 3 GROUPBOX DLG_NULL 77 3
BEGIN BEGIN
PROMPT 1 10 "Tipo benemerenza" PROMPT 1 10 "Selezione soggetti"
END END
STRING F_TIPOBEN 2 DATE F_DATAINI
BEGIN BEGIN
PROMPT 2 11 "Benemerenza " PROMPT 2 11 "Soggetti modificati dal "
FLAGS "U" HELP "Data iniziale"
USE BNZ
INPUT CODTAB F_TIPOBEN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_TIPOBEN CODTAB
OUTPUT F_D_TIPOBEN S0
CHECKTYPE REQUIRED
VALIDATE NOT_EMPTY_FUNC
WARNING "Codice non presente"
HELP "Benemerenza assegnata"
END END
STRING F_D_TIPOBEN 25 //DATE F_DATAFIN
BEGIN //BEGIN
PROMPT 26 11 "" // PROMPT 20 11 "Al "
FLAGS "D" // HELP "Data di nascita finale"
END //END
GROUPBOX DLG_NULL 77 4 GROUPBOX DLG_NULL 77 4
BEGIN BEGIN
@ -282,10 +273,10 @@ BEGIN
MESSAGE EXIT,F_ELENCO MESSAGE EXIT,F_ELENCO
END END
BUTTON F_ETICHETTE 9 2 BUTTON F_PAGINE 9 2
BEGIN BEGIN
PROMPT -23 14 "Etichette" PROMPT -23 14 "Pagine"
MESSAGE EXIT,F_ETICHETTE MESSAGE EXIT,F_PAGINE
END END
BUTTON DLG_QUIT 9 2 BUTTON DLG_QUIT 9 2

View File

@ -1,5 +1,5 @@
#include <mask.h>
#include <form.h> #include <form.h>
#include <mask.h>
#include <printapp.h> #include <printapp.h>
#include <utility.h> #include <utility.h>
@ -56,7 +56,7 @@ protected:
public: public:
void crea_intestazione(); void crea_intestazione();
void filtra_sezioni(); void filtra_sezioni();
void header_sezione(TString16 codsez, TString16 codsot); void header_sezione(const TString16 codsez, const TString16 codsot);
TMask& app_mask() { return *_msk; } TMask& app_mask() { return *_msk; }
TIdonei_application() : _data_stampa(TODAY), _cognome_nome("",25) {} TIdonei_application() : _data_stampa(TODAY), _cognome_nome("",25) {}
}; };
@ -69,23 +69,20 @@ TRelation* TEti_idonei_form::relation() const { return cursor()->relation(); }
void TIdonei_application::filtra_sezioni() void TIdonei_application::filtra_sezioni()
{ {
TString16 sezini = _msk->get(F_SEZINI); const TString16 sezini = _msk->get(F_SEZINI);
TString16 sotini = _msk->get(F_SOTINI); const TString16 sotini = _msk->get(F_SOTINI);
TString16 sezfin = _msk->get(F_SEZFIN); const TString16 sezfin = _msk->get(F_SEZFIN);
TString16 sotfin = _msk->get(F_SOTFIN); const TString16 sotfin = _msk->get(F_SOTFIN);
select_cursor(_cur4); select_cursor(_cur4);
TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); TRectype da(LF_SOGGETTI);
TRectype da(fl.curr()); TRectype a(LF_SOGGETTI);
TRectype a(fl.curr()); if (sezini.not_empty())
da.zero();
a.zero();
if ((sezini.not_empty()) && (sezini.ok()))
da.put(SOG_CODSEZ, sezini); da.put(SOG_CODSEZ, sezini);
if ((sotini.not_empty()) && (sotini.ok())) if (sotini.not_empty())
da.put(SOG_CODSOT, sotini); da.put(SOG_CODSOT, sotini);
if ((sezfin.not_empty()) && (sezfin.ok())) if (sezfin.not_empty())
a.put(SOG_CODSEZ, sezfin); a.put(SOG_CODSEZ, sezfin);
if ((sotfin.not_empty()) && (sotfin.ok())) if (sotfin.not_empty())
a.put(SOG_CODSOT, sotfin); a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a); current_cursor()->setregion(da, a);
} }
@ -132,10 +129,10 @@ bool TIdonei_application::filter_func_idonei(const TRelation * rel)
bool filtrato = TRUE; bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile(); TLocalisamfile& sog = rel->lfile();
// filtro per categorie // filtro per categorie
TAssoc_array categorie = app()._categorie; TAssoc_array& categorie = app()._categorie;
if (categorie.items() != 0) if (categorie.items() != 0)
{ {
TString16 catsog = sog.get(SOG_CATDON); const TString16 catsog = sog.get(SOG_CATDON);
filtrato = categorie.is_key((const char*) catsog); filtrato = categorie.is_key((const char*) catsog);
} }
// filtro per idoneità // filtro per idoneità
@ -181,8 +178,8 @@ bool TIdonei_application::preprocess_page(int file, int counter)
_cognome_nome = nome; _cognome_nome = nome;
// salto pagina se cambio sezione // salto pagina se cambio sezione
TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot)) if ((_codsez!=codsez)||(_codsot!=codsot))
{ {
if (_codsez != "**") if (_codsez != "**")
@ -195,11 +192,11 @@ bool TIdonei_application::preprocess_page(int file, int counter)
return TRUE; return TRUE;
} }
void TIdonei_application::header_sezione(TString16 codsez, TString16 codsot) void TIdonei_application::header_sezione(const TString16 codsez, const TString16 codsot)
{ {
TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString256 intestazione(132); TString intestazione(132);
intestazione = "Sezione: "; intestazione = "Sezione: ";
intestazione << codsez; intestazione << codsez;
intestazione << "/"; intestazione << "/";
@ -250,12 +247,12 @@ bool TIdonei_application::set_print(int m)
current_cursor()->setfilter("(TCS->S6 == \"I\") || (TCS->S6 == \"F\")", TRUE); current_cursor()->setfilter("(TCS->S6 == \"I\") || (TCS->S6 == \"F\")", TRUE);
// filtro per categorie // filtro per categorie
TString16 catpri = _msk->get(F_CAT1); const TString16 catpri = _msk->get(F_CAT1);
TString16 catsec = _msk->get(F_CAT2); const TString16 catsec = _msk->get(F_CAT2);
TString16 catter = _msk->get(F_CAT3); const TString16 catter = _msk->get(F_CAT3);
TString16 catqua = _msk->get(F_CAT4); const TString16 catqua = _msk->get(F_CAT4);
TString16 catqui = _msk->get(F_CAT5); const TString16 catqui = _msk->get(F_CAT5);
TString16 catses = _msk->get(F_CAT6); const TString16 catses = _msk->get(F_CAT6);
if (catpri.not_empty() && catpri.ok()) if (catpri.not_empty() && catpri.ok())
_categorie.add((const char*) catpri); _categorie.add((const char*) catpri);
if (catsec.not_empty() && catsec.ok()) if (catsec.not_empty() && catsec.ok())
@ -291,13 +288,13 @@ void TIdonei_application::crea_intestazione()
if (_tipo_stampa == elenco) if (_tipo_stampa == elenco)
{ {
TString256 sep(132); TString sep(132);
sep = "ELENCO IDONEI"; sep = "ELENCO IDONEI";
if ((_tipoidon.ok()) && (_tipoidon.not_empty())) if ((_tipoidon.ok()) && (_tipoidon.not_empty()))
{ {
sep << ": tipo "; sep << ": tipo ";
sep << _tipoidon; sep << _tipoidon;
TString80 dtipo = _msk->get(F_D_TIPO); const TString80 dtipo = _msk->get(F_D_TIPO);
sep << " "; sep << " ";
sep << dtipo; sep << dtipo;
} }
@ -323,7 +320,7 @@ void TIdonei_application::crea_intestazione()
} }
sep.center_just(); sep.center_just();
set_header(2, "@0g%s", (const char*) sep); set_header(2, "@0g%s", (const char*) sep);
TString16 data_stampa = _data_stampa.string(); const TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa); set_header(2,"@0g%10s", (const char*) data_stampa);
sep = ""; sep = "";
sep << "Pag. @#"; sep << "Pag. @#";
@ -343,7 +340,7 @@ bool TIdonei_application::user_create()
{ {
_rel = new TRelation(LF_SOGGETTI); _rel = new TRelation(LF_SOGGETTI);
_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS); _rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS);
_rel->add("LCP", "CODTAB==DOM_COLOC",1,0,ALIAS_LCP); _rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCP);
_rel->add(LF_COMUNI, "COM==DOM_CODCOM"); _rel->add(LF_COMUNI, "COM==DOM_CODCOM");
// per stampare la denominazione della sezione nell'intestazione // per stampare la denominazione della sezione nell'intestazione
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");

View File

@ -1,5 +1,5 @@
#include <mask.h>
#include <form.h> #include <form.h>
#include <mask.h>
#include <printapp.h> #include <printapp.h>
#include <utility.h> #include <utility.h>
@ -57,7 +57,7 @@ protected:
public: public:
void crea_intestazione(); void crea_intestazione();
void filtra_sezioni(); void filtra_sezioni();
void header_sezione(TString16 codsez, TString16 codsot); void header_sezione(const TString16 codsez, const TString16 codsot);
TMask& app_mask() { return *_msk; } TMask& app_mask() { return *_msk; }
TIscritti_application() : _data_stampa(TODAY), _cognome_nome("",25) {} TIscritti_application() : _data_stampa(TODAY), _cognome_nome("",25) {}
}; };
@ -70,23 +70,20 @@ TRelation* TEti_iscritti_form::relation() const { return cursor()->relation(); }
void TIscritti_application::filtra_sezioni() void TIscritti_application::filtra_sezioni()
{ {
TString16 sezini = _msk->get(F_SEZINI); const TString16 sezini = _msk->get(F_SEZINI);
TString16 sotini = _msk->get(F_SOTINI); const TString16 sotini = _msk->get(F_SOTINI);
TString16 sezfin = _msk->get(F_SEZFIN); const TString16 sezfin = _msk->get(F_SEZFIN);
TString16 sotfin = _msk->get(F_SOTFIN); const TString16 sotfin = _msk->get(F_SOTFIN);
select_cursor(_cur4); const select_cursor(_cur4);
TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); TRectype da(LF_SOGGETTI);
TRectype da(fl.curr()); TRectype a(LF_SOGGETTI);
TRectype a(fl.curr()); if (sezini.not_empty())
da.zero();
a.zero();
if ((sezini.not_empty()) && (sezini.ok()))
da.put(SOG_CODSEZ, sezini); da.put(SOG_CODSEZ, sezini);
if ((sotini.not_empty()) && (sotini.ok())) if (sotini.not_empty())
da.put(SOG_CODSOT, sotini); da.put(SOG_CODSOT, sotini);
if ((sezfin.not_empty()) && (sezfin.ok())) if (sezfin.not_empty())
a.put(SOG_CODSEZ, sezfin); a.put(SOG_CODSEZ, sezfin);
if ((sotfin.not_empty()) && (sotfin.ok())) if (sotfin.not_empty())
a.put(SOG_CODSOT, sotfin); a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a); current_cursor()->setregion(da, a);
} }
@ -128,10 +125,10 @@ bool TIscritti_application::filter_func_iscritti(const TRelation * rel)
bool filtrato = TRUE; bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile(); TLocalisamfile& sog = rel->lfile();
// filtro per categorie // filtro per categorie
TAssoc_array categorie = app()._categorie; TAssoc_array& categorie = app()._categorie;
if (categorie.items() != 0) if (categorie.items() != 0)
{ {
TString16 cat = sog.get(SOG_CATDON); const TString16 cat = sog.get(SOG_CATDON);
filtrato = categorie.is_key((const char*) cat); filtrato = categorie.is_key((const char*) cat);
} }
// filtrp per date iscrizione/dimissione // filtrp per date iscrizione/dimissione
@ -139,12 +136,12 @@ bool TIscritti_application::filter_func_iscritti(const TRelation * rel)
{ {
if (app()._tipo_iscdim == ISCRITTI) if (app()._tipo_iscdim == ISCRITTI)
{ {
TDate dataisc = sog.get(SOG_DATAISC); const TDate dataisc = sog.get(SOG_DATAISC);
filtrato = (dataisc >= app()._dataini && dataisc <= app()._datafin); filtrato = (dataisc >= app()._dataini && dataisc <= app()._datafin);
} }
else else
{ {
TDate datadim = sog.get(SOG_DATADIM); const TDate datadim = sog.get(SOG_DATADIM);
filtrato = (datadim >= app()._dataini && datadim <= app()._datafin); filtrato = (datadim >= app()._dataini && datadim <= app()._datafin);
} }
} }
@ -163,8 +160,8 @@ bool TIscritti_application::preprocess_page(int file, int counter)
_cognome_nome = nome; _cognome_nome = nome;
// salto pagina se cambio sezione // salto pagina se cambio sezione
TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot)) if ((_codsez!=codsez)||(_codsot!=codsot))
{ {
if (_codsez != "**") if (_codsez != "**")
@ -177,11 +174,11 @@ bool TIscritti_application::preprocess_page(int file, int counter)
return TRUE; return TRUE;
} }
void TIscritti_application::header_sezione(TString16 codsez, TString16 codsot) void TIscritti_application::header_sezione(const TString16 codsez, const TString16 codsot)
{ {
TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString256 intestazione(132); TString intestazione(132);
intestazione = "Sezione: "; intestazione = "Sezione: ";
intestazione << codsez; intestazione << codsez;
intestazione << "/"; intestazione << "/";
@ -207,8 +204,6 @@ bool TIscritti_application::set_print(int m)
{ {
case F_ELENCO: case F_ELENCO:
_tipo_stampa = elenco; _tipo_stampa = elenco;
//_codsez.spaces(2);
//_codsot.spaces(2);
_codsez = "**"; _codsez = "**";
_codsot = "**"; _codsot = "**";
break; break;
@ -223,12 +218,12 @@ bool TIscritti_application::set_print(int m)
// filtro per sezioni // filtro per sezioni
filtra_sezioni(); filtra_sezioni();
// filtro per categorie // filtro per categorie
TString16 catpri = _msk->get(F_CAT1); const TString16 catpri = _msk->get(F_CAT1);
TString16 catsec = _msk->get(F_CAT2); const TString16 catsec = _msk->get(F_CAT2);
TString16 catter = _msk->get(F_CAT3); const TString16 catter = _msk->get(F_CAT3);
TString16 catqua = _msk->get(F_CAT4); const TString16 catqua = _msk->get(F_CAT4);
TString16 catqui = _msk->get(F_CAT5); const TString16 catqui = _msk->get(F_CAT5);
TString16 catses = _msk->get(F_CAT6); const TString16 catses = _msk->get(F_CAT6);
if (catpri.not_empty() && catpri.ok()) if (catpri.not_empty() && catpri.ok())
_categorie.add((const char*) catpri); _categorie.add((const char*) catpri);
if (catsec.not_empty() && catsec.ok()) if (catsec.not_empty() && catsec.ok())
@ -262,7 +257,7 @@ void TIscritti_application::crea_intestazione()
if (_tipo_stampa == elenco) if (_tipo_stampa == elenco)
{ {
TString256 sep(132); TString sep(132);
sep = "ELENCO "; sep = "ELENCO ";
if (_tipo_iscdim == ISCRITTI) if (_tipo_iscdim == ISCRITTI)
sep << "ISCRITTI"; sep << "ISCRITTI";
@ -280,7 +275,7 @@ void TIscritti_application::crea_intestazione()
} }
sep.center_just(); sep.center_just();
set_header(2, "@0g%s", (const char*) sep); set_header(2, "@0g%s", (const char*) sep);
TString16 data_stampa = _data_stampa.string(); const TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa); set_header(2,"@0g%10s", (const char*) data_stampa);
sep = ""; sep = "";
sep << "Pag. @#"; sep << "Pag. @#";

View File

@ -1,6 +1,7 @@
#define APPNAME AVIS #define APPNAME AVIS
#define QAPPNAME "AVIS" #define QAPPNAME "AVIS"
#define LIBDIR f:\xvt.403\win_x86\ptk\lib #define LIBDIR f:\xvt.403\win_x86\ptk\lib
#define QFIRMNAME "AGA Informatica S.r.l."
#include <default.url> #include <default.url>
@ -46,3 +47,11 @@ MENUBAR MENU_BAR(4)
MENU MENU_BAR(4) MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ----------------------------------------------------
* at1 -5
* ---------------------------------------------------- */
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"

347
at/at3600.cpp Executable file
View File

@ -0,0 +1,347 @@
#include <form.h>
#include <mask.h>
#include <printapp.h>
#include <utility.h>
#include "lf.h"
#include "soggetti.h"
#include "sezioni.h"
#include "at3.h"
#include "at3600a.h"
#define ALIAS_LCP 100
#define ALIAS_TDN 200
#define IDON_SI "SI"
#define IDON_AF "AF"
enum ts { undefined = 0, elenco = 1, etichette = 2, cartoline = 3 };
// definizione form per etichette
class TConvBO_form : public TForm
{
public:
virtual TCursor* cursor() const;
virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ;
TConvBO_form(): TForm() {};
TConvBO_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {};
virtual ~TConvBO_form() {};
};
class TConvBO_application : public TPrintapp
{
TRelation* _rel;
TMask* _msk;
TConvBO_form* _form_eti;
int _cur1, _cur2, _cur3, _cur4;
TParagraph_string _cognome_nome;
TDate _data_stampa;
TDate _dataini, _datafin;
TString16 _procdon;
ts _tipo_stampa;
TString16 _codsez, _codsot;
static bool filter_func_convBO(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();
void filtra_sezioni();
void header_sezione(const TString16 codsez, const TString16 codsot);
TMask& app_mask() { return *_msk; }
TConvBO_application() : _data_stampa(TODAY), _cognome_nome("",25) {}
};
HIDDEN inline TConvBO_application& app() { return (TConvBO_application&) main_app(); }
TCursor* TConvBO_form::cursor() const { return app().current_cursor(); }
TRelation* TConvBO_form::relation() const { return cursor()->relation(); }
void TConvBO_application::filtra_sezioni()
{
const TString16 sez = _msk->get(F_CODSEZ);
const TString16 sot = _msk->get(F_CODSOT);
select_cursor(_cur4);
TRectype da(LF_SOGGETTI);
if (sez.not_empty())
da.put(SOG_CODSEZ, sez);
if (sot.not_empty())
da.put(SOG_CODSOT, sot);
current_cursor()->setregion(da, da);
}
void TConvBO_application::set_page(int file, int cnt)
{
// costruzione etichette
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@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(2,"@50g@S", FLD(LF_SOGGETTI,SOG_STATO));
}
break;
}
}
bool TConvBO_application::filter_func_convBO(const TRelation* rel)
{
bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile();
/*
TString16 catsog = sog.get(SOG_CATDON);
TString
if (categoria non di dimissione) && (punto di raccolta = scelto o vuoto)
filtrato = TRUE;
else
filtrato = FALSE;
if (filtrato)
{
// filtro per età
TRectype from (sog->curr());
TRectype to (sog->curr());
from.zero();
to.zero();
if (app()._dataini.ok())
{
if (app()._procdon == IDON_SI)
from.put(SOG_DATAPROSSI, app()._dataini);
else
from.put(SOG_DATAPROSAF, app()._dataini);
}
if (app()._datafin.ok())
{
if (app()._procdon == IDON_SI)
to.put(SOG_DATAPROSSI, app()._datafin);
else
to.put(SOG_DATAPROSAF, app()._datafin);
}
if ((sog->curr() >= from) && (sog->curr() <= to))
filtrato = TRUE;
else
filtrato = FALSE;
}
*/
return filtrato;
}
bool TConvBO_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;
// 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 != "**")
printer().formfeed();
_codsez = codsez;
_codsot = codsot;
header_sezione(codsez, codsot);
}
}
return TRUE;
}
void TConvBO_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 TConvBO_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;
case F_CARTOLINE:
_tipo_stampa = cartoline;
break;
}
if (_tipo_stampa != undefined)
{
reset_files();
add_file(LF_SOGGETTI);
/*
_dataini = _msk->get(F_DATAINI);
_datafin = _msk->get(F_DATAFIN);
_procdon = _msk->get(F_PROCDON1);
*/
// filtro per sezioni selezionati
filtra_sezioni();
// filtro per idoneo e non escluso
current_cursor()->setfilter("((TCS->S6 == \"I\" ) || (TCS->S6 == \"F\")) && (ESCLUSO == \"\")", TRUE);
// filtro per procedura di donazione (controllo che abbia la data)
/* questo filtro è nella filter_function
TString16 procdon = _msk->get(F_PROCDON1);
if (procdon == IDON_SI)
current_cursor()->setfilter("(DATAPROSSI == \"\")", TRUE);
else
current_cursor()->setfilter("(DATAPROSAF == \"\")", TRUE);
*/
// filtro per categorie
current_cursor()->set_filterfunction(filter_func_convBO);
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TConvBO_application::crea_intestazione()
{
reset_header();
if (_tipo_stampa == elenco)
{
TString sep(132);
sep = "SCADENZE DI DONAZIONE ";
/* TString16 procdon = _msk->get(F_PROCDON1);
sep << procdon ;
TDate data = _msk->get(F_DATAINI);
if (data.ok())
{
sep << " dal ";
sep << data.string();
}
data = _msk->get(F_DATAFIN);
if (data.ok())
{
sep << " al ";
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@47gData ID@58gTipi idon.");
set_header(5,"@47gTipo/Esito");
set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g----------@58g-- -- -- --");
}
}
bool TConvBO_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 la denominazione della sezione nell'intestazione
_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("at3600a");
_form_eti = new TConvBO_form("AT_ETSOG");
return TRUE;
}
bool TConvBO_application::user_destroy()
{
delete _msk;
delete _rel;
delete _form_eti;
return TRUE;
}
int at3600(int argc, char* argv[])
{
TConvBO_application a;
a.run(argc, argv, "Convocazioni su punto di raccolta");
return 0;
}

16
at/at3600a.h Executable file
View File

@ -0,0 +1,16 @@
// Convocazione per BOLOGNA
// definizione campi per maschera di selezione
#define F_DATACONV 101
#define F_PUNTO 102
#define F_D_PUNTO 103
#define F_TIPODON 104
#define F_D_TIPODON 105
#define F_CODSEZ 106
#define F_DENSEZ 107
#define F_CODSOT 108
#define F_DENSOT 109
#define F_ELENCO 401
#define F_ETICHETTE 402
#define F_CARTOLINE 403

148
at/at3600a.uml Executable file
View File

@ -0,0 +1,148 @@
#include "at3600a.h"
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 78 20
GROUPBOX DLG_NULL 77 7
BEGIN
PROMPT 1 0 "Opzioni per la convocazione"
END
DATE F_DATACONV
BEGIN
PROMPT 2 1 "Data convocazione "
END
STRING F_PUNTO 4
BEGIN
PROMPT 2 2 "Punto di 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
CHECKTYPE REQUIRED
WARNING "Codice non presente"
HELP "Punto di raccolta per la convocazione"
END
STRING F_D_PUNTO 25
BEGIN
PROMPT 27 2 ""
FLAGS "D"
END
STRING F_TIPODON 2
BEGIN
PROMPT 2 3 "Tipo donazione "
FLAGS "U"
USE TDN
INPUT CODTAB F_D_TIPODON
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"
END
STRING F_D_TIPODON 25
BEGIN
PROMPT 27 3 ""
FLAGS "D"
END
STRING F_CODSEZ 2
BEGIN
PROMPT 2 4 "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 27 4 ""
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 5 "Sottogruppo "
FIELD CODSOT
COPY ALL F_CODSEZ
CHECKTYPE NORMAL
HELP "Codice sottogruppo da convocare"
//ADD MASK at0700a
END
STRING F_DENSOT 25
BEGIN
PROMPT 27 5 ""
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 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

@ -1,21 +1,27 @@
#include <xvt.h> #include <xvt.h>
#include <strings.h>
#include <checks.h> #include <checks.h>
#include "at4.h" #include "at4.h"
#define usage "Error - usage : %s -[0]" #define usage "Error - usage : %s -{0|1|2}"
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; const int r = (argc > 1) ? atoi(&argv[1][1]) : -1;
switch (r) switch (r)
{ {
case 0: case 0:
rt = at4100(argc, argv); break; rt = at4100(argc,argv) ; break;
default: case 1:
error_box(usage, argv[0]) ; rt = 1; break; rt = at4200(argc,argv) ; break;
case 2:
rt = at4300(argc,argv) ; break;
default:
error_box(usage, argv[0]) ; break;
} }
return rt; return rt;
} }

View File

@ -1,48 +1,25 @@
#define APPNAME AVIS #define APPNAME AVIS
#define QAPPNAME "AVIS" #define QAPPNAME "AVIS"
#define LIBDIR f:\xvt.403\win_x86\ptk\lib #define LIBDIR f:\xvt.403\win_x86\ptk\lib
#define QFIRMNAME "AGA Informatica S.r.l."
#include <default.url> #include <default.url>
/* ---------------------------------------------------- /* at4 -0 scadenze di donazione */
* at4 -0
* ---------------------------------------------------- */
MENU TASK_MENUBAR MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ----------------------------------------------------
* at4 -1 /* at4 -1 urgenze */
* ---------------------------------------------------- */
MENUBAR MENU_BAR(1) MENUBAR MENU_BAR(1)
MENU MENU_BAR(1) MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ---------------------------------------------------- /* at4 -2 convocazioni per pi— sezioni (parma) */
* at4 -2
* ---------------------------------------------------- */
MENUBAR MENU_BAR(2) MENUBAR MENU_BAR(2)
MENU MENU_BAR(2) MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ----------------------------------------------------
* at4 -3
*
* ----------------------------------------------------*/
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
/* ----------------------------------------------------
* at4 -4
* ---------------------------------------------------- */
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"

View File

@ -1,52 +1,59 @@
#include <mask.h>
#include <form.h> #include <form.h>
#include <mask.h>
#include <printapp.h> #include <printapp.h>
#include <utility.h> #include <utility.h>
#include "lf.h" #include "lf.h"
#include "soggetti.h" #include "soggetti.h"
#include "sezioni.h" #include "sezioni.h"
#include "contsan.h"
#include "at4.h" #include "at4.h"
#include "at4100a.h" #include "at4100a.h"
#include "at4100b.h"
#include "at4100c.h"
#define ALIAS_LCP 100 #define ALIAS_LCP 100
#define ALIAS_TCS 200 #define ALIAS_TCS 200
#define IDON_SI "SI"
#define IDON_AF "AF"
enum ts { undefined = 0, elenco = 1, etichette = 2 }; enum ts { undefined = 0, elenco = 1, etichette = 2, cartoline = 3 };
// definizione form per etichette // definizione form per etichette
class TSitsan_form : public TForm class TScadenze_form : public TForm
{ {
public: public:
virtual TCursor* cursor() const; virtual TCursor* cursor() const;
virtual TRelation* relation() const; virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ; TPrint_section& get_body() { return section('B'); } ;
TSitsan_form(): TForm() {}; TScadenze_form(): TForm() {};
TSitsan_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") TScadenze_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {}; : TForm(form,code,editlevel,desc) {};
virtual ~TSitsan_form() {}; virtual ~TScadenze_form() {};
}; };
class TSitsan_application : public TPrintapp class TScadenze_application : public TPrintapp
{ {
TRelation* _rel; TRelation* _rel;
TMask* _msk; TMask* _msk;
TSitsan_form* _form_eti; TScadenze_form* _form_eti;
TScadenze_form* _form_car;
TAssoc_array _categorie;
int _cur1, _cur2, _cur3, _cur4; int _cur1, _cur2, _cur3, _cur4;
TParagraph_string _cognome_nome; TParagraph_string _cognome_nome;
TDate _data_stampa; TDate _data_stampa;
TDate _dataini, _datafin, _dataultid;
bool _usomodo, _usasez;
TString16 _giorni;
TString16 _procdon, _modo, _ab01, _ab02, _ab03, _rh;
ts _tipo_stampa; ts _tipo_stampa;
TString _codsez, _codsot; TString16 _codsez, _codsot, _orario, _datacart;
TString80 _invitoper, _data, _presso1, _presso2, _presso3, _presso4;
TString80 _note, _intest1, _intest2, _intest3, _intest4;
bool _usotipo; static bool filter_func_scadenze(const TRelation* rel);
TString _tipo;
long _codmed;
static bool filter_func_sitsan(const TRelation *);
protected: protected:
virtual bool user_create(); virtual bool user_create();
@ -54,45 +61,65 @@ protected:
virtual bool set_print(int m); virtual bool set_print(int m);
virtual void set_page(int file, int cnt); virtual void set_page(int file, int cnt);
virtual bool preprocess_page(int file, int counter); virtual bool preprocess_page(int file, int counter);
ts dati_cartoline();
public: public:
void crea_intestazione(); void crea_intestazione();
void filtra_sezioni(); void filtra_sezioni();
void header_sezione(TString codsez, TString codsot); void header_sezione(const TString16 codsez, const TString16 codsot);
void dati_sezione(const TString16 codsez, const TString16 codsot);
TMask& app_mask() { return *_msk; } TMask& app_mask() { return *_msk; }
TSitsan_application() : _data_stampa(TODAY), _cognome_nome("",25) {} TScadenze_application() : _data_stampa(TODAY), _cognome_nome("",25) {}
}; };
HIDDEN inline TSitsan_application& app() { return (TSitsan_application&) main_app(); } HIDDEN inline TScadenze_application& app() { return (TScadenze_application&) main_app(); }
TCursor* TSitsan_form::cursor() const { return app().current_cursor(); } TCursor* TScadenze_form::cursor() const { return app().current_cursor(); }
TRelation* TSitsan_form::relation() const { return cursor()->relation(); } TRelation* TScadenze_form::relation() const { return cursor()->relation(); }
void TSitsan_application::filtra_sezioni() ts TScadenze_application::dati_cartoline()
{ {
TString sezini = _msk->get(F_SEZINI); TMask msk("at4100b");
TString sotini = _msk->get(F_SOTINI); if (msk.run() == K_ENTER)
TString sezfin = _msk->get(F_SEZFIN); {
TString sotfin = _msk->get(F_SOTFIN); _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 TScadenze_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);
select_cursor(_cur4); select_cursor(_cur4);
TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); TRectype da(LF_SOGGETTI);
TRectype da(fl.curr()); TRectype a(LF_SOGGETTI);
TRectype a(fl.curr()); if (sezini.not_empty())
da.zero();
a.zero();
if ((sezini.not_empty()) && (sezini.ok()))
da.put(SOG_CODSEZ, sezini); da.put(SOG_CODSEZ, sezini);
if ((sotini.not_empty()) && (sotini.ok())) if (sotini.not_empty())
da.put(SOG_CODSOT, sotini); da.put(SOG_CODSOT, sotini);
if ((sezfin.not_empty()) && (sezfin.ok())) if (sezfin.not_empty())
a.put(SOG_CODSEZ, sezfin); a.put(SOG_CODSEZ, sezfin);
if ((sotfin.not_empty()) && (sotfin.ok())) if (sotfin.not_empty())
a.put(SOG_CODSOT, sotfin); a.put(SOG_CODSOT, sotfin);
current_cursor()->setregion(da, a); current_cursor()->setregion(da, a);
} }
void TSitsan_application::set_page(int file, int cnt) void TScadenze_application::set_page(int file, int cnt)
{ {
// costruzione etichette // costruzione etichette
switch (_tipo_stampa) switch (_tipo_stampa)
@ -100,7 +127,54 @@ void TSitsan_application::set_page(int file, int cnt)
case etichette: case etichette:
{ {
TPrint_section& corpo = _form_eti->get_body(); 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(); 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(); corpo.update();
for (int i = 0; i < corpo.height(); i++) for (int i = 0; i < corpo.height(); i++)
{ {
@ -113,119 +187,121 @@ void TSitsan_application::set_page(int file, int cnt)
break; break;
case elenco: case elenco:
{ {
set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######")); 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_CATDON));
set_row(1,"@10g#a", &_cognome_nome); set_row(1,"@13g@S", FLD(LF_SOGGETTI,SOG_COGNOME));
set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); set_row(1,"@39g@ld", FLD(LF_SOGGETTI,SOG_DATANASC));
set_row(1,"@47g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID)); // potremmo mettere anche datastato set_row(1,"@50g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSSI));
set_row(1,"@58g@S", FLD(LF_SOGGETTI,SOG_IDON1)); set_row(1,"@61g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSAF));
set_row(1,"@61g@S", FLD(LF_SOGGETTI,SOG_IDON2)); set_row(1,"@72g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON));
set_row(1,"@64g@S", FLD(LF_SOGGETTI,SOG_IDON3)); set_row(1,"@83g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID));
set_row(1,"@67g@S", FLD(LF_SOGGETTI,SOG_IDON4)); 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(2,"@50g@S", FLD(LF_SOGGETTI,SOG_STATO)); 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));
} }
break; break;
} }
} }
bool TSitsan_application::filter_func_sitsan(const TRelation * rel) bool TScadenze_application::filter_func_scadenze(const TRelation* rel)
{ {
bool filtrato = TRUE; bool filtrato = TRUE;
TLocalisamfile& sog = rel->lfile();
TLocalisamfile* sog = &(rel->lfile(LF_SOGGETTI)); // filtro per categorie
TAssoc_array& categorie = app()._categorie;
TAssoc_array categorie;
TMask& msk = app().app_mask();
TString cat = msk.get(F_CAT1);
if (cat.not_empty() && cat.ok())
categorie.add((const char*) cat);
cat = msk.get(F_CAT2);
if (cat.not_empty() && cat.ok())
categorie.add((const char*) cat);
cat = msk.get(F_CAT3);
if (cat.not_empty() && cat.ok())
categorie.add((const char*) cat);
cat = msk.get(F_CAT4);
if (cat.not_empty() && cat.ok())
categorie.add((const char*) cat);
cat = msk.get(F_CAT5);
if (cat.not_empty() && cat.ok())
categorie.add((const char*) cat);
cat = msk.get(F_CAT6);
if (cat.not_empty() && cat.ok())
categorie.add((const char*) cat);
if (categorie.items() != 0) if (categorie.items() != 0)
{ {
TString catsog = sog->curr().get(SOG_CATDON); const TString16 cat = sog.get(SOG_CATDON);
if (categorie.is_key((const char*) catsog)) filtrato = categorie.is_key((const char*) cat);
filtrato = TRUE;
else
filtrato = FALSE;
} }
// filtro per modalita' di convocazione
if (filtrato && app()._usomodo)
{
const TString16 modconv = sog.get(SOG_MODCONV);
filtrato = (modconv == app()._modo);
}
// filtro per data ultima idoneita'
if (filtrato && app()._dataultid.ok())
{
const TDate dataultid = sog.get(SOG_DATAULTID);
filtrato = (dataultid >= app()._dataultid);
}
// filtro per tipizzazione
if (filtrato && (app()._ab01.not_empty() || app()._ab02.not_empty() || app()._ab03.not_empty()))
{
const TString16 ab0 = sog.get(SOG_GRUPPOAB0);
filtrato = (ab0 == app()._ab01 || ab0 == app()._ab02 || ab0 == app()._ab03);
}
if (filtrato && app()._rh.not_empty())
{
const TString16 rh = sog.get(SOG_RHANTID);
filtrato = (rh == app()._rh);
}
// filtro per data di prossima donazione
if (filtrato) if (filtrato)
{ {
const long codice = sog->curr().get_long(SOG_CODICE); TDate datapross(NULLDATE);
const int prog = 999; if (app()._procdon == IDON_SI)
TLocalisamfile con(LF_CONTSAN); datapross = sog.get(SOG_DATAPROSSI);
con.zero();
con.put(CON_CODICE,codice);
con.put(CON_PROGCON,prog);
int err = con.read(_isgteq);
if (err == _isemptyfile)
filtrato = FALSE;
else else
datapross = sog.get(SOG_DATAPROSAF);
if (datapross.ok())
{ {
if (err==NOERR) if (app()._dataini.ok())
{ filtrato = datapross >= app()._dataini;
const long codcon = con.get_long(CON_CODICE);
if (codice != codcon)
{
err = con.prev();
if (err != NOERR)
filtrato = FALSE;
}
}
if (filtrato) if (filtrato)
{ if (app()._datafin.ok())
const long codsog = con.get_long(CON_CODICE); filtrato = datapross <= app()._datafin;
if (codice != codsog) }
filtrato = FALSE;
else if (app()._usotipo)
{
TString tipo = con.get(CON_TIPOCON);
if (tipo == app()._tipo)
filtrato = TRUE;
else else
filtrato = FALSE; filtrato = FALSE;
} }
// filtro per giorno preferito
const TString16& giorni = app()._giorni;
if (filtrato && giorni != "NNNNNNN")
{
bool almenoungiorno = FALSE;
const TString16 giopredon = sog.get(SOG_GIOPREDON);
for (int i = 0; i < giorni.len(); i++)
{
if (giorni[i] == 'X')
almenoungiorno = (almenoungiorno || giopredon[i] == 'X');
} }
} filtrato = almenoungiorno;
} }
return filtrato; return filtrato;
} }
bool TSitsan_application::preprocess_page(int file, int counter) bool TScadenze_application::preprocess_page(int file, int counter)
{ {
// contatore soggetti stampati // contatore soggetti stampati
// per ora non c'è // per ora non c'è
if (_tipo_stampa == elenco)
switch (_tipo_stampa)
{ {
TString nome = current_cursor()->curr().get(SOG_COGNOME); 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);
nome << " "; nome << " ";
nome << current_cursor()->curr().get(SOG_NOME); nome << current_cursor()->curr().get(SOG_NOME);
_cognome_nome = nome; _cognome_nome = nome;
// salto pagina se cambio sezione // salto pagina se cambio sezione
TString codsez = current_cursor()->curr().get(SOG_CODSEZ); //const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ);
TString codsot = current_cursor()->curr().get(SOG_CODSOT); //const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT);
if ((_codsez!=codsez)||(_codsot!=codsot)) if ((_codsez!=codsez)||(_codsot!=codsot))
{ {
//if (!_codsez.blank())
if (_codsez != "**") if (_codsez != "**")
printer().formfeed(); printer().formfeed();
_codsez = codsez; _codsez = codsez;
@ -233,13 +309,15 @@ bool TSitsan_application::preprocess_page(int file, int counter)
header_sezione(codsez, codsot); header_sezione(codsez, codsot);
} }
} }
break;
}
return TRUE; return TRUE;
} }
void TSitsan_application::header_sezione(TString codsez, TString codsot) void TScadenze_application::header_sezione(const TString16 codsez, const TString16 codsot)
{ {
TString densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ);
TString densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT);
TString intestazione(132); TString intestazione(132);
intestazione = "Sezione: "; intestazione = "Sezione: ";
intestazione << codsez; intestazione << codsez;
@ -257,7 +335,30 @@ void TSitsan_application::header_sezione(TString codsez, TString codsot)
return; return;
} }
bool TSitsan_application::set_print(int m) void TScadenze_application::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 TScadenze_application::set_print(int m)
{ {
_tipo_stampa = undefined; _tipo_stampa = undefined;
KEY tasto; KEY tasto;
@ -266,37 +367,73 @@ bool TSitsan_application::set_print(int m)
{ {
case F_ELENCO: case F_ELENCO:
_tipo_stampa = elenco; _tipo_stampa = elenco;
//_codsez.spaces(2);
//_codsot.spaces(2);
_codsez = "**";
_codsot = "**";
break; break;
case F_ETICHETTE: case F_ETICHETTE:
_tipo_stampa = etichette; _tipo_stampa = etichette;
break; break;
case F_CARTOLINE:
_tipo_stampa = dati_cartoline();
break;
} }
if (_tipo_stampa != undefined) if (_tipo_stampa != undefined)
{ {
_codsez = "**";
_codsot = "**";
reset_files(); reset_files();
add_file(LF_SOGGETTI); add_file(LF_SOGGETTI);
_dataini = _msk->get(F_DATAINI);
_usotipo = _msk->get_bool(F_USOTIPO); _datafin = _msk->get(F_DATAFIN);
_tipo = _msk->get(F_TIPO); _dataultid = _msk->get(F_DATAULTID);
_codmed = _msk->get_long(F_CODMED); _procdon = _msk->get(F_PROCDON1);
_usomodo = _msk->get_bool(F_USOMODO);
_modo = _msk->get(F_MODO);
_ab01 = _msk->get(F_AB01);
_ab02 = _msk->get(F_AB02);
_ab03 = _msk->get(F_AB03);
_rh = _msk->get(F_RHANTID);
_giorni = "NNNNNNN";
if (_msk->get_bool(F_GPD_LUN))
_giorni[0] = 'X';
if (_msk->get_bool(F_GPD_MAR))
_giorni[1] = 'X';
if (_msk->get_bool(F_GPD_MER))
_giorni[2] = 'X';
if (_msk->get_bool(F_GPD_GIO))
_giorni[3] = 'X';
if (_msk->get_bool(F_GPD_VEN))
_giorni[4] = 'X';
if (_msk->get_bool(F_GPD_SAB))
_giorni[5] = 'X';
if (_msk->get_bool(F_GPD_DOM))
_giorni[6] = 'X';
// filtro per sezioni selezionati // filtro per sezioni selezionati
filtra_sezioni(); filtra_sezioni();
// filtro per tipo idoneità
/*
TString tipoid = _msk->get(F_TIPO);
if (tipoid.not_empty() && tipoid.ok())
current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)tipoid));
else
current_cursor()->setfilter("TCS->S6 == \"I\"", TRUE);
*/
// filtro per categorie // filtro per categorie
current_cursor()->set_filterfunction(filter_func_sitsan); 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())
_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 idoneo e non escluso
//if (_usomodo)
//current_cursor()->setfilter(format("(TCS->S6 == \"I\" || TCS->S6 == \"F\") && (ESCLUSO == \"\") && (MODCONV == \"%s\")",(const char*)_modo), TRUE);
//else
current_cursor()->setfilter("((TCS->S6 == \"I\" ) || (TCS->S6 == \"F\")) && (ESCLUSO == \"\")", TRUE);
// filtro per categorie e altro
current_cursor()->set_filterfunction(filter_func_scadenze);
reset_print(); reset_print();
crea_intestazione(); crea_intestazione();
return TRUE; return TRUE;
@ -305,26 +442,31 @@ bool TSitsan_application::set_print(int m)
return FALSE; return FALSE;
} }
void TSitsan_application::crea_intestazione() void TScadenze_application::crea_intestazione()
{ {
reset_header(); reset_header();
if (_tipo_stampa == elenco) if (_tipo_stampa == elenco)
{ {
TString sep(132); TString sep(132);
sep = "SITUAZIONE SANITARIA ATTUALE"; sep = "SCADENZE DI DONAZIONE ";
TString tipo = _msk->get(F_TIPO); TString16 procdon = _msk->get(F_PROCDON1);
if ((tipo.ok()) && (tipo.not_empty())) sep << procdon ;
TDate data = _msk->get(F_DATAINI);
if (data.ok())
{ {
sep << ": tipo "; sep << " dal ";
sep << tipo; sep << data.string();
tipo = _msk->get(F_D_TIPO); }
sep << " "; data = _msk->get(F_DATAFIN);
sep << tipo; if (data.ok())
{
sep << " al ";
sep << data.string();
} }
sep.center_just(); sep.center_just();
set_header(2, "@0g%s", (const char*) sep); set_header(2, "@0g%s", (const char*) sep);
TString data_stampa = _data_stampa.string(); TString16 data_stampa = _data_stampa.string();
set_header(2,"@0g%10s", (const char*) data_stampa); set_header(2,"@0g%10s", (const char*) data_stampa);
sep = ""; sep = "";
sep << "Pag. @#"; sep << "Pag. @#";
@ -334,21 +476,20 @@ void TSitsan_application::crea_intestazione()
sep.fill('-'); sep.fill('-');
set_header(3, (const char *) sep); set_header(3, (const char *) sep);
set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gData ID@58gTipi idon."); set_header(5,"@0gCod.@10gC.@13gCognome@39gNato il@50gData pr.SI@61gData pr.AF@72gData/Tipo@83gData/Tipo@94gIdon.@100gAB0");
set_header(5,"@47gTipo/Esito"); set_header(6,"@13gNome@50gInterv. SI@61gInterv. AF@72gult. don.@83gult. idon.@94gper@100gRh");
set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g----------@58g-- -- -- --"); set_header(7,"@0g---------@10g--@13g-------------------------@39g----------@50g----------@61g----------@72g----------@83g----------@94g-----");
} }
} }
bool TSitsan_application::user_create() bool TScadenze_application::user_create()
{ {
_rel = new TRelation(LF_SOGGETTI); _rel = new TRelation(LF_SOGGETTI);
_rel->add("TCS","CODTAB==STATO",1,0,ALIAS_TCS); _rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS);
_rel->add("LCP","CODTAB==LOCALITA",1,0,ALIAS_LCP); _rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCP);
_rel->add(LF_COMUNI,"COM==COM"); _rel->add(LF_COMUNI, "COM==DOM_CODCOM");
// per stampare la denominazione della sezione nell'intestazione // per stampare la denominazione della sezione nell'intestazione
_rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT"); _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
_rel->add(LF_CONTSAN,"CODICE==CODICE");
_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice _cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome
@ -357,25 +498,27 @@ bool TSitsan_application::user_create()
_msk = new TMask("at4100a"); _msk = new TMask("at4100a");
_form_eti = new TSitsan_form("AT_ETSOG"); _form_eti = new TScadenze_form("AT_ETSOG");
_form_car = new TScadenze_form("AT_ETCAR");
return TRUE; return TRUE;
} }
bool TSitsan_application::user_destroy() bool TScadenze_application::user_destroy()
{ {
delete _msk; delete _msk;
delete _rel; delete _rel;
delete _form_eti; delete _form_eti;
delete _form_car;
return TRUE; return TRUE;
} }
int at4100(int argc, char* argv[]) int at4100(int argc, char* argv[])
{ {
TSitsan_application a; TScadenze_application a;
a.run(argc, argv, "Situazione sanitaria attuale"); a.run(argc, argv, "Scadenze di donazione");
return 0; return 0;
} }

View File

@ -1,4 +1,4 @@
// situazione sanitaria attuale // Scadenze di donazione
// definizione campi per maschera di selezione // definizione campi per maschera di selezione
#define F_SEZINI 101 #define F_SEZINI 101
@ -23,17 +23,25 @@
#define F_CAT6 211 #define F_CAT6 211
#define F_D_CAT6 212 #define F_D_CAT6 212
#define F_USOTIPO 301 #define F_PROCDON1 301
#define F_TIPO 302 //#define F_PROCDON2 302
#define F_D_TIPO 303 #define F_DATAINI 303
//#define F_USOPROSS 304 #define F_DATAFIN 304
//#define F_PROSS 305 #define F_GPD_LUN 305
//#define F_D_PROSS 306 #define F_GPD_MAR 306
#define F_DATAINI 304 #define F_GPD_MER 307
#define F_DATAFIN 305 #define F_GPD_GIO 308
#define F_CODMED 307 #define F_GPD_VEN 309
#define F_COGNMED 308 #define F_GPD_SAB 310
#define F_NOMMED 309 #define F_GPD_DOM 311
#define F_USOMODO 312
#define F_MODO 313
#define F_DATAULTID 314
#define F_AB01 315
#define F_AB02 316
#define F_AB03 317
#define F_RHANTID 318
#define F_ELENCO 401 #define F_ELENCO 401
#define F_ETICHETTE 402 #define F_ETICHETTE 402
#define F_CARTOLINE 403

View File

@ -4,12 +4,12 @@ PAGE "Definizione Stampe" -1 -1 78 20
GROUPBOX DLG_NULL 77 4 GROUPBOX DLG_NULL 77 4
BEGIN BEGIN
PROMPT 1 1 "Scelta sezioni/sottogruppi" PROMPT 1 0 "Scelta sezioni/sottogruppi"
END END
STRING F_SEZINI 2 STRING F_SEZINI 2
BEGIN BEGIN
PROMPT 2 2 "Da " PROMPT 2 1 "Da "
FLAGS "U" FLAGS "U"
USE LF_SEZIONI USE LF_SEZIONI
INPUT CODSEZ F_SEZINI INPUT CODSEZ F_SEZINI
@ -28,7 +28,7 @@ END
STRING F_D_SEZINI 25 STRING F_D_SEZINI 25
BEGIN BEGIN
PROMPT 11 2 "" PROMPT 11 1 ""
FLAGS "U" FLAGS "U"
USE LF_SEZIONI KEY 2 USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZINI INPUT DENSEZ F_D_SEZINI
@ -43,7 +43,7 @@ END
STRING F_SOTINI 2 STRING F_SOTINI 2
BEGIN BEGIN
PROMPT 2 3 " " PROMPT 2 2 " "
COPY ALL F_SEZINI COPY ALL F_SEZINI
CHECKTYPE SEARCH CHECKTYPE SEARCH
HELP "Codice sottogruppo da cui partire" HELP "Codice sottogruppo da cui partire"
@ -51,7 +51,7 @@ END
STRING F_D_SOTINI 25 STRING F_D_SOTINI 25
BEGIN BEGIN
PROMPT 11 3 "" PROMPT 11 2 ""
FLAGS "U" FLAGS "U"
COPY USE F_D_SEZINI COPY USE F_D_SEZINI
INPUT DENSEZ F_D_SEZINI INPUT DENSEZ F_D_SEZINI
@ -64,7 +64,7 @@ END
STRING F_SEZFIN 2 STRING F_SEZFIN 2
BEGIN BEGIN
PROMPT 41 2 "A " PROMPT 41 1 "A "
FLAGS "U" FLAGS "U"
USE LF_SEZIONI USE LF_SEZIONI
INPUT CODSEZ F_SEZFIN INPUT CODSEZ F_SEZFIN
@ -83,7 +83,7 @@ END
STRING F_D_SEZFIN 25 STRING F_D_SEZFIN 25
BEGIN BEGIN
PROMPT 49 2 "" PROMPT 49 1 ""
FLAGS "U" FLAGS "U"
USE LF_SEZIONI KEY 2 USE LF_SEZIONI KEY 2
INPUT DENSEZ F_D_SEZFIN INPUT DENSEZ F_D_SEZFIN
@ -98,7 +98,7 @@ END
STRING F_SOTFIN 2 STRING F_SOTFIN 2
BEGIN BEGIN
PROMPT 41 3 " " PROMPT 41 2 " "
COPY ALL F_SEZFIN COPY ALL F_SEZFIN
CHECKTYPE SEARCH CHECKTYPE SEARCH
HELP "Codice sottogruppo finale" HELP "Codice sottogruppo finale"
@ -106,7 +106,7 @@ END
STRING F_D_SOTFIN 25 STRING F_D_SOTFIN 25
BEGIN BEGIN
PROMPT 49 3 "" PROMPT 49 2 ""
FLAGS "U" FLAGS "U"
COPY USE F_D_SEZFIN COPY USE F_D_SEZFIN
INPUT DENSEZ F_D_SEZFIN INPUT DENSEZ F_D_SEZFIN
@ -119,13 +119,13 @@ END
GROUPBOX DLG_NULL 77 5 GROUPBOX DLG_NULL 77 5
BEGIN BEGIN
PROMPT 1 5 "Categorie" PROMPT 1 4 "Categorie"
END END
STRING F_CAT1 2 STRING F_CAT1 2
BEGIN BEGIN
PROMPT 2 6 "" PROMPT 2 5 ""
FLAGS "U" FLAGS "U"
USE CTD USE CTD
INPUT CODTAB F_CAT1 INPUT CODTAB F_CAT1
@ -140,13 +140,13 @@ END
STRING F_D_CAT1 30 STRING F_D_CAT1 30
BEGIN BEGIN
PROMPT 8 6 "" PROMPT 8 5 ""
FLAGS "D" FLAGS "D"
END END
STRING F_CAT2 2 STRING F_CAT2 2
BEGIN BEGIN
PROMPT 2 7 "" PROMPT 2 6 ""
FLAGS "U" FLAGS "U"
USE CTD USE CTD
INPUT CODTAB F_CAT2 INPUT CODTAB F_CAT2
@ -160,13 +160,13 @@ END
STRING F_D_CAT2 30 STRING F_D_CAT2 30
BEGIN BEGIN
PROMPT 8 7 "" PROMPT 8 6 ""
FLAGS "D" FLAGS "D"
END END
STRING F_CAT3 2 STRING F_CAT3 2
BEGIN BEGIN
PROMPT 2 8 "" PROMPT 2 7 ""
FLAGS "U" FLAGS "U"
USE CTD USE CTD
INPUT CODTAB F_CAT3 INPUT CODTAB F_CAT3
@ -180,13 +180,13 @@ END
STRING F_D_CAT3 30 STRING F_D_CAT3 30
BEGIN BEGIN
PROMPT 8 8 "" PROMPT 8 7 ""
FLAGS "D" FLAGS "D"
END END
STRING F_CAT4 2 STRING F_CAT4 2
BEGIN BEGIN
PROMPT 40 6 "" PROMPT 40 5 ""
FLAGS "U" FLAGS "U"
USE CTD USE CTD
INPUT CODTAB F_CAT4 INPUT CODTAB F_CAT4
@ -200,13 +200,13 @@ END
STRING F_D_CAT4 30 STRING F_D_CAT4 30
BEGIN BEGIN
PROMPT 46 6 "" PROMPT 46 5 ""
FLAGS "D" FLAGS "D"
END END
STRING F_CAT5 2 STRING F_CAT5 2
BEGIN BEGIN
PROMPT 40 7 "" PROMPT 40 6 ""
FLAGS "U" FLAGS "U"
USE CTD USE CTD
INPUT CODTAB F_CAT5 INPUT CODTAB F_CAT5
@ -220,13 +220,13 @@ END
STRING F_D_CAT5 30 STRING F_D_CAT5 30
BEGIN BEGIN
PROMPT 46 7 "" PROMPT 46 6 ""
FLAGS "D" FLAGS "D"
END END
STRING F_CAT6 2 STRING F_CAT6 2
BEGIN BEGIN
PROMPT 40 8 "" PROMPT 40 7 ""
FLAGS "U" FLAGS "U"
USE CTD USE CTD
INPUT CODTAB F_CAT6 INPUT CODTAB F_CAT6
@ -240,131 +240,122 @@ END
STRING F_D_CAT6 30 STRING F_D_CAT6 30
BEGIN BEGIN
PROMPT 46 8 "" PROMPT 46 7 ""
FLAGS "D" FLAGS "D"
END END
GROUPBOX DLG_NULL 77 4 GROUPBOX DLG_NULL 50 8
BEGIN BEGIN
PROMPT 1 10 "Situazione sanitaria" PROMPT 1 9 "Opzioni di convocazione"
END END
BOOLEAN F_USOTIPO LISTBOX F_PROCDON1 17
BEGIN BEGIN
PROMPT 2 11 "Seleziona Tipo/Esito " PROMPT 2 10 "Procedura di donazione "
MESSAGE TRUE ENABLE,F_TIPO #include "procdon.h"
MESSAGE FALSE RESET,F_TIPO|DISABLE,F_TIPO
END END
STRING F_TIPO 2 //LISTBOX F_PROCDON2 17
BEGIN
PROMPT 35 11 ""
FLAGS "U"
USE TCS
INPUT CODTAB F_TIPO
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_TIPO CODTAB
OUTPUT F_D_TIPO S0
CHECKTYPE NORMAL
WARNING "Codice non presente"
HELP "Tipo/Esito"
END
STRING F_D_TIPO 30
BEGIN
PROMPT 40 11 ""
FLAGS "D"
END
//BOOLEAN F_USOPROSS
//BEGIN //BEGIN
// PROMPT 2 12 "Seleziona pross. Tipo/Esito " // PROMPT 50 10 ""
// MESSAGE TRUE ENABLE,F_PROSS // #include "procdon.h"
// MESSAGE FALSE RESET,F_PROSS|DISABLE,F_PROSS
//END
//STRING F_PROSS 2
//BEGIN
// PROMPT 35 12 ""
// FLAGS "U"
// USE TCS SELECT S6="I"
// INPUT CODTAB F_PROSS
// DISPLAY "Codice" CODTAB
// DISPLAY "Descrizione@30" S0
// OUTPUT F_PROSS CODTAB
// OUTPUT F_D_PROSS S0
// CHECKTYPE NORMAL
// WARNING "Codice non presente"
// HELP "Prossimo Tipo/Esito"
//END
//STRING F_D_PROSS 30
//BEGIN
// PROMPT 40 12 ""
// FLAGS "D"
//END //END
DATE F_DATAINI DATE F_DATAINI
BEGIN BEGIN
PROMPT 2 12 "Data iniziale " PROMPT 2 11 "Data prossima don. da "
END END
DATE F_DATAFIN DATE F_DATAFIN
BEGIN BEGIN
PROMPT 35 12 "Data finale " PROMPT 37 11 "a "
END END
GROUPBOX DLG_NULL 77 3 TEXT DLG_NULL
BEGIN BEGIN
PROMPT 1 14 "Medico di base" PROMPT 2 12 "Giorni: Lu Ma Me Gi Ve Sa Do"
END END
NUMBER F_CODMED 6 BOOLEAN F_GPD_LUN
BEGIN BEGIN
PROMPT 2 15 "Medico " PROMPT 12 13 ""
FLAGS "U"
USE LF_MEDICI
INPUT CODMED F_CODMED
DISPLAY "Codice" CODMED
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
OUTPUT F_CODMED CODMED
OUTPUT F_COGNMED COGNOME
OUTPUT F_NOMMED NOME
CHECKTYPE NORMAL
HELP "Codice medico di base"
WARNING "Codice medico assente"
END END
STRING F_COGNMED 25 BOOLEAN F_GPD_MAR
BEGIN BEGIN
PROMPT 19 15 "" PROMPT 16 13 ""
USE LF_MEDICI KEY 2
INPUT COGNOME F_COGNMED
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Codice" CODMED
COPY OUTPUT F_CODMED
CHECKTYPE NORMAL
HELP "Medico di base"
WARNING "Medico assente"
END END
STRING F_NOMMED 25 BOOLEAN F_GPD_MER
BEGIN BEGIN
PROMPT 48 15 "" PROMPT 20 13 ""
USE LF_MEDICI KEY 2 END
INPUT COGNOME F_COGNMED
INPUT NOME F_NOMNMED BOOLEAN F_GPD_GIO
DISPLAY "Cognome@25" COGNOME BEGIN
DISPLAY "Nome@25" NOME PROMPT 24 13 ""
DISPLAY "Codice" CODMED END
COPY OUTPUT F_COGNMED
CHECKTYPE NORMAL BOOLEAN F_GPD_VEN
HELP "Medico di base" BEGIN
WARNING "Medico assente" PROMPT 28 13 ""
END
BOOLEAN F_GPD_SAB
BEGIN
PROMPT 32 13 ""
END
BOOLEAN F_GPD_DOM
BEGIN
PROMPT 36 13 ""
END
BOOLEAN F_USOMODO
BEGIN
PROMPT 2 14 "Uso modalita' 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 END
@ -375,19 +366,25 @@ END
BUTTON F_ELENCO 9 2 BUTTON F_ELENCO 9 2
BEGIN BEGIN
PROMPT -13 18 "Elenco" PROMPT -14 18 "Elenco"
MESSAGE EXIT,F_ELENCO MESSAGE EXIT,F_ELENCO
END END
BUTTON F_ETICHETTE 9 2 BUTTON F_ETICHETTE 9 2
BEGIN BEGIN
PROMPT -23 18 "Etichette" PROMPT -24 18 "Etichette"
MESSAGE EXIT,F_ETICHETTE MESSAGE EXIT,F_ETICHETTE
END END
BUTTON F_CARTOLINE 9 2
BEGIN
PROMPT -34 18 "Cartoline"
MESSAGE EXIT,F_CARTOLINE
END
BUTTON DLG_QUIT 9 2 BUTTON DLG_QUIT 9 2
BEGIN BEGIN
PROMPT -33 18 "" PROMPT -44 18 ""
END END
ENDPAGE ENDPAGE

13
at/at4100b.h Executable file
View File

@ -0,0 +1,13 @@
// stampa cartoline
// definizione campi per maschera
#define F_INVITOPER 101
#define F_DATA 102
#define F_PRESSO1 103
#define F_PRESSO2 104
#define F_PRESSO3 105
#define F_PRESSO4 106
#define F_ORARIO 107
#define F_DATACART 108
#define F_NOTE 109
#define F_USASEZ 110

71
at/at4100b.uml Executable file
View File

@ -0,0 +1,71 @@
#include "at4100b.h"
#include "lf.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Stampa cartoline" -1 -1 78 20
STRING F_INVITOPER 25
BEGIN
PROMPT 2 5 "Invito per "
END
STRING F_DATA 25
BEGIN
PROMPT 2 6 "Data "
END
STRING F_PRESSO1 25
BEGIN
PROMPT 2 7 "Presso "
END
STRING F_PRESSO2 25
BEGIN
PROMPT 2 8 " "
END
STRING F_PRESSO3 25
BEGIN
PROMPT 2 9 " "
END
STRING F_PRESSO4 25
BEGIN
PROMPT 2 10 " "
END
STRING F_ORARIO 14
BEGIN
PROMPT 2 11 "Orario "
END
DATE F_DATACART
BEGIN
PROMPT 2 12 "Data cart. "
END
STRING F_NOTE 25
BEGIN
PROMPT 2 13 "Note "
END
BOOLEAN F_USASEZ
BEGIN
PROMPT 2 14 "Usa dati cartolina della sezione"
END
ENDPAGE
ENDMASK

15
at/at4100c.h Executable file
View File

@ -0,0 +1,15 @@
// definizione campi di stampa cartoline
#define CAR_INVITOPER 10
#define CAR_DATA 11
#define CAR_PRESSO1 12
#define CAR_PRESSO2 13
#define CAR_PRESSO3 14
#define CAR_PRESSO4 15
#define CAR_ORARIO 16
#define CAR_DATACART 17
#define CAR_NOTE 18
#define CAR_INTEST1 19
#define CAR_INTEST2 20
#define CAR_INTEST3 21
#define CAR_INTEST4 22

356
at/at4200.cpp Executable file
View File

@ -0,0 +1,356 @@
#include <form.h>
#include <mask.h>
#include <printapp.h>
#include "lf.h"
#include "soggetti.h"
#include "sezioni.h"
#include <comuni.h>
#include "at4.h"
#include "at4200a.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(const TString16 codsez, const 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()
{
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);
select_cursor(_cur4);
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 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)
{
const 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)
{
const long giorni_sez = rel->lfile(LF_SEZIONI).get_long(SEZ_INTMINCONV);
const long giorni = (giorni_sez > app()._giorni) ? giorni_sez : app()._giorni;
TDate data(TODAY);
data = data - (const long) giorni;
const 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
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 != "**")
printer().formfeed();
_codsez = codsez;
_codsot = codsot;
header_sezione(codsez, codsot);
}
}
return TRUE;
}
void TUrgenze_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 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
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())
_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();
const TString16 gruppoab0 = _msk->get(F_GRUPPOAB0);
const TString16 rhantid = _msk->get(F_RHANTID);
const TString16 kell = _msk->get(F_KELL);
const TString16 fenotiporh = _msk->get(F_FENOTIPORH);
const 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)
{
TString 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==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 TUrgenze_form("AT_ETSOG");
_msk = new TMask("at4200a");
_sangue = new TRectype(LF_SOGGETTI);
return TRUE;
}
bool TUrgenze_application::user_destroy()
{
delete _msk;
delete _rel;
delete _form_eti;
delete _sangue;
return TRUE;
}
int at4200(int argc, char* argv[])
{
TUrgenze_application a;
a.run(argc, argv, "Urgenze");
return 0;
}

37
at/at4200a.h Executable file
View File

@ -0,0 +1,37 @@
// convocazione urgente
// 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_GRUPPOAB0 301
#define F_RHANTID 302
#define F_KELL 303
#define F_FENOTIPORH 304
#define F_DU 305
#define F_NUMERO 306
#define F_GIORNI 307
#define F_ELENCO 401
#define F_ETICHETTE 402

335
at/at4200a.uml Executable file
View File

@ -0,0 +1,335 @@
#include "at4200a.h"
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 78 20
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 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 "Tipizzazione richiesta"
END
LISTBOX F_GRUPPOAB0 4
BEGIN
PROMPT 2 11 "Gruppo AB0 "
FIELD GRUPPOAB0
FLAGS "U"
#include "gruppo.h"
END
LISTBOX F_RHANTID 3
BEGIN
PROMPT 22 11 "Rh/AntiD "
FIELD RHANTID
FLAGS "U"
#include "rh.h"
END
STRING F_FENOTIPORH 6
BEGIN
PROMPT 39 11 "Fen.Rh "
FIELD FENOTIPORH
END
LISTBOX F_KELL 3
BEGIN
PROMPT 55 11 "Kell "
FIELD KELL
FLAGS "U"
#include "rh.h"
END
LISTBOX F_DU 3
BEGIN
PROMPT 68 11 "Du "
FIELD DU
FLAGS "U"
#include "rh.h"
END
GROUPBOX DLG_NULL 77 3
BEGIN
PROMPT 1 13 "Richieste"
END
NUMBER F_NUMERO 3
BEGIN
PROMPT 2 14 "Soggetti richiesti "
CHECKTYPE REQUIRED
WARNING "Inserire il numero dei soggetti richiesti"
HELP "Numero dei soggetti richiesti per l'urgenza"
END
NUMBER F_GIORNI 3
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"
END
GROUPBOX DLG_NULL 77 4
BEGIN
PROMPT 1 16 "Stampa"
END
BUTTON F_ELENCO 9 2
BEGIN
PROMPT -13 17 "Elenco"
MESSAGE EXIT,F_ELENCO
END
BUTTON F_ETICHETTE 9 2
BEGIN
PROMPT -23 17 "Etichette"
MESSAGE EXIT,F_ETICHETTE
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -33 17 ""
END
ENDPAGE
ENDMASK

445
at/at4300.cpp Executable file
View File

@ -0,0 +1,445 @@
#include <form.h>
#include <mask.h>
#include <msksheet.h>
#include <printapp.h>
#include "lf.h"
#include "soggetti.h"
#include "sezioni.h"
#include "at4.h"
#include "at4300a.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
#define STATO_IDONEO 'I' // IDONEITA'
#define STATO_FINESO 'F' // FINE SOSPENSIONE
// tpi di stampa
enum ts { undefined = 0, elenco = 1, etichette = 2, cartoline = 3 };
// definizione form per etichette e cartoline
class TConv_form : public TForm
{
public:
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);
public:
void crea_intestazione();
void filtra_sezione();
void header_sezione();
TConv_application() : _data_stampa(TODAY) {}
};
HIDDEN inline TConv_application& app() { return (TConv_application&) 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)
{
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();
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);
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);
TRectype da(LF_SOGGETTI);
TRectype a(LF_SOGGETTI);
da.zero();
a.zero('Z');
if (_codsez.not_empty())
{
da.put(SOG_CODSEZ, _codsez);
a.put(SOG_CODSEZ, _codsez);
}
if (_codsot.not_empty())
{
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();
if (_tipo_stampa == elenco)
{
TString 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-----");
}
}
void TConv_application::header_sezione()
{
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);
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;
}
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==DOM_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("at4300a");
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)
{
TAssoc_array& sez = app()._asezioni;
if (sez.is_key(codice))
return FALSE;
else
{
sez.add(codice);
return TRUE;
}
}
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;
}
int at4300(int argc, char* argv[])
{
TConv_application a;
a.run(argc, argv, "Convocazioni Parma");
return 0;
}

18
at/at4300a.h Executable file
View File

@ -0,0 +1,18 @@
// 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

173
at/at4300a.uml Executable file
View File

@ -0,0 +1,173 @@
#include "at4300a.h"
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 78 20
GROUPBOX DLG_NULL 77 12
BEGIN
PROMPT 1 1 "Selezioni per la convocazione"
END
SPREADSHEET F_CONVOCAZIONI 75 10
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 ""
END
ENDPAGE
ENDMASK
PAGE "Convocazioni" -1 -1 78 12
STRING F_C_CODSEZ 2
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
END
ENDPAGE
ENDMASK

View File

@ -1,21 +1,43 @@
#define APPNAME AVIS #define APPNAME AVIS
#define QAPPNAME "AVIS" #define QAPPNAME "AVIS"
#define LIBDIR f:\xvt.403\win_x86\ptk\lib #define LIBDIR f:\xvt.403\win_x86\ptk\lib
#define QFIRMNAME "AGA Informatica S.r.l."
#include <default.url> #include <default.url>
/* ---------------------------------------------------- /* at5 -0 */
* at5 -0
* ---------------------------------------------------- */
MENU TASK_MENUBAR MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* ----------------------------------------------------
* at5 -1 /* at5 -1 */
* ---------------------------------------------------- */
MENUBAR MENU_BAR(1) MENUBAR MENU_BAR(1)
MENU MENU_BAR(1) MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File" SUBMENU MENU_FILE "~File"
/* at5 -2 */
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
/* at5 -3 */
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
/* at5 -4 */
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"
/* at5 -5 */
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"

23
at/at6.cpp Executable file
View File

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

7
at/at6.h Executable file
View File

@ -0,0 +1,7 @@
#ifndef __AT6_H
#define __AT6_H
int at6100(int argc, char* argv[]); // stampa tabella medici
int at6200(int argc, char* argv[]); // stampa tabella sezioni/sottogruppi
#endif // __AT6_H

19
at/at6.url Executable file
View File

@ -0,0 +1,19 @@
#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>
/* at6 -0 stampa archivio medici*/
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
/* at6 -1 stampa archivio sezioni */
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"

223
at/at6100.cpp Executable file
View File

@ -0,0 +1,223 @@
#include <form.h>
#include <mask.h>
#include <printapp.h>
#include "lf.h"
#include "medici.h"
#include <comuni.h>
#include "at6.h"
#include "at6100a.h"
enum ts { undefined = 0, elenco = 1, etichette = 2 };
// definizione form per etichette
class TMed_form : public TForm
{
public:
virtual TCursor* cursor() const;
virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ;
TMed_form(): TForm() {};
TMed_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {};
virtual ~TMed_form() {};
};
class TMedprint_application : public TPrintapp
{
TRelation* _rel;
TMask* _msk;
TMed_form* _form_eti;
int _cur1, _cur2;
TParagraph_string _cognome_nome, _dencom, _indirizzo;
TDate _data_stampa;
ts _tipo_stampa;
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();
TMedprint_application() : _data_stampa(TODAY), _indirizzo("",25), _dencom("",25), _cognome_nome("",40) {}
};
HIDDEN inline TMedprint_application& app() { return (TMedprint_application&) main_app(); }
TCursor* TMed_form::cursor() const { return app().current_cursor(); }
TRelation* TMed_form::relation() const { return cursor()->relation(); }
void TMedprint_application::set_page(int file, int cnt)
{
// costruzione etichette
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);
}
break;
case elenco:
{
set_row(1,"@0g@pn",FLD(LF_MEDICI,MED_CODMED,"######"));
set_row(1,"@7g#a",&_cognome_nome);
set_row(1,"@48g#a",&_indirizzo);
set_row(1,"@74g#a",&_dencom);
set_row(1,"@100g@S",FLD(LF_MEDICI,MED_TELAMB));
set_row(1,"@116g@S",FLD(LF_MEDICI,MED_TELABI));
}
break;
}
}
bool TMedprint_application::preprocess_page(int file, int counter)
{
if (_tipo_stampa == elenco)
{
TString80 nome = current_cursor()->curr().get(MED_COGNOME);
nome << " ";
nome << current_cursor()->curr().get(MED_NOME);
_cognome_nome = nome;
TString256 localita = "";
localita << current_cursor()->curr("LCP").get("S0");
if (localita.not_empty() && localita.ok())
localita << " - ";
localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM);
_dencom = localita;
_indirizzo = current_cursor()->curr(LF_MEDICI).get(MED_INDIRIZZO);
}
return TRUE;
}
bool TMedprint_application::set_print(int)
{
_tipo_stampa = undefined;
KEY tasto;
tasto = _msk->run();
switch (tasto)
{
case F_ELENCO:
_tipo_stampa = elenco;
break;
case F_ETICHETTE:
_tipo_stampa = etichette;
break;
}
if (_tipo_stampa != undefined)
{
long codfr, codto;
TString80 cogfr, cogto;
const int sort = _msk->get_int(F_SORT);
reset_files();
add_file(LF_MEDICI);
if (sort == 1)
{
codfr = _msk->get_long(F_CODFR);
codto = _msk->get_long(F_CODTO);
select_cursor(_cur1);
TLocalisamfile& fl = current_cursor()->file(LF_MEDICI);
TRectype da(fl.curr());
TRectype a(fl.curr());
da.zero();
a.zero();
da.put(MED_CODMED, codfr);
a.put(MED_CODMED, codto);
current_cursor()->setregion(da, a);
}
else
if (sort == 2)
{
cogfr = _msk->get(F_COGFR);
cogto = _msk->get(F_COGTO);
select_cursor(_cur2);
TLocalisamfile& fl = current_cursor()->file(LF_MEDICI);
TRectype da(fl.curr());
TRectype a(fl.curr());
da.zero();
a.zero();
da.put(MED_COGNOME, cogfr);
a.put (MED_COGNOME, cogto);
current_cursor()->setregion(da, a);
}
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TMedprint_application::crea_intestazione()
{
reset_header();
if (_tipo_stampa == elenco)
{
TString sep(132);
TString16 data_stampa;
sep.fill('-');
set_header(1, (const char *) sep);
sep = "";
sep << "Pag. @#";
sep.right_just(132);
set_header(2,(const char*) sep);
set_header(2,"@0gARCHIVIO MEDICI@104gDATA");
data_stampa = _data_stampa.string();
set_header(2,"@109g%10s", (const char*) data_stampa);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
set_header(5,"@0gCodice@7gCognome e nome@48gIndirizzo@74gLocalità/Comune@100gTel. amb.@116gTel. abi.");
set_header(6,"@0g------@7g----------------------------------------@48g-------------------------");
set_header(6,"@74g-------------------------@100g---------------@116g---------------");
}
}
bool TMedprint_application::user_create()
{
_rel = new TRelation(LF_MEDICI);
_rel->add(LF_COMUNI, "COM==COM");
_rel->add("LCP", "CODTAB==LOCALITA");
_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome
_msk = new TMask("at6100a");
_form_eti = new TMed_form("AT_ETMED");
return TRUE;
}
bool TMedprint_application::user_destroy()
{
delete _msk;
delete _rel;
delete _form_eti;
return TRUE;
}
int at6100(int argc, char* argv[])
{
TMedprint_application a;
a.run(argc, argv, "Stampa Medici");
return 0;
}

10
at/at6100a.h Executable file
View File

@ -0,0 +1,10 @@
// stampa anagrafica medici
// definizione campi per maschera di selezione
#define F_SORT 101 // ordinamento: cod. o cognome/nome
#define F_CODFR 102 // da codice
#define F_CODTO 103 // a codice
#define F_COGFR 104 // da cognome
#define F_COGTO 105 // a cognome
#define F_ELENCO 106 // elenco
#define F_ETICHETTE 107 // etichette

94
at/at6100a.uml Executable file
View File

@ -0,0 +1,94 @@
#include "at6100a.h"
#include <lffiles.h>
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 70 17
RADIOBUTTON F_SORT 25
BEGIN
PROMPT 3 1 "Ordinamento"
HELP "Selezionare il tipo di ordinamento per la stampa"
ITEM "1|per Codice"
MESSAGE DISABLE,5@|ENABLE,4@|RESET,5@
ITEM "2|per Cognome e nome"
MESSAGE DISABLE,4@|ENABLE,5@|RESET,4@
END
GROUPBOX DLG_NULL 65 4
BEGIN
PROMPT 3 5 "Selezione "
END
NUMBER F_CODFR 6
BEGIN
PROMPT 4 6 "da Codice "
USE LF_MEDICI KEY 1
INPUT CODMED F_CODFR
DISPLAY "Codice" CODMED
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
OUTPUT F_CODFR CODMED
FLAGS "R"
HELP "Codice medico da cui iniziare la stampa: vuoto = inizio"
GROUP 1 4
END
NUMBER F_CODTO 6
BEGIN
PROMPT 4 7 " a Codice "
COPY USE F_CODFR
INPUT CODMED F_CODTO
COPY DISPLAY F_CODFR
OUTPUT F_CODTO CODMED
FLAGS "R"
HELP "Codice medico finale per la stampa: vuoto = fine archivio"
GROUP 1 4
END
STRING F_COGFR 25
BEGIN
PROMPT 27 6 "da Cognome "
USE LF_MEDICI KEY 2
INPUT COGNOME F_COGFR
DISPLAY "Cognome@25" COGNOME
DISPLAY "Nome@25" NOME
DISPLAY "Codice" CODMED
OUTPUT F_COGFR COGNOME
HELP "Cognome da cui iniziare stampa: vuoto = inizio archivio"
GROUP 1 5
END
STRING F_COGTO 25
BEGIN
PROMPT 27 7 " a Cognome "
COPY USE F_COGFR
INPUT COGNOME F_COGTO
COPY DISPLAY F_COGFR
OUTPUT F_COGTO COGNOME
HELP "Cognome finale per la stampa: vuoto = fine archivio"
GROUP 1 5
END
GROUPBOX DLG_NULL 50 4
BEGIN
PROMPT 3 11 "Stampa"
END
BUTTON F_ELENCO 9 2
BEGIN
PROMPT 4 12 "Elenco"
MESSAGE EXIT,F_ELENCO
END
BUTTON F_ETICHETTE 9 2
BEGIN
PROMPT 16 12 "Etichette"
MESSAGE EXIT,F_ETICHETTE
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT 32 12 ""
END
ENDPAGE
ENDMASK

234
at/at6200.cpp Executable file
View File

@ -0,0 +1,234 @@
#include <form.h>
#include <mask.h>
#include <printapp.h>
#include <lffiles.h>
#include "lf.h"
#include "sezioni.h"
#include <comuni.h>
#include "at6.h"
#include "at6200a.h"
enum ts { undefined = 0, elenco = 1, etichette = 2 };
// definizione form per etichette
class TSez_form : public TForm
{
public:
virtual TCursor* cursor() const;
virtual TRelation* relation() const;
TPrint_section& get_body() { return section('B'); } ;
TSez_form(): TForm() {};
TSez_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "")
: TForm(form,code,editlevel,desc) {};
virtual ~TSez_form() {};
};
class TSezprint_application : public TPrintapp
{
TRelation* _rel;
TMask* _msk;
TSez_form* _form_eti;
int _cur1, _cur2;
TParagraph_string _dencom, _indirizzo;
TDate _data_stampa;
ts _tipo_stampa;
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();
TSezprint_application() : _data_stampa(TODAY), _indirizzo("", 22), _dencom("", 25) {}
};
HIDDEN inline TSezprint_application& app() { return (TSezprint_application&) main_app(); }
TCursor* TSez_form::cursor() const { return app().current_cursor(); }
TRelation* TSez_form::relation() const { return cursor()->relation(); }
void TSezprint_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);
}
break;
case elenco:
{
set_row(1,"@0g@S", FLD(LF_SEZIONI,SEZ_CODSEZ));
set_row(1,"@2g@S", FLD(LF_SEZIONI,SEZ_CODSOT));
set_row(1,"@5g@S", FLD(LF_SEZIONI,SEZ_DENSEZ));
set_row(1,"@31g@S", FLD(LF_SEZIONI,SEZ_DENSOT));
set_row(1,"@57g#a",&_indirizzo);
set_row(1,"@80g#a",&_dencom);
set_row(1,"@101g@S",FLD(LF_SEZIONI,SEZ_TELEFONO));
set_row(1,"@117g@S",FLD(LF_SEZIONI,SEZ_FAX));
}
break;
}
}
bool TSezprint_application::preprocess_page(int file, int counter)
{
if (_tipo_stampa == elenco)
{
TString256 localita = "";
localita << current_cursor()->curr("LCP").get("S0");
if (localita.not_empty() && localita.ok())
localita << " - ";
localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM);
_dencom = localita;
_indirizzo = current_cursor()->curr(LF_SEZIONI).get(SEZ_INDIRIZZO);
}
return TRUE;
}
bool TSezprint_application::set_print(int)
{
_tipo_stampa = undefined;
KEY tasto;
tasto = _msk->run();
switch (tasto)
{
case F_ELENCO:
_tipo_stampa = elenco;
break;
case F_ETICHETTE:
_tipo_stampa = etichette;
break;
}
if (_tipo_stampa != undefined)
{
TString16 codfr, codto;
TString80 denfr, dento;
const int sort = _msk->get_int(F_SORT);
reset_files();
add_file(LF_SEZIONI);
if (sort == 1)
{
codfr = _msk->get(F_CODFR);
codto = _msk->get(F_CODTO);
select_cursor(_cur1);
TLocalisamfile& fl = current_cursor()->file(LF_SEZIONI);
TRectype da(fl.curr());
TRectype a(fl.curr());
da.zero();
a.zero();
da.put(SEZ_CODSEZ, codfr);
a.put(SEZ_CODSEZ, codto);
current_cursor()->setregion(da, a);
}
else
if (sort == 2)
{
denfr = _msk->get(F_DENFR);
dento = _msk->get(F_DENTO);
select_cursor(_cur2);
TLocalisamfile& fl = current_cursor()->file(LF_SEZIONI);
TRectype da(fl.curr());
TRectype a(fl.curr());
da.zero();
a.zero();
da.put(SEZ_DENSEZ, denfr);
a.put (SEZ_DENSEZ, dento);
current_cursor()->setregion(da, a);
}
reset_print();
crea_intestazione();
return TRUE;
}
else
return FALSE;
}
void TSezprint_application::crea_intestazione()
{
reset_header();
if (_tipo_stampa == elenco)
{
TString sep(132);
TString16 data_stampa;
sep.fill('-');
set_header(1, (const char *) sep);
sep = "";
sep << "Pag. @#";
sep.right_just(132);
set_header(2,(const char*) sep);
set_header(2,"@0gTABELLA SEZIONI/SOTTOGRUPPI@104gDATA");
data_stampa = _data_stampa.string();
set_header(2,"@109g%10s", (const char*) data_stampa);
sep = "";
sep.fill('-');
set_header(3, (const char *) sep);
set_header(5,"@0gCod.@5gDenominazione sezione@31gDenominazione sottogruppo@57gIndirizzo@80gComune@101gTelefono@117gFax");
set_header(6,"@0g----@5g-------------------------@31g-------------------------");
set_header(6,"@57g-----------------------@80g--------------------@101g---------------@117g---------------");
}
}
bool TSezprint_application::user_create()
{
_rel = new TRelation(LF_SEZIONI);
_rel->add(LF_COMUNI, "COM==COM");
_rel->add("LCP", "CODTAB==LOCALITA");
_cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice
_cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per denominazione
_msk = new TMask("at6200a");
_form_eti = new TSez_form("AT_ETSEZ");
return TRUE;
}
bool TSezprint_application::user_destroy()
{
delete _msk;
delete _rel;
delete _form_eti;
return TRUE;
}
int at6200(int argc, char* argv[])
{
TSezprint_application a;
a.run(argc, argv, "Stampa Sezioni");
return 0;
}

10
at/at6200a.h Executable file
View File

@ -0,0 +1,10 @@
// stampa anagrafica sezioni/sottogruppi
// definizione campi per maschera di selezione
#define F_SORT 101 // ordinamento: cod. o denominazione
#define F_CODFR 102 // da codice
#define F_CODTO 103 // a codice
#define F_DENFR 104 // da sezione
#define F_DENTO 105 // a sezione
#define F_ELENCO 106 // elenco
#define F_ETICHETTE 107 // etichette

94
at/at6200a.uml Executable file
View File

@ -0,0 +1,94 @@
#include "at6200a.h"
#include <lffiles.h>
#include "lf.h"
PAGE "Definizione Stampe" -1 -1 70 17
RADIOBUTTON F_SORT 25
BEGIN
PROMPT 3 1 "Ordinamento"
HELP "Selezionare il tipo di ordinamento per la stampa"
ITEM "1|per Codice"
MESSAGE DISABLE,5@|ENABLE,4@|RESET,5@
ITEM "2|per Sezione"
MESSAGE DISABLE,4@|ENABLE,5@|RESET,4@
END
GROUPBOX DLG_NULL 65 4
BEGIN
PROMPT 3 5 "Selezione "
END
STRING F_CODFR 6
BEGIN
PROMPT 4 6 "da Codice "
USE LF_SEZIONI KEY 1
INPUT CODSEZ F_CODFR
DISPLAY "Codice" CODSEZ
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
OUTPUT F_CODFR CODSEZ
FLAGS "R"
HELP "Codice sezione da cui iniziare la stampa: vuoto = inizio"
GROUP 1 4
END
STRING F_CODTO 6
BEGIN
PROMPT 4 7 " a Codice "
COPY USE F_CODFR
INPUT CODSEZ F_CODTO
COPY DISPLAY F_CODFR
OUTPUT F_CODTO CODSEZ
FLAGS "R"
HELP "Codice sezione finale per la stampa: vuoto = fine archivio"
GROUP 1 4
END
STRING F_DENFR 25
BEGIN
PROMPT 27 6 "da Sezione "
USE LF_SEZIONI KEY 2
INPUT DENSEZ F_DENFR
DISPLAY "Sezione@25" DENSEZ
DISPLAY "Sottogruppo@25" DENSOT
DISPLAY "Codice" CODSEZ
OUTPUT F_DENFR DENSEZ
HELP "Sezione da cui iniziare stampa: vuoto = inizio archivio"
GROUP 1 5
END
STRING F_DENTO 25
BEGIN
PROMPT 27 7 " a Sezione "
COPY USE F_DENFR
INPUT DENSEZ F_DENTO
COPY DISPLAY F_DENFR
OUTPUT F_DENTO DENSEZ
HELP "Sezione finale per la stampa: vuoto = fine archivio"
GROUP 1 5
END
GROUPBOX DLG_NULL 50 4
BEGIN
PROMPT 3 11 "Stampa"
END
BUTTON F_ELENCO 9 2
BEGIN
PROMPT 4 12 "Elenco"
MESSAGE EXIT,F_ELENCO
END
BUTTON F_ETICHETTE 9 2
BEGIN
PROMPT 16 12 "Etichette"
MESSAGE EXIT,F_ETICHETTE
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT 32 12 ""
END
ENDPAGE
ENDMASK

View File

@ -1,6 +1,6 @@
USE 90 USE 90
JOIN 13 INTO COM==COM JOIN 13 INTO COM==DOM_CODCOM
JOIN LCP ALIAS 100 INTO CODTAB==LOCALITA JOIN LCP ALIAS 100 INTO CODTAB==DOM_CODLOC
END END
DESCRIPTION DESCRIPTION
@ -48,7 +48,7 @@ STRINGA 4 33 2
BEGIN BEGIN
KEY "Indirizzo" KEY "Indirizzo"
PROMPT 1 3 "" PROMPT 1 3 ""
FIELD 90->INDIRIZZO FIELD 90->DOM_INDIR
END END
STRINGA 5 4 STRINGA 5 4
@ -56,7 +56,7 @@ BEGIN
KEY "Codice localita'" KEY "Codice localita'"
PROMPT 0 0 "" PROMPT 0 0 ""
FLAG "H" FLAG "H"
FIELD 90->LOCALITA FIELD 90->DOM_CODLOC
MESSAGE ENABLE,1@|DISABLE,2@ MESSAGE ENABLE,1@|DISABLE,2@
MESSAGE EMPTY ENABLE,2@|DISABLE,1@ MESSAGE EMPTY ENABLE,2@|DISABLE,1@
END END
@ -84,6 +84,7 @@ BEGIN
KEY "CAP" KEY "CAP"
PROMPT 1 5 "" PROMPT 1 5 ""
FIELD 13->CAPCOM FIELD 13->CAPCOM
FLAG "D"
GROUP 2 GROUP 2
END END
@ -93,7 +94,7 @@ BEGIN
PROMPT 0 0 "" PROMPT 0 0 ""
FIELD 13->DENCOM FIELD 13->DENCOM
GROUP 2 GROUP 2
FLAG "H" FLAG "HD"
MESSAGE RESET,11|COPY,11 MESSAGE RESET,11|COPY,11
END END

View File

@ -1,6 +1,6 @@
USE 90 USE 90
JOIN 13 INTO COM==COM JOIN 13 INTO COM==DOM_CODCOM
JOIN LCP ALIAS 100 INTO CODTAB==LOCALITA JOIN LCP ALIAS 100 INTO CODTAB==DOM_CODLOC
END END
DESCRIPTION DESCRIPTION
@ -48,7 +48,7 @@ STRINGA 4 33 2
BEGIN BEGIN
KEY "Indirizzo" KEY "Indirizzo"
PROMPT 1 3 "" PROMPT 1 3 ""
FIELD 90->INDIRIZZO FIELD 90->DOM_INDIR
END END
STRINGA 5 4 STRINGA 5 4
@ -56,7 +56,7 @@ BEGIN
KEY "Codice localita'" KEY "Codice localita'"
PROMPT 0 0 "" PROMPT 0 0 ""
FLAG "H" FLAG "H"
FIELD 90->LOCALITA FIELD 90->DOM_CODLOC
MESSAGE ENABLE,1@|DISABLE,2@ MESSAGE ENABLE,1@|DISABLE,2@
MESSAGE EMPTY ENABLE,2@|DISABLE,1@ MESSAGE EMPTY ENABLE,2@|DISABLE,1@
END END
@ -84,6 +84,7 @@ BEGIN
KEY "CAP" KEY "CAP"
PROMPT 1 5 "" PROMPT 1 5 ""
FIELD 13->CAPCOM FIELD 13->CAPCOM
FLAG "D"
GROUP 2 GROUP 2
END END
@ -93,7 +94,7 @@ BEGIN
PROMPT 0 0 "" PROMPT 0 0 ""
FIELD 13->DENCOM FIELD 13->DENCOM
GROUP 2 GROUP 2
FLAG "H" FLAG "HD"
MESSAGE RESET,11|COPY,11 MESSAGE RESET,11|COPY,11
END END

View File

@ -1,21 +1,27 @@
USE 90 USE 90
JOIN 13 ALIAS 300 INTO COM==COM JOIN 13 ALIAS 300 INTO COM==DOM_CODCOM
JOIN LCP ALIAS 100 INTO CODTAB==LOCALITA JOIN 13 ALIAS 200 INTO COM==RES_CODCOM
JOIN LCP ALIAS 700 INTO CODTAB==DOM_CODLOC
JOIN LCP ALIAS 100 INTO CODTAB==RES_CODLOC
JOIN 96 INTO CODSEZ==CODSEZ JOIN 96 INTO CODSEZ==CODSEZ
JOIN CTD ALIAS 200 INTO CODTAB==CATDON JOIN CTD ALIAS 800 INTO CODTAB==CATDON
JOIN CTN ALIAS 500 INTO CODTAB==CATNOND1 JOIN CTN ALIAS 500 INTO CODTAB==CATNOND1
JOIN CTN ALIAS 600 INTO CODTAB==CATNOND2 JOIN CTN ALIAS 600 INTO CODTAB==CATNOND2
JOIN TCS ALIAS 900 INTO CODTAB==STATO
JOIN 13 ALIAS 400 INTO COM==COMNASC JOIN 13 ALIAS 400 INTO COM==COMNASC
JOIN 97 INTO CODMED==CODMED
END END
DESCRIPTION DESCRIPTION
BEGIN BEGIN
90->* "Soggetti Sezioni AVIS" 90->* "Soggetti Sezioni AVIS"
13->* "COMUNI" 13->* "COMUNI"
LCP->* "Località postali" LCP->* "Localita' postali"
96->* "Sezioni AVIS" 96->* "Sezioni AVIS"
CTD->* "Categorie donatori" CTD->* "Categorie donatori"
CTN->* "Categorie non donatori" CTN->* "Categorie non donatori"
TCS->* "Tipi/Esiti controlli sanitari"
END END
GENERAL GENERAL
@ -39,222 +45,593 @@ STRINGA 2 33
BEGIN BEGIN
KEY "Cognome" KEY "Cognome"
FIELD 90->COGNOME FIELD 90->COGNOME
PROMPT 1 2 "Cognome " PROMPT 15 1 "Cognome "
END END
STRINGA 3 33 STRINGA 3 30
BEGIN BEGIN
KEY "Nome" KEY "Nome"
FIELD 90->NOME FIELD 90->NOME
PROMPT 35 2 "Nome " PROMPT 50 1 "Nome "
END END
STRINGA 4 7 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 400@->DENCOM
FLAG "H"
MESSAGE RESET,7|COPY,7
END
STRINGA 6 5
BEGIN
KEY "Provincia di nascita"
PROMPT 0 0 ""
FIELD 400@->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 BEGIN
KEY "Codice sezione" KEY "Codice sezione"
FIELD 90->CODSEZ FIELD 90->CODSEZ
PROMPT 1 4 "Sez. " PROMPT 1 4 "Sez. "
END END
STRINGA 5 25 STRINGA 11 25
BEGIN BEGIN
KEY "Denominazione sezione" KEY "Denominazione sezione"
FIELD 96->DENSEZ FIELD 96->DENSEZ
PROMPT 9 4 "" PROMPT 9 4 ""
END END
STRINGA 6 7 STRINGA 12 7
BEGIN BEGIN
KEY "Codice sottog." KEY "Codice sottog."
FIELD 90->CODSOT FIELD 90->CODSOT
PROMPT 1 5 "Sot. " PROMPT 41 4 "Sot. "
END END
STRINGA 7 25 STRINGA 13 25
BEGIN BEGIN
KEY "Denominazione sottog." KEY "Denominazione sottog."
FIELD 96->DENSOT FIELD 96->DENSOT
PROMPT 9 5 "" PROMPT 49 4 ""
END END
STRINGA 8 12 STRINGA 14 7
BEGIN BEGIN
KEY "Categoria don." KEY "Categoria don."
FIELD 90->CATDON FIELD 90->CATDON
PROMPT 35 4 "Categoria " PROMPT 1 5 "Cat. "
END END
STRINGA 9 25 STRINGA 15 25
BEGIN BEGIN
KEY "Descrizione categoria" KEY "Descrizione categoria"
FIELD 200@->S0 FIELD 800@->S0
PROMPT 48 4 "" PROMPT 9 5 ""
END END
DATA 10 10 DATA 16 21
BEGIN BEGIN
KEY "Data iscrizione" KEY "Data iscrizione"
FIELD 90->DATAISC FIELD 90->DATAISC
PROMPT 35 5 "Data iscr. " PROMPT 36 5 "Data iscr. "
END END
DATA 11 10 DATA 17 20
BEGIN BEGIN
KEY "Data dimissione" KEY "Data dimissione"
FIELD 90->DATADIM FIELD 90->DATADIM
PROMPT 56 5 "Data dim. " PROMPT 59 5 "Data dim. "
END END
STRINGA 18 16
STRINGA 13 50
BEGIN BEGIN
KEY "Comune di nascita" KEY "Tessera AVIS"
PROMPT 0 0 "" FIELD 90->TESSAVIS
FIELD 400@->DENCOM PROMPT 1 7 "Tess.AVIS "
FLAG "H"
MESSAGE RESET,15|COPY,15
END END
STRINGA 14 5 STRINGA 19 13
BEGIN BEGIN
KEY "Provincia di nascita" KEY "Codice Centro Trasfusionale"
PROMPT 0 0 "" FIELD 90->CODCT
FIELD 400@->PROVCOM PROMPT 18 7 "Cod.CT "
FLAG "H"
MESSAGE APPEND,15
END END
STRINGA 15 56 STRINGA 20 16
BEGIN BEGIN
KEY "Comune e provincia di nascita" KEY "Cartella clinica"
PROMPT 1 7 "Nato a " FIELD 90->CODCL
PROMPT 33 7 "Car.clin. "
END END
STRINGA 16 50 STRINGA 21 28
BEGIN BEGIN
KEY "Indirizzo" KEY "Documento di identita'"
FIELD 90->INDIRIZZO FIELD 90->DOCID
PROMPT 1 8 "Indirizzo " PROMPT 51 7 "Doc.id. "
MESSAGE RESET,24
END END
STRINGA 17 4 STRINGA 22 26
BEGIN BEGIN
KEY "Codice Localita" KEY "Codice fiscale"
FIELD 90->LOCALITA 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 "" PROMPT 0 0 ""
FLAG "H" FLAG "H"
MESSAGE ENABLE,1@|DISABLE,2@
MESSAGE EMPTY DISABLE,1@|ENABLE,2@
END END
STRINGA 18 5 STRINGA 26 5
BEGIN BEGIN
KEY "CAP Loc." KEY "Domicilio: CAP"
FIELD LCP->S6 FIELD 700@->S6
PROMPT 0 0 ""
GROUP 1
MESSAGE APPEND,24
END
STRINGA 19 30
BEGIN
KEY "Localita"
FIELD LCP->S0
PROMPT 0 0 ""
FLAG "H"
GROUP 1
MESSAGE APPEND,24
END
STRINGA 20 5
BEGIN
KEY "CAP Comune"
FIELD 300@->CAPCOM FIELD 300@->CAPCOM
PROMPT 0 0 "" PROMPT 0 0 ""
FLAG "H" FLAG "H"
GROUP 2 MESSAGE APPEND,30
MESSAGE APPEND,24
END
STRINGA 21 50
BEGIN
KEY "Comune"
FIELD 300@->DENCOM
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,24
END
STRINGA 22 5
BEGIN
KEY "Provincia"
FIELD 300@->PROVCOM
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,24
END
STRINGA 23 11
BEGIN
KEY "Testo fisso"
PROMPT 1 9 "Localita'"
END
STRINGA 24 65 2
BEGIN
KEY "Loc/Com/Prov"
PROMPT 11 9 ""
END
STRINGA 25 30
BEGIN
KEY "Tel. abi."
FIELD 90->TELABI
PROMPT 1 10 "Tel.abit. "
END
STRINGA 26 30
BEGIN
KEY "Tel. lav."
FIELD 90->TELLAV
PROMPT 31 10 "Tel.lavoro "
END END
STRINGA 27 30 STRINGA 27 30
BEGIN BEGIN
KEY "Tel. altro" KEY "Domicilio: localita'"
FIELD 700@->S0
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,30
END
STRINGA 28 50
BEGIN
KEY "Domicilio: comune"
FIELD 300@->DENCOM
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,30
END
STRINGA 29 5
BEGIN
KEY "Domicilio: provincia"
FIELD 300@->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 100@->S6
FIELD 200@->CAPCOM
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,38
END
STRINGA 35 30
BEGIN
KEY "Residenza: localita'"
FIELD 100@->S0
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,38
END
STRINGA 36 50
BEGIN
KEY "Residenza: comune"
FIELD 200@->DENCOM
PROMPT 0 0 ""
FLAG "H"
MESSAGE APPEND,38
END
STRINGA 37 5
BEGIN
KEY "Residenza: provincia"
FIELD 200@->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 FIELD 90->TELALT
PROMPT 61 10 "Tel.altro " PROMPT 49 15 "Tel.altro "
END END
STRINGA 31 13 STRINGA 42
BEGIN BEGIN
KEY "Categoria non don. 1" KEY "Testo"
FIELD 90->CATNOND1 PROMPT 1 16 "Escluso "
PROMPT 1 12 "Altre cat. "
END END
STRINGA 32 25 LISTA 43
BEGIN BEGIN
KEY "Descrizione cat." KEY "Esclusione"
FIELD 500@->S0 FIELD 90->ESCLUSO
PROMPT 15 12 "" ITEM " | "
ITEM "TI|T. indeterminato"
ITEM "TD|T. determinato"
PROMPT 10 16 "Escluso "
END END
STRINGA 33 2
DATA 44 18
BEGIN BEGIN
KEY "Categoria non don. 2" KEY "Data termine esclusione"
FIELD 90->CATNOND1 FIELD 90->TERMESCL
PROMPT 42 12 "" PROMPT 27 16 "Termine "
END END
STRINGA 34 25 STRINGA 45 35
BEGIN BEGIN
KEY "Descrizione cat." KEY "Motivo esclusione"
FIELD 600@->S0 FIELD 90->MOTESCL
PROMPT 45 12 "" PROMPT 46 16 "Per "
END END
STRINGA 46 26
BEGIN
KEY "Descrizione stato"
FIELD 900@->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 END
END END

342
at/atfield.cpp Executable file
View File

@ -0,0 +1,342 @@
// definizione dei record_text per trasferimento da/a file di testo
#include <config.h>
#include <fstream.h>
#include <object.h>
#include <strings.h>
// nomi delle variabili in .ini per HEADER
#define HEADER "HEADER"
#define NOMEFILE "NOMEFILE"
#define LUNGHEZZA "LUNGHEZZA"
#define RECORDSEP "RECORDSEP"
#define FIELDSEP "FIELDSEP"
class TFile_text;
class TRecord_text : public TToken_string
{
// lunghezza del record (se a lunghezza fissa)
int _length;
// separatore di record (se necessario)
TString16 _recordsep;
// il separatore di campi esiste già (_separator)
public:
// restituisce la lunghezza del record
int length() { return _length; }
// restituisce il separatore di record (se esiste)
const char* recordsep() { return _recordsep; }
// ritorna il campo alla posizione <pos>
// aggiungere la possibilità di estrarlo <da> <a>
const char* get(int pos) const;
// ritorna il campo che va dal carattere <da> al carattere <a>
const char* get(int da, int a) const;
// scrive il campo <c> nel record alla posizione <pos>
void put(const char* c, int pos = -1);
// scrive il campo <c> nel record partendo dal carattere <da> fino al carattere <a>
// se il campo <c> è più lungo viene troncato
void put(const char* c, int da, int a);
// costruttore
TRecord_text(const char* recordsep = "\n", char fieldsep = '|')
: _length(-1), _recordsep(recordsep)
{
TToken_string::TToken_string("",fieldsep);
}
// costruttore
TRecord_text(int length, const char* recordsep = "\n")
: _length(length)
{
TToken_string::TToken_string(length);
spaces();
}
// distruttore
~TRecord_text() {};
};
const char* TRecord_text::get(int pos) const
{
return ((TToken_string*)this)->get(pos);
}
const char* TRecord_text::get(int da, int a) const
{
CHECK(_length > 0, "Get non consentita su record non a lunghezza fissa");
return sub(da, a);
}
void TRecord_text::put(const char* c, int pos)
{
add(c, pos);
}
void TRecord_text::put(const char* c, int da, int a)
{
CHECK(_length > 0, "Put non consentita su record non a lunghezza fissa");
TString s = c;
int len = da-a+1;
if ( s.len() > len) s = s.cut(len);
// sistemare se è più corta (la fill non va bene)
TToken_string::overwrite(s, da);
}
// definizione dei field_text per trasferimento da/a file di testo
class TField_text : public TObject
{
// nome del campo
TString16 _name;
// posizione assoluta nel record (se con separatore)
int _pos;
// posizione iniziale nel record (se a lunghezza fissa)
int _from;
// posizione finale /se a lunghezza fissa)
int _to;
protected:
public:
// costruttore
TField_text() : _name(0), _pos(-1), _from(-1), _to(-1) {}
// costruttore
TField_text(const char* name, int pos = -1, int from = -1, int to = -1)
: _name(name), _pos(pos), _from(from), _to(to) {}
// ritorna il nome del campo
const char* name() const { return _name; }
// setta il nome del campo
void set_name(const char* name) { _name = name; }
// ritorna la posizione iniziale del campo
int from() const { return _from; }
// setta la posizione iniziale del campo
void set_from(int from) { _from = from; }
// ritorna la posizione finale del campo
int to() const { return _to; }
// setta la posizione finale del campo
void set_to(int to) { _to = to; }
// ritorna la posizione del campo
int pos() const { return _pos; }
// setta la posizione del campo
void set_pos(int pos) { _pos = pos; }
// cerca nel record il campo e ne ritorna il contenuto
const char* read(const TRecord_text& rec) const;
// cerca nel record il campo e vi scrive <val>
void write(const char* val, TRecord_text& rec);
virtual ~TField_text() {};
};
const char* TField_text::read(const TRecord_text& rec) const
{
int pos = TField_text::pos();
if (pos = -1)
{
int from = TField_text::from();
int to = TField_text::to();
if (from != -1 && to != -1)
return rec.get(from, to);
else
return "";
}
else
return rec.get(pos);
}
void TField_text::write(const char* val, TRecord_text& rec)
{
int pos = TField_text::pos();
if (pos != -1)
{
int from = TField_text::from();
int to = TField_text::to();
if (from != -1 && to != -1)
rec.put(val, from, to);
}
else
rec.put(val, pos);
}
// definizione dei file_text per trasferimento da/a file di testo
class TFile_text: public fstream
{
TFilename _name;
TRecord_text _current;
TString _buffer;
TArray _arr_exprs;
TArray _arr_fields;
public:
// apre il file, se create = TRUE e il file non esiste lo crea
int open(TFilename name, bool create = FALSE);
// chiude il file
int close();
// crea il file
int create(TFilename name) { return open(name, TRUE); };
// cancella il file
int remove();
// ritorna il record corrente
TRecord_text& curr() { return _current; }
// setta _current a rec
void set_curr(TRecord_text& rec);
// restituisce il nome del file
const char* name() { return _name; }
// setta il nome del file
void set_name(TFilename name) { _name = name;}
// si posiziona sul primo record del file
int first();
// si posiziona sul prossimo record del file
int next();
// aggiunge il record rec in fondo
int write(TRecord_text& rec);
// aggiunge il record corrente in fondo
int write();
// costruttore
TFile_text(const char* file_name, const char* config_name)
: _name(file_name), _buffer(1024*16)
{
setbuf((char*)(const char*)_buffer, _buffer.size());
TConfig config(config_name);
const TString_array fields;
const char* recordsep = config.get(RECORDSEP,HEADER);
const char* fieldsep = config.get(FIELDSEP,HEADER);
int lunghezza = config.get_int(LUNGHEZZA,HEADER);
if (lunghezza = 0)
_current(recordsep, fieldsep);
else
_current(lunghezza,recordsep);
const int i = config.list_paragraphs(fields);
//int posheader = fields.find(HEADER);
fields.remove(fields.find(HEADER),TRUE);
//for ( int k = 0; k < fields.items(); k++ )
};
// distruttore
~TFile_text()
{
};
};
void TFile_text::set_curr(TRecord_text& rec)
{
//CHECK(rec,"NULL record");
_current = rec;
}
int TFile_text::write(TRecord_text& rec)
{
//CHECK(rec = NULL, "NULL record");
const char* record = (char*)&rec;
if (rec.length() > 0)
fstream::write(record, rec.length());
else
fstream::write(record, rec.len());
const TString16 separator = rec.recordsep();
if ( separator.ok())
{
int lensep = separator.len();
fstream::write(separator, lensep);
}
return 0;
}
int TFile_text::write()
{
//CHECK(_current, "NULL current record");
const char* record = (char*)(&_current);
if (_current.length() > 0)
fstream::write(record, _current.length());
else
fstream::write(record, _current.len());
const TString16 separator = _current.recordsep();
if ( separator.ok())
{
int lensep = separator.len();
fstream::write(separator, lensep);
}
return 0;
}
int TFile_text::open(TFilename name, bool create)
{
set_name(name);
if (create)
open(name,ios::app|ios::binary|ios::out);
else
open(name,ios::app|ios::binary|ios::in|ios::nocreate);
if (bad())
fatal_box("Impossibile aprire %s",name);
return 0;
}
int TFile_text::next()
{
//CHECK(_current, "NULL current record");
if (_current.length() > 0)
fstream::read((char*)(&_current), _current.length());
else
{
TString16 separator = curr().recordsep();
if (separator.ok())
{
TString record;
int countsep = 0;
do
{
char c = get();
record << c;
if (c = separator[countsep])
countsep++;
else
countsep = 0;
} while (countsep < separator.len() && good() && !eof());
if (countsep = separator.len())
record.cut(record.len()-separator.len());
(TToken_string&)_current = record;
}
}
return 0;
}
int TFile_text::close()
{
_name = "";
_current = NULL;
_buffer = "";
fstream::close();
return 0;
}

9
at/atlib.h Executable file
View File

@ -0,0 +1,9 @@
#define IDON_SI "SI"
#define IDON_AF "AF"
bool is_idon_one(TString16 idon, const char* tipo);
bool is_idon(TString16 id1, TString16 id2, TString16 id3, TString16 id4, const char* tipo);
bool is_donaz(TString16 don, const char* tipo);
char modstato_tcs(TString16 tipo);
void con_reord(TRectype& soggetto, TRecord_array* controlli);
void don_datepross(TRectype& soggetto);

View File

@ -1,7 +1,11 @@
#define XIDON_SI "SI" #include <recarray.h>
#define XIDON_AF "AF" #include <tabutil.h>
#include "atlib.h"
bool xis_idon_one(TString idon, const char* tipo) #include "soggetti.h"
#include "contsan.h"
bool is_idon_one(TString16 idon, const char* tipo)
// verifica che l'idoneità "idon" sia del tipo "tipo" // verifica che l'idoneità "idon" sia del tipo "tipo"
// esempio: se passo PL, AF restituisce TRUE // esempio: se passo PL, AF restituisce TRUE
{ {
@ -18,13 +22,13 @@ bool xis_idon_one(TString idon, const char* tipo)
return is_idon; return is_idon;
} }
bool xis_idon(TString id1, TString id2, TString id3, TString id4, const char* tipo) bool is_idon(TString16 id1, TString16 id2, TString16 id3, TString16 id4, const char* tipo)
//verifica che almeno una delle "id" sia del tipo "tipo" //verifica che almeno una delle "id" sia del tipo "tipo"
{ {
return (xis_idon_one(id1,tipo) || xis_idon_one(id2,tipo) || xis_idon_one(id3,tipo) || xis_idon_one(id4,tipo)); return (is_idon_one(id1,tipo) || is_idon_one(id2,tipo) || is_idon_one(id3,tipo) || is_idon_one(id4,tipo));
} }
bool xis_donaz(TString don, const char* tipo) bool is_donaz(TString16 don, const char* tipo)
// verifica che il tipo di donazione "don" sia del tipo "tipo" // verifica che il tipo di donazione "don" sia del tipo "tipo"
{ {
bool is_don = FALSE; bool is_don = FALSE;
@ -40,8 +44,9 @@ bool xis_donaz(TString don, const char* tipo)
return is_don; return is_don;
} }
char xmodstato_tcs(TString tipo) char modstato_tcs(TString16 tipo)
//verifica se il controllo sanitario "tipo" è un controllo che modifica lo stato del soggetto // verifica se il controllo sanitario "tipo" e' un controllo che modifica
// lo stato del soggetto
{ {
char modstato = ' '; char modstato = ' ';
TTable tcs("TCS"); TTable tcs("TCS");
@ -51,3 +56,158 @@ char xmodstato_tcs(TString tipo)
return modstato; return modstato;
} }
void con_reord(TRectype& soggetto, TRecord_array* controlli)
{
TDate data;
TString16 tipo;
char modstato = ' ';
int r_ultid = -1; // riga ultima idoneità
int r_ultstato = -1; // riga ultimo stato valido
char penultstato = ' '; // penultimo stato valido
char ultstato = ' '; // ultimo stato valido
TDate dataultstato(NULLDATE); // data ultimo stato valido
for (int r=controlli->rows(); r>=1; r--)
{
const TRectype& row = controlli->row(r);
tipo = row.get(CON_TIPOCON);
modstato = modstato_tcs(tipo);
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 = ' ';
TString16 id3 = ' ';
TString16 id4 = ' ';
int intsi = 0;
int intaf = 0;
tipo = ' ';
data = TDate(NULLDATE);
if (r_ultid != -1)
{
const TRectype& row = controlli->row(r_ultid);
data = TDate(row.get(CON_DATACON));
tipo = row.get(CON_TIPOCON);
id1 = row.get(CON_IDON1);
id2 = row.get(CON_IDON2);
id3 = row.get(CON_IDON3);
id4 = row.get(CON_IDON4);
intsi = row.get_int(CON_INTSI);
intaf = row.get_int(CON_INTAF);
}
soggetto.put(SOG_DATAULTID,data);
soggetto.put(SOG_TIPOULTID,tipo);
soggetto.put(SOG_IDON1,id1);
soggetto.put(SOG_IDON2,id2);
soggetto.put(SOG_IDON3,id3);
soggetto.put(SOG_IDON4,id4);
soggetto.put(SOG_INTSI,intsi);
soggetto.put(SOG_INTAF,intaf);
tipo = ' ';
if (r_ultstato != -1)
{
const TRectype& row = controlli->row(r_ultstato);
dataultstato = TDate(row.get(CON_DATACON));
tipo = row.get(CON_TIPOCON);
ultstato = modstato_tcs(tipo);
}
soggetto.put(SOG_STATO,tipo);
soggetto.put(SOG_DATASTATO,dataultstato);
don_datepross(soggetto);
if ((penultstato == 'S') && ((ultstato == 'I') || (ultstato == 'F')))
{
data = soggetto.get_date(SOG_DATAPROSSI);
if (data < dataultstato) soggetto.put(SOG_DATAPROSSI,dataultstato);
data = soggetto.get_date(SOG_DATAPROSAF);
if (data < dataultstato) soggetto.put(SOG_DATAPROSAF,dataultstato);
}
}
void don_datepross(TRectype& soggetto)
// calcola le date di prossima donazione in base a: donazioni, stato attuale, idoneità
{
char modstato = ' ';
const TString16 stato = soggetto.get(SOG_STATO); // stato attuale
const TString16 id1 = soggetto.get(SOG_IDON1); // idon. 1
const TString16 id2 = soggetto.get(SOG_IDON2); // idon. 2
const TString16 id3 = soggetto.get(SOG_IDON3); // idon. 3
const TString16 id4 = soggetto.get(SOG_IDON4); // idon. 4
const int intsi = soggetto.get_int(SOG_INTSI); // intervallo per SI
const int intaf = soggetto.get_int(SOG_INTAF); // intervallo per AF
const TDate dataultdon(soggetto.get_date(SOG_DATAULTDON)); // data ultima donazione
const TString16 tipoultdon(soggetto.get(SOG_TIPOULTDON)); // tipo ultima donazione
TDate datasi(NULLDATE); // data prossima si calcolata
TDate dataaf(NULLDATE); // data prossima af calcolata
TDate dataultsi(NULLDATE); // data ultima donazione si
bool id_si = FALSE; // il soggetto è idoneo per si?
bool id_af = FALSE; // il soggetto è idoneo per af?
modstato = modstato_tcs(stato);
if (modstato == 'I' || modstato == 'F') // 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
if (dataultdon.ok()) // se ha fatto almeno una donazione
{
if (is_donaz(tipoultdon,IDON_SI)) // se l'ultima donazione è una SI
{
if (id_si)
{
datasi=dataultdon;
datasi+=intsi;
}
if (id_af)
{
dataaf=dataultdon;
dataaf+=intaf;
}
}
if (is_donaz(tipoultdon,IDON_AF)) // se l'ultima donazione è una AF
{
dataultsi = soggetto.get(SOG_DATAULTSI);
if (id_si)
{
if (intaf != 0)
{
datasi=dataultdon;
datasi+=intaf;
}
else
{
datasi=dataultdon;
datasi+=intsi;
}
if (dataultsi.ok())
dataultsi+=intsi;
if (dataultsi > datasi)
datasi = dataultsi;
}
if (id_af)
{
dataaf=dataultdon;
dataaf+=intaf;
}
}
}
else
{
if (id_si)
datasi = soggetto.get_date(SOG_DATAULTID);
if (id_af)
dataaf = soggetto.get_date(SOG_DATAULTID);
}
}
soggetto.put(SOG_DATAPROSSI,datasi);
soggetto.put(SOG_DATAPROSAF,dataaf);
}

7
at/atlib1.h Executable file
View File

@ -0,0 +1,7 @@
#define IDON_SI "SI"
#define IDON_AF "AF"
bool is_idon_one(TString16 idon, const char* tipo);
bool is_idon(TString16 id1, TString16 id2, TString16 id3, TString16 id4, const char* tipo);
bool is_donaz(TString16 don, const char* tipo);
char modstato_tcs(TString16 tipo);

26
at/atnext.cpp Executable file
View File

@ -0,0 +1,26 @@
int TFile_text::next()
{
CHECK(_current, "NULL current record");
if (_current->length() > 0)
fstream::read((char*)_current, _current->length());
else
TString record = "";
bool trovato = FALSE;
while (!trovato && good() && !eof()) do
{
char readchar = get();
const char* separator = separator();
if (readchar = separator[0])
{
int actchar = 1
while (actchar < separator.len() && readchar = separator[actchar-1]) do
{
actchar++;
}
}
else
record << readchar;
}
// manca la lettura per file con separatore
return 0;
}

65
at/avis.mnu Executable file
View File

@ -0,0 +1,65 @@
0|Menu principale|20
0|Archivi|1
0|Tabelle|2
0|Operazioni periodiche|3
0|Elenchi di soggetti|4
0|Stampe per convocazioni|5
0|Stampe di controllo|6
0|Stampa tessere associative|at1 -3
0|Manutenzione|99
1|Archivi|21
1|Soggetti|at0 -0
1|Giornaliero donazioni/controlli|at0 -1
1|Giornaliero controlli|at0 -2
1|Convocazioni Bologna|at0 -3
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|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|Professioni|ba3 -0 prf
2|Tipi di donazione|ba3 -0 tdn
2|Tipi/Esiti controlli sanitari|ba3 -0 tcs
2|Stati esteri|ba3 -0 %sta
2|Comuni|ba4 -0
3|Operazioni periodiche|21
3|Chiusura|at1 -0
3|Attribuzione benemerenze|at1 -1
3|Sblocco sospesi|at1 -2
4|Elenchi di soggetti|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
5|Stampe per convocazioni|22
5|Scadenze di donazione|at4 -1
5|Urgenze|at4 -2
5|Convocazioni Parma|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
99|Manutenzione|04
99|Archivi|ba1
99|Utenti|ba1 -3
99|Attivazione|ba1 -4
99|Backup|ba2 -1

3
at/batbgaz.h Executable file
View File

@ -0,0 +1,3 @@
#define F_TABGAZ_CODTAB 100
#define F_TABGAZ_DESCR 101
#define DLG_DEL 105

40
at/batbgaz.uml Executable file
View File

@ -0,0 +1,40 @@
#include "batbgaz.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Gruppi Aziendali" -1 -1 78 7
STRING F_TABGAZ_CODTAB 4
BEGIN
PROMPT 2 1 "Codice "
FIELD CODTAB
HELP "Inserire il codice del gruppo aziendale"
USE GAZ
CHECKTYPE REQUIRED
INPUT CODTAB F_TABGAZ_CODTAB
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT F_TABGAZ_CODTAB CODTAB
OUTPUT F_TABGAZ_DESCR S0
KEY 1
FLAGS "URZ"
END
STRING F_TABGAZ_DESCR 30
BEGIN
PROMPT 2 3 "Denominazione "
FIELD S0
HELP "Inserire la denominazione del gruppo aziendale"
USE GAZ KEY 2
CHECKTYPE REQUIRED
INPUT S0 F_TABGAZ_DESCR
DISPLAY "Descrizione@30" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_TABGAZ_CODTAB
KEY 2
END
ENDPAGE
ENDMASK

View File

@ -4,13 +4,13 @@ TOOLBAR "" 0 20 0 2
#include <toolbar.h> #include <toolbar.h>
ENDPAGE ENDPAGE
PAGE "Località postali" -1 -1 78 7 PAGE "Localita' postali" -1 -1 78 7
STRING F_TABLCP_CODTAB 4 STRING F_TABLCP_CODTAB 4
BEGIN BEGIN
PROMPT 2 1 "Codice " PROMPT 2 1 "Codice "
FIELD CODTAB FIELD CODTAB
HELP "Inserire il codice della località" HELP "Inserire il codice della localita'"
USE LCP USE LCP
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
INPUT CODTAB F_TABLCP_CODTAB INPUT CODTAB F_TABLCP_CODTAB
@ -25,9 +25,9 @@ END
STRING F_TABLCP_LOCALITA 30 STRING F_TABLCP_LOCALITA 30
BEGIN BEGIN
PROMPT 2 3 "Località " PROMPT 2 3 "Localita' "
FIELD S0 FIELD S0
HELP "Inserire la denominazione della località" HELP "Inserire la denominazione della localita'"
USE LCP KEY 2 USE LCP KEY 2
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
INPUT S0 F_TABLCP_LOCALITA INPUT S0 F_TABLCP_LOCALITA

3
at/batbldl.h Executable file
View File

@ -0,0 +1,3 @@
#define F_TABLDL_CODTAB 100
#define F_TABLDL_DESCR 101
#define DLG_DEL 105

40
at/batbldl.uml Executable file
View File

@ -0,0 +1,40 @@
#include "batbldl.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Luoghi di lavoro" -1 -1 78 7
STRING F_TABLDL_CODTAB 4
BEGIN
PROMPT 2 1 "Codice "
FIELD CODTAB
HELP "Inserire il codice del luogo di lavoro"
USE LDL
CHECKTYPE REQUIRED
INPUT CODTAB F_TABLDL_CODTAB
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_TABLDL_CODTAB CODTAB
OUTPUT F_TABLDL_DESCR S0
KEY 1
FLAGS "URZ"
END
STRING F_TABLDL_DESCR 40
BEGIN
PROMPT 2 3 "Descrizione "
FIELD S0
HELP "Inserire la descrizione del luogo di lavoro"
USE LDL KEY 2
CHECKTYPE REQUIRED
INPUT S0 F_TABLDL_DESCR
DISPLAY "Descrizione@40" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_TABLDL_CODTAB
KEY 2
END
ENDPAGE
ENDMASK

3
at/batbprf.h Executable file
View File

@ -0,0 +1,3 @@
#define F_TABPRF_CODTAB 100
#define F_TABPRF_DESCR 101
#define DLG_DEL 105

40
at/batbprf.uml Executable file
View File

@ -0,0 +1,40 @@
#include "batbprf.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Professioni" -1 -1 78 7
STRING F_TABPRF_CODTAB 4
BEGIN
PROMPT 2 1 "Codice "
FIELD CODTAB
HELP "Inserire il codice della professione"
USE PRF
CHECKTYPE REQUIRED
INPUT CODTAB F_TABPRF_CODTAB
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_TABPRF_CODTAB CODTAB
OUTPUT F_TABPRF_DESCR S0
KEY 1
FLAGS "URZ"
END
STRING F_TABPRF_DESCR 40
BEGIN
PROMPT 2 3 "Descrizione "
FIELD S0
HELP "Inserire la descrizione della professione"
USE PRF KEY 2
CHECKTYPE REQUIRED
INPUT S0 F_TABPRF_DESCR
DISPLAY "Descrizione@40" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_TABPRF_CODTAB
KEY 2
END
ENDPAGE
ENDMASK

View File

@ -43,7 +43,7 @@ BEGIN
ITEM "N|Non modifica" ITEM "N|Non modifica"
MESSAGE CLEAR, F_TABTCS_STATO MESSAGE CLEAR, F_TABTCS_STATO
MESSAGE DISABLE, F_TABTCS_STATO MESSAGE DISABLE, F_TABTCS_STATO
ITEM "I|Idoneitŕ" ITEM "I|Idoneita'"
MESSAGE ENABLE, F_TABTCS_STATO MESSAGE ENABLE, F_TABTCS_STATO
ITEM "S|Sospensione" ITEM "S|Sospensione"
MESSAGE ENABLE, F_TABTCS_STATO MESSAGE ENABLE, F_TABTCS_STATO

28
at/categ.cpp Executable file
View File

@ -0,0 +1,28 @@
TMask& msk = app().app_mask();
const char* catpri = msk.get(F_CAT1);
const char* catsec = msk.get(F_CAT2);
const char* catter = msk.get(F_CAT3);
const char* catqua = msk.get(F_CAT4);
const char* catqui = msk.get(F_CAT5);
const char* catses = msk.get(F_CAT6);
TAssoc_array categorie;
//if (catpri.not_empty() && catpri.ok())
if (catpri!=NULL)
categorie.add(catpri);
//if (catsec.not_empty() && catsec.ok())
if (catsec!=NULL)
categorie.add(catsec);
//if (catter.not_empty() && catter.ok())
if (catter!=NULL)
categorie.add(catter);
//if (catqua.not_empty() && catqua.ok())
if (catqua!=NULL)
categorie.add(catqua);
//if (catqui.not_empty() && catqui.ok())
if (catqui!=NULL)
categorie.add(catqui);
//if (catses.not_empty() && catses.ok())
if (catses!=NULL)
categorie.add(catses);

View File

@ -3,7 +3,7 @@
ITEM " |" ITEM " |"
ITEM "01|Occupato" ITEM "01|Occupato"
ITEM "02|Disoccupato" ITEM "02|Disoccupato"
ITEM "03|In cerca di 1° occ." ITEM "03|In cerca di 1^ occ."
ITEM "04|Pensionato" ITEM "04|Pensionato"
ITEM "05|Casalinga" ITEM "05|Casalinga"
ITEM "06|Studente" ITEM "06|Studente"

9
at/convoc.h Executable file
View File

@ -0,0 +1,9 @@
// definizione campi dell'archivio CONVOC
#define COV_NUMERO "NUMERO"
#define COV_DATA "DATA"
#define COV_PUNTO "PUNTO"
#define COV_TIPO "TIPO"
#define COV_CODSEZ "CODSEZ"
#define COV_CODSOT "CODSOT"
#define COV_NOTE "NOTE"

3
at/f115.dir Executable file
View File

@ -0,0 +1,3 @@
115
0
$convoc|0|0|124|17|Convocazioni AVIS|||

12
at/f115.trr Executable file
View File

@ -0,0 +1,12 @@
115
7
NUMERO|3|5|0|Numero convocazione
DATA|5|8|0|Data convocazione
PUNTO|1|4|0|Punto di raccolta
TIPO|1|2|0|Tipo donazione
CODSEZ|1|2|0|Codice sezione convocata
CODSOT|1|2|0|Codice sottogruppo convocato
NOTE|1|100|0|Note alla convocazione
2
NUMERO|
DATA+PUNTO+TIPO+CODSEZ+CODSOT|

3
at/f116.dir Executable file
View File

@ -0,0 +1,3 @@
116
0
$rconvoc|0|0|17|17|Righe convocazioni AVIS|||

9
at/f116.trr Executable file
View File

@ -0,0 +1,9 @@
116
4
NUMERO|3|5|0|Numero convocazione
PROGCONV|2|4|0|Progressivo convocato
CODICE|3|6|0|Codice soggetto convocato
STAMPATO|8|1|0|Convocazione stampata (cartolina o etichetta)
2
NUMERO+PROGCONV|
CODICE+NUMERO|

3
at/f90.dir Executable file
View File

@ -0,0 +1,3 @@
90
0
$soggetti|0|0|526|17|Soggetti AVIS|||

83
at/f90.trr Executable file
View File

@ -0,0 +1,83 @@
90
75
CODSEZ|1|2|0|Codice sezione di appartenenza
CODSOT|1|2|0|Codice sottogruppo di appartenenza
CODICE|3|6|0|Codice
COGNOME|1|25|0|Cognome
NOME|1|25|0|Nome
DATANASC|5|8|0|Data di nascita
COMNASC|1|4|0|Codice comune o stato estero di nascita
SESSO|1|1|0|Sesso
CATDON|1|2|0|Categoria donatori
DATAISC|5|8|0|Data iscrizione
DATADIM|5|8|0|Data dimissione
CATNOND1|1|2|0|Categoria non donatori 1
CATNOND2|1|2|0|Categoria non donatori 2
TESSAVIS|1|6|0|Tessera AVIS
TESSSSN|1|16|0|Tessera SSN
CODCT|1|6|0|Codice centro trasfusionale
CODCL|1|6|0|Codice cartella clinica
DOCID|1|20|0|Documento di identità
CF|1|16|0|Codice fiscale
DOM_INDIR|1|30|0|Domicilio - indirizzo
DOM_CODCOM|1|4|0|Domicilio - codice comune
DOM_CODLOC|1|4|0|Domicilio - codice localita' postale
DOM_STRADA|1|5|0|Domicilio - codice stradario
DOM_DISTRI|1|4|0|Domicilio - codice distribuzione
RES_INDIR|1|30|0|Residenza - indirizzo
RES_CODCOM|1|4|0|Residenza - codice comune
RES_CODLOC|1|4|0|Residenza - codice localita' postale
TELABI|1|14|0|Telefono abitazione
TELLAV|1|14|0|Telefono lavoro
TELALT|1|14|0|Telefono altro
TITINDIR|1|10|0|Titolo in indirizzo
ESCLUSO|1|2|0|Esclusione non sanitaria
TERMESCL|5|8|0|Data termine esclusione
MOTESCL|1|30|0|Motivo esclusione
STATO|1|2|0|Stato attuale
DATASTATO|5|8|0|Data in cui è stato attribuito lo stato
DATAULTID|5|8|0|Data ultima idoneità
TIPOULTID|1|2|0|Tipo ultima idoneità
IDON1|1|2|0|Idoneità 1
IDON2|1|2|0|Idoneità 2
IDON3|1|2|0|Idoneità 3
IDON4|1|2|0|Idoneità 4
INTSI|2|3|0|Intervallo sangue intero
INTAF|2|3|0|Intervallo aferesi
TOTDON|2|3|0|Totale donazioni
DATAULTDON|5|8|0|Data ultima donazione
TIPOULTDON|1|2|0|Tipo ultima donazione
DATAPROSSI|5|8|0|Data prossima SI
DATAPROSAF|5|8|0|Data prossima AF
DATAULTSI|5|8|0|Data ultima donazione SI
DATAULTAF|5|8|0|Data ultima donazione AF
TOTDONSI|2|3|0|Numero donazioni SI
TOTDONAF|2|3|0|Numero donazioni AF
GRUPPOAB0|1|3|0|Gruppo AB0
RHANTID|1|3|0|Rh/AntiD
KELL|1|3|0|Kell
FENOTIPORH|1|6|0|Fenotipo Rh
DU|1|3|0|Du
PUNTORACC|1|4|0|Punto di raccolta per convocazione
CODMED|3|6|0|Codice regionale medico di base
MODCONV|1|2|0|Modalita' di convocazione
GIOPREDON|1|7|0|Giorni preferiti per donazioni
GIOPRECON|1|7|0|Giorni preferiti per controlli
NUMCONV|2|3|0|Numero convocazioni spedite
DATACONV|5|8|0|Data ultima convocazione spedita
DATAULTAGG|5|8|0|Data ultimo aggiornamento
UTENULTAGG|1|8|0|Utente ultimo aggiornamento
CONDOCC|1|2|0|Condizione occupazionale (da cambiare)
POSPROF|1|2|0|Posizione professionale (da cambiare)
RAMOATT|1|2|0|Ramo di attività (da cambiare)
TITSTUD|1|2|0|Titolo di studio (da cambiare)
LUOGOLAV|1|4|0|Luogo di lavoro (codice)
PROFESS|1|4|0|Professione (codice)
NOTE|11|10|0|Note
T_STAMPATA|8|1|0|Tessera stampata (S/N)
5
CODICE|
UPPER(COGNOME)+UPPER(NOME)+DATANASC|X
CODSEZ+CODSOT+CODICE|X
CODSEZ+CODSOT+UPPER(COGNOME)+UPPER(NOME)+DATANASC|X
TESSAVIS|X

3
at/f91.dir Executable file
View File

@ -0,0 +1,3 @@
91
0
$storico|0|0|36|17|Storico iscrizioni e dimissioni AVIS|||

13
at/f91.trr Executable file
View File

@ -0,0 +1,13 @@
91
9
CODICE|3|6|0|Codice soggetto
PROGSTO|2|3|0|Progressivo storico
CODSEZ|1|2|0|Sezione di iscrizione
CODSOT|1|2|0|Sottogruppo di iscrizione
CATISC|1|2|0|Categoria di iscrizione
DATAISC|5|8|0|Data di iscrizione
CATDIM|1|2|0|Categoria di dimissione
DATADIM|5|8|0|Data di dimissione
MOTDIM|1|2|0|Motivo di dimissione
1
CODICE+PROGSTO|

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