diff --git a/at/acc.sql b/at/acc.sql new file mode 100755 index 000000000..d2e6c9ecb --- /dev/null +++ b/at/acc.sql @@ -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 diff --git a/at/at0.cpp b/at/at0.cpp index 55b819d62..8f14ddbe4 100755 --- a/at/at0.cpp +++ b/at/at0.cpp @@ -1,27 +1,29 @@ -#include -#include -#include - -#include "at0.h" - -#define usage "Error - usage : %s -{0|1|2}" - -int main(int argc,char** argv) - -{ - int rt = -1 ; - const int r = (argc > 1) ? atoi(&argv[1][1]) : -1; - - switch (r) - { - case 0: - rt = at0100(argc,argv) ; break; - case 1: - rt = at0200(argc,argv) ; break; - case 2: - rt = at0300(argc,argv) ; break; - default: - error_box(usage, argv[0]) ; break; - } - return rt; -} +#include +#include +#include + +#include "at0.h" + +#define usage "Error - usage : %s -{0|1|2|3}" + +int main(int argc,char** argv) + +{ + int rt = -1 ; + const int r = (argc > 1) ? atoi(&argv[1][1]) : -1; + + switch (r) + { + case 0: + rt = at0100(argc,argv) ; break; + case 1: + rt = at0200(argc,argv) ; break; + case 2: + rt = at0300(argc,argv) ; break; + case 3: + rt = at0400(argc,argv) ; break; + default: + error_box(usage, argv[0]) ; break; + } + return rt; +} diff --git a/at/at0.h b/at/at0.h index 3c0be022d..92eabd0e0 100755 --- a/at/at0.h +++ b/at/at0.h @@ -4,6 +4,7 @@ int at0100(int argc, char* argv[]); int at0200(int argc, char* argv[]); int at0300(int argc, char* argv[]); +int at0400(int argc, char* argv[]); #endif // __AT0_H diff --git a/at/at0.url b/at/at0.url index a353871d2..884bad253 100755 --- a/at/at0.url +++ b/at/at0.url @@ -1,6 +1,7 @@ #define APPNAME AVIS #define QAPPNAME "AVIS" #define LIBDIR f:\xvt.403\win_x86\ptk\lib +#define QFIRMNAME "AGA Informatica S.r.l." #include @@ -9,28 +10,22 @@ MENU TASK_MENUBAR SUBMENU MENU_FILE "~File" -/* at0 -1 inserimento donazioni */ +/* at0 -1 giornaliero donazioni/controlli */ MENUBAR MENU_BAR(1) MENU MENU_BAR(1) SUBMENU MENU_FILE "~File" -/* at0 -2 chiusura annuale */ +/* at0 -2 giornaliero controlli */ MENUBAR MENU_BAR(2) MENU MENU_BAR(2) SUBMENU MENU_FILE "~File" -/* ba1 -3 */ +/* at0 -3 gestione convocazione */ MENUBAR MENU_BAR(3) MENU MENU_BAR(3) SUBMENU MENU_FILE "~File" -/* ba1 -4 */ -MENUBAR MENU_BAR(4) - -MENU MENU_BAR(4) - SUBMENU MENU_FILE "~File" - diff --git a/at/at0100a.h b/at/at0100a.h index 7461666ab..cda6ee0e5 100755 --- a/at/at0100a.h +++ b/at/at0100a.h @@ -1,185 +1,188 @@ -// definizione campi della maschera at0100a.msk -// SOGGETTI e dati collegati - -// pagina 1 -#define F_CODICE 101 -#define F_COGNOME 102 -#define F_NOME 103 -#define F_DATANASC 104 -#define F_TESSAVIS 105 -#define F_CODSEZ 106 -#define F_DENSEZ 107 -#define F_CODSOT 108 -#define F_DENSOT 109 -#define F_CATDON 110 -#define F_DESC_CATDON 111 -#define F_DATAISC 112 -#define F_DATADIM 113 -#define F_DOM_INDIR 114 -#define F_DOM_CODCOM 115 -#define F_DOM_DENCOM 116 -#define F_DOM_CAPCOM 117 -#define F_DOM_PROVCOM 118 -#define F_DOM_CODLOC 119 -#define F_DOM_DENLOC 120 -#define F_DOM_STRADA 121 -#define F_DOM_DISTRI 122 -#define F_RES_INDIR 123 -#define F_RES_CODCOM 124 -#define F_RES_DENCOM 125 -#define F_RES_CAPCOM 126 -#define F_RES_PROVCOM 127 -#define F_RES_CODLOC 128 -#define F_RES_DENLOC 129 -#define F_COMNASC 130 -#define F_DENCOMNASC 131 -#define F_PROVCOMNASC 132 -#define F_SESSO 133 -#define F_CF 134 -#define F_DOCID 135 -#define F_TELABI 136 -#define F_TELLAV 137 -#define F_TELALT 138 - -// pagina 2 -#define F_CATNOND1 201 -#define F_DESC_CATNOND1 202 -#define F_CATNOND2 203 -#define F_DESC_CATNOND2 204 -#define F_CODCL 205 -#define F_CODCT 206 -#define F_TESSSSN 207 -#define F_TITINDIR 208 -#define F_CODMED 209 -#define F_COGNMED 210 -#define F_NOMMED 211 -#define F_GRUPPOAB0 212 -#define F_RHANTID 213 -#define F_KELL 214 -#define F_FENOTIPORH 215 -#define F_DU 216 -#define F_MODCONV 217 -#define F_PUNTORACC 218 -#define F_DESC_PUNTORACC 219 -#define F_GPD_LUN 220 -#define F_GPD_MAR 221 -#define F_GPD_MER 222 -#define F_GPD_GIO 223 -#define F_GPD_VEN 224 -#define F_GPD_SAB 225 -#define F_GPD_DOM 226 -#define F_GPC_LUN 227 -#define F_GPC_MAR 228 -#define F_GPC_MER 229 -#define F_GPC_GIO 230 -#define F_GPC_VEN 231 -#define F_GPC_SAB 232 -#define F_GPC_DOM 233 - - -// pagina 3 -#define F_STATO 301 -#define F_DESCSTATO 302 -#define F_DATASTATO 303 -#define F_IDON1 304 -#define F_DESC_ID1 305 -#define F_IDON2 306 -#define F_DESC_ID2 307 -#define F_IDON3 308 -#define F_DESC_ID3 309 -#define F_IDON4 310 -#define F_DESC_ID4 311 -#define F_DATAULTID 312 -#define F_TIPOULTID 313 -#define F_INTSI 314 -#define F_INTAF 315 -#define F_TOTDON 316 -#define F_DATAULTDON 317 -#define F_TIPOULTDON 318 -#define F_DESC_ULTDON 319 -#define F_DATAPROSSI 320 -#define F_DATAPROSAF 321 -#define F_DATAULTSI 322 -#define F_DATAULTAF 323 -#define F_TOTDONSI 324 -#define F_TOTDONAF 325 -#define F_DATACONV 326 -#define F_NUMCONV 327 - -// pagina 4 -#define F_CONDOCC 401 -#define F_POSPROF 402 -#define F_RAMOATT 403 -#define F_TITSTUD 404 -#define F_PROFESS 405 -#define F_DESC_PROFESS 406 -#define F_LUOGOLAV 407 -#define F_DESC_LUOGOLAV 408 -#define F_ESCLUSO 409 -#define F_TERMESCL 410 -#define F_MOTESCL 411 -#define F_UTENULTAGG 412 -#define F_DATAULTAGG 413 - -// pagina 5 -#define F_DONAZIONI 501 - -// pagina 6 -#define F_CONTROLLI 601 - -// pagina 7 -#define F_BENEMERENZE 701 -#define F_STORICO 702 - -// bottoni personalizzati per l'applicazione -#define DLG_GENDON 801 - -// pagina donazioni -#define F_D_DATADON 101 -#define F_D_TIPODON 102 -#define F_D_LUOGODON 103 -#define F_D_ETICHETTA 104 -#define F_D_CC 105 -#define F_D_PA 106 -#define F_D_HB 107 -#define F_D_SGPT 108 -#define F_D_PROTIDEMIA 109 -#define F_D_PRIMADON 110 -#define F_D_DESC_TIPODON 211 -#define F_D_DESC_LUOGODON 212 - -// pagina controlli sanitari -#define F_C_DATACON 101 -#define F_C_TIPOCON 102 -#define F_C_IDON1 103 -#define F_C_IDON2 104 -#define F_C_IDON3 105 -#define F_C_IDON4 106 -#define F_C_INTSI 107 -#define F_C_INTAF 108 -#define F_C_PROSSTIPO 109 -#define F_C_PROSSDATA 110 -#define F_C_DESC_TIPOCON 211 -#define F_C_DESC_IDON1 212 -#define F_C_DESC_IDON2 213 -#define F_C_DESC_IDON3 214 -#define F_C_DESC_IDON4 215 -#define F_C_DESC_PROSSTIPO 216 - -// pagina benemerenze -#define F_B_TIPOBEN 101 -#define F_B_DATABEN 102 -#define F_B_RITIRATA 103 -#define F_B_DESC_TIPOBEN 211 - -// pagina storico iscrizioni e dimissioni -#define F_S_DATAISC 101 -#define F_S_DATADIM 102 -#define F_S_CODSEZ 103 -#define F_S_CODSOT 104 -#define F_S_CATISC 105 -#define F_S_MOTDIM 106 -#define F_S_DENSEZ 211 -#define F_S_DENSOT 212 -#define F_S_DESC_CATISC 213 - +// definizione campi della maschera at0100a.msk +// SOGGETTI e dati collegati + +// pagina 1 +#define F_CODICE 101 +#define F_COGNOME 102 +#define F_NOME 103 +#define F_DATANASC 104 +#define F_TESSAVIS 105 +#define F_T_STAMPATA 106 +#define F_CODSEZ 107 +#define F_DENSEZ 108 +#define F_CODSOT 109 +#define F_DENSOT 110 +#define F_CATDON 111 +#define F_DESC_CATDON 112 +#define F_DATAISC 113 +#define F_DATADIM 114 +#define F_DOM_INDIR 115 +#define F_DOM_CODCOM 116 +#define F_DOM_DENCOM 117 +#define F_DOM_CAPCOM 118 +#define F_DOM_PROVCOM 119 +#define F_DOM_CODLOC 120 +#define F_DOM_DENLOC 121 +#define F_DOM_STRADA 122 +#define F_DOM_DISTRI 123 +#define F_RES_INDIR 124 +#define F_RES_CODCOM 125 +#define F_RES_DENCOM 126 +#define F_RES_CAPCOM 127 +#define F_RES_PROVCOM 128 +#define F_RES_CODLOC 129 +#define F_RES_DENLOC 130 +#define F_COMNASC 131 +#define F_DENCOMNASC 132 +#define F_PROVCOMNASC 133 +#define F_SESSO 134 +#define F_CF 135 +#define F_DOCID 136 +#define F_TELABI 137 +#define F_TELLAV 138 +#define F_TELALT 139 + +// pagina 2 +#define F_CATNOND1 201 +#define F_DESC_CATNOND1 202 +#define F_CATNOND2 203 +#define F_DESC_CATNOND2 204 +#define F_GRUPPOAZIE 205 +#define F_DESC_GRUPPOAZIE 206 +#define F_CODCL 207 +#define F_CODCT 208 +#define F_TESSSSN 209 +#define F_TITINDIR 210 +#define F_CODMED 211 +#define F_COGNMED 212 +#define F_NOMMED 213 +#define F_GRUPPOAB0 214 +#define F_RHANTID 215 +#define F_KELL 216 +#define F_FENOTIPORH 217 +#define F_DU 218 +#define F_MODCONV 219 +#define F_PUNTORACC 220 +#define F_DESC_PUNTORACC 221 +#define F_GPD_LUN 222 +#define F_GPD_MAR 223 +#define F_GPD_MER 224 +#define F_GPD_GIO 225 +#define F_GPD_VEN 226 +#define F_GPD_SAB 227 +#define F_GPD_DOM 228 +#define F_GPC_LUN 229 +#define F_GPC_MAR 230 +#define F_GPC_MER 231 +#define F_GPC_GIO 232 +#define F_GPC_VEN 233 +#define F_GPC_SAB 234 +#define F_GPC_DOM 235 + + +// pagina 3 +#define F_STATO 301 +#define F_DESCSTATO 302 +#define F_DATASTATO 303 +#define F_IDON1 304 +#define F_DESC_ID1 305 +#define F_IDON2 306 +#define F_DESC_ID2 307 +#define F_IDON3 308 +#define F_DESC_ID3 309 +#define F_IDON4 310 +#define F_DESC_ID4 311 +#define F_DATAULTID 312 +#define F_TIPOULTID 313 +#define F_INTSI 314 +#define F_INTAF 315 +#define F_TOTDON 316 +#define F_DATAULTDON 317 +#define F_TIPOULTDON 318 +#define F_DESC_ULTDON 319 +#define F_DATAPROSSI 320 +#define F_DATAPROSAF 321 +#define F_DATAULTSI 322 +#define F_DATAULTAF 323 +#define F_TOTDONSI 324 +#define F_TOTDONAF 325 +#define F_DATACONV 326 +#define F_NUMCONV 327 + +// pagina 4 +#define F_CONDOCC 401 +#define F_POSPROF 402 +#define F_RAMOATT 403 +#define F_TITSTUD 404 +#define F_PROFESS 405 +#define F_DESC_PROFESS 406 +#define F_LUOGOLAV 407 +#define F_DESC_LUOGOLAV 408 +#define F_ESCLUSO 409 +#define F_TERMESCL 410 +#define F_MOTESCL 411 +#define F_UTENULTAGG 412 +#define F_DATAULTAGG 413 +#define F_NOTE 414 + +// pagina 5 +#define F_DONAZIONI 501 +#define F_GENERA 502 + +// pagina 6 +#define F_CONTROLLI 601 + +// pagina 7 +#define F_BENEMERENZE 701 +#define F_FAMIGLIA 702 +#define F_STORICO 703 + +// pagina donazioni +#define F_D_DATADON 101 +#define F_D_TIPODON 102 +#define F_D_LUOGODON 103 +#define F_D_ETICHETTA 104 +#define F_D_CC 105 +#define F_D_PA 106 +#define F_D_HB 107 +#define F_D_SGPT 108 +#define F_D_PROTIDEMIA 109 +#define F_D_PRIMADON 110 +#define F_D_DESC_TIPODON 211 +#define F_D_DESC_LUOGODON 212 + +// pagina controlli sanitari +#define F_C_DATACON 101 +#define F_C_TIPOCON 102 +#define F_C_IDON1 103 +#define F_C_IDON2 104 +#define F_C_IDON3 105 +#define F_C_IDON4 106 +#define F_C_INTSI 107 +#define F_C_INTAF 108 +#define F_C_PROSSTIPO 109 +#define F_C_PROSSDATA 110 +#define F_C_DESC_TIPOCON 211 +#define F_C_DESC_IDON1 212 +#define F_C_DESC_IDON2 213 +#define F_C_DESC_IDON3 214 +#define F_C_DESC_IDON4 215 +#define F_C_DESC_PROSSTIPO 216 + +// pagina benemerenze +#define F_B_TIPOBEN 101 +#define F_B_DATABEN 102 +#define F_B_RITIRATA 103 +#define F_B_DESC_TIPOBEN 211 + +// pagina storico iscrizioni e dimissioni +#define F_S_DATAISC 101 +#define F_S_DATADIM 102 +#define F_S_CODSEZ 103 +#define F_S_CODSOT 104 +#define F_S_CATISC 105 +#define F_S_MOTDIM 106 +#define F_S_DENSEZ 211 +#define F_S_DENSOT 212 +#define F_S_DESC_CATISC 213 + diff --git a/at/at0100a.uml b/at/at0100a.uml index ba3d1373c..75e8a767f 100755 --- a/at/at0100a.uml +++ b/at/at0100a.uml @@ -1,1945 +1,2057 @@ -#include "at0100a.h" -#include "lf.h" - -TOOLBAR "" 0 20 0 2 - -#include -ENDPAGE - -PAGE "Dati 1" -1 -1 78 20 - -GROUPBOX DLG_NULL 77 5 -BEGIN - PROMPT 1 0 "" - FLAGS "R" -END - -NUMBER F_CODICE 6 -BEGIN - PROMPT 2 1 "Codice " - FIELD CODICE - FLAGS "RG" - KEY 1 - USE LF_SOGGETTI - INPUT CODICE F_CODICE - DISPLAY "Codice@6" CODICE - DISPLAY "Cognome@36" COGNOME - DISPLAY "Nome@36" NOME - DISPLAY "Nato il@10" DATANASC - DISPLAY "Sez." CODSEZ - DISPLAY "Sot." CODSOT - DISPLAY "C." CATDON - DISPLAY "Tessera" TESSAVIS - OUTPUT F_CODICE CODICE - OUTPUT F_COGNOME COGNOME - OUTPUT F_NOME NOME - OUTPUT F_DATANASC DATANASC - OUTPUT F_TESSAVIS TESSAVIS - MESSAGE COPY,1@ - CHECKTYPE REQUIRED -END - -STRING F_COGNOME 36 25 -BEGIN - PROMPT 2 2 "Cognome e nome " - FIELD COGNOME - KEY 2 - USE LF_SOGGETTI KEY 2 - INPUT COGNOME F_COGNOME - INPUT NOME F_NOME - DISPLAY "Cognome@36" COGNOME - DISPLAY "Nome@36" NOME - DISPLAY "Nato il@10" DATANASC - DISPLAY "Codice@6" CODICE - DISPLAY "Sez." CODSEZ - DISPLAY "Sot." CODSOT - DISPLAY "C." CATDON - DISPLAY "Tessera" TESSAVIS - OUTPUT F_CODICE CODICE - OUTPUT F_COGNOME COGNOME - OUTPUT F_NOME NOME - OUTPUT F_DATANASC DATANASC - OUTPUT F_TESSAVIS TESSAVIS - MESSAGE COPY,2@ - CHECKTYPE REQUIRED - HELP "Cognome del soggetto" -END - -STRING F_NOME 36 25 -BEGIN - PROMPT 46 2 "" - FIELD NOME - KEY 2 - COPY ALL F_COGNOME - MESSAGE COPY,3@ - CHECKTYPE REQUIRED - HELP "Nome del soggetto" -END - -DATE F_DATANASC -BEGIN - PROMPT 2 3 "Nato il " - FIELD DATANASC - MESSAGE COPY,4@ - CHECKTYPE REQUIRED - VALIDATE NOT_EMPTY_CHECK_FIELD - HELP "Data di nascita" -END - -STRING F_TESSAVIS 10 -BEGIN - PROMPT 48 3 "Tessera AVIS " - FIELDS TESSAVIS - FLAGS "U" - KEY 5 - USE LF_SOGGETTI KEY 5 - INPUT TESSAVIS F_TESSAVIS - DISPLAY "Codice@6" CODICE - DISPLAY "Cognome@36" COGNOME - DISPLAY "Nome@36" NOME - DISPLAY "Nato il@10" DATANASC - DISPLAY "Sez." CODSEZ - DISPLAY "Sot." CODSOT - DISPLAY "C." CATDON - DISPLAY "Tessera" TESSAVIS - OUTPUT F_CODICE CODICE - OUTPUT F_COGNOME COGNOME - OUTPUT F_NOME NOME - OUTPUT F_DATANASC DATANASC - OUTPUT F_TESSAVIS TESSAVIS - HELP "Numero tessera associativa AVIS" -END - -GROUPBOX DLG_NULL 77 4 -BEGIN - PROMPT 1 5 "Dati associativi" -END - -STRING F_CODSEZ 2 -BEGIN - PROMPT 2 6 "Sez. " - 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 NORMAL - CHECKTYPE SEARCH - HELP "Codice sezione di appartenenza" - ADD MASK at0700a -END - -STRING F_DENSEZ 24 -BEGIN - PROMPT 12 6 "" - FLAGS "U" - USE LF_SEZIONI KEY 2 - INPUT DENSEZ F_DENSEZ - DISPLAY "Sezione@25" DENSEZ - DISPLAY "Sottogruppo@25" DENSOT - DISPLAY "Cod.sez" CODSEZ - DISPLAY "Cod.sot." CODSOT - COPY OUTPUT F_CODSEZ - CHECKTYPE NORMAL - HELP "Denominazione sezione di appartenenza" - ADD MASK at0700a -END - -STRING F_CODSOT 2 -BEGIN - PROMPT 40 6 "Sot. " - FIELD CODSOT - COPY ALL F_CODSEZ - CHECKTYPE NORMAL - HELP "Codice sottogruppo di appartenenza" - ADD MASK at0700a -END - -STRING F_DENSOT 24 -BEGIN - PROMPT 50 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 di appartenenza" - ADD MASK at0700a -END - -STRING F_CATDON 2 -BEGIN - PROMPT 2 7 "Cat. " - FIELD CATDON - FLAGS "U" - USE CTD - INPUT CODTAB F_CATDON - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_CATDON CODTAB - OUTPUT F_DESC_CATDON S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Categoria di appartenenza" -END - -STRING F_DESC_CATDON 25 -BEGIN - PROMPT 12 7 "" - FLAGS "D" -END - -DATE F_DATAISC -BEGIN - PROMPT 40 7 "Isc. " - FIELD DATAISC - HELP "Data di iscrizione alla sezione/categoria" -END - -DATE F_DATADIM -BEGIN - PROMPT 61 7 "Dim. " - FIELD DATADIM - HELP "Data di dimissione dalla sezione/categoria" -END - -GROUPBOX DLG_NULL 77 11 -BEGIN - PROMPT 1 9 "Dati anagrafici" -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 10 "Domicilio: " -END - -STRING F_DOM_INDIR 30 -BEGIN - PROMPT 13 10 "Indirizzo " - FIELD DOM_INDIR -END - -STRING F_DOM_STRADA 5 -BEGIN - PROMPT 55 10 "St. " -END - -STRING F_DOM_DISTRI 4 -BEGIN - PROMPT 66 10 "Dist. " -END - -STRING F_DOM_CODCOM 4 -BEGIN - PROMPT 13 11 "Comune " - FIELD DOM_CODCOM - FLAGS "U" - USE LF_COMUNI - INPUT STATO "" - INPUT COM F_DOM_CODCOM -#include - OUTPUT F_DOM_CODCOM COM - OUTPUT F_DOM_DENCOM DENCOM - OUTPUT F_DOM_PROVCOM PROVCOM - OUTPUT F_DOM_CAPCOM CAPCOM - CHECKTYPE NORMAL - WARNING "Comune assente" - HELP "Codice comune di residenza" -END - -STRING F_DOM_DENCOM 30 -BEGIN - PROMPT 30 11 "" - USE LF_COMUNI KEY 2 - INPUT DENCOM F_DOM_DENCOM -#include - COPY OUTPUT F_DOM_CODCOM - CHECKTYPE NORMAL - HELP "Comune di residenza" -END - -STRING F_DOM_CODLOC 4 -BEGIN - PROMPT 13 12 "Localita' " - FIELD DOM_CODLOC - FLAGS "U" - USE LCP SELECT S7=#F_DOM_CODLOC - INPUT CODTAB F_DOM_CODLOC - DISPLAY "Codice" CODTAB - DISPLAY "Localita'@30" S0 - DISPLAY "CAP@5" S6 - OUTPUT F_DOM_CODLOC CODTAB - OUTPUT F_DOM_DENLOC S0 - OUTPUT F_DOM_CAPCOM S6 - OUTPUT F_DOM_CODCOM S7 - CHECKTYPE NORMAL - HELP "Codice localita' postale se diversa dal comune" -END - -STRING F_DOM_DENLOC 30 -BEGIN - PROMPT 30 12 "" - COPY USE F_DOM_CODLOC - INPUT S0 F_DOM_DENLOC - DISPLAY "Localita'@30" S0 - DISPLAY "CAP@5" S6 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_DOM_CODLOC - CHECKTYPE NORMAL - HELP "Localita' postale se diversa dal comune" -END - -STRING F_DOM_CAPCOM 5 -BEGIN - PROMPT 66 11 "CAP " - FLAGS "D" -END - -STRING F_DOM_PROVCOM 5 -BEGIN - PROMPT 66 12 "Prov." - FLAGS "D" -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 13 "Residenza: " -END - -STRING F_RES_INDIR 30 -BEGIN - PROMPT 13 13 "Indirizzo " - FIELD RES_INDIR -END - -STRING F_RES_CODCOM 4 -BEGIN - PROMPT 13 14 "Comune " - FIELD RES_CODCOM - FLAGS "U" - USE LF_COMUNI - INPUT STATO "" - INPUT COM F_RES_CODCOM -#include - OUTPUT F_RES_CODCOM COM - OUTPUT F_RES_DENCOM DENCOM - OUTPUT F_RES_PROVCOM PROVCOM - OUTPUT F_RES_CAPCOM CAPCOM - CHECKTYPE NORMAL - WARNING "Comune assente" - HELP "Codice comune di residenza" -END - -STRING F_RES_DENCOM 30 -BEGIN - PROMPT 30 14 "" - USE LF_COMUNI KEY 2 - INPUT DENCOM F_RES_DENCOM -#include - COPY OUTPUT F_RES_CODCOM - CHECKTYPE NORMAL - HELP "Comune di residenza" -END - -STRING F_RES_CODLOC 4 -BEGIN - PROMPT 13 15 "Localita' " - FIELD RES_CODLOC - FLAGS "U" - USE LCP SELECT S7=#F_RES_CODLOC - INPUT CODTAB F_RES_CODLOC - DISPLAY "Codice" CODTAB - DISPLAY "Localita'@30" S0 - DISPLAY "CAP@5" S6 - OUTPUT F_RES_CODLOC CODTAB - OUTPUT F_RES_DENLOC S0 - OUTPUT F_RES_CAPCOM S6 - OUTPUT F_RES_CODCOM S7 - CHECKTYPE NORMAL - HELP "Codice localita' postale se diversa dal comune" -END - -STRING F_RES_DENLOC 30 -BEGIN - PROMPT 30 15 "" - COPY USE F_RES_CODLOC - INPUT S0 F_RES_DENLOC - DISPLAY "Localita'@30" S0 - DISPLAY "CAP@5" S6 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_RES_CODLOC - CHECKTYPE NORMAL - HELP "Localita' postale se diversa dal comune" -END - -STRING F_RES_CAPCOM 5 -BEGIN - PROMPT 66 14 "CAP " - FLAGS "D" -END - -STRING F_RES_PROVCOM 5 -BEGIN - PROMPT 66 15 "Prov." - FLAGS "D" -END - -STRING F_COMNASC 4 -BEGIN - PROMPT 2 16 "Nato a " - FIELD COMNASC - FLAGS "U" - USE LF_COMUNI - INPUT STATO "" - INPUT COM F_COMNASC -#include - OUTPUT F_COMNASC COM - OUTPUT F_DENCOMNASC DENCOM - OUTPUT F_PROVCOMNASC PROVCOM - CHECKTYPE NORMAL - HELP "Codice comune di nascita" - WARNING "Comune assente" -END - -STRING F_DENCOMNASC 50 30 -BEGIN - PROMPT 16 16 "" - USE LF_COMUNI KEY 2 - INPUT DENCOM F_DENCOMNASC -#include - COPY OUTPUT F_COMNASC - CHECKTYPE NORMAL - HELP "Comune di nascita" -END - -STRING F_PROVCOMNASC 5 -BEGIN - PROMPT 49 16 "" - FLAGS "D" -END - -LISTBOX F_SESSO 11 -BEGIN - PROMPT 57 16 "Sesso " - FIELD SESSO - FLAGS "U" -#include "sesso.h" -END - -STRING F_CF 16 -BEGIN - PROMPT 2 17 "Codice fiscale " - FIELD CF - FLAGS "U" - HELP "Codice fiscale" -END - -STRING F_DOCID 20 -BEGIN - PROMPT 38 17 "Doc. di identita' " - FIELDS DOCID - FLAGS "U" - HELP "Documento di identit…: tipo e numero" -END - -STRING F_TELABI 14 -BEGIN - PROMPT 2 18 "Telefoni: Abit. " - FIELD TELABI - HELP "Telefono abitazione" -END - -STRING F_TELLAV 14 -BEGIN - PROMPT 35 18 "Lav. " - FIELD TELLAV - HELP "Telefono lavoro" -END - -STRING F_TELALT 14 -BEGIN - PROMPT 56 18 "Altro " - FIELD TELALT - HELP "Altro numero telefonico per reperibilit…" -END - -ENDPAGE - -PAGE "Dati 2" -1 -1 78 20 - -GROUPBOX DLG_NULL 77 5 -BEGIN - PROMPT 1 0 "" - FLAGS "R" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 2 1 "Codice " - FLAGS "D" - GROUP 1 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 2 2 "Cognome e nome " - FLAGS "D" - GROUP 2 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 46 2 "" - FLAGS "D" - GROUP 3 -END - -DATE DLG_NULL -BEGIN - PROMPT 2 3 "Nato il " - FLAGS "D" - GROUP 4 -END - -GROUPBOX DLG_NULL 77 3 -BEGIN - PROMPT 1 5 "Altri dati associativi" -END - -STRING F_CATNOND1 2 -BEGIN - PROMPT 2 6 "Cat. non don. " - FIELD CATNOND1 - FLAGS "U" - USE CTN - INPUT CODTAB F_CATNOND1 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_CATNOND1 CODTAB - OUTPUT F_DESC_CATNOND1 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Altra categoria non donatori" -END - -STRING F_DESC_CATNOND1 23 -BEGIN - PROMPT 22 6 "" - FLAGS "D" -END - -STRING F_CATNOND2 2 -BEGIN - PROMPT 48 6 "" - FIELD CATNOND2 - FLAGS "U" - COPY USE F_CATNOND1 - INPUT CODTAB F_CATNOND2 - COPY DISPLAY F_CATNOND1 - OUTPUT F_CATNOND2 CODTAB - OUTPUT F_DESC_CATNOND2 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Altra categoria non donatori" -END - -STRING F_DESC_CATNOND2 23 -BEGIN - PROMPT 53 6 "" - FLAGS "D" -END - -GROUPBOX DLG_NULL 77 4 -BEGIN - PROMPT 1 8 "Altri dati identificativi" -END - -STRING F_CODCL 6 -BEGIN - PROMPT 2 9 "Cart. clinica " - FIELDS CODCL - FLAGS "U" - HELP "Numero cartella clinica" -END - - -STRING F_CODCT 6 -BEGIN - PROMPT 25 9 "Cod. CT " - FIELDS CODCT - FLAGS "U" - HELP "Codice Centro Trasfusionale" -END - -STRING F_TESSSSN 10 -BEGIN - PROMPT 42 9 "SSN " - FIELDS TESSSSN - FLAGS "U" - HELP "Numero tessera Servizio Sanitario Nazionale" -END - -STRING F_TITINDIR 10 -BEGIN - PROMPT 59 9 "Titolo " - FIELDS TESSSSN - HELP "Eventuale titolo da stampare prima del nome sull'indirizzo" -END - -NUMBER F_CODMED 6 -BEGIN - PROMPT 2 10 "Medico di base " - FIELD CODMED - 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" - ADD MASK at0800a -END - -STRING F_COGNMED 25 23 -BEGIN - PROMPT 26 10 "" - 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 SEARCH - HELP "Medico di base" - WARNING "Medico assente" - ADD MASK at0800a -END - -STRING F_NOMMED 25 22 -BEGIN - PROMPT 52 10 "" - USE LF_MEDICI KEY 2 - INPUT COGNOME F_COGNMED - INPUT NOME F_NOMMED - DISPLAY "Cognome@25" COGNOME - DISPLAY "Nome@25" NOME - DISPLAY "Codice" CODMED - COPY OUTPUT F_COGNMED - CHECKTYPE NORMAL - HELP "Medico di base" - WARNING "Medico assente" - ADD MASK at0800a -END - -GROUPBOX DLG_NULL 77 3 -BEGIN - PROMPT 1 12 "Tipizzazione" -END - -LISTBOX F_GRUPPOAB0 5 -BEGIN - PROMPT 2 13 "Gruppo AB0 " - FIELD GRUPPOAB0 - FLAGS "U" -#include "gruppo.h" -END - -LISTBOX F_RHANTID 4 -BEGIN - PROMPT 22 13 "Rh/AntiD " - FIELD RHANTID - FLAGS "U" -#include "rh.h" -END - -STRING F_FENOTIPORH 6 -BEGIN - PROMPT 39 13 "Fen.Rh " - FIELD FENOTIPORH -END - -LISTBOX F_KELL 4 -BEGIN - PROMPT 54 13 "Kell " - FIELD KELL - FLAGS "U" -#include "rh.h" -END - -LISTBOX F_DU 4 -BEGIN - PROMPT 67 13 "Du " - FIELD DU - FLAGS "U" -#include "rh.h" -END - -GROUPBOX DLG_NULL 77 5 -BEGIN - PROMPT 1 15 "Preferenze" -END - -LISTBOX F_MODCONV 13 -BEGIN - PROMPT 2 16 "Mod. convoc. " - FIELD MODCONV -#include "modalita.h" -END - -STRING F_PUNTORACC 4 -BEGIN - PROMPT 32 16 "Punto racc. " - FIELD PUNTORACC - FLAGS "U" - USE LDN - INPUT CODTAB F_PUNTORACC - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_PUNTORACC CODTAB - OUTPUT F_DESC_PUNTORACC S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Punto di raccolta per la convocazione" -END - -STRING F_DESC_PUNTORACC 25 -BEGIN - PROMPT 51 16 "" - FLAGS "D" -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 17 "Giorni: Lu Ma Me Gi Ve Sa Do" -END - -TEXT DLG_NULL -BEGIN - PROMPT 50 17 "Lu Ma Me Gi Ve Sa Do" -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 18 "Donazione" -END - -BOOLEAN F_GPD_LUN -BEGIN - PROMPT 12 18 "" -END - -BOOLEAN F_GPD_MAR -BEGIN - PROMPT 16 18 "" -END - -BOOLEAN F_GPD_MER -BEGIN - PROMPT 20 18 "" -END - -BOOLEAN F_GPD_GIO -BEGIN - PROMPT 24 18 "" -END - -BOOLEAN F_GPD_VEN -BEGIN - PROMPT 28 18 "" -END - -BOOLEAN F_GPD_SAB -BEGIN - PROMPT 32 18 "" -END - -BOOLEAN F_GPD_DOM -BEGIN - PROMPT 36 18 "" -END - -TEXT DLG_NULL -BEGIN - PROMPT 40 18 "Controlli" -END - -BOOLEAN F_GPC_LUN -BEGIN - PROMPT 50 18 "" -END - -BOOLEAN F_GPC_MAR -BEGIN - PROMPT 54 18 "" -END - -BOOLEAN F_GPC_MER -BEGIN - PROMPT 58 18 "" -END - -BOOLEAN F_GPC_GIO -BEGIN - PROMPT 62 18 "" -END - -BOOLEAN F_GPC_VEN -BEGIN - PROMPT 66 18 "" -END - -BOOLEAN F_GPC_SAB -BEGIN - PROMPT 70 18 "" -END - -BOOLEAN F_GPC_DOM -BEGIN - PROMPT 74 18 "" -END - - -ENDPAGE - -PAGE "Dati 3" -1 -1 78 20 - -GROUPBOX DLG_NULL 77 5 -BEGIN - PROMPT 1 0 "" - FLAGS "R" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 2 1 "Codice " - FLAGS "D" - GROUP 1 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 2 2 "Cognome e nome " - FLAGS "D" - GROUP 2 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 46 2 "" - FLAGS "D" - GROUP 3 -END - -DATE DLG_NULL -BEGIN - PROMPT 2 3 "Nato il " - FLAGS "D" - GROUP 4 -END - -GROUPBOX DLG_NULL 77 7 -BEGIN - PROMPT 1 5 "Situazione sanitaria" -END - -STRING F_STATO 2 -BEGIN - PROMPT 2 6 "Stato attuale " - FIELD STATO - FLAGS "D" - USE TCS - INPUT CODTAB F_STATO - OUTPUT F_DESCSTATO S3 - CHECKTYPE NORMAL -END - -STRING F_DESCSTATO 20 -BEGIN - PROMPT 20 6 "" - FLAGS "D" -END - -DATE F_DATASTATO -BEGIN - PROMPT 55 6 "Data stato " - FIELD DATASTATO - FLAGS "D" -END - -STRING F_IDON1 2 -BEGIN - PROMPT 2 8 "Tipi di idon. " - FIELD IDON1 - FLAGS "D" - USE IDO - INPUT CODTAB F_IDON1 - OUTPUT F_DESC_ID1 S0 - CHECKTYPE NORMAL -END - -STRING F_DESC_ID1 25 -BEGIN - PROMPT 20 8 "" - FLAGS "D" -END - -STRING F_IDON2 2 -BEGIN - PROMPT 47 8 "" - FIELD IDON2 - FLAGS "D" - USE IDO - INPUT CODTAB F_IDON2 - OUTPUT F_DESC_ID2 S0 - CHECKTYPE NORMAL -END - -STRING F_DESC_ID2 25 -BEGIN - PROMPT 51 8 "" - FLAGS "D" -END - -STRING F_IDON3 2 -BEGIN - PROMPT 2 9 " " - FIELD IDON3 - FLAGS "D" - USE IDO - INPUT CODTAB F_IDON3 - OUTPUT F_DESC_ID3 S0 - CHECKTYPE NORMAL -END - -STRING F_DESC_ID3 25 -BEGIN - PROMPT 20 9 "" - FLAGS "D" -END - -STRING F_IDON4 2 -BEGIN - PROMPT 47 9 "" - FIELD IDON4 - FLAGS "D" - USE IDO - INPUT CODTAB F_IDON4 - OUTPUT F_DESC_ID4 S0 - CHECKTYPE NORMAL -END - -STRING F_DESC_ID4 25 -BEGIN - PROMPT 51 9 "" - FLAGS "D" -END - -DATE F_DATAULTID -BEGIN - PROMPT 2 10 "Data ult. id. " - FIELD DATAULTID - FLAGS "D" -END - -STRING F_TIPOULTID 2 -BEGIN - PROMPT 30 10 "Tipo " - FIELD TIPOULTID - FLAGS "D" -END - -GROUPBOX DLG_NULL 77 8 -BEGIN - PROMPT 1 12 "Situazione donazioni" -END - -NUMBER F_TOTDON 3 -BEGIN - PROMPT 2 13 "Totale " - FIELD TOTDON - FLAGS "D" -END - -DATE F_DATAULTDON -BEGIN - PROMPT 15 13 "Data/tipo ultima " - FIELD DATAULTDON - FLAGS "D" -END - -STRING F_TIPOULTDON 2 -BEGIN - PROMPT 44 13 "" - FIELD TIPOULTDON - FLAGS "D" - USE TDN - INPUT CODTAB F_TIPOULTDON - OUTPUT F_DESC_ULTDON S0 - CHECKTYPE NORMAL -END - -STRING F_DESC_ULTDON 25 -BEGIN - PROMPT 48 13 "" - FLAGS "D" -END - -NUMBER F_TOTDONSI 3 -BEGIN - PROMPT 2 14 "Totale don. : Sangue intero " - FIELD TOTDONSI - FLAGS "D" -END - -NUMBER F_TOTDONAF 3 -BEGIN - PROMPT 48 14 "Aferesi " - FIELD TOTDONAF - FLAGS "D" -END - -DATE F_DATAULTSI -BEGIN - PROMPT 2 15 "Date ultima : Sangue intero " - FIELD DATAULTSI - FLAGS "D" -END - -DATE F_DATAULTAF -BEGIN - PROMPT 48 15 "Aferesi " - FIELD DATAULTAF - FLAGS "D" -END - -NUMBER F_INTSI 3 -BEGIN - PROMPT 2 16 "Intervalli : Sangue intero " - FIELD INTSI - FLAGS "D" -END - -NUMBER F_INTAF 3 -BEGIN - PROMPT 48 16 "Aferesi " - FIELD INTAF - FLAGS "D" -END - -DATE F_DATAPROSSI -BEGIN - PROMPT 2 17 "Date prossima : Sangue intero " - FIELD DATAPROSSI - FLAGS "D" -END - -DATE F_DATAPROSAF -BEGIN - PROMPT 48 17 "Aferesi " - FIELD DATAPROSAF - FLAGS "D" -END - -DATE F_DATACONV -BEGIN - PROMPT 2 18 "Convocazioni : Data ultima " - FIELD DATACONV - FLAGS "D" -END - -NUMBER F_NUMCONV 3 -BEGIN - PROMPT 48 18 "Numero " - FIELD NUMCONV - FLAGS "D" -END - -ENDPAGE - -PAGE "Dati 4" -1 -1 78 20 - -GROUPBOX DLG_NULL 77 5 -BEGIN - PROMPT 1 0 "" - FLAGS "R" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 2 1 "Codice " - FLAGS "D" - GROUP 1 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 2 2 "Cognome e nome " - FLAGS "D" - GROUP 2 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 46 2 "" - FLAGS "D" - GROUP 3 -END - -DATE DLG_NULL -BEGIN - PROMPT 2 3 "Nato il " - FLAGS "D" - GROUP 4 -END - -GROUPBOX DLG_NULL 77 6 -BEGIN - PROMPT 1 5 "Dati statistici" -END - -LISTBOX F_CONDOCC 25 -BEGIN - PROMPT 2 6 "Cond. occ. " - FIELD CONDOCC - FLAGS "U" -#include "condocc.h" -END - -LISTBOX F_POSPROF 20 -BEGIN - PROMPT 43 6 "Pos. prof. " - FIELD POSPROF - FLAGS "U" -#include "posprof.h" -END - -LISTBOX F_RAMOATT 25 -BEGIN - PROMPT 2 7 "Ramo att. " - FIELD RAMOATT - FLAGS "U" -#include "ramoatt.h" -END - -LISTBOX F_TITSTUD 20 -BEGIN - PROMPT 43 7 "Tit. stud. " - FIELD TITSTUD - FLAGS "U" -#include "titstud.h" -END - -STRING F_PROFESS 4 -BEGIN - PROMPT 2 8 "Professione " -// FIELD PROFESS - FLAGS "D" -// USE IDO -// INPUT CODTAB F_IDON1 -// OUTPUT F_DESC_ID1 S0 -// CHECKTYPE NORMAL -END - -STRING F_DESC_PROFESS 40 -BEGIN - PROMPT 21 8 "" - FLAGS "D" -END - -STRING F_LUOGOLAV 4 -BEGIN - PROMPT 2 9 "Luogo lav. " - FLAGS "D" -END - -STRING F_DESC_LUOGOLAV 40 -BEGIN - PROMPT 21 9 "" - FLAGS "D" -END - -GROUPBOX DLG_NULL 41 5 -BEGIN - PROMPT 1 11 "Esclusione non sanitaria" -END - -LISTBOX F_ESCLUSO 20 -BEGIN - PROMPT 2 12 "Tipo " - FIELD ESCLUSO - ITEM " | " - MESSAGE CLEAR, F_TERMESCL - MESSAGE CLEAR, F_MOTESCL - MESSAGE DISABLE, F_TERMESCL - MESSAGE DISABLE, F_MOTESCL - ITEM "TI|Tempo indeterminato" - MESSAGE CLEAR, F_TERMESCL - MESSAGE DISABLE, F_TERMESCL - MESSAGE ENABLE, F_MOTESCL - ITEM "TD|Tempo determinato" - MESSAGE ENABLE, F_TERMESCL - MESSAGE ENABLE, F_MOTESCL -END - -DATE F_TERMESCL -BEGIN - PROMPT 2 13 "Termine " - FIELD TERMESCL -END - -STRING F_MOTESCL 30 -BEGIN - PROMPT 2 14 "Motivo " - FIELD MOTESCL -END - -GROUPBOX DLG_NULL 35 3 -BEGIN - PROMPT 43 11 "Ultimo aggiornamento" -END - - -DATE F_DATAULTAGG -BEGIN - PROMPT 44 12 "Data " - FIELD DATAULTAGG - FLAGS "D" -END - -STRING F_UTENULTAGG 8 -BEGIN - PROMPT 61 12 "Utente " - FIELD UTENULTAGG - FLAGS "D" -END - -ENDPAGE - -PAGE "Donazioni" -1 -1 78 20 - -GROUPBOX DLG_NULL 77 5 -BEGIN - PROMPT 1 0 "" - FLAGS "R" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 2 1 "Codice " - FLAGS "D" - GROUP 1 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 2 2 "Cognome e nome " - FLAGS "D" - GROUP 2 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 46 2 "" - FLAGS "D" - GROUP 3 -END - -DATE DLG_NULL -BEGIN - PROMPT 2 3 "Nato il " - FLAGS "D" - GROUP 4 -END - -GROUPBOX DLG_NULL 77 14 -BEGIN - PROMPT 1 5 "Donazioni" -END - -SPREADSHEET F_DONAZIONI 75 12 -BEGIN - PROMPT 2 6 "" - ITEM "Data@10F" - ITEM "Tipo@F" - ITEM "Luogo" - ITEM "Etichetta" - ITEM "CC@3" - ITEM "P.A.@7" - ITEM "Hb@4" - ITEM "SGPT" - ITEM "Prot." - ITEM "1ø" -END - -ENDPAGE - -PAGE "Controlli" -1 -1 78 20 - -GROUPBOX DLG_NULL 77 5 -BEGIN - PROMPT 1 0 "" - FLAGS "R" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 2 1 "Codice " - FLAGS "D" - GROUP 1 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 2 2 "Cognome e nome " - FLAGS "D" - GROUP 2 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 46 2 "" - FLAGS "D" - GROUP 3 -END - -DATE DLG_NULL -BEGIN - PROMPT 2 3 "Nato il " - FLAGS "D" - GROUP 4 -END - -GROUPBOX DLG_NULL 77 14 -BEGIN - PROMPT 1 5 "Controlli sanitari" -END - -SPREADSHEET F_CONTROLLI 75 12 -BEGIN - PROMPT 2 6 "" - ITEM "Data@10F" - ITEM "Tipo@F" - ITEM "Id.1" - ITEM "Id.2" - ITEM "Id.3" - ITEM "Id.4" - ITEM "Int.SI" - ITEM "Int.AF" - ITEM "Pr.tipo" - ITEM "Pr.data" -END - -ENDPAGE - -PAGE "Ben./Sto." -1 -1 78 20 - -GROUPBOX DLG_NULL 77 5 -BEGIN - PROMPT 1 0 "" - FLAGS "R" -END - -NUMBER DLG_NULL 6 -BEGIN - PROMPT 2 1 "Codice " - FLAGS "D" - GROUP 1 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 2 2 "Cognome e nome " - FLAGS "D" - GROUP 2 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 46 2 "" - FLAGS "D" - GROUP 3 -END - -DATE DLG_NULL -BEGIN - PROMPT 2 3 "Nato il " - FLAGS "D" - GROUP 4 -END - -GROUPBOX DLG_NULL 77 8 -BEGIN - PROMPT 1 5 "Benemerenze" -END - -SPREADSHEET F_BENEMERENZE 75 6 -BEGIN - PROMPT 2 6 "" - ITEM "Tipo" - ITEM "Data@10" - ITEM "Ritirata?" -END - -GROUPBOX DLG_NULL 77 6 -BEGIN - PROMPT 1 13 "Storico iscrizioni e dimissioni" -END - -SPREADSHEET F_STORICO 75 4 -BEGIN - PROMPT 2 14 "" - ITEM "Dal@10" - ITEM "Al@10" - ITEM "Sezione" - ITEM "Sottogruppo" - ITEM "Cat. Isc." - ITEM "Motivo dim." -END - -ENDPAGE - -ENDMASK - -PAGE "Donazioni" -1 -1 75 13 - -DATE F_D_DATADON -BEGIN - PROMPT 2 1 "Data donazione " - FIELD LF_DONAZ->DATADON - CHECKTYPE REQUIRED - VALIDATE NOT_EMPTY_FUNC - HELP "Data donazione" -END - -STRING F_D_TIPODON 2 -BEGIN - PROMPT 2 2 "Tipo donazione " - FIELD LF_DONAZ->TIPODON - FLAGS "U" - USE TDN - INPUT CODTAB F_D_TIPODON - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_D_TIPODON CODTAB - OUTPUT F_D_DESC_TIPODON S0 - CHECKTYPE REQUIRED - VALIDATE NOT_EMPTY_FUNC - WARNING "Codice non presente" - HELP "Tipo donazione" -END - -STRING F_D_LUOGODON 4 -BEGIN - PROMPT 2 3 "Luogo donazione " - FIELD LF_DONAZ->LUOGODON - FLAGS "U" - USE LDN - INPUT CODTAB F_D_LUOGODON - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_D_LUOGODON CODTAB - OUTPUT F_D_DESC_LUOGODON S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Luogo donazione" -END - -NUMBER F_D_ETICHETTA 9 -BEGIN - PROMPT 2 5 "Etichetta sacca " - FIELD LF_DONAZ->ETICHETTA -END - -NUMBER F_D_CC 3 -BEGIN - PROMPT 30 5 "CC " - FIELD LF_DONAZ->CC - FLAGS "U" -END - -GROUPBOX DLG_NULL 70 3 -BEGIN - PROMPT 1 7 "Dati sanitari" -END - -STRING F_D_PA 7 -BEGIN - PROMPT 2 8 "PA " - FIELD LF_DONAZ->PA -END - -NUMBER F_D_HB 4 1 -BEGIN - PROMPT 17 8 "Hb " - FIELD LF_DONAZ->HB - FLAGS "U" -END - -NUMBER F_D_SGPT 3 -BEGIN - PROMPT 32 8 "SGPT " - FIELD LF_DONAZ->SGPT - FLAGS "U" -END - -NUMBER F_D_PROTIDEMIA 3 1 -BEGIN - PROMPT 47 8 "Protidemia " - FIELD LF_DONAZ->PROTIDEMIA - FLAGS "U" -END - -BOOLEAN F_D_PRIMADON -BEGIN - PROMPT 2 10 "Prima donazione " - FIELD LF_DONAZ->PRIMADON -END - -STRING F_D_DESC_TIPODON 25 -BEGIN - PROMPT 30 2 "" - FLAGS "D" -END - -STRING F_D_DESC_LUOGODON 25 -BEGIN - PROMPT 30 3 "" - 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 - -PAGE "Controlli sanitari" -1 -1 75 18 - -GRUPBOX DLG_NULL 70 4 -BEGIN - PROMPT 1 1 "Dati fondamentali del controllo" -END - -DATE F_C_DATACON -BEGIN - PROMPT 2 2 "Data controllo " - FIELD LF_CONTSAN->DATACON - CHECKTYPE REQUIRED - VALIDATE NOT_EMPTY_FUNC - HELP "Data controllo" -END - -STRING F_C_TIPOCON 2 -BEGIN - PROMPT 2 3 "Tipo controllo " - FIELD LF_CONTSAN->TIPOCON - FLAGS "U" - USE TCS - INPUT CODTAB F_C_TIPOCON - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_C_TIPOCON CODTAB - OUTPUT F_C_DESC_TIPOCON S0 - CHECKTYPE REQUIRED - VALIDATE NOT_EMPTY_FUNC - WARNING "Codice non presente" - HELP "Tipo/Esito controllo sanitario" -END - -GRUPBOX DLG_NULL 70 7 -BEGIN - PROMPT 1 5 "Dati da compilare se si tratta di idoneita'" -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 6 "Tipi donazione ammessi" -END - -STRING F_C_IDON1 2 -BEGIN - PROMPT 2 7 "" - FIELD LF_CONTSAN->IDON1 - FLAGS "U" - USE IDO - INPUT CODTAB F_C_IDON1 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_C_IDON1 CODTAB - OUTPUT F_C_DESC_IDON1 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Idoneita' alla donazione" -END - -STRING F_C_IDON2 2 -BEGIN - PROMPT 2 8 "" - FIELD LF_CONTSAN->IDON2 - FLAGS "U" - USE IDO - INPUT CODTAB F_C_IDON2 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_C_IDON2 CODTAB - OUTPUT F_C_DESC_IDON2 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Idoneita' alla donazione" -END - -STRING F_C_IDON3 2 -BEGIN - PROMPT 2 9 "" - FIELD LF_CONTSAN->IDON3 - FLAGS "U" - USE IDO - INPUT CODTAB F_C_IDON3 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_C_IDON3 CODTAB - OUTPUT F_C_DESC_IDON3 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Idoneita' alla donazione" -END - -STRING F_C_IDON4 2 -BEGIN - PROMPT 2 10 "" - FIELD LF_CONTSAN->IDON4 - FLAGS "U" - USE IDO - INPUT CODTAB F_C_IDON4 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_C_IDON4 CODTAB - OUTPUT F_C_DESC_IDON4 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Idoneita' alla donazione" -END - -TEXT DLG_NULL -BEGIN - PROMPT 40 6 "Intervalli" -END - -NUMBER F_C_INTSI 3 0 -BEGIN - PROMPT 40 7 "Sangue intero " - FIELD LF_CONTSAN->INTSI - FLAGS "U" -END - -NUMBER F_C_INTAF 3 0 -BEGIN - PROMPT 40 8 "Aferesi " - FIELD LF_CONTSAN->INTAF - FLAGS "U" -END - -GROUPBOX DLG_NULL 70 4 -BEGIN - PROMPT 1 12 "Prossimo tipo/esito" -END - - -STRING F_C_PROSSTIPO 2 -BEGIN - PROMPT 2 13 "Tipo controllo " - FIELD LF_CONTSAN->PROSSTIPO - FLAGS "U" - USE TCS - INPUT CODTAB F_C_PROSSTIPO - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_C_PROSSTIPO CODTAB - OUTPUT F_C_DESC_PROSSTIPO S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Tipo/Esito controllo sanitario" -END - - -DATE F_C_PROSSDATA -BEGIN - PROMPT 2 14 "Data prevista " - FIELD LF_CONTSAN->PROSSDATA - HELP "Data controllo" -END - - -STRING F_C_DESC_TIPOCON 25 -BEGIN - PROMPT 25 3 "" - FLAGS "D" -END - -STRING F_C_DESC_IDON1 25 -BEGIN - PROMPT 10 7 "" - FLAGS "D" -END - -STRING F_C_DESC_IDON2 25 -BEGIN - PROMPT 10 8 "" - FLAGS "D" -END - -STRING F_C_DESC_IDON3 25 -BEGIN - PROMPT 10 9 "" - FLAGS "D" -END - -STRING F_C_DESC_IDON4 25 -BEGIN - PROMPT 10 10 "" - FLAGS "D" -END - -STRING F_C_DESC_PROSSTIPO 25 -BEGIN - PROMPT 25 13 "" - 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 - -PAGE "Benemerenze" -1 -1 75 14 - -STRING F_B_TIPOBEN 2 -BEGIN - PROMPT 2 1 "Benemerenza " - FIELD LF_BENEM->TIPOBEN - FLAGS "U" - USE BNZ - INPUT CODTAB F_B_TIPOBEN - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_B_TIPOBEN CODTAB - OUTPUT F_B_DESC_TIPOBEN S0 - CHECKTYPE REQUIRED - VALIDATE NOT_EMPTY_FUNC - WARNING "Codice non presente" - HELP "Benemerenza assegnata" -END - -DATE F_B_DATABEN -BEGIN - PROMPT 2 2 "Data assegnazione " - FIELD LF_BENEM->DATABEN - CHECKTYPE REQUIRED - VALIDATE NOT_EMPTY_FUNC - HELP "Data assegnazione benemerenza" -END - -BOOLEAN F_B_RITIRATA -BEGIN - PROMPT 40 2 "Ritirata " - FIELD LF_BENEM->RITIRATA -END - - -STRING F_B_DESC_TIPOBEN 25 -BEGIN - PROMPT 26 1 "" - 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 - -PAGE "Storico iscrizioni e dimissioni" -1 -1 60 12 - -DATE F_S_DATAISC -BEGIN - PROMPT 2 1 " Dal " - FIELD LF_STORICO->DATAISC - HELP "Data di iscrizione alla sezione/categoria" -END - -DATE F_S_DATADIM -BEGIN - PROMPT 2 2 " Al " - FIELD LF_STORICO->DATADIM - HELP "Data di dimissione alla sezione/categoria" -END - -STRING F_S_CODSEZ 2 -BEGIN - PROMPT 2 4 "Sezione " - FIELD LF_STORICO->CODSEZ - FLAGS "U" - USE LF_SEZIONI - INPUT CODSEZ F_S_CODSEZ - INPUT CODSOT F_S_CODSOT - DISPLAY "Cod.sez" CODSEZ - DISPLAY "Cod.sot." CODSOT - DISPLAY "Sezione@25" DENSEZ - DISPLAY "Sottogruppo@25" DENSOT - OUTPUT F_S_CODSEZ CODSEZ - OUTPUT F_S_DENSEZ DENSEZ - OUTPUT F_S_CODSOT CODSOT - OUTPUT F_S_DENSOT DENSOT - CHECKTYPE SEARCH - HELP "Codice sezione di iscrizione" -END - -STRING F_S_DENSEZ 25 -BEGIN - PROMPT 20 4 "" - FLAGS "U" - USE LF_SEZIONI KEY 2 - INPUT DENSEZ F_S_DENSEZ - DISPLAY "Sezione@25" DENSEZ - DISPLAY "Sottogruppo@25" DENSOT - DISPLAY "Cod.sez" CODSEZ - DISPLAY "Cod.sot." CODSOT - COPY OUTPUT F_S_CODSEZ - CHECKTYPE NORMAL - HELP "Denominazione sezione di iscrizione" -END - -STRING F_S_CODSOT 2 -BEGIN - PROMPT 2 5 "Sottogruppo " - FIELD LF_STORICO->CODSOT - COPY ALL F_S_CODSEZ - //CHECKTYPE NORMAL - CHECKTYPE SEARCH - HELP "Codice sottogruppo di iscrizione" -END - -STRING F_S_DENSOT 25 -BEGIN - PROMPT 20 5 "" - FLAGS "U" - COPY USE F_S_DENSEZ - INPUT DENSEZ F_S_DENSEZ - INPUT DENSOT F_S_DENSOT - COPY DISPLAY F_S_DENSEZ - COPY OUTPUT F_S_DENSEZ - CHECKTYPE NORMAL - HELP "Sottogruppo di iscrizione" -END - -STRING F_S_CATISC 2 -BEGIN - PROMPT 2 7 "Cat. iscriz. " - FIELD LF_STORICO->CATISC - FLAGS "U" - USE CTD - INPUT CODTAB F_S_CATISC - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_S_CATISC CODTAB - OUTPUT F_S_DESC_CATISC S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Categoria di iscrizione" -END - - -STRING F_S_DESC_CATISC 25 -BEGIN - PROMPT 20 7 "" - FLAGS "D" -END - - -LISTBOX F_S_MOTDIM 25 -BEGIN - PROMPT 2 9 "Motivo dim. " - FIELD MOTDIM - FLAGS "U" -#include "motdim.h" -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 +#include "at0100a.h" +#include "lf.h" + +TOOLBAR "" 0 20 0 2 + +#include +ENDPAGE + +PAGE "Dati 1" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER F_CODICE 6 +BEGIN + PROMPT 2 1 "Codice " + FIELD CODICE + FLAGS "RG" + KEY 1 + USE LF_SOGGETTI + INPUT CODICE F_CODICE + DISPLAY "Codice@6" CODICE + DISPLAY "Cognome@36" COGNOME + DISPLAY "Nome@36" NOME + DISPLAY "Nato il@10" DATANASC + DISPLAY "Sez." CODSEZ + DISPLAY "Sot." CODSOT + DISPLAY "C." CATDON + DISPLAY "Tessera" TESSAVIS + OUTPUT F_CODICE CODICE + OUTPUT F_COGNOME COGNOME + OUTPUT F_NOME NOME + OUTPUT F_DATANASC DATANASC + OUTPUT F_TESSAVIS TESSAVIS + MESSAGE COPY,1@ + CHECKTYPE REQUIRED +END + +STRING F_COGNOME 36 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FIELD COGNOME + KEY 2 + USE LF_SOGGETTI KEY 2 + INPUT COGNOME F_COGNOME + INPUT NOME F_NOME + DISPLAY "Cognome@36" COGNOME + DISPLAY "Nome@36" NOME + DISPLAY "Nato il@10" DATANASC + DISPLAY "Codice@6" CODICE + DISPLAY "Sez." CODSEZ + DISPLAY "Sot." CODSOT + DISPLAY "C." CATDON + DISPLAY "Tessera" TESSAVIS + OUTPUT F_CODICE CODICE + OUTPUT F_COGNOME COGNOME + OUTPUT F_NOME NOME + OUTPUT F_DATANASC DATANASC + OUTPUT F_TESSAVIS TESSAVIS + MESSAGE COPY,2@ + CHECKTYPE REQUIRED + HELP "Cognome del soggetto" +END + +STRING F_NOME 36 25 +BEGIN + PROMPT 46 2 "" + FIELD NOME + KEY 2 + COPY ALL F_COGNOME + MESSAGE COPY,3@ + CHECKTYPE REQUIRED + HELP "Nome del soggetto" +END + +DATE F_DATANASC +BEGIN + PROMPT 2 3 "Nato il " + FIELD DATANASC + MESSAGE COPY,4@ + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_CHECK_FIELD + HELP "Data di nascita" +END + +STRING F_TESSAVIS 6 +BEGIN + PROMPT 38 3 "Tessera " + FIELDS TESSAVIS + FLAGS "U" + KEY 5 + USE LF_SOGGETTI KEY 5 + INPUT TESSAVIS F_TESSAVIS + DISPLAY "Codice@6" CODICE + DISPLAY "Cognome@36" COGNOME + DISPLAY "Nome@36" NOME + DISPLAY "Nato il@10" DATANASC + DISPLAY "Sez." CODSEZ + DISPLAY "Sot." CODSOT + DISPLAY "C." CATDON + DISPLAY "Tessera" TESSAVIS + OUTPUT F_CODICE CODICE + OUTPUT F_COGNOME COGNOME + OUTPUT F_NOME NOME + OUTPUT F_DATANASC DATANASC + OUTPUT F_TESSAVIS TESSAVIS + HELP "Numero tessera associativa AVIS" +END + +BOOLEAN F_T_STAMPATA +BEGIN + PROMPT 60 3 "Stampata " + FIELD T_STAMPATA +END + +GROUPBOX DLG_NULL 77 4 +BEGIN + PROMPT 1 5 "Dati associativi" +END + +STRING F_CODSEZ 2 +BEGIN + PROMPT 2 6 "Sez. " + 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 di appartenenza" + ADD MASK at0700a + WARNING "Codice sezione assente" +END + +STRING F_DENSEZ 24 +BEGIN + PROMPT 12 6 "" + //FLAGS "U" + USE LF_SEZIONI KEY 2 + INPUT DENSEZ F_DENSEZ + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + COPY OUTPUT F_CODSEZ + CHECKTYPE NORMAL + HELP "Denominazione sezione di appartenenza" + ADD MASK at0700a + WARNING "Denominazione assente" +END + +STRING F_CODSOT 2 +BEGIN + PROMPT 40 6 "Sot. " + FIELD CODSOT + COPY ALL F_CODSEZ + CHECKTYPE NORMAL + HELP "Codice sottogruppo di appartenenza" + ADD MASK at0700a + WARNING "Codice sottogruppo assente" +END + +STRING F_DENSOT 24 +BEGIN + PROMPT 50 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 di appartenenza" + ADD MASK at0700a + WARNING "Denominazione sottogruppo assente" +END + +STRING F_CATDON 2 +BEGIN + PROMPT 2 7 "Cat. " + FIELD CATDON + FLAGS "U" + USE CTD + INPUT CODTAB F_CATDON + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_CATDON CODTAB + OUTPUT F_DESC_CATDON S0 + CHECKTYPE NORMAL + WARNING "Codice categoria non presente" + HELP "Categoria di appartenenza" +END + +STRING F_DESC_CATDON 25 +BEGIN + PROMPT 12 7 "" + FLAGS "D" +END + +DATE F_DATAISC +BEGIN + PROMPT 40 7 "Isc. " + FIELD DATAISC + HELP "Data di iscrizione alla sezione/categoria" +END + +DATE F_DATADIM +BEGIN + PROMPT 61 7 "Dim. " + FIELD DATADIM + HELP "Data di dimissione dalla sezione/categoria" +END + +GROUPBOX DLG_NULL 77 12 +BEGIN + PROMPT 1 9 "Dati anagrafici" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 10 "Domicilio: " +END + +STRING F_DOM_INDIR 30 +BEGIN + PROMPT 13 10 "Indirizzo " + FIELD DOM_INDIR +END + +STRING F_DOM_STRADA 5 +BEGIN + PROMPT 55 10 "St. " +END + +STRING F_DOM_DISTRI 4 +BEGIN + PROMPT 66 10 "Dist. " +END + +STRING F_DOM_CODCOM 4 +BEGIN + PROMPT 13 11 "Comune " + FIELD DOM_CODCOM + FLAGS "U" + USE LF_COMUNI + INPUT STATO "" + INPUT COM F_DOM_CODCOM +#include + OUTPUT F_DOM_CODCOM COM + OUTPUT F_DOM_DENCOM DENCOM + OUTPUT F_DOM_PROVCOM PROVCOM + OUTPUT F_DOM_CAPCOM CAPCOM + CHECKTYPE NORMAL + WARNING "Comune assente" + HELP "Codice comune di residenza" +END + +STRING F_DOM_DENCOM 30 +BEGIN + PROMPT 30 11 "" + USE LF_COMUNI KEY 2 + INPUT DENCOM F_DOM_DENCOM +#include + COPY OUTPUT F_DOM_CODCOM + CHECKTYPE NORMAL + HELP "Comune di residenza" + WARNING " Comune assente" +END + +STRING F_DOM_CODLOC 4 +BEGIN + PROMPT 13 12 "Localita' " + FIELD DOM_CODLOC + FLAGS "U" + USE LCP SELECT S7=#F_DOM_CODCOM + INPUT CODTAB F_DOM_CODLOC + DISPLAY "Codice" CODTAB + DISPLAY "Localita'@30" S0 + DISPLAY "CAP@5" S6 + OUTPUT F_DOM_CODLOC CODTAB + OUTPUT F_DOM_DENLOC S0 + OUTPUT F_DOM_CAPCOM S6 + OUTPUT F_DOM_CODCOM S7 + CHECKTYPE NORMAL + HELP "Codice localita' postale se diversa dal comune" + WARNING "Codice localita' assente" +END + +STRING F_DOM_DENLOC 30 +BEGIN + PROMPT 30 12 "" + //FLAGS "U" + USE LCP KEY 2 SELECT S7=#F_DOM_CODCOM + INPUT S0 F_DOM_DENLOC + DISPLAY "Localita'@30" S0 + DISPLAY "CAP@5" S6 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_DOM_CODLOC + CHECKTYPE NORMAL + HELP "Localita' postale se diversa dal comune" + WARNING "Localita' assente" +END + +STRING F_DOM_CAPCOM 5 +BEGIN + PROMPT 66 11 "CAP " + FLAGS "D" +END + +STRING F_DOM_PROVCOM 5 +BEGIN + PROMPT 66 12 "Prov." + FLAGS "D" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 13 "Residenza: " +END + +STRING F_RES_INDIR 30 +BEGIN + PROMPT 13 13 "Indirizzo " + FIELD RES_INDIR +END + +STRING F_RES_CODCOM 4 +BEGIN + PROMPT 13 14 "Comune " + FIELD RES_CODCOM + FLAGS "U" + USE LF_COMUNI + INPUT STATO "" + INPUT COM F_RES_CODCOM +#include + OUTPUT F_RES_CODCOM COM + OUTPUT F_RES_DENCOM DENCOM + OUTPUT F_RES_PROVCOM PROVCOM + OUTPUT F_RES_CAPCOM CAPCOM + CHECKTYPE NORMAL + WARNING "Comune assente" + HELP "Codice comune di residenza" +END + +STRING F_RES_DENCOM 30 +BEGIN + PROMPT 30 14 "" + USE LF_COMUNI KEY 2 + INPUT DENCOM F_RES_DENCOM +#include + COPY OUTPUT F_RES_CODCOM + CHECKTYPE NORMAL + HELP "Comune di residenza" + WARNING "Comune assente" +END + +STRING F_RES_CODLOC 4 +BEGIN + PROMPT 13 15 "Localita' " + FIELD RES_CODLOC + FLAGS "U" + USE LCP SELECT S7=#F_RES_CODLOC + INPUT CODTAB F_RES_CODLOC + DISPLAY "Codice" CODTAB + DISPLAY "Localita'@30" S0 + DISPLAY "CAP@5" S6 + OUTPUT F_RES_CODLOC CODTAB + OUTPUT F_RES_DENLOC S0 + OUTPUT F_RES_CAPCOM S6 + OUTPUT F_RES_CODCOM S7 + CHECKTYPE NORMAL + HELP "Codice localita' postale se diversa dal comune" + WARNING "Codice localita' assente" +END + +STRING F_RES_DENLOC 30 +BEGIN + PROMPT 30 15 "" + USE LCP SELECT S7=#F_RES_CODLOC + INPUT S0 F_RES_DENLOC + DISPLAY "Localita'@30" S0 + DISPLAY "CAP@5" S6 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_RES_CODLOC + CHECKTYPE NORMAL + HELP "Localita' postale se diversa dal comune" + WARNING "Localita' assente" +END + +STRING F_RES_CAPCOM 5 +BEGIN + PROMPT 66 14 "CAP " + FLAGS "D" +END + +STRING F_RES_PROVCOM 5 +BEGIN + PROMPT 66 15 "Prov." + FLAGS "D" +END + +STRING F_COMNASC 4 +BEGIN + PROMPT 2 17 "Nato a " + FIELD COMNASC + FLAGS "U" + USE LF_COMUNI + INPUT STATO "" + INPUT COM F_COMNASC +#include + OUTPUT F_COMNASC COM + OUTPUT F_DENCOMNASC DENCOM + OUTPUT F_PROVCOMNASC PROVCOM + CHECKTYPE NORMAL + HELP "Codice comune di nascita" + WARNING "Comune assente" +END + +STRING F_DENCOMNASC 50 30 +BEGIN + PROMPT 16 17 "" + USE LF_COMUNI KEY 2 + INPUT DENCOM F_DENCOMNASC +#include + COPY OUTPUT F_COMNASC + CHECKTYPE NORMAL + HELP "Comune di nascita" + WARNING "Comune assente" +END + +STRING F_PROVCOMNASC 5 +BEGIN + PROMPT 49 17 "" + FLAGS "D" +END + +LISTBOX F_SESSO 11 +BEGIN + PROMPT 57 17 "Sesso " + FIELD SESSO + FLAGS "U" +#include "sesso.h" +END + +STRING F_CF 16 +BEGIN + PROMPT 2 18 "Codice fiscale " + FIELD CF + FLAGS "U" + HELP "Codice fiscale" +END + +STRING F_DOCID 20 +BEGIN + PROMPT 38 18 "Doc. di identita' " + FIELDS DOCID + FLAGS "U" + HELP "Documento di identit…: tipo e numero" +END + +STRING F_TELABI 14 +BEGIN + PROMPT 2 19 "Telefoni: Abit. " + FIELD TELABI + HELP "Telefono abitazione" +END + +STRING F_TELLAV 14 +BEGIN + PROMPT 35 19 "Lav. " + FIELD TELLAV + HELP "Telefono lavoro" +END + +STRING F_TELALT 14 +BEGIN + PROMPT 56 19 "Altro " + FIELD TELALT + HELP "Altro numero telefonico per reperibilit…" +END + +ENDPAGE + +PAGE "Dati 2" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + +GROUPBOX DLG_NULL 77 4 +BEGIN + PROMPT 1 5 "Altri dati associativi" +END + +STRING F_CATNOND1 2 +BEGIN + PROMPT 2 6 "Cat. non don. " + FIELD CATNOND1 + FLAGS "U" + USE CTN + INPUT CODTAB F_CATNOND1 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_CATNOND1 CODTAB + OUTPUT F_DESC_CATNOND1 S0 + CHECKTYPE NORMAL + WARNING "Codice categoria non presente" + HELP "Altra categoria non donatori" +END + +STRING F_DESC_CATNOND1 23 +BEGIN + PROMPT 22 6 "" + FLAGS "D" +END + +STRING F_CATNOND2 2 +BEGIN + PROMPT 48 6 "" + FIELD CATNOND2 + FLAGS "U" + COPY USE F_CATNOND1 + INPUT CODTAB F_CATNOND2 + COPY DISPLAY F_CATNOND1 + OUTPUT F_CATNOND2 CODTAB + OUTPUT F_DESC_CATNOND2 S0 + CHECKTYPE NORMAL + WARNING "Codice categoria non presente" + HELP "Altra categoria non donatori" +END + +STRING F_DESC_CATNOND2 23 +BEGIN + PROMPT 53 6 "" + FLAGS "D" +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 +BEGIN + PROMPT 1 9 "Altri dati identificativi" +END + +STRING F_CODCL 6 +BEGIN + PROMPT 2 10 "Cart. clinica " + FIELDS CODCL + FLAGS "U" + HELP "Numero cartella clinica" +END + + +STRING F_CODCT 6 +BEGIN + PROMPT 25 10 "Cod. CT " + FIELDS CODCT + FLAGS "U" + HELP "Codice Centro Trasfusionale" +END + +STRING F_TESSSSN 10 +BEGIN + PROMPT 42 10 "SSN " + FIELDS TESSSSN + FLAGS "U" + HELP "Numero tessera Servizio Sanitario Nazionale" +END + +STRING F_TITINDIR 10 +BEGIN + PROMPT 59 10 "Titolo " + FIELDS TESSSSN + HELP "Eventuale titolo da stampare prima del nome sull'indirizzo" +END + +NUMBER F_CODMED 6 +BEGIN + PROMPT 2 11 "Medico di base " + FIELD CODMED + 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" + ADD MASK at0800a +END + +STRING F_COGNMED 25 23 +BEGIN + PROMPT 26 11 "" + 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 SEARCH + HELP "Medico di base" + WARNING "Medico assente" + ADD MASK at0800a +END + +STRING F_NOMMED 25 22 +BEGIN + PROMPT 52 11 "" + USE LF_MEDICI KEY 2 + INPUT COGNOME F_COGNMED + INPUT NOME F_NOMMED + DISPLAY "Cognome@25" COGNOME + DISPLAY "Nome@25" NOME + DISPLAY "Codice" CODMED + COPY OUTPUT F_COGNMED + CHECKTYPE NORMAL + HELP "Medico di base" + WARNING "Medico assente" + ADD MASK at0800a +END + +GROUPBOX DLG_NULL 77 3 +BEGIN + PROMPT 1 13 "Tipizzazione" +END + +LISTBOX F_GRUPPOAB0 5 +BEGIN + PROMPT 2 14 "Gruppo AB0 " + FIELD GRUPPOAB0 + FLAGS "U" +#include "gruppo.h" +END + +LISTBOX F_RHANTID 4 +BEGIN + PROMPT 22 14 "Rh/AntiD " + FIELD RHANTID + FLAGS "U" +#include "rh.h" +END + +STRING F_FENOTIPORH 6 +BEGIN + PROMPT 39 14 "Fen.Rh " + FIELD FENOTIPORH +END + +LISTBOX F_KELL 4 +BEGIN + PROMPT 54 14 "Kell " + FIELD KELL + FLAGS "U" +#include "rh.h" +END + +LISTBOX F_DU 4 +BEGIN + PROMPT 67 14 "Du " + FIELD DU + FLAGS "U" +#include "rh.h" +END + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 16 "Preferenze" +END + +LISTBOX F_MODCONV 13 +BEGIN + PROMPT 2 17 "Mod. convoc. " + FIELD MODCONV +#include "modalita.h" +END + +STRING F_PUNTORACC 4 +BEGIN + PROMPT 32 17 "Punto racc. " + FIELD PUNTORACC + FLAGS "U" + USE LDN + INPUT CODTAB F_PUNTORACC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_PUNTORACC CODTAB + OUTPUT F_DESC_PUNTORACC S0 + CHECKTYPE NORMAL + WARNING "Codice punto di raccolta non presente" + HELP "Punto di raccolta per la convocazione" +END + +STRING F_DESC_PUNTORACC 25 +BEGIN + PROMPT 51 17 "" + FLAGS "D" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 18 "Giorni: Lu Ma Me Gi Ve Sa Do" +END + +TEXT DLG_NULL +BEGIN + PROMPT 50 18 "Lu Ma Me Gi Ve Sa Do" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 19 "Donazione" +END + +BOOLEAN F_GPD_LUN +BEGIN + PROMPT 12 19 "" + FIELD GIOPREDON[1,1] +END + +BOOLEAN F_GPD_MAR +BEGIN + PROMPT 16 19 "" + FIELD GIOPREDON[2,2] +END + +BOOLEAN F_GPD_MER +BEGIN + PROMPT 20 19 "" + FIELD GIOPREDON[3,3] +END + +BOOLEAN F_GPD_GIO +BEGIN + PROMPT 24 19 "" + FIELD GIOPREDON[4,4] +END + +BOOLEAN F_GPD_VEN +BEGIN + PROMPT 28 19 "" + FIELD GIOPREDON[5,5] +END + +BOOLEAN F_GPD_SAB +BEGIN + PROMPT 32 19 "" + FIELD GIOPREDON[6,6] +END + +BOOLEAN F_GPD_DOM +BEGIN + PROMPT 36 19 "" + FIELD GIOPREDON[7,7] +END + +TEXT DLG_NULL +BEGIN + PROMPT 40 19 "Controlli" +END + +BOOLEAN F_GPC_LUN +BEGIN + PROMPT 50 19 "" + FIELD GIOPRECON[1,1] +END + +BOOLEAN F_GPC_MAR +BEGIN + PROMPT 54 19 "" + FIELD GIOPRECON[2,2] +END + +BOOLEAN F_GPC_MER +BEGIN + PROMPT 58 19 "" + FIELD GIOPRECON[3,3] +END + +BOOLEAN F_GPC_GIO +BEGIN + PROMPT 62 19 "" + FIELD GIOPRECON[4,4] +END + +BOOLEAN F_GPC_VEN +BEGIN + PROMPT 66 19 "" + FIELD GIOPRECON[5,5] +END + +BOOLEAN F_GPC_SAB +BEGIN + PROMPT 70 19 "" + FIELD GIOPRECON[6,6] +END + +BOOLEAN F_GPC_DOM +BEGIN + PROMPT 74 19 "" + FIELD GIOPRECON[7,7] +END + +ENDPAGE + +PAGE "Dati 3" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + +GROUPBOX DLG_NULL 77 7 +BEGIN + PROMPT 1 5 "Situazione sanitaria" +END + +STRING F_STATO 2 +BEGIN + PROMPT 2 6 "Stato attuale " + FIELD STATO + FLAGS "D" + USE TCS + INPUT CODTAB F_STATO + OUTPUT F_DESCSTATO S3 + CHECKTYPE NORMAL +END + +STRING F_DESCSTATO 20 +BEGIN + PROMPT 20 6 "" + FLAGS "D" +END + +DATE F_DATASTATO +BEGIN + PROMPT 55 6 "Data stato " + FIELD DATASTATO + FLAGS "D" +END + +STRING F_IDON1 2 +BEGIN + PROMPT 2 8 "Tipi di idon. " + FIELD IDON1 + FLAGS "D" + USE IDO + INPUT CODTAB F_IDON1 + OUTPUT F_DESC_ID1 S0 + CHECKTYPE NORMAL +END + +STRING F_DESC_ID1 25 +BEGIN + PROMPT 20 8 "" + FLAGS "D" +END + +STRING F_IDON2 2 +BEGIN + PROMPT 47 8 "" + FIELD IDON2 + FLAGS "D" + USE IDO + INPUT CODTAB F_IDON2 + OUTPUT F_DESC_ID2 S0 + CHECKTYPE NORMAL +END + +STRING F_DESC_ID2 25 +BEGIN + PROMPT 51 8 "" + FLAGS "D" +END + +STRING F_IDON3 2 +BEGIN + PROMPT 2 9 " " + FIELD IDON3 + FLAGS "D" + USE IDO + INPUT CODTAB F_IDON3 + OUTPUT F_DESC_ID3 S0 + CHECKTYPE NORMAL +END + +STRING F_DESC_ID3 25 +BEGIN + PROMPT 20 9 "" + FLAGS "D" +END + +STRING F_IDON4 2 +BEGIN + PROMPT 47 9 "" + FIELD IDON4 + FLAGS "D" + USE IDO + INPUT CODTAB F_IDON4 + OUTPUT F_DESC_ID4 S0 + CHECKTYPE NORMAL +END + +STRING F_DESC_ID4 25 +BEGIN + PROMPT 51 9 "" + FLAGS "D" +END + +DATE F_DATAULTID +BEGIN + PROMPT 2 10 "Data ult. id. " + FIELD DATAULTID + FLAGS "D" +END + +STRING F_TIPOULTID 2 +BEGIN + PROMPT 30 10 "Tipo " + FIELD TIPOULTID + FLAGS "D" +END + +GROUPBOX DLG_NULL 77 8 +BEGIN + PROMPT 1 12 "Situazione donazioni" +END + +NUMBER F_TOTDON 3 +BEGIN + PROMPT 2 13 "Totale " + FIELD TOTDON + FLAGS "D" +END + +DATE F_DATAULTDON +BEGIN + PROMPT 15 13 "Data/tipo ultima " + FIELD DATAULTDON + FLAGS "D" +END + +STRING F_TIPOULTDON 2 +BEGIN + PROMPT 44 13 "" + FIELD TIPOULTDON + FLAGS "D" + USE TDN + INPUT CODTAB F_TIPOULTDON + OUTPUT F_DESC_ULTDON S0 + CHECKTYPE NORMAL +END + +STRING F_DESC_ULTDON 25 +BEGIN + PROMPT 48 13 "" + FLAGS "D" +END + +NUMBER F_TOTDONSI 3 +BEGIN + PROMPT 2 14 "Totale don. : Sangue intero " + FIELD TOTDONSI + FLAGS "D" +END + +NUMBER F_TOTDONAF 3 +BEGIN + PROMPT 48 14 "Aferesi " + FIELD TOTDONAF + FLAGS "D" +END + +DATE F_DATAULTSI +BEGIN + PROMPT 2 15 "Date ultima : Sangue intero " + FIELD DATAULTSI + FLAGS "D" +END + +DATE F_DATAULTAF +BEGIN + PROMPT 48 15 "Aferesi " + FIELD DATAULTAF + FLAGS "D" +END + +NUMBER F_INTSI 3 +BEGIN + PROMPT 2 16 "Intervalli : Sangue intero " + FIELD INTSI + FLAGS "D" +END + +NUMBER F_INTAF 3 +BEGIN + PROMPT 48 16 "Aferesi " + FIELD INTAF + FLAGS "D" +END + +DATE F_DATAPROSSI +BEGIN + PROMPT 2 17 "Date prossima : Sangue intero " + FIELD DATAPROSSI + FLAGS "D" +END + +DATE F_DATAPROSAF +BEGIN + PROMPT 48 17 "Aferesi " + FIELD DATAPROSAF + FLAGS "D" +END + +DATE F_DATACONV +BEGIN + PROMPT 2 18 "Convocazioni : Data ultima " + FIELD DATACONV + FLAGS "D" +END + +NUMBER F_NUMCONV 3 +BEGIN + PROMPT 48 18 "Numero " + FIELD NUMCONV + FLAGS "D" +END + +ENDPAGE + +PAGE "Dati 4" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + +GROUPBOX DLG_NULL 77 6 +BEGIN + PROMPT 1 5 "Dati statistici" +END + +LISTBOX F_CONDOCC 25 +BEGIN + PROMPT 2 6 "Cond. occ. " + FIELD CONDOCC + FLAGS "U" +#include "condocc.h" +END + +LISTBOX F_POSPROF 20 +BEGIN + PROMPT 43 6 "Pos. prof. " + FIELD POSPROF + FLAGS "U" +#include "posprof.h" +END + +LISTBOX F_RAMOATT 25 +BEGIN + PROMPT 2 7 "Ramo att. " + FIELD RAMOATT + FLAGS "U" +#include "ramoatt.h" +END + +LISTBOX F_TITSTUD 20 +BEGIN + PROMPT 43 7 "Tit. stud. " + FIELD TITSTUD + FLAGS "U" +#include "titstud.h" +END + +STRING F_PROFESS 4 +BEGIN + PROMPT 2 8 "Professione " + FIELD PROFESS + FLAGS "U" + USE PRF + INPUT CODTAB F_PROFESS + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_PROFESS CODTAB + OUTPUT F_DESC_PROFESS S0 + CHECKTYPE NORMAL + WARNING "Codice professione non presente" + HELP "Professione" +END + +STRING F_DESC_PROFESS 40 +BEGIN + PROMPT 21 8 "" + 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 + +STRING F_LUOGOLAV 4 +BEGIN + PROMPT 2 9 "Luogo lav. " + 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 + +STRING F_DESC_LUOGOLAV 40 +BEGIN + PROMPT 21 9 "" + 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 + +GROUPBOX DLG_NULL 41 5 +BEGIN + PROMPT 1 11 "Esclusione non sanitaria" +END + +LISTBOX F_ESCLUSO 20 +BEGIN + PROMPT 2 12 "Tipo " + FIELD ESCLUSO + ITEM " | " + MESSAGE CLEAR, F_TERMESCL + MESSAGE CLEAR, F_MOTESCL + MESSAGE DISABLE, F_TERMESCL + MESSAGE DISABLE, F_MOTESCL + ITEM "TI|Tempo indeterminato" + MESSAGE CLEAR, F_TERMESCL + MESSAGE DISABLE, F_TERMESCL + MESSAGE ENABLE, F_MOTESCL + ITEM "TD|Tempo determinato" + MESSAGE ENABLE, F_TERMESCL + MESSAGE ENABLE, F_MOTESCL +END + +DATE F_TERMESCL +BEGIN + PROMPT 2 13 "Termine " + FIELD TERMESCL +END + +STRING F_MOTESCL 30 +BEGIN + PROMPT 2 14 "Motivo " + FIELD MOTESCL +END + +GROUPBOX DLG_NULL 35 3 +BEGIN + PROMPT 43 11 "Ultimo aggiornamento" +END + + +DATE F_DATAULTAGG +BEGIN + PROMPT 44 12 "Data " + FIELD DATAULTAGG + FLAGS "D" +END + +STRING F_UTENULTAGG 8 +BEGIN + PROMPT 61 12 "Utente " + FIELD UTENULTAGG + FLAGS "D" +END + +MEMO F_NOTE 77 4 +BEGIN + PROMPT 1 16 "Note " + FIELD NOTE +END + +ENDPAGE + +PAGE "Donazioni" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + +BUTTON F_GENERA 18 1 +BEGIN + PROMPT 1 5 "Genera donazioni" +END + +//GROUPBOX DLG_NULL 77 15 +//BEGIN +// PROMPT 1 5 "Donazioni" +//END + +SPREADSHEET F_DONAZIONI +BEGIN + PROMPT 1 6 "" + ITEM "Data@10F" + ITEM "Tipo@F" + ITEM "Luogo" + ITEM "Etichetta" + ITEM "CC@3" + ITEM "P.A.@7" + ITEM "Hb@4" + ITEM "SGPT" + ITEM "Prot." + ITEM "1ø" +END + +ENDPAGE + +PAGE "Controlli" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + +//GROUPBOX DLG_NULL 77 15 +//BEGIN +// PROMPT 1 5 "Controlli sanitari" +//END + +SPREADSHEET F_CONTROLLI +BEGIN + PROMPT 1 5 "Controlli sanitari" + ITEM "Data@10F" + ITEM "Tipo@F" + ITEM "Id.1" + ITEM "Id.2" + ITEM "Id.3" + ITEM "Id.4" + ITEM "Int.SI" + ITEM "Int.AF" + ITEM "Pr.tipo" + ITEM "Pr.data" +END + +ENDPAGE + +PAGE "Dati 5" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + +GROUPBOX DLG_NULL 35 8 +BEGIN + PROMPT 1 5 "Benemerenze" +END + +SPREADSHEET F_BENEMERENZE 33 6 +BEGIN + PROMPT 2 6 "" + ITEM "Tipo" + ITEM "Data@10" + ITEM "Ritirata?" +END + +BUTTON F_FAMIGLIA 10 2 +BEGIN + PROMPT 40 6 "Famiglia" +END + +GROUPBOX DLG_NULL 77 7 +BEGIN + PROMPT 1 13 "Storico iscrizioni e dimissioni" +END + +SPREADSHEET F_STORICO 75 5 +BEGIN + PROMPT 2 14 "" + ITEM "Dal@10" + ITEM "Al@10" + ITEM "Sez." + ITEM "Sot." + ITEM "Cat." + ITEM "Motivo dim." +END + +ENDPAGE + +ENDMASK + +PAGE "Donazioni" -1 -1 75 13 + +DATE F_D_DATADON +BEGIN + PROMPT 2 1 "Data donazione " + FIELD LF_DONAZ->DATADON + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + HELP "Data donazione" +END + +STRING F_D_TIPODON 2 +BEGIN + PROMPT 2 2 "Tipo donazione " + FIELD LF_DONAZ->TIPODON + FLAGS "U" + USE TDN + INPUT CODTAB F_D_TIPODON + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_D_TIPODON CODTAB + OUTPUT F_D_DESC_TIPODON S0 + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + WARNING "Codice tipo donazione non presente" + HELP "Tipo donazione" +END + +STRING F_D_LUOGODON 4 +BEGIN + PROMPT 2 3 "Luogo donazione " + FIELD LF_DONAZ->LUOGODON + FLAGS "U" + USE LDN + INPUT CODTAB F_D_LUOGODON + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_D_LUOGODON CODTAB + OUTPUT F_D_DESC_LUOGODON S0 + CHECKTYPE NORMAL + WARNING "Codice luogo donazione non presente" + HELP "Luogo donazione" +END + +NUMBER F_D_ETICHETTA 9 +BEGIN + PROMPT 2 5 "Etichetta sacca " + FIELD LF_DONAZ->ETICHETTA +END + +NUMBER F_D_CC 3 +BEGIN + PROMPT 30 5 "CC " + FIELD LF_DONAZ->CC + FLAGS "U" +END + +GROUPBOX DLG_NULL 70 3 +BEGIN + PROMPT 1 7 "Dati sanitari" +END + +STRING F_D_PA 7 +BEGIN + PROMPT 2 8 "PA " + FIELD LF_DONAZ->PA +END + +NUMBER F_D_HB 4 1 +BEGIN + PROMPT 17 8 "Hb " + FIELD LF_DONAZ->HB + FLAGS "U" +END + +NUMBER F_D_SGPT 3 +BEGIN + PROMPT 32 8 "SGPT " + FIELD LF_DONAZ->SGPT + FLAGS "U" +END + +NUMBER F_D_PROTIDEMIA 3 1 +BEGIN + PROMPT 47 8 "Protidemia " + FIELD LF_DONAZ->PROTIDEMIA + FLAGS "U" +END + +BOOLEAN F_D_PRIMADON +BEGIN + PROMPT 2 10 "Prima donazione " + FIELD LF_DONAZ->PRIMADON +END + +STRING F_D_DESC_TIPODON 25 +BEGIN + PROMPT 30 2 "" + FLAGS "D" +END + +STRING F_D_DESC_LUOGODON 25 +BEGIN + PROMPT 30 3 "" + 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 + +PAGE "Controlli sanitari" -1 -1 75 18 + +GRUPBOX DLG_NULL 70 4 +BEGIN + PROMPT 1 1 "Dati fondamentali del controllo" +END + +DATE F_C_DATACON +BEGIN + PROMPT 2 2 "Data controllo " + FIELD LF_CONTSAN->DATACON + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + HELP "Data controllo" +END + +STRING F_C_TIPOCON 2 +BEGIN + PROMPT 2 3 "Tipo controllo " + FIELD LF_CONTSAN->TIPOCON + FLAGS "U" + USE TCS + INPUT CODTAB F_C_TIPOCON + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_C_TIPOCON CODTAB + OUTPUT F_C_DESC_TIPOCON S0 + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + WARNING "Codice controllo sanitario non presente" + HELP "Tipo/Esito controllo sanitario" +END + +GRUPBOX DLG_NULL 70 7 +BEGIN + PROMPT 1 5 "Dati da compilare se si tratta di idoneita'" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 6 "Tipi donazione ammessi" +END + +STRING F_C_IDON1 2 +BEGIN + PROMPT 2 7 "" + FIELD LF_CONTSAN->IDON1 + FLAGS "U" + USE IDO + INPUT CODTAB F_C_IDON1 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_C_IDON1 CODTAB + OUTPUT F_C_DESC_IDON1 S0 + CHECKTYPE NORMAL + VALIDATE NOT_EMPTY_FUNC + WARNING "Codice idoneit… non presente" + HELP "Idoneita' alla donazione" +END + +STRING F_C_IDON2 2 +BEGIN + PROMPT 2 8 "" + FIELD LF_CONTSAN->IDON2 + FLAGS "U" + USE IDO + INPUT CODTAB F_C_IDON2 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_C_IDON2 CODTAB + OUTPUT F_C_DESC_IDON2 S0 + CHECKTYPE NORMAL + WARNING "Codice idoneit… non presente" + HELP "Idoneita' alla donazione" +END + +STRING F_C_IDON3 2 +BEGIN + PROMPT 2 9 "" + FIELD LF_CONTSAN->IDON3 + FLAGS "U" + USE IDO + INPUT CODTAB F_C_IDON3 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_C_IDON3 CODTAB + OUTPUT F_C_DESC_IDON3 S0 + CHECKTYPE NORMAL + WARNING "Codice idoneit… non presente" + HELP "Idoneita' alla donazione" +END + +STRING F_C_IDON4 2 +BEGIN + PROMPT 2 10 "" + FIELD LF_CONTSAN->IDON4 + FLAGS "U" + USE IDO + INPUT CODTAB F_C_IDON4 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_C_IDON4 CODTAB + OUTPUT F_C_DESC_IDON4 S0 + CHECKTYPE NORMAL + WARNING "Codice idoneit… non presente" + HELP "Idoneita' alla donazione" +END + +TEXT DLG_NULL +BEGIN + PROMPT 40 6 "Intervalli" +END + +NUMBER F_C_INTSI 3 0 +BEGIN + PROMPT 40 7 "Sangue intero " + FIELD LF_CONTSAN->INTSI + FLAGS "U" + VALIDATE NOT_EMPTY_FUNC +END + +NUMBER F_C_INTAF 3 0 +BEGIN + PROMPT 40 8 "Aferesi " + FIELD LF_CONTSAN->INTAF + FLAGS "U" + VALIDATE NOT_EMPTY_FUNC +END + +GROUPBOX DLG_NULL 70 4 +BEGIN + PROMPT 1 12 "Prossimo tipo/esito" +END + + +STRING F_C_PROSSTIPO 2 +BEGIN + PROMPT 2 13 "Tipo controllo " + FIELD LF_CONTSAN->PROSSTIPO + FLAGS "U" + USE TCS + INPUT CODTAB F_C_PROSSTIPO + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_C_PROSSTIPO CODTAB + OUTPUT F_C_DESC_PROSSTIPO S0 + CHECKTYPE NORMAL + WARNING "Codice controllo sanitario non presente" + HELP "Tipo/Esito controllo sanitario" +END + + +DATE F_C_PROSSDATA +BEGIN + PROMPT 2 14 "Data prevista " + FIELD LF_CONTSAN->PROSSDATA + HELP "Data controllo" +END + + +STRING F_C_DESC_TIPOCON 25 +BEGIN + PROMPT 25 3 "" + FLAGS "D" +END + +STRING F_C_DESC_IDON1 25 +BEGIN + PROMPT 10 7 "" + FLAGS "D" +END + +STRING F_C_DESC_IDON2 25 +BEGIN + PROMPT 10 8 "" + FLAGS "D" +END + +STRING F_C_DESC_IDON3 25 +BEGIN + PROMPT 10 9 "" + FLAGS "D" +END + +STRING F_C_DESC_IDON4 25 +BEGIN + PROMPT 10 10 "" + FLAGS "D" +END + +STRING F_C_DESC_PROSSTIPO 25 +BEGIN + PROMPT 25 13 "" + 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 + +PAGE "Benemerenze" -1 -1 75 14 + +STRING F_B_TIPOBEN 2 +BEGIN + PROMPT 2 1 "Benemerenza " + FIELD LF_BENEM->TIPOBEN + FLAGS "U" + USE BNZ + INPUT CODTAB F_B_TIPOBEN + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_B_TIPOBEN CODTAB + OUTPUT F_B_DESC_TIPOBEN S0 + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + WARNING "Codice benemerenza non presente" + HELP "Benemerenza assegnata" +END + +DATE F_B_DATABEN +BEGIN + PROMPT 2 2 "Data assegnazione " + FIELD LF_BENEM->DATABEN + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + HELP "Data assegnazione benemerenza" +END + +BOOLEAN F_B_RITIRATA +BEGIN + PROMPT 40 2 "Ritirata " + FIELD LF_BENEM->RITIRATA +END + + +STRING F_B_DESC_TIPOBEN 25 +BEGIN + PROMPT 26 1 "" + 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 + +PAGE "Storico iscrizioni e dimissioni" -1 -1 60 12 + +DATE F_S_DATAISC +BEGIN + PROMPT 2 1 " Dal " + FIELD LF_STORICO->DATAISC + HELP "Data di iscrizione alla sezione/categoria" +END + +DATE F_S_DATADIM +BEGIN + PROMPT 2 2 " Al " + FIELD LF_STORICO->DATADIM + HELP "Data di dimissione alla sezione/categoria" +END + +STRING F_S_CODSEZ 2 +BEGIN + PROMPT 2 4 "Sezione " + FIELD LF_STORICO->CODSEZ + FLAGS "U" + USE LF_SEZIONI + INPUT CODSEZ F_S_CODSEZ + INPUT CODSOT F_S_CODSOT + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + OUTPUT F_S_CODSEZ CODSEZ + OUTPUT F_S_DENSEZ DENSEZ + OUTPUT F_S_CODSOT CODSOT + OUTPUT F_S_DENSOT DENSOT + CHECKTYPE SEARCH + HELP "Codice sezione di iscrizione" +END + +STRING F_S_DENSEZ 25 +BEGIN + PROMPT 20 4 "" + FLAGS "U" + USE LF_SEZIONI KEY 2 + INPUT DENSEZ F_S_DENSEZ + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + COPY OUTPUT F_S_CODSEZ + CHECKTYPE NORMAL + HELP "Denominazione sezione di iscrizione" +END + +STRING F_S_CODSOT 2 +BEGIN + PROMPT 2 5 "Sottogruppo " + FIELD LF_STORICO->CODSOT + COPY ALL F_S_CODSEZ + //CHECKTYPE NORMAL + CHECKTYPE SEARCH + HELP "Codice sottogruppo di iscrizione" +END + +STRING F_S_DENSOT 25 +BEGIN + PROMPT 20 5 "" + FLAGS "U" + COPY USE F_S_DENSEZ + INPUT DENSEZ F_S_DENSEZ + INPUT DENSOT F_S_DENSOT + COPY DISPLAY F_S_DENSEZ + COPY OUTPUT F_S_DENSEZ + CHECKTYPE NORMAL + HELP "Sottogruppo di iscrizione" +END + +STRING F_S_CATISC 2 +BEGIN + PROMPT 2 7 "Cat. iscriz. " + FIELD LF_STORICO->CATISC + FLAGS "U" + USE CTD + INPUT CODTAB F_S_CATISC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_S_CATISC CODTAB + OUTPUT F_S_DESC_CATISC S0 + CHECKTYPE NORMAL + WARNING "Codice categoria non presente" + HELP "Categoria di iscrizione" +END + + +STRING F_S_DESC_CATISC 25 +BEGIN + PROMPT 20 7 "" + FLAGS "D" +END + + +LISTBOX F_S_MOTDIM 25 +BEGIN + PROMPT 2 9 "Motivo dim. " + FIELD MOTDIM + FLAGS "U" +#include "motdim.h" +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 diff --git a/at/at0100b.h b/at/at0100b.h new file mode 100755 index 000000000..d6aecace8 --- /dev/null +++ b/at/at0100b.h @@ -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 diff --git a/at/at0100b.uml b/at/at0100b.uml new file mode 100755 index 000000000..42554016d --- /dev/null +++ b/at/at0100b.uml @@ -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 +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 diff --git a/at/at0100c.h b/at/at0100c.h new file mode 100755 index 000000000..9959e2039 --- /dev/null +++ b/at/at0100c.h @@ -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 diff --git a/at/at0100c.uml b/at/at0100c.uml new file mode 100755 index 000000000..ea7a7975d --- /dev/null +++ b/at/at0100c.uml @@ -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 +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 diff --git a/at/at0200.cpp b/at/at0200.cpp index 9f61ad26f..827e4a2e3 100755 --- a/at/at0200.cpp +++ b/at/at0200.cpp @@ -1,513 +1,522 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "at0.h" -#include "lf.h" // se non lo metto non riesco a usare gli LF - -// nomi campi maschera -#include "at0200a.h" - -// nomi dei campi -#include "soggetti.h" -#include "donaz.h" -#include "contsan.h" - -#include "atlib1.cpp" - -#define ALIAS_CTD 100 - -class TDonaz_app : public TApplication -{ - TMask* _msk; - TRelation* _rel; - - TLocalisamfile* _soggetti; - TLocalisamfile* _donaz; - TLocalisamfile* _contsan; - TRecord_array* _sdonazioni; - TRecord_array* _scontrolli; - TAssoc_array* _asoggetti; // array dei soggetti inseriti per controllare doppio ins. - - -protected: - virtual bool create(); - virtual bool destroy(); - virtual bool menu(MENU_TAG m); - virtual TMask& get_mask() { return *_msk; } - virtual TRelation* get_relation() const { return _rel; } - - 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 soggetti_notify(TSheet_field& s, int r, KEY k); - void add_rows_soggetti(TSheet_field& s, int count = 10, int start = 0); - static bool ins_controlli_handler(TMask_field& f, KEY k); - -public: - TDonaz_app() {} - -}; - -HIDDEN inline TDonaz_app& app() { return (TDonaz_app&) main_app(); } - -bool TDonaz_app::ins_controlli_handler(TMask_field& f, KEY k) -{ - if (k == K_SPACE) - { - TMask& m = f.mask(); - TSheet_field& s = (TSheet_field&)m.field(F_SOGGETTI); - const bool ins_controlli = m.get_bool(F_INS_CONTROLLI); - s.enable_column(3,ins_controlli); - } - return TRUE; -} - - -void TDonaz_app::add_rows_soggetti(TSheet_field& s, int count, int start) -{ - if (start == 0) - s.destroy(); - for (int r=start; r<=start+count-1; r++) - TToken_string& row = s.row(r); -} - -bool TDonaz_app::create() -{ - _msk = new TMask("at0200a"); - _rel = new TRelation(LF_SOGGETTI); - _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(); - - _msk->set_handler(F_INS_CONTROLLI,ins_controlli_handler); - TSheet_field& ss = (TSheet_field&)_msk->field(F_SOGGETTI); - ss.set_notify(soggetti_notify); - - ss.sheet_mask().set_handler(F_S_NOME,nome_handler); - - dispatch_e_menu(BAR_ITEM(1)); - - return TRUE; -} - -bool TDonaz_app::destroy() -{ - delete _rel; - delete _msk; - delete _donaz; - delete _contsan; - delete _sdonazioni; - delete _scontrolli; - delete _asoggetti; - return TRUE; -} - -bool TDonaz_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.destroy(); - add_rows_soggetti(s); - _asoggetti->destroy(); - msk.set(F_DATADON,oggi); - tasto = msk.run(); - switch (tasto) - { - case K_ESC: // annulla - { - if (yesno_box("Registrare le modifiche?")) - TDonaz_app::write(s); - msk.reset(); - } - break; - case K_SAVE: // registra - { - TDonaz_app::write(s); - msk.reset(); - } - break; - case K_INS: // nuovo - { - TDonaz_app::write(s); - msk.reset(); - } - break; - case K_QUIT: // fine - { - if (yesno_box("Registrare le modifiche?")) - TDonaz_app::write(s); - } - break; - } - } - while (tasto != K_QUIT); - return FALSE; -} - -int TDonaz_app::write(TSheet_field& s) -{ - - const TMask& m = s.mask(); - const TDate data = m.get(F_DATADON); - - int items = s.items(); - TProgind *pi; - pi = new TProgind(items,"Registrazione donazioni e 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.zero(); - sog.put(SOG_CODICE, codsog); - int err = sog.read(); - if (err == NOERR) - { - TString 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_DATADON)); - recc->put(CON_TIPOCON, row.get(3)); - 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 già 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); - } - - TRectype* rec = new TRectype(LF_DONAZ); - rec->put(DON_CODICE, row.get(0)); - rec->put(DON_DATADON, m.get(F_DATADON)); - rec->put(DON_TIPODON, m.get(F_TIPODON)); - rec->put(DON_LUOGODON, m.get(F_LUOGODON)); - - bool insert = FALSE; - bool exist = FALSE; - - TRectype* key = new TRectype(LF_DONAZ); - key->put(DON_CODICE, row.get(0)); - //int err = _sdonazioni->read(key); - err = _sdonazioni->read(key); - if (err == NOERR) - { - int r=_sdonazioni->rows(); - while (r>=1 && !insert && !exist) - { - const TRectype& riga = _sdonazioni->row(r); - const TDate d = riga.get(DON_DATADON); - if (data==d) // esiste già una donazione in questa data - { - exist=TRUE; - r=0; - } - else - if (data > d) - { - rec->put(DON_PROGDON,r+1); - _sdonazioni->insert_row(rec); - insert=TRUE; - } - r--; - } - if (!exist && !insert) - { - rec->put(DON_PROGDON,1); - _sdonazioni->insert_row(rec); - } - } - else - if (err == _iseof || err == _isemptyfile) - { - rec->put(DON_PROGDON,1); - _sdonazioni->insert_row(rec); - } - if (!exist) - { - _sdonazioni->write(TRUE); - - - TDate dataultdon = sog.get_date(SOG_DATAULTDON); - const TString tipo = m.get(F_TIPODON); - int totdon = sog.get_int(SOG_TOTDON); - sog.put(SOG_TOTDON,totdon+1); - if (data > dataultdon) - { - sog.put(SOG_DATAULTDON,data); - sog.put(SOG_TIPOULTDON,tipo); - } - if (xis_donaz(tipo,XIDON_SI)) - { - totdon = sog.get_int(SOG_TOTDONSI); - sog.put(SOG_TOTDONSI,totdon+1); - dataultdon = sog.get_date(SOG_DATAULTSI); - if (data>dataultdon) - sog.put(SOG_DATAULTSI,data); - } - if (xis_donaz(tipo,XIDON_AF)) - { - totdon = sog.get_int(SOG_TOTDONAF); - sog.put(SOG_TOTDONAF,totdon+1); - dataultdon = sog.get_date(SOG_DATAULTAF); - if (data>dataultdon) - sog.put(SOG_DATAULTAF,data); - } - char modstato = ' '; - const TString stato = sog.get(SOG_STATO); // stato attuale - const TString id1 = sog.get(SOG_IDON1); // idon. 1 - const TString id2 = sog.get(SOG_IDON2); // idon. 2 - const TString id3 = sog.get(SOG_IDON3); // idon. 3 - const TString id4 = sog.get(SOG_IDON4); // idon. 4 - const int intsi = sog.get_int(SOG_INTSI); // intervallo per SI - const int intaf = sog.get_int(SOG_INTAF); // intervallo per AF - dataultdon = sog.get_date(SOG_DATAULTDON); // data ultima donazione - const TString tipoultdon(sog.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 = xmodstato_tcs(stato); - 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_af = (xis_idon(id1,id2,id3,id4,XIDON_AF) && intaf != 0); // il soggetto è idoneo AF - - if (dataultdon.ok()) // se ha fatto almeno una donazione - { - if (xis_donaz(tipoultdon,XIDON_SI)) // se l'ultima donazione è una SI - { - if (id_si) - { - datasi=dataultdon; - datasi+=intsi; - } - if (id_af) - { - dataaf=dataultdon; - dataaf+=intaf; - } - } - if (xis_donaz(tipoultdon,XIDON_AF)) // se l'ultima donazione è una AF - { - 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 (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=sog.get_date(SOG_DATAULTID); - if (id_af) - dataaf=sog.get_date(SOG_DATAULTID); - } - } - sog.put(SOG_DATAPROSSI,datasi); - sog.put(SOG_DATAPROSAF,dataaf); - - // controllo la sua categoria - - TTable ctd("CTD"); - TString catdon = sog.get(SOG_CATDON); - ctd.put("CODTAB",catdon); - if (ctd.read() == NOERR) - { - bool dimissione = ctd.get_bool("B0"); - if (dimissione) - sog.put(SOG_CATDON,ctd.get("S6")); - } - - // controllo se è idoneo - - sog.rewrite(); - } - } - } - } - - delete pi; - - return NOERR; -} - -bool TDonaz_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 TDonaz_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 == s.items()-1) && (r == s.first_empty())) - { - app().add_rows_soggetti(s,10,r+1); - s.select(r); - } - } - break; - case K_ENTER: - // uscita da riga modificata - case K_CTRL+K_TAB: - // uscita riga - { - TToken_string& row = s.row(r); - const long codsog = row.get_long(0); - if (codsog != 0) - for (int i=s.items()-1; i>=0; i--) - { - if (i != r) - { - TToken_string& row = s.row(i); - if (codsog == row.get_long(0)) - return s.sheet_mask().field(F_S_CODICE).error_box("Soggetto gia' inserito"); - } - } - else - { - const char* cognome = row.get(1); - if ((cognome != NULL) && (cognome != "\0")) - { - TMask& m = s.sheet_mask(); - m.send_key(K_F9,F_S_CODICE); - } - } - /*if ((r == s.items()-1) && (r == s.first_empty())) */ - if (r == s.items()-1) - { - app().add_rows_soggetti(s,10,r+1); - s.select(r); - } - } - break; - } - return ok; -} - -bool TDonaz_app::nome_handler(TMask_field& f, KEY k) -{ - bool ok = TRUE; - if (k == K_TAB && f.focusdirty()) - { - TMask& m = f.mask(); - long codsog = m.get_long(F_S_CODICE); - if (codsog == 0) - f.on_key(K_F9); - } - return ok; -} - - -int at0200(int argc, char* argv[]) -{ - TDonaz_app a; - a.run(argc, argv, "Giornaliero donazioni/controlli"); - return 0; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "at0.h" +#include "lf.h" // se non lo metto non riesco a usare gli LF + +// nomi campi maschera +#include "at0200a.h" + +// nomi dei campi +#include "soggetti.h" +#include "donaz.h" +#include "contsan.h" + +#include "atlib.h" + +#define ALIAS_CTD 100 + +class TDonaz_app : public TApplication +{ + TMask* _msk; + TRelation* _rel; + + TLocalisamfile* _soggetti; + TLocalisamfile* _donaz; + TLocalisamfile* _contsan; + TRecord_array* _sdonazioni; + TRecord_array* _scontrolli; + TAssoc_array* _asoggetti; // array dei soggetti inseriti per controllare doppio ins. + bool _modified; + + +protected: + virtual bool create(); + virtual bool destroy(); + virtual bool menu(MENU_TAG m); + virtual TMask& get_mask() { return *_msk; } + virtual TRelation* get_relation() const { return _rel; } + + 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 soggetti_notify(TSheet_field& s, int r, KEY k); + void add_rows_soggetti(TSheet_field& s, int count = 20, int start = 0); + static bool ins_controlli_handler(TMask_field& f, KEY k); + +public: + TDonaz_app() {} + +}; + +HIDDEN inline TDonaz_app& app() { return (TDonaz_app&) main_app(); } + +bool TDonaz_app::ins_controlli_handler(TMask_field& f, KEY k) +{ + if (k == K_SPACE) + { + TMask& m = f.mask(); + TSheet_field& s = (TSheet_field&)m.field(F_SOGGETTI); + const bool ins_controlli = m.get_bool(F_INS_CONTROLLI); + s.enable_column(3,ins_controlli); + } + return TRUE; +} + +void TDonaz_app::add_rows_soggetti(TSheet_field& s, int count, int start) +{ + if (start == 0) + s.destroy(); + for (int r=start; r<=start+count-1; r++) + TToken_string& row = s.row(r); +} + +bool TDonaz_app::create() +{ + _modified = FALSE; + _msk = new TMask("at0200a"); + _rel = new TRelation(LF_SOGGETTI); + _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(); + + _msk->set_handler(F_INS_CONTROLLI,ins_controlli_handler); + TSheet_field& ss = (TSheet_field&)_msk->field(F_SOGGETTI); + ss.set_notify(soggetti_notify); + + ss.sheet_mask().set_handler(F_S_NOME,nome_handler); + + dispatch_e_menu(BAR_ITEM(1)); + + return TRUE; +} + +bool TDonaz_app::destroy() +{ + delete _rel; + delete _msk; + delete _donaz; + delete _contsan; + delete _sdonazioni; + delete _scontrolli; + delete _asoggetti; + return TRUE; +} + +bool TDonaz_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_DATADON,oggi); + tasto = msk.run(); + switch (tasto) + { + case K_ESC: // annulla + { + if (_modified) + if (yesno_box("Registrare le modifiche?")) + TDonaz_app::write(s); + _modified = FALSE; + msk.reset(); + } + break; + case K_SAVE: // registra + { + TDonaz_app::write(s); + _modified = FALSE; + msk.reset(); + } + break; + case K_INS: // nuovo + { + TDonaz_app::write(s); + _modified = FALSE; + msk.reset(); + } + break; + case K_QUIT: // fine + { + if (_modified) + if (yesno_box("Registrare le modifiche?")) + TDonaz_app::write(s); + msk.reset(); + _modified = FALSE; + } + break; + } + } + while (tasto != K_QUIT); + return FALSE; +} + +int TDonaz_app::write(TSheet_field& s) +{ + + const TMask& m = s.mask(); + const TDate data = m.get(F_DATADON); + + int items = s.items(); + TProgind *pi; + pi = new TProgind(items,"Registrazione donazioni e 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_DATADON)); + recc->put(CON_TIPOCON, row.get(3)); + 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 già 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); + } + + TRectype* rec = new TRectype(LF_DONAZ); + rec->put(DON_CODICE, row.get(0)); + rec->put(DON_DATADON, m.get(F_DATADON)); + rec->put(DON_TIPODON, m.get(F_TIPODON)); + rec->put(DON_LUOGODON, m.get(F_LUOGODON)); + + bool insert = FALSE; + bool exist = FALSE; + + TRectype* key = new TRectype(LF_DONAZ); + key->put(DON_CODICE, row.get(0)); + err = _sdonazioni->read(key); + if (err == NOERR) + { + int r=_sdonazioni->rows(); + while (r>=1 && !insert && !exist) + { + const TRectype& riga = _sdonazioni->row(r); + const TDate d = riga.get(DON_DATADON); + if (data==d) // esiste gia' una donazione in questa data + { + exist=TRUE; + r=0; + } + else + if (data > d) + { + rec->put(DON_PROGDON,r+1); + _sdonazioni->insert_row(rec); + insert=TRUE; + } + r--; + } + if (!exist && !insert) + { + rec->put(DON_PROGDON,1); + _sdonazioni->insert_row(rec); + } + } + else + if (err == _iseof || err == _isemptyfile) + { + rec->put(DON_PROGDON,1); + _sdonazioni->insert_row(rec); + } + if (!exist) + { + _sdonazioni->write(TRUE); + + + TDate dataultdon = sog.get_date(SOG_DATAULTDON); + const TString16 tipo = m.get(F_TIPODON); + int totdon = sog.get_int(SOG_TOTDON); + sog.put(SOG_TOTDON,totdon+1); + if (data > dataultdon) + { + sog.put(SOG_DATAULTDON,data); + sog.put(SOG_TIPOULTDON,tipo); + } + if (is_donaz(tipo,IDON_SI)) + { + totdon = sog.get_int(SOG_TOTDONSI); + sog.put(SOG_TOTDONSI,totdon+1); + dataultdon = sog.get_date(SOG_DATAULTSI); + if (data>dataultdon) + sog.put(SOG_DATAULTSI,data); + } + if (is_donaz(tipo,IDON_AF)) + { + totdon = sog.get_int(SOG_TOTDONAF); + sog.put(SOG_TOTDONAF,totdon+1); + dataultdon = sog.get_date(SOG_DATAULTAF); + if (data>dataultdon) + sog.put(SOG_DATAULTAF,data); + } + char modstato = ' '; + const TString16 stato = sog.get(SOG_STATO); // stato attuale + const TString16 id1 = sog.get(SOG_IDON1); // idon. 1 + const TString16 id2 = sog.get(SOG_IDON2); // idon. 2 + const TString16 id3 = sog.get(SOG_IDON3); // idon. 3 + const TString16 id4 = sog.get(SOG_IDON4); // idon. 4 + const int intsi = sog.get_int(SOG_INTSI); // intervallo per SI + const int intaf = sog.get_int(SOG_INTAF); // intervallo per AF + dataultdon = sog.get_date(SOG_DATAULTDON); // data ultima donazione + const TString16 tipoultdon(sog.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 = sog.get_date(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=sog.get_date(SOG_DATAULTID); + if (id_af) + dataaf=sog.get_date(SOG_DATAULTID); + } + } + sog.put(SOG_DATAPROSSI,datasi); + sog.put(SOG_DATAPROSAF,dataaf); + + // controllo la sua categoria + // se dimesso diventa della categoria collegata + // se non c'e' la categoria collegata ??? + + TTable ctd("CTD"); + TString16 catdon = sog.get(SOG_CATDON); + ctd.put("CODTAB",catdon); + if (ctd.read() == NOERR) + { + bool dimissione = ctd.get_bool("B0"); + if (dimissione) + sog.put(SOG_CATDON,ctd.get("S6")); + } + + // controllo se è idoneo + sog.put(SOG_DATAULTAGG,TODAY); + sog.put(SOG_UTENULTAGG,user()); + + sog.rewrite(); + } + } + } + } + + delete pi; + + return NOERR; +} + +bool TDonaz_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 TDonaz_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 == 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 TDonaz_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; +} + + +int at0200(int argc, char* argv[]) +{ + TDonaz_app a; + a.run(argc, argv, "Giornaliero donazioni/controlli"); + return 0; } \ No newline at end of file diff --git a/at/at0200a.h b/at/at0200a.h index 71be46f44..d954abbbf 100755 --- a/at/at0200a.h +++ b/at/at0200a.h @@ -1,41 +1,42 @@ -// definizione campi della maschera at0200a.msk -// INSERIMENTO VELOCE DONAZIONI - -// dati fissi -#define F_DATADON 101 -#define F_TIPODON 102 -#define F_LUOGODON 103 -#define F_DESC_TIPODON 104 -#define F_DESC_LUOGODON 105 -#define F_INS_CONTROLLI 106 -// 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_DATANASC 105 -#define F_S_CODSEZ 106 -#define F_S_CODSOT 107 -#define F_S_CATDON 108 -#define F_S_TESSAVIS 109 -#define F_S_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_IDON2 206 -#define F_S_IDON3 207 -#define F_S_IDON4 208 -#define F_S_INTSI 209 -#define F_S_INTAF 210 -#define F_S_PROSSTIPO 211 -#define F_S_PROSSDATA 212 -#define F_S_DESC_IDON1 213 -#define F_S_DESC_IDON2 214 -#define F_S_DESC_IDON3 215 -#define F_S_DESC_IDON4 216 -#define F_S_DESC_PROSSTIPO 217 +// definizione campi della maschera at0200a.msk +// GIORNALIERO DONAZIONI/CONTROLLI + +// dati fissi +#define F_DATADON 101 +#define F_TIPODON 102 +#define F_LUOGODON 103 +#define F_DESC_TIPODON 104 +#define F_DESC_LUOGODON 105 +#define F_INS_CONTROLLI 106 +// 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_DATANASC 105 +#define F_S_CODSEZ 106 +#define F_S_CODSOT 107 +#define F_S_CATDON 108 +#define F_S_TESSAVIS 109 + +#define F_S_DENSEZ 151 +#define F_S_DENSOT 152 +#define F_S_DESC_TIPOCON 153 +#define F_S_DESC_CATDON 154 + +#define F_S_IDON1 155 +#define F_S_IDON2 156 +#define F_S_IDON3 157 +#define F_S_IDON4 158 +#define F_S_INTSI 159 +#define F_S_INTAF 160 +#define F_S_PROSSTIPO 161 +#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 diff --git a/at/at0200a.uml b/at/at0200a.uml index 9ef500faa..d660d4deb 100755 --- a/at/at0200a.uml +++ b/at/at0200a.uml @@ -1,431 +1,429 @@ -#include "at0200a.h" -#include "lf.h" - -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 donazioni/controlli" -1 -1 78 20 - - -GROUPBOX DLG_NULL 77 6 -BEGIN - PROMPT 1 0 "Dati fissi" - FLAGS "R" -END - -DATE F_DATADON -BEGIN - PROMPT 2 1 "Data donazione " - //VALIDATE NOT_EMPTY_FUNC - CHECKTYPE REQUIRED - HELP "Data donazione" -END - -STRING F_TIPODON 2 -BEGIN - PROMPT 2 2 "Tipo donazione " - FLAGS "U" - USE TDN - INPUT CODTAB F_TIPODON - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@30" S0 - OUTPUT F_TIPODON CODTAB - OUTPUT F_DESC_TIPODON S0 - VALIDATE NOT_EMPTY_FUNC - CHECKTYPE REQUIRED - WARNING "Codice non presente" - HELP "Tipo donazione" -END - -STRING F_LUOGODON 4 -BEGIN - PROMPT 2 3 "Luogo donazione " - FLAGS "U" - USE LDN - INPUT CODTAB F_LUOGODON - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@30" S0 - OUTPUT F_LUOGODON CODTAB - OUTPUT F_DESC_LUOGODON S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Luogo donazione" -END - -STRING F_DESC_TIPODON 25 -BEGIN - PROMPT 30 2 "" - FLAGS "D" -END - -STRING F_DESC_LUOGODON 25 -BEGIN - PROMPT 30 3 "" - FLAGS "D" -END - -BOOLEAN F_INS_CONTROLLI -BEGIN - PROMPT 2 4 "Inserimento controlli" -END - -GROUPBOX DLG_NULL 77 13 -BEGIN - PROMPT 1 6 "Soggetti" -END - -SPREADSHEET F_SOGGETTI 75 11 -BEGIN - PROMPT 2 7 "" - ITEM "Codice@6" - ITEM "Cognome@25" - ITEM "Nome@25" - ITEM "Con." - 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 "" - COPY ALL F_S_COGNOME - COPY OUTPUT F_S_CODICE - 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 - -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_TIPOCON 25 -BEGIN - 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" - USE IDO - INPUT CODTAB F_S_IDON1 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_S_IDON1 CODTAB - OUTPUT F_S_DESC_IDON1 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Idoneita' alla donazione" -END - -STRING F_S_IDON2 2 -BEGIN - PROMPT 40 12 "" - FLAGS "U" - USE IDO - INPUT CODTAB F_S_IDON2 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@40" S0 - OUTPUT F_S_IDON2 CODTAB - OUTPUT F_S_DESC_IDON2 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Idoneita' alla donazione" -END - -STRING F_S_IDON3 2 -BEGIN - PROMPT 40 13 "" - FLAGS "U" - 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_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 - -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 - -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 +#include "at0200a.h" +#include "lf.h" + +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 donazioni/controlli" -1 -1 78 20 + + +GROUPBOX DLG_NULL 77 6 +BEGIN + PROMPT 1 0 "Dati fissi" + FLAGS "R" +END + +DATE F_DATADON +BEGIN + PROMPT 2 1 "Data donazione " + VALIDATE NOT_EMPTY_FUNC + CHECKTYPE REQUIRED + HELP "Data donazione" +END + +STRING F_TIPODON 2 +BEGIN + PROMPT 2 2 "Tipo donazione " + FLAGS "U" + USE TDN + INPUT CODTAB F_TIPODON + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_TIPODON CODTAB + OUTPUT F_DESC_TIPODON S0 + VALIDATE NOT_EMPTY_FUNC + CHECKTYPE REQUIRED + WARNING "Codice non presente" + HELP "Tipo donazione" +END + +STRING F_LUOGODON 4 +BEGIN + PROMPT 2 3 "Luogo donazione " + FLAGS "U" + USE LDN + INPUT CODTAB F_LUOGODON + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_LUOGODON CODTAB + OUTPUT F_DESC_LUOGODON S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Luogo donazione" +END + +STRING F_DESC_TIPODON 25 +BEGIN + PROMPT 30 2 "" + FLAGS "D" +END + +STRING F_DESC_LUOGODON 25 +BEGIN + PROMPT 30 3 "" + FLAGS "D" +END + +BOOLEAN F_INS_CONTROLLI +BEGIN + PROMPT 2 4 "Inserimento controlli" +END + +SPREADSHEET F_SOGGETTI +BEGIN + PROMPT 2 6 "Soggetti" + ITEM "Codice@6" + ITEM "Cognome@25" + ITEM "Nome@25" + ITEM "Con." + 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 + +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_TIPOCON 25 +BEGIN + 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" + USE IDO + INPUT CODTAB F_S_IDON1 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_S_IDON1 CODTAB + OUTPUT F_S_DESC_IDON1 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Idoneita' alla donazione" +END + +STRING F_S_IDON2 2 +BEGIN + PROMPT 40 12 "" + FLAGS "U" + USE IDO + INPUT CODTAB F_S_IDON2 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_S_IDON2 CODTAB + OUTPUT F_S_DESC_IDON2 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Idoneita' alla donazione" +END + +STRING F_S_IDON3 2 +BEGIN + PROMPT 40 13 "" + FLAGS "U" + 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_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 + +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 + +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 diff --git a/at/at0300.cpp b/at/at0300.cpp index 4bdf97edb..904bf11c7 100755 --- a/at/at0300.cpp +++ b/at/at0300.cpp @@ -1,7 +1,15 @@ +#include +#include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "at0.h" #include "lf.h" // se non lo metto non riesco a usare gli LF @@ -13,195 +21,346 @@ #include "soggetti.h" #include "donaz.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; - TRelation* _rel; - - int _cur; - TDate _data_chiusura; - TParagraph_string _operazione; + TMask* _msk; + TRelation* _rel; + TLocalisamfile* _soggetti; + TLocalisamfile* _donaz; + TLocalisamfile* _contsan; + TRecord_array* _sdonazioni; + TRecord_array* _scontrolli; + TAssoc_array* _asoggetti; // array dei soggetti inseriti per controllare doppio ins. + bool _modified; 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 bool create(); + virtual bool destroy(); + virtual bool menu(MENU_TAG m); 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: - void filtra_sezioni(); - void crea_intestazione(); - TChiusura_app() : _data_chiusura(TODAY), _operazione("",30) {} + TContsan_app() {} + }; -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() -{ - TString sezini = _msk->get(F_SEZINI); - TString sotini = _msk->get(F_SOTINI); - TString sezfin = _msk->get(F_SEZFIN); - TString sotfin = _msk->get(F_SOTFIN); - 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) -{ - _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) +void TContsan_app::add_rows_soggetti(TSheet_field& s, int count, int start) { - 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); + if (start == 0) + s.destroy(); + for (int r=start; r<=start+count-1; r++) + TToken_string& row = s.row(r); } - -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() +bool TContsan_app::create() { + _modified = FALSE; _msk = new TMask("at0300a"); _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 + _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)); + return TRUE; } -bool TChiusura_app::user_destroy() +bool TContsan_app::destroy() { delete _rel; 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; +} + int at0300(int argc, char* argv[]) { - TChiusura_app a; - a.run(argc, argv, "Chiusura annuale"); + TContsan_app a; + a.run(argc, argv, "Giornaliero controlli"); return 0; } \ No newline at end of file diff --git a/at/at0300a.h b/at/at0300a.h index 89921171b..e480fa914 100755 --- a/at/at0300a.h +++ b/at/at0300a.h @@ -1,12 +1,43 @@ -// chiusura annuale -// definizione campi per maschera di selezione +// definizione campi della maschera at0300a.msk +// GIORNALIERO CONTROLLI -#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 +// dati fissi +#define F_DATACON 101 +#define F_TIPOCON 102 +#define F_PROSSTIPO 103 +#define F_PROSSDATA 104 +#define F_DESC_TIPOCON 105 +#define F_DESC_PROSSTIPO 106 + +// 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 diff --git a/at/at0300a.uml b/at/at0300a.uml index 596d368f3..944299e3e 100755 --- a/at/at0300a.uml +++ b/at/at0300a.uml @@ -1,138 +1,430 @@ #include "at0300a.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 BEGIN - PROMPT 1 1 "Scelta sezioni/sottogruppi" + PROMPT 1 5 "Dati associativi" END -STRING F_SEZINI 2 +STRING F_S_CODSEZ 2 BEGIN - PROMPT 2 2 "Da " - FLAGS "U" + 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_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 + INPUT CODSEZ F_S_CODSEZ + INPUT CODSOT F_S_CODSOT + OUTPUT F_S_DENSEZ DENSEZ + OUTPUT F_S_DENSOT DENSOT 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 +STRING F_S_DENSOT 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 + 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 - HELP "Sottogruppo da cui partire" END -STRING F_SEZFIN 2 +STRING F_S_TESSAVIS 10 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" + PROMPT 52 7 "Tessera AVIS " + FLAGS "D" END -STRING F_D_SEZFIN 25 +STRING F_S_DESC_TIPOCON 25 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" - 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 + USE IDO + INPUT CODTAB F_S_IDON1 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_S_IDON1 CODTAB + OUTPUT F_S_DESC_IDON1 S0 CHECKTYPE NORMAL - HELP "Sezione finale" + WARNING "Codice non presente" + HELP "Idoneita' alla donazione" END -STRING F_SOTFIN 2 +STRING F_S_IDON2 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 "" + PROMPT 40 12 "" 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 + USE IDO + INPUT CODTAB F_S_IDON2 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@40" S0 + OUTPUT F_S_IDON2 CODTAB + OUTPUT F_S_DESC_IDON2 S0 CHECKTYPE NORMAL - HELP "Sottogruppo finale" + WARNING "Codice non presente" + HELP "Idoneita' alla donazione" END -DATE F_DATA +STRING F_S_IDON3 2 BEGIN - PROMPT 2 5 "Data chiusura " - CHECKTYPE REQUIRED - HELP "Data di riferimento per i conteggi di chiusura" + PROMPT 40 13 "" + FLAGS "U" + 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 BUTTON DLG_OK 9 2 BEGIN - PROMPT -12 14 "" + PROMPT -13 -1 "" END -BUTTON DLG_QUIT 9 2 +BUTTON DLG_CANCEL 9 2 BEGIN - PROMPT -22 14 "" + PROMPT -23 -1 "" +END + +BUTTON DLG_DELREC 9 2 +BEGIN + PROMPT -33 -1 "" + MESSAGE EXIT, K_DEL END ENDPAGE + ENDMASK diff --git a/at/at0400.cpp b/at/at0400.cpp new file mode 100755 index 000000000..826b019f9 --- /dev/null +++ b/at/at0400.cpp @@ -0,0 +1,343 @@ +#include +#include +#include +#include +#include +#include +#include + +#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; +} \ No newline at end of file diff --git a/at/at0400a.h b/at/at0400a.h new file mode 100755 index 000000000..f105f19b5 --- /dev/null +++ b/at/at0400a.h @@ -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 diff --git a/at/at0400a.uml b/at/at0400a.uml new file mode 100755 index 000000000..d2004015a --- /dev/null +++ b/at/at0400a.uml @@ -0,0 +1,311 @@ +#include "at0400a.h" +#include "lf.h" + +TOOLBAR "" 0 20 0 2 + +#include + +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 diff --git a/at/at0700.h b/at/at0700.h index 0107c78e3..8023b3891 100755 --- a/at/at0700.h +++ b/at/at0700.h @@ -1,40 +1,40 @@ -// definizione campi della maschera at0700a.msk - -#define F_CODSEZ 101 -#define F_CODSOT 103 -#define F_DENSEZ 102 -#define F_DENSOT 104 -#define F_INDIRIZZO 105 -#define F_COM 106 -#define F_DENCOM 107 -#define F_LOCALITA 108 -#define F_DENLOC 109 -#define F_CAPCOM 110 -#define F_PROVCOM 111 -#define F_TELEFONO 112 -#define F_FAX 113 -#define F_REFERCED 114 -#define F_STATO 115 -#define F_INTMINCONV 116 -#define F_INTMIN 117 -#define F_INTMAX 118 -#define F_TIPOCONV 119 -#define F_DATAULTCON 120 -#define F_INTESTAZ1 121 -#define F_INTESTAZ2 122 -#define F_INTESTAZ3 123 -#define F_INTESTAZ4 124 -#define F_CONVORA 125 -#define F_CONVSEDE1 126 -#define F_CONVSEDE2 127 -#define F_CONVSEDE3 128 -#define F_CONVSEDE4 129 -#define F_CONVNOTE 130 -#define F_DONEMER 131 -#define F_INTESTI 132 -#define F_CATEMER 133 -#define F_DESC_CATEMER 134 -#define F_CATESTI 135 -#define F_DESC_CATESTI 136 -#define F_CATCANC 137 -#define F_DESC_CATCANC 138 +// definizione campi della maschera at0700a.msk + +#define F_CODSEZ 101 +#define F_CODSOT 103 +#define F_DENSEZ 102 +#define F_DENSOT 104 +#define F_INDIRIZZO 105 +#define F_COM 106 +#define F_DENCOM 107 +#define F_LOCALITA 108 +#define F_DENLOC 109 +#define F_CAPCOM 110 +#define F_PROVCOM 111 +#define F_TELEFONO 112 +#define F_FAX 113 +#define F_REFERCED 114 +#define F_STATO 115 +#define F_INTMINCONV 116 +#define F_INTMIN 117 +#define F_INTMAX 118 +#define F_TIPOCONV 119 +#define F_DATAULTCON 120 +#define F_INTESTAZ1 121 +#define F_INTESTAZ2 122 +#define F_INTESTAZ3 123 +#define F_INTESTAZ4 124 +#define F_CONVORA 125 +#define F_CONVSEDE1 126 +#define F_CONVSEDE2 127 +#define F_CONVSEDE3 128 +#define F_CONVSEDE4 129 +#define F_CONVNOTE 130 +#define F_DONEMER 131 +#define F_INTESTI 132 +#define F_CATEMER 133 +#define F_DESC_CATEMER 134 +#define F_CATESTI 135 +#define F_DESC_CATESTI 136 +#define F_CATCANC 137 +#define F_DESC_CATCANC 138 diff --git a/at/at0700a.uml b/at/at0700a.uml index dce40606e..f9de9a197 100755 --- a/at/at0700a.uml +++ b/at/at0700a.uml @@ -1,422 +1,422 @@ -#include "at0700.h" -#include "lf.h" - -TOOLBAR "" 0 20 0 2 -#include -ENDPAGE - -PAGE "Sezioni 1" -1 -1 78 20 - -GROUPBOX DLG_NULL 77 4 -BEGIN - PROMPT 1 0 "" - FLAGS "R" -END - -STRING F_CODSEZ 2 -BEGIN - PROMPT 2 1 "Cod. sezione " - FIELD CODSEZ - FLAGS "U" - KEY 1 - 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 - MESSAGE COPY,1@ - CHECKTYPE REQUIRED -END - -STRING F_CODSOT 2 -BEGIN - PROMPT 2 2 "Cod. sottogruppo " - FIELD CODSOT - FLAGS "U" - KEY 1 - COPY ALL F_CODSEZ - MESSAGE COPY,2@ - CHECKTYPE NORMAL - WARNING "Inserire il codice della sezione" -END - -STRING F_DENSEZ 25 -BEGIN - PROMPT 29 1 "Denominazione sez. " - FIELD DENSEZ - KEY 2 - USE LF_SEZIONI KEY 2 - INPUT DENSEZ F_DENSEZ - INPUT DENSOT F_DENSOT - DISPLAY "Sezione@25" DENSEZ - DISPLAY "Sottogruppo@25" DENSOT - DISPLAY "Cod.sez. " CODSEZ - DISPLAY "Cod.sot. " CODSOT - COPY OUTPUT F_CODSEZ - MESSAGE COPY,3@ - CHECKTYPE REQUIRED - WARNING "Inserire la denominazione della sezione" -END - -STRING F_DENSOT 25 -BEGIN - PROMPT 29 2 "Denominazione sot. " - FIELD DENSOT - KEY 2 - COPY ALL F_DENSEZ - MESSAGE COPY,4@ - CHECKTYPE NORMAL - WARNING "Inserire la denominazione del sottogruppo" -END - -GROUPBOX DLG_NULL 77 7 -BEGIN - PROMPT 1 4 "Dati anagrafici" -END - -STRING F_INDIRIZZO 50 -BEGIN - PROMPT 2 5 "Indirizzo " - FIELD INDIRIZZO -END - -STRING F_COM 4 -BEGIN - PROMPT 2 6 "Comune " - FIELD COM - FLAGS "U" - USE LF_COMUNI - INPUT STATO "" - INPUT COM F_COM -#include - OUTPUT F_COM COM - OUTPUT F_DENCOM DENCOM - OUTPUT F_PROVCOM PROVCOM - OUTPUT F_CAPCOM CAPCOM - CHECKTYPE NORMAL - WARNING "Comune assente" -END - -STRING F_DENCOM 48 -BEGIN - PROMPT 19 6 "" - USE LF_COMUNI KEY 2 - INPUT DENCOM F_DENCOM -#include - COPY OUTPUT F_COM - CHECKTYPE NORMAL -END - -STRING F_LOCALITA 4 -BEGIN - PROMPT 2 7 "Località " - FIELD LOCALITA - FLAGS "U" - USE LCP SELECT S7=#F_COM - INPUT CODTAB F_LOCALITA - DISPLAY "Codice" CODTAB - DISPLAY "Località@30" S0 - DISPLAY "CAP@5" S6 - OUTPUT F_LOCALITA CODTAB - OUTPUT F_DENLOC S0 - OUTPUT F_CAPCOM S6 - OUTPUT F_COM S7 - CHECKTYPE NORMAL - HELP "Codice localit… postale se diversa dal comune" -END - -STRING F_DENLOC 30 -BEGIN - PROMPT 19 7 "" - COPY USE F_LOCALITA - INPUT S0 F_DENLOC - DISPLAY "Località@30" S0 - DISPLAY "CAP@5" S6 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_LOCALITA - CHECKTYPE NORMAL - HELP "Localit… postale se diversa dal comune" -END - - -STRING F_PROVCOM 5 -BEGIN - PROMPT 71 6 "" - FLAGS "D" -END - -STRING F_CAPCOM 5 -BEGIN - PROMPT 67 7 "CAP " - FLAGS "D" -END - -STRING F_TELEFONO 15 -BEGIN - PROMPT 2 8 "Telefono " - FIELD TELEFONO -END - -STRING F_FAX 15 -BEGIN - PROMPT 32 8 "Fax " - FIELD FAX -END - -STRING F_REFERCED 50 -BEGIN - PROMPT 2 9 "Referente CED " - FIELD REFERCED -END - -RADIOBUTTON F_STATO 13 -BEGIN - PROMPT 1 11 "Stato" - FIELD STATO - ITEM "A|Attiva" - ITEM "E|Estinta" -END - - -GROUPBOX DLG_NULL 35 7 -BEGIN - PROMPT 16 11 "Parametri convocazione" -END - -NUMBER F_INTMINCONV 4 -BEGIN - PROMPT 17 12 "Int. min. convoc. " - FIELD INTMINCONV - HELP "Intervallo minimo di convocazione in giorni (dall'ultima don.)" -END - -NUMBER F_INTMIN 4 -BEGIN - PROMPT 17 13 "Int. avvisi: min. " - FIELD INTMIN -END - -NUMBER F_INTMAX 4 -BEGIN - PROMPT 17 14 " max. " - FIELD INTMAX -END - -LISTBOX F_TIPOCONV 11 -BEGIN - PROMPT 17 15 "Tipo convocazione " - FIELD TIPOCONV - ITEM "D|Data fissa" - ITEM "G|dal Giorno" -END - -DATE F_DATAULTCON -BEGIN - PROMPT 17 16 "Data ultima conv. " - FIELD DATAULTCON - FLAGS "D" -END - -GROUPBOX DLG_NULL 25 6 -BEGIN - PROMPT 53 11 "Intestazione tessere" -END - -STRING F_INTESTAZ1 20 -BEGIN - PROMPT 55 12 "" - FIELD INTESTAZ1 -END - -STRING F_INTESTAZ2 20 -BEGIN - PROMPT 55 13 "" - FIELD INTESTAZ2 -END - -STRING F_INTESTAZ3 20 -BEGIN - PROMPT 55 14 "" - FIELD INTESTAZ3 -END - -STRING F_INTESTAZ4 20 -BEGIN - PROMPT 55 15 "" - FIELD INTESTAZ4 -END - -ENDPAGE - -PAGE "Sezioni 2" -1 -1 78 20 - -GROUPBOX DLG_NULL 77 4 -BEGIN - PROMPT 1 0 "" - FLAGS "R" -END - -STRING DLG_NULL 2 -BEGIN - PROMPT 2 1 "Cod. sezione " - FLAGS "D" - GROUP 1 -END - -STRING DLG_NULL 2 -BEGIN - PROMPT 2 2 "Cod. sottogruppo " - FLAGS "D" - GROUP 2 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 29 1 "Denominazione sez. " - FLAGS "D" - GROUP 3 -END - -STRING DLG_NULL 25 -BEGIN - PROMPT 29 2 "Denominazione sot. " - FLAGS "D" - GROUP 4 -END - -GROUPBOX DLG_NULL 35 8 -BEGIN - PROMPT 1 4 "Dati per stampa cartolina" -END - -STRING F_CONVORA 20 -BEGIN - PROMPT 2 5 "Orario " - FIELD CONVORA -END - -STRING F_CONVSEDE1 25 -BEGIN - PROMPT 2 6 "Sede " - FIELD CONVSEDE1 -END - -STRING F_CONVSEDE2 25 -BEGIN - PROMPT 2 7 " " - FIELD CONVSEDE2 -END - -STRING F_CONVSEDE3 25 -BEGIN - PROMPT 2 8 " " - FIELD CONVSEDE3 -END - -STRING F_CONVSEDE4 25 -BEGIN - PROMPT 2 9 " " - FIELD CONVSEDE4 -END - -STRING F_CONVNOTE 25 -BEGIN - PROMPT 2 10 "Note " - FIELD CONVNOTE -END - -GROUPBOX DLG_NULL 41 8 -BEGIN - PROMPT 37 4 "Parametri per chiusura fine anno" -END - -NUMBER F_DONEMER 3 -BEGIN - PROMPT 38 5 "Donazioni per passaggio a emeriti " - FIELD DONEMER - FLAGS "U" -END - -NUMBER F_INTESTI 2 -BEGIN - PROMPT 38 6 "Intervallo di estinzione in anni " - FIELD INTESTI - FLAGS "U" -END - -TEXT DLG_NULL -BEGIN - PROMPT 38 7 "Categorie:" -END - -STRING F_CATEMER 2 -BEGIN - PROMPT 39 8 "emeriti " - FIELD CATEMER - FLAGS "U" - USE CTD - INPUT CODTAB F_CATEMER - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@30" S0 - OUTPUT F_CATEMER CODTAB - OUTPUT F_DESC_CATEMER S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" -END - -STRING F_DESC_CATEMER 20 -BEGIN - PROMPT 56 8 "" - FLAGS "D" -END - -STRING F_CATESTI 2 -BEGIN - PROMPT 39 9 "estinti " - FIELD CATESTI - FLAGS "U" - USE CTD - INPUT CODTAB F_CATESTI - COPY DISPLAY F_CATEMER - OUTPUT F_CATESTI CODTAB - OUTPUT F_DESC_CATESTI S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" -END - -STRING F_DESC_CATESTI 20 -BEGIN - PROMPT 56 9 "" - FLAGS "D" -END - -STRING F_CATCANC 2 -BEGIN - PROMPT 39 10 "cancellati " - FIELD CATCANC - FLAGS "U" - USE CTD - INPUT CODTAB F_CATCANC - COPY DISPLAY F_CATEMER - OUTPUT F_CATCANC CODTAB - OUTPUT F_DESC_CATCANC S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" -END - -STRING F_DESC_CATCANC 20 -BEGIN - PROMPT 56 10 "" - FLAGS "D" -END - - -ENDPAGE - -ENDMASK +#include "at0700.h" +#include "lf.h" + +TOOLBAR "" 0 20 0 2 +#include +ENDPAGE + +PAGE "Sezioni 1" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 4 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +STRING F_CODSEZ 2 +BEGIN + PROMPT 2 1 "Cod. sezione " + FIELD CODSEZ + FLAGS "U" + KEY 1 + 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 + MESSAGE COPY,1@ + CHECKTYPE REQUIRED +END + +STRING F_CODSOT 2 +BEGIN + PROMPT 2 2 "Cod. sottogruppo " + FIELD CODSOT + FLAGS "U" + KEY 1 + COPY ALL F_CODSEZ + MESSAGE COPY,2@ + CHECKTYPE NORMAL + WARNING "Inserire il codice della sezione" +END + +STRING F_DENSEZ 25 +BEGIN + PROMPT 29 1 "Denominazione sez. " + FIELD DENSEZ + KEY 2 + USE LF_SEZIONI KEY 2 + INPUT DENSEZ F_DENSEZ + INPUT DENSOT F_DENSOT + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + DISPLAY "Cod.sez. " CODSEZ + DISPLAY "Cod.sot. " CODSOT + COPY OUTPUT F_CODSEZ + MESSAGE COPY,3@ + CHECKTYPE REQUIRED + WARNING "Inserire la denominazione della sezione" +END + +STRING F_DENSOT 25 +BEGIN + PROMPT 29 2 "Denominazione sot. " + FIELD DENSOT + KEY 2 + COPY ALL F_DENSEZ + MESSAGE COPY,4@ + CHECKTYPE NORMAL + WARNING "Inserire la denominazione del sottogruppo" +END + +GROUPBOX DLG_NULL 77 7 +BEGIN + PROMPT 1 4 "Dati anagrafici" +END + +STRING F_INDIRIZZO 50 +BEGIN + PROMPT 2 5 "Indirizzo " + FIELD INDIRIZZO +END + +STRING F_COM 4 +BEGIN + PROMPT 2 6 "Comune " + FIELD COM + FLAGS "U" + USE LF_COMUNI + INPUT STATO "" + INPUT COM F_COM +#include + OUTPUT F_COM COM + OUTPUT F_DENCOM DENCOM + OUTPUT F_PROVCOM PROVCOM + OUTPUT F_CAPCOM CAPCOM + CHECKTYPE NORMAL + WARNING "Comune assente" +END + +STRING F_DENCOM 48 +BEGIN + PROMPT 19 6 "" + USE LF_COMUNI KEY 2 + INPUT DENCOM F_DENCOM +#include + COPY OUTPUT F_COM + CHECKTYPE NORMAL +END + +STRING F_LOCALITA 4 +BEGIN + PROMPT 2 7 "Localita' " + FIELD LOCALITA + FLAGS "U" + USE LCP SELECT S7=#F_COM + INPUT CODTAB F_LOCALITA + DISPLAY "Codice" CODTAB + DISPLAY "Località@30" S0 + DISPLAY "CAP@5" S6 + OUTPUT F_LOCALITA CODTAB + OUTPUT F_DENLOC S0 + OUTPUT F_CAPCOM S6 + OUTPUT F_COM S7 + CHECKTYPE NORMAL + HELP "Codice localit… postale se diversa dal comune" +END + +STRING F_DENLOC 30 +BEGIN + PROMPT 19 7 "" + COPY USE F_LOCALITA + INPUT S0 F_DENLOC + DISPLAY "Località@30" S0 + DISPLAY "CAP@5" S6 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_LOCALITA + CHECKTYPE NORMAL + HELP "Localit… postale se diversa dal comune" +END + + +STRING F_PROVCOM 5 +BEGIN + PROMPT 71 6 "" + FLAGS "D" +END + +STRING F_CAPCOM 5 +BEGIN + PROMPT 67 7 "CAP " + FLAGS "D" +END + +STRING F_TELEFONO 15 +BEGIN + PROMPT 2 8 "Telefono " + FIELD TELEFONO +END + +STRING F_FAX 15 +BEGIN + PROMPT 32 8 "Fax " + FIELD FAX +END + +STRING F_REFERCED 50 +BEGIN + PROMPT 2 9 "Referente CED " + FIELD REFERCED +END + +RADIOBUTTON F_STATO 13 +BEGIN + PROMPT 1 11 "Stato" + FIELD STATO + ITEM "A|Attiva" + ITEM "E|Estinta" +END + + +GROUPBOX DLG_NULL 35 7 +BEGIN + PROMPT 16 11 "Parametri convocazione" +END + +NUMBER F_INTMINCONV 4 +BEGIN + PROMPT 17 12 "Int. min. convoc. " + FIELD INTMINCONV + HELP "Intervallo minimo di convocazione in giorni (dall'ultima don.)" +END + +NUMBER F_INTMIN 4 +BEGIN + PROMPT 17 13 "Int. avvisi: min. " + FIELD INTMIN +END + +NUMBER F_INTMAX 4 +BEGIN + PROMPT 17 14 " max. " + FIELD INTMAX +END + +LISTBOX F_TIPOCONV 11 +BEGIN + PROMPT 17 15 "Tipo convocazione " + FIELD TIPOCONV + ITEM "D|Data fissa" + ITEM "G|dal Giorno" +END + +DATE F_DATAULTCON +BEGIN + PROMPT 17 16 "Data ultima conv. " + FIELD DATAULTCON + FLAGS "D" +END + +GROUPBOX DLG_NULL 25 6 +BEGIN + PROMPT 53 11 "Intestazione tessere" +END + +STRING F_INTESTAZ1 20 +BEGIN + PROMPT 55 12 "" + FIELD INTESTAZ1 +END + +STRING F_INTESTAZ2 20 +BEGIN + PROMPT 55 13 "" + FIELD INTESTAZ2 +END + +STRING F_INTESTAZ3 20 +BEGIN + PROMPT 55 14 "" + FIELD INTESTAZ3 +END + +STRING F_INTESTAZ4 20 +BEGIN + PROMPT 55 15 "" + FIELD INTESTAZ4 +END + +ENDPAGE + +PAGE "Sezioni 2" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 4 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +STRING DLG_NULL 2 +BEGIN + PROMPT 2 1 "Cod. sezione " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 2 +BEGIN + PROMPT 2 2 "Cod. sottogruppo " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 29 1 "Denominazione sez. " + FLAGS "D" + GROUP 3 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 29 2 "Denominazione sot. " + FLAGS "D" + GROUP 4 +END + +GROUPBOX DLG_NULL 35 8 +BEGIN + PROMPT 1 4 "Dati per stampa cartolina" +END + +STRING F_CONVORA 20 +BEGIN + PROMPT 2 5 "Orario " + FIELD CONVORA +END + +STRING F_CONVSEDE1 25 +BEGIN + PROMPT 2 6 "Sede " + FIELD CONVSEDE1 +END + +STRING F_CONVSEDE2 25 +BEGIN + PROMPT 2 7 " " + FIELD CONVSEDE2 +END + +STRING F_CONVSEDE3 25 +BEGIN + PROMPT 2 8 " " + FIELD CONVSEDE3 +END + +STRING F_CONVSEDE4 25 +BEGIN + PROMPT 2 9 " " + FIELD CONVSEDE4 +END + +STRING F_CONVNOTE 25 +BEGIN + PROMPT 2 10 "Note " + FIELD CONVNOTE +END + +GROUPBOX DLG_NULL 41 8 +BEGIN + PROMPT 37 4 "Parametri per chiusura fine anno" +END + +NUMBER F_DONEMER 3 +BEGIN + PROMPT 38 5 "Donazioni per passaggio a emeriti " + FIELD DONEMER + FLAGS "U" +END + +NUMBER F_INTESTI 2 +BEGIN + PROMPT 38 6 "Intervallo di estinzione in anni " + FIELD INTESTI + FLAGS "U" +END + +TEXT DLG_NULL +BEGIN + PROMPT 38 7 "Categorie:" +END + +STRING F_CATEMER 2 +BEGIN + PROMPT 39 8 "emeriti " + FIELD CATEMER + FLAGS "U" + USE CTD + INPUT CODTAB F_CATEMER + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_CATEMER CODTAB + OUTPUT F_DESC_CATEMER S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" +END + +STRING F_DESC_CATEMER 20 +BEGIN + PROMPT 56 8 "" + FLAGS "D" +END + +STRING F_CATESTI 2 +BEGIN + PROMPT 39 9 "estinti " + FIELD CATESTI + FLAGS "U" + USE CTD + INPUT CODTAB F_CATESTI + COPY DISPLAY F_CATEMER + OUTPUT F_CATESTI CODTAB + OUTPUT F_DESC_CATESTI S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" +END + +STRING F_DESC_CATESTI 20 +BEGIN + PROMPT 56 9 "" + FLAGS "D" +END + +STRING F_CATCANC 2 +BEGIN + PROMPT 39 10 "cancellati " + FIELD CATCANC + FLAGS "U" + USE CTD + INPUT CODTAB F_CATCANC + COPY DISPLAY F_CATEMER + OUTPUT F_CATCANC CODTAB + OUTPUT F_DESC_CATCANC S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" +END + +STRING F_DESC_CATCANC 20 +BEGIN + PROMPT 56 10 "" + FLAGS "D" +END + + +ENDPAGE + +ENDMASK diff --git a/at/at0800a.uml b/at/at0800a.uml index ba2bc8437..525ca09cf 100755 --- a/at/at0800a.uml +++ b/at/at0800a.uml @@ -1,157 +1,157 @@ -#include "at0800.h" -#include "lf.h" - -TOOLBAR "" 0 20 0 2 -#include -ENDPAGE - -PAGE "Medici" -1 -1 78 20 - -GROUPBOX DLG_NULL 77 5 -BEGIN - PROMPT 1 1 "" - FLAGS "R" -END - -NUMBER F_CODMED 6 -BEGIN - PROMPT 2 2 "Cod. medico " - FIELD CODMED - FLAGS "U" - KEY 1 - USE LF_MEDICI - INPUT CODMED F_CODMED - DISPLAY "Codice " CODMED - DISPLAY "Cognome@25" COGNOME - DISPLAY "Nome@25" NOME - OUTPUT F_CODMED CODMED - OUTPUT F_COGNOME COGNOME - OUTPUT F_NOME NOME - CHECKTYPE REQUIRED -END - -STRING F_COGNOME 25 -BEGIN - PROMPT 2 3 "Cognome " - FIELD COGNOME - KEY 2 - USE LF_MEDICI KEY 2 - INPUT COGNOME F_COGNOME - INPUT NOME F_NOME - DISPLAY "Cognome@25" COGNOME - DISPLAY "Nome@25" NOME - DISPLAY "Codice " CODMED - COPY OUTPUT F_CODMED - CHECKTYPE REQUIRED - WARNING "Inserire il cognome del medico" -END - -STRING F_NOME 25 -BEGIN - PROMPT 2 4 "Nome " - FIELD NOME - KEY 2 - COPY ALL F_COGNOME - CHECKTYPE NORMAL -END - -GROUPBOX DLG_NULL 77 5 -BEGIN - PROMPT 1 6 "Indirizzo" -END - -STRING F_INDIRIZZO 50 -BEGIN - PROMPT 2 7 "Indirizzo " - FIELD INDIRIZZO -END - -STRING F_COM 4 -BEGIN - PROMPT 2 8 "Comune " - FIELD COM - FLAGS "U" - USE LF_COMUNI - INPUT STATO "" - INPUT COM F_COM -#include - OUTPUT F_COM COM - OUTPUT F_DENCOM DENCOM - OUTPUT F_PROVCOM PROVCOM - OUTPUT F_CAPCOM CAPCOM - CHECKTYPE NORMAL - WARNING "Comune assente" -END - -STRING F_DENCOM 48 -BEGIN - PROMPT 19 8 "" - USE LF_COMUNI KEY 2 - INPUT DENCOM F_DENCOM -#include - COPY OUTPUT F_COM - CHECKTYPE NORMAL -END - -STRING F_LOCALITA 4 -BEGIN - PROMPT 2 9 "Località " - FIELD LOCALITA - FLAGS "U" - USE LCP SELECT S7=#F_COM - INPUT CODTAB F_LOCALITA - DISPLAY "Codice" CODTAB - DISPLAY "Località@30" S0 - DISPLAY "CAP@5" S6 - OUTPUT F_LOCALITA CODTAB - OUTPUT F_DENLOC S0 - OUTPUT F_CAPCOM S6 - OUTPUT F_COM S7 - CHECKTYPE NORMAL - HELP "Codice localit… postale se diversa dal comune" -END - -STRING F_DENLOC 30 -BEGIN - PROMPT 19 9 "" - COPY USE F_LOCALITA - INPUT S0 F_DENLOC - DISPLAY "Località@30" S0 - DISPLAY "CAP@5" S6 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_LOCALITA - CHECKTYPE NORMAL - HELP "Localit… postale se diversa dal comune" -END - -STRING F_PROVCOM 5 -BEGIN - PROMPT 71 8 "" - FLAGS "D" -END - -STRING F_CAPCOM 5 -BEGIN - PROMPT 67 9 "CAP " - FLAGS "D" -END - -GROUPBOX DLG_NULL 77 3 -BEGIN - PROMPT 1 11 "Telefoni" -END - -STRING F_TELAMB 15 -BEGIN - PROMPT 2 12 "Ambulatorio " - FIELD TELAMB -END - -STRING F_TELABI 15 -BEGIN - PROMPT 40 12 "Abitazione " - FIELD TELABI -END - -ENDPAGE -ENDMASK +#include "at0800.h" +#include "lf.h" + +TOOLBAR "" 0 20 0 2 +#include +ENDPAGE + +PAGE "Medici" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 1 "" + FLAGS "R" +END + +NUMBER F_CODMED 6 +BEGIN + PROMPT 2 2 "Cod. medico " + FIELD CODMED + FLAGS "U" + KEY 1 + USE LF_MEDICI + INPUT CODMED F_CODMED + DISPLAY "Codice " CODMED + DISPLAY "Cognome@25" COGNOME + DISPLAY "Nome@25" NOME + OUTPUT F_CODMED CODMED + OUTPUT F_COGNOME COGNOME + OUTPUT F_NOME NOME + CHECKTYPE REQUIRED +END + +STRING F_COGNOME 25 +BEGIN + PROMPT 2 3 "Cognome " + FIELD COGNOME + KEY 2 + USE LF_MEDICI KEY 2 + INPUT COGNOME F_COGNOME + INPUT NOME F_NOME + DISPLAY "Cognome@25" COGNOME + DISPLAY "Nome@25" NOME + DISPLAY "Codice " CODMED + COPY OUTPUT F_CODMED + CHECKTYPE REQUIRED + WARNING "Inserire il cognome del medico" +END + +STRING F_NOME 25 +BEGIN + PROMPT 2 4 "Nome " + FIELD NOME + KEY 2 + COPY ALL F_COGNOME + CHECKTYPE NORMAL +END + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 6 "Indirizzo" +END + +STRING F_INDIRIZZO 50 +BEGIN + PROMPT 2 7 "Indirizzo " + FIELD INDIRIZZO +END + +STRING F_COM 4 +BEGIN + PROMPT 2 8 "Comune " + FIELD COM + FLAGS "U" + USE LF_COMUNI + INPUT STATO "" + INPUT COM F_COM +#include + OUTPUT F_COM COM + OUTPUT F_DENCOM DENCOM + OUTPUT F_PROVCOM PROVCOM + OUTPUT F_CAPCOM CAPCOM + CHECKTYPE NORMAL + WARNING "Comune assente" +END + +STRING F_DENCOM 48 +BEGIN + PROMPT 19 8 "" + USE LF_COMUNI KEY 2 + INPUT DENCOM F_DENCOM +#include + COPY OUTPUT F_COM + CHECKTYPE NORMAL +END + +STRING F_LOCALITA 4 +BEGIN + PROMPT 2 9 "Località " + FIELD LOCALITA + FLAGS "U" + USE LCP SELECT S7=#F_COM + INPUT CODTAB F_LOCALITA + DISPLAY "Codice" CODTAB + DISPLAY "Località@30" S0 + DISPLAY "CAP@5" S6 + OUTPUT F_LOCALITA CODTAB + OUTPUT F_DENLOC S0 + OUTPUT F_CAPCOM S6 + OUTPUT F_COM S7 + CHECKTYPE NORMAL + HELP "Codice localit… postale se diversa dal comune" +END + +STRING F_DENLOC 30 +BEGIN + PROMPT 19 9 "" + COPY USE F_LOCALITA + INPUT S0 F_DENLOC + DISPLAY "Località@30" S0 + DISPLAY "CAP@5" S6 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_LOCALITA + CHECKTYPE NORMAL + HELP "Localit… postale se diversa dal comune" +END + +STRING F_PROVCOM 5 +BEGIN + PROMPT 71 8 "" + FLAGS "D" +END + +STRING F_CAPCOM 5 +BEGIN + PROMPT 67 9 "CAP " + FLAGS "D" +END + +GROUPBOX DLG_NULL 77 3 +BEGIN + PROMPT 1 11 "Telefoni" +END + +STRING F_TELAMB 15 +BEGIN + PROMPT 2 12 "Ambulatorio " + FIELD TELAMB +END + +STRING F_TELABI 15 +BEGIN + PROMPT 40 12 "Abitazione " + FIELD TELABI +END + +ENDPAGE +ENDMASK diff --git a/at/at1.cpp b/at/at1.cpp index c2ea79883..9339ce4e4 100755 --- a/at/at1.cpp +++ b/at/at1.cpp @@ -1,23 +1,29 @@ -#include -#include - -#include "at1.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 = at1100(argc, argv); break; - case 1: - rt = at1200(argc, argv); break; -default: - error_box(usage, argv[0]) ; rt = 1; break; - } - return rt; -} +#include +#include +#include + +#include "at1.h" + +#define usage "Error - usage : %s -{0|1|2|3}" + +int main(int argc,char** argv) + +{ + int rt = -1 ; + const int r = (argc > 1) ? atoi(&argv[1][1]) : -1; + + switch (r) + { + case 0: + rt = at1100(argc,argv) ; break; + case 1: + rt = at1200(argc,argv) ; break; + case 2: + rt = at1300(argc,argv) ; break; + case 3: + rt = at1400(argc,argv) ; break; + default: + error_box(usage, argv[0]) ; break; + } + return rt; +} diff --git a/at/at1.url b/at/at1.url index ff33bb4a4..63aab9631 100755 --- a/at/at1.url +++ b/at/at1.url @@ -1,21 +1,31 @@ - #define APPNAME AVIS #define QAPPNAME "AVIS" #define LIBDIR f:\xvt.403\win_x86\ptk\lib +#define QFIRMNAME "AGA Informatica S.r.l." + #include -/* ---------------------------------------------------- - * at1 -0 - * ---------------------------------------------------- */ +/* at1 -0 chiusura periodica */ MENU TASK_MENUBAR - SUBMENU MENU_FILE "~File" + SUBMENU MENU_FILE "~File" -/* ---------------------------------------------------- - * at1 -1 - * ---------------------------------------------------- */ + +/* at1 -1 attribuzione benemerenze */ MENUBAR 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" + diff --git a/at/at1100.cpp b/at/at1100.cpp index de272773b..869c6b829 100755 --- a/at/at1100.cpp +++ b/at/at1100.cpp @@ -1,160 +1,168 @@ -#include #include +#include #include - -#include "lf.h" -#include "medici.h" -#include +#include #include "at1.h" +#include "lf.h" // se non lo metto non riesco a usare gli LF + +// nomi campi maschera #include "at1100a.h" + +// nomi dei campi +#include "soggetti.h" +#include "donaz.h" +#include "contsan.h" +#include "benem.h" +#include "storico.h" +#include "sezioni.h" -enum ts { undefined = 0, elenco = 1, etichette = 2 }; - -// definizione form per etichette -class TMed_form : public TForm +class TChiusura_app : public TPrintapp { -public: + static bool filter_func_chiusura(const TRelation *); + + TMask* _msk; + TRelation* _rel; + + int _cur; + TDate _data_chiusura; + TParagraph_string _operazione; + - 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); - + 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 TMask& get_mask() { return *_msk; } + public: + void filtra_sezioni(); 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(); } - -TRelation* TMed_form::relation() const { return cursor()->relation(); } - -void TMedprint_application::set_page(int file, int cnt) +void TChiusura_app::filtra_sezioni() { - // costruzione etichette - switch (_tipo_stampa) + 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 TChiusura_app::preprocess_page(int file, int counter) +{ + _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) { - case etichette: + const int totdon = sogg.get_int(SOG_TOTDON); + if (totdon >= donemer && donemer != 0) { - 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: + _operazione = "Passaggio a emeriti"; + sogg.put(SOG_CATDON,cat_emeriti); + sogg.rewrite(); + } + else + _operazione = "Cancellato"; + sogg.remove(); + } + else + { + TDate dataultdon = sogg.get(SOG_DATAULTDON); + if (dataultdon.ok()) { - 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)); + 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"; } - break; - } -} - -bool TMedprint_application::preprocess_page(int file, int counter) -{ - if (_tipo_stampa == elenco) - { - TString nome = current_cursor()->curr().get(MED_COGNOME); - nome << " "; - nome << current_cursor()->curr().get(MED_NOME); - _cognome_nome = nome; - TString 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); - } + else + _operazione = "Non doveva essere filtrato: data vuota"; + } 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; 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; - TString cogfr, cogto; - int sort = _msk->get_int(F_SORT); + if (tasto == K_ENTER) + { + _data_chiusura = _msk->get(F_DATA); 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(); + add_file(LF_SOGGETTI); + filtra_sezioni(); + current_cursor()->set_filterfunction(filter_func_chiusura,TRUE); + reset_print(); crea_intestazione(); return TRUE; } @@ -162,62 +170,50 @@ bool TMedprint_application::set_print(int) return FALSE; } -void TMedprint_application::crea_intestazione() + +void TChiusura_app::crea_intestazione() { - reset_header(); + reset_header(); + + TString sep(132); + TString16 data_stampa; - if (_tipo_stampa == elenco) - { - 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,"@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); + sep.fill('-'); + set_header(1, (const char *) sep); + sep = ""; + sep << "Pag. @#"; + sep.right_just(132); + set_header(2,(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---------------"); - } + set_header(2,"@0gCHIUSURA PERIODICA 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 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"); + _msk = new TMask("at1100a"); + _rel = new TRelation(LF_SOGGETTI); + _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 + _cur = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice + return TRUE; +} - _msk = new TMask("at1100a"); - - _form_eti = new TMed_form("AT_ETMED"); - return TRUE; -} - -bool TMedprint_application::user_destroy() +bool TChiusura_app::user_destroy() { - delete _msk; - delete _rel; - delete _form_eti; - return TRUE; + delete _rel; + delete _msk; + return TRUE; } int at1100(int argc, char* argv[]) { - - TMedprint_application a; - - a.run(argc, argv, "Stampa Medici"); - - return 0; -} + TChiusura_app a; + a.run(argc, argv, "Chiusura periodica"); + return 0; +} \ No newline at end of file diff --git a/at/at1100a.h b/at/at1100a.h index 4e336ab76..6a647ca38 100755 --- a/at/at1100a.h +++ b/at/at1100a.h @@ -1,10 +1,12 @@ -// stampa anagrafica medici +// chiusura periodica // 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 +#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 diff --git a/at/at1100a.uml b/at/at1100a.uml index 84543a54c..366ef2f4a 100755 --- a/at/at1100a.uml +++ b/at/at1100a.uml @@ -1,93 +1,137 @@ #include "at1100a.h" -#include #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 - 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@ + PROMPT 1 1 "Scelta sezioni/sottogruppi" END -GROUPBOX DLG_NULL 65 4 +STRING F_SEZINI 2 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 -NUMBER F_CODFR 6 +STRING F_D_SEZINI 25 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 + 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 -NUMBER F_CODTO 6 +STRING F_SOTINI 2 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 + PROMPT 2 3 " " + COPY ALL F_SEZINI + CHECKTYPE SEARCH + HELP "Codice sottogruppo da cui partire" 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 +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_COGTO 25 +STRING F_SEZFIN 2 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 + 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 -GROUPBOX DLG_NULL 50 4 +STRING F_D_SEZFIN 25 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 -BUTTON F_ELENCO 9 2 +STRING F_SOTFIN 2 BEGIN - PROMPT 4 12 "Elenco" - MESSAGE EXIT,F_ELENCO + PROMPT 41 3 " " + COPY ALL F_SEZFIN + CHECKTYPE SEARCH + HELP "Codice sottogruppo finale" END -BUTTON F_ETICHETTE 9 2 +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 16 12 "Etichette" - MESSAGE EXIT,F_ETICHETTE + 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 BUTTON DLG_QUIT 9 2 BEGIN - PROMPT 32 12 "" + PROMPT -22 14 "" END ENDPAGE diff --git a/at/at1200.cpp b/at/at1200.cpp index 69d7b875a..9207ada36 100755 --- a/at/at1200.cpp +++ b/at/at1200.cpp @@ -1,169 +1,177 @@ -#include #include +#include #include - -#include -#include "lf.h" -#include "sezioni.h" -#include +#include +#include +#include #include "at1.h" +#include "lf.h" // se non lo metto non riesco a usare gli LF + +// nomi campi maschera #include "at1200a.h" -enum ts { undefined = 0, elenco = 1, etichette = 2 }; + +// nomi dei campi +#include "soggetti.h" +#include "donaz.h" +#include "benem.h" +#include "sezioni.h" -// definizione form per etichette -class TSez_form : public TForm +class TAttriben_app : public TPrintapp { -public: + TMask* _msk; + TRelation* _rel; - 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() {}; -}; + TLocalisamfile* _donaz; + TLocalisamfile* _benem; + TRecord_array* _sdonazioni; + TRecord_array* _sbenemerenze; + + int _cur; + TDate _data_attribuzione; // data attribuzione benemerenza + TDate _data_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); -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); - + 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 TMask& get_mask() { return *_msk; } + public: + void filtra_sezioni(); void crea_intestazione(); - - TSezprint_application() : _data_stampa(TODAY), _indirizzo("", 22), _dencom("", 25) {} + void header_sezione(const TString16 codsez, const TString16 codsot); + 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(); } - -TRelation* TSez_form::relation() const { return cursor()->relation(); } - -void TSezprint_application::set_page(int file, int cnt) +void TAttriben_app::filtra_sezioni() { - 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; - } -} + 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 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 = ""; - 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); - } + if (_codsez != "**") + printer().formfeed(); + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } 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; tasto = _msk->run(); - - switch (tasto) - { - case F_ELENCO: - _tipo_stampa = elenco; - break; - case F_ETICHETTE: - _tipo_stampa = etichette; - break; - } - if (_tipo_stampa != undefined) - { - TString codfr, codto; - TString denfr, dento; - int sort = _msk->get_int(F_SORT); - + if (tasto == K_ENTER) + { + _codsez = "**"; + _codsot = "**"; + _data_attribuzione = _msk->get(F_DATA); + _tipoben = _msk->get(F_TIPOBEN); + TTable bnz("BNZ"); + bnz.put("CODTAB",(const char*) _tipoben); + if (bnz.read() == NOERR) + _numdon = bnz.get_int("I0"); + else + return FALSE; 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(); + add_file(LF_SOGGETTI); + filtra_sezioni(); + current_cursor()->setfilter("TOTDON!=0"); + current_cursor()->set_filterfunction(filter_func_attriben,TRUE); + reset_print(); crea_intestazione(); return TRUE; } @@ -171,64 +179,64 @@ bool TSezprint_application::set_print(int) return FALSE; } -void TSezprint_application::crea_intestazione() + +void TAttriben_app::crea_intestazione() { - reset_header(); - - if (_tipo_stampa == elenco) - { - 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,"@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---------------"); - } + reset_header(); + + TString sep(132); + sep = "ATTRIBUZIONE BENEMERENZA "; + sep << _tipoben; + 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 << "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@47Num.don."); + set_header(5,"@0g------@7g--@10g-------------------------@36g----------@47g--------"); } -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"); + _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 + + _donaz = new TLocalisamfile(LF_DONAZ); + _benem = new TLocalisamfile(LF_BENEM); - _cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice - _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per denominazione + _sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON); + _sbenemerenze = new TRecord_array(LF_BENEM, BEN_PROGBEN); + return TRUE; +} - _msk = new TMask("at1200a"); - - _form_eti = new TSez_form("AT_ETSEZ"); - return TRUE; -} - -bool TSezprint_application::user_destroy() +bool TAttriben_app::user_destroy() { - delete _msk; - delete _rel; - delete _form_eti; - return TRUE; + delete _rel; + delete _msk; + delete _donaz; + delete _benem; + delete _sdonazioni; + delete _sbenemerenze; + return TRUE; } int at1200(int argc, char* argv[]) { - - TSezprint_application a; - - a.run(argc, argv, "Stampa Sezioni"); - - return 0; -} + TAttriben_app a; + a.run(argc, argv, "Attribuzione benemerenze"); + return 0; +} \ No newline at end of file diff --git a/at/at1200a.h b/at/at1200a.h index cb627e76d..a9eb0090e 100755 --- a/at/at1200a.h +++ b/at/at1200a.h @@ -1,10 +1,14 @@ -// stampa anagrafica sezioni/sottogruppi +// attribuzione benemerenze // 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 +#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_TIPOBEN 110 +#define F_D_TIPOBEN 111 diff --git a/at/at1200a.uml b/at/at1200a.uml index b950ebe05..af5cd1982 100755 --- a/at/at1200a.uml +++ b/at/at1200a.uml @@ -1,93 +1,159 @@ #include "at1200a.h" -#include #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 - 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@ + PROMPT 1 1 "Scelta sezioni/sottogruppi" END -GROUPBOX DLG_NULL 65 4 +STRING F_SEZINI 2 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 -STRING F_CODFR 6 +STRING F_D_SEZINI 25 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 + 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_CODTO 6 +STRING F_SOTINI 2 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 + PROMPT 2 3 " " + COPY ALL F_SEZINI + CHECKTYPE SEARCH + HELP "Codice sottogruppo da cui partire" 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 +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_DENTO 25 +STRING F_SEZFIN 2 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 + 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 -GROUPBOX DLG_NULL 50 4 +STRING F_D_SEZFIN 25 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 -BUTTON F_ELENCO 9 2 +STRING F_SOTFIN 2 BEGIN - PROMPT 4 12 "Elenco" - MESSAGE EXIT,F_ELENCO + PROMPT 41 3 " " + COPY ALL F_SEZFIN + CHECKTYPE SEARCH + HELP "Codice sottogruppo finale" END -BUTTON F_ETICHETTE 9 2 +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 16 12 "Etichette" - MESSAGE EXIT,F_ETICHETTE + 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 BUTTON DLG_QUIT 9 2 BEGIN - PROMPT 32 12 "" + PROMPT -22 -1 "" END ENDPAGE diff --git a/at/at1300.cpp b/at/at1300.cpp new file mode 100755 index 000000000..0ee5ec423 --- /dev/null +++ b/at/at1300.cpp @@ -0,0 +1,247 @@ +#include +#include +#include +#include +#include +#include + +#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; +} \ No newline at end of file diff --git a/at/at1300a.h b/at/at1300a.h new file mode 100755 index 000000000..1844365f1 --- /dev/null +++ b/at/at1300a.h @@ -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 diff --git a/at/at1300a.uml b/at/at1300a.uml new file mode 100755 index 000000000..8e6218bd8 --- /dev/null +++ b/at/at1300a.uml @@ -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 diff --git a/at/at1400.cpp b/at/at1400.cpp new file mode 100755 index 000000000..7b4319fca --- /dev/null +++ b/at/at1400.cpp @@ -0,0 +1,346 @@ +//#include +#include +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" +#include + +#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; rfield(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; +} diff --git a/at/at1400a.h b/at/at1400a.h new file mode 100755 index 000000000..258761579 --- /dev/null +++ b/at/at1400a.h @@ -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 + diff --git a/at/at1400a.uml b/at/at1400a.uml new file mode 100755 index 000000000..48b2238ec --- /dev/null +++ b/at/at1400a.uml @@ -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 diff --git a/at/at2.cpp b/at/at2.cpp index 9631fc6a4..73974dfb8 100755 --- a/at/at2.cpp +++ b/at/at2.cpp @@ -1,31 +1,31 @@ -#include -#include - -#include "at2.h" - -#define usage "Error - usage : %s -[0,1,2,3,4,5]" - -int main(int argc, char** argv) -{ - int rt = 0 ; - const int r = (argc > 1) ? atoi(&argv[1][1]) : -1; - - switch (r) - { - case 0: - rt = at2100(argc, argv); break; - case 1: - rt = at2200(argc, argv); break; - case 2: - rt = at2300(argc, argv); break; - case 3: - rt = at2400(argc, argv); break; - case 4: - rt = at2500(argc, argv); break; - case 5: - rt = at2600(argc, argv); break; -default: - error_box(usage, argv[0]) ; rt = 1; break; - } - return rt; -} +#include +#include + +#include "at2.h" + +#define usage "Error - usage : %s -[0,1,2,3,4,5]" + +int main(int argc, char** argv) +{ + int rt = 0 ; + const int r = (argc > 1) ? atoi(&argv[1][1]) : -1; + + switch (r) + { + case 0: + rt = at2100(argc, argv); break; + case 1: + rt = at2200(argc, argv); break; + case 2: + rt = at2300(argc, argv); break; + case 3: + rt = at2400(argc, argv); break; + case 4: + rt = at2500(argc, argv); break; + case 5: + rt = at2600(argc, argv); break; +default: + error_box(usage, argv[0]) ; rt = 1; break; + } + return rt; +} diff --git a/at/at2.h b/at/at2.h index 9527ec61a..c41f06f05 100755 --- a/at/at2.h +++ b/at/at2.h @@ -1,12 +1,12 @@ #ifndef __AT2_H #define __AT2_H -int at2100(int argc, char* argv[]); // stampa soggetti sospesi -int at2200(int argc, char* argv[]); // stampa soggetti per età (da data nasc. a data nasc.) -int at2300(int argc, char* argv[]); // stampa soggetti esclusi -int at2400(int argc, char* argv[]); // stampa benemerenze assegnate -int at2500(int argc, char* argv[]); // stampa soggetti idonei -int at2600(int argc, char* argv[]); // stampa soggetti iscritti/dimessi +int at2100(int argc, char* argv[]); // elenco soggetti sospesi +int at2200(int argc, char* argv[]); // elenco soggetti per data di nascita +int at2300(int argc, char* argv[]); // elenco soggetti esclusi +int at2400(int argc, char* argv[]); // elenco soggetti modificati +int at2500(int argc, char* argv[]); // elenco soggetti idonei +int at2600(int argc, char* argv[]); // elenco soggetti iscritti/dimessi #endif // __AT2_H diff --git a/at/at2.url b/at/at2.url index 958a588ee..a448c990b 100755 --- a/at/at2.url +++ b/at/at2.url @@ -1,54 +1,39 @@ #define APPNAME AVIS #define QAPPNAME "AVIS" #define LIBDIR f:\xvt.403\win_x86\ptk\lib +#define QFIRMNAME "AGA Informatica S.r.l." #include -/* ---------------------------------------------------- - * at2 -0 - * ---------------------------------------------------- */ +/* at2 -0 elenco sospesi */ MENU TASK_MENUBAR SUBMENU MENU_FILE "~File" -/* ---------------------------------------------------- - * at2 -1 - * ---------------------------------------------------- */ +/* at2 -1 elenco soggetti modificati */ MENUBAR MENU_BAR(1) MENU MENU_BAR(1) SUBMENU MENU_FILE "~File" - -/* ---------------------------------------------------- - * at2 -2 - * ---------------------------------------------------- */ - +/* at2 -2 elenco esclusi */ MENUBAR MENU_BAR(2) MENU MENU_BAR(2) SUBMENU MENU_FILE "~File" -/* ---------------------------------------------------- - * at2 -3 - * - * ----------------------------------------------------*/ - +/* at2 -3 elenco soggetti modificati */ MENUBAR MENU_BAR(3) MENU MENU_BAR(3) SUBMENU MENU_FILE "~File" -/* ---------------------------------------------------- - * at2 -4 - * ---------------------------------------------------- */ +/* at2 -4 elenco idonei */ MENUBAR MENU_BAR(4) MENU MENU_BAR(4) SUBMENU MENU_FILE "~File" -/* ---------------------------------------------------- - * at2 -5 - * ---------------------------------------------------- */ +/* at2 -5 elenco iscritti/dimessi */ MENUBAR MENU_BAR(5) MENU MENU_BAR(5) diff --git a/at/at2100.cpp b/at/at2100.cpp index d3c5dd431..d8f65cdfc 100755 --- a/at/at2100.cpp +++ b/at/at2100.cpp @@ -1,326 +1,323 @@ -#include -#include -#include -#include - -#include "lf.h" -#include "soggetti.h" -#include "sezioni.h" - -#include "at2.h" -#include "at2100a.h" - -#define ALIAS_LCP 100 -#define ALIAS_TCS 200 - -enum ts { undefined = 0, elenco = 1, etichette = 2 }; - -// definizione form per etichette -class TEti_sospesi_form : public TForm -{ -public: - - virtual TCursor* cursor() const; - virtual TRelation* relation() const; - TPrint_section& get_body() { return section('B'); } ; - TEti_sospesi_form(): TForm() {}; - TEti_sospesi_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") - : TForm(form,code,editlevel,desc) {}; - virtual ~TEti_sospesi_form() {}; -}; - -class TSospesi_application : public TPrintapp -{ - TRelation* _rel; - TMask* _msk; - TEti_sospesi_form* _form_eti; - - TAssoc_array _categorie; - - int _cur1, _cur2, _cur3, _cur4; - TParagraph_string _cognome_nome; - TDate _data_stampa; - ts _tipo_stampa; - TString16 _codsez, _codsot; - - static bool filter_func_sospesi(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(TString16 codsez, TString16 codsot); - TMask& app_mask() { return *_msk; } - TSospesi_application() : _data_stampa(TODAY), _cognome_nome("",25) {} -}; - -HIDDEN inline TSospesi_application& app() { return (TSospesi_application&) main_app(); } - -TCursor* TEti_sospesi_form::cursor() const { return app().current_cursor(); } - -TRelation* TEti_sospesi_form::relation() const { return cursor()->relation(); } - -void TSospesi_application::filtra_sezioni() -{ - TString16 sezini = _msk->get(F_SEZINI); - TString16 sotini = _msk->get(F_SOTINI); - TString16 sezfin = _msk->get(F_SEZFIN); - TString16 sotfin = _msk->get(F_SOTFIN); - select_cursor(_cur4); - TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); - TRectype da(fl.curr()); - TRectype a(fl.curr()); - da.zero(); - a.zero(); - if ((sezini.not_empty()) && (sezini.ok())) - da.put(SOG_CODSEZ, sezini); - if ((sotini.not_empty()) && (sotini.ok())) - da.put(SOG_CODSOT, sotini); - if ((sezfin.not_empty()) && (sezfin.ok())) - a.put(SOG_CODSEZ, sezfin); - if ((sotfin.not_empty()) && (sotfin.ok())) - a.put(SOG_CODSOT, sotfin); - current_cursor()->setregion(da, a); -} - -void TSospesi_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_DATASTATO)); - set_row(1,"@58g@S", FLD(LF_SOGGETTI,SOG_STATO)); - set_row(1,"@61g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID)); - set_row(1,"@72g@S", FLD(LF_SOGGETTI,SOG_TIPOULTID)); - set_row(1,"@75g@pn", FLD(LF_SOGGETTI,SOG_INTSI,"###")); - set_row(1,"@79g@pn", FLD(LF_SOGGETTI,SOG_INTAF,"###")); - set_row(1,"@86g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); - set_row(1,"@97g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON)); - } - break; - } -} - -bool TSospesi_application::filter_func_sospesi(const TRelation* rel) -{ - bool filtrato = TRUE; - TLocalisamfile& sog = rel->lfile(); - // filtro per categorie - TAssoc_array categorie = app()._categorie; - if (categorie.items() != 0) - { - TString16 cat = sog.get(SOG_CATDON); - filtrato = categorie.is_key((const char*) cat); - } - return filtrato; -} - -bool TSospesi_application::preprocess_page(int file, int counter) -{ - // contatore soggetti stampati - // per ora non c'è - if (_tipo_stampa == elenco) - { - TString80 nome = current_cursor()->curr().get(SOG_COGNOME); - nome << " "; - nome << current_cursor()->curr().get(SOG_NOME); - _cognome_nome = nome; - - // salto pagina se cambio sezione - TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); - TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) - { - //if (!_codsez.blank()) - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - header_sezione(codsez, codsot); - } - } - return TRUE; -} - -void TSospesi_application::header_sezione(TString16 codsez, TString16 codsot) -{ - TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); - TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); - TString256 intestazione(132); - intestazione = "Sezione: "; - intestazione << codsez; - intestazione << "/"; - intestazione << codsot; - intestazione << " "; - intestazione << densez; - if ((densot.ok())&& (densot.not_empty())) - { - intestazione << "/"; - intestazione << densot; - } - intestazione.center_just(); - set_header(1,"@0g%s", (const char*) intestazione); - return; -} - -bool TSospesi_application::set_print(int m) -{ - _tipo_stampa = undefined; - KEY tasto; - tasto = _msk->run(); - switch (tasto) - { - case F_ELENCO: - _tipo_stampa = elenco; - //_codsez.spaces(2); - //_codsot.spaces(2); - _codsez = "**"; - _codsot = "**"; - break; - case F_ETICHETTE: - _tipo_stampa = etichette; - break; - } - if (_tipo_stampa != undefined) - { - reset_files(); - add_file(LF_SOGGETTI); - - // filtro per sezioni selezionati - filtra_sezioni(); - - // filtro per tipo sospensione - TString16 tiposo = _msk->get(F_TIPO); - if (tiposo.not_empty() && tiposo.ok()) - current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)tiposo)); - else - current_cursor()->setfilter("TCS->S6 == \"S\"", TRUE); - - // filtro per categorie - TString16 catpri = _msk->get(F_CAT1); - TString16 catsec = _msk->get(F_CAT2); - TString16 catter = _msk->get(F_CAT3); - TString16 catqua = _msk->get(F_CAT4); - TString16 catqui = _msk->get(F_CAT5); - TString16 catses = _msk->get(F_CAT6); - if (catpri.not_empty() && catpri.ok()) - _categorie.add((const char*) catpri); - if (catsec.not_empty() && catsec.ok()) - _categorie.add((const char*) catsec); - if (catter.not_empty() && catter.ok()) - _categorie.add((const char*) catter); - if (catqua.not_empty() && catqua.ok()) - _categorie.add((const char*) catqua); - if (catqui.not_empty() && catqui.ok()) - _categorie.add((const char*) catqui); - if (catses.not_empty() && catses.ok()) - _categorie.add((const char*) catses); - current_cursor()->set_filterfunction(filter_func_sospesi); - - reset_print(); - crea_intestazione(); - return TRUE; - } - else - return FALSE; -} - -void TSospesi_application::crea_intestazione() -{ - reset_header(); - - if (_tipo_stampa == elenco) - { - TString256 sep(132); - sep = "ELENCO SOSPESI"; - TString16 tipo = _msk->get(F_TIPO); - if ((tipo.ok()) && (tipo.not_empty())) - { - sep << ": tipo "; - sep << tipo; - TString80 dtipo = _msk->get(F_D_TIPO); - sep << " "; - sep << dtipo; - } - 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@47gSospensione@61gUltima idon.@75gIntervalli@86gUltima donaz.@100gUlt.controllo@114gPross.contr."); - set_header(5,"@76gSI AF"); - set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g-------------@61g-------------@75g----------@86g-------------@100g-------------@114g-------------"); - } -} - -bool TSospesi_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_COMCOM"); - // 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 - - _msk = new TMask("at2100a"); - - _form_eti = new TEti_sospesi_form("AT_ETSOG"); - - return TRUE; -} - -bool TSospesi_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _form_eti; - return TRUE; -} - -int at2100(int argc, char* argv[]) -{ - - TSospesi_application a; - - a.run(argc, argv, "Elenco sospesi"); - - return 0; -} +#include +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" + +#include "at2.h" +#include "at2100a.h" + +#define ALIAS_LCP 100 +#define ALIAS_TCS 200 + +enum ts { undefined = 0, elenco = 1, etichette = 2 }; + +// definizione form per etichette +class TEti_sospesi_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TEti_sospesi_form(): TForm() {}; + TEti_sospesi_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TEti_sospesi_form() {}; +}; + +class TSospesi_application : public TPrintapp +{ + TRelation* _rel; + TMask* _msk; + TEti_sospesi_form* _form_eti; + + TAssoc_array _categorie; + + int _cur1, _cur2, _cur3, _cur4; + TParagraph_string _cognome_nome; + TDate _data_stampa; + ts _tipo_stampa; + TString16 _codsez, _codsot; + + static bool filter_func_sospesi(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; } + TSospesi_application() : _data_stampa(TODAY), _cognome_nome("",25) {} +}; + +HIDDEN inline TSospesi_application& app() { return (TSospesi_application&) main_app(); } + +TCursor* TEti_sospesi_form::cursor() const { return app().current_cursor(); } + +TRelation* TEti_sospesi_form::relation() const { return cursor()->relation(); } + +void TSospesi_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 TSospesi_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_DATASTATO)); + set_row(1,"@58g@S", FLD(LF_SOGGETTI,SOG_STATO)); + set_row(1,"@61g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID)); + set_row(1,"@72g@S", FLD(LF_SOGGETTI,SOG_TIPOULTID)); + set_row(1,"@75g@pn", FLD(LF_SOGGETTI,SOG_INTSI,"###")); + set_row(1,"@79g@pn", FLD(LF_SOGGETTI,SOG_INTAF,"###")); + set_row(1,"@86g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + set_row(1,"@97g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON)); + } + break; + } +} + +bool TSospesi_application::filter_func_sospesi(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); + } + return filtrato; +} + +bool TSospesi_application::preprocess_page(int file, int counter) +{ + // contatore soggetti stampati + // per ora non c'è + if (_tipo_stampa == elenco) + { + TString80 nome = current_cursor()->curr().get(SOG_COGNOME); + 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.blank()) + if (_codsez != "**") + printer().formfeed(); + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } + } + return TRUE; +} + +void TSospesi_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 TSospesi_application::set_print(int m) +{ + _tipo_stampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_ELENCO: + _tipo_stampa = elenco; + //_codsez.spaces(2); + //_codsot.spaces(2); + _codsez = "**"; + _codsot = "**"; + break; + case F_ETICHETTE: + _tipo_stampa = etichette; + break; + } + if (_tipo_stampa != undefined) + { + reset_files(); + add_file(LF_SOGGETTI); + + // filtro per sezioni selezionati + filtra_sezioni(); + + // filtro per tipo sospensione + const TString16 tiposo = _msk->get(F_TIPO); + if (tiposo.not_empty() && tiposo.ok()) + current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)tiposo)); + else + current_cursor()->setfilter("TCS->S6 == \"S\"", TRUE); + + // 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); + current_cursor()->set_filterfunction(filter_func_sospesi); + + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TSospesi_application::crea_intestazione() +{ + reset_header(); + + if (_tipo_stampa == elenco) + { + TString sep(132); + sep = "ELENCO SOSPESI"; + const TString16 tipo = _msk->get(F_TIPO); + if ((tipo.ok()) && (tipo.not_empty())) + { + sep << ": tipo "; + sep << tipo; + const TString80 dtipo = _msk->get(F_D_TIPO); + sep << " "; + sep << dtipo; + } + sep.center_just(); + set_header(2, "@0g%s", (const char*) sep); + const 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@47gSospensione@61gUltima idon.@75gIntervalli@86gUltima donaz.@100gUlt.controllo@114gPross.contr."); + set_header(5,"@76gSI AF"); + set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g-------------@61g-------------@75g----------@86g-------------@100g-------------@114g-------------"); + } +} + +bool TSospesi_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 + + _msk = new TMask("at2100a"); + + _form_eti = new TEti_sospesi_form("AT_ETSOG"); + + return TRUE; +} + +bool TSospesi_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_eti; + return TRUE; +} + +int at2100(int argc, char* argv[]) +{ + + TSospesi_application a; + + a.run(argc, argv, "Elenco sospesi"); + + return 0; +} diff --git a/at/at2200.cpp b/at/at2200.cpp index 6c0585401..b18c10d8e 100755 --- a/at/at2200.cpp +++ b/at/at2200.cpp @@ -1,345 +1,338 @@ -#include -#include -#include - -#include "lf.h" -#include "soggetti.h" -#include "sezioni.h" -#include - -#include "at2.h" -#include "at2200a.h" - -#define ALIAS_LCP 100 -#define ALIAS_TCS 200 - -enum ts { undefined = 0, elenco = 1, etichette = 2 }; - -// definizione form per etichette -class TEti_pereta_form : public TForm -{ -public: - - virtual TCursor* cursor() const; - virtual TRelation* relation() const; - TPrint_section& get_body() { return section('B'); } ; - TEti_pereta_form(): TForm() {}; - TEti_pereta_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") - : TForm(form,code,editlevel,desc) {}; - virtual ~TEti_pereta_form() {}; -}; - -class TPereta_application : public TPrintapp -{ - static bool filter_func_pereta(const TRelation* rel); - - TRelation* _rel; - TMask* _msk; - TEti_pereta_form* _form_eti; - - TAssoc_array _categorie; - - int _cur1, _cur2, _cur3, _cur4; - TParagraph_string _cognome_nome, _dencom; - - TDate _data_stampa; - TDate _dataini, _datafin; - ts _tipo_stampa; - TString16 _codsez, _codsot; - - -protected: - virtual bool user_create(); - virtual bool user_destroy(); - virtual bool set_print(int m); - virtual void set_page(int file, int cnt); - virtual bool preprocess_page (int file, int counter); - -public: - void crea_intestazione(); - void filtra_sezioni(); - void header_sezione(TString16 codsez, TString16 codsot); - TMask& app_mask() { return *_msk; } - - TPereta_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {} -}; - -HIDDEN inline TPereta_application& app() { return (TPereta_application&) main_app(); } - -TCursor* TEti_pereta_form::cursor() const { return app().current_cursor(); } - -TRelation* TEti_pereta_form::relation() const { return cursor()->relation(); } - -void TPereta_application::filtra_sezioni() -{ - const char* sezini = _msk->get(F_SEZINI); - const char* sotini = _msk->get(F_SOTINI); - const char* sezfin = _msk->get(F_SEZFIN); - const char* sotfin = _msk->get(F_SOTFIN); - select_cursor(_cur4); - TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); - TRectype da(fl.curr()); - TRectype a(fl.curr()); - da.zero(); - a.zero(); - //if ((sezini.not_empty()) && (sezini.ok())) - if (sezini != NULL) - da.put(SOG_CODSEZ, sezini); - //if ((sotini.not_empty()) && (sotini.ok())) - if (sotini != NULL) - da.put(SOG_CODSOT, sotini); - //if ((sezfin.not_empty()) && (sezfin.ok())) - if (sezfin != NULL) - a.put(SOG_CODSEZ, sezfin); - //if ((sotfin.not_empty()) && (sotfin.ok())) - if (sotfin != NULL) - a.put(SOG_CODSOT, sotfin); - current_cursor()->setregion(da, a); -} - -void TPereta_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)); - } - break; - } -} - -bool TPereta_application::filter_func_pereta(const TRelation* rel) -{ - bool filtrato = TRUE; - TLocalisamfile& sog = rel->lfile(); - // filtro per categorie - TAssoc_array categorie = app()._categorie; - if (categorie.items() != 0) - { - TString16 cat = sog.get(SOG_CATDON); - filtrato = categorie.is_key((const char*) cat); - } - // filtro per data di nascita - if (filtrato) - { - TDate datanasc = sog.get(SOG_DATANASC); - if (app()._dataini.ok()) - filtrato = datanasc >= app()._dataini; - if (app()._datafin.ok()) - filtrato = (filtrato) && (datanasc <= app()._datafin); - } - return filtrato; -} - -void TPereta_application::header_sezione(TString16 codsez, TString16 codsot) -{ - TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); - TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); - TString256 intestazione(132); - intestazione = "Sezione: "; - intestazione << codsez; - intestazione << "/"; - intestazione << codsot; - intestazione << " "; - intestazione << densez; - if ((densot.ok())&& (densot.not_empty())) - { - intestazione << "/"; - intestazione << densot; - } - intestazione.center_just(); - set_header(1,"@0g%s", (const char*) intestazione); - return; -} - -bool TPereta_application::preprocess_page(int file, int counter) -{ - // contatore soggetti stampati - // per ora non c'è - if (_tipo_stampa == elenco) - { - TString80 nome = current_cursor()->curr().get(SOG_COGNOME); - nome << " "; - nome << current_cursor()->curr().get(SOG_NOME); - _cognome_nome = nome; - TString256 localita = ""; - localita << current_cursor()->curr(-ALIAS_LCP).get("S6"); - if (localita.not_empty() && localita.ok()) - { - localita << " "; - localita << current_cursor()->curr(-ALIAS_LCP).get("S0"); - localita << " - "; - } - else - { - localita = current_cursor()->curr(LF_COMUNI).get(COM_CAPCOM); - localita << " "; - } - localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); - localita.trim(); - _dencom = localita; - - // salto pagina se cambio sezione - TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); - TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) - { - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - header_sezione(codsez, codsot); - } - } - return TRUE; -} - -bool TPereta_application::set_print(int m) -{ - _tipo_stampa = undefined; - KEY tasto; - tasto = _msk->run(); - switch (tasto) - { - case F_ELENCO: - _tipo_stampa = elenco; - _codsez = "**"; - _codsot = "**"; - break; - case F_ETICHETTE: - _tipo_stampa = etichette; - break; - } - if (_tipo_stampa != undefined) - { - reset_files(); - add_file(LF_SOGGETTI); - filtra_sezioni(); - - _dataini = _msk->get(F_DATAINI); - _datafin = _msk->get(F_DATAFIN); - TString16 catpri = _msk->get(F_CAT1); - TString16 catsec = _msk->get(F_CAT2); - TString16 catter = _msk->get(F_CAT3); - TString16 catqua = _msk->get(F_CAT4); - TString16 catqui = _msk->get(F_CAT5); - TString16 catses = _msk->get(F_CAT6); - if (catpri.not_empty() && catpri.ok()) - _categorie.add((const char*) catpri); - if (catsec.not_empty() && catsec.ok()) - _categorie.add((const char*) catsec); - if (catter.not_empty() && catter.ok()) - _categorie.add((const char*) catter); - if (catqua.not_empty() && catqua.ok()) - _categorie.add((const char*) catqua); - if (catqui.not_empty() && catqui.ok()) - _categorie.add((const char*) catqui); - if (catses.not_empty() && catses.ok()) - _categorie.add((const char*) catses); - current_cursor()->set_filterfunction (filter_func_pereta); - - reset_print(); - crea_intestazione(); - return TRUE; - } - else - return FALSE; -} - -void TPereta_application::crea_intestazione() -{ - reset_header(); - - if (_tipo_stampa == elenco) - { - TString256 sep(132); - sep = "ELENCO PER DATA DI NASCITA"; - 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@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 TPereta_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 TEti_pereta_form("AT_ETSOG"); - _msk = new TMask("at2200a"); - return TRUE; -} - -bool TPereta_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _form_eti; - return TRUE; -} - -int at2200(int argc, char* argv[]) -{ - - TPereta_application a; - - a.run(argc, argv, "Elenco per data nascita"); - - return 0; -} +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" +#include + +#include "at2.h" +#include "at2200a.h" + +#define ALIAS_LCP 100 +#define ALIAS_TCS 200 + +enum ts { undefined = 0, elenco = 1, etichette = 2 }; + +// definizione form per etichette +class TEti_pereta_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TEti_pereta_form(): TForm() {}; + TEti_pereta_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TEti_pereta_form() {}; +}; + +class TPereta_application : public TPrintapp +{ + static bool filter_func_pereta(const TRelation* rel); + + TRelation* _rel; + TMask* _msk; + TEti_pereta_form* _form_eti; + + TAssoc_array _categorie; + + int _cur1, _cur2, _cur3, _cur4; + TParagraph_string _cognome_nome, _dencom; + + TDate _data_stampa; + TDate _dataini, _datafin; + ts _tipo_stampa; + TString16 _codsez, _codsot; + + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual bool set_print(int m); + virtual void set_page(int file, int cnt); + virtual bool preprocess_page (int file, int counter); + +public: + void crea_intestazione(); + void filtra_sezioni(); + void header_sezione(const TString16 codsez, const TString16 codsot); + TMask& app_mask() { return *_msk; } + + TPereta_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {} +}; + +HIDDEN inline TPereta_application& app() { return (TPereta_application&) main_app(); } + +TCursor* TEti_pereta_form::cursor() const { return app().current_cursor(); } + +TRelation* TEti_pereta_form::relation() const { return cursor()->relation(); } + +void TPereta_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 TPereta_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)); + } + break; + } +} + +bool TPereta_application::filter_func_pereta(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 data di nascita + if (filtrato) + { + const TDate datanasc = sog.get(SOG_DATANASC); + if (app()._dataini.ok()) + filtrato = datanasc >= app()._dataini; + if (app()._datafin.ok()) + filtrato = (filtrato) && (datanasc <= app()._datafin); + } + return filtrato; +} + +void TPereta_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 TPereta_application::preprocess_page(int file, int counter) +{ + // contatore soggetti stampati + // per ora non c'è + if (_tipo_stampa == elenco) + { + TString80 nome = current_cursor()->curr().get(SOG_COGNOME); + 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; +} + +bool TPereta_application::set_print(int m) +{ + _tipo_stampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_ELENCO: + _tipo_stampa = elenco; + _codsez = "**"; + _codsot = "**"; + break; + case F_ETICHETTE: + _tipo_stampa = etichette; + break; + } + if (_tipo_stampa != undefined) + { + reset_files(); + add_file(LF_SOGGETTI); + filtra_sezioni(); + + _dataini = _msk->get(F_DATAINI); + _datafin = _msk->get(F_DATAFIN); + 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_pereta); + + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TPereta_application::crea_intestazione() +{ + reset_header(); + + if (_tipo_stampa == elenco) + { + TString sep(132); + sep = "ELENCO PER DATA DI NASCITA"; + 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@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 TPereta_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 TEti_pereta_form("AT_ETSOG"); + _msk = new TMask("at2200a"); + return TRUE; +} + +bool TPereta_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_eti; + return TRUE; +} + +int at2200(int argc, char* argv[]) +{ + + TPereta_application a; + + a.run(argc, argv, "Elenco per data nascita"); + + return 0; +} diff --git a/at/at2300.cpp b/at/at2300.cpp index 4e029f2bc..b84cbf1f8 100755 --- a/at/at2300.cpp +++ b/at/at2300.cpp @@ -1,331 +1,328 @@ -#include -#include -#include -#include - -#include "lf.h" -#include "soggetti.h" -#include "sezioni.h" - -#include "at2.h" -#include "at2300a.h" - -#define ALIAS_LCP 100 -#define ALIAS_TCS 200 - -enum ts { undefined = 0, elenco = 1, etichette = 2 }; - -// definizione form per etichette -class TEti_esclusi_form : public TForm -{ -public: - - virtual TCursor* cursor() const; - virtual TRelation* relation() const; - TPrint_section& get_body() { return section('B'); } ; - TEti_esclusi_form(): TForm() {}; - TEti_esclusi_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") - : TForm(form,code,editlevel,desc) {}; - virtual ~TEti_esclusi_form() {}; -}; - -class TEsclusi_application : public TPrintapp -{ - static bool filter_func_esclusi(const TRelation* rel); - - TRelation* _rel; - TMask* _msk; - TEti_esclusi_form* _form_eti; - - TAssoc_array _categorie; - TString16 _tipoesc; - TDate _termineesc; - - int _cur1, _cur2, _cur3, _cur4; - TParagraph_string _cognome_nome; - TDate _data_stampa; - ts _tipo_stampa; - TString16 _codsez, _codsot; - -protected: - virtual bool user_create(); - virtual bool user_destroy(); - virtual bool set_print(int m); - virtual void set_page(int file, int cnt); - virtual bool preprocess_page (int file, int counter); - -public: - void crea_intestazione(); - void filtra_sezioni(); - void header_sezione(TString16 codsez, TString16 codsot); - TMask& app_mask() { return *_msk; } - TEsclusi_application() : _data_stampa(TODAY), _cognome_nome("",25) {} -}; - -HIDDEN inline TEsclusi_application& app() { return (TEsclusi_application&) main_app(); } - -TCursor* TEti_esclusi_form::cursor() const { return app().current_cursor(); } - -TRelation* TEti_esclusi_form::relation() const { return cursor()->relation(); } - -void TEsclusi_application::filtra_sezioni() -{ - TString16 sezini = _msk->get(F_SEZINI); - TString16 sotini = _msk->get(F_SOTINI); - TString16 sezfin = _msk->get(F_SEZFIN); - TString16 sotfin = _msk->get(F_SOTFIN); - select_cursor(_cur4); - TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); - TRectype da(fl.curr()); - TRectype a(fl.curr()); - da.zero(); - a.zero(); - if ((sezini.not_empty()) && (sezini.ok())) - da.put(SOG_CODSEZ, sezini); - if ((sotini.not_empty()) && (sotini.ok())) - da.put(SOG_CODSOT, sotini); - if ((sezfin.not_empty()) && (sezfin.ok())) - a.put(SOG_CODSEZ, sezfin); - if ((sotfin.not_empty()) && (sotfin.ok())) - a.put(SOG_CODSOT, sotfin); - current_cursor()->setregion(da, a); -} - -void TEsclusi_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@S", FLD(LF_SOGGETTI,SOG_ESCLUSO)); - set_row(1,"@50g@ld", FLD(LF_SOGGETTI,SOG_TERMESCL)); - set_row(1,"@61g@S", FLD(LF_SOGGETTI,SOG_MOTESCL)); - } - break; - } -} - -bool TEsclusi_application::filter_func_esclusi(const TRelation * rel) -{ - bool filtrato = TRUE; - TLocalisamfile& sog = rel->lfile(); - //filtro per categorie - TAssoc_array categorie = app()._categorie; - if (categorie.items() != 0) - { - TString16 cat = sog.get(SOG_CATDON); - filtrato = categorie.is_key((const char*) cat); - } - // filtro per termine esclusione - if (filtrato && app()._termineesc.ok()) - { - TDate terminesog = sog.get_date(SOG_TERMESCL); - filtrato = terminesog <= app()._termineesc; - } - return filtrato; -} - -bool TEsclusi_application::preprocess_page(int file, int counter) -{ - // contatore soggetti stampati - // per ora non c'è - if (_tipo_stampa == elenco) - { - TString80 nome = current_cursor()->curr().get(SOG_COGNOME); - nome << " "; - nome << current_cursor()->curr().get(SOG_NOME); - _cognome_nome = nome; - // salto pagina se cambio sezione - TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); - TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) - { - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - header_sezione(codsez, codsot); - } - } - return TRUE; -} - -void TEsclusi_application::header_sezione(TString16 codsez, TString16 codsot) -{ - TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); - TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); - TString256 intestazione(132); - intestazione = "Sezione: "; - intestazione << codsez; - intestazione << "/"; - intestazione << codsot; - intestazione << " "; - intestazione << densez; - if ((densot.ok())&& (densot.not_empty())) - { - intestazione << "/"; - intestazione << densot; - } - intestazione.center_just(); - set_header(1,"@0g%s", (const char*) intestazione); - return; -} - -bool TEsclusi_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 tipo esclusione - _tipoesc = _msk->get(F_TIPO); - if (_tipoesc.not_empty() && _tipoesc.ok()) - current_cursor()->setfilter(format("ESCLUSO == \"%s\"",(const char*)_tipoesc)); - else - current_cursor()->setfilter("ESCLUSO != \"\""); - - // filtro per categorie - TString16 catpri = _msk->get(F_CAT1); - TString16 catsec = _msk->get(F_CAT2); - TString16 catter = _msk->get(F_CAT3); - TString16 catqua = _msk->get(F_CAT4); - TString16 catqui = _msk->get(F_CAT5); - TString16 catses = _msk->get(F_CAT6); - if (catpri.not_empty() && catpri.ok()) - _categorie.add((const char*) catpri); - if (catsec.not_empty() && catsec.ok()) - _categorie.add((const char*) catsec); - if (catter.not_empty() && catter.ok()) - _categorie.add((const char*) catter); - if (catqua.not_empty() && catqua.ok()) - _categorie.add((const char*) catqua); - if (catqui.not_empty() && catqui.ok()) - _categorie.add((const char*) catqui); - if (catses.not_empty() && catses.ok()) - _categorie.add((const char*) catses); - // filtro per termine esclusione - _termineesc = _msk->get(F_DATA); - - current_cursor()->set_filterfunction(filter_func_esclusi); - - reset_print(); - crea_intestazione(); - return TRUE; - } - else - return FALSE; -} - -void TEsclusi_application::crea_intestazione() -{ - reset_header(); - - if (_tipo_stampa == elenco) - { - TString256 sep(90); - sep = "ELENCO ESCLUSI"; - if ((_tipoesc.ok()) && (_tipoesc.not_empty())) - { - sep << " "; - sep << _tipoesc; - } - if (_termineesc.ok()) - { - sep << " termine fino al "; - sep << _termineesc.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, "@78g%s", (const char*) sep); - - sep = ""; - sep.fill('-'); - set_header(3, (const char *) sep); - - set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gEsclusione@61gMotivo"); - set_header(5,"@47gTipo Termine"); - set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g-------------@61g------------------------------"); - - //set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gSospensione@61gUltima idon.@75gIntervalli@86gUltima donaz.@100gUlt.controllo@114gPross.contr."); - //set_header(5,"@76gSI AF"); - //set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g-------------@61g-------------@75g----------@86g-------------@100g-------------@114g-------------"); - - } -} - -bool TEsclusi_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 le 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("at2300a"); - _form_eti = new TEti_esclusi_form("AT_ETSOG"); - - return TRUE; -} - -bool TEsclusi_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _form_eti; - return TRUE; -} - -int at2300(int argc, char* argv[]) -{ - - TEsclusi_application a; - - a.run(argc, argv, "Elenco esclusi"); - - return 0; -} +#include +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" + +#include "at2.h" +#include "at2300a.h" + +#define ALIAS_LCP 100 +#define ALIAS_TCS 200 + +enum ts { undefined = 0, elenco = 1, etichette = 2 }; + +// definizione form per etichette +class TEti_esclusi_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TEti_esclusi_form(): TForm() {}; + TEti_esclusi_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TEti_esclusi_form() {}; +}; + +class TEsclusi_application : public TPrintapp +{ + static bool filter_func_esclusi(const TRelation* rel); + + TRelation* _rel; + TMask* _msk; + TEti_esclusi_form* _form_eti; + + TAssoc_array _categorie; + TString16 _tipoesc; + TDate _termineesc; + + int _cur1, _cur2, _cur3, _cur4; + TParagraph_string _cognome_nome; + TDate _data_stampa; + ts _tipo_stampa; + TString16 _codsez, _codsot; + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual bool set_print(int m); + virtual void set_page(int file, int cnt); + virtual bool preprocess_page (int file, int counter); + +public: + void crea_intestazione(); + void filtra_sezioni(); + void header_sezione(const TString16 codsez, const TString16 codsot); + TMask& app_mask() { return *_msk; } + TEsclusi_application() : _data_stampa(TODAY), _cognome_nome("",25) {} +}; + +HIDDEN inline TEsclusi_application& app() { return (TEsclusi_application&) main_app(); } + +TCursor* TEti_esclusi_form::cursor() const { return app().current_cursor(); } + +TRelation* TEti_esclusi_form::relation() const { return cursor()->relation(); } + +void TEsclusi_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 TEsclusi_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@S", FLD(LF_SOGGETTI,SOG_ESCLUSO)); + set_row(1,"@50g@ld", FLD(LF_SOGGETTI,SOG_TERMESCL)); + set_row(1,"@61g@S", FLD(LF_SOGGETTI,SOG_MOTESCL)); + } + break; + } +} + +bool TEsclusi_application::filter_func_esclusi(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 termine esclusione + if (filtrato && app()._termineesc.ok()) + { + const TDate terminesog = sog.get_date(SOG_TERMESCL); + filtrato = terminesog <= app()._termineesc; + } + return filtrato; +} + +bool TEsclusi_application::preprocess_page(int file, int counter) +{ + // contatore soggetti stampati + // per ora non c'è + if (_tipo_stampa == elenco) + { + TString80 nome = current_cursor()->curr().get(SOG_COGNOME); + 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 TEsclusi_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 TEsclusi_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 tipo esclusione + _tipoesc = _msk->get(F_TIPO); + if (_tipoesc.not_empty() && _tipoesc.ok()) + current_cursor()->setfilter(format("ESCLUSO == \"%s\"",(const char*)_tipoesc)); + else + current_cursor()->setfilter("ESCLUSO != \"\""); + + // 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 termine esclusione + _termineesc = _msk->get(F_DATA); + + current_cursor()->set_filterfunction(filter_func_esclusi); + + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TEsclusi_application::crea_intestazione() +{ + reset_header(); + + if (_tipo_stampa == elenco) + { + TString sep(90); + sep = "ELENCO ESCLUSI"; + if ((_tipoesc.ok()) && (_tipoesc.not_empty())) + { + sep << " "; + sep << _tipoesc; + } + if (_termineesc.ok()) + { + sep << " termine fino al "; + sep << _termineesc.string(); + } + sep.center_just(); + set_header(2, "@0g%s", (const char*) sep); + const TString16 data_stampa = _data_stampa.string(); + set_header(2,"@0g%10s", (const char*) data_stampa); + sep = ""; + sep << "Pag. @#"; + set_header(2, "@78g%s", (const char*) sep); + + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); + + set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gEsclusione@61gMotivo"); + set_header(5,"@47gTipo Termine"); + set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g-------------@61g------------------------------"); + + //set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gSospensione@61gUltima idon.@75gIntervalli@86gUltima donaz.@100gUlt.controllo@114gPross.contr."); + //set_header(5,"@76gSI AF"); + //set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g-------------@61g-------------@75g----------@86g-------------@100g-------------@114g-------------"); + + } +} + +bool TEsclusi_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 le 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("at2300a"); + _form_eti = new TEti_esclusi_form("AT_ETSOG"); + + return TRUE; +} + +bool TEsclusi_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_eti; + return TRUE; +} + +int at2300(int argc, char* argv[]) +{ + + TEsclusi_application a; + + a.run(argc, argv, "Elenco esclusi"); + + return 0; +} diff --git a/at/at2400.cpp b/at/at2400.cpp index 263d9edbc..19d551a16 100755 --- a/at/at2400.cpp +++ b/at/at2400.cpp @@ -1,241 +1,345 @@ -#include -#include -#include -#include - -#include -#include "lf.h" -#include "soggetti.h" -#include "benem.h" - -#include "at2.h" -#include "at2400a.h" - -class TBenem_application : public TPrintapp -{ - static bool filter_func_benem(const TRelation* rel); - - TRelation* _rel; - TMask* _msk; - TLocalisamfile* _benem; - TRecord_array* _sbenemerenze; - - int _cur1, _cur2, _cur3, _cur4; - TDate _data_stampa; - TString _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(); - - TMask& app_mask() { return *_msk; } - TBenem_application() : _data_stampa(TODAY) {} -}; - -HIDDEN inline TBenem_application& app() { return (TBenem_application&) main_app(); } - -void TBenem_application::filtra_sezioni() -{ - TString sezini = _msk->get(F_SEZINI); - TString sotini = _msk->get(F_SOTINI); - TString sezfin = _msk->get(F_SEZFIN); - TString sotfin = _msk->get(F_SOTFIN); - select_cursor(_cur4); - TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); - TRectype da(fl.curr()); - TRectype a(fl.curr()); - da.zero(); - a.zero(); - if ((sezini.not_empty()) && (sezini.ok())) - da.put(SOG_CODSEZ, sezini); - if ((sotini.not_empty()) && (sotini.ok())) - da.put(SOG_CODSOT, sotini); - if ((sezfin.not_empty()) && (sezfin.ok())) - a.put(SOG_CODSEZ, sezfin); - if ((sotfin.not_empty()) && (sotfin.ok())) - a.put(SOG_CODSOT, sotfin); - current_cursor()->setregion(da, a); -} - -void TBenem_application::set_page(int file, int cnt) -{ - set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"#########")); - set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_CATDON)); - set_row(1,"@13g@S", FLD(LF_SOGGETTI,SOG_COGNOME)); - set_row(1,"@39g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); - set_row(1,"@50g@S", FLD(LF_SOGGETTI,SOG_TOTDON)); - - set_row(2,"@13g@S", FLD(LF_SOGGETTI,SOG_NOME)); - set_row(2,"@50g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); -} - -bool TBenem_application::filter_func_benem(const TRelation* rel) -{ - bool filtrato = TRUE; - - TLocalisamfile* sog = &(rel->lfile(LF_SOGGETTI)); - - //filtro per 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) - { - TString cat = sog->curr().get(SOG_CATDON); - if (categorie.is_key((const char*) cat)) - filtrato = TRUE; - else - filtrato = FALSE; - } - return filtrato; -} - -bool TBenem_application::preprocess_page(int file, int counter) -{ - // contatore soggetti stampati - // per ora non c'è - // salto pagina se cambio sezione - TString codsez = current_cursor()->curr().get(SOG_CODSEZ); - TString codsot = current_cursor()->curr().get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) - { - //if (!_codsez.blank()) - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - } - return TRUE; -} - -int get_donbene(TString tipo) -{ - int donbene = 0; - TTable bnz("BNZ"); - bnz.put("CODTAB",tipo); - if (bnz.read() == NOERR) - donbene = bnz.get_int("I0"); - return donbene; - -} -bool TBenem_application::set_print(int) -{ - KEY tasto; - tasto = _msk->run(); - if (tasto == F_ELENCO) - { - //_codsez.spaces(2); - //_codsot.spaces(2); - _codsez = "**"; - _codsot = "**"; - reset_files(); - add_file(LF_SOGGETTI); - - TString tipoben = _msk->get(F_TIPOBEN); - - filtra_sezioni(); - - int donbene = get_donbene(tipoben); - - if (tipoben.not_empty() && tipoben.ok()) - current_cursor()->setfilter(format("TOTDON >= \"%i\"",donbene)); - else - current_cursor()->setfilter(format("TOTDON >= \"%i\"",donbene)); - // current_cursor()->setfilter("ESCLUSO != \"\""); - current_cursor()->set_filterfunction(filter_func_benem); - crea_intestazione(); - return TRUE; - } - else - return FALSE; -} - -void TBenem_application::crea_intestazione() -{ - TString sep(132); - TString data_stampa; - - reset_header(); - - sep.fill('-'); - set_header(1, (const char *) sep); - sep = ""; - sep << "Pag. @#"; - sep.right_just(132); - 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.fill('-'); - set_header(3, (const char *) sep); - - set_header(5,"@0gCod.@10gC.@13gCognome@39gNato il@50gData esc."); - set_header(6,"@13gNome@50gTipo esc."); - set_header(7,"@0g---------@10g--@13g-------------------------@39g----------@50g--------"); -} - -bool TBenem_application::user_create() -{ - _rel = new TRelation(LF_SOGGETTI); - //_rel->add(LF_BENEM, "CODICE==CODICE"); - _benem = new TLocalisamfile(LF_BENEM); - _sbenemerenze = new TRecord_array(LF_BENEM,BEN_PROGBEN); - - - _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("at2400a"); - return TRUE; -} - -bool TBenem_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _benem; - delete _sbenemerenze; - return TRUE; -} - -int at2400(int argc, char* argv[]) -{ - - TBenem_application a; - - a.run(argc, argv, "Elenco premiati"); - - return 0; -} +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" +#include + +#include "at2.h" +#include "at2400a.h" + +#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 +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TModificati_form(): TForm() {}; + TModificati_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TModificati_form() {}; +}; + +class TModificati_application : public TPrintapp +{ + static bool filter_func_modificati(const TRelation* rel); + + TRelation* _rel; + TMask* _msk; + TModificati_form* _form_pag; + TAssoc_array _categorie; + + int _cur1, _cur2, _cur3, _cur4; + TParagraph_string _cognome_nome, _dencom; + + TDate _data_stampa, _dataini; + 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; } + + TModificati_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {} +}; + +HIDDEN inline TModificati_application& app() { return (TModificati_application&) main_app(); } + +TCursor* TModificati_form::cursor() const { return app().current_cursor(); } + +TRelation* TModificati_form::relation() const { return cursor()->relation(); } + +void TModificati_application::filtra_sezioni() +{ + 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 TModificati_application::set_page(int file, int cnt) +{ + switch (_tipo_stampa) + { + case pagine: + { + TPrint_section& corpo = _form_pag->get_body(); + corpo.reset(); + corpo.update(); + for (int i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + set_row(i+1,riga); + } + force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage + // altrimenti stampa sempre la stessa etichetta + } + break; + case elenco: + { + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######")); + set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@10g#a", &_cognome_nome); + set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@47g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); + set_row(1,"@98g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(1,"@114g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(2,"@47g#a", &_dencom); + set_row(2,"@114g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + } + break; + } +} + +bool TModificati_application::filter_func_modificati(const TRelation* rel) +{ + bool filtrato = TRUE; + TLocalisamfile& sog = rel->lfile(); + //filtro per categorie + TAssoc_array& categorie = app()._categorie; + if (categorie.items() != 0) + { + const TString16 cat = sog.get(SOG_CATDON); + filtrato = categorie.is_key((const char*) cat); + } + // filtro per data aggiornamento + if (filtrato && app()._dataini.ok()) + { + const TDate datamod = sog.get(SOG_DATAULTAGG); + filtrato = (datamod >= app()._dataini); + } + return filtrato; +} + +bool TModificati_application::preprocess_page(int file, int counter) +{ + // contatore soggetti stampati + // per ora non c'è + if (_tipo_stampa == elenco) + { + TString80 nome = current_cursor()->curr().get(SOG_COGNOME); + nome << " "; + nome << current_cursor()->curr().get(SOG_NOME); + _cognome_nome = nome; + TString256 localita = ""; + localita << current_cursor()->curr(-ALIAS_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 + 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.blank()) + if (_codsez != "**") + printer().formfeed(); + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } + } + return TRUE; +} + +void TModificati_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 TModificati_application::set_print(int) +{ + _tipo_stampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_ELENCO: + _tipo_stampa = elenco; + _codsez = "**"; + _codsez = "**"; + break; + case F_PAGINE: + _tipo_stampa = pagine; + break; + } + if (_tipo_stampa != undefined) + { + reset_files(); + add_file(LF_SOGGETTI); + _dataini = _msk->get(F_DATAINI); + filtra_sezioni(); + + // filtro per categorie + 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_modificati); + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TModificati_application::crea_intestazione() +{ + reset_header(); + + if (_tipo_stampa == elenco) + { + 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 << "Pag. @#"; + set_header(2, "@120g%s", (const char*) sep); + + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); + + set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gIndirizzo@98gTelefono abit.@114gTelefono lavoro"); + set_header(5,"@47gCAP/Località/Comune/Prov.@114gTelefono altro"); + set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g--------------------------------------------------@98g---------------@114g---------------"); + } +} + +bool TModificati_application::user_create() +{ + _rel = new TRelation(LF_SOGGETTI); + _rel->add("CTD", "CODTAB==CATDON",1,0,ALIAS_CTD); + _rel->add("CTN", "CODTAB==CATNOND1",1,0,ALIAS_CTN1); + _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 + _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome + _cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice + _cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome + + _form_pag = new TModificati_form("AT_PAGIN"); + _msk = new TMask("at2400a"); + return TRUE; +} + +bool TModificati_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_pag; + return TRUE; +} + +int at2400(int argc, char* argv[]) +{ + + TModificati_application a; + + a.run(argc, argv, "Elenco soggetti modificati"); + + return 0; +} diff --git a/at/at2400a.h b/at/at2400a.h index b719cf34f..a443241de 100755 --- a/at/at2400a.h +++ b/at/at2400a.h @@ -1,4 +1,4 @@ -// stampa benemerenze da assegnare +// stampa elenco soggetti modficati a partire dal ... // definizione campi per maschera di selezione #define F_SEZINI 101 @@ -23,9 +23,8 @@ #define F_CAT6 211 #define F_D_CAT6 212 -#define F_TIPOBEN 301 -#define F_D_TIPOBEN 302 - +#define F_DATAINI 301 +//#define F_DATAFIN 302 #define F_ELENCO 401 -#define F_ETICHETTE 402 +#define F_PAGINE 402 diff --git a/at/at2400a.uml b/at/at2400a.uml index 70d8eed5b..1ee3a7165 100755 --- a/at/at2400a.uml +++ b/at/at2400a.uml @@ -246,30 +246,21 @@ END GROUPBOX DLG_NULL 77 3 BEGIN - PROMPT 1 10 "Tipo benemerenza" + PROMPT 1 10 "Selezione soggetti" END -STRING F_TIPOBEN 2 +DATE F_DATAINI BEGIN - PROMPT 2 11 "Benemerenza " - FLAGS "U" - 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" + PROMPT 2 11 "Soggetti modificati dal " + HELP "Data iniziale" END -STRING F_D_TIPOBEN 25 -BEGIN - PROMPT 26 11 "" - FLAGS "D" -END +//DATE F_DATAFIN +//BEGIN +// PROMPT 20 11 "Al " +// HELP "Data di nascita finale" +//END + GROUPBOX DLG_NULL 77 4 BEGIN @@ -282,10 +273,10 @@ BEGIN MESSAGE EXIT,F_ELENCO END -BUTTON F_ETICHETTE 9 2 +BUTTON F_PAGINE 9 2 BEGIN - PROMPT -23 14 "Etichette" - MESSAGE EXIT,F_ETICHETTE + PROMPT -23 14 "Pagine" + MESSAGE EXIT,F_PAGINE END BUTTON DLG_QUIT 9 2 diff --git a/at/at2500.cpp b/at/at2500.cpp index 9b8cc7d44..74b3cd289 100755 --- a/at/at2500.cpp +++ b/at/at2500.cpp @@ -1,379 +1,376 @@ -#include -#include -#include -#include - -#include "lf.h" -#include "soggetti.h" -#include "sezioni.h" - -#include "at2.h" -#include "at2500a.h" - -#define ALIAS_LCP 100 -#define ALIAS_TCS 200 - -enum ts { undefined = 0, elenco = 1, etichette = 2 }; - -// definizione form per etichette -class TEti_idonei_form : public TForm -{ -public: - - virtual TCursor* cursor() const; - virtual TRelation* relation() const; - TPrint_section& get_body() { return section('B'); } ; - TEti_idonei_form(): TForm() {}; - TEti_idonei_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") - : TForm(form,code,editlevel,desc) {}; - virtual ~TEti_idonei_form() {}; -}; - -class TIdonei_application : public TPrintapp -{ - TRelation* _rel; - TMask* _msk; - TEti_idonei_form* _form_eti; - TAssoc_array _categorie; - TString16 _tipoidon; - TString16 _idon1, _idon2, _idon3, _idon4; - - int _cur1, _cur2, _cur3, _cur4; - TParagraph_string _cognome_nome; - TDate _data_stampa; - ts _tipo_stampa; - TString16 _codsez, _codsot; - - static bool filter_func_idonei(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(TString16 codsez, TString16 codsot); - TMask& app_mask() { return *_msk; } - TIdonei_application() : _data_stampa(TODAY), _cognome_nome("",25) {} -}; - -HIDDEN inline TIdonei_application& app() { return (TIdonei_application&) main_app(); } - -TCursor* TEti_idonei_form::cursor() const { return app().current_cursor(); } - -TRelation* TEti_idonei_form::relation() const { return cursor()->relation(); } - -void TIdonei_application::filtra_sezioni() -{ - TString16 sezini = _msk->get(F_SEZINI); - TString16 sotini = _msk->get(F_SOTINI); - TString16 sezfin = _msk->get(F_SEZFIN); - TString16 sotfin = _msk->get(F_SOTFIN); - select_cursor(_cur4); - TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); - TRectype da(fl.curr()); - TRectype a(fl.curr()); - da.zero(); - a.zero(); - if ((sezini.not_empty()) && (sezini.ok())) - da.put(SOG_CODSEZ, sezini); - if ((sotini.not_empty()) && (sotini.ok())) - da.put(SOG_CODSOT, sotini); - if ((sezfin.not_empty()) && (sezfin.ok())) - a.put(SOG_CODSEZ, sezfin); - if ((sotfin.not_empty()) && (sotfin.ok())) - a.put(SOG_CODSOT, sotfin); - current_cursor()->setregion(da, a); -} - -void TIdonei_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 TIdonei_application::filter_func_idonei(const TRelation * rel) -{ - bool filtrato = TRUE; - TLocalisamfile& sog = rel->lfile(); - // filtro per categorie - TAssoc_array categorie = app()._categorie; - if (categorie.items() != 0) - { - TString16 catsog = sog.get(SOG_CATDON); - filtrato = categorie.is_key((const char*) catsog); - } - // filtro per idoneità - if (filtrato) - { - TAssoc_array idoneita; - TString16 idonsog = sog.get(SOG_IDON1); - if (idonsog.not_empty() && idonsog.ok()) - idoneita.add((const char*) idonsog); - idonsog = sog.get(SOG_IDON2); - if (idonsog.not_empty() && idonsog.ok()) - idoneita.add((const char*) idonsog); - idonsog = sog.get(SOG_IDON3); - if (idonsog.not_empty() && idonsog.ok()) - idoneita.add((const char*) idonsog); - idonsog = sog.get(SOG_IDON4); - if (idonsog.not_empty() && idonsog.ok()) - idoneita.add((const char*) idonsog); - if (idoneita.items() != 0) - { - if (app()._idon1.not_empty() && app()._idon1.ok()) - filtrato = idoneita.is_key((const char*) app()._idon1); - if (app()._idon2.not_empty() && app()._idon2.ok()) - filtrato = filtrato && idoneita.is_key((const char*) app()._idon2); - if (app()._idon3.not_empty() && app()._idon3.ok()) - filtrato = filtrato && idoneita.is_key((const char*) app()._idon3); - if (app()._idon4.not_empty() && app()._idon4.ok()) - filtrato = filtrato && idoneita.is_key((const char*) app()._idon4); - } - } - return filtrato; -} - -bool TIdonei_application::preprocess_page(int file, int counter) -{ - // contatore soggetti stampati - // per ora non c'è - if (_tipo_stampa == elenco) - { - TString80 nome = current_cursor()->curr().get(SOG_COGNOME); - nome << " "; - nome << current_cursor()->curr().get(SOG_NOME); - _cognome_nome = nome; - - // salto pagina se cambio sezione - TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); - TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) - { - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - header_sezione(codsez, codsot); - } - } - return TRUE; -} - -void TIdonei_application::header_sezione(TString16 codsez, TString16 codsot) -{ - TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); - TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); - TString256 intestazione(132); - intestazione = "Sezione: "; - intestazione << codsez; - intestazione << "/"; - intestazione << codsot; - intestazione << " "; - intestazione << densez; - if ((densot.ok())&& (densot.not_empty())) - { - intestazione << "/"; - intestazione << densot; - } - intestazione.center_just(); - set_header(1,"@0g%s", (const char*) intestazione); - return; -} - -bool TIdonei_application::set_print(int m) -{ - _tipo_stampa = undefined; - KEY tasto; - tasto = _msk->run(); - switch (tasto) - { - case F_ELENCO: - _tipo_stampa = elenco; - //_codsez.spaces(2); - //_codsot.spaces(2); - _codsez = "**"; - _codsot = "**"; - break; - case F_ETICHETTE: - _tipo_stampa = etichette; - break; - } - if (_tipo_stampa != undefined) - { - reset_files(); - add_file(LF_SOGGETTI); - - // filtro per sezioni selezionati - filtra_sezioni(); - - // filtro per tipo idoneità - _tipoidon = _msk->get(F_TIPO); - if (_tipoidon.not_empty() && _tipoidon.ok()) - current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)_tipoidon)); - else - current_cursor()->setfilter("(TCS->S6 == \"I\") || (TCS->S6 == \"F\")", TRUE); - - // filtro per categorie - TString16 catpri = _msk->get(F_CAT1); - TString16 catsec = _msk->get(F_CAT2); - TString16 catter = _msk->get(F_CAT3); - TString16 catqua = _msk->get(F_CAT4); - TString16 catqui = _msk->get(F_CAT5); - TString16 catses = _msk->get(F_CAT6); - if (catpri.not_empty() && catpri.ok()) - _categorie.add((const char*) catpri); - if (catsec.not_empty() && catsec.ok()) - _categorie.add((const char*) catsec); - if (catter.not_empty() && catter.ok()) - _categorie.add((const char*) catter); - if (catqua.not_empty() && catqua.ok()) - _categorie.add((const char*) catqua); - if (catqui.not_empty() && catqui.ok()) - _categorie.add((const char*) catqui); - if (catses.not_empty() && catses.ok()) - _categorie.add((const char*) catses); - - // filtro per idoneita - _idon1 = _msk->get(F_IDON1); - _idon2 = _msk->get(F_IDON2); - _idon3 = _msk->get(F_IDON3); - _idon4 = _msk->get(F_IDON4); - - current_cursor()->set_filterfunction(filter_func_idonei); - - reset_print(); - crea_intestazione(); - return TRUE; - } - else - return FALSE; -} - -void TIdonei_application::crea_intestazione() -{ - reset_header(); - - if (_tipo_stampa == elenco) - { - TString256 sep(132); - sep = "ELENCO IDONEI"; - if ((_tipoidon.ok()) && (_tipoidon.not_empty())) - { - sep << ": tipo "; - sep << _tipoidon; - TString80 dtipo = _msk->get(F_D_TIPO); - sep << " "; - sep << dtipo; - } - if ((_idon1.ok()) && (_idon1.not_empty())) - { - sep << " per "; - sep << _idon1; - } - if ((_idon2.ok()) && (_idon2.not_empty())) - { - sep << " "; - sep << _idon2; - } - if ((_idon3.ok()) && (_idon3.not_empty())) - { - sep << " "; - sep << _idon3; - } - if ((_idon4.ok()) && (_idon4.not_empty())) - { - sep << " "; - sep << _idon4; - } - 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 TIdonei_application::user_create() -{ - _rel = new TRelation(LF_SOGGETTI); - _rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS); - _rel->add("LCP", "CODTAB==DOM_COLOC",1,0,ALIAS_LCP); - _rel->add(LF_COMUNI, "COM==DOM_CODCOM"); - // 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("at2500a"); - - _form_eti = new TEti_idonei_form("AT_ETSOG"); - - return TRUE; -} - -bool TIdonei_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _form_eti; - return TRUE; -} - -int at2500(int argc, char* argv[]) -{ - - TIdonei_application a; - - a.run(argc, argv, "Elenco idonei"); - - return 0; -} +#include +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" + +#include "at2.h" +#include "at2500a.h" + +#define ALIAS_LCP 100 +#define ALIAS_TCS 200 + +enum ts { undefined = 0, elenco = 1, etichette = 2 }; + +// definizione form per etichette +class TEti_idonei_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TEti_idonei_form(): TForm() {}; + TEti_idonei_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TEti_idonei_form() {}; +}; + +class TIdonei_application : public TPrintapp +{ + TRelation* _rel; + TMask* _msk; + TEti_idonei_form* _form_eti; + TAssoc_array _categorie; + TString16 _tipoidon; + TString16 _idon1, _idon2, _idon3, _idon4; + + int _cur1, _cur2, _cur3, _cur4; + TParagraph_string _cognome_nome; + TDate _data_stampa; + ts _tipo_stampa; + TString16 _codsez, _codsot; + + static bool filter_func_idonei(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; } + TIdonei_application() : _data_stampa(TODAY), _cognome_nome("",25) {} +}; + +HIDDEN inline TIdonei_application& app() { return (TIdonei_application&) main_app(); } + +TCursor* TEti_idonei_form::cursor() const { return app().current_cursor(); } + +TRelation* TEti_idonei_form::relation() const { return cursor()->relation(); } + +void TIdonei_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 TIdonei_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 TIdonei_application::filter_func_idonei(const TRelation * rel) +{ + bool filtrato = TRUE; + TLocalisamfile& sog = rel->lfile(); + // filtro per categorie + TAssoc_array& categorie = app()._categorie; + if (categorie.items() != 0) + { + const TString16 catsog = sog.get(SOG_CATDON); + filtrato = categorie.is_key((const char*) catsog); + } + // filtro per idoneità + if (filtrato) + { + TAssoc_array idoneita; + TString16 idonsog = sog.get(SOG_IDON1); + if (idonsog.not_empty() && idonsog.ok()) + idoneita.add((const char*) idonsog); + idonsog = sog.get(SOG_IDON2); + if (idonsog.not_empty() && idonsog.ok()) + idoneita.add((const char*) idonsog); + idonsog = sog.get(SOG_IDON3); + if (idonsog.not_empty() && idonsog.ok()) + idoneita.add((const char*) idonsog); + idonsog = sog.get(SOG_IDON4); + if (idonsog.not_empty() && idonsog.ok()) + idoneita.add((const char*) idonsog); + if (idoneita.items() != 0) + { + if (app()._idon1.not_empty() && app()._idon1.ok()) + filtrato = idoneita.is_key((const char*) app()._idon1); + if (app()._idon2.not_empty() && app()._idon2.ok()) + filtrato = filtrato && idoneita.is_key((const char*) app()._idon2); + if (app()._idon3.not_empty() && app()._idon3.ok()) + filtrato = filtrato && idoneita.is_key((const char*) app()._idon3); + if (app()._idon4.not_empty() && app()._idon4.ok()) + filtrato = filtrato && idoneita.is_key((const char*) app()._idon4); + } + } + return filtrato; +} + +bool TIdonei_application::preprocess_page(int file, int counter) +{ + // contatore soggetti stampati + // per ora non c'è + if (_tipo_stampa == elenco) + { + TString80 nome = current_cursor()->curr().get(SOG_COGNOME); + 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 TIdonei_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 TIdonei_application::set_print(int m) +{ + _tipo_stampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_ELENCO: + _tipo_stampa = elenco; + //_codsez.spaces(2); + //_codsot.spaces(2); + _codsez = "**"; + _codsot = "**"; + break; + case F_ETICHETTE: + _tipo_stampa = etichette; + break; + } + if (_tipo_stampa != undefined) + { + reset_files(); + add_file(LF_SOGGETTI); + + // filtro per sezioni selezionati + filtra_sezioni(); + + // filtro per tipo idoneità + _tipoidon = _msk->get(F_TIPO); + if (_tipoidon.not_empty() && _tipoidon.ok()) + current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)_tipoidon)); + else + current_cursor()->setfilter("(TCS->S6 == \"I\") || (TCS->S6 == \"F\")", TRUE); + + // 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 idoneita + _idon1 = _msk->get(F_IDON1); + _idon2 = _msk->get(F_IDON2); + _idon3 = _msk->get(F_IDON3); + _idon4 = _msk->get(F_IDON4); + + current_cursor()->set_filterfunction(filter_func_idonei); + + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TIdonei_application::crea_intestazione() +{ + reset_header(); + + if (_tipo_stampa == elenco) + { + TString sep(132); + sep = "ELENCO IDONEI"; + if ((_tipoidon.ok()) && (_tipoidon.not_empty())) + { + sep << ": tipo "; + sep << _tipoidon; + const TString80 dtipo = _msk->get(F_D_TIPO); + sep << " "; + sep << dtipo; + } + if ((_idon1.ok()) && (_idon1.not_empty())) + { + sep << " per "; + sep << _idon1; + } + if ((_idon2.ok()) && (_idon2.not_empty())) + { + sep << " "; + sep << _idon2; + } + if ((_idon3.ok()) && (_idon3.not_empty())) + { + sep << " "; + sep << _idon3; + } + if ((_idon4.ok()) && (_idon4.not_empty())) + { + sep << " "; + sep << _idon4; + } + sep.center_just(); + set_header(2, "@0g%s", (const char*) sep); + const 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 TIdonei_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 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("at2500a"); + + _form_eti = new TEti_idonei_form("AT_ETSOG"); + + return TRUE; +} + +bool TIdonei_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_eti; + return TRUE; +} + +int at2500(int argc, char* argv[]) +{ + + TIdonei_application a; + + a.run(argc, argv, "Elenco idonei"); + + return 0; +} diff --git a/at/at2600.cpp b/at/at2600.cpp index bd5d2e4b9..31701cf44 100755 --- a/at/at2600.cpp +++ b/at/at2600.cpp @@ -1,335 +1,330 @@ -#include -#include -#include -#include - -#include "lf.h" -#include "soggetti.h" -#include "sezioni.h" - -#include "at2.h" -#include "at2600a.h" - -#define ALIAS_LCP 100 - -#define ISCRITTI 'I' -enum ts { undefined = 0, elenco = 1, etichette = 2 }; - -// definizione form per etichette -class TEti_iscritti_form : public TForm -{ -public: - - virtual TCursor* cursor() const; - virtual TRelation* relation() const; - TPrint_section& get_body() { return section('B'); } ; - TEti_iscritti_form(): TForm() {}; - TEti_iscritti_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") - : TForm(form,code,editlevel,desc) {}; - virtual ~TEti_iscritti_form() {}; -}; - -class TIscritti_application : public TPrintapp -{ - TRelation* _rel; - TMask* _msk; - TEti_iscritti_form* _form_eti; - - TAssoc_array _categorie; - - int _cur1, _cur2, _cur3, _cur4; - TParagraph_string _cognome_nome; - TDate _data_stampa; - ts _tipo_stampa; - TString16 _codsez, _codsot; - char _tipo_iscdim; // iscritti o dimessi - TDate _dataini, _datafin; - - static bool filter_func_iscritti(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(TString16 codsez, TString16 codsot); - TMask& app_mask() { return *_msk; } - TIscritti_application() : _data_stampa(TODAY), _cognome_nome("",25) {} -}; - -HIDDEN inline TIscritti_application& app() { return (TIscritti_application&) main_app(); } - -TCursor* TEti_iscritti_form::cursor() const { return app().current_cursor(); } - -TRelation* TEti_iscritti_form::relation() const { return cursor()->relation(); } - -void TIscritti_application::filtra_sezioni() -{ - TString16 sezini = _msk->get(F_SEZINI); - TString16 sotini = _msk->get(F_SOTINI); - TString16 sezfin = _msk->get(F_SEZFIN); - TString16 sotfin = _msk->get(F_SOTFIN); - select_cursor(_cur4); - TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); - TRectype da(fl.curr()); - TRectype a(fl.curr()); - da.zero(); - a.zero(); - if ((sezini.not_empty()) && (sezini.ok())) - da.put(SOG_CODSEZ, sezini); - if ((sotini.not_empty()) && (sotini.ok())) - da.put(SOG_CODSOT, sotini); - if ((sezfin.not_empty()) && (sezfin.ok())) - a.put(SOG_CODSEZ, sezfin); - if ((sotfin.not_empty()) && (sotfin.ok())) - a.put(SOG_CODSOT, sotfin); - current_cursor()->setregion(da, a); -} - -void TIscritti_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_DATAISC)); - set_row(1,"@58g@ld", FLD(LF_SOGGETTI,SOG_DATADIM)); - } - break; - } -} - -bool TIscritti_application::filter_func_iscritti(const TRelation * rel) -{ - bool filtrato = TRUE; - TLocalisamfile& sog = rel->lfile(); - // filtro per categorie - TAssoc_array categorie = app()._categorie; - if (categorie.items() != 0) - { - TString16 cat = sog.get(SOG_CATDON); - filtrato = categorie.is_key((const char*) cat); - } - // filtrp per date iscrizione/dimissione - if (filtrato) - { - if (app()._tipo_iscdim == ISCRITTI) - { - TDate dataisc = sog.get(SOG_DATAISC); - filtrato = (dataisc >= app()._dataini && dataisc <= app()._datafin); - } - else - { - TDate datadim = sog.get(SOG_DATADIM); - filtrato = (datadim >= app()._dataini && datadim <= app()._datafin); - } - } - return filtrato; -} - -bool TIscritti_application::preprocess_page(int file, int counter) -{ - // contatore soggetti stampati - // per ora non c'è - if (_tipo_stampa == elenco) - { - TString80 nome = current_cursor()->curr().get(SOG_COGNOME); - nome << " "; - nome << current_cursor()->curr().get(SOG_NOME); - _cognome_nome = nome; - - // salto pagina se cambio sezione - TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); - TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) - { - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - header_sezione(codsez, codsot); - } - } - return TRUE; -} - -void TIscritti_application::header_sezione(TString16 codsez, TString16 codsot) -{ - TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); - TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); - TString256 intestazione(132); - intestazione = "Sezione: "; - intestazione << codsez; - intestazione << "/"; - intestazione << codsot; - intestazione << " "; - intestazione << densez; - if ((densot.ok())&& (densot.not_empty())) - { - intestazione << "/"; - intestazione << densot; - } - intestazione.center_just(); - set_header(1,"@0g%s", (const char*) intestazione); - return; -} - -bool TIscritti_application::set_print(int m) -{ - _tipo_stampa = undefined; - KEY tasto; - tasto = _msk->run(); - switch (tasto) - { - case F_ELENCO: - _tipo_stampa = elenco; - //_codsez.spaces(2); - //_codsot.spaces(2); - _codsez = "**"; - _codsot = "**"; - break; - case F_ETICHETTE: - _tipo_stampa = etichette; - break; - } - if (_tipo_stampa != undefined) - { - reset_files(); - add_file(LF_SOGGETTI); - // filtro per sezioni - filtra_sezioni(); - // filtro per categorie - TString16 catpri = _msk->get(F_CAT1); - TString16 catsec = _msk->get(F_CAT2); - TString16 catter = _msk->get(F_CAT3); - TString16 catqua = _msk->get(F_CAT4); - TString16 catqui = _msk->get(F_CAT5); - TString16 catses = _msk->get(F_CAT6); - if (catpri.not_empty() && catpri.ok()) - _categorie.add((const char*) catpri); - if (catsec.not_empty() && catsec.ok()) - _categorie.add((const char*) catsec); - if (catter.not_empty() && catter.ok()) - _categorie.add((const char*) catter); - if (catqua.not_empty() && catqua.ok()) - _categorie.add((const char*) catqua); - if (catqui.not_empty() && catqui.ok()) - _categorie.add((const char*) catqui); - if (catses.not_empty() && catses.ok()) - _categorie.add((const char*) catses); - // filtro per iscritti/dimessi e date - _tipo_iscdim = _msk->get(F_TIPO)[0]; - _dataini = _msk->get(F_DATAINI); - _datafin = _msk->get(F_DATAFIN); - - current_cursor()->set_filterfunction(filter_func_iscritti); - - reset_print(); - crea_intestazione(); - return TRUE; - } - else - return FALSE; -} - -void TIscritti_application::crea_intestazione() -{ - reset_header(); - - if (_tipo_stampa == elenco) - { - TString256 sep(132); - sep = "ELENCO "; - if (_tipo_iscdim == ISCRITTI) - sep << "ISCRITTI"; - else - sep << "DIMESSI"; - if (_dataini.ok()) - { - sep << " dal "; - sep << _dataini.string(); - } - if (_datafin.ok()) - { - sep << " al "; - sep << _datafin.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 isc.@58gData dim."); - set_header(5,"@0g------@7g--@10g-------------------------@36g----------@47g----------@58g----------"); - } -} - -bool TIscritti_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 - - _msk = new TMask("at2600a"); - - _form_eti = new TEti_iscritti_form("AT_ETSOG"); - - return TRUE; -} - -bool TIscritti_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _form_eti; - return TRUE; -} - -int at2600(int argc, char* argv[]) -{ - - TIscritti_application a; - - a.run(argc, argv, "Elenco iscritti/dimessi"); - - return 0; -} +#include +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" + +#include "at2.h" +#include "at2600a.h" + +#define ALIAS_LCP 100 + +#define ISCRITTI 'I' +enum ts { undefined = 0, elenco = 1, etichette = 2 }; + +// definizione form per etichette +class TEti_iscritti_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TEti_iscritti_form(): TForm() {}; + TEti_iscritti_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TEti_iscritti_form() {}; +}; + +class TIscritti_application : public TPrintapp +{ + TRelation* _rel; + TMask* _msk; + TEti_iscritti_form* _form_eti; + + TAssoc_array _categorie; + + int _cur1, _cur2, _cur3, _cur4; + TParagraph_string _cognome_nome; + TDate _data_stampa; + ts _tipo_stampa; + TString16 _codsez, _codsot; + char _tipo_iscdim; // iscritti o dimessi + TDate _dataini, _datafin; + + static bool filter_func_iscritti(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; } + TIscritti_application() : _data_stampa(TODAY), _cognome_nome("",25) {} +}; + +HIDDEN inline TIscritti_application& app() { return (TIscritti_application&) main_app(); } + +TCursor* TEti_iscritti_form::cursor() const { return app().current_cursor(); } + +TRelation* TEti_iscritti_form::relation() const { return cursor()->relation(); } + +void TIscritti_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); + const 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 TIscritti_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_DATAISC)); + set_row(1,"@58g@ld", FLD(LF_SOGGETTI,SOG_DATADIM)); + } + break; + } +} + +bool TIscritti_application::filter_func_iscritti(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); + } + // filtrp per date iscrizione/dimissione + if (filtrato) + { + if (app()._tipo_iscdim == ISCRITTI) + { + const TDate dataisc = sog.get(SOG_DATAISC); + filtrato = (dataisc >= app()._dataini && dataisc <= app()._datafin); + } + else + { + const TDate datadim = sog.get(SOG_DATADIM); + filtrato = (datadim >= app()._dataini && datadim <= app()._datafin); + } + } + return filtrato; +} + +bool TIscritti_application::preprocess_page(int file, int counter) +{ + // contatore soggetti stampati + // per ora non c'è + if (_tipo_stampa == elenco) + { + TString80 nome = current_cursor()->curr().get(SOG_COGNOME); + 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 TIscritti_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 TIscritti_application::set_print(int m) +{ + _tipo_stampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_ELENCO: + _tipo_stampa = elenco; + _codsez = "**"; + _codsot = "**"; + break; + case F_ETICHETTE: + _tipo_stampa = etichette; + break; + } + if (_tipo_stampa != undefined) + { + reset_files(); + add_file(LF_SOGGETTI); + // filtro per sezioni + 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 iscritti/dimessi e date + _tipo_iscdim = _msk->get(F_TIPO)[0]; + _dataini = _msk->get(F_DATAINI); + _datafin = _msk->get(F_DATAFIN); + + current_cursor()->set_filterfunction(filter_func_iscritti); + + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TIscritti_application::crea_intestazione() +{ + reset_header(); + + if (_tipo_stampa == elenco) + { + TString sep(132); + sep = "ELENCO "; + if (_tipo_iscdim == ISCRITTI) + sep << "ISCRITTI"; + else + sep << "DIMESSI"; + if (_dataini.ok()) + { + sep << " dal "; + sep << _dataini.string(); + } + if (_datafin.ok()) + { + sep << " al "; + sep << _datafin.string(); + } + sep.center_just(); + set_header(2, "@0g%s", (const char*) sep); + const 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 isc.@58gData dim."); + set_header(5,"@0g------@7g--@10g-------------------------@36g----------@47g----------@58g----------"); + } +} + +bool TIscritti_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 + + _msk = new TMask("at2600a"); + + _form_eti = new TEti_iscritti_form("AT_ETSOG"); + + return TRUE; +} + +bool TIscritti_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_eti; + return TRUE; +} + +int at2600(int argc, char* argv[]) +{ + + TIscritti_application a; + + a.run(argc, argv, "Elenco iscritti/dimessi"); + + return 0; +} diff --git a/at/at3.cpp b/at/at3.cpp index b528cf502..4238dc7b1 100755 --- a/at/at3.cpp +++ b/at/at3.cpp @@ -1,31 +1,31 @@ -#include -#include - -#include "at3.h" - -#define usage "Error - usage : %s -[0,1,2,3,4,5]" - -int main(int argc, char** argv) -{ - int rt = 0 ; - const int r = (argc > 1) ? atoi(&argv[1][1]) : -1; - - switch (r) - { - case 0: - rt = at3100(argc, argv); break; - case 1: - rt = at3200(argc, argv); break; - case 2: - rt = at3300(argc, argv); break; - case 3: - rt = at3400(argc, argv); break; - case 4: - rt = at3500(argc, argv); break; - case 5: - rt = at3600(argc, argv); break; -default: - error_box(usage, argv[0]) ; rt = 1; break; - } - return rt; -} +#include +#include + +#include "at3.h" + +#define usage "Error - usage : %s -[0,1,2,3,4,5]" + +int main(int argc, char** argv) +{ + int rt = 0 ; + const int r = (argc > 1) ? atoi(&argv[1][1]) : -1; + + switch (r) + { + case 0: + rt = at3100(argc, argv); break; + case 1: + rt = at3200(argc, argv); break; + case 2: + rt = at3300(argc, argv); break; + case 3: + rt = at3400(argc, argv); break; + case 4: + rt = at3500(argc, argv); break; + case 5: + rt = at3600(argc, argv); break; +default: + error_box(usage, argv[0]) ; rt = 1; break; + } + return rt; +} diff --git a/at/at3.h b/at/at3.h index da12ac313..65e253223 100755 --- a/at/at3.h +++ b/at/at3.h @@ -1,12 +1,12 @@ -#ifndef __AT3_H -#define __AT3_H - -int at3100(int argc, char* argv[]); // convocazioni -int at3200(int argc, char* argv[]); // tessere e pagine -int at3300(int argc, char* argv[]); // urgenze -int at3400(int argc, char* argv[]); // elenco soggetti modificati -int at3500(int argc, char* argv[]); // scadenze di donazione -int at3600(int argc, char* argv[]); // convocazioni su punto di raccolta - -#endif // __AT3_H - +#ifndef __AT3_H +#define __AT3_H + +int at3100(int argc, char* argv[]); // convocazioni +int at3200(int argc, char* argv[]); // tessere e pagine +int at3300(int argc, char* argv[]); // urgenze +int at3400(int argc, char* argv[]); // elenco soggetti modificati +int at3500(int argc, char* argv[]); // scadenze di donazione +int at3600(int argc, char* argv[]); // convocazioni su punto di raccolta + +#endif // __AT3_H + diff --git a/at/at3.url b/at/at3.url index e3af495a8..24bf8ed17 100755 --- a/at/at3.url +++ b/at/at3.url @@ -1,6 +1,7 @@ #define APPNAME AVIS #define QAPPNAME "AVIS" #define LIBDIR f:\xvt.403\win_x86\ptk\lib +#define QFIRMNAME "AGA Informatica S.r.l." #include @@ -46,3 +47,11 @@ MENUBAR MENU_BAR(4) MENU MENU_BAR(4) SUBMENU MENU_FILE "~File" +/* ---------------------------------------------------- + * at1 -5 + * ---------------------------------------------------- */ +MENUBAR MENU_BAR(5) + +MENU MENU_BAR(5) + SUBMENU MENU_FILE "~File" + diff --git a/at/at3100.cpp b/at/at3100.cpp index 12ba5f9e3..5feb4a713 100755 --- a/at/at3100.cpp +++ b/at/at3100.cpp @@ -1,446 +1,446 @@ -#include -#include -#include -#include - -#include "lf.h" -#include "soggetti.h" -#include "sezioni.h" - -#include "at3.h" -#include "at3100a.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; rget_body(); - corpo.reset(); - corpo.update(); - for (int i = 0; i < corpo.items(); i++) - { - TPrintrow& riga = corpo.row(i); - set_row(i+1,"%s",riga.row()); - } - force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta - } - break; - case cartoline: - { - TPrint_section& corpo = _form_car->get_body(); - corpo.reset(); - corpo.update(); - for (int i = 0; i < corpo.items(); i++) - { - TPrintrow& riga = corpo.row(i); - set_row(i+1,"%s",riga.row()); - } - force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta - } - break; - } -} - -bool TConv_application::filter_func_conv (const TRelation* rel) -{ - TLocalisamfile& sog = rel->lfile(); - TDate dataprossi = sog.get_date(SOG_DATAPROSSI); - const char stato = rel->curr(-ALIAS_TABTCS).get_char("S6"); - const bool dimesso = rel->curr(-ALIAS_TABCTD).get_char("B0"); - //TDate dataultconv = sog.curr().get_date(SOG_DATAULTCONV); - if (dataprossi.ok()) - { - // intervallo tra data convocazione e data calcolata per pross. si - long intconvsi = app()._dataconv - dataprossi; - // intervallo tra data convocazione e data ultima convocazione - //long intultconvsi = app()._data - dataultconv; - if ((intconvsi >= 0) && (intconvsi < app()._intmax) && ((stato == STATO_IDONEO) || (stato == STATO_FINESO)) && (dimesso != 'X')) - return TRUE; - else - return FALSE; - } - else - // non ha la data di prossima donazione SI - return FALSE; -} - -bool TConv_application::preprocess_page(int file, int counter) -{ - if ((_tipo_stampa == elenco) && (!_intesta)) - { - _intesta = TRUE; - header_sezione(); - } - // contatore soggetti stampati - return TRUE; -} - -void TConv_application::print() -{ - _intesta = FALSE; - filtra_sezione(); - TPrint_application::print(); - TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI); - _sez_corrente++; - if (_sez_corrente <= s.items()) - repeat_print(); - return; -} - -void TConv_application::filtra_sezione() -{ - TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI); - TToken_string& row = s.row(_sez_corrente-1); - _codsez = row.get(0); - _codsot = row.get(); - _dataconv = row.get(); - // deve diventare un membro - TString16 _giorno = row.get(); - _intmin = row.get_int(); - _intmax = row.get_int(); - // deve diventare un membro - TString16 _tipoconv = row.get(); - - select_cursor(_cur4); - TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); - TRectype da(fl.curr()); - TRectype a(fl.curr()); - da.zero(); - a.zero('Z'); - if ((_codsez.not_empty()) && (_codsez.ok())) - { - da.put(SOG_CODSEZ, _codsez); - a.put(SOG_CODSEZ, _codsez); - } - if ((_codsot.not_empty()) && (_codsot.ok())) - { - da.put(SOG_CODSOT, _codsot); - a.put(SOG_CODSOT, _codsot); - } - current_cursor()->freeze(FALSE); - current_cursor()->setregion(da, a); -} - -bool TConv_application::set_print(int) -{ - TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI); - if (s.items()==0) - add_rows_convocazioni(s,8); - _asezioni.destroy(); - for (int r=0; r < s.items(); r++) - { - TToken_string& row = s.row(r); - TString16 codice = row.get(0); - TString16 codsot = row.get(); - codice << codsot; - if (codice.not_empty()) - _asezioni.add(codice); - } - _tipo_stampa = undefined; - KEY tasto; - tasto = _msk->run(); - switch (tasto) - { - case F_ELENCO: - _tipo_stampa = elenco; - break; - case F_ETICHETTE: - _tipo_stampa = etichette; - break; - case F_CARTOLINE: - _tipo_stampa = cartoline; - break; - case K_ESC: - _msk->reset(); - } - if (_tipo_stampa != undefined) - { - reset_files(); - add_file(LF_SOGGETTI); - - select_cursor(_cur4); - TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI); - for (int r=s.items()-1; r>=s.first_empty(); r--) - { - TToken_string& row = s.row(r); - _codsez = row.get(0); - _codsot = row.get(); - if (_codsez.empty() || (!_codsez.ok())) - s.destroy(r); - } - // filtro su non esclusi, idonei e categorie non dimessi - // questo filtro non funziona perchè non funziona il riconoscimento dell'alias - // nelle espressioni; sarebbe molto bello averlo a disposizione! - //current_cursor()->setfilter("((ESCLUSO == \"\") && (-100->B0!=\"X\") && ((-200->S6 == \"I\") || (-200->S6 == \"F\")))", TRUE); - // filtro su non esclusi - current_cursor()->setfilter("(ESCLUSO == \"\")", TRUE); - // filtro su data e altri filtri che non posso mettere nella setfilter - current_cursor()->set_filterfunction (filter_func_conv, TRUE); - reset_print(); - _sez_corrente = 1; - crea_intestazione(); - return TRUE; - } - else - return FALSE; -} - -void TConv_application::crea_intestazione() -{ - - reset_header(); - - if (_tipo_stampa == elenco) - { - TString256 sep(132); - sep = ""; - sep.fill('-'); - set_header(3, (const char *) sep); - - set_header(5,"@0gCod.@10gC.@13gCognome@39gNato il@50gData pr.SI@61gData pr.AF@72gData/Tipo@83gData/Tipo@94gIdon."); - set_header(6,"@13gNome@50gInterv. SI@61gInterv. AF@72gult. don.@83gult. idon.@94gper"); - set_header(7,"@0g---------@10g--@13g-------------------------@39g----------@50g----------@61g----------@72g----------@83g----------@94g-----"); - } -} - -void TConv_application::header_sezione() -{ - TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); - TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); - TString256 intestazione(132); - intestazione = "Sezione: "; - intestazione << _codsez; - intestazione << "/"; - intestazione << _codsot; - intestazione << " "; - intestazione << densez; - if ((densot.ok())&& (densot.not_empty())) - { - intestazione << "/"; - intestazione << densot; - } - intestazione.center_just(); - set_header(1,"@0g%s", (const char*) intestazione); - - intestazione = "ELENCO CONVOCATI PER IL "; - intestazione << _dataconv.string(); - intestazione.center_just(); - set_header(2, "@0g%s", (const char*) intestazione); - TString16 data_stampa = _data_stampa.string(); - set_header(2,"@0g%10s", (const char*) data_stampa); - intestazione = ""; - intestazione << "Pag. @#"; - set_header(2, "@120g%s", (const char*) intestazione); - - return; -} - -bool TConv_application::user_create() -{ - _rel = new TRelation(LF_SOGGETTI); - _rel->add("TCS", "CODTAB==STATO", 1, 0, ALIAS_TABTCS); // per verificare che sia IDONEO - _rel->add("CTD", "CODTAB==CATDON", 1, 0, ALIAS_TABCTD); // per verificare che sia DONATORE NON DIMESSO - _rel->add("LCP", "CODTAB==DOM_CODLOC", 1, 0, ALIAS_TABLCP); // per verificare che sia DONATORE NON DIMESSO - _rel->add(LF_COMUNI, "COM==DOMC_CODCOM"); - _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); - - _cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice - _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome - _cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice - _cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome - - _msk = new TMask("at3100a"); - TSheet_field& sc = (TSheet_field&)_msk->field(F_CONVOCAZIONI); - sc.set_notify(convocazioni_notify); - _form_eti = new TConv_form("AT_ETSOG"); - _form_car = new TConv_form("AT_CARTO"); - - return TRUE; -} - -bool TConv_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _form_eti; - delete _form_car; - return TRUE; -} - -bool TConv_application::check_sez_sheet(const char* codice) -{ - 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 at3100(int argc, char* argv[]) -{ - - TConv_application a; - - a.run(argc, argv, "Convocazioni"); - - return 0; -} +#include +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" + +#include "at3.h" +#include "at3100a.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; rget_body(); + corpo.reset(); + corpo.update(); + for (int i = 0; i < corpo.items(); i++) + { + TPrintrow& riga = corpo.row(i); + set_row(i+1,"%s",riga.row()); + } + force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage + // altrimenti stampa sempre la stessa etichetta + } + break; + case cartoline: + { + TPrint_section& corpo = _form_car->get_body(); + corpo.reset(); + corpo.update(); + for (int i = 0; i < corpo.items(); i++) + { + TPrintrow& riga = corpo.row(i); + set_row(i+1,"%s",riga.row()); + } + force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage + // altrimenti stampa sempre la stessa etichetta + } + break; + } +} + +bool TConv_application::filter_func_conv (const TRelation* rel) +{ + TLocalisamfile& sog = rel->lfile(); + TDate dataprossi = sog.get_date(SOG_DATAPROSSI); + const char stato = rel->curr(-ALIAS_TABTCS).get_char("S6"); + const bool dimesso = rel->curr(-ALIAS_TABCTD).get_char("B0"); + //TDate dataultconv = sog.curr().get_date(SOG_DATAULTCONV); + if (dataprossi.ok()) + { + // intervallo tra data convocazione e data calcolata per pross. si + long intconvsi = app()._dataconv - dataprossi; + // intervallo tra data convocazione e data ultima convocazione + //long intultconvsi = app()._data - dataultconv; + if ((intconvsi >= 0) && (intconvsi < app()._intmax) && ((stato == STATO_IDONEO) || (stato == STATO_FINESO)) && (dimesso != 'X')) + return TRUE; + else + return FALSE; + } + else + // non ha la data di prossima donazione SI + return FALSE; +} + +bool TConv_application::preprocess_page(int file, int counter) +{ + if ((_tipo_stampa == elenco) && (!_intesta)) + { + _intesta = TRUE; + header_sezione(); + } + // contatore soggetti stampati + return TRUE; +} + +void TConv_application::print() +{ + _intesta = FALSE; + filtra_sezione(); + TPrint_application::print(); + TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI); + _sez_corrente++; + if (_sez_corrente <= s.items()) + repeat_print(); + return; +} + +void TConv_application::filtra_sezione() +{ + TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI); + TToken_string& row = s.row(_sez_corrente-1); + _codsez = row.get(0); + _codsot = row.get(); + _dataconv = row.get(); + // deve diventare un membro + TString16 _giorno = row.get(); + _intmin = row.get_int(); + _intmax = row.get_int(); + // deve diventare un membro + TString16 _tipoconv = row.get(); + + select_cursor(_cur4); + TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); + TRectype da(fl.curr()); + TRectype a(fl.curr()); + da.zero(); + a.zero('Z'); + if ((_codsez.not_empty()) && (_codsez.ok())) + { + da.put(SOG_CODSEZ, _codsez); + a.put(SOG_CODSEZ, _codsez); + } + if ((_codsot.not_empty()) && (_codsot.ok())) + { + da.put(SOG_CODSOT, _codsot); + a.put(SOG_CODSOT, _codsot); + } + current_cursor()->freeze(FALSE); + current_cursor()->setregion(da, a); +} + +bool TConv_application::set_print(int) +{ + TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI); + if (s.items()==0) + add_rows_convocazioni(s,8); + _asezioni.destroy(); + for (int r=0; r < s.items(); r++) + { + TToken_string& row = s.row(r); + TString16 codice = row.get(0); + TString16 codsot = row.get(); + codice << codsot; + if (codice.not_empty()) + _asezioni.add(codice); + } + _tipo_stampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_ELENCO: + _tipo_stampa = elenco; + break; + case F_ETICHETTE: + _tipo_stampa = etichette; + break; + case F_CARTOLINE: + _tipo_stampa = cartoline; + break; + case K_ESC: + _msk->reset(); + } + if (_tipo_stampa != undefined) + { + reset_files(); + add_file(LF_SOGGETTI); + + select_cursor(_cur4); + TSheet_field& s = (TSheet_field&)_msk->field(F_CONVOCAZIONI); + for (int r=s.items()-1; r>=s.first_empty(); r--) + { + TToken_string& row = s.row(r); + _codsez = row.get(0); + _codsot = row.get(); + if (_codsez.empty() || (!_codsez.ok())) + s.destroy(r); + } + // filtro su non esclusi, idonei e categorie non dimessi + // questo filtro non funziona perchè non funziona il riconoscimento dell'alias + // nelle espressioni; sarebbe molto bello averlo a disposizione! + //current_cursor()->setfilter("((ESCLUSO == \"\") && (-100->B0!=\"X\") && ((-200->S6 == \"I\") || (-200->S6 == \"F\")))", TRUE); + // filtro su non esclusi + current_cursor()->setfilter("(ESCLUSO == \"\")", TRUE); + // filtro su data e altri filtri che non posso mettere nella setfilter + current_cursor()->set_filterfunction (filter_func_conv, TRUE); + reset_print(); + _sez_corrente = 1; + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TConv_application::crea_intestazione() +{ + + reset_header(); + + if (_tipo_stampa == elenco) + { + TString256 sep(132); + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); + + set_header(5,"@0gCod.@10gC.@13gCognome@39gNato il@50gData pr.SI@61gData pr.AF@72gData/Tipo@83gData/Tipo@94gIdon."); + set_header(6,"@13gNome@50gInterv. SI@61gInterv. AF@72gult. don.@83gult. idon.@94gper"); + set_header(7,"@0g---------@10g--@13g-------------------------@39g----------@50g----------@61g----------@72g----------@83g----------@94g-----"); + } +} + +void TConv_application::header_sezione() +{ + TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); + TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); + TString256 intestazione(132); + intestazione = "Sezione: "; + intestazione << _codsez; + intestazione << "/"; + intestazione << _codsot; + intestazione << " "; + intestazione << densez; + if ((densot.ok())&& (densot.not_empty())) + { + intestazione << "/"; + intestazione << densot; + } + intestazione.center_just(); + set_header(1,"@0g%s", (const char*) intestazione); + + intestazione = "ELENCO CONVOCATI PER IL "; + intestazione << _dataconv.string(); + intestazione.center_just(); + set_header(2, "@0g%s", (const char*) intestazione); + TString16 data_stampa = _data_stampa.string(); + set_header(2,"@0g%10s", (const char*) data_stampa); + intestazione = ""; + intestazione << "Pag. @#"; + set_header(2, "@120g%s", (const char*) intestazione); + + return; +} + +bool TConv_application::user_create() +{ + _rel = new TRelation(LF_SOGGETTI); + _rel->add("TCS", "CODTAB==STATO", 1, 0, ALIAS_TABTCS); // per verificare che sia IDONEO + _rel->add("CTD", "CODTAB==CATDON", 1, 0, ALIAS_TABCTD); // per verificare che sia DONATORE NON DIMESSO + _rel->add("LCP", "CODTAB==DOM_CODLOC", 1, 0, ALIAS_TABLCP); // per verificare che sia DONATORE NON DIMESSO + _rel->add(LF_COMUNI, "COM==DOMC_CODCOM"); + _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); + + _cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice + _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome + _cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice + _cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome + + _msk = new TMask("at3100a"); + TSheet_field& sc = (TSheet_field&)_msk->field(F_CONVOCAZIONI); + sc.set_notify(convocazioni_notify); + _form_eti = new TConv_form("AT_ETSOG"); + _form_car = new TConv_form("AT_CARTO"); + + return TRUE; +} + +bool TConv_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_eti; + delete _form_car; + return TRUE; +} + +bool TConv_application::check_sez_sheet(const char* codice) +{ + 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 at3100(int argc, char* argv[]) +{ + + TConv_application a; + + a.run(argc, argv, "Convocazioni"); + + return 0; +} diff --git a/at/at3200.cpp b/at/at3200.cpp index 6efd69c48..6e0ae8321 100755 --- a/at/at3200.cpp +++ b/at/at3200.cpp @@ -1,218 +1,218 @@ -#include -#include -#include - -#include "lf.h" -#include "soggetti.h" -#include "sezioni.h" -#include - -#include "at3.h" -#include "at3200a.h" - -#define ALIAS_COMRES 100 -#define ALIAS_COMNAS 200 - -enum ts { undefined = 0, tessere = 1, pagine = 2 }; - -// definizione form per pagine anagrafiche -class TTessere_form : public TForm -{ -public: - - virtual TCursor* cursor() const; - virtual TRelation* relation() const; - TPrint_section& get_body() { return section('B'); } ; - TTessere_form(): TForm() {}; - TTessere_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") - : TForm(form,code,editlevel,desc) {}; - virtual ~TTessere_form() {}; -}; - -class TTessere_application : public TPrintapp -{ - TRelation* _rel; - TMask* _msk; - TTessere_form* _form_pag; - - int _cur1, _cur2, _cur3, _cur4; - TDate _data_stampa; - ts _tipo_stampa; - TString _riepilogodon; - - static bool filter_func_tessere(const TRelation* rel); - -protected: - virtual bool user_create(); - virtual bool user_destroy(); - virtual bool set_print(int m); - virtual void set_page(int file, int cnt); - virtual bool preprocess_page(int file, int counter); - -public: - void crea_intestazione(); - TMask& app_mask() { return *_msk; } - TTessere_application() : _data_stampa(TODAY), _riepilogodon(50) {} -}; - -HIDDEN inline TTessere_application& app() { return (TTessere_application&) main_app(); } - -TCursor* TTessere_form::cursor() const { return app().current_cursor(); } - -TRelation* TTessere_form::relation() const { return cursor()->relation(); } - -void TTessere_application::set_page(int file, int cnt) -{ - // costruzione pagine - switch (_tipo_stampa) - { - case pagine: - { - TPrint_section& corpo = _form_pag->get_body(); - corpo.reset(); - corpo.update(); - for (int i = 0; i < corpo.items(); i++) - { - TPrintrow& riga = corpo.row(i); - set_row(i+1,"%s",riga.row()); - } - force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta - } - break; - case tessere: - { - TString16 data_stampa = _data_stampa.string(); - set_row(3, "@30g@S", FLD(LF_SEZIONI,SEZ_DENSEZ)); - set_row(4, "@30g@S", FLD(LF_SEZIONI,SEZ_DENSOT)); - set_row(9,"@33g%s@1j@pn", "Cod. prov.",FLD(LF_SOGGETTI,SOG_CODICE,"#########")); - set_row(12,"@37g@10ls", FLD(LF_SOGGETTI,SOG_TESSAVIS)); - set_row(14,"@45g%10s", (const char*) data_stampa); - set_row(16,"@8g@ls@1j@ls", FLD(LF_SOGGETTI,SOG_COGNOME), FLD(LF_SOGGETTI,SOG_NOME)); - set_row(18,"@8g@ls@1j@2s", FLD(-ALIAS_COMNAS,COM_DENCOM),FLD(-ALIAS_COMNAS,COM_PROVCOM)); - set_row(18,"@45g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); - set_row(20,"@10g@ls@1j@2s",FLD(-ALIAS_COMRES,COM_DENCOM),FLD(-ALIAS_COMRES,COM_PROVCOM)); - set_row(20,"@45g@15ls", FLD(LF_SOGGETTI,SOG_TELABI)); - set_row(22,"@2g@50ls", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); - set_row(24,"@10g@16ls", FLD(LF_SOGGETTI,SOG_CF)); - set_row(28,"@4g@4ls", FLD(LF_SOGGETTI,SOG_GRUPPOAB0)); - set_row(28,"@17g@3ls", FLD(LF_SOGGETTI,SOG_RHANTID)); - set_row(28,"@30g@6ls", FLD(LF_SOGGETTI,SOG_FENOTIPORH)); - set_row(28,"@48g@3ls", FLD(LF_SOGGETTI,SOG_KELL)); - set_row(28,"@58g@3ls", FLD(LF_SOGGETTI,SOG_DU)); - set_row(32,"@4g@20ls", FLD(LF_SOGGETTI,SOG_DOCID)); - set_row(41,"@4g#t", &_riepilogodon); - set_row(72,""); - } - break; - } -} - -bool TTessere_application::preprocess_page(int file, int counter) -{ - // contatore soggetti stampati - // per ora non c'è - int totdon = current_cursor()->curr(LF_SOGGETTI).get_int(SOG_TOTDON); - TDate dataultima = current_cursor()->curr(LF_SOGGETTI).get(SOG_DATAULTDON); - - _riepilogodon = ""; - if (totdon != 0) - { - _riepilogodon = "Donazioni effettuate fino al "; - _riepilogodon << dataultima.string(); - _riepilogodon << " n.ro "; - _riepilogodon << totdon; - } - return TRUE; -} - -bool TTessere_application::set_print(int m) -{ - _tipo_stampa = undefined; - KEY tasto; - tasto = _msk->run(); - switch (tasto) - { - case F_TESSERE: - _tipo_stampa = tessere; - break; - case F_PAGINE: - _tipo_stampa = pagine; - break; - } - if (_tipo_stampa != undefined) - { - reset_files(); - add_file(LF_SOGGETTI); - - reset_print(); - crea_intestazione(); - return TRUE; - } - else - return FALSE; -} - -void TTessere_application::crea_intestazione() -{ - TString256 sep(132); - TString16 data_stampa; - - reset_header(); - - if (_tipo_stampa == pagine) - { - sep.fill('-'); - set_header(1, (const char *) sep); - sep = ""; - sep << "Pag. @#"; - sep.right_just(132); - set_header(2,(const char*) sep); - - set_header(2,"@0gSTAMPA PAGINE ANAGRAFICHE@64gDATA"); - data_stampa = _data_stampa.string(); - set_header(2,"@69g%10s", (const char*) data_stampa); - - sep = ""; - sep.fill('-'); - set_header(3, (const char *) sep); - } -} - -bool TTessere_application::user_create() -{ - _rel = new TRelation(LF_SOGGETTI); - _rel->add(LF_COMUNI, "COM==COMNASC",1,0,ALIAS_COMNAS); - _rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,0,ALIAS_COMRES); - _rel->add("LCP", "CODTAB==DOM_CODLOC"); - _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); - - _cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice - _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome - _cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice - _cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome - - _msk = new TMask("at3200a"); - - _form_pag = new TTessere_form("AT_PAGIN"); // dovrà esserci PAGINE - - return TRUE; -} - -bool TTessere_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _form_pag; - return TRUE; -} - -int at3200(int argc, char* argv[]) -{ - - TTessere_application a; - - a.run(argc, argv, "Stampa tessere e pagine"); - - return 0; -} +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" +#include + +#include "at3.h" +#include "at3200a.h" + +#define ALIAS_COMRES 100 +#define ALIAS_COMNAS 200 + +enum ts { undefined = 0, tessere = 1, pagine = 2 }; + +// definizione form per pagine anagrafiche +class TTessere_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TTessere_form(): TForm() {}; + TTessere_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TTessere_form() {}; +}; + +class TTessere_application : public TPrintapp +{ + TRelation* _rel; + TMask* _msk; + TTessere_form* _form_pag; + + int _cur1, _cur2, _cur3, _cur4; + TDate _data_stampa; + ts _tipo_stampa; + TString _riepilogodon; + + static bool filter_func_tessere(const TRelation* rel); + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual bool set_print(int m); + virtual void set_page(int file, int cnt); + virtual bool preprocess_page(int file, int counter); + +public: + void crea_intestazione(); + TMask& app_mask() { return *_msk; } + TTessere_application() : _data_stampa(TODAY), _riepilogodon(50) {} +}; + +HIDDEN inline TTessere_application& app() { return (TTessere_application&) main_app(); } + +TCursor* TTessere_form::cursor() const { return app().current_cursor(); } + +TRelation* TTessere_form::relation() const { return cursor()->relation(); } + +void TTessere_application::set_page(int file, int cnt) +{ + // costruzione pagine + switch (_tipo_stampa) + { + case pagine: + { + TPrint_section& corpo = _form_pag->get_body(); + corpo.reset(); + corpo.update(); + for (int i = 0; i < corpo.items(); i++) + { + TPrintrow& riga = corpo.row(i); + set_row(i+1,"%s",riga.row()); + } + force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage + // altrimenti stampa sempre la stessa etichetta + } + break; + case tessere: + { + TString16 data_stampa = _data_stampa.string(); + set_row(3, "@30g@S", FLD(LF_SEZIONI,SEZ_DENSEZ)); + set_row(4, "@30g@S", FLD(LF_SEZIONI,SEZ_DENSOT)); + set_row(9,"@33g%s@1j@pn", "Cod. prov.",FLD(LF_SOGGETTI,SOG_CODICE,"#########")); + set_row(12,"@37g@10ls", FLD(LF_SOGGETTI,SOG_TESSAVIS)); + set_row(14,"@45g%10s", (const char*) data_stampa); + set_row(16,"@8g@ls@1j@ls", FLD(LF_SOGGETTI,SOG_COGNOME), FLD(LF_SOGGETTI,SOG_NOME)); + set_row(18,"@8g@ls@1j@2s", FLD(-ALIAS_COMNAS,COM_DENCOM),FLD(-ALIAS_COMNAS,COM_PROVCOM)); + set_row(18,"@45g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(20,"@10g@ls@1j@2s",FLD(-ALIAS_COMRES,COM_DENCOM),FLD(-ALIAS_COMRES,COM_PROVCOM)); + set_row(20,"@45g@15ls", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(22,"@2g@50ls", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); + set_row(24,"@10g@16ls", FLD(LF_SOGGETTI,SOG_CF)); + set_row(28,"@4g@4ls", FLD(LF_SOGGETTI,SOG_GRUPPOAB0)); + set_row(28,"@17g@3ls", FLD(LF_SOGGETTI,SOG_RHANTID)); + set_row(28,"@30g@6ls", FLD(LF_SOGGETTI,SOG_FENOTIPORH)); + set_row(28,"@48g@3ls", FLD(LF_SOGGETTI,SOG_KELL)); + set_row(28,"@58g@3ls", FLD(LF_SOGGETTI,SOG_DU)); + set_row(32,"@4g@20ls", FLD(LF_SOGGETTI,SOG_DOCID)); + set_row(41,"@4g#t", &_riepilogodon); + set_row(72,""); + } + break; + } +} + +bool TTessere_application::preprocess_page(int file, int counter) +{ + // contatore soggetti stampati + // per ora non c'è + int totdon = current_cursor()->curr(LF_SOGGETTI).get_int(SOG_TOTDON); + TDate dataultima = current_cursor()->curr(LF_SOGGETTI).get(SOG_DATAULTDON); + + _riepilogodon = ""; + if (totdon != 0) + { + _riepilogodon = "Donazioni effettuate fino al "; + _riepilogodon << dataultima.string(); + _riepilogodon << " n.ro "; + _riepilogodon << totdon; + } + return TRUE; +} + +bool TTessere_application::set_print(int m) +{ + _tipo_stampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_TESSERE: + _tipo_stampa = tessere; + break; + case F_PAGINE: + _tipo_stampa = pagine; + break; + } + if (_tipo_stampa != undefined) + { + reset_files(); + add_file(LF_SOGGETTI); + + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TTessere_application::crea_intestazione() +{ + TString256 sep(132); + TString16 data_stampa; + + reset_header(); + + if (_tipo_stampa == pagine) + { + sep.fill('-'); + set_header(1, (const char *) sep); + sep = ""; + sep << "Pag. @#"; + sep.right_just(132); + set_header(2,(const char*) sep); + + set_header(2,"@0gSTAMPA PAGINE ANAGRAFICHE@64gDATA"); + data_stampa = _data_stampa.string(); + set_header(2,"@69g%10s", (const char*) data_stampa); + + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); + } +} + +bool TTessere_application::user_create() +{ + _rel = new TRelation(LF_SOGGETTI); + _rel->add(LF_COMUNI, "COM==COMNASC",1,0,ALIAS_COMNAS); + _rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,0,ALIAS_COMRES); + _rel->add("LCP", "CODTAB==DOM_CODLOC"); + _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); + + _cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice + _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome + _cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice + _cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome + + _msk = new TMask("at3200a"); + + _form_pag = new TTessere_form("AT_PAGIN"); // dovrà esserci PAGINE + + return TRUE; +} + +bool TTessere_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_pag; + return TRUE; +} + +int at3200(int argc, char* argv[]) +{ + + TTessere_application a; + + a.run(argc, argv, "Stampa tessere e pagine"); + + return 0; +} diff --git a/at/at3300.cpp b/at/at3300.cpp index 17d250d8b..7173b6a67 100755 --- a/at/at3300.cpp +++ b/at/at3300.cpp @@ -1,359 +1,359 @@ -#include -#include -#include - -#include "lf.h" -#include "soggetti.h" -#include "sezioni.h" -#include - -#include "at3.h" -#include "at3300a.h" - -#define ALIAS_LCP 100 -#define ALIAS_TCS 200 - -enum ts { undefined = 0, elenco = 1, etichette = 2 }; - -// definizione form per etichette -class TUrgenze_form : public TForm -{ -public: - - virtual TCursor* cursor() const; - virtual TRelation* relation() const; - TPrint_section& get_body() { return section('B'); } ; - TUrgenze_form(): TForm() {}; - TUrgenze_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") - : TForm(form,code,editlevel,desc) {}; - virtual ~TUrgenze_form() {}; -}; - -class TUrgenze_application : public TPrintapp -{ - static bool filter_func_urgenze(const TRelation* rel); - - TRelation* _rel; - TMask* _msk; - TUrgenze_form* _form_eti; - TRectype* _sangue; - TAssoc_array _categorie; - long _giorni; - - int _cur1, _cur2, _cur3, _cur4; - TParagraph_string _cognome_nome, _dencom; - - TDate _data_stampa; - TDate _dataini, _datafin; - ts _tipo_stampa; - TString16 _codsez, _codsot; - - -protected: - virtual bool user_create(); - virtual bool user_destroy(); - virtual bool set_print(int m); - virtual void set_page(int file, int cnt); - virtual bool preprocess_page (int file, int counter); - -public: - void crea_intestazione(); - void filtra_sezioni(); - void header_sezione(TString16 codsez, TString16 codsot); - TMask& app_mask() { return *_msk; } - TRectype& get_sangue() { return *_sangue; } - - TUrgenze_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {} -}; - -HIDDEN inline TUrgenze_application& app() { return (TUrgenze_application&) main_app(); } - -TCursor* TUrgenze_form::cursor() const { return app().current_cursor(); } - -TRelation* TUrgenze_form::relation() const { return cursor()->relation(); } - -void TUrgenze_application::filtra_sezioni() -{ - TString16 sezini = _msk->get(F_SEZINI); - TString16 sotini = _msk->get(F_SOTINI); - TString16 sezfin = _msk->get(F_SEZFIN); - TString16 sotfin = _msk->get(F_SOTFIN); - select_cursor(_cur4); - TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); - TRectype da(fl.curr()); - TRectype a(fl.curr()); - da.zero(); - a.zero(); - if ((sezini.not_empty()) && (sezini.ok())) - da.put(SOG_CODSEZ, sezini); - if ((sotini.not_empty()) && (sotini.ok())) - da.put(SOG_CODSOT, sotini); - if ((sezfin.not_empty()) && (sezfin.ok())) - a.put(SOG_CODSEZ, sezfin); - if ((sotfin.not_empty()) && (sotfin.ok())) - a.put(SOG_CODSOT, sotfin); - current_cursor()->setregion(da, a); -} - -void TUrgenze_application::set_page(int file, int cnt) -{ - switch (_tipo_stampa) - { - case etichette: - { - TPrint_section& corpo = _form_eti->get_body(); - corpo.reset(); - corpo.update(); - for (int i = 0; i < corpo.height(); i++) - { - TPrintrow& riga = corpo.row(i); - set_row(i+1,riga); - } - force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta - } - break; - case elenco: - { - set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######")); - set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON)); - set_row(1,"@10g#a", &_cognome_nome); - set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); - set_row(1,"@47g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); - set_row(1,"@98g@S", FLD(LF_SOGGETTI,SOG_TELABI)); - set_row(1,"@114g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); - set_row(2,"@47g#a", &_dencom); - set_row(2,"@114g@S", FLD(LF_SOGGETTI,SOG_TELALT)); - set_row(2,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); - } - break; - } -} - -bool TUrgenze_application::filter_func_urgenze(const TRelation* rel) -{ - bool filtrato = TRUE; - TLocalisamfile& sog = rel->lfile(); - //filtro per categorie - TAssoc_array& categorie = app()._categorie; - if (categorie.items() != 0) - { - TString16 cat = sog.get(SOG_CATDON); - filtrato = categorie.is_key((const char*) cat); - } - // filtro per tipizzazione - if (filtrato) - { - TRectype from = app().get_sangue(); - filtrato = (sog.curr()==from); - } - // filtro su data donazione - if (filtrato) - { - long giorni_sez = rel->lfile(LF_SEZIONI).get_long(SEZ_INTMINCONV); - long giorni = (giorni_sez > app()._giorni) ? giorni_sez : app()._giorni; - TDate data(TODAY); - data = data - (const long) giorni; - TDate dataultdon = sog.get(SOG_DATAULTDON); - filtrato = (dataultdon <= data); - } - return filtrato; -} - -bool TUrgenze_application::preprocess_page(int file, int counter) -{ - // contatore soggetti stampati - // per ora non c'è - if (_tipo_stampa == elenco) - { - TString80 nome = current_cursor()->curr().get(SOG_COGNOME); - nome << " "; - nome << current_cursor()->curr().get(SOG_NOME); - _cognome_nome = nome; - TString256 localita = ""; - localita << current_cursor()->curr(-ALIAS_LCP).get("S6"); - if (localita.not_empty() && localita.ok()) - { - localita << " "; - localita << current_cursor()->curr(-ALIAS_LCP).get("S0"); - localita << " - "; - } - else - { - localita = current_cursor()->curr(LF_COMUNI).get(COM_CAPCOM); - localita << " "; - } - localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); - localita.trim(); - _dencom = localita; - - // salto pagina se cambio sezione - TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); - TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) - { - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - header_sezione(codsez, codsot); - } - } - return TRUE; -} - -void TUrgenze_application::header_sezione(TString16 codsez, TString16 codsot) -{ - TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); - TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); - TString256 intestazione(132); - intestazione = "Sezione: "; - intestazione << codsez; - intestazione << "/"; - intestazione << codsot; - intestazione << " "; - intestazione << densez; - if ((densot.ok())&& (densot.not_empty())) - { - intestazione << "/"; - intestazione << densot; - } - intestazione.center_just(); - set_header(1,"@0g%s", (const char*) intestazione); - return; -} - -bool TUrgenze_application::set_print(int) -{ - _tipo_stampa = undefined; - KEY tasto; - tasto = _msk->run(); - switch (tasto) - { - case F_ELENCO: - _tipo_stampa = elenco; - _codsez = "**"; - _codsot = "**"; - break; - case F_ETICHETTE: - _tipo_stampa = etichette; - break; - } - if (_tipo_stampa != undefined) - { - reset_files(); - add_file(LF_SOGGETTI); - filtra_sezioni(); - // filtro per categorie - TString16 catpri = _msk->get(F_CAT1); - TString16 catsec = _msk->get(F_CAT2); - TString16 catter = _msk->get(F_CAT3); - TString16 catqua = _msk->get(F_CAT4); - TString16 catqui = _msk->get(F_CAT5); - TString16 catses = _msk->get(F_CAT6); - if (catpri.not_empty() && catpri.ok()) - _categorie.add((const char*) catpri); - if (catsec.not_empty() && catsec.ok()) - _categorie.add((const char*) catsec); - if (catter.not_empty() && catter.ok()) - _categorie.add((const char*) catter); - if (catqua.not_empty() && catqua.ok()) - _categorie.add((const char*) catqua); - if (catqui.not_empty() && catqui.ok()) - _categorie.add((const char*) catqui); - if (catses.not_empty() && catses.ok()) - _categorie.add((const char*) catses); - // filtro per tipizzazione - _sangue->zero(); - TString16 gruppoab0 = _msk->get(F_GRUPPOAB0); - TString16 rhantid = _msk->get(F_RHANTID); - TString16 kell = _msk->get(F_KELL); - TString16 fenotiporh = _msk->get(F_FENOTIPORH); - TString16 du = _msk->get(F_DU); - if ((gruppoab0.ok()) && (gruppoab0.not_empty())) - _sangue->put(SOG_GRUPPOAB0, gruppoab0); - if ((rhantid.ok()) && (rhantid.not_empty())) - _sangue->put(SOG_RHANTID, rhantid); - if ((kell.ok()) && (kell.not_empty())) - _sangue->put(SOG_KELL, kell); - if ((fenotiporh.ok()) && (fenotiporh.not_empty())) - _sangue->put(SOG_FENOTIPORH, fenotiporh); - if ((du.ok()) && (du.not_empty())) - _sangue->put(SOG_DU, du); - _giorni = _msk->get_long(F_GIORNI); - // filtra solo idonei - current_cursor()->setfilter("TCS->S6 == \"I\"", TRUE); - // filtra per categorie, tipizzazione e data donazione - current_cursor()->set_filterfunction (filter_func_urgenze, TRUE); - reset_print(); - crea_intestazione(); - return TRUE; - } - else - return FALSE; -} - -void TUrgenze_application::crea_intestazione() -{ - reset_header(); - - if (_tipo_stampa == elenco) - { - TString256 sep(132); - sep = "CONVOCAZIONI URGENTI"; - sep.center_just(); - set_header(2, "@0g%s", (const char*) sep); - TString16 data_stampa = _data_stampa.string(); - set_header(2,"@0g%10s", (const char*) data_stampa); - sep = ""; - sep << "Pag. @#"; - set_header(2, "@120g%s", (const char*) sep); - - sep = ""; - sep.fill('-'); - set_header(3, (const char *) sep); - - set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gIndirizzo@98gTelefono abit.@114gTelefono lavoro"); - set_header(5,"@47gCAP/Località/Comune/Prov.@114gTelefono altro"); - set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g--------------------------------------------------@98g---------------@114g---------------"); - } -} - -bool TUrgenze_application::user_create() -{ - _rel = new TRelation(LF_SOGGETTI); - _rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS); - _rel->add("LCP", "CODTAB==LOCALITA",1,0,ALIAS_LCP); - _rel->add(LF_COMUNI, "COM==COM"); - // per stampare nell'intestazione la denominazione della sezione - _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); - - _cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice - _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome - _cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice - _cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome - - _form_eti = new TUrgenze_form("AT_ETSOG"); - _msk = new TMask("at3300a"); - _sangue = new TRectype(LF_SOGGETTI); - return TRUE; -} - -bool TUrgenze_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _form_eti; - delete _sangue; - return TRUE; -} - -int at3300(int argc, char* argv[]) -{ - - TUrgenze_application a; - - a.run(argc, argv, "Urgenze"); - - return 0; -} +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" +#include + +#include "at3.h" +#include "at3300a.h" + +#define ALIAS_LCP 100 +#define ALIAS_TCS 200 + +enum ts { undefined = 0, elenco = 1, etichette = 2 }; + +// definizione form per etichette +class TUrgenze_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TUrgenze_form(): TForm() {}; + TUrgenze_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TUrgenze_form() {}; +}; + +class TUrgenze_application : public TPrintapp +{ + static bool filter_func_urgenze(const TRelation* rel); + + TRelation* _rel; + TMask* _msk; + TUrgenze_form* _form_eti; + TRectype* _sangue; + TAssoc_array _categorie; + long _giorni; + + int _cur1, _cur2, _cur3, _cur4; + TParagraph_string _cognome_nome, _dencom; + + TDate _data_stampa; + TDate _dataini, _datafin; + ts _tipo_stampa; + TString16 _codsez, _codsot; + + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual bool set_print(int m); + virtual void set_page(int file, int cnt); + virtual bool preprocess_page (int file, int counter); + +public: + void crea_intestazione(); + void filtra_sezioni(); + void header_sezione(TString16 codsez, TString16 codsot); + TMask& app_mask() { return *_msk; } + TRectype& get_sangue() { return *_sangue; } + + TUrgenze_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {} +}; + +HIDDEN inline TUrgenze_application& app() { return (TUrgenze_application&) main_app(); } + +TCursor* TUrgenze_form::cursor() const { return app().current_cursor(); } + +TRelation* TUrgenze_form::relation() const { return cursor()->relation(); } + +void TUrgenze_application::filtra_sezioni() +{ + TString16 sezini = _msk->get(F_SEZINI); + TString16 sotini = _msk->get(F_SOTINI); + TString16 sezfin = _msk->get(F_SEZFIN); + TString16 sotfin = _msk->get(F_SOTFIN); + select_cursor(_cur4); + TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); + TRectype da(fl.curr()); + TRectype a(fl.curr()); + da.zero(); + a.zero(); + if ((sezini.not_empty()) && (sezini.ok())) + da.put(SOG_CODSEZ, sezini); + if ((sotini.not_empty()) && (sotini.ok())) + da.put(SOG_CODSOT, sotini); + if ((sezfin.not_empty()) && (sezfin.ok())) + a.put(SOG_CODSEZ, sezfin); + if ((sotfin.not_empty()) && (sotfin.ok())) + a.put(SOG_CODSOT, sotfin); + current_cursor()->setregion(da, a); +} + +void TUrgenze_application::set_page(int file, int cnt) +{ + switch (_tipo_stampa) + { + case etichette: + { + TPrint_section& corpo = _form_eti->get_body(); + corpo.reset(); + corpo.update(); + for (int i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + set_row(i+1,riga); + } + force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage + // altrimenti stampa sempre la stessa etichetta + } + break; + case elenco: + { + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######")); + set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@10g#a", &_cognome_nome); + set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@47g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); + set_row(1,"@98g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(1,"@114g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(2,"@47g#a", &_dencom); + set_row(2,"@114g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + set_row(2,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + } + break; + } +} + +bool TUrgenze_application::filter_func_urgenze(const TRelation* rel) +{ + bool filtrato = TRUE; + TLocalisamfile& sog = rel->lfile(); + //filtro per categorie + TAssoc_array& categorie = app()._categorie; + if (categorie.items() != 0) + { + TString16 cat = sog.get(SOG_CATDON); + filtrato = categorie.is_key((const char*) cat); + } + // filtro per tipizzazione + if (filtrato) + { + TRectype from = app().get_sangue(); + filtrato = (sog.curr()==from); + } + // filtro su data donazione + if (filtrato) + { + long giorni_sez = rel->lfile(LF_SEZIONI).get_long(SEZ_INTMINCONV); + long giorni = (giorni_sez > app()._giorni) ? giorni_sez : app()._giorni; + TDate data(TODAY); + data = data - (const long) giorni; + TDate dataultdon = sog.get(SOG_DATAULTDON); + filtrato = (dataultdon <= data); + } + return filtrato; +} + +bool TUrgenze_application::preprocess_page(int file, int counter) +{ + // contatore soggetti stampati + // per ora non c'è + if (_tipo_stampa == elenco) + { + TString80 nome = current_cursor()->curr().get(SOG_COGNOME); + nome << " "; + nome << current_cursor()->curr().get(SOG_NOME); + _cognome_nome = nome; + TString256 localita = ""; + localita << current_cursor()->curr(-ALIAS_LCP).get("S6"); + if (localita.not_empty() && localita.ok()) + { + localita << " "; + localita << current_cursor()->curr(-ALIAS_LCP).get("S0"); + localita << " - "; + } + else + { + localita = current_cursor()->curr(LF_COMUNI).get(COM_CAPCOM); + localita << " "; + } + localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); + localita.trim(); + _dencom = localita; + + // salto pagina se cambio sezione + TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); + TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); + if ((_codsez!=codsez)||(_codsot!=codsot)) + { + if (_codsez != "**") + printer().formfeed(); + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } + } + return TRUE; +} + +void TUrgenze_application::header_sezione(TString16 codsez, TString16 codsot) +{ + TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); + TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); + TString256 intestazione(132); + intestazione = "Sezione: "; + intestazione << codsez; + intestazione << "/"; + intestazione << codsot; + intestazione << " "; + intestazione << densez; + if ((densot.ok())&& (densot.not_empty())) + { + intestazione << "/"; + intestazione << densot; + } + intestazione.center_just(); + set_header(1,"@0g%s", (const char*) intestazione); + return; +} + +bool TUrgenze_application::set_print(int) +{ + _tipo_stampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_ELENCO: + _tipo_stampa = elenco; + _codsez = "**"; + _codsot = "**"; + break; + case F_ETICHETTE: + _tipo_stampa = etichette; + break; + } + if (_tipo_stampa != undefined) + { + reset_files(); + add_file(LF_SOGGETTI); + filtra_sezioni(); + // filtro per categorie + TString16 catpri = _msk->get(F_CAT1); + TString16 catsec = _msk->get(F_CAT2); + TString16 catter = _msk->get(F_CAT3); + TString16 catqua = _msk->get(F_CAT4); + TString16 catqui = _msk->get(F_CAT5); + TString16 catses = _msk->get(F_CAT6); + if (catpri.not_empty() && catpri.ok()) + _categorie.add((const char*) catpri); + if (catsec.not_empty() && catsec.ok()) + _categorie.add((const char*) catsec); + if (catter.not_empty() && catter.ok()) + _categorie.add((const char*) catter); + if (catqua.not_empty() && catqua.ok()) + _categorie.add((const char*) catqua); + if (catqui.not_empty() && catqui.ok()) + _categorie.add((const char*) catqui); + if (catses.not_empty() && catses.ok()) + _categorie.add((const char*) catses); + // filtro per tipizzazione + _sangue->zero(); + TString16 gruppoab0 = _msk->get(F_GRUPPOAB0); + TString16 rhantid = _msk->get(F_RHANTID); + TString16 kell = _msk->get(F_KELL); + TString16 fenotiporh = _msk->get(F_FENOTIPORH); + TString16 du = _msk->get(F_DU); + if ((gruppoab0.ok()) && (gruppoab0.not_empty())) + _sangue->put(SOG_GRUPPOAB0, gruppoab0); + if ((rhantid.ok()) && (rhantid.not_empty())) + _sangue->put(SOG_RHANTID, rhantid); + if ((kell.ok()) && (kell.not_empty())) + _sangue->put(SOG_KELL, kell); + if ((fenotiporh.ok()) && (fenotiporh.not_empty())) + _sangue->put(SOG_FENOTIPORH, fenotiporh); + if ((du.ok()) && (du.not_empty())) + _sangue->put(SOG_DU, du); + _giorni = _msk->get_long(F_GIORNI); + // filtra solo idonei + current_cursor()->setfilter("TCS->S6 == \"I\"", TRUE); + // filtra per categorie, tipizzazione e data donazione + current_cursor()->set_filterfunction (filter_func_urgenze, TRUE); + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TUrgenze_application::crea_intestazione() +{ + reset_header(); + + if (_tipo_stampa == elenco) + { + TString256 sep(132); + sep = "CONVOCAZIONI URGENTI"; + sep.center_just(); + set_header(2, "@0g%s", (const char*) sep); + TString16 data_stampa = _data_stampa.string(); + set_header(2,"@0g%10s", (const char*) data_stampa); + sep = ""; + sep << "Pag. @#"; + set_header(2, "@120g%s", (const char*) sep); + + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); + + set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gIndirizzo@98gTelefono abit.@114gTelefono lavoro"); + set_header(5,"@47gCAP/Località/Comune/Prov.@114gTelefono altro"); + set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g--------------------------------------------------@98g---------------@114g---------------"); + } +} + +bool TUrgenze_application::user_create() +{ + _rel = new TRelation(LF_SOGGETTI); + _rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS); + _rel->add("LCP", "CODTAB==LOCALITA",1,0,ALIAS_LCP); + _rel->add(LF_COMUNI, "COM==COM"); + // per stampare nell'intestazione la denominazione della sezione + _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); + + _cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice + _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome + _cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice + _cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome + + _form_eti = new TUrgenze_form("AT_ETSOG"); + _msk = new TMask("at3300a"); + _sangue = new TRectype(LF_SOGGETTI); + return TRUE; +} + +bool TUrgenze_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_eti; + delete _sangue; + return TRUE; +} + +int at3300(int argc, char* argv[]) +{ + + TUrgenze_application a; + + a.run(argc, argv, "Urgenze"); + + return 0; +} diff --git a/at/at3400.cpp b/at/at3400.cpp index 2d35ee351..8d3422dd4 100755 --- a/at/at3400.cpp +++ b/at/at3400.cpp @@ -1,334 +1,334 @@ -#include -#include -#include - -#include "lf.h" -#include "soggetti.h" -#include "sezioni.h" -#include - -#include "at3.h" -#include "at3400a.h" - -#define ALIAS_LCP 100 -//#define ALIAS_TCS 200 - -enum ts { undefined = 0, elenco = 1, pagine = 2 }; - -// definizione form per pagine anagrafiche -class TModificati_form : public TForm -{ -public: - - virtual TCursor* cursor() const; - virtual TRelation* relation() const; - TPrint_section& get_body() { return section('B'); } ; - TModificati_form(): TForm() {}; - TModificati_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") - : TForm(form,code,editlevel,desc) {}; - virtual ~TModificati_form() {}; -}; - -class TModificati_application : public TPrintapp -{ - static bool filter_func_modificati(const TRelation* rel); - - TRelation* _rel; - TMask* _msk; - TModificati_form* _form_pag; - TAssoc_array _categorie; - - int _cur1, _cur2, _cur3, _cur4; - TParagraph_string _cognome_nome, _dencom; - - TDate _data_stampa; - TDate _dataini, _datafin; - ts _tipo_stampa; - TString16 _codsez, _codsot; - - -protected: - virtual bool user_create(); - virtual bool user_destroy(); - virtual bool set_print(int m); - virtual void set_page(int file, int cnt); - virtual bool preprocess_page (int file, int counter); - -public: - void crea_intestazione(); - void filtra_sezioni(); - void header_sezione(TString16 codsez, TString16 codsot); - TMask& app_mask() { return *_msk; } - - TModificati_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {} -}; - -HIDDEN inline TModificati_application& app() { return (TModificati_application&) main_app(); } - -TCursor* TModificati_form::cursor() const { return app().current_cursor(); } - -TRelation* TModificati_form::relation() const { return cursor()->relation(); } - -void TModificati_application::filtra_sezioni() -{ - TString16 sezini = _msk->get(F_SEZINI); - TString16 sotini = _msk->get(F_SOTINI); - TString16 sezfin = _msk->get(F_SEZFIN); - TString16 sotfin = _msk->get(F_SOTFIN); - select_cursor(_cur4); - TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); - TRectype da(fl.curr()); - TRectype a(fl.curr()); - da.zero(); - a.zero(); - if ((sezini.not_empty()) && (sezini.ok())) - da.put(SOG_CODSEZ, sezini); - if ((sotini.not_empty()) && (sotini.ok())) - da.put(SOG_CODSOT, sotini); - if ((sezfin.not_empty()) && (sezfin.ok())) - a.put(SOG_CODSEZ, sezfin); - if ((sotfin.not_empty()) && (sotfin.ok())) - a.put(SOG_CODSOT, sotfin); - current_cursor()->setregion(da, a); -} - -void TModificati_application::set_page(int file, int cnt) -{ - switch (_tipo_stampa) - { - case pagine: - { - TPrint_section& corpo = _form_pag->get_body(); - corpo.reset(); - corpo.update(); - for (int i = 0; i < corpo.height(); i++) - { - TPrintrow& riga = corpo.row(i); - set_row(i+1,riga); - } - force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta - } - break; - case elenco: - { - set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######")); - set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON)); - set_row(1,"@10g#a", &_cognome_nome); - set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); - set_row(1,"@47g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); - set_row(1,"@98g@S", FLD(LF_SOGGETTI,SOG_TELABI)); - set_row(1,"@114g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); - set_row(2,"@47g#a", &_dencom); - set_row(2,"@114g@S", FLD(LF_SOGGETTI,SOG_TELALT)); - } - break; - } -} - -bool TModificati_application::filter_func_modificati(const TRelation* rel) -{ - bool filtrato = TRUE; - TLocalisamfile& sog = rel->lfile(); - //filtro per categorie - TAssoc_array& categorie = app()._categorie; - if (categorie.items() != 0) - { - TString16 cat = sog.get(SOG_CATDON); - filtrato = categorie.is_key((const char*) cat); - } - // filtro per data aggiornamento - if (filtrato && app()._dataini.ok()) - { - TDate datamod = sog.get(SOG_DATAULTAGG); - filtrato = (datamod > app()._dataini); - } - return filtrato; -} - -bool TModificati_application::preprocess_page(int file, int counter) -{ - // contatore soggetti stampati - // per ora non c'è - if (_tipo_stampa == elenco) - { - TString80 nome = current_cursor()->curr().get(SOG_COGNOME); - nome << " "; - nome << current_cursor()->curr().get(SOG_NOME); - _cognome_nome = nome; - TString256 localita = ""; - localita << current_cursor()->curr(-ALIAS_LCP).get("S6"); - if (localita.not_empty() && localita.ok()) - { - localita << " "; - localita << current_cursor()->curr(-ALIAS_LCP).get("S0"); - localita << " - "; - } - else - { - localita = current_cursor()->curr(LF_COMUNI).get(COM_CAPCOM); - localita << " "; - } - localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); - localita.trim(); - _dencom = localita; - - // salto pagina se cambio sezione - TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); - TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) - { - //if (!_codsez.blank()) - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - header_sezione(codsez, codsot); - } - } - return TRUE; -} - -void TModificati_application::header_sezione(TString16 codsez, TString16 codsot) -{ - TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); - TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); - TString256 intestazione(132); - intestazione = "Sezione: "; - intestazione << codsez; - intestazione << "/"; - intestazione << codsot; - intestazione << " "; - intestazione << densez; - if ((densot.ok())&& (densot.not_empty())) - { - intestazione << "/"; - intestazione << densot; - } - intestazione.center_just(); - set_header(1,"@0g%s", (const char*) intestazione); - return; -} - -bool TModificati_application::set_print(int) -{ - _tipo_stampa = undefined; - KEY tasto; - tasto = _msk->run(); - switch (tasto) - { - case F_ELENCO: - _tipo_stampa = elenco; - //_codsez.spaces(2); - //_codsot.spaces(2); - _codsez = "**"; - _codsez = "**"; - break; - case F_PAGINE: - _tipo_stampa = pagine; - break; - } - if (_tipo_stampa != undefined) - { - reset_files(); - add_file(LF_SOGGETTI); - _dataini = _msk->get(F_DATAINI); - filtra_sezioni(); - - // filtro per categorie - TString16 catpri = _msk->get(F_CAT1); - TString16 catsec = _msk->get(F_CAT2); - TString16 catter = _msk->get(F_CAT3); - TString16 catqua = _msk->get(F_CAT4); - TString16 catqui = _msk->get(F_CAT5); - TString16 catses = _msk->get(F_CAT6); - if (catpri.not_empty() && catpri.ok()) - _categorie.add((const char*) catpri); - if (catsec.not_empty() && catsec.ok()) - _categorie.add((const char*) catsec); - if (catter.not_empty() && catter.ok()) - _categorie.add((const char*) catter); - if (catqua.not_empty() && catqua.ok()) - _categorie.add((const char*) catqua); - if (catqui.not_empty() && catqui.ok()) - _categorie.add((const char*) catqui); - if (catses.not_empty() && catses.ok()) - _categorie.add((const char*) catses); - - current_cursor()->set_filterfunction(filter_func_modificati); - reset_print(); - crea_intestazione(); - return TRUE; - } - else - return FALSE; -} - -void TModificati_application::crea_intestazione() -{ - reset_header(); - - if (_tipo_stampa == elenco) - { - TString256 sep(132); - sep = "ELENCO MODIFICATI"; - TDate data = _msk->get(F_DATAINI); - if (data.ok()) - { - sep << " dal "; - sep << data.string(); - } - sep.center_just(); - set_header(2, "@0g%s", (const char*) sep); - TString16 data_stampa = _data_stampa.string(); - set_header(2,"@0g%10s", (const char*) data_stampa); - sep = ""; - sep << "Pag. @#"; - set_header(2, "@120g%s", (const char*) sep); - - sep = ""; - sep.fill('-'); - set_header(3, (const char *) sep); - - set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gIndirizzo@98gTelefono abit.@114gTelefono lavoro"); - set_header(5,"@47gCAP/Località/Comune/Prov.@114gTelefono altro"); - set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g--------------------------------------------------@98g---------------@114g---------------"); - } -} - -bool TModificati_application::user_create() -{ - _rel = new TRelation(LF_SOGGETTI); - //_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS); - _rel->add("LCP", "CODTAB==LOCALITA",1,0,ALIAS_LCP); - _rel->add(LF_COMUNI, "COM==COM"); - // per stampare nell'intestazione la denominazione della sezione - _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); - - _cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice - _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome - _cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice - _cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome - - _form_pag = new TModificati_form("AT_PAGIN"); - _msk = new TMask("at3400a"); - return TRUE; -} - -bool TModificati_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _form_pag; - return TRUE; -} - -int at3400(int argc, char* argv[]) -{ - - TModificati_application a; - - a.run(argc, argv, "Elenco soggetti modificati"); - - return 0; -} +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" +#include + +#include "at3.h" +#include "at3400a.h" + +#define ALIAS_LCP 100 +//#define ALIAS_TCS 200 + +enum ts { undefined = 0, elenco = 1, pagine = 2 }; + +// definizione form per pagine anagrafiche +class TModificati_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TModificati_form(): TForm() {}; + TModificati_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TModificati_form() {}; +}; + +class TModificati_application : public TPrintapp +{ + static bool filter_func_modificati(const TRelation* rel); + + TRelation* _rel; + TMask* _msk; + TModificati_form* _form_pag; + TAssoc_array _categorie; + + int _cur1, _cur2, _cur3, _cur4; + TParagraph_string _cognome_nome, _dencom; + + TDate _data_stampa; + TDate _dataini, _datafin; + ts _tipo_stampa; + TString16 _codsez, _codsot; + + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual bool set_print(int m); + virtual void set_page(int file, int cnt); + virtual bool preprocess_page (int file, int counter); + +public: + void crea_intestazione(); + void filtra_sezioni(); + void header_sezione(TString16 codsez, TString16 codsot); + TMask& app_mask() { return *_msk; } + + TModificati_application() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {} +}; + +HIDDEN inline TModificati_application& app() { return (TModificati_application&) main_app(); } + +TCursor* TModificati_form::cursor() const { return app().current_cursor(); } + +TRelation* TModificati_form::relation() const { return cursor()->relation(); } + +void TModificati_application::filtra_sezioni() +{ + TString16 sezini = _msk->get(F_SEZINI); + TString16 sotini = _msk->get(F_SOTINI); + TString16 sezfin = _msk->get(F_SEZFIN); + TString16 sotfin = _msk->get(F_SOTFIN); + select_cursor(_cur4); + TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); + TRectype da(fl.curr()); + TRectype a(fl.curr()); + da.zero(); + a.zero(); + if ((sezini.not_empty()) && (sezini.ok())) + da.put(SOG_CODSEZ, sezini); + if ((sotini.not_empty()) && (sotini.ok())) + da.put(SOG_CODSOT, sotini); + if ((sezfin.not_empty()) && (sezfin.ok())) + a.put(SOG_CODSEZ, sezfin); + if ((sotfin.not_empty()) && (sotfin.ok())) + a.put(SOG_CODSOT, sotfin); + current_cursor()->setregion(da, a); +} + +void TModificati_application::set_page(int file, int cnt) +{ + switch (_tipo_stampa) + { + case pagine: + { + TPrint_section& corpo = _form_pag->get_body(); + corpo.reset(); + corpo.update(); + for (int i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + set_row(i+1,riga); + } + force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage + // altrimenti stampa sempre la stessa etichetta + } + break; + case elenco: + { + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######")); + set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@10g#a", &_cognome_nome); + set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@47g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); + set_row(1,"@98g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(1,"@114g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(2,"@47g#a", &_dencom); + set_row(2,"@114g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + } + break; + } +} + +bool TModificati_application::filter_func_modificati(const TRelation* rel) +{ + bool filtrato = TRUE; + TLocalisamfile& sog = rel->lfile(); + //filtro per categorie + TAssoc_array& categorie = app()._categorie; + if (categorie.items() != 0) + { + TString16 cat = sog.get(SOG_CATDON); + filtrato = categorie.is_key((const char*) cat); + } + // filtro per data aggiornamento + if (filtrato && app()._dataini.ok()) + { + TDate datamod = sog.get(SOG_DATAULTAGG); + filtrato = (datamod > app()._dataini); + } + return filtrato; +} + +bool TModificati_application::preprocess_page(int file, int counter) +{ + // contatore soggetti stampati + // per ora non c'è + if (_tipo_stampa == elenco) + { + TString80 nome = current_cursor()->curr().get(SOG_COGNOME); + nome << " "; + nome << current_cursor()->curr().get(SOG_NOME); + _cognome_nome = nome; + TString256 localita = ""; + localita << current_cursor()->curr(-ALIAS_LCP).get("S6"); + if (localita.not_empty() && localita.ok()) + { + localita << " "; + localita << current_cursor()->curr(-ALIAS_LCP).get("S0"); + localita << " - "; + } + else + { + localita = current_cursor()->curr(LF_COMUNI).get(COM_CAPCOM); + localita << " "; + } + localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); + localita.trim(); + _dencom = localita; + + // salto pagina se cambio sezione + TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); + TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); + if ((_codsez!=codsez)||(_codsot!=codsot)) + { + //if (!_codsez.blank()) + if (_codsez != "**") + printer().formfeed(); + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } + } + return TRUE; +} + +void TModificati_application::header_sezione(TString16 codsez, TString16 codsot) +{ + TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); + TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); + TString256 intestazione(132); + intestazione = "Sezione: "; + intestazione << codsez; + intestazione << "/"; + intestazione << codsot; + intestazione << " "; + intestazione << densez; + if ((densot.ok())&& (densot.not_empty())) + { + intestazione << "/"; + intestazione << densot; + } + intestazione.center_just(); + set_header(1,"@0g%s", (const char*) intestazione); + return; +} + +bool TModificati_application::set_print(int) +{ + _tipo_stampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_ELENCO: + _tipo_stampa = elenco; + //_codsez.spaces(2); + //_codsot.spaces(2); + _codsez = "**"; + _codsez = "**"; + break; + case F_PAGINE: + _tipo_stampa = pagine; + break; + } + if (_tipo_stampa != undefined) + { + reset_files(); + add_file(LF_SOGGETTI); + _dataini = _msk->get(F_DATAINI); + filtra_sezioni(); + + // filtro per categorie + TString16 catpri = _msk->get(F_CAT1); + TString16 catsec = _msk->get(F_CAT2); + TString16 catter = _msk->get(F_CAT3); + TString16 catqua = _msk->get(F_CAT4); + TString16 catqui = _msk->get(F_CAT5); + TString16 catses = _msk->get(F_CAT6); + if (catpri.not_empty() && catpri.ok()) + _categorie.add((const char*) catpri); + if (catsec.not_empty() && catsec.ok()) + _categorie.add((const char*) catsec); + if (catter.not_empty() && catter.ok()) + _categorie.add((const char*) catter); + if (catqua.not_empty() && catqua.ok()) + _categorie.add((const char*) catqua); + if (catqui.not_empty() && catqui.ok()) + _categorie.add((const char*) catqui); + if (catses.not_empty() && catses.ok()) + _categorie.add((const char*) catses); + + current_cursor()->set_filterfunction(filter_func_modificati); + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TModificati_application::crea_intestazione() +{ + reset_header(); + + if (_tipo_stampa == elenco) + { + TString256 sep(132); + sep = "ELENCO MODIFICATI"; + TDate data = _msk->get(F_DATAINI); + if (data.ok()) + { + sep << " dal "; + sep << data.string(); + } + sep.center_just(); + set_header(2, "@0g%s", (const char*) sep); + TString16 data_stampa = _data_stampa.string(); + set_header(2,"@0g%10s", (const char*) data_stampa); + sep = ""; + sep << "Pag. @#"; + set_header(2, "@120g%s", (const char*) sep); + + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); + + set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gIndirizzo@98gTelefono abit.@114gTelefono lavoro"); + set_header(5,"@47gCAP/Località/Comune/Prov.@114gTelefono altro"); + set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g--------------------------------------------------@98g---------------@114g---------------"); + } +} + +bool TModificati_application::user_create() +{ + _rel = new TRelation(LF_SOGGETTI); + //_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS); + _rel->add("LCP", "CODTAB==LOCALITA",1,0,ALIAS_LCP); + _rel->add(LF_COMUNI, "COM==COM"); + // per stampare nell'intestazione la denominazione della sezione + _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); + + _cur1 = add_cursor(new TCursor(_rel, "", 1)); //cursore ordinamento per codice + _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome + _cur3 = add_cursor(new TCursor(_rel, "", 3)); //cursore ordinamento per sezione+sottogruppo+codice + _cur4 = add_cursor(new TCursor(_rel, "", 4)); //cursore ordinamento per sezione+sottogruppo+cognome e nome + + _form_pag = new TModificati_form("AT_PAGIN"); + _msk = new TMask("at3400a"); + return TRUE; +} + +bool TModificati_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_pag; + return TRUE; +} + +int at3400(int argc, char* argv[]) +{ + + TModificati_application a; + + a.run(argc, argv, "Elenco soggetti modificati"); + + return 0; +} diff --git a/at/at3500.cpp b/at/at3500.cpp index bd7a8b2ee..23917b5ca 100755 --- a/at/at3500.cpp +++ b/at/at3500.cpp @@ -1,360 +1,360 @@ -#include -#include -#include -#include - -#include "lf.h" -#include "soggetti.h" -#include "sezioni.h" - -#include "at3.h" -#include "at3500a.h" - -#define ALIAS_LCP 100 -#define ALIAS_TCS 200 -#define IDON_SI "SI" -#define IDON_AF "AF" - -enum ts { undefined = 0, elenco = 1, etichette = 2, cartoline = 3 }; - -// definizione form per etichette -class TScadenze_form : public TForm -{ -public: - - virtual TCursor* cursor() const; - virtual TRelation* relation() const; - TPrint_section& get_body() { return section('B'); } ; - TScadenze_form(): TForm() {}; - TScadenze_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") - : TForm(form,code,editlevel,desc) {}; - virtual ~TScadenze_form() {}; -}; - -class TScadenze_application : public TPrintapp -{ - TRelation* _rel; - TMask* _msk; - TScadenze_form* _form_eti; - TAssoc_array _categorie; - - 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_scadenze(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(TString16 codsez, TString16 codsot); - TMask& app_mask() { return *_msk; } - TScadenze_application() : _data_stampa(TODAY), _cognome_nome("",25) {} -}; - -HIDDEN inline TScadenze_application& app() { return (TScadenze_application&) main_app(); } - -TCursor* TScadenze_form::cursor() const { return app().current_cursor(); } - -TRelation* TScadenze_form::relation() const { return cursor()->relation(); } - -void TScadenze_application::filtra_sezioni() -{ - TString16 sezini = _msk->get(F_SEZINI); - TString16 sotini = _msk->get(F_SOTINI); - TString16 sezfin = _msk->get(F_SEZFIN); - TString16 sotfin = _msk->get(F_SOTFIN); - select_cursor(_cur4); - TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); - TRectype da(fl.curr()); - TRectype a(fl.curr()); - da.zero(); - a.zero(); - if ((sezini.not_empty()) && (sezini.ok())) - da.put(SOG_CODSEZ, sezini); - if ((sotini.not_empty()) && (sotini.ok())) - da.put(SOG_CODSOT, sotini); - if ((sezfin.not_empty()) && (sezfin.ok())) - a.put(SOG_CODSEZ, sezfin); - if ((sotfin.not_empty()) && (sotfin.ok())) - a.put(SOG_CODSOT, sotfin); - current_cursor()->setregion(da, a); -} - -void TScadenze_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 TScadenze_application::filter_func_scadenze(const TRelation* rel) -{ - bool filtrato = TRUE; - TLocalisamfile& sog = rel->lfile(); - // filtro per categorie - TAssoc_array categorie = app()._categorie; - if (categorie.items() != 0) - { - TString16 cat = sog.get(SOG_CATDON); - filtrato = categorie.is_key((const char*) cat); - } - // filtro per data di prossima donazione - if (filtrato) - { - 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); - } - filtrato = (sog->curr() >= from) && (sog->curr() <= to); - } - return filtrato; -} - -bool TScadenze_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 - TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); - TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) - { - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - header_sezione(codsez, codsot); - } - } - return TRUE; -} - -void TScadenze_application::header_sezione(TString16 codsez, TString16 codsot) -{ - TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); - TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); - TString256 intestazione(132); - intestazione = "Sezione: "; - intestazione << codsez; - intestazione << "/"; - intestazione << codsot; - intestazione << " "; - intestazione << densez; - if ((densot.ok())&& (densot.not_empty())) - { - intestazione << "/"; - intestazione << densot; - } - intestazione.center_just(); - set_header(1,"@0g%s", (const char*) intestazione); - return; -} - -bool TScadenze_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 categorie - TString16 catpri = _msk->get(F_CAT1); - TString16 catsec = _msk->get(F_CAT2); - TString16 catter = _msk->get(F_CAT3); - TString16 catqua = _msk->get(F_CAT4); - TString16 catqui = _msk->get(F_CAT5); - TString16 catses = _msk->get(F_CAT6); - if (catpri.not_empty() && catpri.ok()) - _categorie.add((const char*) catpri); - if (catsec.not_empty() && catsec.ok()) - _categorie.add((const char*) catsec); - if (catter.not_empty() && catter.ok()) - _categorie.add((const char*) catter); - if (catqua.not_empty() && catqua.ok()) - _categorie.add((const char*) catqua); - if (catqui.not_empty() && catqui.ok()) - _categorie.add((const char*) catqui); - if (catses.not_empty() && catses.ok()) - _categorie.add((const char*) catses); - // filtro per 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_scadenze); - reset_print(); - crea_intestazione(); - return TRUE; - } - else - return FALSE; -} - -void TScadenze_application::crea_intestazione() -{ - reset_header(); - - if (_tipo_stampa == elenco) - { - TString256 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 TScadenze_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("at3500a"); - - _form_eti = new TScadenze_form("AT_ETSOG"); - - return TRUE; -} - -bool TScadenze_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _form_eti; - return TRUE; -} - -int at3500(int argc, char* argv[]) -{ - - TScadenze_application a; - - a.run(argc, argv, "Scadenze di donazione"); - - return 0; -} +#include +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" + +#include "at3.h" +#include "at3500a.h" + +#define ALIAS_LCP 100 +#define ALIAS_TCS 200 +#define IDON_SI "SI" +#define IDON_AF "AF" + +enum ts { undefined = 0, elenco = 1, etichette = 2, cartoline = 3 }; + +// definizione form per etichette +class TScadenze_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TScadenze_form(): TForm() {}; + TScadenze_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TScadenze_form() {}; +}; + +class TScadenze_application : public TPrintapp +{ + TRelation* _rel; + TMask* _msk; + TScadenze_form* _form_eti; + TAssoc_array _categorie; + + 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_scadenze(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(TString16 codsez, TString16 codsot); + TMask& app_mask() { return *_msk; } + TScadenze_application() : _data_stampa(TODAY), _cognome_nome("",25) {} +}; + +HIDDEN inline TScadenze_application& app() { return (TScadenze_application&) main_app(); } + +TCursor* TScadenze_form::cursor() const { return app().current_cursor(); } + +TRelation* TScadenze_form::relation() const { return cursor()->relation(); } + +void TScadenze_application::filtra_sezioni() +{ + TString16 sezini = _msk->get(F_SEZINI); + TString16 sotini = _msk->get(F_SOTINI); + TString16 sezfin = _msk->get(F_SEZFIN); + TString16 sotfin = _msk->get(F_SOTFIN); + select_cursor(_cur4); + TLocalisamfile& fl = current_cursor()->file(LF_SOGGETTI); + TRectype da(fl.curr()); + TRectype a(fl.curr()); + da.zero(); + a.zero(); + if ((sezini.not_empty()) && (sezini.ok())) + da.put(SOG_CODSEZ, sezini); + if ((sotini.not_empty()) && (sotini.ok())) + da.put(SOG_CODSOT, sotini); + if ((sezfin.not_empty()) && (sezfin.ok())) + a.put(SOG_CODSEZ, sezfin); + if ((sotfin.not_empty()) && (sotfin.ok())) + a.put(SOG_CODSOT, sotfin); + current_cursor()->setregion(da, a); +} + +void TScadenze_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 TScadenze_application::filter_func_scadenze(const TRelation* rel) +{ + bool filtrato = TRUE; + TLocalisamfile& sog = rel->lfile(); + // filtro per categorie + TAssoc_array categorie = app()._categorie; + if (categorie.items() != 0) + { + TString16 cat = sog.get(SOG_CATDON); + filtrato = categorie.is_key((const char*) cat); + } + // filtro per data di prossima donazione + if (filtrato) + { + 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); + } + filtrato = (sog->curr() >= from) && (sog->curr() <= to); + } + return filtrato; +} + +bool TScadenze_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 + TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); + TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); + if ((_codsez!=codsez)||(_codsot!=codsot)) + { + if (_codsez != "**") + printer().formfeed(); + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } + } + return TRUE; +} + +void TScadenze_application::header_sezione(TString16 codsez, TString16 codsot) +{ + TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); + TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); + TString256 intestazione(132); + intestazione = "Sezione: "; + intestazione << codsez; + intestazione << "/"; + intestazione << codsot; + intestazione << " "; + intestazione << densez; + if ((densot.ok())&& (densot.not_empty())) + { + intestazione << "/"; + intestazione << densot; + } + intestazione.center_just(); + set_header(1,"@0g%s", (const char*) intestazione); + return; +} + +bool TScadenze_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 categorie + TString16 catpri = _msk->get(F_CAT1); + TString16 catsec = _msk->get(F_CAT2); + TString16 catter = _msk->get(F_CAT3); + TString16 catqua = _msk->get(F_CAT4); + TString16 catqui = _msk->get(F_CAT5); + TString16 catses = _msk->get(F_CAT6); + if (catpri.not_empty() && catpri.ok()) + _categorie.add((const char*) catpri); + if (catsec.not_empty() && catsec.ok()) + _categorie.add((const char*) catsec); + if (catter.not_empty() && catter.ok()) + _categorie.add((const char*) catter); + if (catqua.not_empty() && catqua.ok()) + _categorie.add((const char*) catqua); + if (catqui.not_empty() && catqui.ok()) + _categorie.add((const char*) catqui); + if (catses.not_empty() && catses.ok()) + _categorie.add((const char*) catses); + // filtro per 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_scadenze); + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TScadenze_application::crea_intestazione() +{ + reset_header(); + + if (_tipo_stampa == elenco) + { + TString256 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 TScadenze_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("at3500a"); + + _form_eti = new TScadenze_form("AT_ETSOG"); + + return TRUE; +} + +bool TScadenze_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_eti; + return TRUE; +} + +int at3500(int argc, char* argv[]) +{ + + TScadenze_application a; + + a.run(argc, argv, "Scadenze di donazione"); + + return 0; +} diff --git a/at/at3600.cpp b/at/at3600.cpp new file mode 100755 index 000000000..e4f5c3f75 --- /dev/null +++ b/at/at3600.cpp @@ -0,0 +1,347 @@ +#include +#include +#include +#include + +#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; +} diff --git a/at/at3600a.h b/at/at3600a.h new file mode 100755 index 000000000..705a2dd5b --- /dev/null +++ b/at/at3600a.h @@ -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 diff --git a/at/at3600a.uml b/at/at3600a.uml new file mode 100755 index 000000000..997b4ecdd --- /dev/null +++ b/at/at3600a.uml @@ -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 diff --git a/at/at4.cpp b/at/at4.cpp index 9b751deb9..82bd6a7e5 100755 --- a/at/at4.cpp +++ b/at/at4.cpp @@ -1,21 +1,27 @@ -#include -#include - -#include "at4.h" - -#define usage "Error - usage : %s -[0]" - -int main(int argc, char** argv) -{ - int rt = 0 ; - const int r = (argc > 1) ? atoi(&argv[1][1]) : -1; - - switch (r) - { - case 0: - rt = at4100(argc, argv); break; -default: - error_box(usage, argv[0]) ; rt = 1; break; - } - return rt; -} +#include +#include +#include + +#include "at4.h" + +#define usage "Error - usage : %s -{0|1|2}" + +int main(int argc,char** argv) + +{ + int rt = -1 ; + const int r = (argc > 1) ? atoi(&argv[1][1]) : -1; + + switch (r) + { + case 0: + rt = at4100(argc,argv) ; break; + case 1: + rt = at4200(argc,argv) ; break; + case 2: + rt = at4300(argc,argv) ; break; + default: + error_box(usage, argv[0]) ; break; + } + return rt; +} diff --git a/at/at4.url b/at/at4.url index 3633e2365..d2aa4ced7 100755 --- a/at/at4.url +++ b/at/at4.url @@ -1,48 +1,25 @@ #define APPNAME AVIS #define QAPPNAME "AVIS" #define LIBDIR f:\xvt.403\win_x86\ptk\lib +#define QFIRMNAME "AGA Informatica S.r.l." #include -/* ---------------------------------------------------- - * at4 -0 - * ---------------------------------------------------- */ +/* at4 -0 scadenze di donazione */ MENU TASK_MENUBAR - SUBMENU MENU_FILE "~File" + SUBMENU MENU_FILE "~File" -/* ---------------------------------------------------- - * at4 -1 - * ---------------------------------------------------- */ + +/* at4 -1 urgenze */ MENUBAR MENU_BAR(1) MENU MENU_BAR(1) - SUBMENU MENU_FILE "~File" + SUBMENU MENU_FILE "~File" -/* ---------------------------------------------------- - * at4 -2 - * ---------------------------------------------------- */ - +/* at4 -2 convocazioni per pi— sezioni (parma) */ MENUBAR MENU_BAR(2) MENU MENU_BAR(2) - 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" + SUBMENU MENU_FILE "~File" diff --git a/at/at4100.cpp b/at/at4100.cpp index d60c15df2..41d01c008 100755 --- a/at/at4100.cpp +++ b/at/at4100.cpp @@ -1,52 +1,59 @@ -#include #include +#include #include #include #include "lf.h" #include "soggetti.h" #include "sezioni.h" -#include "contsan.h" #include "at4.h" #include "at4100a.h" +#include "at4100b.h" +#include "at4100c.h" #define ALIAS_LCP 100 #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 -class TSitsan_form : public TForm +class TScadenze_form : public TForm { public: virtual TCursor* cursor() const; virtual TRelation* relation() const; TPrint_section& get_body() { return section('B'); } ; - TSitsan_form(): TForm() {}; - TSitsan_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + TScadenze_form(): TForm() {}; + TScadenze_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") : TForm(form,code,editlevel,desc) {}; - virtual ~TSitsan_form() {}; + virtual ~TScadenze_form() {}; }; -class TSitsan_application : public TPrintapp +class TScadenze_application : public TPrintapp { TRelation* _rel; TMask* _msk; - TSitsan_form* _form_eti; - + TScadenze_form* _form_eti; + TScadenze_form* _form_car; + TAssoc_array _categorie; + int _cur1, _cur2, _cur3, _cur4; TParagraph_string _cognome_nome; TDate _data_stampa; + TDate _dataini, _datafin, _dataultid; + bool _usomodo, _usasez; + TString16 _giorni; + TString16 _procdon, _modo, _ab01, _ab02, _ab03, _rh; 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; - TString _tipo; - long _codmed; - - static bool filter_func_sitsan(const TRelation *); + static bool filter_func_scadenze(const TRelation* rel); protected: virtual bool user_create(); @@ -54,45 +61,65 @@ protected: virtual bool set_print(int m); virtual void set_page(int file, int cnt); virtual bool preprocess_page(int file, int counter); + ts dati_cartoline(); public: void crea_intestazione(); void 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; } - 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); - TString sotini = _msk->get(F_SOTINI); - TString sezfin = _msk->get(F_SEZFIN); - TString sotfin = _msk->get(F_SOTFIN); + TMask msk("at4100b"); + if (msk.run() == K_ENTER) + { + _invitoper = msk.get(F_INVITOPER); + _data = msk.get(F_DATA); + _presso1 = msk.get(F_PRESSO1); + _presso2 = msk.get(F_PRESSO2); + _presso3 = msk.get(F_PRESSO3); + _presso4 = msk.get(F_PRESSO4); + _datacart = msk.get(F_DATACART); + _orario = msk.get(F_ORARIO); + _note = msk.get(F_NOTE); + _usasez = msk.get_bool(F_USASEZ); + return cartoline; + } + else + return undefined; +} + +void 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); - 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())) + TRectype da(LF_SOGGETTI); + TRectype a(LF_SOGGETTI); + if (sezini.not_empty()) da.put(SOG_CODSEZ, sezini); - if ((sotini.not_empty()) && (sotini.ok())) + if (sotini.not_empty()) da.put(SOG_CODSOT, sotini); - if ((sezfin.not_empty()) && (sezfin.ok())) + if (sezfin.not_empty()) a.put(SOG_CODSEZ, sezfin); - if ((sotfin.not_empty()) && (sotfin.ok())) + if (sotfin.not_empty()) a.put(SOG_CODSOT, sotfin); 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 switch (_tipo_stampa) @@ -100,7 +127,54 @@ void TSitsan_application::set_page(int file, int cnt) 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 cartoline: + { + TPrint_section& corpo = _form_car->get_body(); + const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); + const TString16 codsot = current_cursor()->curr().get(SOG_CODSOT); + if ((_codsez!=codsez)||(_codsot!=codsot)) + { + _codsez = codsez; + _codsot = codsot; + dati_sezione(codsez, codsot); + corpo.reset(); + TForm_item& intest1 = corpo.find_field(CAR_INTEST1); + intest1.set(_intest1); + TForm_item& intest2 = corpo.find_field(CAR_INTEST2); + intest2.set(_intest2); + TForm_item& intest3 = corpo.find_field(CAR_INTEST3); + intest3.set(_intest3); + TForm_item& intest4 = corpo.find_field(CAR_INTEST4); + intest4.set(_intest4); + TForm_item& invito = corpo.find_field(CAR_INVITOPER); + invito.set(_invitoper); + TForm_item& data = corpo.find_field(CAR_DATA); + data.set(_data); + TForm_item& presso1 = corpo.find_field(CAR_PRESSO1); + presso1.set(_presso1); + TForm_item& presso2 = corpo.find_field(CAR_PRESSO2); + presso2.set(_presso2); + TForm_item& presso3 = corpo.find_field(CAR_PRESSO3); + presso3.set(_presso3); + TForm_item& presso4 = corpo.find_field(CAR_PRESSO4); + presso4.set(_presso4); + TForm_item& orario = corpo.find_field(CAR_ORARIO); + orario.set(_orario); + TForm_item& datacart = corpo.find_field(CAR_DATACART); + datacart.set(_datacart); + TForm_item& note = corpo.find_field(CAR_NOTE); + note.set(_note); + } corpo.update(); for (int i = 0; i < corpo.height(); i++) { @@ -113,133 +187,137 @@ void TSitsan_application::set_page(int file, int cnt) break; case elenco: { - set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######")); - set_row(1,"@7g@S", FLD(LF_SOGGETTI,SOG_CATDON)); - set_row(1,"@10g#a", &_cognome_nome); - set_row(1,"@36g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); - set_row(1,"@47g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID)); // potremmo mettere anche datastato - set_row(1,"@58g@S", FLD(LF_SOGGETTI,SOG_IDON1)); - set_row(1,"@61g@S", FLD(LF_SOGGETTI,SOG_IDON2)); - set_row(1,"@64g@S", FLD(LF_SOGGETTI,SOG_IDON3)); - set_row(1,"@67g@S", FLD(LF_SOGGETTI,SOG_IDON4)); - - set_row(2,"@50g@S", FLD(LF_SOGGETTI,SOG_STATO)); + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"#########")); + set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@13g@S", FLD(LF_SOGGETTI,SOG_COGNOME)); + set_row(1,"@39g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@50g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSSI)); + set_row(1,"@61g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSAF)); + set_row(1,"@72g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + set_row(1,"@83g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID)); + set_row(1,"@94g@S", FLD(LF_SOGGETTI,SOG_IDON1)); + set_row(1,"@97g@S", FLD(LF_SOGGETTI,SOG_IDON2)); + set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_GRUPPOAB0)); + + set_row(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; } } -bool TSitsan_application::filter_func_sitsan(const TRelation * rel) +bool TScadenze_application::filter_func_scadenze(const TRelation* rel) { - bool filtrato = TRUE; - - TLocalisamfile* sog = &(rel->lfile(LF_SOGGETTI)); - - 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); - + TLocalisamfile& sog = rel->lfile(); + // filtro per categorie + TAssoc_array& categorie = app()._categorie; if (categorie.items() != 0) { - TString catsog = sog->curr().get(SOG_CATDON); - if (categorie.is_key((const char*) catsog)) - filtrato = TRUE; - else - filtrato = FALSE; + const TString16 cat = sog.get(SOG_CATDON); + filtrato = categorie.is_key((const char*) cat); } - if (filtrato) + // filtro per modalita' di convocazione + if (filtrato && app()._usomodo) { - const long codice = sog->curr().get_long(SOG_CODICE); - const int prog = 999; - TLocalisamfile con(LF_CONTSAN); - con.zero(); - con.put(CON_CODICE,codice); - con.put(CON_PROGCON,prog); - int err = con.read(_isgteq); - if (err == _isemptyfile) - filtrato = FALSE; + 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) + { + TDate datapross(NULLDATE); + if (app()._procdon == IDON_SI) + datapross = sog.get(SOG_DATAPROSSI); else + datapross = sog.get(SOG_DATAPROSAF); + if (datapross.ok()) { - if (err==NOERR) - { - const long codcon = con.get_long(CON_CODICE); - if (codice != codcon) - { - err = con.prev(); - if (err != NOERR) - filtrato = FALSE; - } - } - if (filtrato) - { - const long codsog = con.get_long(CON_CODICE); - if (codice != codsog) - filtrato = FALSE; - else if (app()._usotipo) - { - TString tipo = con.get(CON_TIPOCON); - if (tipo == app()._tipo) - filtrato = TRUE; - else - filtrato = FALSE; - } - } - } + if (app()._dataini.ok()) + filtrato = datapross >= app()._dataini; + if (filtrato) + if (app()._datafin.ok()) + filtrato = datapross <= app()._datafin; + } + else + 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; } -bool TSitsan_application::preprocess_page(int file, int counter) +bool TScadenze_application::preprocess_page(int file, int counter) { // contatore soggetti stampati // 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 << current_cursor()->curr().get(SOG_NOME); _cognome_nome = nome; // salto pagina se cambio sezione - TString codsez = current_cursor()->curr().get(SOG_CODSEZ); - TString codsot = current_cursor()->curr().get(SOG_CODSOT); + //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.blank()) if (_codsez != "**") printer().formfeed(); _codsez = codsez; _codsot = codsot; header_sezione(codsez, codsot); } - } + } + break; + } 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); - TString densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); + 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; @@ -257,7 +335,30 @@ void TSitsan_application::header_sezione(TString codsez, TString codsot) 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; KEY tasto; @@ -266,37 +367,73 @@ bool TSitsan_application::set_print(int m) { case F_ELENCO: _tipo_stampa = elenco; - //_codsez.spaces(2); - //_codsot.spaces(2); - _codsez = "**"; - _codsot = "**"; - break; + break; case F_ETICHETTE: _tipo_stampa = etichette; - break; + break; + case F_CARTOLINE: + _tipo_stampa = dati_cartoline(); + break; } if (_tipo_stampa != undefined) { + _codsez = "**"; + _codsot = "**"; reset_files(); add_file(LF_SOGGETTI); - - _usotipo = _msk->get_bool(F_USOTIPO); - _tipo = _msk->get(F_TIPO); - _codmed = _msk->get_long(F_CODMED); - - // filtro per sezioni selezionati + _dataini = _msk->get(F_DATAINI); + _datafin = _msk->get(F_DATAFIN); + _dataultid = _msk->get(F_DATAULTID); + _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 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 - current_cursor()->set_filterfunction(filter_func_sitsan); + // 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 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(); crea_intestazione(); return TRUE; @@ -305,26 +442,31 @@ bool TSitsan_application::set_print(int m) return FALSE; } -void TSitsan_application::crea_intestazione() +void TScadenze_application::crea_intestazione() { reset_header(); if (_tipo_stampa == elenco) { TString sep(132); - sep = "SITUAZIONE SANITARIA ATTUALE"; - TString tipo = _msk->get(F_TIPO); - if ((tipo.ok()) && (tipo.not_empty())) - { - sep << ": tipo "; - sep << tipo; - tipo = _msk->get(F_D_TIPO); - sep << " "; - sep << tipo; + 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); - TString data_stampa = _data_stampa.string(); + TString16 data_stampa = _data_stampa.string(); set_header(2,"@0g%10s", (const char*) data_stampa); sep = ""; sep << "Pag. @#"; @@ -334,22 +476,21 @@ void TSitsan_application::crea_intestazione() sep.fill('-'); set_header(3, (const char *) sep); - set_header(4,"@0gCod.@7gC.@10gCognome e nome@36gNato il@47gData ID@58gTipi idon."); - set_header(5,"@47gTipo/Esito"); - set_header(6,"@0g------@7g--@10g-------------------------@36g----------@47g----------@58g-- -- -- --"); + set_header(5,"@0gCod.@10gC.@13gCognome@39gNato il@50gData pr.SI@61gData pr.AF@72gData/Tipo@83gData/Tipo@94gIdon.@100gAB0"); + set_header(6,"@13gNome@50gInterv. SI@61gInterv. AF@72gult. don.@83gult. idon.@94gper@100gRh"); + 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->add("TCS","CODTAB==STATO",1,0,ALIAS_TCS); - _rel->add("LCP","CODTAB==LOCALITA",1,0,ALIAS_LCP); - _rel->add(LF_COMUNI,"COM==COM"); + _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 la denominazione della sezione nell'intestazione - _rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT"); - _rel->add(LF_CONTSAN,"CODICE==CODICE"); - + _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 @@ -357,25 +498,27 @@ bool TSitsan_application::user_create() _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; } -bool TSitsan_application::user_destroy() +bool TScadenze_application::user_destroy() { delete _msk; delete _rel; delete _form_eti; + delete _form_car; return TRUE; } 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; } diff --git a/at/at4100a.h b/at/at4100a.h index cf731d4c4..6d2c5cb90 100755 --- a/at/at4100a.h +++ b/at/at4100a.h @@ -1,4 +1,4 @@ -// situazione sanitaria attuale +// Scadenze di donazione // definizione campi per maschera di selezione #define F_SEZINI 101 @@ -23,17 +23,25 @@ #define F_CAT6 211 #define F_D_CAT6 212 -#define F_USOTIPO 301 -#define F_TIPO 302 -#define F_D_TIPO 303 -//#define F_USOPROSS 304 -//#define F_PROSS 305 -//#define F_D_PROSS 306 -#define F_DATAINI 304 -#define F_DATAFIN 305 -#define F_CODMED 307 -#define F_COGNMED 308 -#define F_NOMMED 309 +#define F_PROCDON1 301 +//#define F_PROCDON2 302 +#define F_DATAINI 303 +#define F_DATAFIN 304 +#define F_GPD_LUN 305 +#define F_GPD_MAR 306 +#define F_GPD_MER 307 +#define F_GPD_GIO 308 +#define F_GPD_VEN 309 +#define F_GPD_SAB 310 +#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_ETICHETTE 402 +#define F_CARTOLINE 403 diff --git a/at/at4100a.uml b/at/at4100a.uml index 430ae7911..c68add130 100755 --- a/at/at4100a.uml +++ b/at/at4100a.uml @@ -4,12 +4,12 @@ PAGE "Definizione Stampe" -1 -1 78 20 GROUPBOX DLG_NULL 77 4 BEGIN - PROMPT 1 1 "Scelta sezioni/sottogruppi" + PROMPT 1 0 "Scelta sezioni/sottogruppi" END STRING F_SEZINI 2 BEGIN - PROMPT 2 2 "Da " + PROMPT 2 1 "Da " FLAGS "U" USE LF_SEZIONI INPUT CODSEZ F_SEZINI @@ -28,7 +28,7 @@ END STRING F_D_SEZINI 25 BEGIN - PROMPT 11 2 "" + PROMPT 11 1 "" FLAGS "U" USE LF_SEZIONI KEY 2 INPUT DENSEZ F_D_SEZINI @@ -43,7 +43,7 @@ END STRING F_SOTINI 2 BEGIN - PROMPT 2 3 " " + PROMPT 2 2 " " COPY ALL F_SEZINI CHECKTYPE SEARCH HELP "Codice sottogruppo da cui partire" @@ -51,7 +51,7 @@ END STRING F_D_SOTINI 25 BEGIN - PROMPT 11 3 "" + PROMPT 11 2 "" FLAGS "U" COPY USE F_D_SEZINI INPUT DENSEZ F_D_SEZINI @@ -64,7 +64,7 @@ END STRING F_SEZFIN 2 BEGIN - PROMPT 41 2 "A " + PROMPT 41 1 "A " FLAGS "U" USE LF_SEZIONI INPUT CODSEZ F_SEZFIN @@ -83,7 +83,7 @@ END STRING F_D_SEZFIN 25 BEGIN - PROMPT 49 2 "" + PROMPT 49 1 "" FLAGS "U" USE LF_SEZIONI KEY 2 INPUT DENSEZ F_D_SEZFIN @@ -98,7 +98,7 @@ END STRING F_SOTFIN 2 BEGIN - PROMPT 41 3 " " + PROMPT 41 2 " " COPY ALL F_SEZFIN CHECKTYPE SEARCH HELP "Codice sottogruppo finale" @@ -106,7 +106,7 @@ END STRING F_D_SOTFIN 25 BEGIN - PROMPT 49 3 "" + PROMPT 49 2 "" FLAGS "U" COPY USE F_D_SEZFIN INPUT DENSEZ F_D_SEZFIN @@ -119,13 +119,13 @@ END GROUPBOX DLG_NULL 77 5 BEGIN - PROMPT 1 5 "Categorie" + PROMPT 1 4 "Categorie" END STRING F_CAT1 2 BEGIN - PROMPT 2 6 "" + PROMPT 2 5 "" FLAGS "U" USE CTD INPUT CODTAB F_CAT1 @@ -140,13 +140,13 @@ END STRING F_D_CAT1 30 BEGIN - PROMPT 8 6 "" + PROMPT 8 5 "" FLAGS "D" END STRING F_CAT2 2 BEGIN - PROMPT 2 7 "" + PROMPT 2 6 "" FLAGS "U" USE CTD INPUT CODTAB F_CAT2 @@ -160,13 +160,13 @@ END STRING F_D_CAT2 30 BEGIN - PROMPT 8 7 "" + PROMPT 8 6 "" FLAGS "D" END STRING F_CAT3 2 BEGIN - PROMPT 2 8 "" + PROMPT 2 7 "" FLAGS "U" USE CTD INPUT CODTAB F_CAT3 @@ -180,13 +180,13 @@ END STRING F_D_CAT3 30 BEGIN - PROMPT 8 8 "" + PROMPT 8 7 "" FLAGS "D" END STRING F_CAT4 2 BEGIN - PROMPT 40 6 "" + PROMPT 40 5 "" FLAGS "U" USE CTD INPUT CODTAB F_CAT4 @@ -200,13 +200,13 @@ END STRING F_D_CAT4 30 BEGIN - PROMPT 46 6 "" + PROMPT 46 5 "" FLAGS "D" END STRING F_CAT5 2 BEGIN - PROMPT 40 7 "" + PROMPT 40 6 "" FLAGS "U" USE CTD INPUT CODTAB F_CAT5 @@ -220,13 +220,13 @@ END STRING F_D_CAT5 30 BEGIN - PROMPT 46 7 "" + PROMPT 46 6 "" FLAGS "D" END STRING F_CAT6 2 BEGIN - PROMPT 40 8 "" + PROMPT 40 7 "" FLAGS "U" USE CTD INPUT CODTAB F_CAT6 @@ -240,131 +240,122 @@ END STRING F_D_CAT6 30 BEGIN - PROMPT 46 8 "" + PROMPT 46 7 "" FLAGS "D" END -GROUPBOX DLG_NULL 77 4 +GROUPBOX DLG_NULL 50 8 BEGIN - PROMPT 1 10 "Situazione sanitaria" + PROMPT 1 9 "Opzioni di convocazione" END -BOOLEAN F_USOTIPO +LISTBOX F_PROCDON1 17 BEGIN - PROMPT 2 11 "Seleziona Tipo/Esito " - MESSAGE TRUE ENABLE,F_TIPO - MESSAGE FALSE RESET,F_TIPO|DISABLE,F_TIPO + PROMPT 2 10 "Procedura di donazione " + #include "procdon.h" END -STRING F_TIPO 2 -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 +//LISTBOX F_PROCDON2 17 //BEGIN -// PROMPT 2 12 "Seleziona pross. Tipo/Esito " -// MESSAGE TRUE ENABLE,F_PROSS -// 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" +// PROMPT 50 10 "" +// #include "procdon.h" //END DATE F_DATAINI BEGIN - PROMPT 2 12 "Data iniziale " + PROMPT 2 11 "Data prossima don. da " END DATE F_DATAFIN BEGIN - PROMPT 35 12 "Data finale " + PROMPT 37 11 "a " END -GROUPBOX DLG_NULL 77 3 +TEXT DLG_NULL BEGIN - PROMPT 1 14 "Medico di base" + PROMPT 2 12 "Giorni: Lu Ma Me Gi Ve Sa Do" END -NUMBER F_CODMED 6 +BOOLEAN F_GPD_LUN BEGIN - PROMPT 2 15 "Medico " - 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" + PROMPT 12 13 "" END -STRING F_COGNMED 25 +BOOLEAN F_GPD_MAR BEGIN - PROMPT 19 15 "" - 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" + PROMPT 16 13 "" END -STRING F_NOMMED 25 +BOOLEAN F_GPD_MER BEGIN - PROMPT 48 15 "" - USE LF_MEDICI KEY 2 - INPUT COGNOME F_COGNMED - INPUT NOME F_NOMNMED - DISPLAY "Cognome@25" COGNOME - DISPLAY "Nome@25" NOME - DISPLAY "Codice" CODMED - COPY OUTPUT F_COGNMED - CHECKTYPE NORMAL - HELP "Medico di base" - WARNING "Medico assente" + PROMPT 20 13 "" +END + +BOOLEAN F_GPD_GIO +BEGIN + PROMPT 24 13 "" +END + +BOOLEAN F_GPD_VEN +BEGIN + 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 @@ -375,19 +366,25 @@ END BUTTON F_ELENCO 9 2 BEGIN - PROMPT -13 18 "Elenco" + PROMPT -14 18 "Elenco" MESSAGE EXIT,F_ELENCO END BUTTON F_ETICHETTE 9 2 BEGIN - PROMPT -23 18 "Etichette" + 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 -33 18 "" + PROMPT -44 18 "" END ENDPAGE diff --git a/at/at4100b.h b/at/at4100b.h new file mode 100755 index 000000000..d3e3dc0b8 --- /dev/null +++ b/at/at4100b.h @@ -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 diff --git a/at/at4100b.uml b/at/at4100b.uml new file mode 100755 index 000000000..afe9a1133 --- /dev/null +++ b/at/at4100b.uml @@ -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 diff --git a/at/at4100c.h b/at/at4100c.h new file mode 100755 index 000000000..1d780648f --- /dev/null +++ b/at/at4100c.h @@ -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 \ No newline at end of file diff --git a/at/at4200.cpp b/at/at4200.cpp new file mode 100755 index 000000000..4acfe24cb --- /dev/null +++ b/at/at4200.cpp @@ -0,0 +1,356 @@ +#include +#include +#include + +#include "lf.h" +#include "soggetti.h" +#include "sezioni.h" +#include + +#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; +} diff --git a/at/at4200a.h b/at/at4200a.h new file mode 100755 index 000000000..35a136f69 --- /dev/null +++ b/at/at4200a.h @@ -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 diff --git a/at/at4200a.uml b/at/at4200a.uml new file mode 100755 index 000000000..363142631 --- /dev/null +++ b/at/at4200a.uml @@ -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 diff --git a/at/at4300.cpp b/at/at4300.cpp new file mode 100755 index 000000000..ad7d2c6af --- /dev/null +++ b/at/at4300.cpp @@ -0,0 +1,445 @@ +#include +#include +#include +#include + +#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; rget_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; +} diff --git a/at/at4300a.h b/at/at4300a.h new file mode 100755 index 000000000..7d0efb566 --- /dev/null +++ b/at/at4300a.h @@ -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 + diff --git a/at/at4300a.uml b/at/at4300a.uml new file mode 100755 index 000000000..504ebf306 --- /dev/null +++ b/at/at4300a.uml @@ -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 diff --git a/at/at5.url b/at/at5.url index 6ff6e2bae..35f8c2dbd 100755 --- a/at/at5.url +++ b/at/at5.url @@ -1,21 +1,43 @@ #define APPNAME AVIS #define QAPPNAME "AVIS" #define LIBDIR f:\xvt.403\win_x86\ptk\lib +#define QFIRMNAME "AGA Informatica S.r.l." #include -/* ---------------------------------------------------- - * at5 -0 - * ---------------------------------------------------- */ +/* at5 -0 */ MENU TASK_MENUBAR - SUBMENU MENU_FILE "~File" + SUBMENU MENU_FILE "~File" -/* ---------------------------------------------------- - * at5 -1 - * ---------------------------------------------------- */ + +/* at5 -1 */ MENUBAR 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" + diff --git a/at/at5100.cpp b/at/at5100.cpp index 8a6376008..f7ad0532c 100755 --- a/at/at5100.cpp +++ b/at/at5100.cpp @@ -1,155 +1,155 @@ -// trasferimenti - -#include -#include -#include -#include -#include - -#include "atfield.cpp" -#include "lf.h" - -// nomi delle variabili in .ini per i campi -#define FIELD "FIELD" -#define LEN "LEN" -#define DEC "DEC" -#define FLAGS "FLAGS" - -// nomi delle variabili in .ini per HEADER -#define HEADER "HEADER" -#define NOMEFILE "NOMEFILE" -#define LUNGHEZZA "LUNGHEZZA" -#define RECORDSEP "RECORDSEP" -#define FIELDSEP "FIELDSEP" - -class TTransfer_app : public TApplication -{ - TMask* _msk; - TRelation* _rel; - -protected: - virtual bool create(); - virtual bool destroy(); - virtual bool menu(MENU_TAG m) ; - virtual TMask& get_mask() { return *_msk; } - virtual TRelation* get_relation() const { return _rel; } - virtual void scarica(); - -public: - TTransfer_app() {} - -}; - -HIDDEN inline TTransfer_app& app() { return (TTransfer_app&) main_app(); } - -bool TTransfer_app::create() -{ - _msk = new TMask("at5100a"); - _rel = new TRelation(LF_SOGGETTI); - - /* - _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(); - - _msk->set_handler(F_INS_CONTROLLI,ins_controlli_handler); - TSheet_field& ss = (TSheet_field&)_msk->field(F_SOGGETTI); - ss.set_notify(soggetti_notify); - - //ss.sheet_mask().set_handler(F_S_CODICE,codice_handler); - ss.sheet_mask().set_handler(F_S_NOME,nome_handler); - */ - - dispatch_e_menu(BAR_ITEM(1)); - - return TRUE; -} - -bool TTransfer_app::destroy() -{ - delete _rel; - delete _msk; - /* - delete _donaz; - delete _contsan; - delete _sdonazioni; - delete _scontrolli; - delete _asoggetti; - */ - return TRUE; -} - -bool TTransfer_app::menu(MENU_TAG m) -{ - TMask& msk = get_mask(); - const TDate oggi(TODAY); - KEY tasto; - do - { - tasto = msk.run(); - switch (tasto) - { - case K_ESC: // annulla - msk.reset(); - break; - case K_ENTER: // registra - { - TTransfer_app::scarica(); - msk.reset(); - } - break; - } - } - while (tasto != K_QUIT); - return FALSE; -} - -void TTransfer_app::scarica() -{ - - TArray arr_exprs; // array delle TExpr corrispondenti ai campi da scaricare - TArray arr_fields; // array dei TField_text (campi indicati in .ini) - - TConfig ini("esporta.ini"); - TString_array campi; - int i = ini.list_paragraphs(campi); - int poshead = campi.find("HEADER"); - campi.remove(poshead,TRUE); - for ( int k = 0; k < campi.items(); k++ ) - { - const char* campo = campi.row(k); - TString_array vl; - int i = ini.list_variables(vl, TRUE, campo); - //for ( int j = 0; j < vl.items(); j++ ) - int pos = vl.find(FIELD); - TExpr* espressione = vl.row(pos).get(1); - arr_exprs.add(espressione) - TToken_string variabile = vl.row(pos); - int pos = vl.find(LEN); - TToken_string variabile = vl.row(pos); - int pos = vl.find(DEC); - TToken_string variabile = vl.row(pos); - - - - } - - /* - TText_field campo() - - arr_fields.add(); - */ - } - -} - - -int at5100(int argc, char* argv[]) -{ - TTransfer_app a; - a.run(argc, argv, "Scarico dati"); - return 0; -} +// trasferimenti + +#include +#include +#include +#include +#include + +#include "atfield.cpp" +#include "lf.h" + +// nomi delle variabili in .ini per i campi +#define FIELD "FIELD" +#define LEN "LEN" +#define DEC "DEC" +#define FLAGS "FLAGS" + +// nomi delle variabili in .ini per HEADER +#define HEADER "HEADER" +#define NOMEFILE "NOMEFILE" +#define LUNGHEZZA "LUNGHEZZA" +#define RECORDSEP "RECORDSEP" +#define FIELDSEP "FIELDSEP" + +class TTransfer_app : public TApplication +{ + TMask* _msk; + TRelation* _rel; + +protected: + virtual bool create(); + virtual bool destroy(); + virtual bool menu(MENU_TAG m) ; + virtual TMask& get_mask() { return *_msk; } + virtual TRelation* get_relation() const { return _rel; } + virtual void scarica(); + +public: + TTransfer_app() {} + +}; + +HIDDEN inline TTransfer_app& app() { return (TTransfer_app&) main_app(); } + +bool TTransfer_app::create() +{ + _msk = new TMask("at5100a"); + _rel = new TRelation(LF_SOGGETTI); + + /* + _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(); + + _msk->set_handler(F_INS_CONTROLLI,ins_controlli_handler); + TSheet_field& ss = (TSheet_field&)_msk->field(F_SOGGETTI); + ss.set_notify(soggetti_notify); + + //ss.sheet_mask().set_handler(F_S_CODICE,codice_handler); + ss.sheet_mask().set_handler(F_S_NOME,nome_handler); + */ + + dispatch_e_menu(BAR_ITEM(1)); + + return TRUE; +} + +bool TTransfer_app::destroy() +{ + delete _rel; + delete _msk; + /* + delete _donaz; + delete _contsan; + delete _sdonazioni; + delete _scontrolli; + delete _asoggetti; + */ + return TRUE; +} + +bool TTransfer_app::menu(MENU_TAG m) +{ + TMask& msk = get_mask(); + const TDate oggi(TODAY); + KEY tasto; + do + { + tasto = msk.run(); + switch (tasto) + { + case K_ESC: // annulla + msk.reset(); + break; + case K_ENTER: // registra + { + TTransfer_app::scarica(); + msk.reset(); + } + break; + } + } + while (tasto != K_QUIT); + return FALSE; +} + +void TTransfer_app::scarica() +{ + + TArray arr_exprs; // array delle TExpr corrispondenti ai campi da scaricare + TArray arr_fields; // array dei TField_text (campi indicati in .ini) + + TConfig ini("esporta.ini"); + TString_array campi; + int i = ini.list_paragraphs(campi); + int poshead = campi.find("HEADER"); + campi.remove(poshead,TRUE); + for ( int k = 0; k < campi.items(); k++ ) + { + const char* campo = campi.row(k); + TString_array vl; + int i = ini.list_variables(vl, TRUE, campo); + //for ( int j = 0; j < vl.items(); j++ ) + int pos = vl.find(FIELD); + TExpr* espressione = vl.row(pos).get(1); + arr_exprs.add(espressione) + TToken_string variabile = vl.row(pos); + int pos = vl.find(LEN); + TToken_string variabile = vl.row(pos); + int pos = vl.find(DEC); + TToken_string variabile = vl.row(pos); + + + + } + + /* + TText_field campo() + + arr_fields.add(); + */ + } + +} + + +int at5100(int argc, char* argv[]) +{ + TTransfer_app a; + a.run(argc, argv, "Scarico dati"); + return 0; +} diff --git a/at/at5100a.h b/at/at5100a.h index 7ff53b9b7..0b037d864 100755 --- a/at/at5100a.h +++ b/at/at5100a.h @@ -1,13 +1,13 @@ -// scarico dati per sezione comunale -// definizione campi per maschera di selezione - -#define F_SEZINI 101 -#define F_D_SEZINI 102 -#define F_SOTINI 103 -#define F_D_SOTINI 104 -#define F_SEZFIN 105 -#define F_D_SEZFIN 106 -#define F_SOTFIN 107 -#define F_D_SOTFIN 108 -#define F_DATAINI 109 -#define F_DATAFIN 110 +// scarico dati per sezione comunale +// definizione campi per maschera di selezione + +#define F_SEZINI 101 +#define F_D_SEZINI 102 +#define F_SOTINI 103 +#define F_D_SOTINI 104 +#define F_SEZFIN 105 +#define F_D_SEZFIN 106 +#define F_SOTFIN 107 +#define F_D_SOTFIN 108 +#define F_DATAINI 109 +#define F_DATAFIN 110 diff --git a/at/at5100a.uml b/at/at5100a.uml index acd4ecd0e..ff30eed9a 100755 --- a/at/at5100a.uml +++ b/at/at5100a.uml @@ -1,150 +1,150 @@ -#include "at5100a.h" -#include "lf.h" -PAGE "Scarico dati" -1 -1 78 11 - -GROUPBOX DLG_NULL 77 4 -BEGIN - PROMPT 1 1 "Scelta sezioni/sottogruppi" -END - -STRING F_SEZINI 2 -BEGIN - PROMPT 2 2 "Da " - FLAGS "U" - USE LF_SEZIONI - INPUT CODSEZ F_SEZINI - INPUT CODSOT F_SOTINI - DISPLAY "Cod.sez" CODSEZ - DISPLAY "Cod.sot." CODSOT - DISPLAY "Sezione@25" DENSEZ - DISPLAY "Sottogruppo@25" DENSOT - OUTPUT F_SEZINI CODSEZ - OUTPUT F_D_SEZINI DENSEZ - OUTPUT F_SOTINI CODSOT - OUTPUT F_D_SOTINI DENSOT - CHECKTYPE SEARCH - HELP "Codice sezione da cui partire" -END - -STRING F_D_SEZINI 25 -BEGIN - PROMPT 11 2 "" - FLAGS "U" - USE LF_SEZIONI KEY 2 - INPUT DENSEZ F_D_SEZINI - DISPLAY "Sezione@25" DENSEZ - DISPLAY "Sottogruppo@25" DENSOT - DISPLAY "Cod.sez" CODSEZ - DISPLAY "Cod.sot." CODSOT - COPY OUTPUT F_SEZINI - CHECKTYPE NORMAL - HELP "Sezione da cui partire" -END - -STRING F_SOTINI 2 -BEGIN - PROMPT 2 3 " " - COPY ALL F_SEZINI - CHECKTYPE SEARCH - HELP "Codice sottogruppo da cui partire" -END - -STRING F_D_SOTINI 25 -BEGIN - PROMPT 11 3 "" - FLAGS "U" - COPY USE F_D_SEZINI - INPUT DENSEZ F_D_SEZINI - INPUT DENSOT F_D_SOTINI - COPY DISPLAY F_D_SEZINI - COPY OUTPUT F_D_SEZINI - CHECKTYPE NORMAL - HELP "Sottogruppo da cui partire" -END - -STRING F_SEZFIN 2 -BEGIN - PROMPT 41 2 "A " - FLAGS "U" - USE LF_SEZIONI - INPUT CODSEZ F_SEZFIN - INPUT CODSOT F_SOTFIN - DISPLAY "Cod.sez" CODSEZ - DISPLAY "Cod.sot." CODSOT - DISPLAY "Sezione@25" DENSEZ - DISPLAY "Sottogruppo@25" DENSOT - OUTPUT F_SEZFIN CODSEZ - OUTPUT F_D_SEZFIN DENSEZ - OUTPUT F_SOTFIN CODSOT - OUTPUT F_D_SOTFIN DENSOT - CHECKTYPE SEARCH - HELP "Codice sezione finale" -END - -STRING F_D_SEZFIN 25 -BEGIN - PROMPT 49 2 "" - FLAGS "U" - USE LF_SEZIONI KEY 2 - INPUT DENSEZ F_D_SEZFIN - DISPLAY "Sezione@25" DENSEZ - DISPLAY "Sottogruppo@25" DENSOT - DISPLAY "Cod.sez" CODSEZ - DISPLAY "Cod.sot." CODSOT - COPY OUTPUT F_SEZFIN - CHECKTYPE NORMAL - HELP "Sezione finale" -END - -STRING F_SOTFIN 2 -BEGIN - PROMPT 41 3 " " - COPY ALL F_SEZFIN - CHECKTYPE SEARCH - HELP "Codice sottogruppo finale" -END - -STRING F_D_SOTFIN 25 -BEGIN - PROMPT 49 3 "" - FLAGS "U" - COPY USE F_D_SEZFIN - INPUT DENSEZ F_D_SEZFIN - INPUT DENSOT F_D_SOTFIN - COPY DISPLAY F_D_SEZFIN - COPY OUTPUT F_D_SEZFIN - CHECKTYPE NORMAL - HELP "Sottogruppo finale" -END - - -GROUPBOX DLG_NULL 77 3 -BEGIN - PROMPT 1 5 "Intervallo date ultimo aggiornamento" -END - -DATE F_DATAINI -BEGIN - PROMPT 2 6 "Data ultimo aggiornamento dal " - HELP "Data di ultimo aggiornamento iniziale" -END - -DATE F_DATAFIN -BEGIN - PROMPT 46 6 "al " - HELP "Data di ultimo aggiornamento finale" -END - - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -12 9 "" -END - -BUTTON DLG_QUIT 9 2 -BEGIN - PROMPT -22 9 "" -END - -ENDPAGE -ENDMASK +#include "at5100a.h" +#include "lf.h" +PAGE "Scarico dati" -1 -1 78 11 + +GROUPBOX DLG_NULL 77 4 +BEGIN + PROMPT 1 1 "Scelta sezioni/sottogruppi" +END + +STRING F_SEZINI 2 +BEGIN + PROMPT 2 2 "Da " + FLAGS "U" + USE LF_SEZIONI + INPUT CODSEZ F_SEZINI + INPUT CODSOT F_SOTINI + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + OUTPUT F_SEZINI CODSEZ + OUTPUT F_D_SEZINI DENSEZ + OUTPUT F_SOTINI CODSOT + OUTPUT F_D_SOTINI DENSOT + CHECKTYPE SEARCH + HELP "Codice sezione da cui partire" +END + +STRING F_D_SEZINI 25 +BEGIN + PROMPT 11 2 "" + FLAGS "U" + USE LF_SEZIONI KEY 2 + INPUT DENSEZ F_D_SEZINI + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + COPY OUTPUT F_SEZINI + CHECKTYPE NORMAL + HELP "Sezione da cui partire" +END + +STRING F_SOTINI 2 +BEGIN + PROMPT 2 3 " " + COPY ALL F_SEZINI + CHECKTYPE SEARCH + HELP "Codice sottogruppo da cui partire" +END + +STRING F_D_SOTINI 25 +BEGIN + PROMPT 11 3 "" + FLAGS "U" + COPY USE F_D_SEZINI + INPUT DENSEZ F_D_SEZINI + INPUT DENSOT F_D_SOTINI + COPY DISPLAY F_D_SEZINI + COPY OUTPUT F_D_SEZINI + CHECKTYPE NORMAL + HELP "Sottogruppo da cui partire" +END + +STRING F_SEZFIN 2 +BEGIN + PROMPT 41 2 "A " + FLAGS "U" + USE LF_SEZIONI + INPUT CODSEZ F_SEZFIN + INPUT CODSOT F_SOTFIN + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + OUTPUT F_SEZFIN CODSEZ + OUTPUT F_D_SEZFIN DENSEZ + OUTPUT F_SOTFIN CODSOT + OUTPUT F_D_SOTFIN DENSOT + CHECKTYPE SEARCH + HELP "Codice sezione finale" +END + +STRING F_D_SEZFIN 25 +BEGIN + PROMPT 49 2 "" + FLAGS "U" + USE LF_SEZIONI KEY 2 + INPUT DENSEZ F_D_SEZFIN + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + COPY OUTPUT F_SEZFIN + CHECKTYPE NORMAL + HELP "Sezione finale" +END + +STRING F_SOTFIN 2 +BEGIN + PROMPT 41 3 " " + COPY ALL F_SEZFIN + CHECKTYPE SEARCH + HELP "Codice sottogruppo finale" +END + +STRING F_D_SOTFIN 25 +BEGIN + PROMPT 49 3 "" + FLAGS "U" + COPY USE F_D_SEZFIN + INPUT DENSEZ F_D_SEZFIN + INPUT DENSOT F_D_SOTFIN + COPY DISPLAY F_D_SEZFIN + COPY OUTPUT F_D_SEZFIN + CHECKTYPE NORMAL + HELP "Sottogruppo finale" +END + + +GROUPBOX DLG_NULL 77 3 +BEGIN + PROMPT 1 5 "Intervallo date ultimo aggiornamento" +END + +DATE F_DATAINI +BEGIN + PROMPT 2 6 "Data ultimo aggiornamento dal " + HELP "Data di ultimo aggiornamento iniziale" +END + +DATE F_DATAFIN +BEGIN + PROMPT 46 6 "al " + HELP "Data di ultimo aggiornamento finale" +END + + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 9 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 9 "" +END + +ENDPAGE +ENDMASK diff --git a/at/at6.cpp b/at/at6.cpp new file mode 100755 index 000000000..e96e75425 --- /dev/null +++ b/at/at6.cpp @@ -0,0 +1,23 @@ +#include +#include + +#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; +} diff --git a/at/at6.h b/at/at6.h new file mode 100755 index 000000000..82f873e12 --- /dev/null +++ b/at/at6.h @@ -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 + diff --git a/at/at6.url b/at/at6.url new file mode 100755 index 000000000..774092c96 --- /dev/null +++ b/at/at6.url @@ -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 + +/* 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" + + diff --git a/at/at6100.cpp b/at/at6100.cpp new file mode 100755 index 000000000..eca8055d5 --- /dev/null +++ b/at/at6100.cpp @@ -0,0 +1,223 @@ +#include +#include +#include + +#include "lf.h" +#include "medici.h" +#include + +#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; +} diff --git a/at/at6100a.h b/at/at6100a.h new file mode 100755 index 000000000..4e336ab76 --- /dev/null +++ b/at/at6100a.h @@ -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 diff --git a/at/at6100a.uml b/at/at6100a.uml new file mode 100755 index 000000000..8cf74524e --- /dev/null +++ b/at/at6100a.uml @@ -0,0 +1,94 @@ +#include "at6100a.h" +#include +#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 diff --git a/at/at6200.cpp b/at/at6200.cpp new file mode 100755 index 000000000..7cb42d84b --- /dev/null +++ b/at/at6200.cpp @@ -0,0 +1,234 @@ +#include +#include +#include + +#include +#include "lf.h" +#include "sezioni.h" +#include + +#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; +} diff --git a/at/at6200a.h b/at/at6200a.h new file mode 100755 index 000000000..cb627e76d --- /dev/null +++ b/at/at6200a.h @@ -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 diff --git a/at/at6200a.uml b/at/at6200a.uml new file mode 100755 index 000000000..eac3038a0 --- /dev/null +++ b/at/at6200a.uml @@ -0,0 +1,94 @@ +#include "at6200a.h" +#include +#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 diff --git a/at/at_etcar.frm b/at/at_etcar.frm index 15d063488..711ba069b 100755 --- a/at/at_etcar.frm +++ b/at/at_etcar.frm @@ -1,117 +1,118 @@ -USE 90 -JOIN 13 INTO COM==COM -JOIN LCP ALIAS 100 INTO CODTAB==LOCALITA - -END -DESCRIPTION -BEGIN - 90->* "Soggetti Sezioni AVIS" - 13->* "COMUNI" - LCP->* "Località postali" -END - -GENERAL -BEGIN - OFFSET 0 0 - FONT "Arial" - SIZE 12 - GRID "" -END - -SECTION BODY ODD 9 - -STRINGA 1 25 -BEGIN - KEY "Cognome" - FIELD 90->COGNOME - PROMPT 0 0 "" - FLAGS "H" - MESSAGE RESET,3|COPY,3 -END - -STRINGA 2 25 -BEGIN - KEY "Nome" - FIELD 90->NOME - PROMPT 0 0 "" - FLAGS "H" - MESSAGE APPEND,3 -END - -STRINGA 3 33 2 -BEGIN - KEY "Cognome e nome" - PROMPT 1 1 "" -END - -STRINGA 4 33 2 -BEGIN - KEY "Indirizzo" - PROMPT 1 3 "" - FIELD 90->INDIRIZZO -END - -STRINGA 5 4 -BEGIN - KEY "Codice localita'" - PROMPT 0 0 "" - FLAG "H" - FIELD 90->LOCALITA - MESSAGE ENABLE,1@|DISABLE,2@ - MESSAGE EMPTY ENABLE,2@|DISABLE,1@ -END - -STRINGA 6 5 -BEGIN - KEY "CAP loc." - PROMPT 1 5 "" - FIELD 100@->S6 - GROUP 1 -END - -STRINGA 7 30 -BEGIN - KEY "Localita'" - PROMPT 0 0 "" - FIELD 100@->S0 - GROUP 1 - FLAG "H" - MESSAGE RESET,11|COPY,11 -END - -STRINGA 8 5 -BEGIN - KEY "CAP" - PROMPT 1 5 "" - FIELD 13->CAPCOM - GROUP 2 -END - -STRINGA 9 50 -BEGIN - KEY "Comune" - PROMPT 0 0 "" - FIELD 13->DENCOM - GROUP 2 - FLAG "H" - MESSAGE RESET,11|COPY,11 -END - -STRINGA 10 5 -BEGIN - KEY "Provincia" - PROMPT 0 0 "" - FIELD 13->PROVCOM - FLAG "H" - MESSAGE APPEND,11 -END - -STRINGA 11 27 2 -BEGIN - KEY "Loc./Com. e Prov." - PROMPT 7 5 "" -END - -END - -END +USE 90 +JOIN 13 INTO COM==DOM_CODCOM +JOIN LCP ALIAS 100 INTO CODTAB==DOM_CODLOC + +END +DESCRIPTION +BEGIN + 90->* "Soggetti Sezioni AVIS" + 13->* "COMUNI" + LCP->* "Località postali" +END + +GENERAL +BEGIN + OFFSET 0 0 + FONT "Arial" + SIZE 12 + GRID "" +END + +SECTION BODY ODD 9 + +STRINGA 1 25 +BEGIN + KEY "Cognome" + FIELD 90->COGNOME + PROMPT 0 0 "" + FLAGS "H" + MESSAGE RESET,3|COPY,3 +END + +STRINGA 2 25 +BEGIN + KEY "Nome" + FIELD 90->NOME + PROMPT 0 0 "" + FLAGS "H" + MESSAGE APPEND,3 +END + +STRINGA 3 33 2 +BEGIN + KEY "Cognome e nome" + PROMPT 1 1 "" +END + +STRINGA 4 33 2 +BEGIN + KEY "Indirizzo" + PROMPT 1 3 "" + FIELD 90->DOM_INDIR +END + +STRINGA 5 4 +BEGIN + KEY "Codice localita'" + PROMPT 0 0 "" + FLAG "H" + FIELD 90->DOM_CODLOC + MESSAGE ENABLE,1@|DISABLE,2@ + MESSAGE EMPTY ENABLE,2@|DISABLE,1@ +END + +STRINGA 6 5 +BEGIN + KEY "CAP loc." + PROMPT 1 5 "" + FIELD 100@->S6 + GROUP 1 +END + +STRINGA 7 30 +BEGIN + KEY "Localita'" + PROMPT 0 0 "" + FIELD 100@->S0 + GROUP 1 + FLAG "H" + MESSAGE RESET,11|COPY,11 +END + +STRINGA 8 5 +BEGIN + KEY "CAP" + PROMPT 1 5 "" + FIELD 13->CAPCOM + FLAG "D" + GROUP 2 +END + +STRINGA 9 50 +BEGIN + KEY "Comune" + PROMPT 0 0 "" + FIELD 13->DENCOM + GROUP 2 + FLAG "HD" + MESSAGE RESET,11|COPY,11 +END + +STRINGA 10 5 +BEGIN + KEY "Provincia" + PROMPT 0 0 "" + FIELD 13->PROVCOM + FLAG "H" + MESSAGE APPEND,11 +END + +STRINGA 11 27 2 +BEGIN + KEY "Loc./Com. e Prov." + PROMPT 7 5 "" +END + +END + +END diff --git a/at/at_etsog.frm b/at/at_etsog.frm index 15d063488..711ba069b 100755 --- a/at/at_etsog.frm +++ b/at/at_etsog.frm @@ -1,117 +1,118 @@ -USE 90 -JOIN 13 INTO COM==COM -JOIN LCP ALIAS 100 INTO CODTAB==LOCALITA - -END -DESCRIPTION -BEGIN - 90->* "Soggetti Sezioni AVIS" - 13->* "COMUNI" - LCP->* "Località postali" -END - -GENERAL -BEGIN - OFFSET 0 0 - FONT "Arial" - SIZE 12 - GRID "" -END - -SECTION BODY ODD 9 - -STRINGA 1 25 -BEGIN - KEY "Cognome" - FIELD 90->COGNOME - PROMPT 0 0 "" - FLAGS "H" - MESSAGE RESET,3|COPY,3 -END - -STRINGA 2 25 -BEGIN - KEY "Nome" - FIELD 90->NOME - PROMPT 0 0 "" - FLAGS "H" - MESSAGE APPEND,3 -END - -STRINGA 3 33 2 -BEGIN - KEY "Cognome e nome" - PROMPT 1 1 "" -END - -STRINGA 4 33 2 -BEGIN - KEY "Indirizzo" - PROMPT 1 3 "" - FIELD 90->INDIRIZZO -END - -STRINGA 5 4 -BEGIN - KEY "Codice localita'" - PROMPT 0 0 "" - FLAG "H" - FIELD 90->LOCALITA - MESSAGE ENABLE,1@|DISABLE,2@ - MESSAGE EMPTY ENABLE,2@|DISABLE,1@ -END - -STRINGA 6 5 -BEGIN - KEY "CAP loc." - PROMPT 1 5 "" - FIELD 100@->S6 - GROUP 1 -END - -STRINGA 7 30 -BEGIN - KEY "Localita'" - PROMPT 0 0 "" - FIELD 100@->S0 - GROUP 1 - FLAG "H" - MESSAGE RESET,11|COPY,11 -END - -STRINGA 8 5 -BEGIN - KEY "CAP" - PROMPT 1 5 "" - FIELD 13->CAPCOM - GROUP 2 -END - -STRINGA 9 50 -BEGIN - KEY "Comune" - PROMPT 0 0 "" - FIELD 13->DENCOM - GROUP 2 - FLAG "H" - MESSAGE RESET,11|COPY,11 -END - -STRINGA 10 5 -BEGIN - KEY "Provincia" - PROMPT 0 0 "" - FIELD 13->PROVCOM - FLAG "H" - MESSAGE APPEND,11 -END - -STRINGA 11 27 2 -BEGIN - KEY "Loc./Com. e Prov." - PROMPT 7 5 "" -END - -END - -END +USE 90 +JOIN 13 INTO COM==DOM_CODCOM +JOIN LCP ALIAS 100 INTO CODTAB==DOM_CODLOC + +END +DESCRIPTION +BEGIN + 90->* "Soggetti Sezioni AVIS" + 13->* "COMUNI" + LCP->* "Località postali" +END + +GENERAL +BEGIN + OFFSET 0 0 + FONT "Arial" + SIZE 12 + GRID "" +END + +SECTION BODY ODD 9 + +STRINGA 1 25 +BEGIN + KEY "Cognome" + FIELD 90->COGNOME + PROMPT 0 0 "" + FLAGS "H" + MESSAGE RESET,3|COPY,3 +END + +STRINGA 2 25 +BEGIN + KEY "Nome" + FIELD 90->NOME + PROMPT 0 0 "" + FLAGS "H" + MESSAGE APPEND,3 +END + +STRINGA 3 33 2 +BEGIN + KEY "Cognome e nome" + PROMPT 1 1 "" +END + +STRINGA 4 33 2 +BEGIN + KEY "Indirizzo" + PROMPT 1 3 "" + FIELD 90->DOM_INDIR +END + +STRINGA 5 4 +BEGIN + KEY "Codice localita'" + PROMPT 0 0 "" + FLAG "H" + FIELD 90->DOM_CODLOC + MESSAGE ENABLE,1@|DISABLE,2@ + MESSAGE EMPTY ENABLE,2@|DISABLE,1@ +END + +STRINGA 6 5 +BEGIN + KEY "CAP loc." + PROMPT 1 5 "" + FIELD 100@->S6 + GROUP 1 +END + +STRINGA 7 30 +BEGIN + KEY "Localita'" + PROMPT 0 0 "" + FIELD 100@->S0 + GROUP 1 + FLAG "H" + MESSAGE RESET,11|COPY,11 +END + +STRINGA 8 5 +BEGIN + KEY "CAP" + PROMPT 1 5 "" + FIELD 13->CAPCOM + FLAG "D" + GROUP 2 +END + +STRINGA 9 50 +BEGIN + KEY "Comune" + PROMPT 0 0 "" + FIELD 13->DENCOM + GROUP 2 + FLAG "HD" + MESSAGE RESET,11|COPY,11 +END + +STRINGA 10 5 +BEGIN + KEY "Provincia" + PROMPT 0 0 "" + FIELD 13->PROVCOM + FLAG "H" + MESSAGE APPEND,11 +END + +STRINGA 11 27 2 +BEGIN + KEY "Loc./Com. e Prov." + PROMPT 7 5 "" +END + +END + +END diff --git a/at/at_pagin.frm b/at/at_pagin.frm index 55c79aecf..aa99d4c66 100755 --- a/at/at_pagin.frm +++ b/at/at_pagin.frm @@ -1,260 +1,637 @@ -USE 90 -JOIN 13 ALIAS 300 INTO COM==COM -JOIN LCP ALIAS 100 INTO CODTAB==LOCALITA -JOIN 96 INTO CODSEZ==CODSEZ -JOIN CTD ALIAS 200 INTO CODTAB==CATDON -JOIN CTN ALIAS 500 INTO CODTAB==CATNOND1 -JOIN CTN ALIAS 600 INTO CODTAB==CATNOND2 -JOIN 13 ALIAS 400 INTO COM==COMNASC - -END -DESCRIPTION -BEGIN - 90->* "Soggetti Sezioni AVIS" - 13->* "COMUNI" - LCP->* "Località postali" - 96->* "Sezioni AVIS" - CTD->* "Categorie donatori" - CTN->* "Categorie non donatori" -END - -GENERAL -BEGIN - OFFSET 0 0 - FONT "Arial" - SIZE 12 - GRID "" -END - -SECTION BODY ODD 60 - -NUMERO 1 13 -BEGIN - KEY "Codice" - FIELD 90->CODICE - PROMPT 1 1 "Codice " -END - -STRINGA 2 33 -BEGIN - KEY "Cognome" - FIELD 90->COGNOME - PROMPT 1 2 "Cognome " -END - -STRINGA 3 33 -BEGIN - KEY "Nome" - FIELD 90->NOME - PROMPT 35 2 "Nome " -END - -STRINGA 4 7 -BEGIN - KEY "Codice sezione" - FIELD 90->CODSEZ - PROMPT 1 4 "Sez. " -END - -STRINGA 5 25 -BEGIN - KEY "Denominazione sezione" - FIELD 96->DENSEZ - PROMPT 9 4 "" -END - -STRINGA 6 7 -BEGIN - KEY "Codice sottog." - FIELD 90->CODSOT - PROMPT 1 5 "Sot. " -END - -STRINGA 7 25 -BEGIN - KEY "Denominazione sottog." - FIELD 96->DENSOT - PROMPT 9 5 "" -END - -STRINGA 8 12 -BEGIN - KEY "Categoria don." - FIELD 90->CATDON - PROMPT 35 4 "Categoria " -END - -STRINGA 9 25 -BEGIN - KEY "Descrizione categoria" - FIELD 200@->S0 - PROMPT 48 4 "" -END - -DATA 10 10 -BEGIN - KEY "Data iscrizione" - FIELD 90->DATAISC - PROMPT 35 5 "Data iscr. " -END - -DATA 11 10 -BEGIN - KEY "Data dimissione" - FIELD 90->DATADIM - PROMPT 56 5 "Data dim. " -END - - -STRINGA 13 50 -BEGIN - KEY "Comune di nascita" - PROMPT 0 0 "" - FIELD 400@->DENCOM - FLAG "H" - MESSAGE RESET,15|COPY,15 -END - -STRINGA 14 5 -BEGIN - KEY "Provincia di nascita" - PROMPT 0 0 "" - FIELD 400@->PROVCOM - FLAG "H" - MESSAGE APPEND,15 -END - -STRINGA 15 56 -BEGIN - KEY "Comune e provincia di nascita" - PROMPT 1 7 "Nato a " -END - -STRINGA 16 50 -BEGIN - KEY "Indirizzo" - FIELD 90->INDIRIZZO - PROMPT 1 8 "Indirizzo " - MESSAGE RESET,24 -END - -STRINGA 17 4 -BEGIN - KEY "Codice Localita" - FIELD 90->LOCALITA - PROMPT 0 0 "" - FLAG "H" - MESSAGE ENABLE,1@|DISABLE,2@ - MESSAGE EMPTY DISABLE,1@|ENABLE,2@ -END - -STRINGA 18 5 -BEGIN - KEY "CAP Loc." - FIELD LCP->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 - PROMPT 0 0 "" - FLAG "H" - GROUP 2 - 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 - -STRINGA 27 30 -BEGIN - KEY "Tel. altro" - FIELD 90->TELALT - PROMPT 61 10 "Tel.altro " -END - -STRINGA 31 13 -BEGIN - KEY "Categoria non don. 1" - FIELD 90->CATNOND1 - PROMPT 1 12 "Altre cat. " -END - -STRINGA 32 25 -BEGIN - KEY "Descrizione cat." - FIELD 500@->S0 - PROMPT 15 12 "" -END -STRINGA 33 2 -BEGIN - KEY "Categoria non don. 2" - FIELD 90->CATNOND1 - PROMPT 42 12 "" -END - -STRINGA 34 25 -BEGIN - KEY "Descrizione cat." - FIELD 600@->S0 - PROMPT 45 12 "" -END - -END - -END +USE 90 +JOIN 13 ALIAS 300 INTO COM==DOM_CODCOM +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 CTD ALIAS 800 INTO CODTAB==CATDON +JOIN CTN ALIAS 500 INTO CODTAB==CATNOND1 +JOIN CTN ALIAS 600 INTO CODTAB==CATNOND2 +JOIN TCS ALIAS 900 INTO CODTAB==STATO +JOIN 13 ALIAS 400 INTO COM==COMNASC +JOIN 97 INTO CODMED==CODMED + +END + +DESCRIPTION +BEGIN + 90->* "Soggetti Sezioni AVIS" + 13->* "COMUNI" + LCP->* "Localita' postali" + 96->* "Sezioni AVIS" + CTD->* "Categorie donatori" + CTN->* "Categorie non donatori" + TCS->* "Tipi/Esiti controlli sanitari" +END + +GENERAL +BEGIN + OFFSET 0 0 + FONT "Arial" + SIZE 12 + GRID "" +END + +SECTION BODY ODD 60 + +NUMERO 1 13 +BEGIN + KEY "Codice" + FIELD 90->CODICE + PROMPT 1 1 "Codice " +END + +STRINGA 2 33 +BEGIN + KEY "Cognome" + FIELD 90->COGNOME + PROMPT 15 1 "Cognome " +END + +STRINGA 3 30 +BEGIN + KEY "Nome" + FIELD 90->NOME + PROMPT 50 1 "Nome " +END + +DATA 4 18 +BEGIN + KEY "Data nascita" + FIELD 90->DATANASC + PROMPT 1 2 "Nato il " +END + +STRINGA 5 30 +BEGIN + KEY "Comune di nascita" + PROMPT 0 0 "" + FIELD 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 + KEY "Codice sezione" + FIELD 90->CODSEZ + PROMPT 1 4 "Sez. " +END + +STRINGA 11 25 +BEGIN + KEY "Denominazione sezione" + FIELD 96->DENSEZ + PROMPT 9 4 "" +END + +STRINGA 12 7 +BEGIN + KEY "Codice sottog." + FIELD 90->CODSOT + PROMPT 41 4 "Sot. " +END + +STRINGA 13 25 +BEGIN + KEY "Denominazione sottog." + FIELD 96->DENSOT + PROMPT 49 4 "" +END + +STRINGA 14 7 +BEGIN + KEY "Categoria don." + FIELD 90->CATDON + PROMPT 1 5 "Cat. " +END + +STRINGA 15 25 +BEGIN + KEY "Descrizione categoria" + FIELD 800@->S0 + PROMPT 9 5 "" +END + +DATA 16 21 +BEGIN + KEY "Data iscrizione" + FIELD 90->DATAISC + PROMPT 36 5 "Data iscr. " +END + +DATA 17 20 +BEGIN + KEY "Data dimissione" + FIELD 90->DATADIM + PROMPT 59 5 "Data dim. " +END + +STRINGA 18 16 +BEGIN + KEY "Tessera AVIS" + FIELD 90->TESSAVIS + PROMPT 1 7 "Tess.AVIS " +END + +STRINGA 19 13 +BEGIN + KEY "Codice Centro Trasfusionale" + FIELD 90->CODCT + PROMPT 18 7 "Cod.CT " +END + +STRINGA 20 16 +BEGIN + KEY "Cartella clinica" + FIELD 90->CODCL + PROMPT 33 7 "Car.clin. " +END + +STRINGA 21 28 +BEGIN + KEY "Documento di identita'" + FIELD 90->DOCID + PROMPT 51 7 "Doc.id. " +END + +STRINGA 22 26 +BEGIN + KEY "Codice fiscale" + FIELD 90->CF + PROMPT 1 8 "Cod.fisc. " +END + +STRINGA 23 10 +BEGIN + KEY "Testo" + PROMPT 1 10 "Domicilio:" +END + +STRINGA 24 30 +BEGIN + KEY "Domicilio: indirizzo" + FIELD 90->DOM_INDIR + PROMPT 1 11 "" + MESSAGE RESET,30 +END + +STRINGA 25 4 +BEGIN + KEY "Domicilio: codice localita'" + FIELD 90->DOM_CODLOC + PROMPT 0 0 "" + FLAG "H" +END + +STRINGA 26 5 +BEGIN + KEY "Domicilio: CAP" + FIELD 700@->S6 + FIELD 300@->CAPCOM + PROMPT 0 0 "" + FLAG "H" + MESSAGE APPEND,30 +END + +STRINGA 27 30 +BEGIN + 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 + PROMPT 49 15 "Tel.altro " +END + +STRINGA 42 +BEGIN + KEY "Testo" + PROMPT 1 16 "Escluso " +END + +LISTA 43 +BEGIN + KEY "Esclusione" + FIELD 90->ESCLUSO + ITEM " | " + ITEM "TI|T. indeterminato" + ITEM "TD|T. determinato" + PROMPT 10 16 "Escluso " +END + +DATA 44 18 +BEGIN + KEY "Data termine esclusione" + FIELD 90->TERMESCL + PROMPT 27 16 "Termine " +END + +STRINGA 45 35 +BEGIN + KEY "Motivo esclusione" + FIELD 90->MOTESCL + PROMPT 46 16 "Per " +END + +STRINGA 46 26 +BEGIN + KEY "Descrizione stato" + FIELD 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 diff --git a/at/atfield.cpp b/at/atfield.cpp new file mode 100755 index 000000000..3d90d1c61 --- /dev/null +++ b/at/atfield.cpp @@ -0,0 +1,342 @@ +// definizione dei record_text per trasferimento da/a file di testo + +#include +#include +#include +#include + +// 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 + // aggiungere la possibilità di estrarlo + const char* get(int pos) const; + + // ritorna il campo che va dal carattere al carattere + const char* get(int da, int a) const; + + // scrive il campo nel record alla posizione + + void put(const char* c, int pos = -1); + + // scrive il campo nel record partendo dal carattere fino al carattere + // se il campo è 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 + 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; +} + diff --git a/at/atlib.h b/at/atlib.h new file mode 100755 index 000000000..b7bf929fa --- /dev/null +++ b/at/atlib.h @@ -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); diff --git a/at/atlib1.cpp b/at/atlib1.cpp index 2494fc4dd..9e8efb75c 100755 --- a/at/atlib1.cpp +++ b/at/atlib1.cpp @@ -1,7 +1,11 @@ -#define XIDON_SI "SI" -#define XIDON_AF "AF" +#include +#include +#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" // esempio: se passo PL, AF restituisce TRUE { @@ -18,13 +22,13 @@ bool xis_idon_one(TString idon, const char* tipo) 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" { - 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" { bool is_don = FALSE; @@ -40,8 +44,9 @@ bool xis_donaz(TString don, const char* tipo) return is_don; } -char xmodstato_tcs(TString tipo) -//verifica se il controllo sanitario "tipo" è un controllo che modifica lo stato del soggetto +char modstato_tcs(TString16 tipo) +// verifica se il controllo sanitario "tipo" e' un controllo che modifica +// lo stato del soggetto { char modstato = ' '; TTable tcs("TCS"); @@ -51,3 +56,158 @@ char xmodstato_tcs(TString tipo) 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); +} + diff --git a/at/atlib1.h b/at/atlib1.h new file mode 100755 index 000000000..7c1a51cdb --- /dev/null +++ b/at/atlib1.h @@ -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); diff --git a/at/atnext.cpp b/at/atnext.cpp new file mode 100755 index 000000000..258fc429e --- /dev/null +++ b/at/atnext.cpp @@ -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; +} diff --git a/at/avis.mnu b/at/avis.mnu new file mode 100755 index 000000000..63835d16b --- /dev/null +++ b/at/avis.mnu @@ -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 diff --git a/at/batbgaz.h b/at/batbgaz.h new file mode 100755 index 000000000..0a061cce5 --- /dev/null +++ b/at/batbgaz.h @@ -0,0 +1,3 @@ +#define F_TABGAZ_CODTAB 100 +#define F_TABGAZ_DESCR 101 +#define DLG_DEL 105 diff --git a/at/batbgaz.uml b/at/batbgaz.uml new file mode 100755 index 000000000..f8845fbb7 --- /dev/null +++ b/at/batbgaz.uml @@ -0,0 +1,40 @@ +#include "batbgaz.h" + +TOOLBAR "" 0 20 0 2 +#include +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 diff --git a/at/batblcp.uml b/at/batblcp.uml index 40aac1670..fdc617605 100755 --- a/at/batblcp.uml +++ b/at/batblcp.uml @@ -4,13 +4,13 @@ TOOLBAR "" 0 20 0 2 #include ENDPAGE -PAGE "Località postali" -1 -1 78 7 +PAGE "Localita' postali" -1 -1 78 7 STRING F_TABLCP_CODTAB 4 BEGIN - PROMPT 2 1 "Codice " + PROMPT 2 1 "Codice " FIELD CODTAB - HELP "Inserire il codice della località" + HELP "Inserire il codice della localita'" USE LCP CHECKTYPE REQUIRED INPUT CODTAB F_TABLCP_CODTAB @@ -25,9 +25,9 @@ END STRING F_TABLCP_LOCALITA 30 BEGIN - PROMPT 2 3 "Località " + PROMPT 2 3 "Localita' " FIELD S0 - HELP "Inserire la denominazione della località" + HELP "Inserire la denominazione della localita'" USE LCP KEY 2 CHECKTYPE REQUIRED INPUT S0 F_TABLCP_LOCALITA @@ -40,7 +40,7 @@ END STRING F_TABLCP_CAP 5 BEGIN - PROMPT 2 5 "CAP " + PROMPT 2 5 "CAP " FIELD S6 HELP "Inserire il CAP della località" CHECKTYPE REQUIRED @@ -49,7 +49,7 @@ END STRING F_TABLCP_COM 4 BEGIN - PROMPT 2 7 "Comune " + PROMPT 2 7 "Comune " FIELD S7 FLAGS "U" USE LF_COMUNI diff --git a/at/batbldl.h b/at/batbldl.h new file mode 100755 index 000000000..8671763ce --- /dev/null +++ b/at/batbldl.h @@ -0,0 +1,3 @@ +#define F_TABLDL_CODTAB 100 +#define F_TABLDL_DESCR 101 +#define DLG_DEL 105 diff --git a/at/batbldl.uml b/at/batbldl.uml new file mode 100755 index 000000000..fc7ef5db3 --- /dev/null +++ b/at/batbldl.uml @@ -0,0 +1,40 @@ +#include "batbldl.h" + +TOOLBAR "" 0 20 0 2 +#include +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 diff --git a/at/batbprf.h b/at/batbprf.h new file mode 100755 index 000000000..b101f7d00 --- /dev/null +++ b/at/batbprf.h @@ -0,0 +1,3 @@ +#define F_TABPRF_CODTAB 100 +#define F_TABPRF_DESCR 101 +#define DLG_DEL 105 diff --git a/at/batbprf.uml b/at/batbprf.uml new file mode 100755 index 000000000..723ffcd91 --- /dev/null +++ b/at/batbprf.uml @@ -0,0 +1,40 @@ +#include "batbprf.h" + +TOOLBAR "" 0 20 0 2 +#include +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 diff --git a/at/batbtcs.uml b/at/batbtcs.uml index 32518c3f5..43827860b 100755 --- a/at/batbtcs.uml +++ b/at/batbtcs.uml @@ -43,7 +43,7 @@ BEGIN ITEM "N|Non modifica" MESSAGE CLEAR, F_TABTCS_STATO MESSAGE DISABLE, F_TABTCS_STATO - ITEM "I|Idoneità" + ITEM "I|Idoneita'" MESSAGE ENABLE, F_TABTCS_STATO ITEM "S|Sospensione" MESSAGE ENABLE, F_TABTCS_STATO diff --git a/at/categ.cpp b/at/categ.cpp new file mode 100755 index 000000000..195406a5f --- /dev/null +++ b/at/categ.cpp @@ -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); + diff --git a/at/condocc.h b/at/condocc.h index 0a6380646..aff4ed380 100755 --- a/at/condocc.h +++ b/at/condocc.h @@ -3,7 +3,7 @@ ITEM " |" ITEM "01|Occupato" ITEM "02|Disoccupato" -ITEM "03|In cerca di 1° occ." +ITEM "03|In cerca di 1^ occ." ITEM "04|Pensionato" ITEM "05|Casalinga" ITEM "06|Studente" diff --git a/at/contsan.h b/at/contsan.h index da628f6cf..0fdee30db 100755 --- a/at/contsan.h +++ b/at/contsan.h @@ -1,14 +1,14 @@ -// definizione campi dell'archivio CONTSAN - -#define CON_CODICE "CODICE" -#define CON_PROGCON "PROGCON" -#define CON_DATACON "DATACON" -#define CON_TIPOCON "TIPOCON" -#define CON_IDON1 "IDON1" -#define CON_IDON2 "IDON2" -#define CON_IDON3 "IDON3" -#define CON_IDON4 "IDON4" -#define CON_INTSI "INTSI" -#define CON_INTAF "INTAF" -#define CON_PROSSTIPO "PROSSTIPO" -#define CON_PROSSDATA "PROSSDATA" +// definizione campi dell'archivio CONTSAN + +#define CON_CODICE "CODICE" +#define CON_PROGCON "PROGCON" +#define CON_DATACON "DATACON" +#define CON_TIPOCON "TIPOCON" +#define CON_IDON1 "IDON1" +#define CON_IDON2 "IDON2" +#define CON_IDON3 "IDON3" +#define CON_IDON4 "IDON4" +#define CON_INTSI "INTSI" +#define CON_INTAF "INTAF" +#define CON_PROSSTIPO "PROSSTIPO" +#define CON_PROSSDATA "PROSSDATA" diff --git a/at/convoc.h b/at/convoc.h new file mode 100755 index 000000000..0b84709c2 --- /dev/null +++ b/at/convoc.h @@ -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" diff --git a/at/f115.dir b/at/f115.dir new file mode 100755 index 000000000..30e5cf9ca --- /dev/null +++ b/at/f115.dir @@ -0,0 +1,3 @@ +115 +0 +$convoc|0|0|124|17|Convocazioni AVIS||| diff --git a/at/f115.trr b/at/f115.trr new file mode 100755 index 000000000..87f9db802 --- /dev/null +++ b/at/f115.trr @@ -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| diff --git a/at/f116.dir b/at/f116.dir new file mode 100755 index 000000000..082e2863b --- /dev/null +++ b/at/f116.dir @@ -0,0 +1,3 @@ +116 +0 +$rconvoc|0|0|17|17|Righe convocazioni AVIS||| diff --git a/at/f116.trr b/at/f116.trr new file mode 100755 index 000000000..351eedb51 --- /dev/null +++ b/at/f116.trr @@ -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| diff --git a/at/f90.dir b/at/f90.dir new file mode 100755 index 000000000..31c713408 --- /dev/null +++ b/at/f90.dir @@ -0,0 +1,3 @@ +90 +0 +$soggetti|0|0|526|17|Soggetti AVIS||| diff --git a/at/f90.trr b/at/f90.trr new file mode 100755 index 000000000..129b6fcd3 --- /dev/null +++ b/at/f90.trr @@ -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 diff --git a/at/f91.dir b/at/f91.dir new file mode 100755 index 000000000..7ff27de8b --- /dev/null +++ b/at/f91.dir @@ -0,0 +1,3 @@ +91 +0 +$storico|0|0|36|17|Storico iscrizioni e dimissioni AVIS||| diff --git a/at/f91.trr b/at/f91.trr new file mode 100755 index 000000000..5526945db --- /dev/null +++ b/at/f91.trr @@ -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| diff --git a/at/f92.dir b/at/f92.dir new file mode 100755 index 000000000..9e6ecaf9d --- /dev/null +++ b/at/f92.dir @@ -0,0 +1,3 @@ +92 +0 +$donaz|0|0|54|17|Donazioni AVIS||| diff --git a/at/f92.trr b/at/f92.trr new file mode 100755 index 000000000..da24fb4d5 --- /dev/null +++ b/at/f92.trr @@ -0,0 +1,17 @@ +92 +12 +CODICE|3|6|0|Codice soggetto +PROGDON|2|3|0|Progressivo donazione +DATADON|5|8|0|Data donazione +TIPODON|1|2|0|Tipo donazione +LUOGODON|1|4|0|Luogo donazione +ETICHETTA|3|9|0|Etichetta sacca +CC|2|3|0|CC +PA|1|7|0|P.A. +HB|4|4|1|Hb +SGPT|2|3|0|SGPT +PROTIDEMIA|4|3|1|Protidemia +PRIMADON|8|1|0|Prima donazione +2 +CODICE+PROGDON| +DATADON+CODICE|X diff --git a/at/f93.dir b/at/f93.dir new file mode 100755 index 000000000..82061dacc --- /dev/null +++ b/at/f93.dir @@ -0,0 +1,3 @@ +93 +0 +$contsan|0|0|44|17|Controlli sanitari AVIS||| diff --git a/at/f93.trr b/at/f93.trr new file mode 100755 index 000000000..cd21b3a2b --- /dev/null +++ b/at/f93.trr @@ -0,0 +1,17 @@ +93 +12 +CODICE|3|6|0|Codice soggetto +PROGCON|2|3|0|Progressivo controllo +DATACON|5|8|0|Data controllo +TIPOCON|1|2|0|Tipo o esito controllo +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 per sangue intero +INTAF|2|3|0|Intervallo per aferesi +PROSSTIPO|1|2|0|Prossimo tipo di controllo (programmato e/o presunto) +PROSSDATA|5|8|0|Data prossimo tipo +2 +CODICE+PROGCON| +DATACON+CODICE|X diff --git a/at/f94.dir b/at/f94.dir new file mode 100755 index 000000000..1d59c184a --- /dev/null +++ b/at/f94.dir @@ -0,0 +1,3 @@ +94 +0 +$benem|0|0|21|17|Benemerenze AVIS||| diff --git a/at/f94.trr b/at/f94.trr new file mode 100755 index 000000000..9151b4cfc --- /dev/null +++ b/at/f94.trr @@ -0,0 +1,11 @@ +94 +5 +CODICE|3|6|0|Codice soggetto +PROGBEN|2|3|0|Progressivo benemerenza +TIPOBEN|1|2|0|Benemerenza +DATABEN|5|8|0|Data assegnazione +RITIRATA|8|1|0|Benemerenza ritirata? +3 +CODICE+PROGBEN| +DATABEN+CODICE|X +CODICE+TIPOBEN| diff --git a/at/f95.dir b/at/f95.dir new file mode 100755 index 000000000..d9d0e9118 --- /dev/null +++ b/at/f95.dir @@ -0,0 +1,3 @@ +95 +0 +$famiglie|0|0|18|17|Famiglie AVIS||| diff --git a/at/f95.trr b/at/f95.trr new file mode 100755 index 000000000..4ddde8134 --- /dev/null +++ b/at/f95.trr @@ -0,0 +1,9 @@ +95 +4 +FAMIGLIA|3|6|0|Codice famiglia (progressivo automatico) +PROGFAM|2|3|0|Progressivo familiare +GRADOPAR|1|2|0|Grado di parentela +CODFAM|3|6|0|Codice soggetto familiare +2 +FAMIGLIA+PROGFAM| +CODFAM| diff --git a/at/f96.dir b/at/f96.dir new file mode 100755 index 000000000..7479b393f --- /dev/null +++ b/at/f96.dir @@ -0,0 +1,3 @@ +96 +1 +%sezioni|0|0|451|17|Sezioni AVIS||| diff --git a/at/f96.trr b/at/f96.trr new file mode 100755 index 000000000..98d20bf27 --- /dev/null +++ b/at/f96.trr @@ -0,0 +1,36 @@ +96 +31 +CODSEZ|1|2|0|Codice sezione +DENSEZ|1|25|0|Denominazione sezione +CODSOT|1|2|0|Codice sottogruppo +DENSOT|1|25|0|Denominazione sottogruppo +INDIRIZZO|1|50|0|Indirizzo +COM|1|4|0|Codice comune residenza +LOCALITA|1|4|0|Località postale +TELEFONO|1|15|0|Telefono sezione +FAX|1|15|0|Fax sezione +REFERCED|1|50|0|Cognome e nome referente CED +STATO|1|1|0|Stato sezione +CONVORA|1|20|0|Orario per stampa cartolina +CONVSEDE1|1|25|0|Sede: 1° riga +CONVSEDE2|1|25|0|Sede: 2° riga +CONVSEDE3|1|25|0|Sede: 3° riga +CONVSEDE4|1|25|0|Sede: 4° riga +CONVNOTE|1|25|0|Note +TIPOCONV|1|1|0|Tipo convocazione +INTMINCONV|2|4|0|Intervallo minimo di convocazione in gg. +INTMIN|2|4|0|Intervallo min. per cartolina +INTMAX|2|4|0|Intervallo max per cartolina +DONEMER|2|3|0|Numero donazioni per passaggio a emeriti +INTESTI|2|2|0|Intervallo di estinzione in anni +CATEMER|1|2|0|Categoria emeriti +CATESTI|1|2|0|Categoria estinti +CATCANC|1|2|0|Categoria cancellati +DATAULTCON|5|8|0|Data ultima convocazione +INTESTAZ1|1|20|0|1° Riga di intestazione per tessere e cartoline +INTESTAZ2|1|20|0|2° Riga di intestazione per tessere e cartoline +INTESTAZ3|1|20|0|3° Riga di intestazione per tessere e cartoline +INTESTAZ4|1|20|0|4° Riga di intestazione per tessere e cartoline +2 +CODSEZ+CODSOT| +UPPER(DENSEZ)+UPPER(DENSOT)| diff --git a/at/f97.dir b/at/f97.dir new file mode 100755 index 000000000..916e93bb4 --- /dev/null +++ b/at/f97.dir @@ -0,0 +1,3 @@ +97 +1 +%medici|0|0|145|17|Medici di base AVIS||| diff --git a/at/f97.trr b/at/f97.trr new file mode 100755 index 000000000..c2dc0fe1a --- /dev/null +++ b/at/f97.trr @@ -0,0 +1,13 @@ +97 +8 +CODMED|3|6|0|Codice regionale del medico +COGNOME|1|25|0|Cognome medico +NOME|1|25|0|Nome medico +INDIRIZZO|1|50|0|Indirizzo medico +COM|1|4|0|Codice comune di residenza +LOCALITA|1|4|0|Località postale +TELAMB|1|15|0|Telefono ambulatorio +TELABI|1|15|0|Telefono abitazione +2 +CODMED| +UPPER(COGNOME)+UPPER(NOME)| diff --git a/at/famiglie.h b/at/famiglie.h index 3dabf565d..90b0bcf18 100755 --- a/at/famiglie.h +++ b/at/famiglie.h @@ -1,6 +1,6 @@ // definizione campi archivio FAMIGLIE -#define FAM_CAPOFAM "CAPOFAM" -#define FAM_PROGFAM "PROGFAM" -#define FAM_GRADOPAR "GRADOPAR" -#define FAM_CODFAM "CODFAM" +#define FAM_FAMIGLIA "FAMIGLIA" +#define FAM_PROGFAM "PROGFAM" +#define FAM_GRADOPAR "GRADOPAR" +#define FAM_CODFAM "CODFAM" diff --git a/at/gaz.sql b/at/gaz.sql new file mode 100755 index 000000000..7ee358323 --- /dev/null +++ b/at/gaz.sql @@ -0,0 +1,34 @@ +PROMPT +PROMPT +PROMPT +PROMPT +PROMPT +PROMPT +PROMPT AGA Informatica S.r.l. +PROMPT +PROMPT +PROMPT Gestione Sezione Provinciale AVIS +PROMPT +PROMPT +PROMPT +PROMPT TRASFERIMENTO TABELLA GRUPPI AZIENDALI DA SOFTEAM (ORACLE) +PROMPT +PROMPT +PROMPT +PROMPT +PROMPT +SET HEADING OFF; +SET PAUSE OFF; +SET LINESIZE 500; +SET PAGESIZE 500; +SPOOL GAZ.TXT +select '%', + cgaz, + desgaz +from gaz; +SPOOL OFF; +SET LINESIZE 79; +SET PAGESIZE 25; +SET PAUSE ON; +SET HEADING ON; +QUIT diff --git a/at/modalita.h b/at/modalita.h index 4f4e28376..e97cfa5cc 100755 --- a/at/modalita.h +++ b/at/modalita.h @@ -1,9 +1,9 @@ // listbox per modalita' di convocazione -ITEM " |" -ITEM "P|Postale" -ITEM "1|Tel. abitaz." -ITEM "2|Tel. lavoro" -ITEM "3|Tel. altro" -ITEM "T|Telefonica" -ITEM "I|Indifferente" +ITEM " |" +ITEM "PO|Postale" +ITEM "T1|Tel. abitaz." +ITEM "T2|Tel. lavoro" +ITEM "T3|Tel. altro" +ITEM "TE|Telefonica" +ITEM "IN|Indifferente" diff --git a/at/parenti.h b/at/parenti.h index 95e8e96cb..9448899d1 100755 --- a/at/parenti.h +++ b/at/parenti.h @@ -1,11 +1,12 @@ // listbox per gradi di parentela ITEM " |" +ITEM "CA|Capofamiglia" ITEM "CG|Cognato/a" ITEM "CO|Coniuge" ITEM "CV|Convivente" ITEM "FI|Figlio/a" -ITEM "FR|Fratello/sorella" +ITEM "FR|Fratello/S." ITEM "GE|Genero/Nuora" ITEM "MA|Madre" ITEM "NI|Nipote" diff --git a/at/per.sql b/at/per.sql new file mode 100755 index 000000000..54bf39672 --- /dev/null +++ b/at/per.sql @@ -0,0 +1,78 @@ +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 DONATORI-SOGGETTI 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; +SPOOL PER.TXT +COLUMN DNASPER FORMAT EDATE; +SPOOL PER.TXT +SELECT '%', + cfisirpper, + cfisuslper, + cper, + ntesssnper, + cgnper, + nomper, + dnasper, + sexper, + ccomn, + cmed, + indresper, + locresper, + ccomrper, + capresper, + inddomper, + locdomper, + ccomdper, + capdomper, + cqofrper, + ntzper, + cgnperspo, + csadper, + ntelabtper, + ntellavper, + cpla, + cdiab0per, + srhper, + sduper, + cdifrhper, + cdifkcper, + ccas, + discass, + cfad, + ntesassper, + csas, + cgaz, + cpra, + csea, + pernonotiz, + nisccooper +FROM PER +WHERE CSAS = &SEZIONE; +SPOOL OFF; +SET LINESIZE 79; +SET PAGESIZE 25; +SET PAUSE ON; +SET HEADING ON; +QUIT diff --git a/at/prd.sql b/at/prd.sql new file mode 100755 index 000000000..ed757edeb --- /dev/null +++ b/at/prd.sql @@ -0,0 +1,63 @@ +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 PROVVEDIMENTI SUI 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 PRD.TXT +SELECT '%', + CPER, + DINZPRD, + HINZPRD, + MINZPRD, + CTIAPRD, + CSADPRD, + CSADPRIPRD, + CMPD, + ASNPRD, + CSADPERPRD, + CSADPERPRI, + PRDCSSDCT, + DPVSCSSPRD, + CSADFUTPRD, + PRDPVSCV, + CTIAPVSCV, + CPRAPVSCV, + DPVSCV, + PRDHGCVPER, + DAVVCSSPRD, + HAVVCSSPRD, + MAVVCSSPRD +FROM PRD +WHERE CPER IN (SELECT CPER FROM PER WHERE + PER.CSAS = &SEZIONE ); +SPOOL OFF; +SET LINESIZE 79; +SET PAGESIZE 25; +SET PAUSE ON; +SET HEADING ON; +QUIT diff --git a/at/prova.uml b/at/prova.uml new file mode 100755 index 000000000..f41e439d0 --- /dev/null +++ b/at/prova.uml @@ -0,0 +1,1817 @@ +#include "at0100a.h" +#include "lf.h" + +TOOLBAR "" 0 20 0 2 + +BUTTON DLG_GENDON 25 1 +BEGIN +PROMPT -13 -3 "Genera donazioni" +MESSAGE K_F10 +END + +#include +ENDPAGE + +PAGE "Pag.1" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 1 "Codice" +END + +TEXT DLG_NULL +BEGIN + PROMPT 11 1 "Cognome e nome" +END + +TEXT DLG_NULL +BEGIN + PROMPT 66 1 "Nato il" +END + +NUMBER F_CODICE 6 +BEGIN + PROMPT 2 2 "" + FIELD CODICE + FLAGS "RG" + KEY 1 + USE LF_SOGGETTI + INPUT CODICE F_CODICE + DISPLAY "Codice@6" CODICE + DISPLAY "Cognome@36" COGNOME + DISPLAY "Nome@36" NOME + DISPLAY "Nato il@10" DATANASC + DISPLAY "Sez." CODSEZ + DISPLAY "Sot." CODSOT + DISPLAY "C." CATDON + DISPLAY "Tessera" TESSAVIS + OUTPUT F_CODICE CODICE + OUTPUT F_COGNOME COGNOME + OUTPUT F_NOME NOME + OUTPUT F_DATANASC DATANASC + MESSAGE COPY,1@ + CHECKTYPE REQUIRED +END + +STRING F_COGNOME 36 25 +BEGIN + PROMPT 11 2 "" + FIELD COGNOME + KEY 2 + USE LF_SOGGETTI KEY 2 + INPUT COGNOME F_COGNOME + INPUT NOME F_NOME + DISPLAY "Cognome@36" COGNOME + DISPLAY "Nome@36" NOME + DISPLAY "Nato il@10" DATANASC + DISPLAY "Codice@6" CODICE + DISPLAY "Sez." CODSEZ + DISPLAY "Sot." CODSOT + DISPLAY "C." CATDON + DISPLAY "Tessera" TESSAVIS + OUTPUT F_CODICE CODICE + OUTPUT F_COGNOME COGNOME + OUTPUT F_NOME NOME + OUTPUT F_DATANASC DATANASC + MESSAGE COPY,2@ + CHECKTYPE REQUIRED + HELP "Cognome del soggetto" +END + +STRING F_NOME 36 25 +BEGIN + PROMPT 39 2 "" + FIELD NOME + KEY 2 + COPY ALL F_COGNOME + MESSAGE COPY,3@ + CHECKTYPE REQUIRED + HELP "Nome del soggetto" +END + +DATE F_DATANASC +BEGIN + PROMPT 66 2 "" + FIELD DATANASC + MESSAGE COPY,4@ + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_CHECK_FIELD + HELP "Data di nascita" +END + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 5 "Dati associativi" +END + +STRING F_CODSEZ 2 +BEGIN + PROMPT 2 6 "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 NORMAL + CHECKTYPE SEARCH + HELP "Codice sezione di appartenenza" + ADD MASK at0700a +END + +STRING F_DENSEZ 25 +BEGIN + PROMPT 15 6 "" + FLAGS "U" + USE LF_SEZIONI KEY 2 + INPUT DENSEZ F_DENSEZ + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + COPY OUTPUT F_CODSEZ + CHECKTYPE NORMAL + HELP "Denominazione sezione di appartenenza" + ADD MASK at0700a +END + +STRING F_CODSOT 2 +BEGIN + PROMPT 2 7 "Sottog. " + FIELD CODSOT + COPY ALL F_CODSEZ + CHECKTYPE NORMAL + HELP "Codice sottogruppo di appartenenza" + ADD MASK at0700a +END + +STRING F_DENSOT 25 +BEGIN + PROMPT 15 7 "" + FLAGS "U" + COPY USE F_DENSEZ + INPUT DENSEZ F_DENSEZ + INPUT DENSOT F_DENSOT + COPY DISPLAY F_DENSEZ + COPY OUTPUT F_DENSEZ + CHECKTYPE NORMAL + HELP "Sottogruppo di appartenenza" + ADD MASK at0700a +END + +STRING F_CATDON 2 +BEGIN + PROMPT 2 8 "Categ. " + FIELD CATDON + FLAGS "U" + USE CTD + INPUT CODTAB F_CATDON + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_CATDON CODTAB + OUTPUT F_DESC_CATDON S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_DESC_CATDON 22 +BEGIN + PROMPT 15 8 "" + FLAGS "D" +END + +DATE F_DATAISC +BEGIN + PROMPT 44 6 "Isc. " + FIELD DATAISC + HELP "Data di iscrizione alla sezione/categoria" +END + +DATE F_DATADIM +BEGIN + PROMPT 61 6 "Dim. " + FIELD DATADIM + HELP "Data di dimissione dalla sezione/categoria" +END + +STRING F_TESSAVIS 10 +BEGIN + PROMPT 46 7 "Numero tessera AVIS " + FIELDS TESSAVIS + FLAGS "U" + HELP "Numero tessera associativa AVIS" +END + +STRING F_CODCL 6 +BEGIN + PROMPT 39 8 "Cart. clinica " + FIELDS CODCL + FLAGS "U" + HELP "Numero cartella clinica" +END + +STRING F_CODCT 6 +BEGIN + PROMPT 62 8 "Cod. CT " + FIELDS CODCT + FLAGS "U" + HELP "Codice Centro Trasfusionale" +END + + +GROUPBOX DLG_NULL 77 11 +BEGIN + PROMPT 1 10 "Dati anagrafici" +END + +STRING F_COMNASC 4 +BEGIN + PROMPT 2 11 "Nato a " + FIELD COMNASC + FLAGS "U" + USE LF_COMUNI + INPUT STATO "" + INPUT COM F_COMNASC +#include + OUTPUT F_COMNASC COM + OUTPUT F_DENCOMNASC DENCOM + OUTPUT F_PROVCOMNASC PROVCOM + CHECKTYPE NORMAL + HELP "Codice comune di nascita" + WARNING "Comune assente" +END + +STRING F_DENCOMNASC 50 30 +BEGIN + PROMPT 16 11 "" + USE LF_COMUNI KEY 2 + INPUT DENCOM F_DENCOMNASC +#include + COPY OUTPUT F_COMNASC + CHECKTYPE NORMAL + HELP "Comune di nascita" +END + +STRING F_PROVCOMNASC 5 +BEGIN + PROMPT 49 11 "" + FLAGS "D" +END + +LISTBOX F_SESSO 11 +BEGIN + PROMPT 57 11 "Sesso " + FIELD SESSO + FLAGS "U" +#include "sesso.h" +END + +STRING F_DOCID 20 +BEGIN + PROMPT 2 12 "Doc. iden. " + FIELDS DOCID + FLAGS "U" + HELP "Documento di identit…: tipo e numero" +END + + +STRING F_CF 16 +BEGIN + PROMPT 38 12 "CF " + FIELD CF + FLAGS "U" + HELP "Codice fiscale" +END + +STRING F_TESSSSN 10 +BEGIN + PROMPT 62 12 "SSN " + FIELDS TESSSSN + FLAGS "U" + HELP "Numero tessera Servizio Sanitario Nazionale" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 13 "Domicilio" +END + +STRING F_DOM_INDIR 30 +BEGIN + PROMPT 2 14 "Indirizzo " + FIELD F_DOM_INDIR +END + +STRING F_DOM_STRADA 5 +BEGIN + PROMPT 44 14 "Stradario " +END + +STRING F_DOM_DISTRI 4 +BEGIN + PROMPT 61 14 "Distribuz. " +END + +STRING F_DOM_CODCOM 4 +BEGIN + PROMPT 2 15 "Comune " + FIELD DOM_CODCOM + FLAGS "U" + USE LF_COMUNI + INPUT STATO "" + INPUT COM F_DOM_CODCOM +#include + OUTPUT F_DOM_CODCOM COM + OUTPUT F_DOM_DENCOM DENCOM + OUTPUT F_DOM_PROVCOM PROVCOM + OUTPUT F_DOM_CAPCOM CAPCOM + CHECKTYPE NORMAL + WARNING "Comune assente" + HELP "Codice comune di residenza" +END + +STRING F_DOM_DENCOM 30 +BEGIN + PROMPT 19 15 "" + USE LF_COMUNI KEY 2 + INPUT DENCOM F_DOM_DENCOM +#include + COPY OUTPUT F_DOM_CODCOM + CHECKTYPE NORMAL + HELP "Comune di residenza" +END + +STRING F_DOM_CODLOC 4 +BEGIN + PROMPT 2 13 "Localita' " + FIELD DOM_CODLOC + FLAGS "U" + USE LCP SELECT S7=#F_DOM_CODLOC + INPUT CODTAB F_DOM_CODLOC + DISPLAY "Codice" CODTAB + DISPLAY "Localita'@30" S0 + DISPLAY "CAP@5" S6 + OUTPUT F_DOM_CODLOC CODTAB + OUTPUT F_DOM_DENLOC S0 + OUTPUT F_DOM_CAPCOM S6 + OUTPUT F_DOM_CODCOM S7 + CHECKTYPE NORMAL + HELP "Codice localita' postale se diversa dal comune" +END + +STRING F_DOM_DENLOC 30 +BEGIN + PROMPT 19 13 "" + COPY USE F_DOM_CODLOC + INPUT S0 F_DOM_DENLOC + DISPLAY "Localita'@30" S0 + DISPLAY "CAP@5" S6 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_DOM_CODLOC + CHECKTYPE NORMAL + HELP "Localita' postale se diversa dal comune" +END + +STRING F_DOM_PROVCOM 5 +BEGIN + PROMPT 71 15 "" + FLAGS "D" +END + +STRING F_DOM_CAPCOM 5 +BEGIN + PROMPT 67 15 "CAP " +END + +STRING F_TELABI 15 +BEGIN + PROMPT 2 16 "Telefoni: Abit. " + FIELD TELABI + HELP "Telefono abitazione" +END + +STRING F_TELLAV 15 +BEGIN + PROMPT 37 16 "Lav. " + FIELD TELLAV + HELP "Telefono lavoro" +END + +STRING F_TELALT 15 +BEGIN + PROMPT 59 16 "3 " + FIELD TELALT + HELP "Altro numero telefonico per reperibilit…" +END + +//RADIOBUTTON F_SESSO 25 +//BEGIN +// PROMPT 1 16 "Sesso" +// FIELD SESSO +// FLAGS "Z" +// ITEM "M|Maschio" +// ITEM "F|Femmina" +//END +// +//GROUPBOX DLG_NULL 43 3 +//BEGIN +// PROMPT 35 16 "Ultimo aggiornamento" +//END +// + +//DATE F_DATAULTAGG +//BEGIN +// PROMPT 36 17 "Data " +// FIELD DATAULTAGG +// FLAGS "D" +//END + +//STRING F_UTENULTAGG 8 +//BEGIN +// PROMPT 60 17 "Utente " +// FIELD UTENULTAGG +// FLAGS "D" +//END + +ENDPAGE + +PAGE "Pag.2" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + +GROUPBOX DLG_NULL 77 4 +BEGIN + PROMPT 1 5 "Altri dati associativi" +END + +STRING F_CATNOND1 2 +BEGIN + PROMPT 2 6 "Categorie non don. " + FIELD CATNOND1 + FLAGS "U" + USE CTN + INPUT CODTAB F_CATNOND1 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_CATNOND1 CODTAB + OUTPUT F_DESC_CATNOND1 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Altra categoria non donatori" +END + +STRING F_DESC_CATNOND1 20 +BEGIN + PROMPT 26 6 "" + FLAGS "D" +END + +STRING F_CATNOND2 2 +BEGIN + PROMPT 50 6 "" + FIELD CATNOND2 + FLAGS "U" + COPY USE F_CATNOND1 + INPUT CODTAB F_CATNOND2 + COPY DISPLAY F_CATNOND1 + OUTPUT F_CATNOND2 CODTAB + OUTPUT F_DESC_CATNOND2 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Altra categoria non donatori" +END + +STRING F_DESC_CATNOND2 20 +BEGIN + PROMPT 55 6 "" + FLAGS "D" +END + +STRING F_TITINDIR 10 +BEGIN + PROMPT 2 7 "Titolo personale " + FIELDS TESSSSN + HELP "Eventuale titolo da stampare prima del nome sull'indirizzo" +END + +GROUPBOX DLG_NULL 77 4 +BEGIN + PROMPT 1 9 "Codici di identificazione" +END + +STRING F_CODCT 6 +BEGIN + PROMPT 2 10 "Codice CT " + FIELDS CODCT + FLAGS "U" + HELP "Codice Centro Trasfusionale" +END + +STRING F_CODCL 6 +BEGIN + PROMPT 25 10 "Cartella clinica " + FIELDS CODCL + FLAGS "U" + HELP "Numero cartella clinica" +END + +STRING F_TESSAVIS 10 +BEGIN + PROMPT 53 10 "Tessera AVIS " + FIELDS TESSAVIS + FLAGS "U" + HELP "Numero tessera associativa AVIS" +END + +STRING F_DOCID 20 +BEGIN + PROMPT 2 11 "Doc. iden. " + FIELDS DOCID + FLAGS "U" + HELP "Documento di identit…: tipo e numero" +END + + +STRING F_CF 16 +BEGIN + PROMPT 38 11 "CF " + FIELD CF + FLAGS "U" + HELP "Codice fiscale" +END + +STRING F_TESSSSN 10 +BEGIN + PROMPT 62 11 "SSN " + FIELDS TESSSSN + FLAGS "U" + HELP "Numero tessera Servizio Sanitario Nazionale" +END + + +GROUPBOX DLG_NULL 77 6 +BEGIN + PROMPT 1 13 "Dati statistici" +END + +LISTBOX F_CONDOCC 25 +BEGIN + PROMPT 2 14 "Cond. occ. " + FIELD CONDOCC + FLAGS "U" +#include "condocc.h" +END + +LISTBOX F_POSPROF 20 +BEGIN + PROMPT 43 14 "Pos. prof. " + FIELD POSPROF + FLAGS "U" +#include "posprof.h" +END + +LISTBOX F_RAMOATT 25 +BEGIN + PROMPT 2 15 "Ramo att. " + FIELD RAMOATT + FLAGS "U" +#include "ramoatt.h" +END + +LISTBOX F_TITSTUD 20 +BEGIN + PROMPT 43 15 "Tit. stud. " + FIELD TITSTUD + FLAGS "U" +#include "titstud.h" +END + +STRING F_PROFESS 4 +BEGIN + PROMPT 2 16 "Professione " + FIELD PROFESS + FLAGS "D" +// USE IDO +// INPUT CODTAB F_IDON1 +// OUTPUT F_DESC_ID1 S0 +// CHECKTYPE NORMAL +END + +STRING F_DESC_PROF 40 +BEGIN + PROMPT 21 16 "" + FLAGS "D" +END + +STRING F_LUOGOLAV 4 +BEGIN + PROMPT 2 17 "Luogo lav. " + FLAGS "D" +END + +STRING F_DESC_LUOGO 40 +BEGIN + PROMPT 21 17 "" + FLAGS "D" +END + +ENDPAGE + +PAGE "Pag.3" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + +GROUPBOX DLG_NULL 77 7 +BEGIN + PROMPT 1 5 "Situazione sanitaria" +END + +STRING F_STATO 2 +BEGIN + PROMPT 2 6 "Stato attuale " + FIELD STATO + FLAGS "D" + USE TCS + INPUT CODTAB F_STATO + OUTPUT F_DESCSTATO S3 + CHECKTYPE NORMAL +END + +STRING F_DESCSTATO 20 +BEGIN + PROMPT 20 6 "" + FLAGS "D" +END + +DATE F_DATASTATO +BEGIN + PROMPT 55 6 "Data stato " + FIELD DATASTATO + FLAGS "D" +END + +STRING F_IDON1 2 +BEGIN + PROMPT 2 8 "Tipi di idon. " + FIELD IDON1 + FLAGS "D" + USE IDO + INPUT CODTAB F_IDON1 + OUTPUT F_DESC_ID1 S0 + CHECKTYPE NORMAL +END + +STRING F_DESC_ID1 25 +BEGIN + PROMPT 20 8 "" + FLAGS "D" +END + +STRING F_IDON2 2 +BEGIN + PROMPT 47 8 "" + FIELD IDON2 + FLAGS "D" + USE IDO + INPUT CODTAB F_IDON2 + OUTPUT F_DESC_ID2 S0 + CHECKTYPE NORMAL +END + +STRING F_DESC_ID2 25 +BEGIN + PROMPT 51 8 "" + FLAGS "D" +END + +STRING F_IDON3 2 +BEGIN + PROMPT 2 9 " " + FIELD IDON3 + FLAGS "D" + USE IDO + INPUT CODTAB F_IDON3 + OUTPUT F_DESC_ID3 S0 + CHECKTYPE NORMAL +END + +STRING F_DESC_ID3 25 +BEGIN + PROMPT 20 9 "" + FLAGS "D" +END + +STRING F_IDON4 2 +BEGIN + PROMPT 47 9 "" + FIELD IDON4 + FLAGS "D" + USE IDO + INPUT CODTAB F_IDON4 + OUTPUT F_DESC_ID4 S0 + CHECKTYPE NORMAL +END + +STRING F_DESC_ID4 25 +BEGIN + PROMPT 51 9 "" + FLAGS "D" +END + +DATE F_DATAULTID +BEGIN + PROMPT 2 10 "Data ult. id. " + FIELD DATAULTID + FLAGS "D" +END + +STRING F_TIPOULTID 2 +BEGIN + PROMPT 30 10 "Tipo " + FIELD TIPOULTID + FLAGS "D" +END + +GROUPBOX DLG_NULL 77 7 +BEGIN + PROMPT 1 12 "Situazione donazioni" +END + +NUMBER F_TOTDON 3 +BEGIN + PROMPT 2 13 "Totale " + FIELD TOTDON + FLAGS "D" +END + +DATE F_DATAULTDON +BEGIN + PROMPT 15 13 "Data/tipo ultima " + FIELD DATAULTDON + FLAGS "D" +END + +STRING F_TIPOULTDON 2 +BEGIN + PROMPT 44 13 "" + FIELD TIPOULTDON + FLAGS "D" + USE TDN + INPUT CODTAB F_TIPOULTDON + OUTPUT F_DESC_ULTDON S0 + CHECKTYPE NORMAL +END + +STRING F_DESC_ULTDON 25 +BEGIN + PROMPT 48 13 "" + FLAGS "D" +END + +NUMBER F_TOTDONSI 3 +BEGIN + PROMPT 2 14 "Totale don. : Sangue intero " + FIELD TOTDONSI + FLAGS "D" +END + +NUMBER F_TOTDONAF 3 +BEGIN + PROMPT 48 14 "Aferesi " + FIELD TOTDONAF + FLAGS "D" +END + +DATE F_DATAULTSI +BEGIN + PROMPT 2 15 "Date ultima : Sangue intero " + FIELD DATAULTSI + FLAGS "D" +END + +DATE F_DATAULTAF +BEGIN + PROMPT 48 15 "Aferesi " + FIELD DATAULTAF + FLAGS "D" +END + +NUMBER F_INTSI 3 +BEGIN + PROMPT 2 16 "Intervalli : Sangue intero " + FIELD INTSI + FLAGS "D" +END + +NUMBER F_INTAF 3 +BEGIN + PROMPT 48 16 "Aferesi " + FIELD INTAF + FLAGS "D" +END + +DATE F_DATAPROSSI +BEGIN + PROMPT 2 17 "Date prossima : Sangue intero " + FIELD DATAPROSSI + FLAGS "D" +END + +DATE F_DATAPROSAF +BEGIN + PROMPT 48 17 "Aferesi " + FIELD DATAPROSAF + FLAGS "D" +END + +ENDPAGE + +PAGE "Pag.4" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + + +GROUPBOX DLG_NULL 77 3 +BEGIN + PROMPT 1 5 "Tipizzazione" +END + +LISTBOX F_GRUPPOAB0 5 +BEGIN + PROMPT 2 6 "Gruppo AB0 " + FIELD GRUPPOAB0 + FLAGS "U" +#include "gruppo.h" +END + +LISTBOX F_RHANTID 5 +BEGIN + PROMPT 22 6 "Rh/AntiD " + FIELD RHANTID + FLAGS "U" +#include "rh.h" +END + +STRING F_FENOTIPORH 6 +BEGIN + PROMPT 39 6 "Fen.Rh " + FIELD FENOTIPORH +END + +LISTBOX F_KELL 5 +BEGIN + PROMPT 55 6 "Kell " + FIELD KELL + FLAGS "U" +#include "rh.h" +END + +LISTBOX F_DU 5 +BEGIN + PROMPT 68 6 "Du " + FIELD DU + FLAGS "U" +#include "rh.h" +END + +GROUPBOX DLG_NULL 77 3 +BEGIN + PROMPT 1 8 "Medico di base" +END + +NUMBER F_CODMED 6 +BEGIN + PROMPT 2 9 "Medico " + FIELD CODMED + 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" + ADD MASK at0800a +END + +STRING F_COGNMED 25 +BEGIN + PROMPT 19 9 "" + 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 SEARCH + HELP "Medico di base" + WARNING "Medico assente" + ADD MASK at0800a +END + +STRING F_NOMMED 25 +BEGIN + PROMPT 48 9 "" + USE LF_MEDICI KEY 2 + INPUT COGNOME F_COGNMED + INPUT NOME F_NOMMED + DISPLAY "Cognome@25" COGNOME + DISPLAY "Nome@25" NOME + DISPLAY "Codice" CODMED + COPY OUTPUT F_COGNMED + CHECKTYPE NORMAL + HELP "Medico di base" + WARNING "Medico assente" + ADD MASK at0800a +END + +GROUPBOX DLG_NULL 35 5 +BEGIN + PROMPT 1 11 "Preferenze" +END + +LISTBOX F_MODCONV 13 +BEGIN + PROMPT 2 12 "Modalità convoc. " + FIELD MODCONV +#include "modalita.h" +END + +LISTBOX F_GIOPREDON 13 +BEGIN + PROMPT 2 13 "Giorno donazione " + FIELD GIOPREDON +#include "giorni.h" +END + +LISTBOX F_GIOPRECON 13 +BEGIN + PROMPT 2 14 "Giorno controlli " + FIELD GIOPRECON +#include "giorni.h" +END + +GROUPBOX DLG_NULL 41 5 +BEGIN + PROMPT 37 11 "Esclusione non sanitaria" +END + +LISTBOX F_ESCLUSO 20 +BEGIN + PROMPT 38 12 "Tipo " + FIELD ESCLUSO + ITEM " | " + MESSAGE CLEAR, F_TERMESCL + MESSAGE CLEAR, F_MOTESCL + MESSAGE DISABLE, F_TERMESCL + MESSAGE DISABLE, F_MOTESCL + ITEM "TI|Tempo indeterminato" + MESSAGE CLEAR, F_TERMESCL + MESSAGE DISABLE, F_TERMESCL + MESSAGE ENABLE, F_MOTESCL + ITEM "TD|Tempo determinato" + MESSAGE ENABLE, F_TERMESCL + MESSAGE ENABLE, F_MOTESCL +END + +DATE F_TERMESCL +BEGIN + PROMPT 38 13 "Termine " + FIELD TERMESCL +END + +STRING F_MOTESCL 30 +BEGIN + PROMPT 38 14 "Motivo " + FIELD MOTESCL +END + +ENDPAGE + +PAGE "Donazioni" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + +GROUPBOX DLG_NULL 77 14 +BEGIN + PROMPT 1 5 "Donazioni" +END + +SPREADSHEET F_DONAZIONI 75 12 +BEGIN + PROMPT 2 6 "" + ITEM "Data@10" + ITEM "Tipo" + ITEM "Luogo" + ITEM "Etichetta" + ITEM "CC@3" + ITEM "P.A.@7" + ITEM "Hb@4" + ITEM "SGPT" + ITEM "Prot." + //ITEM "Prima" +END + +ENDPAGE + +PAGE "Controlli" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + +GROUPBOX DLG_NULL 77 14 +BEGIN + PROMPT 1 5 "Controlli sanitari" +END + +SPREADSHEET F_CONTROLLI 75 12 +BEGIN + PROMPT 2 6 "" + ITEM "Data@10" + ITEM "Tipo" + ITEM "Id.1" + ITEM "Id.2" + ITEM "Id.3" + ITEM "Id.4" + ITEM "Int.SI" + ITEM "Int.AF" + ITEM "Pr.tipo" + ITEM "Pr.data" +END + +ENDPAGE + +PAGE "Ben./Sto." -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER DLG_NULL 6 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "D" + GROUP 1 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 2 2 "Cognome e nome " + FLAGS "D" + GROUP 2 +END + +STRING DLG_NULL 25 +BEGIN + PROMPT 46 2 "" + FLAGS "D" + GROUP 3 +END + +DATE DLG_NULL +BEGIN + PROMPT 2 3 "Nato il " + FLAGS "D" + GROUP 4 +END + +GROUPBOX DLG_NULL 77 8 +BEGIN + PROMPT 1 5 "Benemerenze" +END + +SPREADSHEET F_BENEMERENZE 75 6 +BEGIN + PROMPT 2 6 "" + ITEM "Tipo" + ITEM "Data@10" + ITEM "Ritirata?" +END + +GROUPBOX DLG_NULL 77 6 +BEGIN + PROMPT 1 13 "Storico iscrizioni e dimissioni" +END + +SPREADSHEET F_STORICO 75 4 +BEGIN + PROMPT 2 14 "" + ITEM "Dal@10" + ITEM "Al@10" + ITEM "Sezione" + ITEM "Sottogruppo" + ITEM "Cat. Isc." + ITEM "Motivo dim." +END + +ENDPAGE + +ENDMASK + +PAGE "Donazioni" -1 -1 75 13 + +DATE F_D_DATADON +BEGIN + PROMPT 2 1 "Data donazione " + FIELD LF_DONAZ->DATADON + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + HELP "Data donazione" +END + +STRING F_D_TIPODON 2 +BEGIN + PROMPT 2 2 "Tipo donazione " + FIELD LF_DONAZ->TIPODON + FLAGS "U" + USE TDN + INPUT CODTAB F_D_TIPODON + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_D_TIPODON CODTAB + OUTPUT F_D_DESC_TIPODON S0 + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + WARNING "Codice non presente" + HELP "Tipo donazione" +END + +STRING F_D_LUOGODON 4 +BEGIN + PROMPT 2 3 "Luogo donazione " + FIELD LF_DONAZ->LUOGODON + FLAGS "U" + USE LDN + INPUT CODTAB F_D_LUOGODON + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_D_LUOGODON CODTAB + OUTPUT F_D_DESC_LUOGODON S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Luogo donazione" +END + +NUMBER F_D_ETICHETTA 9 +BEGIN + PROMPT 2 5 "Etichetta sacca " + FIELD LF_DONAZ->ETICHETTA +END + +NUMBER F_D_CC 3 +BEGIN + PROMPT 30 5 "CC " + FIELD LF_DONAZ->CC + FLAGS "U" +END + +GROUPBOX DLG_NULL 70 3 +BEGIN + PROMPT 1 7 "Dati sanitari" +END + +STRING F_D_PA 7 +BEGIN + PROMPT 2 8 "PA " + FIELD LF_DONAZ->PA +END + +NUMBER F_D_HB 4 1 +BEGIN + PROMPT 17 8 "Hb " + FIELD LF_DONAZ->HB + FLAGS "U" +END + +NUMBER F_D_SGPT 3 +BEGIN + PROMPT 32 8 "SGPT " + FIELD LF_DONAZ->SGPT + FLAGS "U" +END + +NUMBER F_D_PROTIDEMIA 3 1 +BEGIN + PROMPT 47 8 "Protidemia " + FIELD LF_DONAZ->PROTIDEMIA + FLAGS "U" +END + +//BOOLEAN F_D_PRIMADON +//BEGIN +// PROMPT 2 10 "Prima donazione " +// FIELD LF_DONAZ->PRIMADON +//END + +STRING F_D_DESC_TIPODON 25 +BEGIN + PROMPT 30 2 "" + FLAGS "D" +END + +STRING F_D_DESC_LUOGODON 25 +BEGIN + PROMPT 30 3 "" + 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 + +PAGE "Controlli sanitari" -1 -1 75 18 + +GRUPBOX DLG_NULL 70 4 +BEGIN + PROMPT 1 1 "Dati fondamentali del controllo" +END + +DATE F_C_DATACON +BEGIN + PROMPT 2 2 "Data controllo " + FIELD LF_CONTSAN->DATACON + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + HELP "Data controllo" +END + +STRING F_C_TIPOCON 2 +BEGIN + PROMPT 2 3 "Tipo controllo " + FIELD LF_CONTSAN->TIPOCON + FLAGS "U" + USE TCS + INPUT CODTAB F_C_TIPOCON + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_C_TIPOCON CODTAB + OUTPUT F_C_DESC_TIPOCON S0 + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + WARNING "Codice non presente" + HELP "Tipo/Esito controllo sanitario" +END + +GRUPBOX DLG_NULL 70 7 +BEGIN + PROMPT 1 5 "Dati da compilare se si tratta di idoneita'" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 6 "Tipi donazione ammessi" +END + +STRING F_C_IDON1 2 +BEGIN + PROMPT 2 7 "" + FIELD LF_CONTSAN->IDON1 + FLAGS "U" + USE IDO + INPUT CODTAB F_C_IDON1 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_C_IDON1 CODTAB + OUTPUT F_C_DESC_IDON1 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Idoneita' alla donazione" +END + +STRING F_C_IDON2 2 +BEGIN + PROMPT 2 8 "" + FIELD LF_CONTSAN->IDON2 + FLAGS "U" + USE IDO + INPUT CODTAB F_C_IDON2 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_C_IDON2 CODTAB + OUTPUT F_C_DESC_IDON2 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Idoneita' alla donazione" +END + +STRING F_C_IDON3 2 +BEGIN + PROMPT 2 9 "" + FIELD LF_CONTSAN->IDON3 + FLAGS "U" + USE IDO + INPUT CODTAB F_C_IDON3 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_C_IDON3 CODTAB + OUTPUT F_C_DESC_IDON3 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Idoneita' alla donazione" +END + +STRING F_C_IDON4 2 +BEGIN + PROMPT 2 10 "" + FIELD LF_CONTSAN->IDON4 + FLAGS "U" + USE IDO + INPUT CODTAB F_C_IDON4 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_C_IDON4 CODTAB + OUTPUT F_C_DESC_IDON4 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Idoneita' alla donazione" +END + +TEXT DLG_NULL +BEGIN + PROMPT 40 6 "Intervalli" +END + +NUMBER F_C_INTSI 3 0 +BEGIN + PROMPT 40 7 "Sangue intero " + FIELD LF_CONTSAN->INTSI + FLAGS "U" +END + +NUMBER F_C_INTAF 3 0 +BEGIN + PROMPT 40 8 "Aferesi " + FIELD LF_CONTSAN->INTAF + FLAGS "U" +END + +GROUPBOX DLG_NULL 70 4 +BEGIN + PROMPT 1 12 "Prossimo tipo/esito" +END + + +STRING F_C_PROSSTIPO 2 +BEGIN + PROMPT 2 13 "Tipo controllo " + FIELD LF_CONTSAN->PROSSTIPO + FLAGS "U" + USE TCS + INPUT CODTAB F_C_PROSSTIPO + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_C_PROSSTIPO CODTAB + OUTPUT F_C_DESC_PROSSTIPO S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Tipo/Esito controllo sanitario" +END + + +DATE F_C_PROSSDATA +BEGIN + PROMPT 2 14 "Data prevista " + FIELD LF_CONTSAN->PROSSDATA + HELP "Data controllo" +END + + +STRING F_C_DESC_TIPOCON 25 +BEGIN + PROMPT 25 3 "" + FLAGS "D" +END + +STRING F_C_DESC_IDON1 25 +BEGIN + PROMPT 10 7 "" + FLAGS "D" +END + +STRING F_C_DESC_IDON2 25 +BEGIN + PROMPT 10 8 "" + FLAGS "D" +END + +STRING F_C_DESC_IDON3 25 +BEGIN + PROMPT 10 9 "" + FLAGS "D" +END + +STRING F_C_DESC_IDON4 25 +BEGIN + PROMPT 10 10 "" + FLAGS "D" +END + +STRING F_C_DESC_PROSSTIPO 25 +BEGIN + PROMPT 25 13 "" + 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 + +PAGE "Benemerenze" -1 -1 75 14 + +STRING F_B_TIPOBEN 2 +BEGIN + PROMPT 2 1 "Benemerenza " + FIELD LF_BENEM->TIPOBEN + FLAGS "U" + USE BNZ + INPUT CODTAB F_B_TIPOBEN + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_B_TIPOBEN CODTAB + OUTPUT F_B_DESC_TIPOBEN S0 + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + WARNING "Codice non presente" + HELP "Benemerenza assegnata" +END + +DATE F_B_DATABEN +BEGIN + PROMPT 2 2 "Data assegnazione " + FIELD LF_BENEM->DATABEN + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + HELP "Data assegnazione benemerenza" +END + +BOOLEAN F_B_RITIRATA +BEGIN + PROMPT 40 2 "Ritirata " + FIELD LF_BENEM->RITIRATA +END + + +STRING F_B_DESC_TIPOBEN 25 +BEGIN + PROMPT 26 1 "" + 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 + +PAGE "Storico iscrizioni e dimissioni" -1 -1 60 12 + +DATE F_S_DATAISC +BEGIN + PROMPT 2 1 " Dal " + FIELD LF_STORICO->DATAISC + HELP "Data di iscrizione alla sezione/categoria" +END + +DATE F_S_DATADIM +BEGIN + PROMPT 2 2 " Al " + FIELD LF_STORICO->DATADIM + HELP "Data di dimissione alla sezione/categoria" +END + +STRING F_S_CODSEZ 2 +BEGIN + PROMPT 2 4 "Sezione " + FIELD LF_STORICO->CODSEZ + FLAGS "U" + USE LF_SEZIONI + INPUT CODSEZ F_S_CODSEZ + INPUT CODSOT F_S_CODSOT + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + OUTPUT F_S_CODSEZ CODSEZ + OUTPUT F_S_DENSEZ DENSEZ + OUTPUT F_S_CODSOT CODSOT + OUTPUT F_S_DENSOT DENSOT + CHECKTYPE SEARCH + HELP "Codice sezione di iscrizione" +END + +STRING F_S_DENSEZ 25 +BEGIN + PROMPT 20 4 "" + FLAGS "U" + USE LF_SEZIONI KEY 2 + INPUT DENSEZ F_S_DENSEZ + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + COPY OUTPUT F_S_CODSEZ + CHECKTYPE NORMAL + HELP "Denominazione sezione di iscrizione" +END + +STRING F_S_CODSOT 2 +BEGIN + PROMPT 2 5 "Sottogruppo " + FIELD LF_STORICO->CODSOT + COPY ALL F_S_CODSEZ + //CHECKTYPE NORMAL + CHECKTYPE SEARCH + HELP "Codice sottogruppo di iscrizione" +END + +STRING F_S_DENSOT 25 +BEGIN + PROMPT 20 5 "" + FLAGS "U" + COPY USE F_S_DENSEZ + INPUT DENSEZ F_S_DENSEZ + INPUT DENSOT F_S_DENSOT + COPY DISPLAY F_S_DENSEZ + COPY OUTPUT F_S_DENSEZ + CHECKTYPE NORMAL + HELP "Sottogruppo di iscrizione" +END + +STRING F_S_CATISC 2 +BEGIN + PROMPT 2 7 "Cat. iscriz. " + FIELD LF_STORICO->CATISC + FLAGS "U" + USE CTD + INPUT CODTAB F_S_CATISC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_S_CATISC CODTAB + OUTPUT F_S_DESC_CATISC S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di iscrizione" +END + + +STRING F_S_DESC_CATISC 25 +BEGIN + PROMPT 20 7 "" + FLAGS "D" +END + + +LISTBOX F_S_MOTDIM 25 +BEGIN + PROMPT 2 9 "Motivo dim. " + FIELD MOTDIM + FLAGS "U" +#include "motdim.h" +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 diff --git a/at/rconvoc.h b/at/rconvoc.h new file mode 100755 index 000000000..33a4b70b6 --- /dev/null +++ b/at/rconvoc.h @@ -0,0 +1,6 @@ +// definizione campi dell'archivio RCONVOC + +#define RCV_NUMERO "NUMERO" +#define RCV_PROGCONV "PROGCONV" +#define RCV_CODICE "CODICE" +#define RCV_STAMPATO "STAMPATO" diff --git a/at/sas.sql b/at/sas.sql new file mode 100755 index 000000000..01afb13b8 --- /dev/null +++ b/at/sas.sql @@ -0,0 +1,45 @@ +PROMPT +PROMPT +PROMPT +PROMPT +PROMPT +PROMPT +PROMPT AGA Informatica S.r.l. +PROMPT +PROMPT +PROMPT Gestione Sezione Provinciale AVIS +PROMPT +PROMPT +PROMPT +PROMPT TRASFERIMENTO TABELLA SEZIONI ASSOCIATIVE DA SOFTEAM (ORACLE) +PROMPT +PROMPT +PROMPT +PROMPT +PROMPT +SET HEADING OFF; +SET PAUSE OFF; +SET LINESIZE 500; +SET PAGESIZE 500; +SPOOL SAS.TXT +select '%', + csas, + dessas, + indsas, + capsas, + locsas, + ntelsas, + cpra, + ggdclnslc, + ggdslcslc, + nmaxslc, + ggduslc, + ggdrit, + cccs +from sas; +SPOOL OFF; +SET LINESIZE 79; +SET PAGESIZE 25; +SET PAUSE ON; +SET HEADING ON; +QUIT diff --git a/at/soggetti.h b/at/soggetti.h index 68eddc983..4936978a1 100755 --- a/at/soggetti.h +++ b/at/soggetti.h @@ -1,75 +1,81 @@ -// definizione campi dell'archivio SOGGETTI - -#define SOG_CODSEZ "CODSEZ" -#define SOG_CODSOT "CODSOT" -#define SOG_CODICE "CODICE" -#define SOG_COGNOME "COGNOME" -#define SOG_NOME "NOME" -#define SOG_DATANASC "DATANASC" -#define SOG_COMNASC "COMNASC" -#define SOG_SESSO "SESSO" -#define SOG_CATDON "CATDON" -#define SOG_DATAISC "DATAISC" -#define SOG_DATADIM "DATADIM" -#define SOG_CATNOND1 "CATNOND1" -#define SOG_CATNOND2 "CATNOND2" -#define SOG_TESSAVIS "TESSAVIS" -#define SOG_TESSSSN "TESSSSN" -#define SOG_CODCT "CODCT" -#define SOG_CODCL "CODCL" -#define SOG_DOCID "DOCID" -#define SOG_CF "CF" - -#define SOG_DOM_INDIR "DOM_INDIR" -#define SOG_DOM_STRADA "DOM_STRADA" -#define SOG_DOM_DISTRI "DOM_DISTRI" -#define SOG_DOM_CODCOM "DOM_CODCOM" -#define SOG_DOM_CODLOC "DOM_CODLOC" -#define SOG_RES_INDIR "RES_INDIR" -#define SOG_RES_CODCOM "RES_CODCOM" -#define SOG_RES_CODLOC "RES_CODLOC" - -#define SOG_TELABI "TELABI" -#define SOG_TELLAV "TELLAV" -#define SOG_TELALT "TELALT" -#define SOG_TITINDIR "TITINDIR" -#define SOG_ESCLUSO "ESCLUSO" -#define SOG_TERMESCL "TERMESCL" -#define SOG_MOTESCL "MOTESCL" -#define SOG_STATO "STATO" -#define SOG_DATASTATO "DATASTATO" -#define SOG_DATAULTID "DATAULTID" -#define SOG_TIPOULTID "TIPOULTID" -#define SOG_IDON1 "IDON1" -#define SOG_IDON2 "IDON2" -#define SOG_IDON3 "IDON3" -#define SOG_IDON4 "IDON4" -#define SOG_INTSI "INTSI" -#define SOG_INTAF "INTAF" -#define SOG_TOTDON "TOTDON" -#define SOG_DATAULTDON "DATAULTDON" -#define SOG_TIPOULTDON "TIPOULTDON" -#define SOG_DATAULTSI "DATAULTSI" -#define SOG_DATAULTAF "DATAULTAF" -#define SOG_TOTDONSI "TOTDONSI" -#define SOG_TOTDONAF "TOTDONAF" -#define SOG_DATAPROSSI "DATAPROSSI" -#define SOG_DATAPROSAF "DATAPROSAF" -#define SOG_GRUPPOAB0 "GRUPPOAB0" -#define SOG_RHANTID "RHANTID" -#define SOG_KELL "KELL" -#define SOG_FENOTIPORH "FENOTIPORH" -#define SOG_DU "DU" -#define SOG_PUNTORACC "PUNTORACC" -#define SOG_CODMED "CODMED" -#define SOG_MODCONV "MODCONV" -#define SOG_GIOPREDON "GIOPREDON" -#define SOG_GIOPRECON "GIOPRECON" -#define SOG_NUMCONV "NUMCONV" -#define SOG_DATACONV "DATACONV" -#define SOG_DATAULTAGG "DATAULTAGG" -#define SOG_UTENULTAGG "UTENULTAGG" -#define SOG_CONDOCC "CONDOCC" -#define SOG_POSPROF "POSPROF" -#define SOG_RAMOATT "RAMOATT" -#define SOG_TITSTUD "TITSTUD" +// definizione campi dell'archivio SOGGETTI + +#define SOG_CODSEZ "CODSEZ" +#define SOG_CODSOT "CODSOT" +#define SOG_CODICE "CODICE" +#define SOG_COGNOME "COGNOME" +#define SOG_NOME "NOME" +#define SOG_DATANASC "DATANASC" +#define SOG_COMNASC "COMNASC" +#define SOG_SESSO "SESSO" +#define SOG_CATDON "CATDON" +#define SOG_DATAISC "DATAISC" +#define SOG_DATADIM "DATADIM" +#define SOG_CATNOND1 "CATNOND1" +#define SOG_CATNOND2 "CATNOND2" +#define SOG_TESSAVIS "TESSAVIS" +#define SOG_TESSSSN "TESSSSN" +#define SOG_CODCT "CODCT" +#define SOG_CODCL "CODCL" +#define SOG_DOCID "DOCID" +#define SOG_CF "CF" + +#define SOG_DOM_INDIR "DOM_INDIR" +#define SOG_DOM_STRADA "DOM_STRADA" +#define SOG_DOM_DISTRI "DOM_DISTRI" +#define SOG_DOM_CODCOM "DOM_CODCOM" +#define SOG_DOM_CODLOC "DOM_CODLOC" +#define SOG_RES_INDIR "RES_INDIR" +#define SOG_RES_CODCOM "RES_CODCOM" +#define SOG_RES_CODLOC "RES_CODLOC" + +#define SOG_TELABI "TELABI" +#define SOG_TELLAV "TELLAV" +#define SOG_TELALT "TELALT" +#define SOG_TITINDIR "TITINDIR" +#define SOG_ESCLUSO "ESCLUSO" +#define SOG_TERMESCL "TERMESCL" +#define SOG_MOTESCL "MOTESCL" +#define SOG_STATO "STATO" +#define SOG_DATASTATO "DATASTATO" +#define SOG_DATAULTID "DATAULTID" +#define SOG_TIPOULTID "TIPOULTID" +#define SOG_IDON1 "IDON1" +#define SOG_IDON2 "IDON2" +#define SOG_IDON3 "IDON3" +#define SOG_IDON4 "IDON4" +#define SOG_INTSI "INTSI" +#define SOG_INTAF "INTAF" +#define SOG_TOTDON "TOTDON" +#define SOG_DATAULTDON "DATAULTDON" +#define SOG_TIPOULTDON "TIPOULTDON" +#define SOG_DATAULTSI "DATAULTSI" +#define SOG_DATAULTAF "DATAULTAF" +#define SOG_TOTDONSI "TOTDONSI" +#define SOG_TOTDONAF "TOTDONAF" +#define SOG_DATAPROSSI "DATAPROSSI" +#define SOG_DATAPROSAF "DATAPROSAF" +#define SOG_GRUPPOAB0 "GRUPPOAB0" +#define SOG_RHANTID "RHANTID" +#define SOG_KELL "KELL" +#define SOG_FENOTIPORH "FENOTIPORH" +#define SOG_DU "DU" +#define SOG_PUNTORACC "PUNTORACC" +#define SOG_CODMED "CODMED" +#define SOG_MODCONV "MODCONV" +#define SOG_GIOPREDON "GIOPREDON" +#define SOG_GIOPRECON "GIOPRECON" +#define SOG_NUMCONV "NUMCONV" +#define SOG_DATACONV "DATACONV" +#define SOG_DATAULTAGG "DATAULTAGG" +#define SOG_UTENULTAGG "UTENULTAGG" +#define SOG_CONDOCC "CONDOCC" +#define SOG_POSPROF "POSPROF" +#define SOG_RAMOATT "RAMOATT" +#define SOG_TITSTUD "TITSTUD" +#define SOG_LUOGOLAV "LUOGOLAV" +#define SOG_PROFESS "PROFESS" +#define SOG_NOTE "NOTE" +#define SOG_T_STAMPATA "T_STAMPATA" +#define SOG_GRUPPOAZIE "GRUPPOAZIE" +#define SOG_COGNOME_SP "COGNOME_SP" diff --git a/at/soggetti.trr b/at/soggetti.trr new file mode 100755 index 000000000..d53764ecf --- /dev/null +++ b/at/soggetti.trr @@ -0,0 +1,74 @@ +90 +67 +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|4|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 +4 +CODICE| +UPPER(COGNOME)+UPPER(NOME)+DATANASC|X +CODSEZ+CODSOT+CODICE|X +CODSEZ+CODSOT+UPPER(COGNOME)+UPPER(NOME)+DATANASC|X