From 17948962eb32f24e9514c350133190b70aecdde4 Mon Sep 17 00:00:00 2001 From: cris Date: Fri, 5 Dec 1997 16:26:15 +0000 Subject: [PATCH] Adeguamento alla versione definitiva dei progetti git-svn-id: svn://10.65.10.50/trunk@5702 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- at/at0.cpp | 12 +- at/at0.h | 4 + at/at0.url | 30 +- at/at0100a.h | 75 ++-- at/at0100a.uml | 448 +++++++++++++++++---- at/at0100b.uml | 4 +- at/at0200.cpp | 189 +++++++-- at/at0200a.h | 25 +- at/at0200a.uml | 188 ++++++--- at/at0300.cpp | 110 ++++-- at/at0300a.uml | 96 ++--- at/at0400.cpp | 103 ++++- at/at0400a.h | 15 +- at/at0400a.uml | 61 ++- at/at0500a.uml | 8 +- at/at0600.cpp | 233 +++++++++++ at/at0600a.h | 13 + at/at0600a.uml | 148 +++++++ at/at0700.cpp | 347 ++++++++++++++++ at/at0700a.h | 15 + at/at0700a.uml | 511 ++++++------------------ at/at0800.cpp | 198 ++++++++++ at/at0800a.h | 13 + at/at0800a.uml | 221 +++++------ at/at0900.cpp | 253 ++++++++++++ at/at0900a.h | 17 + at/at0900a.uml | 180 +++++++++ at/at1.cpp | 4 +- at/at1.url | 23 +- at/at1100.cpp | 539 +++++++++++++++++-------- at/at1100a.h | 26 +- at/at1100a.uml | 187 ++++++++- at/at1200.cpp | 106 +++-- at/at1200a.h | 41 +- at/at1200a.uml | 222 ++++++++++- at/at1300.cpp | 415 ++++++++----------- at/at1300a.h | 25 +- at/at1300a.uml | 66 +--- at/at1400.cpp | 470 +++++++++------------- at/at1400a.h | 57 +-- at/at1400a.uml | 361 ++--------------- at/at1500.cpp | 465 ++++++++++++++-------- at/at1500a.h | 43 +- at/at1500a.uml | 244 +++++++++--- at/at2.cpp | 4 +- at/at2.h | 1 + at/at2.url | 13 +- at/at2100.cpp | 37 +- at/at2200.cpp | 38 +- at/at2300.cpp | 37 +- at/at2400.cpp | 117 +++--- at/at2400a.h | 2 +- at/at2400a.uml | 6 +- at/at2500.cpp | 69 ++-- at/at2600.cpp | 67 ++-- at/at2700.cpp | 594 ++++++++++++++++++++++++---- at/at2700a.h | 21 +- at/at2700a.uml | 207 ++++++---- at/at2800.cpp | 369 +++++++++++++++++ at/at2800a.h | 29 ++ at/at2800a.uml | 280 +++++++++++++ at/at4.cpp | 10 +- at/at4.url | 23 ++ at/at4100.cpp | 85 ++-- at/at4200.cpp | 148 +++++-- at/at4200a.h | 14 +- at/at4200a.uml | 63 ++- at/at4300.cpp | 119 ++++-- at/at4300a.h | 3 +- at/at4300a.uml | 27 +- at/at4400.cpp | 71 ++-- at/at4400a.uml | 8 +- at/at4500.cpp | 243 ++++++++++++ at/at4500.h | 7 + at/at4500a.h | 30 ++ at/at4500a.uml | 283 +++++++++++++ at/at4600.cpp | 333 ++++++++++++++++ at/at4600a.h | 21 + at/at4600a.uml | 225 +++++++++++ at/at4700.cpp | 516 ++++++++++++++++++++++++ at/at4700a.h | 22 ++ at/at4700a.uml | 232 +++++++++++ at/at4800.cpp | 363 +++++++++++++++++ at/at4800a.h | 10 + at/at4800a.uml | 56 +++ at/at5100a.h | 16 + at/at5100a.uml | 86 +++- at/at6100.cpp | 56 ++- at/at6200.cpp | 56 ++- at/at6300.cpp | 262 +++++++++--- at/at6300a.h | 5 +- at/at6300a.uml | 15 +- at/at6400.cpp | 65 ++- at/at6400a.h | 3 + at/at6400a.uml | 39 +- at/at6500.cpp | 3 +- at/at6600.cpp | 62 ++- at/at6700.cpp | 58 ++- at/at7.cpp | 10 +- at/at7.h | 4 + at/at7.url | 20 + at/at7100.cpp | 39 +- at/at7200.cpp | 118 +++--- at/at7200a.uml | 2 +- at/at7300.cpp | 22 +- at/at_pagin.frm | 1007 +++++++++++++++++------------------------------ at/atlib1.cpp | 4 +- at/batbtcs.h | 9 +- at/batbtcs.uml | 113 +++--- at/f90.trr | 3 +- at/f92.dir | 2 +- at/f92.trr | 9 +- at/motdim.h | 3 +- at/soggetti.h | 7 + 114 files changed, 9976 insertions(+), 3736 deletions(-) create mode 100755 at/at0600.cpp create mode 100755 at/at0600a.h create mode 100755 at/at0600a.uml create mode 100755 at/at0700.cpp create mode 100755 at/at0700a.h create mode 100755 at/at0800.cpp create mode 100755 at/at0800a.h create mode 100755 at/at0900.cpp create mode 100755 at/at0900a.h create mode 100755 at/at0900a.uml create mode 100755 at/at2800.cpp create mode 100755 at/at2800a.h create mode 100755 at/at2800a.uml create mode 100755 at/at4500.cpp create mode 100755 at/at4500.h create mode 100755 at/at4500a.h create mode 100755 at/at4500a.uml create mode 100755 at/at4600.cpp create mode 100755 at/at4600a.h create mode 100755 at/at4600a.uml create mode 100755 at/at4700.cpp create mode 100755 at/at4700a.h create mode 100755 at/at4700a.uml create mode 100755 at/at4800.cpp create mode 100755 at/at4800a.h create mode 100755 at/at4800a.uml diff --git a/at/at0.cpp b/at/at0.cpp index b6ffe1367..0306c0300 100755 --- a/at/at0.cpp +++ b/at/at0.cpp @@ -4,14 +4,12 @@ #include "at0.h" -#define usage "Error - usage : %s -{0|1|2|3|4}" +#define usage "Error - usage : %s -{0|1|2|3|4|5|6|7|8}" int main(int argc,char** argv) - { int rt = -1 ; const int r = (argc > 1) ? atoi(&argv[1][1]) : -1; - switch (r) { case 0: @@ -24,6 +22,14 @@ int main(int argc,char** argv) rt = at0400(argc,argv) ; break; case 4: rt = at0500(argc,argv) ; break; + case 5: + rt = at0600(argc,argv) ; break; + case 6: + rt = at0700(argc,argv) ; break; + case 7: + rt = at0800(argc,argv) ; break; + case 8: + rt = at0900(argc,argv) ; break; default: error_box(usage, argv[0]) ; break; } diff --git a/at/at0.h b/at/at0.h index 3e73d3d62..7de2033fc 100755 --- a/at/at0.h +++ b/at/at0.h @@ -6,6 +6,10 @@ int at0200(int argc, char* argv[]); int at0300(int argc, char* argv[]); int at0400(int argc, char* argv[]); int at0500(int argc, char* argv[]); +int at0600(int argc, char* argv[]); +int at0700(int argc, char* argv[]); +int at0800(int argc, char* argv[]); +int at0900(int argc, char* argv[]); #endif // __AT0_H diff --git a/at/at0.url b/at/at0.url index 393cb541a..48b9ed529 100755 --- a/at/at0.url +++ b/at/at0.url @@ -9,29 +9,43 @@ MENU TASK_MENUBAR SUBMENU MENU_FILE "~File" - -/* at0 -1 giornaliero donazioni/controlli */ +/* at0 -1 giornaliero donazioni */ MENUBAR MENU_BAR(1) - MENU MENU_BAR(1) SUBMENU MENU_FILE "~File" - /* at0 -2 giornaliero controlli */ MENUBAR MENU_BAR(2) - MENU MENU_BAR(2) SUBMENU MENU_FILE "~File" -/* at0 -3 gestione convocazione su punto di raccolta*/ +/* at0 -3 convocazione su punto di raccolta */ MENUBAR MENU_BAR(3) - MENU MENU_BAR(3) SUBMENU MENU_FILE "~File" /* at0 -4 spostamento convocazioni su punto di raccolta */ MENUBAR MENU_BAR(4) - MENU MENU_BAR(4) SUBMENU MENU_FILE "~File" +/* at0 -5 chiusura periodica */ +MENUBAR MENU_BAR(5) +MENU MENU_BAR(5) + SUBMENU MENU_FILE "~File" + +/* at0 -6 sblocco sospesi */ +MENUBAR MENU_BAR(6) +MENU MENU_BAR(6) + SUBMENU MENU_FILE "~File" + +/* at0 -7 sblocco esclusi */ +MENUBAR MENU_BAR(7) +MENU MENU_BAR(7) + SUBMENU MENU_FILE "~File" + +/* at0 -8 modifica intervalli di donazione */ +MENUBAR MENU_BAR(8) +MENU MENU_BAR(8) + SUBMENU MENU_FILE "~File" + diff --git a/at/at0100a.h b/at/at0100a.h index ab7aaf82d..92f196917 100755 --- a/at/at0100a.h +++ b/at/at0100a.h @@ -1,4 +1,4 @@ -// definizione campi della maschera at0100a.msk +// definizione campi della maschera at0100z.msk // SOGGETTI e dati collegati // pagina 1 @@ -57,30 +57,32 @@ #define F_NOMMED 213 #define F_NOTIZIARIO 214 #define F_BENEM 215 -#define F_GRUPPOAB0 216 -#define F_RHANTID 217 -#define F_KELL 218 -#define F_FENOTIPORH 219 -#define F_DU 220 -#define F_ANTICORPI 221 -#define F_CMV 222 -#define F_MODCONV 223 -#define F_PUNTORACC 224 -#define F_DESC_PUNTORACC 225 -#define F_GPD_LUN 226 -#define F_GPD_MAR 227 -#define F_GPD_MER 228 -#define F_GPD_GIO 229 -#define F_GPD_VEN 230 -#define F_GPD_SAB 231 -#define F_GPD_DOM 232 -#define F_GPC_LUN 233 -#define F_GPC_MAR 234 -#define F_GPC_MER 235 -#define F_GPC_GIO 236 -#define F_GPC_VEN 237 -#define F_GPC_SAB 238 -#define F_GPC_DOM 239 +#define F_CONSENSO 216 +#define F_T_STAMPATA 217 +#define F_GRUPPOAB0 218 +#define F_RHANTID 219 +#define F_KELL 220 +#define F_FENOTIPORH 221 +#define F_DU 222 +#define F_ANTICORPI 223 +#define F_CMV 224 +#define F_MODCONV 225 +#define F_PUNTORACC 226 +#define F_DESC_PUNTORACC 227 +#define F_GPD_LUN 228 +#define F_GPD_MAR 229 +#define F_GPD_MER 230 +#define F_GPD_GIO 231 +#define F_GPD_VEN 232 +#define F_GPD_SAB 233 +#define F_GPD_DOM 234 +#define F_GPC_LUN 235 +#define F_GPC_MAR 236 +#define F_GPC_MER 237 +#define F_GPC_GIO 238 +#define F_GPC_VEN 239 +#define F_GPC_SAB 240 +#define F_GPC_DOM 241 // pagina 3 @@ -115,6 +117,13 @@ #define F_DATACONV 329 #define F_NUMCONV 330 +#define F_STATOSI 331 +#define F_DATASI 332 +#define F_FINESOSSI 333 +#define F_STATOAF 334 +#define F_DATAAF 335 +#define F_FINESOSAF 336 + // pagina 4 #define F_CONDOCC 401 #define F_POSPROF 402 @@ -129,9 +138,8 @@ #define F_MOTESCL 411 #define F_UTENULTAGG 412 #define F_DATAULTAGG 413 -#define F_T_STAMPATA 414 -#define F_FAMIGLIA 415 -#define F_NOTE 416 +#define F_FAMIGLIA 414 +#define F_NOTE 415 // pagina 5 #define F_DONAZIONI 501 @@ -143,6 +151,7 @@ // pagina 6 #define F_CONTROLLI 601 +#define F_IDONEITA 602 // pagina 7 #define F_BENEMERENZE 701 @@ -187,6 +196,16 @@ #define F_C_DESC_PROSSTIPO 156 #define F_C_DESC_MOTIVO 157 +// pagina idoneita' +#define F_I_DATAIDO 101 +#define F_I_TIPOIDO 102 +#define F_I_IDO_SOS 103 +#define F_I_INTERVALLO 104 +#define F_I_FINESOS 105 +#define F_I_MOTIVO 106 +#define F_I_RESPONSAB 107 +#define F_I_DESC_MOTIVO 151 + // pagina benemerenze #define F_B_TIPOBEN 101 #define F_B_DESC_TIPOBEN 102 diff --git a/at/at0100a.uml b/at/at0100a.uml index 025001700..4fd42fd76 100755 --- a/at/at0100a.uml +++ b/at/at0100a.uml @@ -128,7 +128,7 @@ BEGIN OUTPUT F_DENSOT DENSOT CHECKTYPE SEARCH HELP "Codice sezione di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Codice sezione assente" END @@ -145,7 +145,7 @@ BEGIN COPY OUTPUT F_CODSEZ CHECKTYPE NORMAL HELP "Denominazione sezione di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Denominazione assente" END @@ -158,7 +158,7 @@ BEGIN COPY ALL F_CODSEZ CHECKTYPE NORMAL HELP "Codice sottogruppo di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Codice sottogruppo assente" END @@ -173,7 +173,7 @@ BEGIN COPY OUTPUT F_DENSEZ CHECKTYPE NORMAL HELP "Sottogruppo di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Denominazione sottogruppo assente" END @@ -460,7 +460,7 @@ BEGIN PROMPT 38 18 "Doc. di identita' " FIELDS DOCID FLAGS "U" - HELP "Documento di identit…: tipo e numero" + HELP "Documento di identita': tipo e numero" END STRING F_TELABI 14 @@ -481,7 +481,7 @@ STRING F_TELALT 14 BEGIN PROMPT 56 19 "Altro " FIELD TELALT - HELP "Altro numero telefonico per reperibilit…" + HELP "Altro numero telefonico per reperibilita'" END ENDPAGE @@ -560,6 +560,19 @@ BEGIN GROUP 12 END +TEXT DLG_NULL +BEGIN + PROMPT 39 3 "Stato att." +END + +STRING DLG_NULL 2 +BEGIN + // stato attuale + PROMPT 51 3 "" + FLAGS "D" + GROUP 17 +END + TEXT DLG_NULL BEGIN PROMPT 57 3 "Tessera" @@ -679,7 +692,7 @@ END STRING F_TITINDIR 10 BEGIN PROMPT 59 8 "Titolo " - FIELDS TESSSSN + FIELDS TITINDIR HELP "Eventuale titolo da stampare prima del nome sull'indirizzo" END @@ -699,7 +712,7 @@ BEGIN CHECKTYPE NORMAL HELP "Codice medico di base" WARNING "Codice medico assente" - ADD MASK at0800a + ADD MASK batbmed END STRING F_COGNMED 25 23 @@ -714,7 +727,7 @@ BEGIN CHECKTYPE SEARCH HELP "Medico di base" WARNING "Medico assente" - ADD MASK at0800a + ADD MASK batbmed END STRING F_NOMMED 25 22 @@ -730,7 +743,7 @@ BEGIN CHECKTYPE NORMAL HELP "Medico di base" WARNING "Medico assente" - ADD MASK at0800a + ADD MASK batbmed END BOOLEAN F_NOTIZIARIO @@ -745,6 +758,19 @@ BEGIN FIELD BENEM END +BOOLEAN F_CONSENSO +BEGIN + PROMPT 32 10 "Consenso" + FIELD CONSENSO +END + +BOOLEAN F_T_STAMPATA +BEGIN + PROMPT 47 10 "Tessera stampata " + FIELD T_STAMPATA +END + + GROUPBOX DLG_NULL 77 4 BEGIN PROMPT 1 12 "Dati gruppo-ematici" @@ -1021,6 +1047,19 @@ BEGIN GROUP 12 END +TEXT DLG_NULL +BEGIN + PROMPT 39 3 "Stato att." +END + +STRING DLG_NULL 2 +BEGIN + // stato attuale + PROMPT 51 3 "" + FLAGS "D" + GROUP 17 +END + TEXT DLG_NULL BEGIN PROMPT 57 3 "Tessera" @@ -1062,14 +1101,14 @@ END STRING DLG_NULL 4 BEGIN - PROMPT 54 6 "Kell " + PROMPT 55 6 "Kell " FLAGS "D" GROUP 9 END STRING DLG_NULL 4 BEGIN - PROMPT 67 6 "Du " + PROMPT 69 6 "Du " FLAGS "D" GROUP 10 END @@ -1078,7 +1117,8 @@ STRING F_STATO 2 BEGIN PROMPT 2 7 "Stato attuale " FIELD STATO - FLAGS "D" + FLAGS "DG" + MESSAGE COPY,17@ USE TCS INPUT CODTAB F_STATO OUTPUT F_DESCSTATO S3 @@ -1127,83 +1167,125 @@ BEGIN PROMPT 2 9 "Tipi di idon. " FIELD IDON1 FLAGS "D" - USE IDO - INPUT CODTAB F_IDON1 - OUTPUT F_DESC_ID1 S0 - CHECKTYPE NORMAL +// USE IDO +// INPUT CODTAB F_IDON1 +// OUTPUT F_DESC_ID1 S0 +// CHECKTYPE NORMAL END -STRING F_DESC_ID1 25 -BEGIN - PROMPT 20 9 "" - FLAGS "D" -END +//STRING F_DESC_ID1 25 +//BEGIN +// PROMPT 20 9 "" +// FLAGS "D" +//END STRING F_IDON2 2 BEGIN - PROMPT 47 9 "" + PROMPT 20 9 "" FIELD IDON2 FLAGS "D" - USE IDO - INPUT CODTAB F_IDON2 - OUTPUT F_DESC_ID2 S0 - CHECKTYPE NORMAL +// USE IDO +// INPUT CODTAB F_IDON2 +// OUTPUT F_DESC_ID2 S0 +// CHECKTYPE NORMAL END -STRING F_DESC_ID2 25 -BEGIN - PROMPT 51 9 "" - FLAGS "D" -END +//STRING F_DESC_ID2 25 +//BEGIN +// PROMPT 51 9 "" +// FLAGS "D" +//END STRING F_IDON3 2 BEGIN - PROMPT 2 10 " " + PROMPT 24 9 "" FIELD IDON3 FLAGS "D" - USE IDO - INPUT CODTAB F_IDON3 - OUTPUT F_DESC_ID3 S0 - CHECKTYPE NORMAL +// USE IDO +// INPUT CODTAB F_IDON3 +// OUTPUT F_DESC_ID3 S0 +// CHECKTYPE NORMAL END -STRING F_DESC_ID3 25 -BEGIN - PROMPT 20 10 "" - FLAGS "D" -END +//STRING F_DESC_ID3 25 +//BEGIN +// PROMPT 20 10 "" +// FLAGS "D" +//END STRING F_IDON4 2 BEGIN - PROMPT 47 10 "" + PROMPT 28 9 "" FIELD IDON4 FLAGS "D" - USE IDO - INPUT CODTAB F_IDON4 - OUTPUT F_DESC_ID4 S0 - CHECKTYPE NORMAL +// USE IDO +// INPUT CODTAB F_IDON4 +// OUTPUT F_DESC_ID4 S0 +// CHECKTYPE NORMAL END -STRING F_DESC_ID4 25 +//STRING F_DESC_ID4 25 +//BEGIN +// PROMPT 51 10 "" +// FLAGS "D" +//END + +STRING F_TIPOULTID 2 BEGIN - PROMPT 51 10 "" + PROMPT 38 9 "Ult. idon.: Tipo " + FIELD TIPOULTID FLAGS "D" END DATE F_DATAULTID BEGIN - PROMPT 2 11 "Data ult. id. " + PROMPT 61 9 "Data " FIELD DATAULTID FLAGS "D" END -STRING F_TIPOULTID 2 +STRING F_STATOSI 2 BEGIN - PROMPT 30 11 "Tipo " - FIELD TIPOULTID + PROMPT 2 10 "Stato attuale : Sangue intero " + FIELD STATOSI FLAGS "D" END +DATE F_DATASI +BEGIN + PROMPT 36 10 "" + FIELD DATASI + FLAGS "D" +END + +DATE F_FINESOSSI +BEGIN + PROMPT 2 11 "Fine sosp. : Sangue intero " + FIELD FINESOSSI + FLAGS "D" +END + +STRING F_STATOAF 2 +BEGIN + PROMPT 48 10 "Aferesi " + FIELD STATOAF + FLAGS "D" +END + +DATE F_DATAAF +BEGIN + PROMPT 60 10 "" + FIELD DATAAF + FLAGS "D" +END + +DATE F_FINESOSAF +BEGIN + PROMPT 48 11 "Aferesi " + FIELD FINESOSAF + FLAGS "D" +END + GROUPBOX DLG_NULL 77 8 BEGIN PROMPT 1 13 "Situazione donazioni" @@ -1234,7 +1316,7 @@ BEGIN CHECKTYPE NORMAL END -STRING F_DESC_ULTDON 25 +STRING F_DESC_ULTDON 30 25 BEGIN PROMPT 48 14 "" FLAGS "D" @@ -1386,6 +1468,32 @@ BEGIN GROUP 12 END +TEXT DLG_NULL +BEGIN + PROMPT 39 3 "Stato att." +END + +STRING DLG_NULL 2 +BEGIN + // stato attuale + PROMPT 51 3 "" + FLAGS "D" + GROUP 17 +END + +TEXT DLG_NULL +BEGIN + PROMPT 39 3 "Stato att." +END + +STRING DLG_NULL 2 +BEGIN + // stato attuale + PROMPT 51 3 "" + FLAGS "D" + GROUP 17 +END + TEXT DLG_NULL BEGIN PROMPT 57 3 "Tessera" @@ -1552,15 +1660,9 @@ BEGIN FLAGS "D" END -BOOLEAN F_T_STAMPATA -BEGIN - PROMPT 44 14 "Tessera stampata " - FIELD T_STAMPATA -END - BUTTON F_FAMIGLIA 10 1 BEGIN - PROMPT 65 14 "Famiglia" + PROMPT 44 14 "Famiglia" END MEMO F_NOTE 77 4 @@ -1645,6 +1747,19 @@ BEGIN GROUP 12 END +TEXT DLG_NULL +BEGIN + PROMPT 39 3 "Stato att." +END + +STRING DLG_NULL 2 +BEGIN + // stato attuale + PROMPT 51 3 "" + FLAGS "D" + GROUP 17 +END + TEXT DLG_NULL BEGIN PROMPT 57 3 "Tessera" @@ -1781,6 +1896,19 @@ BEGIN GROUP 12 END +TEXT DLG_NULL +BEGIN + PROMPT 39 3 "Stato att." +END + +STRING DLG_NULL 2 +BEGIN + // stato attuale + PROMPT 51 3 "" + FLAGS "D" + GROUP 17 +END + TEXT DLG_NULL BEGIN PROMPT 57 3 "Tessera" @@ -1794,9 +1922,14 @@ BEGIN GROUP 5 END -SPREADSHEET F_CONTROLLI +TEXT DLG_NULL BEGIN - PROMPT 1 5 "Controlli sanitari" + PROMPT 1 5 "Idoneita'/Sospensioni/Controlli sanitari sul soggetto" +END + +SPREADSHEET F_CONTROLLI -1 6 +BEGIN + PROMPT 1 6 "Controlli sanitari sul soggetto" ITEM "Data@10F" ITEM "Tipo@F" ITEM "Id.1" @@ -1808,7 +1941,24 @@ BEGIN ITEM "Pr.tipo" ITEM "Pr.data" ITEM "Mot." - ITEM "Responsabile@50" + ITEM "Responsabile@15" +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 13 "Idoneita'/Sospensioni per tipologie di donazione" +END + +SPREADSHEET F_IDONEITA -1 6 +BEGIN + PROMPT 1 14 "Idoneita'/Sospensioni per SI/AF" + ITEM "Data@10F" + ITEM "SI/AF@5F" + ITEM "Tipo@4F" + ITEM "Int." + ITEM "Fine sosp." + ITEM "Mot." + ITEM "Responsabile@37" END ENDPAGE @@ -1887,6 +2037,19 @@ BEGIN GROUP 12 END +TEXT DLG_NULL +BEGIN + PROMPT 39 3 "Stato att." +END + +STRING DLG_NULL 2 +BEGIN + // stato attuale + PROMPT 51 3 "" + FLAGS "D" + GROUP 17 +END + TEXT DLG_NULL BEGIN PROMPT 57 3 "Tessera" @@ -2020,7 +2183,7 @@ BEGIN OUTPUT F_D_DENSOT DENSOT CHECKTYPE SEARCH HELP "Codice sezione di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Codice sezione assente" END @@ -2032,7 +2195,7 @@ BEGIN COPY ALL F_D_CODSEZ CHECKTYPE NORMAL HELP "Codice sottogruppo di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Codice sottogruppo assente" END @@ -2048,7 +2211,7 @@ BEGIN COPY OUTPUT F_D_CODSEZ CHECKTYPE NORMAL HELP "Denominazione sezione di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Denominazione assente" END @@ -2062,7 +2225,7 @@ BEGIN COPY OUTPUT F_D_DENSEZ CHECKTYPE NORMAL HELP "Sottogruppo di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Denominazione sottogruppo assente" END @@ -2104,7 +2267,7 @@ BEGIN FLAGS "U" END -STRING F_D_DESC_TIPODON 25 +STRING F_D_DESC_TIPODON 30 BEGIN PROMPT 24 3 "" FLAGS "D" @@ -2187,7 +2350,7 @@ BEGIN OUTPUT F_C_DESC_IDON1 S0 CHECKTYPE NORMAL VALIDATE NOT_EMPTY_FUNC - WARNING "Codice idoneit… non presente" + WARNING "Codice idoneita' non presente" HELP "Idoneita' alla donazione" END @@ -2203,7 +2366,7 @@ BEGIN OUTPUT F_C_IDON2 CODTAB OUTPUT F_C_DESC_IDON2 S0 CHECKTYPE NORMAL - WARNING "Codice idoneit… non presente" + WARNING "Codice idoneita' non presente" HELP "Idoneita' alla donazione" END @@ -2219,7 +2382,7 @@ BEGIN OUTPUT F_C_IDON3 CODTAB OUTPUT F_C_DESC_IDON3 S0 CHECKTYPE NORMAL - WARNING "Codice idoneit… non presente" + WARNING "Codice idoneita' non presente" HELP "Idoneita' alla donazione" END @@ -2235,7 +2398,7 @@ BEGIN OUTPUT F_C_IDON4 CODTAB OUTPUT F_C_DESC_IDON4 S0 CHECKTYPE NORMAL - WARNING "Codice idoneit… non presente" + WARNING "Codice idoneita' non presente" HELP "Idoneita' alla donazione" END @@ -2309,7 +2472,7 @@ BEGIN HELP "Motivo del controllo sanitario" END -STRING F_C_RESPONSAB 50 +STRING F_C_RESPONSAB 50 15 BEGIN PROMPT 2 17 "Responsabile " FIELD LF_CONTSAN->RESPONSAB @@ -2377,6 +2540,135 @@ ENDPAGE ENDMASK +PAGE "Idoneita'" -1 -1 75 20 + +GRUPBOX DLG_NULL 73 4 +BEGIN + PROMPT 1 1 "Dati identificativi del controllo" +END + +DATE F_I_DATAIDO +BEGIN + PROMPT 2 2 "Data intervento " + FIELD LF_IDONEITA->DATAIDO + CHECKTYPE REQUIRED + VALIDATE NOT_EMPTY_FUNC + HELP "Data intervento" +END + +LISTBOX F_I_TIPOIDO 16 +BEGIN + PROMPT 2 3 "Tipologia donazione interessata (SI/AF)" + FIELD LF_IDONEITA->TIPOIDO + FLAGS "U" + ITEM " | " + ITEM "SI|Sangue intero " + ITEM "AF|Aferesi" + //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 +END + +LISTBOX F_I_IDO_SOS 14 +BEGIN + PROMPT 2 4 "Idoneit… o sospensione" + FIELD LF_IDONEITA->IDO_SOS + FLAGS "U" + VALIDATE NOT_EMPTY_FUNC + ITEM " | " + ITEM "ID|Idoneita'" + ITEM "SO|Sospensione " + //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 +END + +GRUPBOX DLG_NULL 73 3 +BEGIN + PROMPT 1 5 "Dati da compilare se si tratta di idoneita'" +END + +NUMBER F_I_INTERVALLO 3 0 +BEGIN + PROMPT 2 6 "Intervallo di donazione" + FIELD LF_IDONEITA->INTERVALLO + FLAGS "U" + VALIDATE NOT_EMPTY_FUNC +END + +GRUPBOX DLG_NULL 73 3 +BEGIN + PROMPT 1 8 "Dati da compilare se si tratta di sospensione" +END + +DATE F_I_FINESOS +BEGIN + PROMPT 2 9 "Data fine sospensione" + FIELD LF_IDONEITA->FINESOS + HELP "Data controllo" +END + +GROUPBOX DLG_NULL 73 4 +BEGIN + PROMPT 1 11 "Dati complementari" +END + +STRING F_I_MOTIVO 4 +BEGIN + PROMPT 2 12 "Motivo " + FIELD LF_IDONEITA->MOTIVO + FLAGS "U" + USE MTC + INPUT CODTAB F_I_MOTIVO + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_I_MOTIVO CODTAB + OUTPUT F_I_DESC_MOTIVO S0 + CHECKTYPE NORMAL + WARNING "Codice motivo non presente" + HELP "Motivo del controllo sanitario" +END + +STRING F_I_RESPONSAB 50 15 +BEGIN + PROMPT 2 13 "Responsabile " + FIELD LF_IDONEITA->RESPONSAB +END + +STRING F_I_DESC_MOTIVO 25 +BEGIN + PROMPT 23 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 + PAGE "Benemerenze" -1 -1 75 14 @@ -2467,7 +2759,7 @@ BEGIN OUTPUT F_B_DENSOT DENSOT CHECKTYPE SEARCH HELP "Codice sezione di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Codice sezione assente" END @@ -2479,7 +2771,7 @@ BEGIN COPY ALL F_B_CODSEZ CHECKTYPE NORMAL HELP "Codice sottogruppo di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Codice sottogruppo assente" END @@ -2511,7 +2803,7 @@ BEGIN COPY OUTPUT F_B_CODSEZ CHECKTYPE NORMAL HELP "Denominazione sezione di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Denominazione assente" END @@ -2525,7 +2817,7 @@ BEGIN COPY OUTPUT F_B_DENSEZ CHECKTYPE NORMAL HELP "Sottogruppo di appartenenza" - ADD MASK at0700a + ADD MASK batbsez WARNING "Denominazione sottogruppo assente" END diff --git a/at/at0100b.uml b/at/at0100b.uml index d23f41827..1e41e7e36 100755 --- a/at/at0100b.uml +++ b/at/at0100b.uml @@ -80,7 +80,7 @@ BEGIN HELP "Punto di prelievo" END -STRING F_D_LUOGOGEN 25 +STRING F_D_LUOGOGEN 50 25 BEGIN PROMPT 20 9 "" FLAGS "D" @@ -147,7 +147,7 @@ BEGIN FLAGS "D" END -STRING F_G_D_LUOGO 25 +STRING F_G_D_LUOGO 50 25 BEGIN PROMPT 30 5 "" FLAGS "D" diff --git a/at/at0200.cpp b/at/at0200.cpp index c51864e97..5d21f8ad8 100755 --- a/at/at0200.cpp +++ b/at/at0200.cpp @@ -25,7 +25,7 @@ #include "atlib.h" -#define ALIAS_CTD 100 +#define ALIAS_CTD 700 class TGiornalieroDC : public TApplication { @@ -38,9 +38,12 @@ class TGiornalieroDC : public TApplication TLocalisamfile* _rconvoc; TRecord_array* _sdonazioni; TRecord_array* _scontrolli; - TAssoc_array* _asoggetti; // array dei soggetti inseriti per controllare doppio ins. - bool _modified; + // array dei soggetti inseriti per controllare doppio inserimento + TAssoc_array* _asoggetti; + bool _modified, _ricerca; long _progins; + TDate _datadon; + TString16 _tipodon, _luogodon; // parametri di sezione int _numdon1, _numdon2; TString16 _catini1, _catfin1, _catini2, _catfin2; @@ -56,7 +59,7 @@ protected: TAssoc_array& get_array_sogg() { return *_asoggetti; } int write(TSheet_field& s); - + int read(TSheet_field& s); bool check_sog_sheet(const char* codsog); static bool nome_handler(TMask_field& f, KEY k); static bool codice_handler(TMask_field& f, KEY k); @@ -78,7 +81,7 @@ bool TGiornalieroDC::ins_controlli_handler(TMask_field& f, KEY k) 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); + s.enable_column(4,ins_controlli); } return TRUE; } @@ -95,6 +98,7 @@ bool TGiornalieroDC::create() { TApplication::create(); _modified = FALSE; + _ricerca = FALSE; _msk = new TMask("at0200a"); _rel = new TRelation(LF_SOGGETTI); _rel->add("CTD", "CODTAB==CATDON",1,0,ALIAS_CTD); @@ -147,14 +151,28 @@ bool TGiornalieroDC::menu(MENU_TAG m) do { TSheet_field& s = (TSheet_field&)msk.field(F_SOGGETTI); - //s.reset(); if (s.items() == 0) add_rows_soggetti(s); _asoggetti->destroy(); - msk.set(F_DATADON,oggi); + //msk.set(F_DATADON,oggi); + _ricerca = FALSE; tasto = msk.run(); + _datadon = msk.get(F_DATADON); + _tipodon = msk.get(F_TIPODON); + _luogodon = msk.get(F_LUOGODON); switch (tasto) { + case K_F9: // ricerca + { + if (_modified) + if (yesno_box("Registrare le modifiche?")) + TGiornalieroDC::write(s); + _modified = FALSE; + _ricerca = TRUE; + TGiornalieroDC::read(s); + } + break; + case K_ESC: // annulla { if (_modified) @@ -162,13 +180,16 @@ bool TGiornalieroDC::menu(MENU_TAG m) TGiornalieroDC::write(s); _modified = FALSE; msk.reset(); + msk.field(DLG_SAVEREC).enable(); + msk.field(DLG_FINDREC).enable(); + msk.field(DLG_NEWREC).enable(); } break; case K_SAVE: // registra { TGiornalieroDC::write(s); _modified = FALSE; - msk.reset(); //verificare se va tolta + //msk.reset(); //verificare se va tolta } break; case K_INS: // nuovo @@ -195,12 +216,81 @@ bool TGiornalieroDC::menu(MENU_TAG m) return FALSE; } +int TGiornalieroDC::read(TSheet_field& s) +{ + s.destroy(); + TLocalisamfile donaz(LF_DONAZ); + TLocalisamfile soggetti(LF_SOGGETTI); + soggetti.setkey(1); + donaz.setkey(4); + donaz.zero(); + donaz.put(DON_DATADON, _datadon); + if (_tipodon.not_empty()) + { + donaz.put(DON_TIPODON, _tipodon); + if (_luogodon.not_empty()) + donaz.put(DON_LUOGODON, _luogodon); + } + TString16 luogodon; + bool leggi = TRUE; + TRectype r(donaz.curr()); + int items = 0; + for(donaz.read(); !donaz.eof(); donaz.next()) + { + if (donaz.curr() != r) break; + if (_tipodon.empty() && _luogodon.not_empty()) + { + luogodon = donaz.get(DON_LUOGODON); + if (luogodon == _luogodon) + leggi = TRUE; + else + leggi = FALSE; + } + else + leggi = TRUE; + if (leggi) + { + TToken_string& row = s.row(items); + row.add(donaz.get(DON_CODICE)); + soggetti.zero(); + soggetti.put(SOG_CODICE,donaz.get(DON_CODICE)); + int err = soggetti.read(); + if (err == NOERR) + { + row.add(soggetti.get(SOG_COGNOME)); + row.add(soggetti.get(SOG_NOME)); + } + else + { + row.add(""); + row.add(""); + } + row.add(donaz.get(DON_TIPODON)); + row.add(""); + row.add(donaz.get(DON_ETICHETTA)); + row.add(donaz.get(DON_PRIMADON)); + if (err == NOERR) + { + row.add(soggetti.get(SOG_DATANASC)); + row.add(soggetti.get(SOG_CODSEZ)); + row.add(soggetti.get(SOG_CODSOT)); + row.add(soggetti.get(SOG_CATDON)); + row.add(soggetti.get(SOG_TESSAVIS)); + row.add(soggetti.get(SOG_INTSI)); + } + items++; + } + } + _msk->field(DLG_SAVEREC).disable(); + _msk->field(DLG_FINDREC).disable(); + _msk->field(DLG_NEWREC).disable(); + return items; +} + int TGiornalieroDC::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); @@ -220,13 +310,24 @@ int TGiornalieroDC::write(TSheet_field& s) int err = sog.read(); if (err == NOERR) { - const TString16 tipocon = row.get(3); - if (!tipocon.blank()) + TString16 tipocon = row.get(4); + if (tipocon.blank()) + tipocon = m.get(F_TIPOCON); + if (tipocon.not_empty()) { 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)); + recc->put(CON_DATACON, _datadon); + recc->put(CON_TIPOCON, tipocon); + if (modstato_tcs(tipocon) == 'I') + { + recc->put(CON_IDON1,sog.get(SOG_IDON1)); + recc->put(CON_IDON2,sog.get(SOG_IDON2)); + recc->put(CON_IDON3,sog.get(SOG_IDON3)); + recc->put(CON_IDON4,sog.get(SOG_IDON4)); + recc->put(CON_INTSI,sog.get(SOG_INTSI)); + recc->put(CON_INTAF,sog.get(SOG_INTAF)); + } bool insert = FALSE; bool exist = FALSE; TRectype* keyc = new TRectype(LF_CONTSAN); @@ -239,13 +340,13 @@ int TGiornalieroDC::write(TSheet_field& s) { const TRectype& riga = _scontrolli->row(r); const TDate d = riga.get(CON_DATACON); - if (data==d) // esiste già un controllo in questa data + if (_datadon==d) // esiste già un controllo in questa data { exist=TRUE; r=0; } else - if (data > d) + if (_datadon > d) { recc->put(CON_PROGCON,r+1); _scontrolli->insert_row(recc); @@ -266,15 +367,22 @@ int TGiornalieroDC::write(TSheet_field& s) _scontrolli->insert_row(recc); } if (!exist) + { _scontrolli->write(TRUE); + con_reord(sog.curr(),_scontrolli); + } } _progins++; 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)); - rec->put(DON_ETICHETTA, row.get(4)); + rec->put(DON_DATADON, _datadon); + TString16 tipodon = row.get(3); + if (tipodon.blank()) + tipodon = _tipodon; + rec->put(DON_TIPODON, tipodon); + rec->put(DON_LUOGODON, _luogodon); + rec->put(DON_ETICHETTA, row.get(5)); + rec->put(DON_PRIMADON, row.get(6)); rec->put(DON_CODSEZ,sog.get(SOG_CODSEZ)); rec->put(DON_CODSOT,sog.get(SOG_CODSOT)); @@ -293,13 +401,13 @@ int TGiornalieroDC::write(TSheet_field& s) { const TRectype& riga = _sdonazioni->row(r); const TDate d = riga.get(DON_DATADON); - if (data==d) // esiste gia' una donazione in questa data + if (_datadon==d) // esiste gia' una donazione in questa data { exist=TRUE; r=0; } else - if (data > d) + if (_datadon > d) { rec->put(DON_PROGDON,r+1); _sdonazioni->insert_row(rec); @@ -346,29 +454,28 @@ int TGiornalieroDC::write(TSheet_field& s) } // controllo se è idoneo - const TString16 tipo = m.get(F_TIPODON); int totdon = sog.get_int(SOG_TOTDON); sog.put(SOG_TOTDON,totdon+1); - if (data > dataultdon) + if (_datadon > dataultdon) { - sog.put(SOG_DATAULTDON,data); - sog.put(SOG_TIPOULTDON,tipo); + sog.put(SOG_DATAULTDON,_datadon); + sog.put(SOG_TIPOULTDON,tipodon); } - if (is_donaz(tipo,IDON_SI)) + if (is_donaz(tipodon,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 (_datadon>dataultdon) + sog.put(SOG_DATAULTSI,_datadon); } - if (is_donaz(tipo,IDON_AF)) + if (is_donaz(tipodon,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); + if (_datadon>dataultdon) + sog.put(SOG_DATAULTAF,_datadon); } char modstato = ' '; const TString16 stato = sog.get(SOG_STATO); // stato attuale @@ -465,9 +572,6 @@ int TGiornalieroDC::write(TSheet_field& s) if ((catdon == _catini2 || _catini2.empty()) && (totdon+1>=_numdon2) && _catfin2.not_empty() && !_sttess2) sog.put(SOG_CATDON, _catfin2); } - // per bologna - // if (catdon == "06") - // sog.put(SOG_CATDON,"04"); } TDate dataisc = sog.get_date(SOG_DATAISC); if (dataisc.empty() && _dataisc) @@ -477,7 +581,8 @@ int TGiornalieroDC::write(TSheet_field& s) } // aggiorno data e utente ultimo aggiornamento - sog.put(SOG_DATAULTAGG,TODAY); + const TDate oggi(TODAY); + sog.put(SOG_DATAULTAGG,oggi); sog.put(SOG_UTENULTAGG,user()); sog.rewrite(); @@ -505,6 +610,15 @@ bool TGiornalieroDC::soggetti_notify(TSheet_field& s, int r, KEY k) bool ok = TRUE; switch (k) { + case K_INS: + // richiesta inserimento riga + if (app()._ricerca) + { + s.message_box("Fase di ricerca: impossibile inserire donazioni"); + ok = FALSE; + } + break; + case K_DEL: case K_CTRL+K_DEL: // avvenuta cancellazione riga break; @@ -595,6 +709,9 @@ bool TGiornalieroDC::codice_handler(TMask_field& f, KEY k) m.set(F_S_CODSEZ, sog.get(SOG_CODSEZ)); m.set(F_S_CODSOT, sog.get(SOG_CODSOT)); m.set(F_S_CATDON, sog.get(SOG_CATDON)); + const int totdon = sog.get_int(SOG_TOTDON); + if (totdon == 0) + m.set(F_S_PRIMADON, 'X'); } else ok = FALSE; // codice non esistente diff --git a/at/at0200a.h b/at/at0200a.h index eec387f79..012e96b0c 100755 --- a/at/at0200a.h +++ b/at/at0200a.h @@ -8,31 +8,36 @@ #define F_DESC_TIPODON 204 #define F_DESC_LUOGODON 205 #define F_INS_CONTROLLI 206 +#define F_TIPOCON 207 +#define F_DESC_TIPOCON 208 // spreadsheet -#define F_SOGGETTI 207 +#define F_SOGGETTI 209 // 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_ETICHETTA 105 -#define F_S_DATANASC 106 -#define F_S_CODSEZ 107 -#define F_S_CODSOT 108 -#define F_S_CATDON 109 -#define F_S_TESSAVIS 110 +#define F_S_TIPODON 104 +#define F_S_TIPOCON 105 +#define F_S_ETICHETTA 106 +#define F_S_PRIMADON 107 +#define F_S_DATANASC 108 +#define F_S_CODSEZ 109 +#define F_S_CODSOT 110 +#define F_S_CATDON 111 +#define F_S_TESSAVIS 112 +#define F_S_INTSI 113 #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_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_INTSI 159 #define F_S_INTAF 160 #define F_S_PROSSTIPO 161 #define F_S_PROSSDATA 162 diff --git a/at/at0200a.uml b/at/at0200a.uml index 0971a78aa..4e4902158 100755 --- a/at/at0200a.uml +++ b/at/at0200a.uml @@ -2,9 +2,16 @@ TOOLBAR "" 0 20 0 2 +BUTTON DLG_FINDREC 10 2 +BEGIN + PROMPT -16 -11 "Ri~cerca" + MESSAGE EXIT,K_F9 + PICTURE 126 +END + BUTTON DLG_SAVEREC 10 2 BEGIN - PROMPT -15 -11 "~Registra" + PROMPT -26 -11 "~Registra" MESSAGE EXIT,K_SAVE PICTURE BMP_SAVEREC PICTURE BMP_SAVERECDN @@ -12,7 +19,7 @@ END BUTTON DLG_NEWREC 10 2 BEGIN - PROMPT -25 -11 "~Nuovo" + PROMPT -36 -11 "~Nuovo" MESSAGE EXIT,K_INS PICTURE BMP_NEWREC PICTURE BMP_NEWRECDN @@ -20,20 +27,20 @@ END BUTTON DLG_CANCEL 10 2 BEGIN - PROMPT -35 -11 "~Annulla" + PROMPT -46 -11 "~Annulla" MESSAGE EXIT,K_ESC PICTURE 102 END BUTTON DLG_PRINT 10 2 BEGIN - PROMPT -45 -11 "~Stampa" + PROMPT -56 -11 "~Stampa" MESSAGE RUN,at6,-2 END BUTTON DLG_QUIT 10 2 BEGIN - PROMPT -55 -11 "~Fine" + PROMPT -66 -11 "~Fine" MESSAGE EXIT,K_QUIT PICTURE BMP_QUIT PICTURE BMP_QUITDN @@ -52,7 +59,7 @@ END DATE F_DATADON BEGIN PROMPT 2 1 "Data donazione " - VALIDATE NOT_EMPTY_FUNC + CHECKTYPE REQUIRED HELP "Data donazione" END @@ -67,7 +74,7 @@ BEGIN OUTPUT F_TIPODON CODTAB OUTPUT F_DESC_TIPODON S0 VALIDATE NOT_EMPTY_FUNC - CHECKTYPE REQUIRED + CHECKTYPE NORMAL WARNING "Codice non presente" HELP "Tipo donazione" END @@ -89,19 +96,42 @@ END STRING F_DESC_TIPODON 30 BEGIN - PROMPT 30 2 "" + PROMPT 26 2 "" FLAGS "D" END STRING F_DESC_LUOGODON 50 BEGIN - PROMPT 30 3 "" + PROMPT 26 3 "" FLAGS "D" END BOOLEAN F_INS_CONTROLLI BEGIN PROMPT 2 4 "Inserimento controlli" + MESSAGE TRUE ENABLE,F_TIPOCON + MESSAGE FALSE RESET,F_TIPOCON|DISABLE,F_TIPOCON +END + +STRING F_TIPOCON 2 +BEGIN + PROMPT 30 4 "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 controllo" +END + +STRING F_DESC_TIPOCON 30 +BEGIN + PROMPT 46 4 "" + FLAGS "D" END SPREADSHEET F_SOGGETTI @@ -110,13 +140,16 @@ BEGIN ITEM "Codice@8" ITEM "Cognome@25" ITEM "Nome@25" + ITEM "Don." ITEM "Con." ITEM "Et. sacca" + ITEM "1ø" ITEM "Nato il@10" ITEM "Sez." ITEM "Sot." ITEM "Cat." ITEM "Tessera" + ITEM "Int.SI" END ENDPAGE @@ -125,9 +158,9 @@ ENDMASK PAGE "Soggetto " -1 -1 78 20 -GROUPBOX DLG_NULL 77 5 +GROUPBOX DLG_NULL 77 6 BEGIN - PROMPT 1 0 "" + PROMPT 1 0 "Soggetto donatore" FLAGS "R" END @@ -147,6 +180,7 @@ BEGIN DISPLAY "Tessera" TESSAVIS DISPLAY "Gr.AB0" GRUPPOAB0 DISPLAY "Rh " RHANTID + DISPLAY "Int.SI" INTSI OUTPUT F_S_CODICE CODICE OUTPUT F_S_COGNOME COGNOME OUTPUT F_S_NOME NOME @@ -155,8 +189,9 @@ BEGIN OUTPUT F_S_CODSOT CODSOT OUTPUT F_S_CATDON CATDON OUTPUT F_S_TESSAVIS TESSAVIS + OUTPUT F_S_INTSI INTSI // CHECKTYPE NORMAL -// ADD RUN at0 -0 + ADD RUN at0 -0 END STRING F_S_COGNOME 25 @@ -174,6 +209,7 @@ BEGIN DISPLAY "Tessera" TESSAVIS DISPLAY "Gr.AB0" GRUPPOAB0 DISPLAY "Rh " RHANTID + DISPLAY "Int.SI" INTSI OUTPUT F_S_CODICE CODICE OUTPUT F_S_COGNOME COGNOME OUTPUT F_S_NOME NOME @@ -182,9 +218,10 @@ BEGIN OUTPUT F_S_CODSOT CODSOT OUTPUT F_S_CATDON CATDON OUTPUT F_S_TESSAVIS TESSAVIS + OUTPUT F_S_INTSI INTSI HELP "Cognome del soggetto" // CHECKTYPE NORMAL -// ADD RUN at0 -0 + ADD RUN at0 -0 END STRING F_S_NOME 25 @@ -203,6 +240,7 @@ BEGIN DISPLAY "Tessera" TESSAVIS DISPLAY "Gr.AB0" GRUPPOAB0 DISPLAY "Rh " RHANTID + DISPLAY "Int.SI" INTSI OUTPUT F_S_CODICE CODICE OUTPUT F_S_COGNOME COGNOME OUTPUT F_S_NOME NOME @@ -211,19 +249,35 @@ BEGIN OUTPUT F_S_CODSOT CODSOT OUTPUT F_S_CATDON CATDON OUTPUT F_S_TESSAVIS TESSAVIS + OUTPUT F_S_INTSI INTSI HELP "Nome del soggetto" // CHECKTYPE NORMAL -// ADD RUN at0 -0 + ADD RUN at0 -0 +END + +STRING F_S_TIPODON 2 +BEGIN + PROMPT 2 16 "Tipo donazione " + FLAGS "U" + USE TDN + INPUT CODTAB F_S_TIPODON + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_S_TIPODON CODTAB + //OUTPUT F_S_DESC_TIPODON S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Tipo donazione (se diverso da dati fissi)" END GROUPBOX DLG_NULL 77 9 BEGIN - PROMPT 1 9 "Dati del controllo sanitario effettuato" + PROMPT 1 6 "Dati del controllo sanitario effettuato" END STRING F_S_TIPOCON 2 BEGIN - PROMPT 2 10 "Tipo controllo " + PROMPT 2 7 "Tipo controllo " FLAGS "U" USE TCS SELECT S6=="N" INPUT CODTAB F_S_TIPOCON @@ -235,11 +289,20 @@ BEGIN HELP "Tipo/Esito controllo sanitario" END -NUMBER F_S_ETICHETTA 9 +GROUPBOX DLG_NULL 77 3 BEGIN - PROMPT 2 17 "Etichetta sacca " + PROMPT 1 15 "Dati complementari della donazione" END +NUMBER F_S_ETICHETTA 9 +BEGIN + PROMPT 30 16 "Etichetta sacca " +END + +BOOLEAN F_S_PRIMADON +BEGIN + PROMPT 60 16 "Prima donazione" +END DATE F_S_DATANASC BEGIN @@ -247,26 +310,21 @@ BEGIN 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. " + PROMPT 2 4 "Sez./Sottog. " FLAGS "D" END -STRING F_S_DENSEZ 25 +STRING F_S_DENSEZ 25 23 BEGIN - PROMPT 12 6 "" + PROMPT 20 4 "" FLAGS "D" END STRING F_S_CODSOT 2 BEGIN - PROMPT 40 6 "Sot. " + PROMPT 46 4 "" FLAGS "D" USE LF_SEZIONI INPUT CODSEZ F_S_CODSEZ @@ -276,48 +334,54 @@ BEGIN CHECKTYPE NORMAL END -STRING F_S_DENSOT 25 +STRING F_S_DENSOT 25 23 BEGIN - PROMPT 50 6 "" + PROMPT 49 4 "" FLAGS "D" END STRING F_S_CATDON 2 BEGIN - PROMPT 2 7 "Cat. " + PROMPT 60 3 "Categoria " FLAGS "D" - USE CTD - INPUT CODTAB F_S_CATDON - OUTPUT F_S_DESC_CATDON S0 - CHECKTYPE NORMAL +// 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 " + PROMPT 33 3 "Tessera AVIS " FLAGS "D" END +NUMBER F_S_INTSI 3 0 +BEGIN + PROMPT 40 12 "Sangue intero " + FLAGS "D" +END + STRING F_S_DESC_TIPOCON 25 BEGIN - PROMPT 23 10 "" + PROMPT 23 7 "" FLAGS "D" END -STRING F_S_DESC_CATDON 25 -BEGIN - PROMPT 12 7 "" - FLAGS "D" -END +//STRING F_S_DESC_CATDON 25 15 +//BEGIN +// PROMPT 61 3 "" +// FLAGS "D" +//END TEXT DLG_NULL BEGIN - PROMPT 2 11 "Se idoneita': Tipi donazione ammessi" + PROMPT 2 8 "Se idoneita': tipi donazione ammessi" END STRING F_S_IDON1 2 BEGIN - PROMPT 40 11 "" + PROMPT 40 8 "" FLAGS "U" USE IDO INPUT CODTAB F_S_IDON1 @@ -332,7 +396,7 @@ END STRING F_S_IDON2 2 BEGIN - PROMPT 40 12 "" + PROMPT 40 9 "" FLAGS "U" USE IDO INPUT CODTAB F_S_IDON2 @@ -347,8 +411,8 @@ END STRING F_S_IDON3 2 BEGIN - PROMPT 40 13 "" - FLAGS "U" + PROMPT 40 10 "" + FLAGS "U" USE IDO INPUT CODTAB F_S_IDON3 DISPLAY "Codice" CODTAB @@ -362,8 +426,8 @@ END STRING F_S_IDON4 2 BEGIN - PROMPT 40 14 "" - FLAGS "U" + PROMPT 40 11 "" + FLAGS "U" USE IDO INPUT CODTAB F_S_IDON4 DISPLAY "Codice" CODTAB @@ -377,24 +441,24 @@ END TEXT DLG_NULL BEGIN - PROMPT 2 15 " Intervalli" + PROMPT 2 12 " intervalli" END -NUMBER F_S_INTSI 3 0 -BEGIN - PROMPT 40 15 "Sangue intero " - FLAGS "U" -END +//NUMBER F_S_INTSI 3 0 +//BEGIN +// PROMPT 29 12 "Sangue intero " +// FLAGS "U" +//END NUMBER F_S_INTAF 3 0 BEGIN - PROMPT 60 15 "Aferesi " + PROMPT 59 12 "Aferesi " FLAGS "U" END STRING F_S_PROSSTIPO 2 BEGIN - PROMPT 2 16 "Prossimo contr.: Tipo " + PROMPT 2 13 "Prossimo tipo " FLAGS "U" USE TCS INPUT CODTAB F_S_PROSSTIPO @@ -410,37 +474,37 @@ END DATE F_S_PROSSDATA BEGIN - PROMPT 56 16 "Data " + PROMPT 55 13 "Data " HELP "Data controllo" END STRING F_S_DESC_IDON1 25 BEGIN - PROMPT 46 11 "" + PROMPT 45 8 "" FLAGS "D" END STRING F_S_DESC_IDON2 25 BEGIN - PROMPT 46 12 "" + PROMPT 45 9 "" FLAGS "D" END STRING F_S_DESC_IDON3 25 BEGIN - PROMPT 46 13 "" + PROMPT 45 10 "" FLAGS "D" END STRING F_S_DESC_IDON4 25 BEGIN - PROMPT 46 14 "" + PROMPT 45 11 "" FLAGS "D" END STRING F_S_DESC_PROSSTIPO 25 BEGIN - PROMPT 29 16 "" + PROMPT 23 13 "" FLAGS "D" END diff --git a/at/at0300.cpp b/at/at0300.cpp index 0f1f46688..6db000dc1 100755 --- a/at/at0300.cpp +++ b/at/at0300.cpp @@ -24,7 +24,7 @@ #include "atlib.h" -#define ALIAS_CTD 100 +#define ALIAS_CTD 700 class TGiornalieroC : public TApplication { @@ -52,7 +52,7 @@ protected: bool check_sog_sheet(const char* codsog); static bool nome_handler(TMask_field& f, KEY k); static bool codice_handler(TMask_field& f, KEY k); - static bool tipocon_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); @@ -169,7 +169,10 @@ int TGiornalieroC::write(TSheet_field& s) { const TMask& m = s.mask(); - const TDate data = m.get(F_DATACON); + const TDate datagen = m.get(F_DATACON); + const TString16 tipogen = m.get(F_TIPOCON); + const TDate prdatagen = m.get(F_PROSSDATA); + const TString16 prtipogen = m.get(F_PROSSTIPO); int items = s.items(); TProgind *pi; @@ -192,15 +195,32 @@ int TGiornalieroC::write(TSheet_field& s) int err = sog.read(); if (err == NOERR) { - const TString16 tipocon = row.get(3); - if (!tipocon.blank()) + TString16 tipocon = row.get(3); + TString16 prosstipo = row.get(4); + TDate prossdata = row.get(5); + if (tipocon.blank()) + tipocon = tipogen; + if (prosstipo.blank()) + prosstipo = prtipogen; + if (!prossdata.ok()) + prossdata = prdatagen; + 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_DATACON, datagen); recc->put(CON_TIPOCON, tipocon); - recc->put(CON_PROSSTIPO, row.get(4)); - recc->put(CON_PROSSDATA, row.get(5)); + recc->put(CON_PROSSTIPO, prosstipo); + recc->put(CON_PROSSDATA, prossdata); + if (modstato_tcs(tipocon) == 'I') + { + recc->put(CON_IDON1, sog.get(SOG_IDON1)); + recc->put(CON_IDON2, sog.get(SOG_IDON2)); + recc->put(CON_IDON3, sog.get(SOG_IDON3)); + recc->put(CON_IDON4, sog.get(SOG_IDON4)); + recc->put(CON_INTSI, sog.get(SOG_INTSI)); + recc->put(CON_INTAF, sog.get(SOG_INTAF)); + } bool insert = FALSE; bool exist = FALSE; TRectype* keyc = new TRectype(LF_CONTSAN); @@ -213,13 +233,13 @@ int TGiornalieroC::write(TSheet_field& s) { const TRectype& riga = _scontrolli->row(r); const TDate d = riga.get(CON_DATACON); - if (data==d) // esiste gia' un controllo in questa data + if (datagen==d) // esiste gia' un controllo in questa data { exist=TRUE; r=0; } else - if (data > d) + if (datagen > d) { recc->put(CON_PROGCON,r+1); _scontrolli->insert_row(recc); @@ -242,7 +262,8 @@ int TGiornalieroC::write(TSheet_field& s) if (!exist) _scontrolli->write(TRUE); con_reord(sog.curr(), _scontrolli); - sog.put(SOG_DATAULTAGG,TODAY); + const TDate oggi(TODAY); + sog.put(SOG_DATAULTAGG,oggi); sog.put(SOG_UTENULTAGG,user()); sog.rewrite(); } @@ -366,27 +387,66 @@ bool TGiornalieroC::codice_handler(TMask_field& f, KEY k) } return ok; } - + +/* bool TGiornalieroC::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()) + const TString16 tipo = m.get(F_S_TIPOCON); + const char modstato = modstato_tcs(tipo); + if ( modstato == 'I' || modstato == 'M') + { + m.field(F_S_IDON1).enable(); + m.field(F_S_IDON2).enable(); + m.field(F_S_IDON3).enable(); + m.field(F_S_IDON4).enable(); + m.field(F_S_INTSI).disable(); + m.field(F_S_INTAF).disable(); + const TString16 idon1 = m.get(F_S_IDON1); + const TString16 idon2 = m.get(F_S_IDON2); + const TString16 idon3 = m.get(F_S_IDON3); + const TString16 idon4 = m.get(F_S_IDON4); + if (is_idon(idon1,idon2,idon3,idon4,IDON_SI)) + m.field(F_S_INTSI).enable(); + else + m.field(F_S_INTSI).reset(); + if (is_idon(idon1,idon2,idon3,idon4,IDON_AF)) + m.field(F_S_INTAF).enable(); + else + m.field(F_S_INTAF).reset(); + // propongo i dati precedenti per idoneita' + if (idon1.empty() && idon2.empty() && idon3.empty() && idon4.empty()) + { + const TMask& mask = *(app().get_mask()); + m.set(F_S_IDON1,mask.get(F_IDON1)); + m.set(F_S_IDON2,mask.get(F_IDON2)); + m.set(F_S_IDON3,mask.get(F_IDON3)); + m.set(F_S_IDON4,mask.get(F_IDON4)); + m.set(F_S_INTSI,mask.get(F_INTSI)); + m.set(F_S_INTAF,mask.get(F_INTAF)); + } + } + else { - 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); - } - } + m.field(F_S_IDON1).reset(); + m.field(F_S_IDON1).disable(); + m.field(F_S_IDON2).reset(); + m.field(F_S_IDON2).disable(); + m.field(F_S_IDON3).reset(); + m.field(F_S_IDON3).disable(); + m.field(F_S_IDON4).reset(); + m.field(F_S_IDON4).disable(); + m.field(F_S_INTSI).reset(); + m.field(F_S_INTSI).disable(); + m.field(F_S_INTAF).reset(); + m.field(F_S_INTAF).disable(); + } + } return TRUE; -} +} +*/ int at0300(int argc, char* argv[]) { diff --git a/at/at0300a.uml b/at/at0300a.uml index f533583c0..33b80f4b9 100755 --- a/at/at0300a.uml +++ b/at/at0300a.uml @@ -52,54 +52,54 @@ BEGIN 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 -// +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" diff --git a/at/at0400.cpp b/at/at0400.cpp index ec553472f..775464ebe 100755 --- a/at/at0400.cpp +++ b/at/at0400.cpp @@ -1,11 +1,11 @@ -#include +#include #include +#include #include #include #include #include #include -#include #include "at0.h" #include "atlib.h" @@ -19,7 +19,7 @@ #include "convoc.h" #include "rconvoc.h" -#define ALIAS_CTD -100 +#define ALIAS_CTD -700 #define ALIAS_TCS -200 #define IDON_SI "SI" #define IDON_AF "AF" @@ -34,6 +34,7 @@ class TGestioneConvocazioni: public TRelation_application TCursor* _cur; // cursore per selezione soggetti TLocalisamfile* _rconvoc; TLocalisamfile* _soggetti; + TLocalisamfile* _sezioni; TRecord_array* _sconvocati; // sheet convocati long _lastcod; // progressivo convocazione da assegnare long _numero; // numero convocazione @@ -58,12 +59,15 @@ protected: 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); static bool data_handler(TMask_field&f, KEY k); + static bool dataini_handler(TMask_field&f, KEY k); + static bool sezione_handler(TMask_field&f, KEY k); public: + virtual void print(); TGestioneConvocazioni() {} }; @@ -74,6 +78,7 @@ bool TGestioneConvocazioni::filter_func_convoc(const TRelation* rel) { bool filtrato = FALSE; TRectype& sog = rel->curr(); + const long codice = sog.get_long(SOG_CODICE); const TString16 cat = sog.get(SOG_CATDON); const char stato = modstato_tcs(sog.get(SOG_STATO)); const TString16 escluso = sog.get(SOG_ESCLUSO); @@ -101,7 +106,8 @@ bool TGestioneConvocazioni::filter_func_convoc(const TRelation* rel) if (filtrato) { filtrato = FALSE; - const TDate data = app()._data; + //const TDate data = app()._data; + TDate data = app()._dataini; const int numconv = sog.get_int(SOG_NUMCONV); const TDate dataultconv = sog.get(SOG_DATACONV); const TDate dataultsol = sog.get(SOG_DATAULTSOL); @@ -130,6 +136,30 @@ bool TGestioneConvocazioni::filter_func_convoc(const TRelation* rel) return filtrato; } +bool TGestioneConvocazioni::sezione_handler(TMask_field& f, KEY k) +{ + if (f.to_check(k)) + { + TMask& m = f.mask(); + //const TString16 codsez = m.get(F_CODSEZ); + //const TString16 codsot = m.get(F_CODSOT); + TLocalisamfile sez(LF_SEZIONI); + sez.setkey(1); + TRectype& recsez = sez.curr(); + recsez.zero(); + recsez.put(SEZ_CODSEZ, m.get(F_CODSEZ)); + recsez.put(SEZ_CODSOT, m.get(F_CODSOT)); + if (sez.read() == NOERR) + { + TDate data = sez.get_date(SEZ_DATAULTCON); + ++data; + m.set(F_DATAINI, data); + m.check_field(F_DATAINI); + } + } + return TRUE; +} + bool TGestioneConvocazioni::data_handler(TMask_field& f, KEY k) { if (f.to_check(k)) @@ -166,6 +196,42 @@ bool TGestioneConvocazioni::data_handler(TMask_field& f, KEY k) return TRUE; } +bool TGestioneConvocazioni::dataini_handler(TMask_field& f, KEY k) +{ + if (f.to_check(k)) + { + const TDate data = f.get(); + const int giorno = data.wday(); + TString16 datagio = ""; + switch (giorno) + { + case 0: + datagio = "Domenica"; + break; + case 1: + datagio = "Lunedi"; + break; + case 2: + datagio = "Martedi"; + break; + case 3: + datagio = "Mercoledi"; + break; + case 4: + datagio = "Giovedi"; + break; + case 5: + datagio = "Venerdi"; + break; + case 6: + datagio = "Sabato"; + break; + } + f.mask().set(F_DATAINIGIO,datagio); + } + return TRUE; +} + bool TGestioneConvocazioni::esegui_handler(TMask_field& f, KEY k) { if (k == K_SPACE) @@ -179,6 +245,8 @@ bool TGestioneConvocazioni::esegui_handler(TMask_field& f, KEY k) app()._codsez = m.get(F_CODSEZ); app()._codsot = m.get(F_CODSOT); app()._dataini = m.get(F_DATAINI); + if (app()._dataini.empty()) + app()._dataini = app()._data; app()._ritarda = m.get_bool(F_RITARDA); app()._maxrit = m.get_int(F_MAXRIT); if (app()._numero == 0 || !app()._data.ok() || app()._punto.empty() || app()._tipo.empty()) @@ -338,10 +406,14 @@ bool TGestioneConvocazioni::user_create() _sconvocati = new TRecord_array(LF_RCONVOC,RCV_PROGCONV); _msk->set_handler(F_ESEGUI,esegui_handler); _msk->set_handler(F_DATA,data_handler); + _msk->set_handler(F_DATAINI,dataini_handler); + _msk->set_handler(F_CODSEZ,sezione_handler); + _msk->set_handler(F_CODSOT,sezione_handler); TSheet_field& sc = (TSheet_field&)_msk->field(F_CONVOCATI); sc.set_notify(convocati_notify); _rel->lfile().last(); _lastcod = _rel->lfile().get_long(COV_NUMERO); + enable_menu_item(M_FILE_PRINT); return TRUE; } @@ -439,6 +511,16 @@ int TGestioneConvocazioni::scrivi(const TMask& m, bool ri) int err = ri ? TRelation_application::rewrite(m) : TRelation_application::write(m); if (err == NOERR) { + TLocalisamfile sez(LF_SEZIONI); + sez.setkey(1); + sez.zero(); + sez.put(SEZ_CODSEZ, app()._codsez); + sez.put(SEZ_CODSOT, app()._codsot); + if (sez.read() == NOERR) + { + sez.put(SEZ_DATAULTCON, app()._data); + sez.rewrite(); + } TLocalisamfile soggetti(LF_SOGGETTI); _sconvocati->destroy_rows(); TSheet_field& s = (TSheet_field&)m.field(F_CONVOCATI); @@ -501,6 +583,17 @@ bool TGestioneConvocazioni::convocati_notify(TSheet_field& s, int r, KEY k) return result; } +void TGestioneConvocazioni::print() +{ + TForm elenco("ATCONVOC"); + TCursor& cur = *elenco.cursor(); + TLocalisamfile& convoc = cur.file(); + const long numero = app()._msk->get_long(F_NUMERO); + convoc.put(COV_NUMERO, numero); + cur.read(); + elenco.print(-1); +} + int at0400(int argc, char* argv[]) { TGestioneConvocazioni a; diff --git a/at/at0400a.h b/at/at0400a.h index 9e7c1d63d..a550cbcb0 100755 --- a/at/at0400a.h +++ b/at/at0400a.h @@ -13,13 +13,14 @@ #define F_CODSOT 110 #define F_DENSOT 111 #define F_DATAINI 112 -#define F_RITARDA 113 -#define F_MAXRIT 114 -#define F_NOTE 115 -#define F_NUMCONV 116 -#define F_NUMSOLL 117 -#define F_NUMRIT 118 -#define F_CONVOCATI 119 +#define F_DATAINIGIO 113 +#define F_RITARDA 114 +#define F_MAXRIT 115 +#define F_NOTE 116 +#define F_NUMCONV 117 +#define F_NUMSOLL 118 +#define F_NUMRIT 119 +#define F_CONVOCATI 120 #define F_ESEGUI 140 diff --git a/at/at0400a.uml b/at/at0400a.uml index 70bf50cfc..bb65e4e4a 100755 --- a/at/at0400a.uml +++ b/at/at0400a.uml @@ -1,8 +1,51 @@ #include "at0400a.h" TOOLBAR "" 0 20 0 2 +BUTTON DLG_SAVEREC 10 2 +BEGIN + PROMPT -16 -1 "~Registra" + MESSAGE EXIT,K_SAVE + PICTURE BMP_SAVEREC + PICTURE BMP_SAVERECDN +END -#include +BUTTON DLG_NEWREC 10 2 +BEGIN + PROMPT -26 -1 "~Nuovo" + MESSAGE EXIT,K_INS + PICTURE BMP_NEWREC + PICTURE BMP_NEWRECDN +END + +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -36 -1 "~Elimina" + MESSAGE EXIT,K_DEL + PICTURE BMP_DELREC + PICTURE BMP_DELRECDN +END + +BUTTON DLG_FINDREC 10 2 +BEGIN + PROMPT -46 -1 "Ri~cerca" + MESSAGE EXIT,K_F9 + PICTURE 126 +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -56 -1 "~Annulla" + MESSAGE EXIT,K_ESC + PICTURE 102 +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -66 -1 "~Fine" + MESSAGE EXIT,K_QUIT + PICTURE BMP_QUIT + PICTURE BMP_QUITDN +END ENDPAGE @@ -124,7 +167,7 @@ BEGIN OUTPUT F_DENSOT DENSOT CHECKTYPE SEARCH HELP "Codice sezione da convocare" - ADD MASK at0700a + ADD MASK batbsez END STRING F_DENSEZ 25 @@ -140,7 +183,7 @@ BEGIN COPY OUTPUT F_CODSEZ CHECKTYPE NORMAL HELP "Denominazione sezione da convocare" - ADD MASK at0700a + ADD MASK batbsez END STRING F_CODSOT 2 @@ -150,7 +193,7 @@ BEGIN COPY ALL F_CODSEZ CHECKTYPE NORMAL HELP "Codice sottogruppo da convocare" - ADD MASK at0700a + ADD MASK batbsez END STRING F_DENSOT 25 @@ -164,7 +207,7 @@ BEGIN COPY OUTPUT F_DENSEZ CHECKTYPE NORMAL HELP "Sottogruppo da convocare" - ADD MASK at0700a + ADD MASK batbsez END DATE F_DATAINI @@ -173,6 +216,12 @@ BEGIN FIELD DATAINI END +STRING F_DATAINIGIO 10 +BEGIN + PROMPT 35 7 "" + FLAGS "D" +END + BOOLEAN F_RITARDA BEGIN PROMPT 2 8 "Ritardatari" @@ -181,7 +230,7 @@ END NUMBER F_MAXRIT 3 BEGIN - PROMPT 20 8 "Massimo ritardo in giorni" + PROMPT 20 8 "Massimo ritardo in giorni " FIELD MAXRIT END diff --git a/at/at0500a.uml b/at/at0500a.uml index 7e2173215..664622daa 100755 --- a/at/at0500a.uml +++ b/at/at0500a.uml @@ -72,7 +72,7 @@ BEGIN OUTPUT F_DENSOT DENSOT CHECKTYPE SEARCH HELP "Codice sezione da convocare" - ADD MASK at0700a + ADD MASK batbsez END STRING F_DENSEZ 25 @@ -88,7 +88,7 @@ BEGIN COPY OUTPUT F_CODSEZ CHECKTYPE NORMAL HELP "Denominazione sezione da convocare" - ADD MASK at0700a + ADD MASK batbsez END STRING F_CODSOT 2 @@ -97,7 +97,7 @@ BEGIN COPY ALL F_CODSEZ CHECKTYPE NORMAL HELP "Codice sottogruppo da convocare" - ADD MASK at0700a + ADD MASK batbsez END STRING F_DENSOT 25 @@ -111,7 +111,7 @@ BEGIN COPY OUTPUT F_DENSEZ CHECKTYPE NORMAL HELP "Sottogruppo da convocare" - ADD MASK at0700a + ADD MASK batbsez END GROUPBOX DLG_NULL 77 4 diff --git a/at/at0600.cpp b/at/at0600.cpp new file mode 100755 index 000000000..d3331366a --- /dev/null +++ b/at/at0600.cpp @@ -0,0 +1,233 @@ +#include +#include +#include +#include + +#include "at0.h" + +// nomi campi maschera +#include "at0600a.h" + +// nomi dei campi +#include "soggetti.h" +#include "donaz.h" +#include "contsan.h" +#include "benem.h" +#include "storico.h" +#include "sezioni.h" + +class TChiusuraPeriodica : public TPrintapp +{ + static bool filter_func_chiusura(const TRelation* rel); + + TMask* _msk; + TRelation* _rel; + int _cur; + TDate _data_chiusura; + TParagraph_string _operazione; + bool _definitiva; + +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 TMask& get_mask() { return *_msk; } + +public: + void filtra_sezioni(); + void crea_intestazione(); + TChiusuraPeriodica() : _data_chiusura(TODAY), _operazione("",30) {} +}; + +HIDDEN inline TChiusuraPeriodica& app() { return (TChiusuraPeriodica&) main_app(); } + +void TChiusuraPeriodica::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 TChiusuraPeriodica::preprocess_page(int file, int counter) +{ + _operazione = "Nulla"; + + TRectype& recsez = current_cursor()->curr(LF_SEZIONI); + TRectype& recsog = current_cursor()->curr(); + TLocalisamfile& filesog = current_cursor()->file(); + + const TString16 cat_estinti = recsez.get(SEZ_CATESTI); + const TString16 cat_cancellati = recsez.get(SEZ_CATCANC); + 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 = recsog.get(SOG_CATDON); + + + if ((catsog==cat_estinti && cat_estinti.not_empty()) + || (catsog==cat_cancellati && cat_cancellati.not_empty())) + { + const int totdon = recsog.get_int(SOG_TOTDON); + if (totdon >= donemer && donemer != 0) + { + _operazione = "Passaggio a emeriti"; + if (_definitiva) + { + recsog.put(SOG_CATDON,cat_emeriti); + filesog.rewrite(); + } + } + else + { + _operazione = "Cancellato"; + if (_definitiva) + filesog.remove(); + } + } + else + { + TDate dataultdon = recsog.get(SOG_DATAULTDON); + if (dataultdon.ok()) + { + dataultdon.addyear(intesti); + if (dataultdon < _data_chiusura) + { + _operazione = "Passaggio a estinti"; + if (_definitiva) + { + recsog.put(SOG_CATDON,cat_estinti); + filesog.rewrite(); + } + } + else + _operazione = "Non doveva essere filtrato: data ancora valida"; + } + else + _operazione = "Non doveva essere filtrato: data vuota"; + } + return TRUE; +} + + +void TChiusuraPeriodica::set_page(int file, int cnt) +{ + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@12g@S", FLD(LF_SOGGETTI,SOG_COGNOME)); + set_row(1,"@38g@S", FLD(LF_SOGGETTI,SOG_NOME)); + set_row(1,"@65g#a", &_operazione); +} + +bool TChiusuraPeriodica::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 && cat_estinti.not_empty()) || + (catsog == cat_cancellati && cat_cancellati.not_empty())); + 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 TChiusuraPeriodica::set_print(int) +{ + KEY tasto; + tasto = _msk->run(); + if (tasto == K_ENTER) + { + _definitiva = _msk->get_bool(F_DEFINITIVA); + _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 TChiusuraPeriodica::crea_intestazione() +{ + reset_header(); + + 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); + + if (_definitiva) + set_header(2,"@0gCHIUSURA PERIODICA - DEFINITIVA - ALLA DATA"); + else + set_header(2,"@0gCHIUSURA PERIODICA - PROVVISORIA - ALLA DATA"); + data_stampa = _data_chiusura.string(); + set_header(2,"@47g%10s", (const char*) data_stampa); + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); +} + +bool TChiusuraPeriodica::user_create() +{ + _msk = new TMask("at0600a"); + _rel = new TRelation(LF_SOGGETTI); + _rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT"); + //cursore ordinamento per sezione+sottogruppo+cognome+nome + _cur = add_cursor(new TCursor(_rel, "", 3)); + return TRUE; +} + +bool TChiusuraPeriodica::user_destroy() +{ + delete _rel; + delete _msk; + return TRUE; +} + +int at0600(int argc, char* argv[]) +{ + TChiusuraPeriodica a; + a.run(argc, argv, "Chiusura periodica"); + return 0; +} \ No newline at end of file diff --git a/at/at0600a.h b/at/at0600a.h new file mode 100755 index 000000000..d8e1f31a7 --- /dev/null +++ b/at/at0600a.h @@ -0,0 +1,13 @@ +// chiusura periodica +// 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_DEFINITIVA 110 diff --git a/at/at0600a.uml b/at/at0600a.uml new file mode 100755 index 000000000..43720f0fa --- /dev/null +++ b/at/at0600a.uml @@ -0,0 +1,148 @@ +#include "at0600a.h" + +PAGE "Chiusura Periodica" -1 -1 78 12 + +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 6 "Opzioni per la chiusura" +END + +DATE F_DATA +BEGIN + PROMPT 2 7 "Data di riferimento " + CHECKTYPE REQUIRED + HELP "Data di riferimento per i conteggi di chiusura" +END + +BOOLEAN F_DEFINITIVA +BEGIN + PROMPT 43 7 "Chiusura definitiva" + HELP "Se chiusura definitiva, le operazioni stampate verranno registrate" +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 10 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 10 "" +END +ENDPAGE +ENDMASK diff --git a/at/at0700.cpp b/at/at0700.cpp new file mode 100755 index 000000000..f664b0348 --- /dev/null +++ b/at/at0700.cpp @@ -0,0 +1,347 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "at0.h" +#include "atlib.h" + +#define ALIAS_TCS 200 +#define FINE_SOSPENSIONE "FS" + +// nomi campi maschera +#include "at0700a.h" + +// nomi dei campi +#include "soggetti.h" +#include "contsan.h" +#include "sezioni.h" + +class TSbloccoSospesi : public TPrintapp +{ + TMask* _msk; + TRelation* _rel; + TLocalisamfile* _contsan; + TRecord_array* _scontrolli; + int _cur; + int _contatore, _totale; + TDate _data_sblocco; // data scadenza sospensione fino a _data_sblocco + TDate _data_stampa; + TString16 _tiposo; // tipo sospesione da sbloccare + TString16 _codsez, _codsot; + bool _definitiva; + TParagraph_string _cognome_nome, _operazione; + TString16 _finesospensione; + + static bool filter_func_sbloccosospesi(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_print(int file, int counter); + +public: + void filtra_sezioni(); + void crea_intestazione(); + void header_sezione(const TString16 codsez, const TString16 codsot); + void footer_sezione(); + void fine_stampa(); + TSbloccoSospesi() : _data_sblocco(TODAY), _data_stampa(TODAY), _tiposo(""), _cognome_nome("",25), _operazione("",25) {} +}; + +HIDDEN inline TSbloccoSospesi& app() { return (TSbloccoSospesi&) main_app(); } + +print_action TSbloccoSospesi::postprocess_print(int file, int counter) +{ + if (_contatore > 0) + footer_sezione(); + fine_stampa(); + return NEXT_PAGE; +} + +void TSbloccoSospesi::fine_stampa() +{ + // stampa totale soggetti a fine stampa + reset_footer(); + TString sep(80); + sep.fill('-'); + set_footer(2, (const char *) sep); + if (_totale > 0) + set_footer(3,"TOTALE SOGGETTI SBLOCCATI %d", _totale); + else + set_footer(3,"NON CI SONO SOGGETTI SOSPESI DA SBLOCCARE"); + printer().formfeed(); + reset_footer(); +} + +void TSbloccoSospesi::footer_sezione() +{ + reset_footer(); + TString sep(80); + sep.fill('-'); + set_footer(2, (const char *) sep); + set_footer(3,"TOTALE SOGGETTI STAMPATI %d", _contatore); + printer().formfeed(); + reset_footer(); +} + +void TSbloccoSospesi::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 TSbloccoSospesi::preprocess_page(int file, int counter) +{ + TRectype& recsog = current_cursor()->curr(); + TString80 nome = recsog.get(SOG_COGNOME); + nome << " "; + nome << recsog.get(SOG_NOME); + _cognome_nome = nome; + + const TString16 stato = recsog.get(SOG_STATO); + const TString16 statosi = recsog.get(SOG_STATOSI); + const TString16 statoaf = recsog.get(SOG_STATOAF); + const TDate datafine = recsog.get_date(SOG_DATA_PROS); + TDate datafinesi(NULLDATE); + TDate datafineaf(NULLDATE); + if (statosi == "SO") + datafinesi = recsog.get_date(SOG_FINESOSSI); + if (statoaf == "SO") + datafineaf = recsog.get_date(SOG_FINESOSAF); + TString80 operazione = ""; + + if (stato == "SO" && datafine.ok() && datafine <= app()._data_sblocco) + operazione << "-- -- -- SO FS"; + else + if (statosi == "SO" && datafinesi.ok() && datafinesi <= app()._data_sblocco) + operazione << "SI SO ID"; + else + if (statoaf == "SO" && datafineaf.ok() && datafineaf <= app()._data_sblocco) + operazione << "AF SO ID"; + _operazione = operazione; + if (_definitiva) + { + 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 = recsog.get(SOG_CODSEZ); + const TString16 codsot = recsog.get(SOG_CODSOT); + if ((_codsez!=codsez)||(_codsot!=codsot)) + { + if ((_codsez != "**") && (_contatore > 0)) + footer_sezione(); + _contatore = 0; + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } + _contatore++; + _totale++; + return TRUE; +} + +void TSbloccoSospesi::set_page(int file, int cnt) +{ + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@12g#a", &_cognome_nome); + set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS)); + set_row(1,"@57g@ld", FLD(LF_SOGGETTI,SOG_DATASTATO)); + set_row(1,"@68g@ld", FLD(LF_SOGGETTI,SOG_DATA_PROS)); + set_row(1,"@79g#a", &_operazione); +} + +bool TSbloccoSospesi::filter_func_sbloccosospesi(const TRelation* rel) +{ + bool filtrato = FALSE; + TRectype& recsog = rel->lfile().curr(); + const TString16 stato = recsog.get(SOG_STATO); + const TString16 statosi = recsog.get(SOG_STATOSI); + const TString16 statoaf = recsog.get(SOG_STATOAF); + const TDate datafine = recsog.get_date(SOG_DATA_PROS); + TDate datafinesi(NULLDATE); + TDate datafineaf(NULLDATE); + if (statosi == "SO") + datafinesi = recsog.get_date(SOG_FINESOSSI); + if (statoaf == "SO") + datafineaf = recsog.get_date(SOG_FINESOSAF); + filtrato = (datafine.ok()) && (datafine <= app()._data_sblocco); + if ((!filtrato) && (datafinesi.ok() || datafineaf.ok())) + filtrato = ((datafinesi.ok() && (datafinesi <= app()._data_sblocco)) || (datafineaf.ok() && (datafineaf <= app()._data_sblocco))); + + /* + 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.ok()) && (datafine <= app()._data_sblocco); + } + } + } + } + */ + return filtrato; +} + +void TSbloccoSospesi::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(100); + 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 TSbloccoSospesi::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); + _definitiva = _msk->get_bool(F_DEFINITIVA); + + _contatore = 0; + _totale = 0; + reset_files(); + add_file(LF_SOGGETTI); + filtra_sezioni(); + // filtro per tipo sospensione + TString256 filtro = ""; + if (_tiposo.not_empty()) + filtro.format("((STATO == \"%s\") && (PROS_STATO == \"FS\"))",(const char*)_tiposo); + else + filtro << "((TCS->S6 == \"S\") && (PROS_STATO == \"FS\"))"; + filtro << " || (STATOSI == \"SO\") || (STATOAF == \"SO\")"; + current_cursor()->setfilter(filtro, TRUE); + current_cursor()->set_filterfunction(filter_func_sbloccosospesi,TRUE); + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TSbloccoSospesi::crea_intestazione() +{ + reset_header(); + + TString sep(100); + if (_definitiva) + sep = "SBLOCCO DEFINITIVO SOSPESI "; + else + sep = "STAMPA PROVVISORIA PER 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, "@88g%s", (const char*) sep); + + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); + set_header(4,"@0gCod.@9gC.@12gCognome e nome@38gNato il@49gTessera@57gData sosp.@68gScadenza@79gDo Da A Sogg."); + set_header(5,"@0g------@9g--@12g-------------------------@38g----------@49g-------@57g----------@68g----------@79g---------------"); + printer().footerlen(3); +} + +bool TSbloccoSospesi::user_create() +{ + _msk = new TMask("at0700a"); + _rel = new TRelation(LF_SOGGETTI); + _rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT"); + _rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS); + //cursore ordinamento per sezione+sottogruppo+cognome+nome + _cur = add_cursor(new TCursor(_rel, "", 3)); + _contsan = new TLocalisamfile(LF_CONTSAN); + _scontrolli = new TRecord_array(LF_CONTSAN, CON_PROGCON); + return TRUE; +} + +bool TSbloccoSospesi::user_destroy() +{ + delete _rel; + delete _msk; + delete _contsan; + delete _scontrolli; + return TRUE; +} + +int at0700(int argc, char* argv[]) +{ + TSbloccoSospesi a; + a.run(argc, argv, "Sblocco sospesi"); + return 0; +} \ No newline at end of file diff --git a/at/at0700a.h b/at/at0700a.h new file mode 100755 index 000000000..1e2143a43 --- /dev/null +++ b/at/at0700a.h @@ -0,0 +1,15 @@ +// 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 +#define F_DEFINITIVA 112 diff --git a/at/at0700a.uml b/at/at0700a.uml index b2de09e91..1623695bb 100755 --- a/at/at0700a.uml +++ b/at/at0700a.uml @@ -1,460 +1,175 @@ -#include "at0700.h" +#include "at0700a.h" + +TOOLBAR "" 0 20 0 2 + +BUTTON DLG_PRINT 9 2 +BEGIN + PROMPT -12 -11 "~Stampa" + MESSAGE EXIT,K_ENTER +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -11 "" +END -TOOLBAR "" 0 20 0 2 -#include ENDPAGE -PAGE "Sezioni 1" -1 -1 78 20 +PAGE "Sblocco sospesi" -1 -1 78 11 GROUPBOX DLG_NULL 77 4 BEGIN - PROMPT 1 0 "" - FLAGS "R" + PROMPT 1 1 "Scelta sezioni/sottogruppi" END -STRING F_CODSEZ 2 +STRING F_SEZINI 2 BEGIN - PROMPT 2 1 "Cod. sezione " - FIELD CODSEZ + PROMPT 2 2 "Da " FLAGS "U" - KEY 1 USE LF_SEZIONI - INPUT CODSEZ F_CODSEZ - INPUT CODSOT F_CODSOT - DISPLAY "Cod.sez. " CODSEZ - DISPLAY "Cod.sot. " CODSOT + 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_CODSEZ CODSEZ - OUTPUT F_DENSEZ DENSEZ - OUTPUT F_CODSOT CODSOT - OUTPUT F_DENSOT DENSOT - MESSAGE COPY,1@ - CHECKTYPE REQUIRED + 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_CODSOT 2 +STRING F_D_SEZINI 25 BEGIN - PROMPT 2 2 "Cod. sottogruppo " - FIELD CODSOT + PROMPT 11 2 "" 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 + INPUT DENSEZ F_D_SEZINI 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@ + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + COPY OUTPUT F_SEZINI CHECKTYPE NORMAL - WARNING "Inserire la denominazione del sottogruppo" + HELP "Sezione da cui partire" END -GROUPBOX DLG_NULL 77 7 +STRING F_SOTINI 2 BEGIN - PROMPT 1 4 "Dati anagrafici" + PROMPT 2 3 " " + COPY ALL F_SEZINI + CHECKTYPE SEARCH + HELP "Codice sottogruppo da cui partire" END -STRING F_INDIRIZZO 50 -BEGIN - PROMPT 2 5 "Indirizzo " - FIELD INDIRIZZO -END - -STRING F_COM 4 -BEGIN - PROMPT 2 6 "Comune " - FIELD COM +STRING F_D_SOTINI 25 +BEGIN + PROMPT 11 3 "" 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 + 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 - WARNING "Comune assente" + HELP "Sottogruppo da cui partire" END -STRING F_DENCOM 48 +STRING F_SEZFIN 2 BEGIN - PROMPT 19 6 "" - USE LF_COMUNI KEY 2 - INPUT DENCOM F_DENCOM -#include - COPY OUTPUT F_COM + 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_LOCALITA 4 +STRING F_SOTFIN 2 BEGIN - PROMPT 2 7 "Localita' " - FIELD LOCALITA + 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" - USE LCP SELECT S7=#F_COM - INPUT CODTAB F_LOCALITA - DISPLAY "Codice" CODTAB - DISPLAY "Localita'@30" S0 - DISPLAY "CAP@5" S6 - OUTPUT F_LOCALITA CODTAB - OUTPUT F_DENLOC S0 - OUTPUT F_CAPCOM S6 - OUTPUT F_COM S7 + 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 "Codice localit… postale se diversa dal comune" + HELP "Sottogruppo finale" END -STRING F_DENLOC 30 +GROUPBOX DLG_NULL 77 5 BEGIN - PROMPT 19 7 "" - USE LCP KEY 2 SELECT S7=#F_COM - 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" + PROMPT 1 5 "Opzioni per lo sblocco" END - -STRING F_PROVCOM 5 +DATE F_DATA BEGIN - PROMPT 71 6 "" - FLAGS "D" + PROMPT 2 6 "Scadenza fino al " + CHECKTYPE REQUIRED + HELP "Data di riferimento per la scadenza (fino al)" END -STRING F_CAPCOM 5 +STRING F_TIPO 2 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 25 6 -BEGIN - PROMPT 16 11 "Intestazione tessere" -END - -STRING F_INTESTAZ1 20 -BEGIN - PROMPT 17 12 "" - FIELD INTESTAZ1 -END - -STRING F_INTESTAZ2 20 -BEGIN - PROMPT 17 13 "" - FIELD INTESTAZ2 -END - -STRING F_INTESTAZ3 20 -BEGIN - PROMPT 17 14 "" - FIELD INTESTAZ3 -END - -STRING F_INTESTAZ4 20 -BEGIN - PROMPT 17 15 "" - FIELD INTESTAZ4 -END - -GROUPBOX DLG_NULL 35 8 -BEGIN - PROMPT 43 11 "Dati per stampa cartolina" -END - -STRING F_CONVORA 20 -BEGIN - PROMPT 44 12 "Orario " - FIELD CONVORA -END - -STRING F_CONVSEDE1 25 -BEGIN - PROMPT 44 13 "Sede " - FIELD CONVSEDE1 -END - -STRING F_CONVSEDE2 25 -BEGIN - PROMPT 44 14 " " - FIELD CONVSEDE2 -END - -STRING F_CONVSEDE3 25 -BEGIN - PROMPT 44 15 " " - FIELD CONVSEDE3 -END - -STRING F_CONVSEDE4 25 -BEGIN - PROMPT 44 16 " " - FIELD CONVSEDE4 -END - -STRING F_CONVNOTE 25 -BEGIN - PROMPT 44 17 "Note " - FIELD CONVNOTE -END - -ENDPAGE - -PAGE "Sezioni 2" -1 -1 78 20 - -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 7 -BEGIN - PROMPT 1 4 "Parametri convocazione" -END - -NUMBER F_INTMINCONV 4 -BEGIN - PROMPT 2 5 "Int. min. convoc. " - FIELD INTMINCONV - HELP "Intervallo minimo di convocazione in giorni (dall'ultima don.)" -END - -NUMBER F_INTMIN 4 -BEGIN - PROMPT 2 6 "Int. avvisi: min. " - FIELD INTMIN -END - -NUMBER F_INTMAX 4 -BEGIN - PROMPT 2 7 " max. " - FIELD INTMAX -END - -LISTBOX F_TIPOCONV 11 -BEGIN - PROMPT 2 8 "Tipo convocazione " - FIELD TIPOCONV - ITEM "D|Data fissa" - ITEM "G|dal Giorno" -END - -DATE F_DATAULTCON -BEGIN - PROMPT 2 9 "Data ultima conv. " - FIELD DATAULTCON - FLAGS "D" -END - -GROUPBOX DLG_NULL 35 7 -BEGIN - PROMPT 1 11 "Parametri convocazione BO" -END - -NUMBER F_GIOCARSOL 3 -BEGIN - PROMPT 2 12 "Gio. tra cart. e soll. " - FIELD GIOCARSOL - HELP "Intervallo in giorni tra cartolina e primo sollecito" -END - -NUMBER F_GIOSOLSOL 3 -BEGIN - PROMPT 2 13 "Gio. tra soll. e soll. " - FIELD GIOSOLSOL - HELP "Intervallo in giorni tra solleciti" -END - -NUMBER F_GIOULTSOL 3 -BEGIN - PROMPT 2 14 "Gio. tra penult. e ult. soll. " - FIELD GIOULTSOL - HELP "Intervallo tra penultimo e ultimo sollecito" -END - -NUMBER F_GIOPERRIT 3 -BEGIN - PROMPT 2 15 "Gio. tra chiamate per ritard. " - FIELD GIOPERRIT - HELP "Giorni tra le chiamate per ritardatari" -END - -NUMBER F_NUMMAXSOL 2 -BEGIN - PROMPT 2 16 "Num. max di solleciti " - FIELD NUMMAXSOL - HELP "Numero massimo di solleciti inviabili per soggetto" -END - -GROUPBOX DLG_NULL 41 8 -BEGIN - PROMPT 37 4 "Parametri per chiusura fine anno" -END - -NUMBER F_DONEMER 3 -BEGIN - PROMPT 38 5 "Donazioni per passaggio a emeriti " - FIELD DONEMER + PROMPT 2 7 "Tipo sospensione " 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 + USE TCS SELECT S6="S" + INPUT CODTAB F_TIPO DISPLAY "Codice" CODTAB DISPLAY "Descrizione@30" S0 - OUTPUT F_CATEMER CODTAB - OUTPUT F_DESC_CATEMER S0 + OUTPUT F_TIPO CODTAB + OUTPUT F_D_TIPO S0 CHECKTYPE NORMAL WARNING "Codice non presente" + HELP "Tipo sospensione: vuoto = tutti" END -STRING F_DESC_CATEMER 20 +STRING F_D_TIPO 30 BEGIN - PROMPT 56 8 "" + PROMPT 25 7 "" FLAGS "D" END -STRING F_CATESTI 2 +BOOLEAN F_DEFINITIVA 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" + PROMPT 2 8 "Sblocco definitivo" + HELP "Se sblocco definitivo, i soggetti stampati vengono sbloccati" 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/at0800.cpp b/at/at0800.cpp new file mode 100755 index 000000000..fa41d17fc --- /dev/null +++ b/at/at0800.cpp @@ -0,0 +1,198 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "at0.h" + +// nomi campi maschera +#include "at0800a.h" + +// nomi dei campi +#include "soggetti.h" +#include "sezioni.h" + +class TSbloccoEsclusi : public TPrintapp +{ + TMask* _msk; + TRelation* _rel; + + int _cur; + TDate _data_sblocco; // data scadenza esclusione fino a _data_sblocco + TDate _data_stampa; + TString16 _codsez, _codsot; + bool _definitiva; + + static bool filter_func_sbloccoesclusi(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); + TSbloccoEsclusi() : _data_sblocco(TODAY), _data_stampa(TODAY) {} +}; + +HIDDEN inline TSbloccoEsclusi& app() { return (TSbloccoEsclusi&) main_app(); } + +void TSbloccoEsclusi::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 TSbloccoEsclusi::preprocess_page(int file, int counter) +{ + TRectype& recsog = current_cursor()->curr(); + if (_definitiva) + { + recsog.put(SOG_ESCLUSO, " "); + recsog.put(SOG_TERMESCL, NULLDATE); + current_cursor()->file().rewrite(); + } + // salto pagina se cambio sezione + const TString16 codsez = recsog.get(SOG_CODSEZ); + const TString16 codsot = recsog.get(SOG_CODSOT); + if ((_codsez!=codsez)||(_codsot!=codsot)) + { + if (_codsez != "**") + printer().formfeed(); + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } + return TRUE; +} + +void TSbloccoEsclusi::set_page(int file, int cnt) +{ + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@12g@S", FLD(LF_SOGGETTI,SOG_COGNOME)); + set_row(1,"@38g@S", FLD(LF_SOGGETTI,SOG_NOME)); + set_row(1,"@63g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); +} + +bool TSbloccoEsclusi::filter_func_sbloccoesclusi(const TRelation* rel) +{ + TRectype& recsog = rel->lfile().curr(); + TDate scadenza = recsog.get(SOG_TERMESCL); + return (scadenza.ok() && scadenza <= app()._data_sblocco); +} + +void TSbloccoEsclusi::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 TSbloccoEsclusi::set_print(int) +{ + KEY tasto; + tasto = _msk->run(); + if (tasto == K_ENTER) + { + _codsez = "**"; + _codsot = "**"; + _data_sblocco = _msk->get(F_DATA); + _definitiva = _msk->get_bool(F_DEFINITIVA); + reset_files(); + add_file(LF_SOGGETTI); + filtra_sezioni(); + current_cursor()->setfilter("ESCLUSO == \"TD\"", TRUE); + current_cursor()->set_filterfunction(filter_func_sbloccoesclusi, TRUE); + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TSbloccoEsclusi::crea_intestazione() +{ + reset_header(); + + TString sep(132); + if (_definitiva) + sep = "SBLOCCO DEFINITIVO ESCLUSI "; + else + sep = "STAMPA PROVVISORIA PER SBLOCCO ESCLUSI "; + sep << " FINO ALLA DATA "; + TString16 data_stampa = _data_sblocco.string(); + sep << data_stampa; + sep.center_just(); + set_header(2, "@0g%s", (const char*) sep); + data_stampa = _data_stampa.string(); + set_header(2,"@0g%10s", (const char*) data_stampa); + sep = ""; + sep << "Pag. @#"; + set_header(2, "@120g%s", (const char*) sep); + + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); + set_header(4,"@0gCod.@9gC.@12gCognome e nome@38gNato il"); + set_header(5,"@0g--------@9g--@12g-------------------------@38g----------"); +} + +bool TSbloccoEsclusi::user_create() +{ + _msk = new TMask("at0800a"); + _rel = new TRelation(LF_SOGGETTI); + _rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT"); + //cursore ordinamento per sezione+sottogruppo+cognome+nome + _cur = add_cursor(new TCursor(_rel, "", 3)); + return TRUE; +} + +bool TSbloccoEsclusi::user_destroy() +{ + delete _rel; + delete _msk; + return TRUE; +} + +int at0800(int argc, char* argv[]) +{ + TSbloccoEsclusi a; + a.run(argc, argv, "Sblocco esclusi"); + return 0; +} \ No newline at end of file diff --git a/at/at0800a.h b/at/at0800a.h new file mode 100755 index 000000000..f173c4c62 --- /dev/null +++ b/at/at0800a.h @@ -0,0 +1,13 @@ +// sblocco esclusi +// definizione campi per maschera di selezione + +#define F_SEZINI 101 +#define F_D_SEZINI 102 +#define F_SOTINI 103 +#define F_D_SOTINI 104 +#define F_SEZFIN 105 +#define F_D_SEZFIN 106 +#define F_SOTFIN 107 +#define F_D_SOTFIN 108 +#define F_DATA 109 +#define F_DEFINITIVA 110 diff --git a/at/at0800a.uml b/at/at0800a.uml index 456d27906..b481e6510 100755 --- a/at/at0800a.uml +++ b/at/at0800a.uml @@ -1,155 +1,148 @@ -#include "at0800.h" +#include "at0800a.h" -TOOLBAR "" 0 20 0 2 -#include -ENDPAGE +PAGE "Sblocco esclusi" -1 -1 78 11 -PAGE "Medici" -1 -1 78 20 - -GROUPBOX DLG_NULL 77 5 +GROUPBOX DLG_NULL 77 4 BEGIN - PROMPT 1 1 "" - FLAGS "R" + PROMPT 1 1 "Scelta sezioni/sottogruppi" END -NUMBER F_CODMED 6 +STRING F_SEZINI 2 BEGIN - PROMPT 2 2 "Cod. medico " - FIELD CODMED + PROMPT 2 2 "Da " 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 + 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_COGNOME 25 +STRING F_D_SEZINI 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 + PROMPT 11 2 "" 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 + 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 - WARNING "Comune assente" + HELP "Sezione da cui partire" END -STRING F_DENCOM 48 +STRING F_SOTINI 2 BEGIN - PROMPT 19 8 "" - USE LF_COMUNI KEY 2 - INPUT DENCOM F_DENCOM -#include - COPY OUTPUT F_COM - CHECKTYPE NORMAL + PROMPT 2 3 " " + COPY ALL F_SEZINI + CHECKTYPE SEARCH + HELP "Codice sottogruppo da cui partire" END -STRING F_LOCALITA 4 -BEGIN - PROMPT 2 9 "Località " - FIELD LOCALITA +STRING F_D_SOTINI 25 +BEGIN + PROMPT 11 3 "" 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 + 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 "Codice localit… postale se diversa dal comune" + HELP "Sottogruppo da cui partire" END -STRING F_DENLOC 30 +STRING F_SEZFIN 2 BEGIN - PROMPT 19 9 "" - USE LCP KEY 2 SELECT S7=#F_COM - INPUT S0 F_DENLOC - DISPLAY "Località@30" S0 - DISPLAY "CAP@5" S6 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_LOCALITA + 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 "Localit… postale se diversa dal comune" + HELP "Sezione finale" END -STRING F_PROVCOM 5 +STRING F_SOTFIN 2 BEGIN - PROMPT 71 8 "" - FLAGS "D" + PROMPT 41 3 " " + COPY ALL F_SEZFIN + CHECKTYPE SEARCH + HELP "Codice sottogruppo finale" END -STRING F_CAPCOM 5 -BEGIN - PROMPT 67 9 "CAP " - FLAGS "D" +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 11 "Telefoni" + PROMPT 1 5 "Opzioni per lo sblocco" END -STRING F_TELAMB 15 +DATE F_DATA BEGIN - PROMPT 2 12 "Ambulatorio " - FIELD TELAMB + PROMPT 2 6 "Scadenza fino al " + CHECKTYPE REQUIRED + HELP "Data di riferimento per la scadenza (fino al)" END -STRING F_TELABI 15 +BOOLEAN F_DEFINITIVA BEGIN - PROMPT 40 12 "Abitazione " - FIELD TELABI + PROMPT 35 6 "Sblocco definitivo" + HELP "Se sblocco definitivo, i soggetti stampati vengono sbloccati" +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" END ENDPAGE diff --git a/at/at0900.cpp b/at/at0900.cpp new file mode 100755 index 000000000..dd9d1bc51 --- /dev/null +++ b/at/at0900.cpp @@ -0,0 +1,253 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "at0.h" +#include "atlib.h" + +#define ALIAS_TCS 200 // alias tabella tipi/esiti controlli sanitari +#define MODIFICA_ID "MI" // controllo per modificare idoneita' precedente + +// nomi campi maschera +#include "at0900a.h" + +// nomi dei campi +#include "soggetti.h" +#include "contsan.h" +#include "sezioni.h" + +class TModificaIntervalli : public TPrintapp +{ + TMask* _msk; + TRelation* _rel; + + TLocalisamfile* _contsan; + TRecord_array* _scontrolli; + + int _cur; + bool _modsi, _modaf; + int _oldsi, _oldaf, _newsi, _newaf; + TDate _data_stampa; + TString16 _codsez, _codsot; + + static bool filter_func_intervalli(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); + TModificaIntervalli() : _data_stampa(TODAY) {} +}; + +HIDDEN inline TModificaIntervalli& app() { return (TModificaIntervalli&) main_app(); } + +void TModificaIntervalli::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 TModificaIntervalli::preprocess_page(int file, int counter) +{ + TRectype& recsog = current_cursor()->curr(); + TRectype* key = new TRectype(LF_CONTSAN); + long codice = recsog.get_long(SOG_CODICE); + key->put(CON_CODICE, codice); + int err = _scontrolli->read(key); + int progcon = _scontrolli->rows()+1; + TRectype& reccon = _contsan->curr(); + reccon.zero(); + reccon.put(CON_CODICE, codice); + reccon.put(CON_PROGCON, progcon); + reccon.put(CON_DATACON, _data_stampa); + reccon.put(CON_TIPOCON, MODIFICA_ID); + reccon.put(CON_IDON1, recsog.get(SOG_IDON1)); + reccon.put(CON_IDON2, recsog.get(SOG_IDON2)); + reccon.put(CON_IDON3, recsog.get(SOG_IDON3)); + reccon.put(CON_IDON4, recsog.get(SOG_IDON4)); + if (_modsi) + reccon.put(CON_INTSI, _newsi); + else + reccon.put(CON_INTSI, recsog.get_int(SOG_INTSI)); + if (_modaf) + reccon.put(CON_INTAF, _newaf); + else + reccon.put(CON_INTAF, recsog.get_int(SOG_INTAF)); + _scontrolli->add_row(reccon); + _scontrolli->rewrite(); + con_reord(recsog, _scontrolli); + current_cursor()->file().rewrite(); + + // salto pagina se cambio sezione + const TString16 codsez = recsog.get(SOG_CODSEZ); + const TString16 codsot = recsog.get(SOG_CODSOT); + if ((_codsez!=codsez)||(_codsot!=codsot)) + { + if (_codsez != "**") + printer().formfeed(); + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } + return TRUE; +} + +void TModificaIntervalli::set_page(int file, int cnt) +{ + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######")); + set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@12g@S", FLD(LF_SOGGETTI,SOG_COGNOME)); + set_row(1,"@38g@S", FLD(LF_SOGGETTI,SOG_NOME)); + set_row(1,"@63g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); +} + +bool TModificaIntervalli::filter_func_intervalli(const TRelation* rel) +{ + bool filtrato = FALSE; + TRectype& recsog = rel->lfile().curr(); + if (app()._modsi) + filtrato = (app()._oldsi == recsog.get_int(SOG_INTSI)); + if (app()._modaf && !filtrato) + filtrato = (app()._oldaf == recsog.get_int(SOG_INTAF)); + return filtrato; +} + +void TModificaIntervalli::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 TModificaIntervalli::set_print(int) +{ + KEY tasto; + tasto = _msk->run(); + if (tasto == K_ENTER) + { + _codsez = "**"; + _codsot = "**"; + _modsi = _msk->get_bool(F_MOD_SI); + _modaf = _msk->get_bool(F_MOD_AF); + _oldsi = _msk->get_int(F_OLD_SI); + _oldaf = _msk->get_int(F_OLD_AF); + _newsi = _msk->get_int(F_NEW_SI); + _newaf = _msk->get_int(F_NEW_AF); + reset_files(); + add_file(LF_SOGGETTI); + filtra_sezioni(); + // non si puo' fare il filtro per intervalli perche' la setfilter + // non funziona bene con i campi numerici + current_cursor()->set_filterfunction(filter_func_intervalli, TRUE); + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TModificaIntervalli::crea_intestazione() +{ + reset_header(); + + TString sep(132); + sep = "MODIFICA INTERVALLI DI DONAZIONE "; + if (_modsi) + { + sep << "SI da "; + sep << _oldsi ; + sep << " a "; + sep << _newsi; + } + if (_modaf) + { + if (_modsi) + sep << " - "; + sep << "AF da "; + sep << _oldaf ; + sep << " a "; + sep << _newaf; + } + sep.center_just(); + set_header(2, "@0g%s", (const char*) sep); + TString16 data_stampa = _data_stampa.string(); + set_header(2,"@0g%10s", (const char*) data_stampa); + sep = ""; + sep << "Pag. @#"; + set_header(2, "@120g%s", (const char*) sep); + + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); + set_header(4,"@0gCod.@9gC.@12gCognome e nome@38gNato il"); + set_header(5,"@0g------@9g--@12g-------------------------@38g----------"); +} + +bool TModificaIntervalli::user_create() +{ + _msk = new TMask("at0900a"); + _rel = new TRelation(LF_SOGGETTI); + _rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT"); + _rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS); + //cursore ordinamento per sezione+sottogruppo+cognome+nome + _cur = add_cursor(new TCursor(_rel, "", 3)); + + _contsan = new TLocalisamfile(LF_CONTSAN); + _scontrolli = new TRecord_array(LF_CONTSAN, CON_PROGCON); + return TRUE; +} + +bool TModificaIntervalli::user_destroy() +{ + delete _rel; + delete _msk; + delete _contsan; + delete _scontrolli; + return TRUE; +} + +int at0900(int argc, char* argv[]) +{ + TModificaIntervalli a; + a.run(argc, argv, "Modifica intervalli di donazione"); + return 0; +} \ No newline at end of file diff --git a/at/at0900a.h b/at/at0900a.h new file mode 100755 index 000000000..5ed8288c1 --- /dev/null +++ b/at/at0900a.h @@ -0,0 +1,17 @@ +// modifica intervalli di donazione +// definizione campi per maschera di selezione + +#define F_SEZINI 101 +#define F_D_SEZINI 102 +#define F_SOTINI 103 +#define F_D_SOTINI 104 +#define F_SEZFIN 105 +#define F_D_SEZFIN 106 +#define F_SOTFIN 107 +#define F_D_SOTFIN 108 +#define F_MOD_SI 109 +#define F_OLD_SI 110 +#define F_NEW_SI 111 +#define F_MOD_AF 112 +#define F_OLD_AF 113 +#define F_NEW_AF 114 diff --git a/at/at0900a.uml b/at/at0900a.uml new file mode 100755 index 000000000..0ccd940af --- /dev/null +++ b/at/at0900a.uml @@ -0,0 +1,180 @@ +#include "at0900a.h" + +PAGE "Modifica intervalli di donazione" -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 la modifica" +END + +BOOLEAN F_MOD_SI +BEGIN + PROMPT 2 6 "Modifica intervallo SI" + HELP "Si vuole modificare l'intervallo per la donazione SI" + MESSAGE TRUE ENABLE, 1@ + MESSAGE FALSE DISABLE, 1@ +END + +NUMBER F_OLD_SI 3 +BEGIN + PROMPT 30 6 "Vecchio " + HELP "Indicare l'intervallo di donazione SI che si vuole modificare" + GROUP 1 +END + +NUMBER F_NEW_SI 3 +BEGIN + PROMPT 45 6 "Nuovo " + HELP "Indicare il nuovo intervallo di donazione SI" + GROUP 1 +END + +BOOLEAN F_MOD_AF +BEGIN + PROMPT 2 7 "Modifica intervallo AF" + HELP "Si vuole modificare l'intervallo per la donazione AF" + MESSAGE TRUE ENABLE, 2@ + MESSAGE FALSE DISABLE, 2@ +END + +NUMBER F_OLD_AF 3 +BEGIN + PROMPT 30 7 "Vecchio " + HELP "Indicare l'intervallo di donazione AF che si vuole modificare" + GROUP 2 +END + +NUMBER F_NEW_AF 3 +BEGIN + PROMPT 45 7 "Nuovo " + HELP "Indicare il nuovo intervallo di donazione AF" + GROUP 2 +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE +ENDMASK diff --git a/at/at1.cpp b/at/at1.cpp index 5b5db2d08..72ad26a6d 100755 --- a/at/at1.cpp +++ b/at/at1.cpp @@ -4,7 +4,7 @@ #include "at1.h" -#define usage "Error - usage : %s -{0|1|2|3|4|5}" +#define usage "Error - usage : %s -{0|1|2|3|4}" int main(int argc,char** argv) @@ -24,8 +24,6 @@ int main(int argc,char** argv) rt = at1400(argc,argv) ; break; case 4: rt = at1500(argc,argv) ; break; - case 5: - rt = at1600(argc,argv) ; break; default: error_box(usage, argv[0]) ; break; } diff --git a/at/at1.url b/at/at1.url index cacbcb5af..11b378af6 100755 --- a/at/at1.url +++ b/at/at1.url @@ -5,39 +5,26 @@ #include -/* at1 -0 chiusura periodica */ +/* at1 -0 proposta benemerenza */ MENU TASK_MENUBAR SUBMENU MENU_FILE "~File" - -/* at1 -1 attribuzione benemerenze */ +/* at1 -1 attribuzione automatica benemerenze */ MENUBAR MENU_BAR(1) - MENU MENU_BAR(1) SUBMENU MENU_FILE "~File" - -/* at1 -2 sblocco sospesi */ +/* at1 -2 elenco benemerenze attribuite */ MENUBAR MENU_BAR(2) - MENU MENU_BAR(2) SUBMENU MENU_FILE "~File" -/* at1 -3 stampa tessere */ +/* at1 -3 elenco benemerenze attribuite per gruppo aziendale */ MENUBAR MENU_BAR(3) - MENU MENU_BAR(3) SUBMENU MENU_FILE "~File" -/* at1 -4 modifica intervalli di donazione */ +/* at1 -4 stampa di controllo benemerenze */ MENUBAR MENU_BAR(4) - MENU MENU_BAR(4) SUBMENU MENU_FILE "~File" - -/* at1 -5 sblocco esclusi */ -MENUBAR MENU_BAR(5) - -MENU MENU_BAR(5) - SUBMENU MENU_FILE "~File" - diff --git a/at/at1100.cpp b/at/at1100.cpp index 6aa1b9c42..b2cd4a2a7 100755 --- a/at/at1100.cpp +++ b/at/at1100.cpp @@ -1,56 +1,94 @@ +#include #include #include +#include #include -#include -#include "at1.h" - -// 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" -class TChiusuraPeriodica : public TPrintapp -{ - static bool filter_func_chiusura(const TRelation* rel); +#include "at1.h" +#include "at1100a.h" - TMask* _msk; - TRelation* _rel; - int _cur; - TDate _data_chiusura; - TParagraph_string _operazione; - bool _definitiva; - -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 TMask& get_mask() { return *_msk; } - +#define ALIAS_LCP 100 +#define ALIAS_TCS 200 + +enum ts { undefined = 0, elenco = 1, etichette = 2 }; + +// definizione form per etichette +class TEti_donben_form : public TForm +{ public: - void filtra_sezioni(); - void crea_intestazione(); - TChiusuraPeriodica() : _data_chiusura(TODAY), _operazione("",30) {} + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TEti_donben_form(): TForm() {}; + TEti_donben_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TEti_donben_form() {}; }; -HIDDEN inline TChiusuraPeriodica& app() { return (TChiusuraPeriodica&) main_app(); } +class TStampaDonBen : public TPrintapp +{ + TRelation* _rel; + TMask* _msk; + TLocalisamfile* _benem; + TRecord_array* _sbenemerenze; + TEti_donben_form* _form_eti; + TAssoc_array _categorie; + int _cur; + TParagraph_string _cognome_nome; + TDate _data_stampa; + ts _tipostampa; + TString16 _codsez, _codsot; + int _numini, _numfin; + TString16 _tipoben; + bool _definitiva; + int _contatore; + int _etlarghezza, _etcolonne; -void TChiusuraPeriodica::filtra_sezioni() + static bool filter_func_donben(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_print(int file, int counter); + +public: + void crea_intestazione(); + void filtra_sezioni(); + void header_sezione(const TString16 codsez, const TString16 codsot); + void footer_sezione(); + TMask& app_mask() { return *_msk; } + TStampaDonBen() : _data_stampa(TODAY), _cognome_nome("",25) {} +}; + +HIDDEN inline TStampaDonBen& app() { return (TStampaDonBen&) main_app(); } + +TCursor* TEti_donben_form::cursor() const { return app().current_cursor(); } + +TRelation* TEti_donben_form::relation() const { return cursor()->relation(); } + +print_action TStampaDonBen::postprocess_print(int file, int counter) +{ + if (_tipostampa == elenco && _contatore > 0) + footer_sezione(); + return NEXT_PAGE; +} + +void TStampaDonBen::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); + TRectype a (LF_SOGGETTI); if (sezini.not_empty()) da.put(SOG_CODSEZ, sezini); if (sotini.not_empty()) @@ -62,172 +100,329 @@ void TChiusuraPeriodica::filtra_sezioni() current_cursor()->setregion(da, a); } - -bool TChiusuraPeriodica::preprocess_page(int file, int counter) +void TStampaDonBen::set_page(int file, int cnt) { - _operazione = "Nulla"; - - TRectype& recsez = current_cursor()->curr(LF_SEZIONI); - TRectype& recsog = current_cursor()->curr(); - TLocalisamfile& filesog = current_cursor()->file(); - - const TString16 cat_estinti = recsez.get(SEZ_CATESTI); - const TString16 cat_cancellati = recsez.get(SEZ_CATCANC); - 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 = recsog.get(SOG_CATDON); - - - if ((catsog==cat_estinti && cat_estinti.not_empty()) - || (catsog==cat_cancellati && cat_cancellati.not_empty())) - { - const int totdon = recsog.get_int(SOG_TOTDON); - if (totdon >= donemer && donemer != 0) - { - _operazione = "Passaggio a emeriti"; - if (_definitiva) - { - recsog.put(SOG_CATDON,cat_emeriti); - filesog.rewrite(); - } - } - else - { - _operazione = "Cancellato"; - if (_definitiva) - filesog.remove(); - } - } - else - { - TDate dataultdon = recsog.get(SOG_DATAULTDON); - if (dataultdon.ok()) - { - dataultdon.addyear(intesti); - if (dataultdon < _data_chiusura) - { - _operazione = "Passaggio a estinti"; - if (_definitiva) - { - recsog.put(SOG_CATDON,cat_estinti); - filesog.rewrite(); + // costruzione etichette + switch (_tipostampa) + { + case etichette: + { + TPrint_section& corpo = _form_eti->get_body(); + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); } - } + } + } + break; + case elenco: + { + if (_definitiva) + set_row(1,"@5g#a", &_cognome_nome); else - _operazione = "Non doveva essere filtrato: data ancora valida"; + { + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(2,"@0g@8,rs", FLD(LF_SOGGETTI,SOG_TESSAVIS)); + set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(2,"@9g@S", FLD(LF_SOGGETTI,SOG_CODSEZ)); + set_row(2,"@12g@S", FLD(LF_SOGGETTI,SOG_CODSOT)); + set_row(1,"@15g#a", &_cognome_nome); + set_row(2,"@15g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@41g@pn", FLD(LF_SOGGETTI,SOG_TOTDON,"###")); + set_row(1,"@45g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + set_row(2,"@48g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON)); + set_row(1,"@56g@S", FLD(LF_SOGGETTI,SOG_STATO)); + set_row(1,"@59g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSSI)); + set_row(2,"@59g@ld", FLD(LF_SOGGETTI,SOG_DATAPROSAF)); + set_row(3,""); + } + } + break; + } +} + +bool TStampaDonBen::filter_func_donben(const TRelation* rel) +{ + bool filtrato = TRUE; + TLocalisamfile& sog = rel->lfile(); + // filtro per categorie + TAssoc_array& categorie = app()._categorie; + long codice = sog.get_long(SOG_CODICE); + if (categorie.items() != 0) + { + const TString16 cat = sog.get(SOG_CATDON); + filtrato = categorie.is_key((const char*) cat); + } + // filtro per numero donazioni + if (filtrato) + { + const int totdon = sog.get_int(SOG_TOTDON); + filtrato = ((totdon >= app()._numini) && (totdon <= app()._numfin)); + } + // filtro per tipo benemerenza + if ((filtrato) && (app()._tipoben.not_empty())) + { + TLocalisamfile benem(LF_BENEM); + benem.setkey(3); + benem.zero(); + benem.put(BEN_CODICE, codice); + benem.put(BEN_TIPOBEN, app()._tipoben); + int err = benem.read(); + filtrato = (err != NOERR); + } + if (filtrato && app()._definitiva) + { + TRectype* key = new TRectype(LF_BENEM); + key->put(BEN_CODICE, codice); + int err = app()._sbenemerenze->read(key); + if (err == NOERR) + { + int r = app()._sbenemerenze->rows(); + TRectype& rec = app()._sbenemerenze->row(r+1,TRUE); + + TString16 codsez = sog.get(SOG_CODSEZ); + TString16 codsot = sog.get(SOG_CODSOT); + TString16 gruppoazie = sog.get(SOG_GRUPPOAZIE); + + rec.put(BEN_TIPOBEN, app()._tipoben); + //rec.put(BEN_DATAMAT, row.get(2)); + //rec.put(BEN_BONUS, row.get()); + TDate oggi(TODAY); + rec.put(BEN_DATABEN, oggi); + //rec.put(BEN_DATACON, row.get()); + //rec.put(BEN_RITIRATA, row.get()); + rec.put(BEN_CODSEZ, codsez); + rec.put(BEN_CODSOT, codsot); + rec.put(BEN_GRUPPOAZIE, gruppoazie); + int err = app()._sbenemerenze->rewrite(); + } + } + return filtrato; +} + +bool TStampaDonBen::preprocess_page(int file, int counter) +{ + if (_tipostampa == elenco) + { + TRectype& recsog = current_cursor()->curr(); + TString80 nome = recsog.get(SOG_COGNOME); + nome << " "; + nome << recsog.get(SOG_NOME); + _cognome_nome = nome; + // salto pagina se cambio sezione + const TString16 codsez = recsog.get(SOG_CODSEZ); + const TString16 codsot = recsog.get(SOG_CODSOT); + if ((_codsez!=codsez)||(_codsot!=codsot)) + { + if ((_codsez != "**") && (_contatore > 0)) + footer_sezione(); + _contatore = 0; + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); } else - _operazione = "Non doveva essere filtrato: data vuota"; - } + if (printer().rows_left() < 4) + printer().formfeed(); + _contatore++; + } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); return TRUE; } - -void TChiusuraPeriodica::set_page(int file, int cnt) -{ - set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); - set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); - set_row(1,"@12g@S", FLD(LF_SOGGETTI,SOG_COGNOME)); - set_row(1,"@38g@S", FLD(LF_SOGGETTI,SOG_NOME)); - set_row(1,"@65g#a", &_operazione); -} - -bool TChiusuraPeriodica::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 && cat_estinti.not_empty()) || - (catsog == cat_cancellati && cat_cancellati.not_empty())); - 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 TChiusuraPeriodica::set_print(int) +void TStampaDonBen::footer_sezione() { + reset_footer(); + TString sep(80); + sep.fill('-'); + set_footer(2, (const char *) sep); + set_footer(3,"TOTALE SOGGETTI STAMPATI %d", _contatore); + printer().formfeed(); + reset_footer(); +} + +void TStampaDonBen::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(80); + 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 TStampaDonBen::set_print(int m) +{ + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); - if (tasto == K_ENTER) - { - _definitiva = _msk->get_bool(F_DEFINITIVA); - _data_chiusura = _msk->get(F_DATA); + switch (tasto) + { + case F_ELENCO: + _tipostampa = elenco; + _codsez = "**"; + _codsot = "**"; + break; + case F_ETICHETTE: + _tipostampa = etichette; + break; + } + if (_tipostampa != undefined) + { reset_files(); add_file(LF_SOGGETTI); - filtra_sezioni(); - current_cursor()->set_filterfunction(filter_func_chiusura,TRUE); - reset_print(); - crea_intestazione(); + // filtro per sezioni selezionati + 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); + _numini = _msk->get_int(F_NUMINI); + _numfin = _msk->get_int(F_NUMFIN); + _tipoben = _msk->get(F_TIPOBEN); + _definitiva = _msk->get_bool(F_DEFINITIVA); + if (_definitiva) + _cognome_nome.set_width(60); + current_cursor()->set_filterfunction(filter_func_donben); + reset_print(); + crea_intestazione(); return TRUE; } else return FALSE; } - -void TChiusuraPeriodica::crea_intestazione() +void TStampaDonBen::crea_intestazione() { - reset_header(); - - TString sep(132); - TString16 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); - - if (_definitiva) - set_header(2,"@0gCHIUSURA PERIODICA - DEFINITIVA - ALLA DATA"); - else - set_header(2,"@0gCHIUSURA PERIODICA - PROVVISORIA - ALLA DATA"); - data_stampa = _data_chiusura.string(); - set_header(2,"@47g%10s", (const char*) data_stampa); - sep = ""; - sep.fill('-'); - set_header(3, (const char *) sep); + if (_tipostampa == elenco) + { + if (_definitiva) + { + TString sep(80); + sep = "BENEMERENZA "; + TString80 benem = _msk->get(F_D_TIPOBEN); + sep << benem; + 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, "@72g%s", (const char*) sep); + sep = ""; + set_header(3, (const char *) sep); + } + else + { + TString sep(80); + sep = "ELENCO SOGGETTI CHE HANNO DA "; + sep << format("%i A %i DONAZIONI",_numini,_numfin); + 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, "@72g%s", (const char*) sep); + if (_tipoben.not_empty()) + { + sep = "CHE NON HANNO LA BENEMERENZA "; + sep << _tipoben; + sep << " "; + TString80 benem = _msk->get(F_D_TIPOBEN); + sep << benem; + sep.center_just(); + set_header(3, "@0g%s", (const char*) sep); + } + sep = ""; + sep.fill('-'); + set_header(4, (const char *) sep); + set_header(5,"@0gCodice@9gCat.@15gCognome e nome@41gDon@45gData ult.@56gSt@59gData pr.SI"); + set_header(6,"@0gTessera@9gSe/So@15gData di nascita@45gTipo ult.@59gData pr.AF"); + set_header(7,"@0g--------@9g-----@15g-------------------------@41g---@45g----------@56g--@59g----------"); + } + printer().footerlen(3); + } } -bool TChiusuraPeriodica::user_create() +bool TStampaDonBen::user_create() { - _msk = new TMask("at1100a"); - _rel = new TRelation(LF_SOGGETTI); - _rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT"); - //cursore ordinamento per sezione+sottogruppo+cognome+nome + _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"); + _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); _cur = add_cursor(new TCursor(_rel, "", 3)); - return TRUE; -} + _msk = new TMask("at1100a"); + _benem = new TLocalisamfile(LF_BENEM); + _sbenemerenze = new TRecord_array(LF_BENEM,BEN_PROGBEN); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TEti_donben_form(etformato); + return TRUE; +} -bool TChiusuraPeriodica::user_destroy() +bool TStampaDonBen::user_destroy() { - delete _rel; - delete _msk; - return TRUE; + delete _msk; + delete _rel; + delete _form_eti; + delete _benem; + delete _sbenemerenze; + return TRUE; } int at1100(int argc, char* argv[]) { - TChiusuraPeriodica a; - a.run(argc, argv, "Chiusura periodica"); - return 0; -} \ No newline at end of file + TStampaDonBen a; + a.run(argc, argv, "Proposta benemerenza"); + return 0; +} diff --git a/at/at1100a.h b/at/at1100a.h index d8e1f31a7..50d68a753 100755 --- a/at/at1100a.h +++ b/at/at1100a.h @@ -1,4 +1,4 @@ -// chiusura periodica +// stampa elenco soggetti per numero donazioni e benemerenze // definizione campi per maschera di selezione #define F_SEZINI 101 @@ -9,5 +9,25 @@ #define F_D_SEZFIN 106 #define F_SOTFIN 107 #define F_D_SOTFIN 108 -#define F_DATA 109 -#define F_DEFINITIVA 110 + +#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_NUMINI 301 +#define F_NUMFIN 302 +#define F_TIPOBEN 303 +#define F_D_TIPOBEN 304 +#define F_DEFINITIVA 305 + +#define F_ELENCO 401 +#define F_ETICHETTE 402 diff --git a/at/at1100a.uml b/at/at1100a.uml index 12ac604e8..100fb7259 100755 --- a/at/at1100a.uml +++ b/at/at1100a.uml @@ -1,6 +1,6 @@ #include "at1100a.h" -PAGE "Chiusura Periodica" -1 -1 78 12 +PAGE "Stampa soggetti proposti per benemerenze" -1 -1 78 20 GROUPBOX DLG_NULL 77 4 BEGIN @@ -117,32 +117,195 @@ BEGIN HELP "Sottogruppo finale" END -GROUPBOX DLG_NULL 77 3 +GROUPBOX DLG_NULL 77 5 BEGIN - PROMPT 1 6 "Opzioni per la chiusura" + PROMPT 1 5 "Categorie" END -DATE F_DATA + +STRING F_CAT1 2 BEGIN - PROMPT 2 7 "Data di riferimento " - CHECKTYPE REQUIRED - HELP "Data di riferimento per i conteggi di chiusura" + 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 5 +BEGIN + PROMPT 1 10 "Selezioni per la stampa" +END + +NUMBER F_NUMINI 3 +BEGIN + PROMPT 2 11 "Numero donazioni effettuate: da " +END + +NUMBER F_NUMFIN 3 +BEGIN + PROMPT 40 11 "a " +END + +STRING F_TIPOBEN 2 +BEGIN + PROMPT 2 12 "Benemerenza non ricevuta " + 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 NORMAL + WARNING "Codice non presente" + HELP "Tipo benemerenza" +END + +STRING F_D_TIPOBEN 30 +BEGIN + PROMPT 40 12 "" + FLAGS "D" END BOOLEAN F_DEFINITIVA BEGIN - PROMPT 43 7 "Chiusura definitiva" - HELP "Se chiusura definitiva, le operazioni stampate verranno registrate" + PROMPT 2 13 "Attribuzione definitiva" END -BUTTON DLG_OK 9 2 +GROUPBOX DLG_NULL 77 4 BEGIN - PROMPT -12 10 "" + PROMPT 1 15 "Stampa" +END + +BUTTON F_ELENCO 9 2 +BEGIN + PROMPT -13 16 "Elenco" + MESSAGE EXIT,F_ELENCO +END + +BUTTON F_ETICHETTE 9 2 +BEGIN + PROMPT -23 16 "Etichette" + MESSAGE EXIT,F_ETICHETTE END BUTTON DLG_QUIT 9 2 BEGIN - PROMPT -22 10 "" + PROMPT -33 16 "" END + ENDPAGE ENDMASK diff --git a/at/at1200.cpp b/at/at1200.cpp index ef225dbaf..2cf68b281 100755 --- a/at/at1200.cpp +++ b/at/at1200.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include "at1.h" @@ -15,7 +14,9 @@ #include "soggetti.h" #include "donaz.h" #include "benem.h" -#include "sezioni.h" +#include "sezioni.h" + +#define ALIAS_GAZ 300 class TAttribuzioneBenemerenze : public TPrintapp { @@ -25,13 +26,17 @@ class TAttribuzioneBenemerenze : public TPrintapp TLocalisamfile* _benem; TRecord_array* _sdonazioni; TRecord_array* _sbenemerenze; - int _cur; - TDate _data_attribuzione; // data attribuzione benemerenza - TDate _data_stampa; + TAssoc_array _catdon; + TString16 _gruppoazie, _gruppoold; + TDate _dataela, _datapre; + bool _anchegruppi; TString16 _tipoben; // tipo benemerenza da assegnare + bool _definitiva; int _numdon; // numero donazioni necessarie + TDate _data_stampa; TString16 _codsez, _codsot; TParagraph_string _cognome_nome; + int _contatore; static bool filter_func_attriben(const TRelation* rel); @@ -43,33 +48,13 @@ protected: virtual bool preprocess_page(int file, int counter); public: - void filtra_sezioni(); void crea_intestazione(); void header_sezione(const TString16 codsez, const TString16 codsot); - TAttribuzioneBenemerenze() : _data_attribuzione(TODAY), _data_stampa(TODAY), _tipoben(""), _cognome_nome("",25) {} + TAttribuzioneBenemerenze() : _data_stampa(TODAY), _cognome_nome("",25) {} }; HIDDEN inline TAttribuzioneBenemerenze& app() { return (TAttribuzioneBenemerenze&) main_app(); } -void TAttribuzioneBenemerenze::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 TAttribuzioneBenemerenze::preprocess_page(int file, int counter) { TRectype& recsez = current_cursor()->curr(LF_SEZIONI); @@ -151,18 +136,64 @@ bool TAttribuzioneBenemerenze::set_print(int) if (tasto == K_ENTER) { _codsez = "**"; - _codsot = "**"; - _data_attribuzione = _msk->get(F_DATA); + _codsot = "**"; + _gruppoold = "**"; + _contatore = 0; + TString80 chiave = ""; + _dataela = _msk->get(F_DATAELA); + _datapre = _msk->get(F_DATAPRE); + _gruppoazie = _msk->get(F_GRUPPOAZIE); + _anchegruppi = _msk->get_bool(F_ANCHEGRUPPI); _tipoben = _msk->get(F_TIPOBEN); - TTable bnz("BNZ"); - bnz.put("CODTAB",(const char*) _tipoben); - if (bnz.read() == NOERR) - _numdon = bnz.get_int("I0"); + _definitiva = _msk->get_bool(F_DEFINITIVA); + if (_gruppoazie.not_empty()) + chiave << "90->GRUPPOAZIE|UPPER(90->COGNOME)|UPPER(90->NOME)"; else - return FALSE; + chiave = "90->CODSEZ|90->CODSOT|UPPER(90->COGNOME)|UPPER(90->NOME)"; + TString80 filtro = ""; + if (_gruppoazie.not_empty()) + filtro.format("(90->GRUPPOAZIE == \"%s\")",(const char*)_gruppoazie); + else + if (!_anchegruppi) + filtro.format("(90->GRUPPOAZIE == \"\")"); + // filtro per 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); + current_cursor()->setfilter(filtro, TRUE); + ((TSorted_cursor*)current_cursor())->change_order(chiave); reset_files(); add_file(LF_SOGGETTI); - filtra_sezioni(); + const TString16 catpri = _msk->get(F_CAT1); + const TString16 catsec = _msk->get(F_CAT2); + const TString16 catter = _msk->get(F_CAT3); + const TString16 catqua = _msk->get(F_CAT4); + const TString16 catqui = _msk->get(F_CAT5); + const TString16 catses = _msk->get(F_CAT6); + if (catpri.not_empty() && catpri.ok()) + _catdon.add((const char*) catpri); + if (catsec.not_empty() && catsec.ok()) + _catdon.add((const char*) catsec); + if (catter.not_empty() && catter.ok()) + _catdon.add((const char*) catter); + if (catqua.not_empty() && catqua.ok()) + _catdon.add((const char*) catqua); + if (catqui.not_empty() && catqui.ok()) + _catdon.add((const char*) catqui); + if (catses.not_empty() && catses.ok()) + _catdon.add((const char*) catses); current_cursor()->setfilter("TOTDON!=0"); current_cursor()->set_filterfunction(filter_func_attriben,TRUE); reset_print(); @@ -173,7 +204,6 @@ bool TAttribuzioneBenemerenze::set_print(int) return FALSE; } - void TAttribuzioneBenemerenze::crea_intestazione() { reset_header(); @@ -185,7 +215,7 @@ void TAttribuzioneBenemerenze::crea_intestazione() sep << " "; sep << descr; sep << " ALLA DATA "; - TString16 data_stampa = _data_attribuzione.string(); + TString16 data_stampa = _dataela.string(); sep << data_stampa; sep.center_just(); set_header(2, "@0g%s", (const char*) sep); @@ -207,8 +237,8 @@ bool TAttribuzioneBenemerenze::user_create() _msk = new TMask("at1200a"); _rel = new TRelation(LF_SOGGETTI); _rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT"); - //cursore ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); + _rel->add("GAZ", "CODTAB==GRUPPOAZIE",1,0,ALIAS_GAZ); + add_cursor(new TSorted_cursor(_rel,"SOG_CODSEZ","",3)); _donaz = new TLocalisamfile(LF_DONAZ); _benem = new TLocalisamfile(LF_BENEM); _sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON); diff --git a/at/at1200a.h b/at/at1200a.h index a9eb0090e..f502d934e 100755 --- a/at/at1200a.h +++ b/at/at1200a.h @@ -1,14 +1,33 @@ // attribuzione benemerenze // 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_TIPOBEN 110 -#define F_D_TIPOBEN 111 +#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_DATAELA 109 +#define F_DATAPRE 110 +#define F_GRUPPOAZIE 111 +#define F_D_GRUPPOAZIE 112 +#define F_ANCHEGRUPPI 113 +#define F_TIPOBEN 114 +#define F_D_TIPOBEN 115 +#define F_DEFINITIVA 116 diff --git a/at/at1200a.uml b/at/at1200a.uml index 59b913492..afc7cad82 100755 --- a/at/at1200a.uml +++ b/at/at1200a.uml @@ -1,15 +1,28 @@ #include "at1200a.h" -PAGE "Attribuzione benemerenze" -1 -1 78 10 +TOOLBAR "" 0 20 0 2 + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" +END +ENDPAGE // FINE TOOLBAR + +PAGE "Attribuzione benemerenze" -1 -1 78 18 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 +41,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 +56,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 +64,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 +77,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 +96,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 +111,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 +119,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 @@ -117,16 +130,187 @@ BEGIN HELP "Sottogruppo finale" END -DATE F_DATA +GROUPBOX DLG_NULL 77 5 BEGIN - PROMPT 2 5 "Data attribuzione " + PROMPT 1 4 "Categorie donatori" +END + +STRING F_CAT1 2 +BEGIN + PROMPT 2 5 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT1 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_CAT1 CODTAB + OUTPUT F_D_CAT1 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT1 30 +BEGIN + PROMPT 8 5 "" + FLAGS "D" +END + +STRING F_CAT2 2 +BEGIN + PROMPT 2 6 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT2 + COPY DISPLAY F_CAT1 + OUTPUT F_CAT2 CODTAB + OUTPUT F_D_CAT2 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT2 30 +BEGIN + PROMPT 8 6 "" + FLAGS "D" +END + +STRING F_CAT3 2 +BEGIN + PROMPT 2 7 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT3 + COPY DISPLAY F_CAT1 + OUTPUT F_CAT3 CODTAB + OUTPUT F_D_CAT3 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT3 30 +BEGIN + PROMPT 8 7 "" + FLAGS "D" +END + +STRING F_CAT4 2 +BEGIN + PROMPT 40 5 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT4 + COPY DISPLAY F_CAT1 + OUTPUT F_CAT4 CODTAB + OUTPUT F_D_CAT4 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT4 30 +BEGIN + PROMPT 46 5 "" + FLAGS "D" +END + +STRING F_CAT5 2 +BEGIN + PROMPT 40 6 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT5 + COPY DISPLAY F_CAT1 + OUTPUT F_CAT5 CODTAB + OUTPUT F_D_CAT5 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT5 30 +BEGIN + PROMPT 46 6 "" + FLAGS "D" +END + +STRING F_CAT6 2 +BEGIN + PROMPT 40 7 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT6 + COPY DISPLAY F_CAT1 + OUTPUT F_CAT6 CODTAB + OUTPUT F_D_CAT6 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT6 30 +BEGIN + PROMPT 46 7 "" + FLAGS "D" +END + +GROUPBOX DLG_NULL 77 8 +BEGIN + PROMPT 1 9 "Opzioni per l'attribuzione" +END + +DATE F_DATAELA +BEGIN + PROMPT 2 10 "Data elaborazione " CHECKTYPE REQUIRED HELP "Data di riferimento per l'attribuzione delle benemerenze" END +DATE F_DATAPRE +BEGIN + PROMPT 2 11 "Data prevista consegna " + HELP "Data di prevista consegna" +END + +STRING F_GRUPPOAZIE 4 +BEGIN + PROMPT 2 12 "Gruppo az. che attribuisce " + FLAGS "U" + USE GAZ + INPUT CODTAB F_GRUPPOAZIE + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_GRUPPOAZIE CODTAB + OUTPUT F_D_GRUPPOAZIE S0 + CHECKTYPE NORMAL + WARNING "Codice gruppo aziendale non presente" + HELP "Gruppo aziendale di appartenenza" +END + +STRING F_D_GRUPPOAZIE 30 +BEGIN + PROMPT 37 12 "" + FLAGS "U" + USE GAZ KEY 2 + INPUT S0 F_D_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 + +BOOLEAN F_ANCHEGRUPPI +BEGIN + PROMPT 2 13 "Includi soggetti appartenenti a gruppi aziendali" +END + STRING F_TIPOBEN 2 BEGIN - PROMPT 2 6 "Benemerenza " + PROMPT 2 14 "Benemerenza da attribuire " FLAGS "U" USE BNZ INPUT CODTAB F_TIPOBEN @@ -142,18 +326,14 @@ END STRING F_D_TIPOBEN 25 BEGIN - PROMPT 26 6 "" + PROMPT 35 14 "" FLAGS "D" END -BUTTON DLG_OK 9 2 +BOOLEAN F_DEFINITIVA BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_QUIT 9 2 -BEGIN - PROMPT -22 -1 "" + PROMPT 2 15 "Attribuzione definitiva" + HELP "Se attribuzione definitiva, le benemerenze stampate verranno registrate" END ENDPAGE diff --git a/at/at1300.cpp b/at/at1300.cpp index 850edf619..35731d281 100755 --- a/at/at1300.cpp +++ b/at/at1300.cpp @@ -1,286 +1,217 @@ #include #include #include -#include -#include #include -#include + +#include "benem.h" +#include "soggetti.h" +#include "sezioni.h" +#include #include "at1.h" -#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 TSbloccoSospesi : public TPrintapp +#define ALIAS_BNZ 600 + +#define ALIAS_LCPRES 101 // localita' postale di residenza +#define ALIAS_LCPDOM 100 // localita' postale di domicilio +#define ALIAS_COMRES 502 // comune di residenza +#define ALIAS_COMDOM 501 // comune di domicilio +#define ALIAS_COMNAS 500 // comune di nascita + +class TStampaBenemerenze : 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; - bool _definitiva; - TParagraph_string _cognome_nome; - TString16 _finesospensione; - - static bool filter_func_sbloccosospesi(const TRelation* rel); - + TRelation* _rel; + TMask* _msk; + int _counter; + int _cur; + TDate _dataini, _datafin; + TString16 _codsez, _codsot; + bool _stampa80; + TParagraph_string _cognome_nome, _dencom; + TString16 _tipoold; + int _contatore; + 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 print_action postprocess_print(int file, int counter); + public: - void filtra_sezioni(); void crea_intestazione(); - void header_sezione(const TString16 codsez, const TString16 codsot); - TSbloccoSospesi() : _data_sblocco(TODAY), _data_stampa(TODAY), _tiposo(""), _cognome_nome("",25) {} + void header_ben(const TString16 tipoben); + void footer_ben(); + TMask& app_mask() { return *_msk; } + TStampaBenemerenze() : _cognome_nome("",35), _dencom("",50) {} }; -HIDDEN inline TSbloccoSospesi& app() { return (TSbloccoSospesi&) main_app(); } +HIDDEN inline TStampaBenemerenze& app() { return (TStampaBenemerenze&) main_app(); } -HIDDEN bool printer_handler(TMask_field& f, KEY k) -{ - if (k == K_SPACE) - { - TMask& m = f.mask(); - if (!m.query_mode()) - { - TString16 config; - config << "SBLOCCOSO"; - - TPrinter& p = printer(); - p.set_printtype(normprinter); // Force configuration update - p.read_configuration(config); - if (p.set()) - f.message_box("Stampante configurata per sblocco sospesi"); - } - } - return TRUE; +print_action TStampaBenemerenze::postprocess_print(int file, int counter) +{ + if (_contatore > 0) + footer_ben(); + return NEXT_PAGE; } -void TSbloccoSospesi::filtra_sezioni() +void TStampaBenemerenze::footer_ben() { - 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 TSbloccoSospesi::preprocess_page(int file, int counter) -{ - TRectype& recsog = current_cursor()->curr(); - TString80 nome = recsog.get(SOG_COGNOME); - nome << " "; - nome << recsog.get(SOG_NOME); - _cognome_nome = nome; - if (_definitiva) - { - 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 = recsog.get(SOG_CODSEZ); - const TString16 codsot = recsog.get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) - { - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - header_sezione(codsez, codsot); - } - return TRUE; + // stampa totale benemerenze + reset_footer(); + TString sep(80); + sep.fill('-'); + set_footer(2, (const char *) sep); + set_footer(3,"TOTALE SOGGETTI STAMPATI %d", _contatore); + printer().formfeed(); + reset_footer(); } -void TSbloccoSospesi::set_page(int file, int cnt) -{ +void TStampaBenemerenze::set_page(int file, int cnt) +{ set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); set_row(1,"@12g#a", &_cognome_nome); set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); - set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS)); - set_row(1,"@57g@S", FLD(LF_SOGGETTI,SOG_PROS_STATO)); - set_row(1,"@68g@S", FLD(LF_SOGGETTI,SOG_STATO)); - set_row(1,"@80g@ld", FLD(LF_SOGGETTI,SOG_DATA_PROS)); + set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); + set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(2,"@49g#a", &_dencom); + set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT)); } -bool TSbloccoSospesi::filter_func_sbloccosospesi(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.ok()) && (datafine <= app()._data_sblocco); - } - } - } - } - return filtrato; -} - -void TSbloccoSospesi::header_sezione(const TString16 codsez, const TString16 codsot) +bool TStampaBenemerenze::preprocess_page(int file, int counter) { - const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); - const TString80 densot = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSOT); - TString intestazione(100); - intestazione = "Sezione: "; - intestazione << codsez; - intestazione << "/"; - intestazione << codsot; - intestazione << " "; - intestazione << densez; - if ((densot.ok())&& (densot.not_empty())) + TString80 nome = current_cursor()->curr(LF_SOGGETTI).get(SOG_COGNOME); + nome << " "; + nome << current_cursor()->curr(LF_SOGGETTI).get(SOG_NOME); + _cognome_nome = nome; + TString256 localita = ""; + localita << current_cursor()->curr(-ALIAS_LCPDOM).get("S6"); + if (localita.not_empty() && localita.ok()) { - intestazione << "/"; - intestazione << densot; - } - intestazione.center_just(); - set_header(1,"@0g%s", (const char*) intestazione); + 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 punto di rottura + TString16 tiponew = current_cursor()->curr().get(BEN_TIPOBEN); + if (tiponew != _tipoold ) + { + if (_tipoold != "**") + footer_ben(); + _contatore = 0; + _tipoold = tiponew; + header_ben(tiponew); + } + else + if (printer().rows_left() < 4) + printer().formfeed(); + _contatore++; + return TRUE; +} + +void TStampaBenemerenze::header_ben(const TString16 tipoben) +{ + TString intestazione(132); + intestazione = "BENEMERENZA "; + intestazione << tipoben; + intestazione << " "; + intestazione << current_cursor()->curr(-ALIAS_BNZ).get("S0"); + intestazione.center_just(132); + set_header(2,"@0g%s", (const char*) intestazione); return; } -bool TSbloccoSospesi::set_print(int) -{ +bool TStampaBenemerenze::set_print(int m) +{ KEY tasto; - tasto = _msk->run(); - if (tasto == K_ENTER) - { - _codsez = "**"; - _codsot = "**"; - _data_sblocco = _msk->get(F_DATA); - _tiposo = _msk->get(F_TIPO); - _definitiva = _msk->get_bool(F_DEFINITIVA); - 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_sbloccosospesi,TRUE); - reset_print(); - crea_intestazione(); - return TRUE; - } - else - return FALSE; + tasto = _msk->run(); + if (tasto == K_ENTER) + { + _dataini = _msk->get_date(F_DATAINI); + _datafin = _msk->get_date(F_DATAFIN); + TRectype da(LF_BENEM); + TRectype a (LF_BENEM); + if (_dataini.ok()) + da.put(BEN_DATABEN, _dataini); + if (_datafin.ok()) + a.put(BEN_DATABEN, _datafin); + TString80 chiave = "94->TIPOBEN|UPPER(90->COGNOME)|UPPER(90->NOME)"; + _cur = add_cursor(new TSorted_cursor(_rel, (const char*) chiave, "", 2, &da, &a)); + TString80 filtro = ""; + current_cursor()->setfilter((const char*) filtro, TRUE); + _counter = 0; + _tipoold = "**"; + reset_files(); + add_file(LF_BENEM); + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; } -void TSbloccoSospesi::crea_intestazione() +void TStampaBenemerenze::crea_intestazione() { - reset_header(); - - TString sep(100); - if (_definitiva) - sep = "SBLOCCO DEFINITIVO SOSPESI "; - else - sep = "STAMPA PROVVISORIA PER 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, "@88g%s", (const char*) sep); - - sep = ""; - sep.fill('-'); - set_header(3, (const char *) sep); - set_header(4,"@0gCod.@9gC.@12gCognome e nome@38gNato il@49gTessera@57gStato att.@68gStato prec.@80gScadenza"); - set_header(5,"@0g------@9g--@12g-------------------------@38g----------@49g-------@57g----------@68g-----------@80g----------"); + reset_header(); + TString sep(132); + sep = "STAMPA BENEMERENZE ATTRIBUITE dal "; + sep << _dataini; + sep << " al "; + sep << _datafin; + sep.center_just(132); + set_header(1,"@0g%s", (const char*) sep); + sep = "Pag. @#"; + set_header(1, "@110g%s", (const char*) sep); + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); + set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro"); + set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro"); + set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------"); + printer().footerlen(3); } -bool TSbloccoSospesi::user_create() +bool TStampaBenemerenze::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); - //cursore ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); - _msk->set_handler(F_PRINTER, printer_handler); - _contsan = new TLocalisamfile(LF_CONTSAN); - _scontrolli = new TRecord_array(LF_CONTSAN, CON_PROGCON); - TString16 config; - config << "SBLOCCOSO"; - printer().read_configuration(config); - return TRUE; -} + _rel = new TRelation(LF_BENEM); + _rel->add(LF_SOGGETTI, "CODICE==CODICE"); + _rel->add("BNZ", "CODTAB==TIPOBEN",1,0,ALIAS_BNZ); + _rel->add("LCP", "CODTAB==RES_CODLOC",1,LF_SOGGETTI,ALIAS_LCPRES); + _rel->add("LCP", "CODTAB==DOM_CODLOC",1,LF_SOGGETTI,ALIAS_LCPDOM); + _rel->add(LF_COMUNI, "COM==RES_CODCOM",1,LF_SOGGETTI,ALIAS_COMRES); + _rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,LF_SOGGETTI,ALIAS_COMDOM); + _rel->add(LF_COMUNI, "COM==COMNASC",1,LF_SOGGETTI,ALIAS_COMNAS); + + _msk = new TMask("at1300a"); + TConfig config(CONFIG_STUDIO); + _stampa80 = config.get_bool("Stampa80"); + return TRUE; +} -bool TSbloccoSospesi::user_destroy() +bool TStampaBenemerenze::user_destroy() { - delete _rel; - delete _msk; - delete _contsan; - delete _scontrolli; - printer().read_configuration(); - return TRUE; + delete _msk; + delete _rel; + return TRUE; } int at1300(int argc, char* argv[]) { - TSbloccoSospesi a; - a.run(argc, argv, "Sblocco sospesi"); - return 0; -} \ No newline at end of file + TStampaBenemerenze a; + a.run(argc, argv, "Stampa benemerenze attribuite"); + return 0; +} diff --git a/at/at1300a.h b/at/at1300a.h index 85708adb5..b79d8f673 100755 --- a/at/at1300a.h +++ b/at/at1300a.h @@ -1,16 +1,13 @@ -// sblocco sospesi +// stampa di controllo benemerenze // 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 -#define F_DEFINITIVA 112 -#define F_PRINTER 113 +#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/at1300a.uml b/at/at1300a.uml index 1d815d309..e17200086 100755 --- a/at/at1300a.uml +++ b/at/at1300a.uml @@ -1,15 +1,15 @@ #include "at1300a.h" -PAGE "Sblocco sospesi" -1 -1 78 11 +PAGE "Stampa di controllo benemerenze" -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 @@ -117,59 +117,29 @@ BEGIN HELP "Sottogruppo finale" END -GROUPBOX DLG_NULL 77 5 +GROUPBOX DLG_NULL 77 3 BEGIN - PROMPT 1 5 "Opzioni per lo sblocco" + PROMPT 1 5 "Selezioni dati per la stampa" END -DATE F_DATA +DATA F_DATAINI BEGIN - PROMPT 2 6 "Scadenza fino al " - CHECKTYPE REQUIRED - HELP "Data di riferimento per la scadenza (fino al)" + PROMPT 2 6 "Benemerenze dal " END -STRING F_TIPO 2 +DATA F_DATAFIN 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 - -BOOLEAN F_DEFINITIVA -BEGIN - PROMPT 2 8 "Sblocco definitivo" - HELP "Se sblocco definitivo, i soggetti stampati vengono sbloccati" + PROMPT 30 6 "al " END BUTTON DLG_OK 9 2 BEGIN - PROMPT -13 -1 "" + PROMPT -12 -1 "" END -BUTTON F_PRINTER 19 2 -BEGIN - PROMPT -23 -1 "Imposta stampante" -END - - BUTTON DLG_QUIT 9 2 BEGIN - PROMPT -33 -1 "" + PROMPT -22 -1 "" END ENDPAGE diff --git a/at/at1400.cpp b/at/at1400.cpp index 2df1065a3..ec35a228b 100755 --- a/at/at1400.cpp +++ b/at/at1400.cpp @@ -1,55 +1,36 @@ -//#include +#include #include -#include #include #include -#include +#include "benem.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 TStampaTessere : public TPrintapp -{ - TRelation* _rel; - TMask* _msk; - TAssoc_array _categorie; - //TTessere_form* _form_pag; - TAssoc_array _asoggetti; - int _numdon; - bool _aggiorna; - int _cur; - TDate _data_stampa; - TString _riepilogodon; +#define ALIAS_BNZ 600 +#define ALIAS_GAZ 300 - static bool filter_func_auto(const TRelation* rel); - static bool filter_func_manuale(const TRelation* rel); +#define ALIAS_LCPRES 101 // localita' postale di residenza +#define ALIAS_LCPDOM 100 // localita' postale di domicilio +#define ALIAS_COMRES 502 // comune di residenza +#define ALIAS_COMDOM 501 // comune di domicilio +#define ALIAS_COMNAS 500 // comune di nascita + +class TStampaBenxGAz : public TPrintapp +{ + TRelation* _rel; + TMask* _msk; + int _cur; + TDate _dataini, _datafin; + TString16 _codsez, _codsot; + bool _stampa80; + TParagraph_string _cognome_nome, _dencom; + TString16 _gruppoazie, _gruppoold, _tipoold; + int _contatore; protected: virtual bool user_create(); @@ -57,276 +38,197 @@ protected: 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); + virtual print_action postprocess_print(int file, int counter); public: - void filtra_sezioni(); - void filtra_codici(); + void crea_intestazione(); + void header_gruppo(const TString16 gruppo); + void footer_gruppo(); TMask& app_mask() { return *_msk; } - TStampaTessere() : _data_stampa(TODAY), _riepilogodon(50) {} + TStampaBenxGAz() : _cognome_nome("",35), _dencom("",50) {} }; -HIDDEN inline TStampaTessere& app() { return (TStampaTessere&) main_app(); } +HIDDEN inline TStampaBenxGAz& app() { return (TStampaBenxGAz&) 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 TStampaTessere::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 TStampaTessere::filtra_sezioni() -{ - const TString16 sezini = _msk->get(F_SEZINI); - const TString16 sotini = _msk->get(F_SOTINI); - const TString16 sezfin = _msk->get(F_SEZFIN); - const TString16 sotfin = _msk->get(F_SOTFIN); - TRectype da(LF_SOGGETTI); - TRectype a(LF_SOGGETTI); - if (sezini.not_empty()) - da.put(SOG_CODSEZ, sezini); - if (sotini.not_empty()) - da.put(SOG_CODSOT, sotini); - if (sezfin.not_empty()) - a.put(SOG_CODSEZ, sezfin); - if (sotfin.not_empty()) - a.put(SOG_CODSOT, sotfin); - current_cursor()->setregion(da, a); -} - -void TStampaTessere::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 TStampaTessere::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 TStampaTessere::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 TStampaTessere::postprocess_page(int file, int counter) -{ - printer().formfeed(); +print_action TStampaBenxGAz::postprocess_print(int file, int counter) +{ + if (_contatore > 0) + footer_gruppo(); return NEXT_PAGE; } -bool TStampaTessere::preprocess_page(int file, int counter) +void TStampaBenxGAz::footer_gruppo() { - 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) + // stampa totale benemerenze attribuite al gruppo + reset_footer(); + TString sep(80); + sep.fill('-'); + set_footer(2, (const char *) sep); + set_footer(3,"TOTALE SOGGETTI STAMPATI %d", _contatore); + printer().formfeed(); + reset_footer(); +} + +void TStampaBenxGAz::set_page(int file, int cnt) +{ + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@12g#a", &_cognome_nome); + set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); + set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(2,"@49g#a", &_dencom); + set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT)); +} + +bool TStampaBenxGAz::preprocess_page(int file, int counter) +{ + TString80 nome = current_cursor()->curr(LF_SOGGETTI).get(SOG_COGNOME); + nome << " "; + nome << current_cursor()->curr(LF_SOGGETTI).get(SOG_NOME); + _cognome_nome = nome; + TString256 localita = ""; + localita << current_cursor()->curr(-ALIAS_LCPDOM).get("S6"); + if (localita.not_empty() && localita.ok()) { - sogg.put(SOG_T_STAMPATA,TRUE); - sogg.rewrite(); - } + 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 punto di rottura + TString16 grupponew = current_cursor()->curr(LF_SOGGETTI).get(SOG_GRUPPOAZIE); + if (grupponew != _gruppoold ) + { + if (_gruppoold != "**") + footer_gruppo(); + _contatore = 0; + _gruppoold = grupponew; + header_gruppo(grupponew); + _tipoold = "**"; + } + TString16 tiponew = current_cursor()->curr().get(BEN_TIPOBEN); + if (tiponew != _tipoold) + { + TPrintrow riga; + printer().print(riga); + riga.reset(); + riga.put(current_cursor()->curr(-ALIAS_BNZ).get("S0")); + _tipoold = tiponew; + if (printer().rows_left() < 3) + printer().formfeed(); + printer().print(riga); + } + if (printer().rows_left() < 4) + printer().formfeed(); + _contatore++; return TRUE; } -bool TStampaTessere::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,50); - 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 TStampaTessere::user_create() +void TStampaBenxGAz::header_gruppo(const TString16 gruppo) { - _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); - //cursore ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); + TString intestazione(132); + intestazione = "GRUPPO AZIENDALE "; + intestazione << gruppo; + intestazione << " - "; + intestazione << current_cursor()->curr(-ALIAS_GAZ).get("S0"); + intestazione.center_just(132); + set_header(2,"@0g%s", (const char*) intestazione); + return; +} + +bool TStampaBenxGAz::set_print(int m) +{ + KEY tasto; + tasto = _msk->run(); + if (tasto == K_ENTER) + { + _dataini = _msk->get_date(F_DATAINI); + _datafin = _msk->get_date(F_DATAFIN); + _gruppoazie = _msk->get(F_GRUPPOAZIE); + TRectype da(LF_BENEM); + TRectype a (LF_BENEM); + if (_dataini.ok()) + da.put(BEN_DATABEN, _dataini); + if (_datafin.ok()) + a.put(BEN_DATABEN, _datafin); + TString80 chiave = "90->GRUPPOAZIE|94->TIPOBEN|UPPER(90->COGNOME)|UPPER(90->NOME)"; + _cur = add_cursor(new TSorted_cursor(_rel, (const char*) chiave, "", 2, &da, &a)); + TString80 filtro = ""; + if (_gruppoazie.not_empty()) + filtro = format("(90->GRUPPOAZIE == \"%s\")",(const char*)_gruppoazie); + current_cursor()->setfilter((const char*) filtro, TRUE); + _contatore = 0; + _gruppoold = "**"; + _tipoold = "**"; + reset_files(); + add_file(LF_BENEM); + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TStampaBenxGAz::crea_intestazione() +{ + reset_header(); + TString sep(132); + sep = "STAMPA BENEMERENZE ATTRIBUITE dal "; + sep << _dataini; + sep << " al "; + sep << _datafin; + sep.center_just(132); + set_header(1,"@0g%s", (const char*) sep); + sep = "Pag. @#"; + set_header(1, "@110g%s", (const char*) sep); + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); + set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro"); + set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro"); + set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------"); + printer().footerlen(3); +} + +bool TStampaBenxGAz::user_create() +{ + _rel = new TRelation(LF_BENEM); + _rel->add(LF_SOGGETTI, "CODICE==CODICE"); + _rel->add("BNZ", "CODTAB==TIPOBEN",1,0,ALIAS_BNZ); + _rel->add("GAZ", "CODTAB==GRUPPOAZIE",1,LF_SOGGETTI,ALIAS_GAZ); + _rel->add("LCP", "CODTAB==RES_CODLOC",1,LF_SOGGETTI,ALIAS_LCPRES); + _rel->add("LCP", "CODTAB==DOM_CODLOC",1,LF_SOGGETTI,ALIAS_LCPDOM); + _rel->add(LF_COMUNI, "COM==RES_CODCOM",1,LF_SOGGETTI,ALIAS_COMRES); + _rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,LF_SOGGETTI,ALIAS_COMDOM); + _rel->add(LF_COMUNI, "COM==COMNASC",1,LF_SOGGETTI,ALIAS_COMNAS); + _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); + TConfig config(CONFIG_STUDIO); + _stampa80 = config.get_bool("Stampa80"); return TRUE; } -bool TStampaTessere::user_destroy() +bool TStampaBenxGAz::user_destroy() { delete _msk; delete _rel; - //delete _form_pag; - printer().read_configuration(); return TRUE; } int at1400(int argc, char* argv[]) { - TStampaTessere a; - a.run(argc, argv, "Stampa tessere associative"); + TStampaBenxGAz a; + a.run(argc, argv, "Stampa ben. per gruppo aziendale"); return 0; } diff --git a/at/at1400a.h b/at/at1400a.h index 258761579..9ab1015d2 100755 --- a/at/at1400a.h +++ b/at/at1400a.h @@ -1,46 +1,15 @@ -// stampa tessere associative +// stampa di controllo benemerenze PER GRUPPO AZIENDALE // 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 - +#define F_SEZINI 101 +#define F_D_SEZINI 102 +#define F_SOTINI 103 +#define F_D_SOTINI 104 +#define F_SEZFIN 105 +#define F_D_SEZFIN 106 +#define F_SOTFIN 107 +#define F_D_SOTFIN 108 +#define F_DATAINI 109 +#define F_DATAFIN 110 +#define F_GRUPPOAZIE 111 +#define F_D_GRUPPOAZIE 112 diff --git a/at/at1400a.uml b/at/at1400a.uml index 3559027f7..e5b876a28 100755 --- a/at/at1400a.uml +++ b/at/at1400a.uml @@ -1,35 +1,15 @@ #include "at1400a.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 +PAGE "Stampa benemerenze per gruppo aziendale" -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 @@ -48,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 @@ -63,15 +43,15 @@ END STRING F_SOTINI 2 BEGIN - PROMPT 2 3 " " + PROMPT 2 2 " " COPY ALL F_SEZINI CHECKTYPE SEARCH HELP "Codice sottogruppo da cui partire" END STRING F_D_SOTINI 25 -BEGIN - PROMPT 11 3 "" +BEGIN + PROMPT 11 2 "" FLAGS "U" COPY USE F_D_SEZINI INPUT DENSEZ F_D_SEZINI @@ -84,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 @@ -103,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 @@ -118,15 +98,15 @@ END STRING F_SOTFIN 2 BEGIN - PROMPT 41 3 " " + PROMPT 41 2 " " COPY ALL F_SEZFIN CHECKTYPE SEARCH HELP "Codice sottogruppo finale" END STRING F_D_SOTFIN 25 -BEGIN - PROMPT 49 3 "" +BEGIN + PROMPT 49 2 "" FLAGS "U" COPY USE F_D_SEZFIN INPUT DENSEZ F_D_SEZFIN @@ -137,318 +117,59 @@ BEGIN HELP "Sottogruppo finale" END -GROUPBOX DLG_NULL 77 5 -BEGIN - PROMPT 1 5 "Categorie" -END - -STRING F_CAT1 2 -BEGIN - PROMPT 2 6 "" - FLAGS "U" - USE CTD - INPUT CODTAB F_CAT1 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@30" S0 - OUTPUT F_CAT1 CODTAB - OUTPUT F_D_CAT1 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Categoria di appartenenza" -END - -STRING F_D_CAT1 30 -BEGIN - PROMPT 8 6 "" - FLAGS "D" -END - -STRING F_CAT2 2 -BEGIN - PROMPT 2 7 "" - FLAGS "U" - USE CTD - INPUT CODTAB F_CAT2 - COPY DISPLAY F_CAT1 - OUTPUT F_CAT2 CODTAB - OUTPUT F_D_CAT2 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Categoria di appartenenza" -END - -STRING F_D_CAT2 30 -BEGIN - PROMPT 8 7 "" - FLAGS "D" -END - -STRING F_CAT3 2 -BEGIN - PROMPT 2 8 "" - FLAGS "U" - USE CTD - INPUT CODTAB F_CAT3 - COPY DISPLAY F_CAT1 - OUTPUT F_CAT3 CODTAB - OUTPUT F_D_CAT3 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Categoria di appartenenza" -END - -STRING F_D_CAT3 30 -BEGIN - PROMPT 8 8 "" - FLAGS "D" -END - -STRING F_CAT4 2 -BEGIN - PROMPT 40 6 "" - FLAGS "U" - USE CTD - INPUT CODTAB F_CAT4 - COPY DISPLAY F_CAT1 - OUTPUT F_CAT4 CODTAB - OUTPUT F_D_CAT4 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Categoria di appartenenza" -END - -STRING F_D_CAT4 30 -BEGIN - PROMPT 46 6 "" - FLAGS "D" -END - -STRING F_CAT5 2 -BEGIN - PROMPT 40 7 "" - FLAGS "U" - USE CTD - INPUT CODTAB F_CAT5 - COPY DISPLAY F_CAT1 - OUTPUT F_CAT5 CODTAB - OUTPUT F_D_CAT5 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Categoria di appartenenza" -END - -STRING F_D_CAT5 30 -BEGIN - PROMPT 46 7 "" - FLAGS "D" -END - -STRING F_CAT6 2 -BEGIN - PROMPT 40 8 "" - FLAGS "U" - USE CTD - INPUT CODTAB F_CAT6 - COPY DISPLAY F_CAT1 - OUTPUT F_CAT6 CODTAB - OUTPUT F_D_CAT6 S0 - CHECKTYPE NORMAL - WARNING "Codice non presente" - HELP "Categoria di appartenenza" -END - -STRING F_D_CAT6 30 -BEGIN - PROMPT 46 8 "" - FLAGS "D" -END - -GROUPBOX DLG_NULL 77 3 -BEGIN - PROMPT 1 10 "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@8" - 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 8 -BEGIN - PROMPT 2 1 "Codice " - FLAGS "RG" - USE LF_SOGGETTI KEY 1 - INPUT CODICE F_S_CODICE - DISPLAY "Codice@8" 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@8" 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" + PROMPT 1 5 "Selezioni dati per la stampa" END -STRING F_S_CODSEZ 2 +DATA F_DATAINI BEGIN - PROMPT 2 6 "Sez. " - FLAGS "D" + PROMPT 2 6 "Benemerenze dal " END -STRING F_S_DENSEZ 25 +DATA F_DATAFIN BEGIN - PROMPT 12 6 "" - FLAGS "D" + PROMPT 32 6 "al " END -STRING F_S_CODSOT 2 +STRING F_GRUPPOAZIE 4 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 + PROMPT 2 7 "Gruppo aziendale " + FLAGS "U" + USE GAZ + INPUT CODTAB F_GRUPPOAZIE + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_GRUPPOAZIE CODTAB + OUTPUT F_D_GRUPPOAZIE S0 CHECKTYPE NORMAL + WARNING "Codice gruppo aziendale non presente" + HELP "Gruppo aziendale di appartenenza" END -STRING F_S_DENSOT 25 +STRING F_D_GRUPPOAZIE 30 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 + PROMPT 30 7 "" + FLAGS "U" + USE GAZ KEY 2 + INPUT S0 F_D_GRUPPOAZIE + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + COPY OUTPUT F_GRUPPOAZIE 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" + WARNING "Gruppo aziendale non presente" + HELP "Gruppo aziendale di appartenenza" END BUTTON DLG_OK 9 2 BEGIN - PROMPT -13 -1 "" + PROMPT -12 -1 "" END -BUTTON DLG_CANCEL 9 2 +BUTTON DLG_QUIT 9 2 BEGIN - PROMPT -23 -1 "" -END - -BUTTON DLG_DELREC 9 2 -BEGIN - PROMPT -33 -1 "" - MESSAGE EXIT, K_DEL + PROMPT -22 -1 "" END ENDPAGE - ENDMASK diff --git a/at/at1500.cpp b/at/at1500.cpp index 3272d87da..499e2e9dc 100755 --- a/at/at1500.cpp +++ b/at/at1500.cpp @@ -1,58 +1,88 @@ #include #include -#include +#include #include #include #include -#include + +#include "soggetti.h" +#include "benem.h" +#include "donaz.h" +#include "sezioni.h" +#include #include "at1.h" -#include "atlib.h" - -#define ALIAS_TCS 200 // alias tabella tipi/esiti controlli sanitari -#define MODIFICA_ID "MI" // controllo per modificare idoneita' precedente - -// nomi campi maschera #include "at1500a.h" - -// nomi dei campi -#include "soggetti.h" -#include "contsan.h" -#include "sezioni.h" -class TModificaIntervalli : public TPrintapp +#define ALIAS_BNZ 600 // benemerenze +#define ALIAS_GAZ 300 // gruppi aziendale + +class TControlloBenemerenze : public TPrintapp { - TMask* _msk; - TRelation* _rel; - - TLocalisamfile* _contsan; - TRecord_array* _scontrolli; + static bool filter_func_ctrlben(const TRelation* rel); - int _cur; - bool _modsi, _modaf; - int _oldsi, _oldaf, _newsi, _newaf; - TDate _data_stampa; + TRelation* _rel; + TMask* _msk; + TLocalisamfile* _benem; + TRecord_array* _sbenemerenze; + TAssoc_array _catdon; + TAssoc_array* _colonne; + TParagraph_string _cognome_nome, _benemerenza; + TDate _data_stampa; + TString16 _lettini, _lettfin; + TString16 _gruppoazie, _gruppoold; + bool _pergruppo; + int _contatore; TString16 _codsez, _codsot; - - static bool filter_func_intervalli(const TRelation* rel); - + TString80 _intestazione1, _intestazione2; + 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 print_action postprocess_print(int file, int counter); + bool crea_colonne(); + public: - void filtra_sezioni(); + void dati_sezione(const TString16 codsez, const TString16 codsot); void crea_intestazione(); + void filtra_sezioni(); + void header_gruppo(const TString16 gruppo); + void footer_gruppo(); void header_sezione(const TString16 codsez, const TString16 codsot); - TModificaIntervalli() : _data_stampa(TODAY) {} + void footer_sezione(); + TMask& app_mask() { return *_msk; } + + TControlloBenemerenze() : _data_stampa(TODAY), _cognome_nome("",25), _benemerenza("",80) {} }; -HIDDEN inline TModificaIntervalli& app() { return (TModificaIntervalli&) main_app(); } +HIDDEN inline TControlloBenemerenze& app() { return (TControlloBenemerenze&) main_app(); } -void TModificaIntervalli::filtra_sezioni() +bool TControlloBenemerenze::crea_colonne() +{ + _intestazione1 = ""; + _intestazione2 = ""; + _colonne->destroy(); + TTable bnz("BNZ"); + real contatore(ZERO); + for (bnz.first(); !bnz.eof(); bnz.next()) + { + real* oggetto = new real(contatore); + _colonne->add((const char*)bnz.get("CODTAB"),(TObject*)oggetto); + TString80 ben = bnz.get("S0"); + const int pos = (int)contatore.integer(); + TString16 ben1 = ben.mid(0,11); + TString16 ben2= ben.mid(11,11); + _intestazione1.insert(ben1,pos); + _intestazione2.insert(ben2,pos); + contatore+=12; + } + return !bnz.empty(); +} + +void TControlloBenemerenze::filtra_sezioni() { const TString16 sezini = _msk->get(F_SEZINI); const TString16 sotini = _msk->get(F_SOTINI); @@ -60,7 +90,7 @@ void TModificaIntervalli::filtra_sezioni() const TString16 sotfin = _msk->get(F_SOTFIN); TRectype da(LF_SOGGETTI); TRectype a(LF_SOGGETTI); - if (sezini.not_empty()) + if (sezini.not_empty()) da.put(SOG_CODSEZ, sezini); if (sotini.not_empty()) da.put(SOG_CODSOT, sotini); @@ -71,72 +101,94 @@ void TModificaIntervalli::filtra_sezioni() current_cursor()->setregion(da, a); } -bool TModificaIntervalli::preprocess_page(int file, int counter) +void TControlloBenemerenze::footer_gruppo() +{ + // stampa totale soggetti appartenenti al gruppo + reset_footer(); + TString sep(132); + sep.fill('-'); + set_footer(2, (const char *) sep); + set_footer(3,"TOTALE SOGGETTI STAMPATI %d", _contatore); + printer().formfeed(); + reset_footer(); +} + +print_action TControlloBenemerenze::postprocess_print(int file, int counter) { - TRectype& recsog = current_cursor()->curr(); - TRectype* key = new TRectype(LF_CONTSAN); - long codice = recsog.get_long(SOG_CODICE); - key->put(CON_CODICE, codice); - int err = _scontrolli->read(key); - int progcon = _scontrolli->rows()+1; - TRectype& reccon = _contsan->curr(); - reccon.zero(); - reccon.put(CON_CODICE, codice); - reccon.put(CON_PROGCON, progcon); - reccon.put(CON_DATACON, _data_stampa); - reccon.put(CON_TIPOCON, MODIFICA_ID); - reccon.put(CON_IDON1, recsog.get(SOG_IDON1)); - reccon.put(CON_IDON2, recsog.get(SOG_IDON2)); - reccon.put(CON_IDON3, recsog.get(SOG_IDON3)); - reccon.put(CON_IDON4, recsog.get(SOG_IDON4)); - if (_modsi) - reccon.put(CON_INTSI, _newsi); - else - reccon.put(CON_INTSI, recsog.get_int(SOG_INTSI)); - if (_modaf) - reccon.put(CON_INTAF, _newaf); - else - reccon.put(CON_INTAF, recsog.get_int(SOG_INTAF)); - _scontrolli->add_row(reccon); - _scontrolli->rewrite(); - con_reord(recsog, _scontrolli); - current_cursor()->file().rewrite(); - - // salto pagina se cambio sezione - const TString16 codsez = recsog.get(SOG_CODSEZ); - const TString16 codsot = recsog.get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) + if (_contatore > 0) { - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - header_sezione(codsez, codsot); - } - return TRUE; + if (_pergruppo) + footer_gruppo(); + else + footer_sezione(); + } + return NEXT_PAGE; } -void TModificaIntervalli::set_page(int file, int cnt) -{ - set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"######")); +void TControlloBenemerenze::footer_sezione() +{ + // stampa totale soggetti appartenenti alla sezione + reset_footer(); + TString sep(132); + sep.fill('-'); + set_footer(2, (const char *) sep); + set_footer(3,"TOTALE SOGGETTI STAMPATI %d", _contatore); + printer().formfeed(); + reset_footer(); +} + +void TControlloBenemerenze::header_gruppo(const TString16 gruppo) +{ + TString intestazione(132); + intestazione = "GRUPPO AZIENDALE "; + intestazione << gruppo; + intestazione << " - "; + intestazione << current_cursor()->curr(-ALIAS_GAZ).get("S0"); + intestazione.center_just(132); + set_header(1,"@0g%s", (const char*) intestazione); + return; +} + +void TControlloBenemerenze::set_page(int file, int cnt) +{ + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(2,"@2g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS)); set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); - set_row(1,"@12g@S", FLD(LF_SOGGETTI,SOG_COGNOME)); - set_row(1,"@38g@S", FLD(LF_SOGGETTI,SOG_NOME)); - set_row(1,"@63g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@12g#a", &_cognome_nome); + set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(2,"@41g@pn", FLD(LF_SOGGETTI,SOG_TOTDON,"###")); + + set_row(1,"@49g#a",&_benemerenza); + + set_row(3,""); } -bool TModificaIntervalli::filter_func_intervalli(const TRelation* rel) +bool TControlloBenemerenze::filter_func_ctrlben(const TRelation* rel) { bool filtrato = FALSE; - TRectype& recsog = rel->lfile().curr(); - if (app()._modsi) - filtrato = (app()._oldsi == recsog.get_int(SOG_INTSI)); - if (app()._modaf && !filtrato) - filtrato = (app()._oldaf == recsog.get_int(SOG_INTAF)); - return filtrato; + TLocalisamfile& sog = rel->lfile(); + // filtro per categorie donatori + TAssoc_array& categorie = app()._catdon; + if (categorie.items() != 0) + { + const TString16 cat = sog.get(SOG_CATDON); + filtrato = categorie.is_key((const char*) cat); + } + // se non ho selezionato categorie il soggetto va filtrato comunque + if (app()._catdon.items() == 0) + filtrato = TRUE; + // filtro per iniziale cognome + if (filtrato && (!app()._lettini.blank()) && (!app()._lettfin.blank())) + { + TString80 cognome = sog.get(SOG_COGNOME); + TString16 primalett = cognome.left(15); + if (!(primalett >= app()._lettini && primalett <= app()._lettfin)) + filtrato = FALSE; + } + return filtrato; } -void TModificaIntervalli::header_sezione(const TString16 codsez, const TString16 codsot) +void TControlloBenemerenze::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); @@ -152,32 +204,133 @@ void TModificaIntervalli::header_sezione(const TString16 codsez, const TString16 intestazione << "/"; intestazione << densot; } - intestazione.center_just(); + intestazione.center_just(132); set_header(1,"@0g%s", (const char*) intestazione); return; } -bool TModificaIntervalli::set_print(int) +bool TControlloBenemerenze::preprocess_page(int file, int counter) { + TRectype& recsog = current_cursor()->curr(); + TString80 nome = recsog.get(SOG_COGNOME); + nome << " "; + nome << recsog.get(SOG_NOME); + _cognome_nome = nome; + TString80 benemerenza = ""; + const long codice = recsog.get_long(SOG_CODICE); + TRectype* key = new TRectype(LF_BENEM); + key->put(BEN_CODICE,codice); + const int err = _sbenemerenze->read(key); + for (int r=1; r<=_sbenemerenze->rows(); r++) + { + const TRectype& riga = _sbenemerenze->row(r); + const TString16 tipoben = riga.get(BEN_TIPOBEN); + const TDate databen = riga.get(BEN_DATABEN); + real& colonna = (real&)_colonne->find((const char*)tipoben); + benemerenza.insert(databen.string(),colonna.integer()); + } + _benemerenza = benemerenza; + // salto pagina se cambio sezione o gruppo aziendale + if (_pergruppo) + { + TString16 grupponew = current_cursor()->curr(LF_SOGGETTI).get(SOG_GRUPPOAZIE); + if (grupponew != _gruppoold ) + { + if (_gruppoold != "**") + footer_gruppo(); + _contatore = 0; + _gruppoold = grupponew; + header_gruppo(grupponew); + } + } + else + { + const TString16 codsez = recsog.get(SOG_CODSEZ); + const TString16 codsot = recsog.get(SOG_CODSOT); + if ((_codsez!=codsez)||(_codsot!=codsot)) + { + if (_codsez != "**") + footer_sezione(); + _contatore = 0; + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } + } + if (printer().rows_left()<2) + printer().formfeed(); + _contatore++; + return TRUE; +} + +bool TControlloBenemerenze::set_print(int m) +{ KEY tasto; tasto = _msk->run(); if (tasto == K_ENTER) - { - _codsez = "**"; - _codsot = "**"; - _modsi = _msk->get_bool(F_MOD_SI); - _modaf = _msk->get_bool(F_MOD_AF); - _oldsi = _msk->get_int(F_OLD_SI); - _oldaf = _msk->get_int(F_OLD_AF); - _newsi = _msk->get_int(F_NEW_SI); - _newaf = _msk->get_int(F_NEW_AF); + { + crea_colonne(); + _codsez = "**"; + _codsot = "**"; + _gruppoold = "**"; + _contatore = 0; + TString80 chiave = ""; + _pergruppo = _msk->get_bool(F_PERGRUPPO); + if (_pergruppo) + { + _gruppoazie = _msk->get(F_GRUPPOAZIE); + if (_gruppoazie.empty()) + chiave << "90->GRUPPOAZIE|"; + } + else + chiave << "90->CODSEZ|90->CODSOT|"; + chiave << "90->TOTDON|90->COGNOME|90->NOME"; + _lettini = _msk->get(F_LETTINI); + _lettini.left(15); + _lettfin = _msk->get(F_LETTFIN); + _lettfin.left(15); + TString80 filtro = ""; + if (_gruppoazie.not_empty()) + filtro.format("(90->GRUPPOAZIE == \"%s\")",(const char*)_gruppoazie); + 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); + current_cursor()->setfilter(filtro, TRUE); + ((TSorted_cursor*)current_cursor())->change_order(chiave); reset_files(); add_file(LF_SOGGETTI); - filtra_sezioni(); - // non si puo' fare il filtro per intervalli perche' la setfilter - // non funziona bene con i campi numerici - current_cursor()->set_filterfunction(filter_func_intervalli, TRUE); - reset_print(); + const TString16 catpri = _msk->get(F_CAT1); + const TString16 catsec = _msk->get(F_CAT2); + const TString16 catter = _msk->get(F_CAT3); + const TString16 catqua = _msk->get(F_CAT4); + const TString16 catqui = _msk->get(F_CAT5); + const TString16 catses = _msk->get(F_CAT6); + if (catpri.not_empty() && catpri.ok()) + _catdon.add((const char*) catpri); + if (catsec.not_empty() && catsec.ok()) + _catdon.add((const char*) catsec); + if (catter.not_empty() && catter.ok()) + _catdon.add((const char*) catter); + if (catqua.not_empty() && catqua.ok()) + _catdon.add((const char*) catqua); + if (catqui.not_empty() && catqui.ok()) + _catdon.add((const char*) catqui); + if (catses.not_empty() && catses.ok()) + _catdon.add((const char*) catses); + current_cursor()->set_filterfunction (filter_func_ctrlben); + reset_print(); crea_intestazione(); return TRUE; } @@ -185,69 +338,55 @@ bool TModificaIntervalli::set_print(int) return FALSE; } -void TModificaIntervalli::crea_intestazione() +void TControlloBenemerenze::crea_intestazione() { - reset_header(); + reset_header(); + TString sep(132); + sep = "STAMPA DI CONTROLLO BENEMERENZE"; + printer().footerlen(3); + sep.center_just(132); + 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, "@110g%s", (const char*) sep); + sep = ""; + sep.fill('-'); + set_header(3, (const char *) sep); - TString sep(132); - sep = "MODIFICA INTERVALLI DI DONAZIONE "; - if (_modsi) - { - sep << "SI da "; - sep << _oldsi ; - sep << " a "; - sep << _newsi; - } - if (_modaf) - { - if (_modsi) - sep << " - "; - sep << "AF da "; - sep << _oldaf ; - sep << " a "; - sep << _newaf; - } - sep.center_just(); - set_header(2, "@0g%s", (const char*) sep); - TString16 data_stampa = _data_stampa.string(); - set_header(2,"@0g%10s", (const char*) data_stampa); - sep = ""; - sep << "Pag. @#"; - set_header(2, "@120g%s", (const char*) sep); - - sep = ""; - sep.fill('-'); - set_header(3, (const char *) sep); - set_header(4,"@0gCod.@9gC.@12gCognome e nome@38gNato il"); - set_header(5,"@0g------@9g--@12g-------------------------@38g----------"); + set_header(4,"@0g Codice@9gC.@12gCognome e nome@38gData nasc.@49g%s", (const char*)_intestazione1); + set_header(5,"@0g Tessera@38gTot.don. @49g%s", (const char*)_intestazione2); } -bool TModificaIntervalli::user_create() +bool TControlloBenemerenze::user_create() { - _msk = new TMask("at1500a"); - _rel = new TRelation(LF_SOGGETTI); - _rel->add(LF_SEZIONI,"CODSEZ==CODSEZ|CODSOT==CODSOT"); - _rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS); - //cursore ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); - - _contsan = new TLocalisamfile(LF_CONTSAN); - _scontrolli = new TRecord_array(LF_CONTSAN, CON_PROGCON); - return TRUE; -} + _rel = new TRelation(LF_SOGGETTI); + _rel->add(LF_BENEM, "CODICE==CODICE", 1); + _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); + _rel->add("BNZ", "CODTAB==TIPOBEN", 1, LF_BENEM, ALIAS_BNZ); + _rel->add("GAZ", "CODTAB==GRUPPOAZIE",1,0,ALIAS_GAZ); + _benem = new TLocalisamfile(LF_BENEM); + _sbenemerenze = new TRecord_array(LF_BENEM,BEN_PROGBEN); + _colonne = new TAssoc_array(); + add_cursor(new TSorted_cursor(_rel,"SOG_CODSEZ","",3)); + _msk = new TMask("at1500a"); + return TRUE; +} -bool TModificaIntervalli::user_destroy() +bool TControlloBenemerenze::user_destroy() { - delete _rel; - delete _msk; - delete _contsan; - delete _scontrolli; - return TRUE; + delete _msk; + delete _rel; + delete _colonne; + delete _benem; + delete _sbenemerenze; + return TRUE; } int at1500(int argc, char* argv[]) { - TModificaIntervalli a; - a.run(argc, argv, "Modifica intervalli di donazione"); - return 0; -} \ No newline at end of file + TControlloBenemerenze a; + a.run(argc, argv, "Stampa di controllo benemerenze"); + return 0; +} diff --git a/at/at1500a.h b/at/at1500a.h index 5ed8288c1..47e29e2d2 100755 --- a/at/at1500a.h +++ b/at/at1500a.h @@ -1,17 +1,30 @@ -// modifica intervalli di donazione +// stampa di controllo benemerenze // definizione campi per maschera di selezione -#define F_SEZINI 101 -#define F_D_SEZINI 102 -#define F_SOTINI 103 -#define F_D_SOTINI 104 -#define F_SEZFIN 105 -#define F_D_SEZFIN 106 -#define F_SOTFIN 107 -#define F_D_SOTFIN 108 -#define F_MOD_SI 109 -#define F_OLD_SI 110 -#define F_NEW_SI 111 -#define F_MOD_AF 112 -#define F_OLD_AF 113 -#define F_NEW_AF 114 +#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_PERGRUPPO 401 +#define F_GRUPPOAZIE 402 +#define F_D_GRUPPOAZIE 403 +#define F_LETTINI 405 +#define F_LETTFIN 406 diff --git a/at/at1500a.uml b/at/at1500a.uml index c4c6fdb04..e337dbcf8 100755 --- a/at/at1500a.uml +++ b/at/at1500a.uml @@ -1,15 +1,28 @@ #include "at1500a.h" -PAGE "Modifica intervalli di donazione" -1 -1 78 11 +TOOLBAR "" 0 20 0 2 + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" +END +ENDPAGE // FINE TOOLBAR + +PAGE "Stampa di controllo benemerenze" -1 -1 78 18 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 +41,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 +56,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 +64,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 +77,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 +96,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 +111,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 +119,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 @@ -117,63 +130,186 @@ BEGIN HELP "Sottogruppo finale" END +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 4 "Categorie donatori" +END + +STRING F_CAT1 2 +BEGIN + PROMPT 2 5 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT1 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_CAT1 CODTAB + OUTPUT F_D_CAT1 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT1 30 +BEGIN + PROMPT 8 5 "" + FLAGS "D" +END + +STRING F_CAT2 2 +BEGIN + PROMPT 2 6 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT2 + COPY DISPLAY F_CAT1 + OUTPUT F_CAT2 CODTAB + OUTPUT F_D_CAT2 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT2 30 +BEGIN + PROMPT 8 6 "" + FLAGS "D" +END + +STRING F_CAT3 2 +BEGIN + PROMPT 2 7 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT3 + COPY DISPLAY F_CAT1 + OUTPUT F_CAT3 CODTAB + OUTPUT F_D_CAT3 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT3 30 +BEGIN + PROMPT 8 7 "" + FLAGS "D" +END + +STRING F_CAT4 2 +BEGIN + PROMPT 40 5 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT4 + COPY DISPLAY F_CAT1 + OUTPUT F_CAT4 CODTAB + OUTPUT F_D_CAT4 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT4 30 +BEGIN + PROMPT 46 5 "" + FLAGS "D" +END + +STRING F_CAT5 2 +BEGIN + PROMPT 40 6 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT5 + COPY DISPLAY F_CAT1 + OUTPUT F_CAT5 CODTAB + OUTPUT F_D_CAT5 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT5 30 +BEGIN + PROMPT 46 6 "" + FLAGS "D" +END + +STRING F_CAT6 2 +BEGIN + PROMPT 40 7 "" + FLAGS "U" + USE CTD + INPUT CODTAB F_CAT6 + COPY DISPLAY F_CAT1 + OUTPUT F_CAT6 CODTAB + OUTPUT F_D_CAT6 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Categoria di appartenenza" +END + +STRING F_D_CAT6 30 +BEGIN + PROMPT 46 7 "" + FLAGS "D" +END + GROUPBOX DLG_NULL 77 4 BEGIN - PROMPT 1 5 "Opzioni per la modifica" + PROMPT 1 9 "Opzioni di stampa" END -BOOLEAN F_MOD_SI +BOOLEAN F_PERGRUPPO BEGIN - PROMPT 2 6 "Modifica intervallo SI" - HELP "Si vuole modificare l'intervallo per la donazione SI" - MESSAGE TRUE ENABLE, 1@ - MESSAGE FALSE DISABLE, 1@ + PROMPT 2 10 "Stampa per gruppo aziendale" + MESSAGE TRUE ENABLE,F_GRUPPOAZIE|ENABLE,F_D_GRUPPOAZIE + MESSAGE FALSE RESET,F_GRUPPOAZIE|RESET,F_D_GRUPPOAZIE|DISABLE,F_GRUPPOAZIE|DISABLE,F_D_GRUPPOAZIE END -NUMBER F_OLD_SI 3 +STRING F_GRUPPOAZIE 4 BEGIN - PROMPT 30 6 "Vecchio " - HELP "Indicare l'intervallo di donazione SI che si vuole modificare" + PROMPT 35 10 "" + FLAGS "U" + USE GAZ + INPUT CODTAB F_GRUPPOAZIE + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_GRUPPOAZIE CODTAB + OUTPUT F_D_GRUPPOAZIE S0 + CHECKTYPE NORMAL + WARNING "Codice gruppo aziendale non presente" + HELP "Gruppo aziendale di appartenenza" +END + +STRING F_D_GRUPPOAZIE 30 +BEGIN + PROMPT 43 10 "" + FLAGS "U" + USE GAZ KEY 2 + INPUT S0 F_D_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 + +STRING F_LETTINI 15 +BEGIN + PROMPT 2 11 "Selezione iniziali cognome: da " GROUP 1 + PICTURE "!!" END -NUMBER F_NEW_SI 3 +STRING F_LETTFIN 15 BEGIN - PROMPT 45 6 "Nuovo " - HELP "Indicare il nuovo intervallo di donazione SI" + PROMPT 52 11 "a " GROUP 1 -END - -BOOLEAN F_MOD_AF -BEGIN - PROMPT 2 7 "Modifica intervallo AF" - HELP "Si vuole modificare l'intervallo per la donazione AF" - MESSAGE TRUE ENABLE, 2@ - MESSAGE FALSE DISABLE, 2@ -END - -NUMBER F_OLD_AF 3 -BEGIN - PROMPT 30 7 "Vecchio " - HELP "Indicare l'intervallo di donazione AF che si vuole modificare" - GROUP 2 -END - -NUMBER F_NEW_AF 3 -BEGIN - PROMPT 45 7 "Nuovo " - HELP "Indicare il nuovo intervallo di donazione AF" - GROUP 2 -END - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_QUIT 9 2 -BEGIN - PROMPT -22 -1 "" + //VALIDATE (#F_LETTINI<=#F_LETTFIN) + PICTURE "!!" END ENDPAGE diff --git a/at/at2.cpp b/at/at2.cpp index 72a09c204..920203020 100755 --- a/at/at2.cpp +++ b/at/at2.cpp @@ -3,7 +3,7 @@ #include "at2.h" -#define usage "Error - usage : %s -[0,1,2,3,4,5,6]" +#define usage "Error - usage : %s -[0|1|2|3|4|5|6|7]" int main(int argc, char** argv) { @@ -26,6 +26,8 @@ int main(int argc, char** argv) rt = at2600(argc, argv); break; case 6: rt = at2700(argc, argv); break; + case 7: + rt = at2800(argc, argv); break; default: error_box(usage, argv[0]) ; rt = 1; break; } diff --git a/at/at2.h b/at/at2.h index 5194a251a..0d05f2686 100755 --- a/at/at2.h +++ b/at/at2.h @@ -8,6 +8,7 @@ int at2400(int argc, char* argv[]); // elenco soggetti modificati int at2500(int argc, char* argv[]); // elenco soggetti idonei int at2600(int argc, char* argv[]); // elenco soggetti iscritti/dimessi int at2700(int argc, char* argv[]); // elenco soggetti per categorie +int at2800(int argc, char* argv[]); // elenco soggetti che non donano dal #endif // __AT2_H diff --git a/at/at2.url b/at/at2.url index f8d5a01b6..b12230a46 100755 --- a/at/at2.url +++ b/at/at2.url @@ -9,39 +9,38 @@ MENU TASK_MENUBAR SUBMENU MENU_FILE "~File" -/* at2 -1 elenco soggetti modificati */ +/* at2 -1 elenco per data di nascita */ MENUBAR MENU_BAR(1) - MENU MENU_BAR(1) SUBMENU MENU_FILE "~File" /* at2 -2 elenco esclusi */ MENUBAR MENU_BAR(2) - MENU MENU_BAR(2) SUBMENU MENU_FILE "~File" /* at2 -3 elenco soggetti modificati */ MENUBAR MENU_BAR(3) - MENU MENU_BAR(3) SUBMENU MENU_FILE "~File" /* at2 -4 elenco idonei */ MENUBAR MENU_BAR(4) - MENU MENU_BAR(4) SUBMENU MENU_FILE "~File" /* at2 -5 elenco iscritti/dimessi */ MENUBAR MENU_BAR(5) - MENU MENU_BAR(5) SUBMENU MENU_FILE "~File" /* at2 -6 elenco per categorie */ MENUBAR MENU_BAR(6) - MENU MENU_BAR(6) SUBMENU MENU_FILE "~File" +/* at2 -7 elenco soggetti che non donano dal */ +MENUBAR MENU_BAR(7) +MENU MENU_BAR(7) + SUBMENU MENU_FILE "~File" + diff --git a/at/at2100.cpp b/at/at2100.cpp index ad6ca0d28..73fd58415 100755 --- a/at/at2100.cpp +++ b/at/at2100.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "soggetti.h" #include "sezioni.h" @@ -35,11 +34,11 @@ class TStampaSospesi : public TPrintapp TMask* _msk; TEti_sospesi_form* _form_eti; TAssoc_array _categorie; - int _cur; TParagraph_string _cognome_nome; TDate _data_stampa; - ts _tipo_stampa; + ts _tipostampa; TString16 _codsez, _codsot; + int _etlarghezza, _etcolonne; static bool filter_func_sospesi(const TRelation* rel); @@ -86,14 +85,13 @@ void TStampaSospesi::filtra_sezioni() void TStampaSospesi::set_page(int file, int cnt) { // costruzione etichette - switch (_tipo_stampa) + switch (_tipostampa) { case etichette: { TPrint_section& corpo = _form_eti->get_body(); - corpo.reset(); corpo.update(); - for (int i = 0; i < corpo.height(); i++) + for (word i = 0; i < corpo.height(); i++) { TPrintrow& riga = corpo.row(i); set_row(i+1,riga); @@ -137,7 +135,7 @@ bool TStampaSospesi::filter_func_sospesi(const TRelation* rel) bool TStampaSospesi::preprocess_page(int file, int counter) { - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TRectype& recsog = current_cursor()->curr(); TString80 nome = recsog.get(SOG_COGNOME); @@ -156,6 +154,9 @@ bool TStampaSospesi::preprocess_page(int file, int counter) header_sezione(codsez, codsot); } } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); return TRUE; } @@ -182,21 +183,21 @@ void TStampaSospesi::header_sezione(const TString16 codsez, const TString16 cods bool TStampaSospesi::set_print(int m) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCO: - _tipo_stampa = elenco; + _tipostampa = elenco; _codsez = "**"; _codsot = "**"; break; case F_ETICHETTE: - _tipo_stampa = etichette; + _tipostampa = etichette; break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { reset_files(); add_file(LF_SOGGETTI); @@ -240,7 +241,7 @@ void TStampaSospesi::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString sep(132); sep = "ELENCO SOSPESI"; @@ -275,12 +276,14 @@ bool TStampaSospesi::user_create() _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"); - // ordinamento per sezione+sottogruppo+cognome e nome - _cur = add_cursor(new TCursor(_rel, "", 3)); + add_cursor(new TCursor(_rel,"", 3)); _msk = new TMask("at2100a"); - _form_eti = new TEti_sospesi_form("AT_ETSOG"); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TEti_sospesi_form(etformato); return TRUE; } @@ -295,6 +298,6 @@ bool TStampaSospesi::user_destroy() int at2100(int argc, char* argv[]) { TStampaSospesi a; - a.run(argc, argv, "Elenco sospesi"); + a.run(argc, argv, "Stampa soggetti sospesi"); return 0; } diff --git a/at/at2200.cpp b/at/at2200.cpp index 129409a3b..0df9fea0f 100755 --- a/at/at2200.cpp +++ b/at/at2200.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include "soggetti.h" #include "sezioni.h" @@ -37,13 +36,12 @@ class TStampaPerEta : public TPrintapp TMask* _msk; TEti_pereta_form* _form_eti; TAssoc_array _categorie; - int _cur; TParagraph_string _cognome_nome, _dencom; TDate _data_stampa; TDate _dataini, _datafin; - ts _tipo_stampa; + ts _tipostampa; TString16 _codsez, _codsot; - + int _etlarghezza, _etcolonne; protected: virtual bool user_create(); @@ -88,14 +86,13 @@ void TStampaPerEta::filtra_sezioni() void TStampaPerEta::set_page(int file, int cnt) { - switch (_tipo_stampa) + switch (_tipostampa) { case etichette: { TPrint_section& corpo = _form_eti->get_body(); - corpo.reset(); corpo.update(); - for (int i = 0; i < corpo.height(); i++) + for (word i = 0; i < corpo.height(); i++) { TPrintrow& riga = corpo.row(i); set_row(i+1,riga); @@ -167,7 +164,7 @@ void TStampaPerEta::header_sezione(const TString16 codsez, const TString16 codso bool TStampaPerEta::preprocess_page(int file, int counter) { - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TRectype recsog = current_cursor()->curr(); TString80 nome = recsog.get(SOG_COGNOME); @@ -203,26 +200,29 @@ bool TStampaPerEta::preprocess_page(int file, int counter) header_sezione(codsez, codsot); } } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); return TRUE; } bool TStampaPerEta::set_print(int m) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCO: - _tipo_stampa = elenco; + _tipostampa = elenco; _codsez = "**"; _codsot = "**"; break; case F_ETICHETTE: - _tipo_stampa = etichette; + _tipostampa = etichette; break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { reset_files(); add_file(LF_SOGGETTI); @@ -259,7 +259,7 @@ bool TStampaPerEta::set_print(int m) void TStampaPerEta::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString sep(132); sep = "ELENCO PER DATA DI NASCITA"; @@ -297,11 +297,13 @@ bool TStampaPerEta::user_create() _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"); - // ordinamento per sezione+sottogruppo+cognome e nome - _cur = add_cursor(new TCursor(_rel, "", 3)); - _form_eti = new TEti_pereta_form("AT_ETSOG"); + add_cursor(new TCursor(_rel, "", 3)); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TEti_pereta_form(etformato); _msk = new TMask("at2200a"); return TRUE; } @@ -317,6 +319,6 @@ bool TStampaPerEta::user_destroy() int at2200(int argc, char* argv[]) { TStampaPerEta a; - a.run(argc, argv, "Elenco per data nascita"); + a.run(argc, argv, "Stampa soggetti per data nascita"); return 0; } diff --git a/at/at2300.cpp b/at/at2300.cpp index 8667decf8..f92356e4e 100755 --- a/at/at2300.cpp +++ b/at/at2300.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "soggetti.h" #include "sezioni.h" @@ -39,11 +38,11 @@ class TStampaEsclusi : public TPrintapp TAssoc_array _categorie; TString16 _tipoesc; TDate _termineesc; - int _cur; TParagraph_string _cognome_nome; TDate _data_stampa; - ts _tipo_stampa; + ts _tipostampa; TString16 _codsez, _codsot; + int _etlarghezza, _etcolonne; protected: virtual bool user_create(); @@ -88,14 +87,13 @@ void TStampaEsclusi::filtra_sezioni() void TStampaEsclusi::set_page(int file, int cnt) { // costruzione etichette - switch (_tipo_stampa) + switch (_tipostampa) { case etichette: { TPrint_section& corpo = _form_eti->get_body(); - corpo.reset(); corpo.update(); - for (int i = 0; i < corpo.height(); i++) + for (word i = 0; i < corpo.height(); i++) { TPrintrow& riga = corpo.row(i); set_row(i+1,riga); @@ -141,7 +139,7 @@ bool TStampaEsclusi::filter_func_esclusi(const TRelation * rel) bool TStampaEsclusi::preprocess_page(int file, int counter) { - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TRectype& recsog = current_cursor()->curr(); TString80 nome = recsog.get(SOG_COGNOME); @@ -160,6 +158,9 @@ bool TStampaEsclusi::preprocess_page(int file, int counter) header_sezione(codsez, codsot); } } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); return TRUE; } @@ -186,21 +187,21 @@ void TStampaEsclusi::header_sezione(const TString16 codsez, const TString16 cods bool TStampaEsclusi::set_print(int) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCO: - _tipo_stampa = elenco; + _tipostampa = elenco; _codsez = "**"; _codsot = "**"; break; case F_ETICHETTE: - _tipo_stampa = etichette; + _tipostampa = etichette; break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { reset_files(); add_file(LF_SOGGETTI); @@ -244,7 +245,7 @@ bool TStampaEsclusi::set_print(int) void TStampaEsclusi::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString sep(90); sep = "ELENCO ESCLUSI"; @@ -280,12 +281,14 @@ bool TStampaEsclusi::user_create() _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"); - // ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); + add_cursor(new TCursor(_rel, "", 3)); _msk = new TMask("at2300a"); - _form_eti = new TEti_esclusi_form("AT_ETSOG"); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TEti_esclusi_form(etformato); return TRUE; } @@ -300,6 +303,6 @@ bool TStampaEsclusi::user_destroy() int at2300(int argc, char* argv[]) { TStampaEsclusi a; - a.run(argc, argv, "Elenco esclusi"); + a.run(argc, argv, "Stampa soggetti esclusi"); return 0; } diff --git a/at/at2400.cpp b/at/at2400.cpp index a5d246063..254638d7d 100755 --- a/at/at2400.cpp +++ b/at/at2400.cpp @@ -1,35 +1,36 @@ #include #include #include -#include +#include #include "soggetti.h" +#include "donaz.h" +#include "benem.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_CTD 700 // categoria donatori +#define ALIAS_CTN1 701 // categoria non donatori 1 +#define ALIAS_CTN2 702 // categoria non donatori 2 #define ALIAS_TCS 200 // tipi/esiti controlli sanitari -#define ALIAS_LDN 300 // punti di prelievo +#define ALIAS_LDN 400 // punti di prelievo -#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 +#define ALIAS_LCPDOM 100 // localita' postale di domicilio +#define ALIAS_COMDOM 501 // comune di domicilio +#define ALIAS_COMNAS 500 // comune di nascita -enum ts { undefined = 0, elenco = 1, pagine = 2 }; +#define ALIAS_BNZ 600 // benemerenze -// definizione form per pagine anagrafiche +enum ts { undefined = 0, elenco = 1, schede = 2 }; + +// definizione form class TModificati_form : public TForm { public: - virtual TCursor* cursor() const; virtual TRelation* relation() const; TPrint_section& get_body() { return section('B'); } ; @@ -45,13 +46,18 @@ class TStampaModificati : public TPrintapp TRelation* _rel; TMask* _msk; - TModificati_form* _form_pag; + TLocalisamfile* _donaz; + TLocalisamfile* _benem; + TRecord_array* _sdonazioni; + TRecord_array* _sbenemerenze; + TModificati_form* _form_sch; TAssoc_array _categorie; - int _cur; TParagraph_string _cognome_nome, _dencom; TDate _data_stampa, _dataini; - ts _tipo_stampa; + ts _tipostampa; TString16 _codsez, _codsot; + TString80 _eledon; + TString80 _eleben1,_eleben2; protected: virtual bool user_create(); @@ -96,23 +102,16 @@ void TStampaModificati::filtra_sezioni() void TStampaModificati::set_page(int file, int cnt) { - switch (_tipo_stampa) + switch (_tipostampa) { - case pagine: + case schede: { - 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); - } - // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta + TPrint_section& corpo = _form_sch->get_body(); + corpo.update_and_print(TRUE); force_setpage(TRUE); } break; + case elenco: { set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); @@ -124,6 +123,7 @@ void TStampaModificati::set_page(int file, int cnt) set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); set_row(2,"@49g#a", &_dencom); set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + set_row(3,""); } break; } @@ -151,9 +151,9 @@ bool TStampaModificati::filter_func_modificati(const TRelation* rel) bool TStampaModificati::preprocess_page(int file, int counter) { - if (_tipo_stampa == elenco) + TRectype& recsog = current_cursor()->curr(); + if (_tipostampa == elenco) { - TRectype& recsog = current_cursor()->curr(); TString80 nome = recsog.get(SOG_COGNOME); nome << " "; nome << recsog.get(SOG_NOME); @@ -186,6 +186,27 @@ bool TStampaModificati::preprocess_page(int file, int counter) header_sezione(codsez, codsot); } } + else + { + const long codice = recsog.get_long(SOG_CODICE); + TRectype* key = new TRectype(LF_DONAZ); + key->put(DON_CODICE, codice); + int err = _sdonazioni->read(key); + _eledon = ""; + if (err == NOERR) + { + for (int r=_sdonazioni->rows(); r>_sdonazioni->rows()-3 && r>0; r--) + { + const TRectype& riga = _sdonazioni->row(r); + const TDate datadon = riga.get(DON_DATADON); + _eledon << datadon.string(); + _eledon << " "; + _eledon << riga.get(DON_TIPODON); + _eledon << " "; + _eledon << riga.get(DON_LUOGODON); + } + } + } return TRUE; } @@ -212,21 +233,21 @@ void TStampaModificati::header_sezione(const TString16 codsez, const TString16 c bool TStampaModificati::set_print(int) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCO: - _tipo_stampa = elenco; + _tipostampa = elenco; _codsez = "**"; _codsez = "**"; break; - case F_PAGINE: - _tipo_stampa = pagine; + case F_SCHEDE: + _tipostampa = schede; break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { reset_files(); add_file(LF_SOGGETTI); @@ -263,7 +284,7 @@ bool TStampaModificati::set_print(int) void TStampaModificati::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString sep(132); sep = "ELENCO MODIFICATI"; @@ -292,21 +313,25 @@ void TStampaModificati::crea_intestazione() bool TStampaModificati::user_create() { _rel = new TRelation(LF_SOGGETTI); + _rel->add(LF_DONAZ, "CODICE==CODICE", 1); + _rel->add(LF_BENEM, "CODICE==CODICE", 1); + _rel->add("BNZ", "CODTAB==TIPOBEN", 1, LF_BENEM, ALIAS_BNZ); _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"); - // ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); - _form_pag = new TModificati_form("AT_PAGIN"); + _donaz = new TLocalisamfile(LF_DONAZ); + _benem = new TLocalisamfile(LF_BENEM); + _sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON); + _sbenemerenze = new TRecord_array(LF_BENEM,BEN_PROGBEN); + add_cursor(new TCursor(_rel, "", 3)); + _form_sch = new TModificati_form("AT_PAGIN"); _msk = new TMask("at2400a"); return TRUE; } @@ -314,14 +339,18 @@ bool TStampaModificati::user_create() bool TStampaModificati::user_destroy() { delete _msk; - delete _rel; - delete _form_pag; + delete _rel; + delete _donaz; + delete _benem; + delete _sdonazioni; + delete _sbenemerenze; + delete _form_sch; return TRUE; } int at2400(int argc, char* argv[]) { TStampaModificati a; - a.run(argc, argv, "Elenco soggetti modificati"); + a.run(argc, argv, "Stampa soggetti modificati"); return 0; } diff --git a/at/at2400a.h b/at/at2400a.h index a443241de..8e9cc41a8 100755 --- a/at/at2400a.h +++ b/at/at2400a.h @@ -27,4 +27,4 @@ //#define F_DATAFIN 302 #define F_ELENCO 401 -#define F_PAGINE 402 +#define F_SCHEDE 402 diff --git a/at/at2400a.uml b/at/at2400a.uml index a77c38f24..1fb343d70 100755 --- a/at/at2400a.uml +++ b/at/at2400a.uml @@ -273,10 +273,10 @@ BEGIN MESSAGE EXIT,F_ELENCO END -BUTTON F_PAGINE 9 2 +BUTTON F_SCHEDE 9 2 BEGIN - PROMPT -23 14 "Pagine" - MESSAGE EXIT,F_PAGINE + PROMPT -23 14 "Schede" + MESSAGE EXIT,F_SCHEDE END BUTTON DLG_QUIT 9 2 diff --git a/at/at2500.cpp b/at/at2500.cpp index f988e541b..034c6eb07 100755 --- a/at/at2500.cpp +++ b/at/at2500.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "soggetti.h" #include "sezioni.h" @@ -37,12 +36,11 @@ class TStampaIdonei : public TPrintapp TAssoc_array _categorie; TString16 _tipoidon; TString16 _idon1, _idon2, _idon3, _idon4; - - int _cur; TParagraph_string _cognome_nome; TDate _data_stampa; - ts _tipo_stampa; + ts _tipostampa; TString16 _codsez, _codsot; + int _etlarghezza, _etcolonne; static bool filter_func_idonei(const TRelation* rel); @@ -89,21 +87,32 @@ void TStampaIdonei::filtra_sezioni() void TStampaIdonei::set_page(int file, int cnt) { // costruzione etichette - switch (_tipo_stampa) + switch (_tipostampa) { 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); - } - // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta - force_setpage(TRUE); + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } } break; case elenco: @@ -167,7 +176,7 @@ bool TStampaIdonei::filter_func_idonei(const TRelation * rel) bool TStampaIdonei::preprocess_page(int file, int counter) { - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TRectype& recsog = current_cursor()->curr(); TString80 nome = recsog.get(SOG_COGNOME); @@ -186,6 +195,9 @@ bool TStampaIdonei::preprocess_page(int file, int counter) header_sezione(codsez, codsot); } } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); return TRUE; } @@ -212,21 +224,21 @@ void TStampaIdonei::header_sezione(const TString16 codsez, const TString16 codso bool TStampaIdonei::set_print(int m) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCO: - _tipo_stampa = elenco; + _tipostampa = elenco; _codsez = "**"; _codsot = "**"; break; case F_ETICHETTE: - _tipo_stampa = etichette; + _tipostampa = etichette; break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { reset_files(); add_file(LF_SOGGETTI); @@ -274,7 +286,7 @@ bool TStampaIdonei::set_print(int m) void TStampaIdonei::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString sep(132); sep = "ELENCO IDONEI"; @@ -328,12 +340,15 @@ bool TStampaIdonei::user_create() _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"); - // ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); + add_cursor(new TCursor(_rel, "", 3)); _msk = new TMask("at2500a"); - _form_eti = new TEti_idonei_form("AT_ETSOG"); + + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TEti_idonei_form(etformato); return TRUE; } @@ -348,6 +363,6 @@ bool TStampaIdonei::user_destroy() int at2500(int argc, char* argv[]) { TStampaIdonei a; - a.run(argc, argv, "Elenco idonei"); + a.run(argc, argv, "Stampa soggetti idonei"); return 0; } diff --git a/at/at2600.cpp b/at/at2600.cpp index 5e3d881c6..726fe6e88 100755 --- a/at/at2600.cpp +++ b/at/at2600.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "soggetti.h" #include "sezioni.h" @@ -35,13 +34,13 @@ class TStampaIscritti : public TPrintapp TMask* _msk; TEti_iscritti_form* _form_eti; TAssoc_array _categorie; - int _cur; TParagraph_string _cognome_nome; TDate _data_stampa; - ts _tipo_stampa; + ts _tipostampa; TString16 _codsez, _codsot; char _tipo_iscdim; // iscritti o dimessi TDate _dataini, _datafin; + int _etlarghezza, _etcolonne; static bool filter_func_iscritti(const TRelation* rel); @@ -88,21 +87,32 @@ void TStampaIscritti::filtra_sezioni() void TStampaIscritti::set_page(int file, int cnt) { // costruzione etichette - switch (_tipo_stampa) + switch (_tipostampa) { 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); - } - // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta - force_setpage(TRUE); + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } } break; case elenco: @@ -148,7 +158,7 @@ bool TStampaIscritti::filter_func_iscritti(const TRelation * rel) bool TStampaIscritti::preprocess_page(int file, int counter) { - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TRectype& recsog = current_cursor()->curr(); TString80 nome = recsog.get(SOG_COGNOME); @@ -167,6 +177,9 @@ bool TStampaIscritti::preprocess_page(int file, int counter) header_sezione(codsez, codsot); } } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); return TRUE; } @@ -193,21 +206,21 @@ void TStampaIscritti::header_sezione(const TString16 codsez, const TString16 cod bool TStampaIscritti::set_print(int m) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCO: - _tipo_stampa = elenco; + _tipostampa = elenco; _codsez = "**"; _codsot = "**"; break; case F_ETICHETTE: - _tipo_stampa = etichette; + _tipostampa = etichette; break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { reset_files(); add_file(LF_SOGGETTI); @@ -248,7 +261,7 @@ bool TStampaIscritti::set_print(int m) void TStampaIscritti::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString sep(132); sep = "ELENCO "; @@ -286,12 +299,14 @@ bool TStampaIscritti::user_create() _rel = new TRelation(LF_SOGGETTI); _rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCP); _rel->add(LF_COMUNI, "COM==DOM_CODCOM"); - // per stampare nell'intestazione la denominazione della sezione _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); - // ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); + add_cursor(new TCursor(_rel, "", 3)); _msk = new TMask("at2600a"); - _form_eti = new TEti_iscritti_form("AT_ETSOG"); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TEti_iscritti_form(etformato); return TRUE; } @@ -306,6 +321,6 @@ bool TStampaIscritti::user_destroy() int at2600(int argc, char* argv[]) { TStampaIscritti a; - a.run(argc, argv, "Elenco iscritti/dimessi"); + a.run(argc, argv, "Stampa iscritti/dimessi"); return 0; } diff --git a/at/at2700.cpp b/at/at2700.cpp index 534da6013..6e194a538 100755 --- a/at/at2700.cpp +++ b/at/at2700.cpp @@ -1,19 +1,37 @@ #include #include -#include -#include +#include +#include +#include +#include #include "soggetti.h" +#include "benem.h" +#include "donaz.h" #include "sezioni.h" #include #include "at2.h" #include "at2700a.h" -#define ALIAS_LCP 100 -#define ALIAS_TCS 200 +#include "at4100b.h" +#include "at4100c.h" -enum ts { undefined = 0, elenco = 1, etichette = 2 }; +#define ALIAS_CTD 700 // categoria donatori +#define ALIAS_CTN1 701 // categoria non donatori 1 +#define ALIAS_CTN2 702 // categoria non donatori 2 + +#define ALIAS_TCS 200 // tipi/esiti controlli sanitari +#define ALIAS_LDN 400 // punti di prelievo + +#define ALIAS_LCPDOM 100 // localita' postale di domicilio +#define ALIAS_COMDOM 501 // comune di domicilio +#define ALIAS_COMNAS 500 // comune di nascita + +#define ALIAS_BNZ 600 // benemerenze +#define ALIAS_GAZ 300 // gruppi aziendale + +enum ts { undefined=0, sintetico=1, completo=2, schede=3, etichette=4, cartoline=5 }; // definizione form per etichette class TEti_percat_form : public TForm @@ -35,18 +53,28 @@ class TStampaPerCategorie : public TPrintapp TRelation* _rel; TMask* _msk; + TLocalisamfile* _benem; + TLocalisamfile* _donaz; + TRecord_array* _sbenemerenze; TEti_percat_form* _form_eti; - + TEti_percat_form* _form_car; + TEti_percat_form* _form_sch; TAssoc_array _catdon; TAssoc_array _catnondon; - - int _cur1; - TParagraph_string _cognome_nome, _dencom; - + TParagraph_string _cognome_nome, _dencom, _benemerenza; + TString80 _rigastampa; TDate _data_stampa; - ts _tipo_stampa; - TString16 _codsez, _codsot; - char _lettini, _lettfin; + ts _tipostampa; + TString16 _lettini, _lettfin, _capini, _capfin; + TString16 _gruppoazie, _gruppoold; + bool _pergruppo; + int _contatore; + TString16 _codsez, _codsot, _orario, _datacart; + TString80 _invitoper, _data, _presso1, _presso2, _presso3, _presso4; + TString80 _note, _intest1, _intest2, _intest3, _intest4; + bool _usomodo, _usasez; + int _etlarghezza, _etcolonne; + bool _stampa80; protected: virtual bool user_create(); @@ -54,14 +82,20 @@ protected: 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_print(int file, int counter); + ts dati_cartolina(); public: + void dati_sezione(const TString16 codsez, const TString16 codsot); void crea_intestazione(); void filtra_sezioni(); + void header_gruppo(const TString16 gruppo); + void footer_gruppo(); void header_sezione(const TString16 codsez, const TString16 codsot); + void footer_sezione(); TMask& app_mask() { return *_msk; } - TStampaPerCategorie() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {} + TStampaPerCategorie() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",30), _benemerenza("",11) {} }; HIDDEN inline TStampaPerCategorie& app() { return (TStampaPerCategorie&) main_app(); } @@ -70,6 +104,54 @@ TCursor* TEti_percat_form::cursor() const { return app().current_cursor(); } TRelation* TEti_percat_form::relation() const { return cursor()->relation(); } +void TStampaPerCategorie::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; +} + +ts TStampaPerCategorie::dati_cartolina() +{ + 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 TStampaPerCategorie::filtra_sezioni() { const TString16 sezini = _msk->get(F_SEZINI); @@ -89,26 +171,141 @@ void TStampaPerCategorie::filtra_sezioni() current_cursor()->setregion(da, a); } +void TStampaPerCategorie::footer_gruppo() +{ + // stampa totale soggetti appartenenti al gruppo + reset_footer(); + TString sep(80); + sep.fill('-'); + set_footer(2, (const char *) sep); + set_footer(3,"TOTALE SOGGETTI STAMPATI %d", _contatore); + printer().formfeed(); + reset_footer(); +} + +print_action TStampaPerCategorie::postprocess_print(int file, int counter) +{ + if (_contatore > 0) + { + if (_pergruppo) + footer_gruppo(); + else + footer_sezione(); + } + return NEXT_PAGE; +} + +void TStampaPerCategorie::footer_sezione() +{ + // stampa totale soggetti appartenenti alla sezione + reset_footer(); + TString sep(80); + sep.fill('-'); + set_footer(2, (const char *) sep); + set_footer(3,"TOTALE SOGGETTI STAMPATI %d", _contatore); + printer().formfeed(); + reset_footer(); +} + +void TStampaPerCategorie::header_gruppo(const TString16 gruppo) +{ + TString intestazione(132); + intestazione = "GRUPPO AZIENDALE "; + intestazione << gruppo; + intestazione << " - "; + intestazione << current_cursor()->curr(-ALIAS_GAZ).get("S0"); + if (_stampa80) + intestazione.center_just(80); + else + intestazione.center_just(132); + set_header(1,"@0g%s", (const char*) intestazione); + return; +} + void TStampaPerCategorie::set_page(int file, int cnt) { - switch (_tipo_stampa) + switch (_tipostampa) { 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); - } - // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } + } + break; + case schede: + { + TPrint_section& corpo = _form_sch->get_body(); + corpo.update_and_print(TRUE); force_setpage(TRUE); } break; - case elenco: + 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 (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + set_row(i+1,riga); + } + } + break; + case sintetico: { set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); @@ -117,8 +314,89 @@ void TStampaPerCategorie::set_page(int file, int cnt) set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI)); set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(2,"@0g@8,rs", FLD(LF_SOGGETTI,SOG_TESSAVIS)); set_row(2,"@49g#a", &_dencom); set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + set_row(3,""); + } + break; + case completo: + { + if (_stampa80) + { + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(2,"@0g@8,rs", FLD(LF_SOGGETTI,SOG_TESSAVIS)); + set_row(3,"@0g@8,rs", FLD(LF_SOGGETTI,SOG_CATDON)); + + set_row(1,"@9g@S",FLD(LF_SOGGETTI,SOG_COGNOME)); + set_row(2,"@9g@S",FLD(LF_SOGGETTI,SOG_NOME)); + set_row(3,"@9g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(4,"@9g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); + set_row(5,"@9g#a", &_dencom); + + set_row(1,"@40g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(2,"@40g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(3,"@40g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + set_row(4,"@40g@S", FLD(LF_SOGGETTI,SOG_GRUPPOAZIE)); + set_row(5,"@40g@S", FLD(LF_SOGGETTI,SOG_PROFESS)); + + set_row(1,"@56gGr @S", FLD(LF_SOGGETTI,SOG_GRUPPOAB0)); + set_row(2,"@56gRh @S", FLD(LF_SOGGETTI,SOG_RHANTID)); + set_row(3,"@56gFe @S", FLD(LF_SOGGETTI,SOG_FENOTIPORH)); + set_row(4,"@56gKe @S", FLD(LF_SOGGETTI,SOG_KELL)); + set_row(5,"@56gDu @S", FLD(LF_SOGGETTI,SOG_DU)); + + set_row(1,"@66g@S", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + set_row(2,"@70g@n", FLD(LF_SOGGETTI,SOG_TOTDON)); + set_row(3,"@66g@S", FLD(LF_SOGGETTI,SOG_DATAISC)); + set_row(4,"@66g#a", &_benemerenza); + + set_row(1,"@77g@S", FLD(LF_SOGGETTI,SOG_STATO)); + set_row(2,"@77g@S", FLD(LF_SOGGETTI,SOG_IDON1)); + set_row(3,"@77g@S", FLD(LF_SOGGETTI,SOG_IDON2)); + set_row(4,"@77g@S", FLD(LF_SOGGETTI,SOG_IDON3)); + set_row(5,"@77g@S", FLD(LF_SOGGETTI,SOG_IDON4)); + + set_row(6,""); + } + else + { + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(2,"@0g@8,rs", FLD(LF_SOGGETTI,SOG_TESSAVIS)); + set_row(3,"@0g@8,rs", FLD(LF_SOGGETTI,SOG_CATDON)); + + set_row(1,"@9g@S",FLD(LF_SOGGETTI,SOG_COGNOME)); + set_row(2,"@9g@S",FLD(LF_SOGGETTI,SOG_NOME)); + set_row(3,"@9g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + + set_row(1,"@35g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); + set_row(2,"@35g#a", &_dencom); + + set_row(1,"@66g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(2,"@66g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(3,"@66g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + set_row(4,"@66g@S", FLD(LF_SOGGETTI,SOG_GRUPPOAZIE)); + set_row(5,"@66g@S", FLD(LF_SOGGETTI,SOG_PROFESS)); + + set_row(1,"@82gGr @S", FLD(LF_SOGGETTI,SOG_GRUPPOAB0)); + set_row(2,"@82gRh @S", FLD(LF_SOGGETTI,SOG_RHANTID)); + set_row(3,"@82gFe @S", FLD(LF_SOGGETTI,SOG_FENOTIPORH)); + set_row(4,"@82gKe @S", FLD(LF_SOGGETTI,SOG_KELL)); + set_row(5,"@82gDu @S", FLD(LF_SOGGETTI,SOG_DU)); + + set_row(1,"@94g@S", FLD(LF_SOGGETTI,SOG_STATO)); + set_row(2,"@94g@S", FLD(LF_SOGGETTI,SOG_IDON1)); + set_row(3,"@94g@S", FLD(LF_SOGGETTI,SOG_IDON2)); + set_row(4,"@94g@S", FLD(LF_SOGGETTI,SOG_IDON3)); + set_row(5,"@94g@S", FLD(LF_SOGGETTI,SOG_IDON4)); + + set_row(1,"@98g@S", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + set_row(2,"@100g@n", FLD(LF_SOGGETTI,SOG_TOTDON)); + set_row(3,"@98g@S", FLD(LF_SOGGETTI,SOG_DATAISC)); + set_row(4,"@98g#a", &_benemerenza); + + set_row(6,""); + } } break; } @@ -150,10 +428,10 @@ bool TStampaPerCategorie::filter_func_percat(const TRelation* rel) if (app()._catdon.items() == 0 && app()._catnondon.items() == 0) filtrato = TRUE; // filtro per iniziale cognome - if (filtrato && (app()._lettini != ' ') && (app()._lettfin != ' ')) + if (filtrato && (!app()._lettini.blank()) && (!app()._lettfin.blank())) { TString80 cognome = sog.get(SOG_COGNOME); - const char primalett = cognome[0]; + TString16 primalett = cognome.left(15); if (!(primalett >= app()._lettini && primalett <= app()._lettfin)) filtrato = FALSE; } @@ -176,14 +454,17 @@ void TStampaPerCategorie::header_sezione(const TString16 codsez, const TString16 intestazione << "/"; intestazione << densot; } - intestazione.center_just(); + if (_stampa80) + intestazione.center_just(80); + else + intestazione.center_just(132); set_header(1,"@0g%s", (const char*) intestazione); return; } bool TStampaPerCategorie::preprocess_page(int file, int counter) { - if (_tipo_stampa == elenco) + if (_tipostampa==sintetico||_tipostampa==completo) { TRectype& recsog = current_cursor()->curr(); TString80 nome = recsog.get(SOG_COGNOME); @@ -191,11 +472,11 @@ bool TStampaPerCategorie::preprocess_page(int file, int counter) nome << recsog.get(SOG_NOME); _cognome_nome = nome; TString256 localita = ""; - localita << current_cursor()->curr(-ALIAS_LCP).get("S6"); + localita << current_cursor()->curr(-ALIAS_LCPDOM).get("S6"); if (localita.not_empty() && localita.ok()) { localita << " "; - localita << current_cursor()->curr(-ALIAS_LCP).get("S0"); + localita << current_cursor()->curr(-ALIAS_LCPDOM).get("S0"); localita << " - "; } else @@ -206,53 +487,152 @@ bool TStampaPerCategorie::preprocess_page(int file, int counter) localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); localita.trim(); _dencom = localita; - // salto pagina se cambio sezione - const TString16 codsez = recsog.get(SOG_CODSEZ); - const TString16 codsot = recsog.get(SOG_CODSOT); - if ((_codsez!=codsez)||(_codsot!=codsot)) + // cerco ultima benemerenza + TString80 benemerenza = ""; + const long codice = recsog.get_long(SOG_CODICE); + TRectype* key = new TRectype(LF_BENEM); + key->put(BEN_CODICE,codice); + const int err = _sbenemerenze->read(key); + if (err == NOERR) + { + const int ultima = _sbenemerenze->rows(); + if (ultima != 0) + { + TString16 codben = _sbenemerenze->row(ultima).get(BEN_TIPOBEN); + TTable bnz("BNZ"); + bnz.put("CODTAB",codben); + if (bnz.read() == NOERR) + benemerenza << bnz.get("S0"); + } + } + benemerenza.cut(21); + _benemerenza = benemerenza; + // salto pagina se cambio sezione o gruppo aziendale + if (_pergruppo) { - if (_codsez != "**") - printer().formfeed(); - _codsez = codsez; - _codsot = codsot; - header_sezione(codsez, codsot); + TString16 grupponew = current_cursor()->curr(LF_SOGGETTI).get(SOG_GRUPPOAZIE); + if (grupponew != _gruppoold ) + { + if (_gruppoold != "**") + footer_gruppo(); + _contatore = 0; + _gruppoold = grupponew; + header_gruppo(grupponew); + } } - } + else + { + const TString16 codsez = recsog.get(SOG_CODSEZ); + const TString16 codsot = recsog.get(SOG_CODSOT); + if ((_codsez!=codsez)||(_codsot!=codsot)) + { + if (_codsez != "**") + footer_sezione(); + _contatore = 0; + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } + } + if ((printer().rows_left()<2 && _tipostampa==sintetico) || (printer().rows_left()<6 && _tipostampa==completo)) + printer().formfeed(); + } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); + _contatore++; return TRUE; } bool TStampaPerCategorie::set_print(int m) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { - case F_ELENCO: - _tipo_stampa = elenco; + case F_SINTETICO: + _tipostampa=sintetico; + break; + case F_COMPLETO: + _tipostampa=completo; + break; + case F_SCHEDE: + _tipostampa=schede; + break; + case F_ETICHETTE: + _tipostampa=etichette; + break; + case F_CARTOLINE: + _tipostampa=cartoline; + break; + } + if (_tipostampa != undefined) + { + if (_tipostampa == cartoline) + dati_cartolina(); _codsez = "**"; _codsot = "**"; - break; - case F_ETICHETTE: - _tipo_stampa = etichette; - break; - } - if (_tipo_stampa != undefined) - { + _gruppoold = "**"; + _contatore = 0; TString80 chiave = ""; + _pergruppo = _msk->get_bool(F_PERGRUPPO); + if (_pergruppo) + { + _gruppoazie = _msk->get(F_GRUPPOAZIE); + if (_gruppoazie.empty()) + chiave << "90->GRUPPOAZIE|"; + } bool percap = _msk->get_bool(F_PERCAP); - TString16 lettera; - lettera = _msk->get(F_LETTINI); - _lettini = lettera[0]; - lettera = _msk->get(F_LETTFIN); - _lettfin = lettera[0]; + _capini = _msk->get(F_CAPINI); + _capfin = _msk->get(F_CAPFIN); + _lettini = _msk->get(F_LETTINI); + _lettini.left(15); + _lettfin = _msk->get(F_LETTFIN); + _lettfin.left(15); if (percap) - chiave = "13->CAPCOM|UPPER(90->COGNOME)|UPPER(90->NOME)"; + chiave << "90->DOM_CAP|90->DOM_CODCOM|90->DOM_CODLOC|UPPER(90->COGNOME)|UPPER(90->NOME)"; else - chiave = "UPPER(90->COGNOME)|UPPER(90->NOME)"; - _cur1 = add_cursor(new TSorted_cursor(_rel, (const char*) chiave)); - TString80 filtro = ""; - current_cursor()->setfilter((const char*) filtro, TRUE); + chiave << "UPPER(90->COGNOME)|UPPER(90->NOME)"; + TString256 filtro = ""; + if (_gruppoazie.not_empty()) + filtro.format("(90->GRUPPOAZIE == \"%s\")",(const char*)_gruppoazie); + if (_capini.not_empty()) + { + if (filtro.not_empty()) + filtro << " && "; + filtro << format("(90->DOM_CAP >= \"%s\")",(const char*)_capini); + } + if (_capfin.not_empty()) + { + if (filtro.not_empty()) + filtro << " && "; + filtro << format("(90->DOM_CAP <= \"%s\")",(const char*)_capfin); + } + bool notiziario = _msk->get_bool(F_NOTIZIARIO); + if (notiziario) + { + if (filtro.not_empty()) + filtro << " && "; + filtro << "(90->NOTIZIARIO == \"X\")"; + } + 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); + current_cursor()->setfilter(filtro, TRUE); + ((TSorted_cursor*)current_cursor())->change_order(chiave); reset_files(); add_file(LF_SOGGETTI); const TString16 catpri = _msk->get(F_CAT1); @@ -303,34 +683,94 @@ bool TStampaPerCategorie::set_print(int m) void TStampaPerCategorie::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) - { - TString sep(132); - sep = "ELENCO PER CATEGORIE"; - sep.center_just(); + TString sep(132); + if (_tipostampa==sintetico) + sep = "ELENCO SINTETICO PER CATEGORIE"; + if (_tipostampa==completo) + sep = "ELENCO COMPLETO PER CATEGORIE"; + if (_tipostampa==sintetico || _tipostampa==completo) + { + printer().footerlen(3); + + if (_stampa80) + sep.center_just(80); + else + sep.center_just(132); 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); + if (_stampa80) + set_header(2, "@73g%s", (const char*) sep); + else + set_header(2, "@110g%s", (const char*) sep); sep = ""; sep.fill('-'); set_header(3, (const char *) sep); + } + if (_tipostampa==sintetico) + { + _dencom.set_width(50); set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro"); - set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro"); + set_header(5,"@0gTessera@49gCAP/Località/Comune/Prov.@116gTelefono altro"); set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------"); - } + } + if (_tipostampa==completo) + { + _dencom.set_width(30); + if (_stampa80) + { + set_header(4,"@0g Codice@9gCognome@40gTelefono abit.@56gTipizza@66gUlt.donaz.@77gSt."); + set_header(5,"@0g Tessera@9gNome@40gTelefono lavoro@56gzione@66gTot.donaz.@77gId."); + set_header(6,"@0g Categ.@9gData di nascita@40gTelefono altro@66gData iscr."); + set_header(7,"@9gIndirizzo@40gGruppo aziend.@66gUlt.benem."); + set_header(8,"@40gProfessione"); + set_header(9,"@0g--------@9g------------------------------@40g---------------@56g---------@66g----------@77g---"); + } + else + { + set_header(4,"@0g Codice@9gCognome@35gIndirizzo@66gTelefono abit.@82gTipizza@92gStato@98gUlt.donaz."); + set_header(5,"@0g Tessera@9gNome@66gTelefono lavoro@82gzione@92gIdon.@98gTot.donaz."); + set_header(6,"@0g Categ.@9gData di nascita@66gTelefono altro@98gData iscr."); + set_header(7,"@66gGruppo aziend.@98gUlt.benem."); + set_header(8,"@66gProfessione"); + set_header(9,"@0g--------@9g-------------------------@35g------------------------------@66g---------------@82g---------@92g-----@98g----------"); + } + } } bool TStampaPerCategorie::user_create() { _rel = new TRelation(LF_SOGGETTI); - _rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCP); - _rel->add(LF_COMUNI, "COM==DOM_CODCOM"); + _rel->add(LF_DONAZ, "CODICE==CODICE", 1); + _rel->add(LF_BENEM, "CODICE==CODICE", 1); _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); - _form_eti = new TEti_percat_form("AT_ETSOG"); + _rel->add("BNZ", "CODTAB==TIPOBEN", 1, LF_BENEM, ALIAS_BNZ); + _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==DOM_CODLOC",1,0,ALIAS_LCPDOM); + _rel->add("GAZ", "CODTAB==GRUPPOAZIE",1,0,ALIAS_GAZ); + _rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,0,ALIAS_COMDOM); + _rel->add(LF_COMUNI, "COM==COMNASC",1,0,ALIAS_COMNAS); + _rel->add(LF_MEDICI, "CODMED==CODMED"); + _donaz = new TLocalisamfile(LF_DONAZ); + _benem = new TLocalisamfile(LF_BENEM); + _sbenemerenze = new TRecord_array(LF_BENEM,BEN_PROGBEN); + add_cursor(new TSorted_cursor(_rel,"SOG_CODSEZ","",3)); _msk = new TMask("at2700a"); + + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TEti_percat_form(etformato); + _stampa80 = config.get_bool("Stampa80"); + _form_car = new TEti_percat_form("ATCARTO1"); + _form_sch = new TEti_percat_form("AT_PAGIN"); return TRUE; } @@ -338,13 +778,19 @@ bool TStampaPerCategorie::user_destroy() { delete _msk; delete _rel; + delete _benem; + delete _donaz; + delete _sbenemerenze; delete _form_eti; + delete _form_car; + delete _form_sch; + return TRUE; } int at2700(int argc, char* argv[]) { TStampaPerCategorie a; - a.run(argc, argv, "Elenco per categorie"); + a.run(argc, argv, "Stampa soggetti per categorie"); return 0; } diff --git a/at/at2700a.h b/at/at2700a.h index 3026e6c4d..e78269001 100755 --- a/at/at2700a.h +++ b/at/at2700a.h @@ -1,4 +1,4 @@ -// stampa elenco soggetti per categoria +// stampa soggetti per categoria // definizione campi per maschera di selezione #define F_SEZINI 101 @@ -36,9 +36,18 @@ #define F_CATN6 311 #define F_D_CATN6 312 -#define F_PERCAP 401 -#define F_LETTINI 402 -#define F_LETTFIN 403 +#define F_PERGRUPPO 401 +#define F_GRUPPOAZIE 402 +#define F_D_GRUPPOAZIE 403 +#define F_PERCAP 404 +#define F_CAPINI 405 +#define F_CAPFIN 406 +#define F_LETTINI 407 +#define F_LETTFIN 408 +#define F_NOTIZIARIO 409 -#define F_ELENCO 501 -#define F_ETICHETTE 502 +#define F_SINTETICO 501 +#define F_COMPLETO 502 +#define F_SCHEDE 503 +#define F_ETICHETTE 504 +#define F_CARTOLINE 505 diff --git a/at/at2700a.uml b/at/at2700a.uml index e7569fd39..957f6a265 100755 --- a/at/at2700a.uml +++ b/at/at2700a.uml @@ -1,15 +1,54 @@ #include "at2700a.h" +TOOLBAR "" 0 20 0 2 + +BUTTON F_SINTETICO 9 2 +BEGIN + PROMPT -16 -11 "Sintetico" + MESSAGE EXIT,F_SINTETICO +END + +BUTTON F_COMPLETO 9 2 +BEGIN + PROMPT -26 -11 "Completo" + MESSAGE EXIT,F_COMPLETO +END + +BUTTON F_SCHEDE 9 2 +BEGIN + PROMPT -36 -11 "Schede" + MESSAGE EXIT,F_SCHEDE +END + +BUTTON F_ETICHETTE 9 2 +BEGIN + PROMPT -46 -11 "Etichette" + MESSAGE EXIT,F_ETICHETTE +END + +BUTTON F_CARTOLINE 9 2 +BEGIN + PROMPT -56 -11 "Cartoline" + MESSAGE EXIT,F_CARTOLINE +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -66 -11 "" +END + +ENDPAGE + PAGE "Stampa soggetti per categorie" -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 +67,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 +82,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 +90,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 +103,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 +122,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 +137,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 +145,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,12 +158,12 @@ END GROUPBOX DLG_NULL 77 5 BEGIN - PROMPT 1 5 "Categorie donatori" + PROMPT 1 4 "Categorie donatori" END STRING F_CAT1 2 BEGIN - PROMPT 2 6 "" + PROMPT 2 5 "" FLAGS "U" USE CTD INPUT CODTAB F_CAT1 @@ -139,13 +178,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 @@ -159,13 +198,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 @@ -179,13 +218,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 @@ -199,13 +238,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 @@ -219,13 +258,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 @@ -239,18 +278,18 @@ END STRING F_D_CAT6 30 BEGIN - PROMPT 46 8 "" + PROMPT 46 7 "" FLAGS "D" END GROUPBOX DLG_NULL 77 5 BEGIN - PROMPT 1 10 "Categorie non donatori" + PROMPT 1 9 "Categorie non donatori" END STRING F_CATN1 2 BEGIN - PROMPT 2 11 "" + PROMPT 2 10 "" FLAGS "U" USE CTN INPUT CODTAB F_CATN1 @@ -265,13 +304,13 @@ END STRING F_D_CATN1 30 BEGIN - PROMPT 8 11 "" + PROMPT 8 10 "" FLAGS "D" END STRING F_CATN2 2 BEGIN - PROMPT 2 12 "" + PROMPT 2 11 "" FLAGS "U" USE CTN INPUT CODTAB F_CATN2 @@ -285,13 +324,13 @@ END STRING F_D_CATN2 30 BEGIN - PROMPT 8 12 "" + PROMPT 8 11 "" FLAGS "D" END STRING F_CATN3 2 BEGIN - PROMPT 2 13 "" + PROMPT 2 12 "" FLAGS "U" USE CTN INPUT CODTAB F_CATN3 @@ -305,13 +344,13 @@ END STRING F_D_CATN3 30 BEGIN - PROMPT 8 13 "" + PROMPT 8 12 "" FLAGS "D" END STRING F_CATN4 2 BEGIN - PROMPT 40 11 "" + PROMPT 40 10 "" FLAGS "U" USE CTN INPUT CODTAB F_CATN4 @@ -325,13 +364,13 @@ END STRING F_D_CATN4 30 BEGIN - PROMPT 46 11 "" + PROMPT 46 10 "" FLAGS "D" END STRING F_CATN5 2 BEGIN - PROMPT 40 12 "" + PROMPT 40 11 "" FLAGS "U" USE CTN INPUT CODTAB F_CATN5 @@ -345,13 +384,13 @@ END STRING F_D_CATN5 30 BEGIN - PROMPT 46 12 "" + PROMPT 46 11 "" FLAGS "D" END STRING F_CATN6 2 BEGIN - PROMPT 40 13 "" + PROMPT 40 12 "" FLAGS "U" USE CTN INPUT CODTAB F_CATN6 @@ -365,52 +404,88 @@ END STRING F_D_CATN6 30 BEGIN - PROMPT 46 13 "" + PROMPT 46 12 "" FLAGS "D" END +GROUPBOX DLG_NULL 77 6 +BEGIN + PROMPT 1 14 "Opzioni di stampa" +END + +BOOLEAN F_PERGRUPPO +BEGIN + PROMPT 2 15 "Stampa per gruppo aziendale" + MESSAGE TRUE ENABLE,F_GRUPPOAZIE|ENABLE,F_D_GRUPPOAZIE + MESSAGE FALSE RESET,F_GRUPPOAZIE|RESET,F_D_GRUPPOAZIE|DISABLE,F_GRUPPOAZIE|DISABLE,F_D_GRUPPOAZIE +END + +STRING F_GRUPPOAZIE 4 +BEGIN + PROMPT 35 15 "" + FLAGS "U" + USE GAZ + INPUT CODTAB F_GRUPPOAZIE + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_GRUPPOAZIE CODTAB + OUTPUT F_D_GRUPPOAZIE S0 + CHECKTYPE NORMAL + WARNING "Codice gruppo aziendale non presente" + HELP "Gruppo aziendale di appartenenza" +END + +STRING F_D_GRUPPOAZIE 30 +BEGIN + PROMPT 43 15 "" + FLAGS "U" + USE GAZ KEY 2 + INPUT S0 F_D_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 + +BOOLEAN F_NOTIZIARIO +BEGIN + PROMPT 2 16 "Stampa per notiziario" +END + BOOLEAN F_PERCAP BEGIN - PROMPT 2 15 "Ordinamento per CAP" - MESSAGE TRUE DISABLE,1@ - MESSAGE FALSE ENABLE,1@ + PROMPT 2 17 "Ordinamento per CAP" + MESSAGE TRUE DISABLE,1@|ENABLE,2@ + MESSAGE FALSE ENABLE,1@|DISABLE,2@ END -STRING F_LETTINI 1 +STRINGA F_CAPINI 5 BEGIN - PROMPT 30 15 "Selezione iniziali cognome: da " + PROMPT 35 17 "Stampa solo dal cap " + GROUP 2 +END + +STRINGA F_CAPFIN 5 +BEGIN + PROMPT 61 17 "al cap " + GROUP 2 +END + +STRING F_LETTINI 15 +BEGIN + PROMPT 2 18 "Selezione iniziali cognome: da " GROUP 1 - PICTURE "!" + PICTURE "!!" END -STRING F_LETTFIN 1 +STRING F_LETTFIN 15 BEGIN - PROMPT 63 15 "a " + PROMPT 50 18 "a " GROUP 1 //VALIDATE (#F_LETTINI<=#F_LETTFIN) - PICTURE "!" -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 "" + PICTURE "!!" END ENDPAGE diff --git a/at/at2800.cpp b/at/at2800.cpp new file mode 100755 index 000000000..3256bc1fc --- /dev/null +++ b/at/at2800.cpp @@ -0,0 +1,369 @@ +#include +#include +#include + +#include "soggetti.h" +#include "sezioni.h" +#include + +#include "at2.h" +#include "at2800a.h" + +#define ALIAS_LCP 100 +#define ALIAS_TCS 200 + +enum ts { undefined = 0, elenco = 1, etichette = 2 }; + +// definizione form per etichette +class TEti_nondon_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TEti_nondon_form(): TForm() {}; + TEti_nondon_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TEti_nondon_form() {}; +}; + +class TStampaNonDon : public TPrintapp +{ + static bool filter_func_nondon(const TRelation* rel); + + TRelation* _rel; + TMask* _msk; + TEti_nondon_form* _form_eti; + TAssoc_array _categorie; + int _cur; + TParagraph_string _cognome_nome, _dencom; + TDate _data_stampa; + TDate _data; + ts _tipostampa; + TString16 _codsez, _codsot; + int _etlarghezza, _etcolonne; + bool _stampa80; + +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; } + + TStampaNonDon() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",50) {} +}; + +HIDDEN inline TStampaNonDon& app() { return (TStampaNonDon&) main_app(); } + +TCursor* TEti_nondon_form::cursor() const { return app().current_cursor(); } + +TRelation* TEti_nondon_form::relation() const { return cursor()->relation(); } + +void TStampaNonDon::filtra_sezioni() +{ + const TString16 sezini = _msk->get(F_SEZINI); + const TString16 sotini = _msk->get(F_SOTINI); + const TString16 sezfin = _msk->get(F_SEZFIN); + const TString16 sotfin = _msk->get(F_SOTFIN); + TRectype da(LF_SOGGETTI); + TRectype a(LF_SOGGETTI); + if (sezini.not_empty()) + da.put(SOG_CODSEZ, sezini); + if (sotini.not_empty()) + da.put(SOG_CODSOT, sotini); + if (sezfin.not_empty()) + a.put(SOG_CODSEZ, sezfin); + if (sotfin.not_empty()) + a.put(SOG_CODSOT, sotfin); + current_cursor()->setregion(da, a); +} + +void TStampaNonDon::set_page(int file, int cnt) +{ + switch (_tipostampa) + { + case etichette: + { + TPrint_section& corpo = _form_eti->get_body(); + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } + } + break; + case elenco: + { + if (_stampa80) + { + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(2,"@0g@8,rs", FLD(LF_SOGGETTI,SOG_TESSAVIS)); + set_row(3,"@6g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@9g#a", &_cognome_nome); + set_row(3,"@9g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@44g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(2,"@44g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(3,"@44g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + set_row(1,"@60g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + set_row(2,"@64g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON)); + set_row(1,"@74g@n", FLD(LF_SOGGETTI,SOG_TOTDON)); + set_row(4,""); + } + else + { + set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@12g#a", &_cognome_nome); + set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); + set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(1,"@132g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + set_row(2,"@49g#a", &_dencom); + set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + set_row(2,"@132g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON)); + } + } + break; + } +} + +bool TStampaNonDon::filter_func_nondon(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 ultima donazione + if (filtrato) + { + const TDate dataultdon = sog.get(SOG_DATAULTDON); + if (dataultdon.ok()) + filtrato = (dataultdon <= app()._data); + else + filtrato = FALSE; + } + return filtrato; +} + +void TStampaNonDon::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; + } + if (_stampa80) + intestazione.center_just(80); + else + intestazione.center_just(132); + set_header(1,"@0g%s", (const char*) intestazione); + return; +} + +bool TStampaNonDon::preprocess_page(int file, int counter) +{ + if (_tipostampa == elenco) + { + TRectype recsog = current_cursor()->curr(); + TString80 nome = recsog.get(SOG_COGNOME); + nome << " "; + nome << recsog.get(SOG_NOME); + _cognome_nome = nome; + TString256 localita = ""; + localita << current_cursor()->curr(-ALIAS_LCP).get("S6"); + if (localita.not_empty() && localita.ok()) + { + localita << " "; + localita << current_cursor()->curr(-ALIAS_LCP).get("S0"); + localita << " - "; + } + else + { + localita = current_cursor()->curr(LF_COMUNI).get(COM_CAPCOM); + localita << " "; + } + localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); + localita.trim(); + _dencom = localita; + + // salto pagina se cambio sezione + const TString16 codsez = recsog.get(SOG_CODSEZ); + const TString16 codsot = recsog.get(SOG_CODSOT); + if ((_codsez!=codsez)||(_codsot!=codsot)) + { + if (_codsez != "**") + printer().formfeed(); + _codsez = codsez; + _codsot = codsot; + header_sezione(codsez, codsot); + } + } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); + return TRUE; +} + +bool TStampaNonDon::set_print(int m) +{ + _tipostampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_ELENCO: + _tipostampa = elenco; + _codsez = "**"; + _codsot = "**"; + break; + case F_ETICHETTE: + _tipostampa = etichette; + break; + } + if (_tipostampa != undefined) + { + reset_files(); + add_file(LF_SOGGETTI); + filtra_sezioni(); + _data = _msk->get(F_DATA); + 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_nondon); + reset_print(); + crea_intestazione(); + return TRUE; + } + else + return FALSE; +} + +void TStampaNonDon::crea_intestazione() +{ + reset_header(); + if (_tipostampa == elenco) + { + TString sep(132); + sep = "ELENCO SOGGETTI CHE NON DONANO DAL "; + if (app()._data.ok()) + sep << _data.string(); + if (_stampa80) + sep.center_just(80); + else + sep.center_just(132); + 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. @#"; + if (_stampa80) + set_header(2, "@73g%s", (const char*) sep); + else + set_header(2, "@110g%s", (const char*) sep); + set_header(3, ""); + if (_stampa80) + { + set_header(4,"@0gCodice@9gCognome e nome@44gTelefono abit.@60gUltima don.@71gTot.don."); + set_header(5,"@0gTessera@44gTelefono lavoro"); + set_header(6,"@0gCateg.@9gNato il@44gTelefono altro"); + set_header(7,"@0g--------@9g----------------------------------@44g--------------@60g----------@71g--------"); + _cognome_nome.set_width(35); + + } + else + { + set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro@132gData u.d."); + set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro@132gTipo u.d."); + set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------@132g----------"); + _cognome_nome.set_width(25); + } + } +} + +bool TStampaNonDon::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"); + _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); + _cur = add_cursor(new TCursor(_rel, "", 3)); + _msk = new TMask("at2800a"); + + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TEti_nondon_form(etformato); + _stampa80 = config.get_bool("Stampa80"); + return TRUE; +} + +bool TStampaNonDon::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_eti; + return TRUE; +} + +int at2800(int argc, char* argv[]) +{ + TStampaNonDon a; + a.run(argc, argv, "Stampa soggetti che non donano dal ..."); + return 0; +} diff --git a/at/at2800a.h b/at/at2800a.h new file mode 100755 index 000000000..e7cc0bd48 --- /dev/null +++ b/at/at2800a.h @@ -0,0 +1,29 @@ +// stampa elenco soggetti che non donano dal ... +// definizione campi per maschera di selezione + +#define F_SEZINI 101 +#define F_D_SEZINI 102 +#define F_SOTINI 103 +#define F_D_SOTINI 104 +#define F_SEZFIN 105 +#define F_D_SEZFIN 106 +#define F_SOTFIN 107 +#define F_D_SOTFIN 108 + +#define F_CAT1 201 +#define F_D_CAT1 202 +#define F_CAT2 203 +#define F_D_CAT2 204 +#define F_CAT3 205 +#define F_D_CAT3 206 +#define F_CAT4 207 +#define F_D_CAT4 208 +#define F_CAT5 209 +#define F_D_CAT5 210 +#define F_CAT6 211 +#define F_D_CAT6 212 + +#define F_DATA 301 + +#define F_ELENCO 401 +#define F_ETICHETTE 402 diff --git a/at/at2800a.uml b/at/at2800a.uml new file mode 100755 index 000000000..f2ecc11aa --- /dev/null +++ b/at/at2800a.uml @@ -0,0 +1,280 @@ +#include "at2800a.h" + +PAGE "Stampa soggetti che non donano dal" -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 di elaborazione" +END + +DATE F_DATA +BEGIN + PROMPT 2 11 "Soggetti che non donano da " + HELP "Data massima in cui il soggetto pu• aver fatto l'ultima donazione" +END + +GROUPBOX DLG_NULL 77 4 +BEGIN + PROMPT 1 13 "Stampa" +END + +BUTTON F_ELENCO 9 2 +BEGIN + PROMPT -13 14 "Elenco" + MESSAGE EXIT,F_ELENCO +END + +BUTTON F_ETICHETTE 9 2 +BEGIN + PROMPT -23 14 "Etichette" + MESSAGE EXIT,F_ETICHETTE +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -33 14 "" +END + +ENDPAGE +ENDMASK diff --git a/at/at4.cpp b/at/at4.cpp index e819a0f00..5e1587315 100755 --- a/at/at4.cpp +++ b/at/at4.cpp @@ -4,7 +4,7 @@ #include "at4.h" -#define usage "Error - usage : %s -{0|1|2|3}" +#define usage "Error - usage : %s -{0|1|2|3|4|5|6|7}" int main(int argc,char** argv) @@ -22,6 +22,14 @@ int main(int argc,char** argv) rt = at4300(argc,argv) ; break; case 3: rt = at4400(argc,argv) ; break; + case 4: + rt = at4500(argc,argv) ; break; + case 5: + rt = at4600(argc,argv) ; break; + case 6: + rt = at4700(argc,argv) ; break; + case 7: + rt = at4800(argc,argv) ; break; default: error_box(usage, argv[0]) ; break; } diff --git a/at/at4.url b/at/at4.url index 45b548d9f..e1ddd2bd5 100755 --- a/at/at4.url +++ b/at/at4.url @@ -29,3 +29,26 @@ MENUBAR MENU_BAR(3) MENU MENU_BAR(3) SUBMENU MENU_FILE "~File" +/* at4 -4 stampa tessere associative globale */ +MENUBAR MENU_BAR(4) + +MENU MENU_BAR(4) + SUBMENU MENU_FILE "~File" + +/* at4 -5 stampa tessere associative singole */ +MENUBAR MENU_BAR(5) + +MENU MENU_BAR(5) + SUBMENU MENU_FILE "~File" + +/* at4 -6 stampa cartoline/etichette/schede/dettaglio donazioni singole */ +MENUBAR MENU_BAR(6) + +MENU MENU_BAR(6) + SUBMENU MENU_FILE "~File" + +/* at4 -6 stampa cartoline/... da codice a codice */ +MENUBAR MENU_BAR(7) + +MENU MENU_BAR(7) + SUBMENU MENU_FILE "~File" diff --git a/at/at4100.cpp b/at/at4100.cpp index 3824d3bcd..985cbf860 100755 --- a/at/at4100.cpp +++ b/at/at4100.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "soggetti.h" #include "sezioni.h" @@ -40,17 +39,17 @@ class TStampaScadenze : public TPrintapp TScadenze_form* _form_eti; TScadenze_form* _form_car; TAssoc_array _categorie; - int _cur; 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; + ts _tipostampa; TString16 _codsez, _codsot, _orario, _datacart; TString80 _invitoper, _data, _presso1, _presso2, _presso3, _presso4; TString80 _note, _intest1, _intest2, _intest3, _intest4; + int _etlarghezza, _etcolonne; static bool filter_func_scadenze(const TRelation* rel); @@ -120,20 +119,32 @@ void TStampaScadenze::filtra_sezioni() void TStampaScadenze::set_page(int file, int cnt) { // costruzione etichette - switch (_tipo_stampa) + switch (_tipostampa) { case etichette: { TPrint_section& corpo = _form_eti->get_body(); - corpo.update(); - for (int i = 0; i < corpo.height(); i++) - { - TPrintrow& riga = corpo.row(i); - set_row(i+1,riga); - } - // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta - force_setpage(TRUE); + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } } break; case cartoline: @@ -175,7 +186,7 @@ void TStampaScadenze::set_page(int file, int cnt) note.set(_note); } corpo.update(); - for (int i = 0; i < corpo.height(); i++) + for (word i = 0; i < corpo.height(); i++) { TPrintrow& riga = corpo.row(i); set_row(i+1,riga); @@ -197,6 +208,7 @@ void TStampaScadenze::set_page(int file, int cnt) set_row(1,"@94g@S", FLD(LF_SOGGETTI,SOG_IDON1)); set_row(1,"@97g@S", FLD(LF_SOGGETTI,SOG_IDON2)); set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_GRUPPOAB0)); + set_row(1,"@105g@S", FLD(LF_SOGGETTI,SOG_TELABI)); set_row(2,"@13g@S", FLD(LF_SOGGETTI,SOG_NOME)); set_row(2,"@53g@pn", FLD(LF_SOGGETTI,SOG_INTSI,"###")); @@ -205,7 +217,10 @@ void TStampaScadenze::set_page(int file, int cnt) set_row(2,"@87g@S", FLD(LF_SOGGETTI,SOG_TIPOULTID)); set_row(2,"@94g@S", FLD(LF_SOGGETTI,SOG_IDON3)); set_row(2,"@97g@S", FLD(LF_SOGGETTI,SOG_IDON4)); - set_row(2,"@100g@S", FLD(LF_SOGGETTI,SOG_RHANTID)); + set_row(2,"@100g@S", FLD(LF_SOGGETTI,SOG_RHANTID)); + set_row(2,"@105g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(3,"@105g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + //set_row(3,""); } break; } @@ -238,7 +253,7 @@ bool TStampaScadenze::filter_func_scadenze(const TRelation* rel) 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); + filtrato = ((app()._ab01.not_empty() && ab0 == app()._ab01) || (app()._ab02.not_empty() && ab0 == app()._ab02) || (app()._ab03.not_empty() && ab0 == app()._ab03)); } if (filtrato && app()._rh.not_empty()) { @@ -282,9 +297,7 @@ bool TStampaScadenze::filter_func_scadenze(const TRelation* rel) bool TStampaScadenze::preprocess_page(int file, int counter) { - switch (_tipo_stampa) - { - case elenco: + if (_tipostampa==elenco) { TRectype& recsog = current_cursor()->curr(); const TString16 codsez = recsog.get(SOG_CODSEZ); @@ -301,10 +314,14 @@ bool TStampaScadenze::preprocess_page(int file, int counter) _codsez = codsez; _codsot = codsot; header_sezione(codsez, codsot); - } - } - break; + } + else + if (printer().rows_left() < 4) + printer().formfeed(); } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); return TRUE; } @@ -354,22 +371,22 @@ void TStampaScadenze::dati_sezione(const TString16 codsez, const TString16 codso bool TStampaScadenze::set_print(int m) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCO: - _tipo_stampa = elenco; + _tipostampa = elenco; break; case F_ETICHETTE: - _tipo_stampa = etichette; + _tipostampa = etichette; break; case F_CARTOLINE: - _tipo_stampa = dati_cartoline(); + _tipostampa = dati_cartoline(); break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { _codsez = "**"; _codsot = "**"; @@ -439,7 +456,7 @@ bool TStampaScadenze::set_print(int m) void TStampaScadenze::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString sep(132); sep = "SCADENZE DI DONAZIONE "; @@ -479,13 +496,15 @@ bool TStampaScadenze::user_create() _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"); - //cursore ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); + add_cursor(new TCursor(_rel, "", 3)); _msk = new TMask("at4100a"); - _form_eti = new TScadenze_form("AT_ETSOG"); - _form_car = new TScadenze_form("AT_ETCAR"); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TScadenze_form(etformato); + _form_car = new TScadenze_form("ATCARTO1"); return TRUE; } diff --git a/at/at4200.cpp b/at/at4200.cpp index 76c7a6b41..df67deba1 100755 --- a/at/at4200.cpp +++ b/at/at4200.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include "soggetti.h" #include "sezioni.h" @@ -12,6 +11,7 @@ #define ALIAS_LCP 100 #define ALIAS_TCS 200 +#define IDON_SI "SI" enum ts { undefined = 0, elenco = 1, etichette = 2 }; @@ -38,13 +38,14 @@ class TStampaUrgenze : public TPrintapp TUrgenze_form* _form_eti; TRectype* _sangue; TAssoc_array _categorie; + TString16 _tipodon; long _giorni; - int _cur; TParagraph_string _cognome_nome, _dencom; TDate _data_stampa; TDate _dataini, _datafin; - ts _tipo_stampa; + ts _tipostampa; TString16 _codsez, _codsot; + int _etlarghezza, _etcolonne; protected: virtual bool user_create(); @@ -90,35 +91,51 @@ void TStampaUrgenze::filtra_sezioni() void TStampaUrgenze::set_page(int file, int cnt) { - switch (_tipo_stampa) - { + switch (_tipostampa) + { 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); - } - // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta - force_setpage(TRUE); + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } } break; case elenco: { + set_row(2,""); set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); set_row(1,"@9g@S", FLD(LF_SOGGETTI,SOG_CATDON)); set_row(1,"@12g#a", &_cognome_nome); set_row(1,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); - set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); - set_row(1,"@100g@S", FLD(LF_SOGGETTI,SOG_TELABI)); - set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); - set_row(2,"@49g#a", &_dencom); - set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT)); - set_row(2,"@38g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + set_row(1,"@49g@S", FLD(LF_SOGGETTI,SOG_GRUPPOAB0)); + set_row(1,"@53g@S", FLD(LF_SOGGETTI,SOG_RHANTID)); + set_row(1,"@57g@S", FLD(LF_SOGGETTI,SOG_FENOTIPORH)); + set_row(1,"@64g@S", FLD(LF_SOGGETTI,SOG_KELL)); + set_row(1,"@68g@S", FLD(LF_SOGGETTI,SOG_DU)); + set_row(1,"@72g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + set_row(1,"@83g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON)); + set_row(1,"@86g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(1,"@101g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT)); } break; } @@ -135,6 +152,32 @@ bool TStampaUrgenze::filter_func_urgenze(const TRelation* rel) const TString16 cat = sog.get(SOG_CATDON); filtrato = categorie.is_key((const char*) cat); } + // filtro per idoneita al tipo donazione + if (filtrato) + { + filtrato = FALSE; + TString16 idon = sog.get(SOG_IDON1); + if (idon == app()._tipodon) + filtrato = TRUE; + else + { + TString16 idon = sog.get(SOG_IDON2); + if (idon == app()._tipodon) + filtrato = TRUE; + else + { + TString16 idon = sog.get(SOG_IDON3); + if (idon == app()._tipodon) + filtrato = TRUE; + else + { + TString16 idon = sog.get(SOG_IDON4); + if (idon == app()._tipodon) + filtrato = TRUE; + } + } + } + } // filtro per tipizzazione if (filtrato) { @@ -145,18 +188,35 @@ bool TStampaUrgenze::filter_func_urgenze(const TRelation* rel) 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; + + long giorni; + if (giorni_sez == 0) + giorni = app()._giorni; + else + 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); + if (giorni==0) + { + TDate datapros; + if (app()._tipodon == IDON_SI) + datapros = sog.get(SOG_DATAPROSSI); + else + datapros = sog.get(SOG_DATAPROSAF); + filtrato = (datapros <= data); + } + else + { + data = data - (const long) giorni; + const TDate dataultdon = sog.get(SOG_DATAULTDON); + filtrato = (dataultdon <= data); + } } return filtrato; } bool TStampaUrgenze::preprocess_page(int file, int counter) { - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TRectype& recsog = current_cursor()->curr(); TString80 nome = recsog.get(SOG_COGNOME); @@ -190,7 +250,13 @@ bool TStampaUrgenze::preprocess_page(int file, int counter) _codsot = codsot; header_sezione(codsez, codsot); } + else + if (printer().rows_left() < 2) + printer().formfeed(); } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); return TRUE; } @@ -217,21 +283,21 @@ void TStampaUrgenze::header_sezione(const TString16 codsez, const TString16 cods bool TStampaUrgenze::set_print(int) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCO: - _tipo_stampa = elenco; + _tipostampa = elenco; _codsez = "**"; _codsot = "**"; break; case F_ETICHETTE: - _tipo_stampa = etichette; + _tipostampa = etichette; break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { reset_files(); add_file(LF_SOGGETTI); @@ -273,6 +339,7 @@ bool TStampaUrgenze::set_print(int) if ((du.ok()) && (du.not_empty())) _sangue->put(SOG_DU, du); _giorni = _msk->get_long(F_GIORNI); + _tipodon = _msk->get(F_TIPODON); // filtra solo idonei current_cursor()->setfilter("TCS->S6 == \"I\"", TRUE); // filtra per categorie, tipizzazione e data donazione @@ -288,10 +355,11 @@ bool TStampaUrgenze::set_print(int) void TStampaUrgenze::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString sep(132); - sep = "CONVOCAZIONI URGENTI"; + sep = "CONVOCAZIONI URGENTI per "; + sep << _tipodon; sep.center_just(); set_header(2, "@0g%s", (const char*) sep); TString16 data_stampa = _data_stampa.string(); @@ -302,9 +370,8 @@ void TStampaUrgenze::crea_intestazione() sep = ""; sep.fill('-'); set_header(3, (const char *) sep); - set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro"); - set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro"); - set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------"); + set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gGr.@53gRh@57gFen.Rh@64gKellDu@72gUlt. donaz.@86gTelefono abit.@101gTelefono lavoro@116gTelefono altro"); + set_header(5,"@0g--------@9g--@12g-------------------------@38g----------@49g--- --- ------ --- ---@72g---------- --@86g--------------@101g--------------@116g--------------"); } } @@ -314,13 +381,16 @@ bool TStampaUrgenze::user_create() _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"); - // ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); - _form_eti = new TUrgenze_form("AT_ETSOG"); + add_cursor(new TCursor(_rel, "", 3)); _msk = new TMask("at4200a"); _sangue = new TRectype(LF_SOGGETTI); + + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TUrgenze_form(etformato); return TRUE; } diff --git a/at/at4200a.h b/at/at4200a.h index 35a136f69..954926673 100755 --- a/at/at4200a.h +++ b/at/at4200a.h @@ -24,14 +24,14 @@ #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_TIPODON 301 +#define F_GRUPPOAB0 302 +#define F_RHANTID 303 +#define F_KELL 304 +#define F_FENOTIPORH 305 +#define F_DU 306 #define F_GIORNI 307 +#define F_D_TIPODON 308 #define F_ELENCO 401 #define F_ETICHETTE 402 diff --git a/at/at4200a.uml b/at/at4200a.uml index d643699b7..60a1fdadf 100755 --- a/at/at4200a.uml +++ b/at/at4200a.uml @@ -1,6 +1,6 @@ #include "at4200a.h" -PAGE "Stampa Urgenze" -1 -1 78 20 +PAGE "Urgenze" -1 -1 78 20 GROUPBOX DLG_NULL 77 4 BEGIN @@ -245,14 +245,30 @@ BEGIN END -GROUPBOX DLG_NULL 77 3 +GROUPBOX DLG_NULL 77 4 BEGIN PROMPT 1 10 "Dati gruppo-ematici richiesti" END +STRING F_TIPODON 2 +BEGIN + PROMPT 2 11 "Tipo donazione " + FLAGS "U" + USE TDN + INPUT CODTAB F_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 tipo donazione non presente" + HELP "Tipo donazione" +END + LISTBOX F_GRUPPOAB0 4 BEGIN - PROMPT 2 11 "Gruppo AB0 " + PROMPT 2 12 "Gruppo AB0 " FIELD GRUPPOAB0 FLAGS "U" #include "gruppo.h" @@ -260,7 +276,7 @@ END LISTBOX F_RHANTID 3 BEGIN - PROMPT 22 11 "Rh/AntiD " + PROMPT 22 12 "Rh/AntiD " FIELD RHANTID FLAGS "U" #include "rh.h" @@ -268,13 +284,13 @@ END STRING F_FENOTIPORH 6 BEGIN - PROMPT 39 11 "Fen.Rh " + PROMPT 39 12 "Fen.Rh " FIELD FENOTIPORH END LISTBOX F_KELL 3 BEGIN - PROMPT 55 11 "Kell " + PROMPT 55 12 "Kell " FIELD KELL FLAGS "U" #include "rh.h" @@ -282,53 +298,58 @@ END LISTBOX F_DU 3 BEGIN - PROMPT 68 11 "Du " + PROMPT 68 12 "Du " FIELD DU FLAGS "U" #include "rh.h" END +STRING F_D_TIPODON 25 +BEGIN + PROMPT 24 11 "" + FLAGS "D" +END GROUPBOX DLG_NULL 77 3 BEGIN - PROMPT 1 13 "Richieste" + PROMPT 1 14 "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_NUMERO 3 +//BEGIN +// PROMPT 2 14 "Numero 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 + PROMPT 2 15 "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" + PROMPT 1 17 "Stampa" END BUTTON F_ELENCO 9 2 BEGIN - PROMPT -13 17 "Elenco" + PROMPT -13 18 "Elenco" MESSAGE EXIT,F_ELENCO END BUTTON F_ETICHETTE 9 2 BEGIN - PROMPT -23 17 "Etichette" + PROMPT -23 18 "Etichette" MESSAGE EXIT,F_ETICHETTE END BUTTON DLG_QUIT 9 2 BEGIN - PROMPT -33 17 "" + PROMPT -33 18 "" END ENDPAGE diff --git a/at/at4300.cpp b/at/at4300.cpp index 5a59a0ee2..98df7ab70 100755 --- a/at/at4300.cpp +++ b/at/at4300.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "soggetti.h" #include "sezioni.h" @@ -12,9 +11,9 @@ #include "at4100b.h" #include "at4100c.h" -#define ALIAS_TABCTD 100 // alias tabella categorie donatori +#define ALIAS_TABLCP 100 // alias tabella località postali #define ALIAS_TABTCS 200 // alias tabella tipi/esiti controlli sanitari -#define ALIAS_TABLCP 300 // alias tabella località postali +#define ALIAS_TABCTD 700 // alias tabella categorie donatori #define STATO_IDONEO 'I' // IDONEITA' #define STATO_FINESO 'F' // FINE SOSPENSIONE @@ -43,18 +42,18 @@ class TStampaConvocazioni : public TPrintapp TMask* _msk; TConv_form* _form_eti; // per etichette TConv_form* _form_car; // per cartoline - int _cur; TDate _data_stampa; - ts _tipo_stampa; + ts _tipostampa; TString16 _codsez, _codsot, _orario, _datacart; TString80 _invitoper, _data, _presso1, _presso2, _presso3, _presso4; TString80 _note, _intest1, _intest2, _intest3, _intest4; TDate _dataconv; bool _usasez; - long _intmin, _intmax; + long _intmin, _intmax, _intmincon; TParagraph_string _cognome_nome; int _numconv; bool _definitiva; + int _etlarghezza, _etcolonne; protected: virtual bool user_create(); @@ -101,7 +100,7 @@ ts TStampaConvocazioni::dati_cartoline() void TStampaConvocazioni::set_page(int file, int cnt) { - if (_tipo_stampa == elencocon || _tipo_stampa == elencorit) + if (_tipostampa==elencocon || _tipostampa==elencorit) { reset_row(1); reset_row(2); @@ -124,22 +123,37 @@ void TStampaConvocazioni::set_page(int file, int cnt) set_row(2,"@71g@ld",FLD(LF_SOGGETTI,SOG_DATAULTID)); set_row(2,"@82g@S", FLD(LF_SOGGETTI,SOG_TIPOULTID)); set_row(2,"@85g@pn",FLD(LF_SOGGETTI,SOG_INTSI,"###")); + set_row(1,"@96g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(1,"@111g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + set_row(2,"@96g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); set_row(3,""); } - if (_tipo_stampa == etichette) + if (_tipostampa==etichette) { TPrint_section& corpo = _form_eti->get_body(); - corpo.reset(); - corpo.update(); - for (int i = 0; i < corpo.items(); i++) - { - TPrintrow& riga = corpo.row(i); - set_row(i+1,"%s",riga.row()); - } - force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta - } - if (_tipo_stampa == cartoline) + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } + } + if (_tipostampa==cartoline) { TPrint_section& corpo = _form_car->get_body(); const TString16 codsez = current_cursor()->curr().get(SOG_CODSEZ); @@ -178,7 +192,7 @@ void TStampaConvocazioni::set_page(int file, int cnt) note.set(_note); } corpo.update(); - for (int i = 0; i < corpo.height(); i++) + for (word i = 0; i < corpo.height(); i++) { TPrintrow& riga = corpo.row(i); set_row(i+1,riga); @@ -216,16 +230,30 @@ bool TStampaConvocazioni::filter_func_conv (const TRelation* rel) const char stato = rel->curr(-ALIAS_TABTCS).get_char("S6"); const bool dimesso = rel->curr(-ALIAS_TABCTD).get_char("B0"); TDate dataconv = sog.curr().get_date(SOG_DATACONV); + const int totdon = sog.get_int(SOG_TOTDON); + const int numconv = sog.get_int(SOG_NUMCONV); if (dataprossi.ok()) { // intervallo tra data convocazione e data pross. si long intconvsi = app()._dataconv - dataprossi; // intervallo tra data convocazione e data ultima convocazione long intultconvsi = app()._dataconv - dataconv; - if ((intconvsi >= 0) && (intconvsi < app()._intmax) && (intultconvsi > app()._intmin) && ((stato == STATO_IDONEO) || (stato == STATO_FINESO)) && (dimesso != 'X')) - return TRUE; - else - return FALSE; + // verifico se si tratta di soggetto nuovo, con 0 donazioni + if ((totdon == 0) && (numconv == 0)) + { + const TDate dataultid = sog.get_date(SOG_DATAULTID); + long intervallo = app()._dataconv - dataultid; + // convoco solo se è passato l'intervallo minimo di convocazione + if (intervallo >= app()._intmincon) + return TRUE; + else + return FALSE; + } + else + if ((intconvsi >= 0) && (intconvsi < app()._intmax) && (intultconvsi > app()._intmin) && ((stato == STATO_IDONEO) || (stato == STATO_FINESO)) && (dimesso != 'X')) + return TRUE; + else + return FALSE; } else // non ha la data di prossima donazione SI @@ -234,7 +262,7 @@ bool TStampaConvocazioni::filter_func_conv (const TRelation* rel) bool TStampaConvocazioni::preprocess_page(int file, int counter) { - if (_tipo_stampa == elencocon || _tipo_stampa == elencorit) + if (_tipostampa==elencocon || _tipostampa==elencorit) { TRectype& recsog = current_cursor()->curr(); const TString16 codsez = recsog.get(SOG_CODSEZ); @@ -256,6 +284,9 @@ bool TStampaConvocazioni::preprocess_page(int file, int counter) if (printer().rows_left() < 3) printer().formfeed(); } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); TRectype& recsog = current_cursor()->curr(); TString80 nome = recsog.get(SOG_COGNOME); nome << " "; @@ -271,13 +302,13 @@ bool TStampaConvocazioni::preprocess_page(int file, int counter) } if (_numconv > 4) { - if (_tipo_stampa == cartoline || _tipo_stampa == etichette || _tipo_stampa == elencocon) + if (_tipostampa==cartoline || _tipostampa==etichette || _tipostampa==elencocon) return FALSE; else return TRUE; } else - if (_tipo_stampa == elencorit) + if (_tipostampa==elencorit) return FALSE; else return TRUE; @@ -326,25 +357,25 @@ void TStampaConvocazioni::dati_sezione(const TString16 codsez, const TString16 c bool TStampaConvocazioni::set_print(int) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCOCON: - _tipo_stampa = elencocon; + _tipostampa = elencocon; break; case F_ELENCORIT: - _tipo_stampa = elencorit; + _tipostampa = elencorit; break; case F_ETICHETTE: - _tipo_stampa = etichette; + _tipostampa = etichette; break; case F_CARTOLINE: - _tipo_stampa = dati_cartoline(); + _tipostampa = dati_cartoline(); break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { _codsez = "**"; _codsot = "**"; @@ -353,6 +384,7 @@ bool TStampaConvocazioni::set_print(int) _dataconv = _msk->get(F_DATACONV); _intmin = _msk->get_int(F_INTMIN); _intmax = _msk->get_int(F_INTMAX); + _intmincon = _msk->get_int(F_INTMINCON); _definitiva = _msk->get_bool(F_DEFINITIVA); // filtro per sezioni selezionati filtra_sezioni(); @@ -375,10 +407,10 @@ bool TStampaConvocazioni::set_print(int) void TStampaConvocazioni::crea_intestazione() { reset_header(); - if (_tipo_stampa == elencocon || _tipo_stampa == elencorit) + if (_tipostampa==elencocon || _tipostampa==elencorit) { TString sep(132); - if (_tipo_stampa == elencocon) + if (_tipostampa==elencocon) sep = "ELENCO CONVOCATI elaborato il "; else sep = "ELENCO RITARDATARI elaborato il "; @@ -393,9 +425,9 @@ void TStampaConvocazioni::crea_intestazione() sep = ""; sep.fill('-'); set_header(3, (const char *) sep); - set_header(5,"@0gCod.CL@7gNC@11gCognome e nome@37gNato il@48gGr.@52gRh@55gKell@60gFen.Rh@67gDu@71gUltima donaz.@85gData pros."); - set_header(6,"@0gTess.@37gCat.don@71gUltima idon.@85gInt.SI"); - set_header(7,"@0g------@7g---@11g-------------------------@37g----------@48g--- --- --- ------ --@71g---------- --@85g---------- --@83g----------"); + set_header(5,"@0gCod.CL@7gNC@11gCognome e nome@37gNato il@48gGr.@52gRh@55gKell@60gFen.Rh@67gDu@71gUltima donaz.@85gData pros.@96gTel. abitaz.@111gTelefono altro"); + set_header(6,"@0gTess.@37gCat.don@71gUltima idon.@85gInt.SI@96gTelefono lav."); + set_header(7,"@0g------@7g---@11g-------------------------@37g----------@48g--- --- --- ------ --@71g---------- --@85g---------- --@96g--------------@111g---------------"); } } @@ -407,11 +439,14 @@ bool TStampaConvocazioni::user_create() _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"); - // ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); + add_cursor(new TCursor(_rel, "", 3)); _msk = new TMask("at4300a"); - _form_eti = new TConv_form("AT_ETSOG"); - _form_car = new TConv_form("AT_CARTO"); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TConv_form(etformato); + _form_car = new TConv_form("ATCARTO1"); return TRUE; } diff --git a/at/at4300a.h b/at/at4300a.h index 897f952df..5cb27fa7d 100755 --- a/at/at4300a.h +++ b/at/at4300a.h @@ -11,7 +11,8 @@ #define F_DATACONV 109 #define F_INTMIN 110 #define F_INTMAX 111 -#define F_DEFINITIVA 112 +#define F_INTMINCON 112 +#define F_DEFINITIVA 113 #define F_ELENCOCON 401 #define F_ELENCORIT 402 #define F_ETICHETTE 403 diff --git a/at/at4300a.uml b/at/at4300a.uml index 695806024..9d02c081b 100755 --- a/at/at4300a.uml +++ b/at/at4300a.uml @@ -117,7 +117,7 @@ BEGIN HELP "Sottogruppo finale" END -GROUPBOX DLG_NULL 77 6 +GROUPBOX DLG_NULL 77 7 BEGIN PROMPT 1 4 "Opzioni di convocazione" END @@ -125,58 +125,63 @@ END DATE F_DATACONV BEGIN - PROMPT 2 5 "Data elaborazione " + PROMPT 2 5 "Data elaborazione " HELP "Data elaborazione" VALIDATE NOT_EMPTY_FUNC END NUMBER F_INTMIN 4 BEGIN - PROMPT 2 6 "Intervallo minimo " + PROMPT 2 6 "Intervallo minimo avvisi " END NUMBER F_INTMAX 4 BEGIN - PROMPT 2 7 "Intervallo massimo " + PROMPT 2 7 "Intervallo massimo avvisi " +END + +NUMBER F_INTMINCON 4 +BEGIN + PROMPT 2 8 "Intervallo minimo convoc. " END BOOLEAN F_DEFINITIVA BEGIN - PROMPT 2 8 "Registra stampa convocazione su archivio soggetti" + PROMPT 2 9 "Registra stampa convocazione su archivio soggetti" END GROUPBOX DLG_NULL 77 4 BEGIN - PROMPT 1 11 "Stampa" + PROMPT 1 12 "Stampa" END BUTTON F_ELENCOCON 18 2 BEGIN - PROMPT 2 12 "Elenco convocati" + PROMPT 2 13 "Elenco convocati" MESSAGE EXIT,F_ELENCOCON END BUTTON F_ELENCORIT 18 2 BEGIN - PROMPT 22 12 "Elenco ritardatari" + PROMPT 22 13 "Elenco ritardatari" MESSAGE EXIT,F_ELENCORIT END BUTTON F_ETICHETTE 9 2 BEGIN - PROMPT 43 12 "Etichette" + PROMPT 43 13 "Etichette" MESSAGE EXIT,F_ETICHETTE END BUTTON F_CARTOLINE 9 2 BEGIN - PROMPT 54 12 "Cartoline" + PROMPT 54 13 "Cartoline" MESSAGE EXIT,F_CARTOLINE END BUTTON DLG_QUIT 9 2 BEGIN - PROMPT 66 12 "" + PROMPT 66 13 "" END ENDPAGE diff --git a/at/at4400.cpp b/at/at4400.cpp index 6e633c6ac..32ed2d4be 100755 --- a/at/at4400.cpp +++ b/at/at4400.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include "soggetti.h" #include "sezioni.h" @@ -16,7 +15,7 @@ #include "at4100c.h" #define ALIAS_LCP 100 -#define ALIAS_LDN 200 +#define ALIAS_LDN 400 enum ts { undefined = 0, elenco = 1, etichette = 2, cartoline = 3 }; @@ -40,7 +39,6 @@ class TConvocazioniPerSezione : public TPrintapp TMask* _msk; TStConvoc_form* _form_eti; TStConvoc_form* _form_car; - int _cur; TParagraph_string _cognome_nome; TDate _data_stampa; @@ -52,8 +50,9 @@ class TConvocazioniPerSezione : public TPrintapp TString80 _invitoper, _data, _presso1, _presso2, _presso3, _presso4; TString80 _note, _intest1, _intest2, _intest3, _intest4; bool _usasez; - ts _tipo_stampa; + ts _tipostampa; int _contxsez; + int _etlarghezza, _etcolonne; //static bool filter_func_stconvoc(const TRelation* rel); @@ -105,19 +104,32 @@ ts TConvocazioniPerSezione::dati_cartoline() void TConvocazioniPerSezione::set_page(int file, int cnt) { // costruzione etichette - switch (_tipo_stampa) + switch (_tipostampa) { case etichette: { TPrint_section& corpo = _form_eti->get_body(); - corpo.update(); - for (int i = 0; i < corpo.height(); i++) - { - TPrintrow& riga = corpo.row(i); - set_row(i+1,riga); - } - force_setpage(TRUE); // serve perchè alla prossima etichetta rifaccia la setpage - // altrimenti stampa sempre la stessa etichetta + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } } break; case cartoline: @@ -159,7 +171,7 @@ void TConvocazioniPerSezione::set_page(int file, int cnt) note.set(_note); } corpo.update(); - for (int i = 0; i < corpo.height(); i++) + for (word i = 0; i < corpo.height(); i++) { TPrintrow& riga = corpo.row(i); set_row(i+1,riga); @@ -191,9 +203,7 @@ print_action TConvocazioniPerSezione::postprocess_print(int file, int counter) bool TConvocazioniPerSezione::preprocess_page(int file, int counter) { - switch (_tipo_stampa) - { - case elenco: + if (_tipostampa==elenco) { TString80 nome = current_cursor()->curr(LF_SOGGETTI).get(SOG_COGNOME); nome << " "; @@ -214,8 +224,9 @@ bool TConvocazioniPerSezione::preprocess_page(int file, int counter) } _contxsez++; } - break; - } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); return TRUE; } @@ -285,22 +296,22 @@ void TConvocazioniPerSezione::dati_sezione(const TString16 codsez, const TString bool TConvocazioniPerSezione::set_print(int m) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCO: - _tipo_stampa = elenco; + _tipostampa = elenco; break; case F_ETICHETTE: - _tipo_stampa = etichette; + _tipostampa = etichette; break; case F_CARTOLINE: - _tipo_stampa = dati_cartoline(); + _tipostampa = dati_cartoline(); break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { _dataini = _msk->get(F_DATAINI); _datafin = _msk->get(F_DATAFIN); @@ -373,7 +384,7 @@ bool TConvocazioniPerSezione::set_print(int m) void TConvocazioniPerSezione::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString sep(80); sep = "ELENCO CONVOCATI"; @@ -422,13 +433,15 @@ bool TConvocazioniPerSezione::user_create() _rel->add(LF_SOGGETTI, "CODICE==CODICE"); _rel->add(LF_CONVOC, "NUMERO==NUMERO"); _rel->add("LCP", "CODTAB==DOM_CODLOC",1,LF_SOGGETTI,ALIAS_LCP); - //_rel->add("LDN", "CODTAB==COV_PUNTO",1,LF_CONVOC,ALIAS_LDN); _rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,LF_SOGGETTI); - // per stampare la denominazione della sezione nell'intestazione _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT",1,LF_SOGGETTI); _msk = new TMask("at4400a"); - _form_eti = new TStConvoc_form("AT_ETSOG"); - _form_car = new TStConvoc_form("AT_ETCAR"); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TStConvoc_form(etformato); + _form_car = new TStConvoc_form("ATCARTO1"); return TRUE; } diff --git a/at/at4400a.uml b/at/at4400a.uml index d50e0a75b..3608b56c3 100755 --- a/at/at4400a.uml +++ b/at/at4400a.uml @@ -73,7 +73,7 @@ BEGIN OUTPUT F_DENSOT DENSOT CHECKTYPE SEARCH HELP "Codice sezione da convocare" - ADD MASK at0700a + ADD MASK batbsez END STRING F_DENSEZ 25 @@ -89,7 +89,7 @@ BEGIN COPY OUTPUT F_CODSEZ CHECKTYPE NORMAL HELP "Denominazione sezione da convocare" - ADD MASK at0700a + ADD MASK batbsez END STRING F_CODSOT 2 @@ -98,7 +98,7 @@ BEGIN COPY ALL F_CODSEZ CHECKTYPE NORMAL HELP "Codice sottogruppo da convocare" - ADD MASK at0700a + ADD MASK batbsez END STRING F_DENSOT 25 @@ -112,7 +112,7 @@ BEGIN COPY OUTPUT F_DENSEZ CHECKTYPE NORMAL HELP "Sottogruppo da convocare" - ADD MASK at0700a + ADD MASK batbsez END BOOLEAN F_AGGIORNA diff --git a/at/at4500.cpp b/at/at4500.cpp new file mode 100755 index 000000000..2bcb5d237 --- /dev/null +++ b/at/at4500.cpp @@ -0,0 +1,243 @@ +#include +#include +#include +#include +#include + +#include "soggetti.h" +#include "sezioni.h" +#include + +#include "at4.h" +#include "at4500a.h" + +#include "at4500.h" +//#define ALIAS_COMRES 300 +//#define ALIAS_COMNAS 400 +//#define ALIAS_CTN1 500 +//#define ALIAS_CTN2 600 +#define ALIAS_LCP 100 +//#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 TStampaTessere : public TPrintapp +{ + TRelation* _rel; + TMask* _msk; + TAssoc_array _categorie; + TTessere_form* _form_pag; + int _numdon; + bool _aggiorna; + int _cur; + TDate _data_stampa; + TString _riepilogodon; + + static bool filter_func_auto(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(); + TMask& app_mask() { return *_msk; } + TStampaTessere() : _data_stampa(TODAY), _riepilogodon(35) {} +}; + +HIDDEN inline TStampaTessere& app() { return (TStampaTessere&) 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 TStampaTessere::filtra_sezioni() +{ + const TString16 sezini = _msk->get(F_SEZINI); + const TString16 sotini = _msk->get(F_SOTINI); + const TString16 sezfin = _msk->get(F_SEZFIN); + const TString16 sotfin = _msk->get(F_SOTFIN); + TRectype da(LF_SOGGETTI); + TRectype a(LF_SOGGETTI); + if (sezini.not_empty()) + da.put(SOG_CODSEZ, sezini); + if (sotini.not_empty()) + da.put(SOG_CODSOT, sotini); + if (sezfin.not_empty()) + a.put(SOG_CODSEZ, sezfin); + if (sotfin.not_empty()) + a.put(SOG_CODSOT, sotfin); + current_cursor()->setregion(da, a); +} + +void TStampaTessere::set_page(int file, int cnt) +{ + TPrint_section& corpo = _form_pag->get_body(); + corpo.reset(); + TForm_item& rigadon = corpo.find_field(TES_RIGADON1); + rigadon.set(_riepilogodon); + corpo.update(); + for (word 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 +} + +bool TStampaTessere::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 TStampaTessere::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 fino al "; + _riepilogodon << dataultima.string(); + _riepilogodon << " n."; + _riepilogodon << totdon; + } + if (_aggiorna) + { + sogg.put(SOG_T_STAMPATA,TRUE); + sogg.rewrite(); + } + return TRUE; +} + +bool TStampaTessere::set_print(int m) +{ + KEY tasto; + tasto = _msk->run(); + if (tasto == K_ENTER) + { + reset_files(); + add_file(LF_SOGGETTI); + 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 TStampaTessere::user_create() +{ + _rel = new TRelation(LF_SOGGETTI); + //_rel->add(LF_COMUNI, "COM==COMNASC",1,0,ALIAS_COMNAS); + _rel->add(LF_COMUNI, "COM==DOM_CODCOM"); + _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); + //cursore ordinamento per sezione+sottogruppo+cognome+nome + _cur = add_cursor(new TCursor(_rel, "", 3)); + _msk = new TMask("at4500a"); + _msk->set_handler(F_PRINTER, printer_handler); + _form_pag = new TTessere_form("ATTESSER"); + TString16 config; + config << "TESSERE"; + printer().read_configuration(config); + return TRUE; +} + +bool TStampaTessere::user_destroy() +{ + delete _msk; + delete _rel; + delete _form_pag; + printer().read_configuration(); + return TRUE; +} + +int at4500(int argc, char* argv[]) +{ + TStampaTessere a; + a.run(argc, argv, "Stampa tessere associative"); + return 0; +} diff --git a/at/at4500.h b/at/at4500.h new file mode 100755 index 000000000..a7002293b --- /dev/null +++ b/at/at4500.h @@ -0,0 +1,7 @@ +// stampa tessere associative +// definizione campi del form + +#define TES_RIGADON1 25 +#define TES_RIGADON2 26 +#define TES_RIGADON3 27 +#define TES_RIGADON4 28 \ No newline at end of file diff --git a/at/at4500a.h b/at/at4500a.h new file mode 100755 index 000000000..48cb4fc13 --- /dev/null +++ b/at/at4500a.h @@ -0,0 +1,30 @@ +// 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_PRINTER 401 + diff --git a/at/at4500a.uml b/at/at4500a.uml new file mode 100755 index 000000000..b2b84842e --- /dev/null +++ b/at/at4500a.uml @@ -0,0 +1,283 @@ +#include "at4500a.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 "Stampa tessere associative" -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 + +ENDMASK diff --git a/at/at4600.cpp b/at/at4600.cpp new file mode 100755 index 000000000..ca3b37fe9 --- /dev/null +++ b/at/at4600.cpp @@ -0,0 +1,333 @@ +#include +#include +#include +#include +#include + +#include "soggetti.h" +#include "sezioni.h" +#include + +#include "at4.h" +#include "at4600a.h" + +#include "at4500.h" +#define ALIAS_COMDOM 501 +#define ALIAS_COMNAS 500 +#define ALIAS_LCP 100 + +// definizione form per tessere associative +class TTessereS_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TTessereS_form(): TForm() {}; + TTessereS_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TTessereS_form() {}; +}; + +class TStampaTessereS : public TPrintapp +{ + TRelation* _rel; + TIsamtempfile* _sogtmp; + TMask* _msk; + TTessereS_form* _form_pag; + TAssoc_array _asoggetti; + int _numdon; + bool _aggiorna; + int _cur; + TDate _data_stampa; + TString _riepilogodon; + +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); + + static void add_rows_soggetti(TSheet_field& s, int count = 10, int start = 1); + static bool soggetti_notify(TSheet_field& s, int r, KEY k); + static bool nome_handler(TMask_field& f, KEY k); + static bool codice_handler(TMask_field& f, KEY k); + +public: + void filtra_codici(); + TMask& app_mask() { return *_msk; } + TStampaTessereS() : _data_stampa(TODAY), _riepilogodon(35) {} +}; + +HIDDEN inline TStampaTessereS& app() { return (TStampaTessereS&) main_app(); } + +TCursor* TTessereS_form::cursor() const { return app().current_cursor(); } + +TRelation* TTessereS_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 TStampaTessereS::add_rows_soggetti(TSheet_field& s, int count, int start) +{ + if (start == 1) + s.destroy(); + for (int r=start; rfield(F_SOGGETTI); + for (int r=0; r < s.items(); r++) + { + TToken_string& row = s.row(r); + const long codice = row.get_long(0); + if (codice != 0) + { + TLocalisamfile soggetti(LF_SOGGETTI); + soggetti.setkey(1); + soggetti.zero(); + soggetti.put(SOG_CODICE,codice); + if (soggetti.read() == NOERR) + _sogtmp->write(soggetti.curr()); + } + } +} + +void TStampaTessereS::set_page(int file, int cnt) +{ + TPrint_section& corpo = _form_pag->get_body(); + corpo.update(); + //TForm_item& rigadon = corpo.find_field(TES_RIGADON1); + //rigadon.set(_riepilogodon); + for (word 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 +} + +bool TStampaTessereS::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 fino al "; + _riepilogodon << dataultima.string(); + _riepilogodon << " n."; + _riepilogodon << totdon; + } + if (_aggiorna) + { + sogg.put(SOG_T_STAMPATA,TRUE); + sogg.rewrite(); + } + current_cursor()->file().remove(); + return TRUE; +} + +bool TStampaTessereS::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,50); + 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_AGGIORNA); + filtra_codici(); + } + reset_print(); + return TRUE; + } + else + return FALSE; +} + +bool TStampaTessereS::user_create() +{ + _sogtmp = new TIsamtempfile(LF_SOGGETTI,NULL,TRUE,TRUE); + _rel = new TRelation(_sogtmp); + _rel->add(LF_SOGGETTI, "CODICE==CODICE"); + _rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,0,ALIAS_COMDOM); + _rel->add(LF_COMUNI, "COM==COMNASC",1,0,ALIAS_COMNAS); + _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"); + //cursore ordinamento per sezione+sottogruppo+cognome+nome + _cur = add_cursor(new TCursor(_rel, "", 1)); + _msk = new TMask("at4600a"); + _msk->set_handler(F_PRINTER, printer_handler); + _form_pag = new TTessereS_form("ATTESSER"); + 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_CODICE,codice_handler); + TString16 config; + config << "TESSERE"; + printer().read_configuration(config); + return TRUE; +} + +bool TStampaTessereS::soggetti_notify(TSheet_field& s, int r, KEY k) +{ + bool ok = TRUE; + switch (k) + { + case K_INS: + // richiesta inserimento riga + break; + case K_DEL: + case K_CTRL+K_DEL: + // avvenuta cancellazione riga + break; + case K_SPACE: + // inizio modifica riga + break; + case K_TAB: + // entrata riga + { + static bool entering = TRUE; + if (entering) + { + entering = FALSE; + if ((r == s.items()-1) && (r == s.first_empty())) + app().add_rows_soggetti(s,10,r+1); + TToken_string& row = s.row(r); + if (row.empty_items()) + s.select(r); + entering = TRUE; + } + } + 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")) + s.sheet_mask().field(F_S_NOME).set_focusdirty(); + } + } + break; + } + return ok; +} + +bool TStampaTessereS::nome_handler(TMask_field& f, KEY k) +{ + bool ok = TRUE; + if (f.to_check(k)) + { + TMask& m = f.mask(); + long codsog = m.get_long(F_S_CODICE); + if (codsog == 0) + f.on_key(K_F9); + } + return ok; +} + +bool TStampaTessereS::codice_handler(TMask_field& f, KEY k) +{ + bool ok = TRUE; + if (f.to_check(k)) + { + TMask& m = f.mask(); + long codsog = m.get_long(F_S_CODICE); + if (codsog != 0) + { + TLocalisamfile sog(LF_SOGGETTI); + sog.setkey(1); + sog.zero(); + sog.put(SOG_CODICE, codsog); + int err = sog.read(); + if (err == NOERR) + { + m.set(F_S_COGNOME, sog.get(SOG_COGNOME)); + m.set(F_S_NOME, sog.get(SOG_NOME)); + m.set(F_S_DATANASC, sog.get(SOG_DATANASC)); + m.set(F_S_TESSAVIS, sog.get(SOG_TESSAVIS)); + m.set(F_S_CODSEZ, sog.get(SOG_CODSEZ)); + m.set(F_S_CODSOT, sog.get(SOG_CODSOT)); + m.set(F_S_CATDON, sog.get(SOG_CATDON)); + } + else + ok = FALSE; // codice non esistente + } + } + return ok; +} + +bool TStampaTessereS::user_destroy() +{ + delete _sogtmp; + delete _msk; + delete _rel; + delete _form_pag; + printer().read_configuration(); + return TRUE; +} + +int at4600(int argc, char* argv[]) +{ + TStampaTessereS a; + a.run(argc, argv, "Stampa tessere singole"); + return 0; +} diff --git a/at/at4600a.h b/at/at4600a.h new file mode 100755 index 000000000..d25536870 --- /dev/null +++ b/at/at4600a.h @@ -0,0 +1,21 @@ +// stampa tessere associative singole +// definizione campi per maschera di selezione + +#define F_AGGIORNA 101 +#define F_SOGGETTI 102 + +#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/at4600a.uml b/at/at4600a.uml new file mode 100755 index 000000000..f1a236692 --- /dev/null +++ b/at/at4600a.uml @@ -0,0 +1,225 @@ +#include "at4600a.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 manuale" -1 -1 78 20 + +BOOLEAN F_AGGIORNA +BEGIN + PROMPT 2 2 "Aggiornare archivio soggetti" + GROUP 1 +END + +SPREADSHEET F_SOGGETTI +BEGIN + PROMPT 2 4 "Soggetti" + ITEM "Codice@8" + 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 8 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "RG" + USE LF_SOGGETTI KEY 1 + INPUT CODICE F_S_CODICE + DISPLAY "Codice@8" 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 + DISPLAY "Gr.AB0" GRUPPOAB0 + DISPLAY "Rh " RHANTID + DISPLAY "Int.SI" INTSI + 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 + DISPLAY "Cognome@25" COGNOME + DISPLAY "Nome@25" NOME + DISPLAY "Nato il@10" DATANASC + DISPLAY "Codice@8" CODICE + DISPLAY "Sez." CODSEZ + DISPLAY "Sot." CODSOT + DISPLAY "C." CATDON + DISPLAY "Tessera" TESSAVIS + DISPLAY "Gr.AB0" GRUPPOAB0 + DISPLAY "Rh " RHANTID + DISPLAY "Int.SI" INTSI + 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 + 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 + DISPLAY "Cognome@25" COGNOME + DISPLAY "Nome@25" NOME + DISPLAY "Nato il@10" DATANASC + DISPLAY "Codice@8" CODICE + DISPLAY "Sez." CODSEZ + DISPLAY "Sot." CODSOT + DISPLAY "C." CATDON + DISPLAY "Tessera" TESSAVIS + DISPLAY "Gr.AB0" GRUPPOAB0 + DISPLAY "Rh " RHANTID + DISPLAY "Int.SI" INTSI + 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 + HELP "Nome del soggetto" +// CHECKTYPE NORMAL + 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/at4700.cpp b/at/at4700.cpp new file mode 100755 index 000000000..e665d3d38 --- /dev/null +++ b/at/at4700.cpp @@ -0,0 +1,516 @@ +#include +#include +#include +#include +#include + +#include "soggetti.h" +#include "donaz.h" +#include "benem.h" +#include "sezioni.h" +#include + +#include "at4.h" +#include "at4100b.h" +#include "at4100c.h" + +#include "at4700a.h" + +#include "at4500.h" + +#define ALIAS_CTD 700 // categoria donatori +#define ALIAS_CTN1 701 // categoria non donatori 1 +#define ALIAS_CTN2 702 // categoria non donatori 2 + +#define ALIAS_TCS 200 // tipi/esiti controlli sanitari +#define ALIAS_LDN 400 // punti di prelievo +#define ALIAS_LDNDON 401 // punti di prelievo + +#define ALIAS_LCPDOM 100 // localita' postale di domicilio +#define ALIAS_COMDOM 501 // comune di domicilio +#define ALIAS_COMNAS 500 // comune di nascita + +#define ALIAS_BNZ 600 // benemerenze + +enum ts { undefined=0, schede=1, etichette=2, cartoline=3, donazioni=4 }; + +// definizione form per tessere associative +class TSingole_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TSingole_form(): TForm() {}; + TSingole_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TSingole_form() {}; +}; + +class TStampeSingole : public TPrintapp +{ + TRelation* _rel; + TIsamtempfile* _sogtmp; + TLocalisamfile* _donaz; + TLocalisamfile* _benem; + TRecord_array* _sdonazioni; + TRecord_array* _sbenemerenze; + TMask* _msk; + TSingole_form* _form_sch; + TSingole_form* _form_car; + TSingole_form* _form_eti; + TSingole_form* _form_don; + TAssoc_array _asoggetti; + ts _tipostampa; + int _cur; + TDate _data_stampa; + TString16 _codsez, _codsot, _orario, _datacart; + TString80 _invitoper, _data, _presso1, _presso2, _presso3, _presso4; + TString80 _note, _intest1, _intest2, _intest3, _intest4; + bool _usomodo, _usasez; + int _etlarghezza, _etcolonne; + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual bool set_print(int m); + virtual void set_page(int file, int cnt); + virtual bool preprocess_page(int file, int counter); + ts dati_cartolina(); + + static void add_rows_soggetti(TSheet_field& s, int count = 10, int start = 1); + static bool soggetti_notify(TSheet_field& s, int r, KEY k); + static bool nome_handler(TMask_field& f, KEY k); + static bool codice_handler(TMask_field& f, KEY k); + +public: + void filtra_codici(); + void dati_sezione(const TString16 codsez, const TString16 codsot); + + TMask& app_mask() { return *_msk; } + TStampeSingole() : _data_stampa(TODAY) {} +}; + +HIDDEN inline TStampeSingole& app() { return (TStampeSingole&) main_app(); } + +TCursor* TSingole_form::cursor() const { return app().current_cursor(); } + +TRelation* TSingole_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 << "CARTOLINE"; + + TPrinter& p = printer(); + p.set_printtype(normprinter); // Force configuration update + p.read_configuration(config); + if (p.set()) + f.message_box("Stampante configurata per stampa cartoline"); + } + } + return TRUE; +} + +void TStampeSingole::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; +} + + +ts TStampeSingole::dati_cartolina() +{ + 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 TStampeSingole::add_rows_soggetti(TSheet_field& s, int count, int start) +{ + if (start == 1) + s.destroy(); + for (int r=start; rfield(F_SOGGETTI); + for (int r=0; r < s.items(); r++) + { + TToken_string& row = s.row(r); + const long codice = row.get_long(0); + if (codice != 0) + { + TLocalisamfile soggetti(LF_SOGGETTI); + soggetti.setkey(1); + soggetti.zero(); + soggetti.put(SOG_CODICE,codice); + if (soggetti.read() == NOERR) + _sogtmp->write(soggetti.curr()); + } + } +} + +void TStampeSingole::set_page(int file, int cnt) +{ + switch (_tipostampa) + { + case etichette: + { + TPrint_section& corpo = _form_eti->get_body(); + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } + } + break; + case schede: + { + TPrint_section& corpo = _form_sch->get_body(); + corpo.update_and_print(TRUE); + force_setpage(TRUE); + } + break; + case donazioni: + { + TPrint_section& corpo = _form_don->get_body(); + corpo.update_and_print(TRUE); + force_setpage(TRUE); + } + 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 (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + set_row(i+1,riga); + } + } + break; + } +} + +bool TStampeSingole::preprocess_page(int file, int counter) +{ + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); + return TRUE; +} + +bool TStampeSingole::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,50); + _tipostampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_CARTOLINE: + _tipostampa=cartoline; + break; + case F_SCHEDE: + _tipostampa=schede; + break; + case F_ETICHETTE: + _tipostampa=etichette; + break; + case F_DONAZIONI: + _tipostampa=donazioni; + break; + } + if (_tipostampa != undefined) + { + if (_tipostampa == cartoline) + dati_cartolina(); + 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) + filtra_codici(); + reset_print(); + return TRUE; + } + else + return FALSE; +} + +bool TStampeSingole::user_create() +{ + _sogtmp = new TIsamtempfile(LF_SOGGETTI,NULL,TRUE,TRUE); + _rel = new TRelation(_sogtmp); + _rel->add(LF_SOGGETTI, "CODICE==CODICE"); + _rel->add(LF_DONAZ, "CODICE==CODICE", 1); + _rel->add("LDN", "CODTAB==LUOGODON",1,LF_DONAZ, ALIAS_LDNDON); + _rel->add(LF_BENEM, "CODICE==CODICE", 1); + _rel->add("BNZ", "CODTAB==TIPOBEN", 1, LF_BENEM, ALIAS_BNZ); + _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==DOM_CODLOC",1,0,ALIAS_LCPDOM); + _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"); + _donaz = new TLocalisamfile(LF_DONAZ); + _benem = new TLocalisamfile(LF_BENEM); + _sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON); + _sbenemerenze = new TRecord_array(LF_BENEM,BEN_PROGBEN); + + _cur = add_cursor(new TCursor(_rel, "", 1)); + _msk = new TMask("at4700a"); + //_msk->set_handler(F_PRINTER, printer_handler); + _form_car = new TSingole_form("ATCARTO1"); + _form_sch = new TSingole_form("AT_PAGIN"); + _form_don = new TSingole_form("ATDDONAZ"); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TSingole_form(etformato); + 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_CODICE,codice_handler); + /* + TString16 config; + config << "CARTOLINE"; + printer().read_configuration(config); + */ + return TRUE; +} + +bool TStampeSingole::soggetti_notify(TSheet_field& s, int r, KEY k) +{ + bool ok = TRUE; + switch (k) + { + case K_INS: + // richiesta inserimento riga + break; + case K_DEL: + case K_CTRL+K_DEL: + // avvenuta cancellazione riga + break; + case K_SPACE: + // inizio modifica riga + break; + case K_TAB: + // entrata riga + { + static bool entering = TRUE; + if (entering) + { + entering = FALSE; + if ((r == s.items()-1) && (r == s.first_empty())) + app().add_rows_soggetti(s,10,r+1); + TToken_string& row = s.row(r); + if (row.empty_items()) + s.select(r); + entering = TRUE; + } + } + 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")) + s.sheet_mask().field(F_S_NOME).set_focusdirty(); + } + } + break; + } + return ok; +} + +bool TStampeSingole::nome_handler(TMask_field& f, KEY k) +{ + bool ok = TRUE; + if (f.to_check(k)) + { + TMask& m = f.mask(); + long codsog = m.get_long(F_S_CODICE); + if (codsog == 0) + f.on_key(K_F9); + } + return ok; +} + +bool TStampeSingole::codice_handler(TMask_field& f, KEY k) +{ + bool ok = TRUE; + if (f.to_check(k)) + { + TMask& m = f.mask(); + long codsog = m.get_long(F_S_CODICE); + if (codsog != 0) + { + TLocalisamfile sog(LF_SOGGETTI); + sog.setkey(1); + sog.zero(); + sog.put(SOG_CODICE, codsog); + int err = sog.read(); + if (err == NOERR) + { + m.set(F_S_COGNOME, sog.get(SOG_COGNOME)); + m.set(F_S_NOME, sog.get(SOG_NOME)); + m.set(F_S_DATANASC, sog.get(SOG_DATANASC)); + m.set(F_S_TESSAVIS, sog.get(SOG_TESSAVIS)); + m.set(F_S_CODSEZ, sog.get(SOG_CODSEZ)); + m.set(F_S_CODSOT, sog.get(SOG_CODSOT)); + m.set(F_S_CATDON, sog.get(SOG_CATDON)); + } + else + ok = FALSE; // codice non esistente + } + } + return ok; +} + +bool TStampeSingole::user_destroy() +{ + delete _sogtmp; + delete _msk; + delete _sdonazioni; + delete _sbenemerenze; + delete _donaz; + delete _benem; + delete _rel; + delete _form_sch; + delete _form_car; + delete _form_eti; + delete _form_don; + //printer().read_configuration(); + return TRUE; +} + +int at4700(int argc, char* argv[]) +{ + TStampeSingole a; + a.run(argc, argv, "Stampe singole"); + return 0; +} diff --git a/at/at4700a.h b/at/at4700a.h new file mode 100755 index 000000000..2a745b1dc --- /dev/null +++ b/at/at4700a.h @@ -0,0 +1,22 @@ +// stampa etichette/cartoline/schede anagrafiche/dettaglio donazioni singole +// definizione campi per maschera di selezione + +#define F_SOGGETTI 101 +#define F_CARTOLINE 401 +#define F_ETICHETTE 402 +#define F_SCHEDE 403 +#define F_DONAZIONI 404 + +// 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/at4700a.uml b/at/at4700a.uml new file mode 100755 index 000000000..f96e722ea --- /dev/null +++ b/at/at4700a.uml @@ -0,0 +1,232 @@ +#include "at4700a.h" + +TOOLBAR "" 0 20 0 2 + +BUTTON F_CARTOLINE 9 2 +BEGIN + PROMPT -15 -11 "Cartoline" + MESSAGE EXIT,F_CARTOLINE +END + +BUTTON F_ETICHETTE 9 2 +BEGIN + PROMPT -25 -11 "Etichette" + MESSAGE EXIT,F_ETICHETTE +END + +BUTTON F_SCHEDE 9 2 +BEGIN + PROMPT -35 -11 "Schede" + MESSAGE EXIT,F_SCHEDE +END + +BUTTON F_DONAZIONI 9 2 +BEGIN + PROMPT -45 -11 "Donazioni" + MESSAGE EXIT,F_DONAZIONI +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -55 -11 "" +END + +ENDPAGE + +PAGE "Selezione manuale" -1 -1 78 20 + +SPREADSHEET F_SOGGETTI +BEGIN + PROMPT 2 4 "Soggetti" + ITEM "Codice@8" + 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 8 +BEGIN + PROMPT 2 1 "Codice " + FLAGS "RG" + USE LF_SOGGETTI KEY 1 + INPUT CODICE F_S_CODICE + DISPLAY "Codice@8" 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 + DISPLAY "Gr.AB0" GRUPPOAB0 + DISPLAY "Rh " RHANTID + DISPLAY "Int.SI" INTSI + 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 + DISPLAY "Cognome@25" COGNOME + DISPLAY "Nome@25" NOME + DISPLAY "Nato il@10" DATANASC + DISPLAY "Codice@8" CODICE + DISPLAY "Sez." CODSEZ + DISPLAY "Sot." CODSOT + DISPLAY "C." CATDON + DISPLAY "Tessera" TESSAVIS + DISPLAY "Gr.AB0" GRUPPOAB0 + DISPLAY "Rh " RHANTID + DISPLAY "Int.SI" INTSI + 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 + 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 + DISPLAY "Cognome@25" COGNOME + DISPLAY "Nome@25" NOME + DISPLAY "Nato il@10" DATANASC + DISPLAY "Codice@8" CODICE + DISPLAY "Sez." CODSEZ + DISPLAY "Sot." CODSOT + DISPLAY "C." CATDON + DISPLAY "Tessera" TESSAVIS + DISPLAY "Gr.AB0" GRUPPOAB0 + DISPLAY "Rh " RHANTID + DISPLAY "Int.SI" INTSI + 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 + HELP "Nome del soggetto" +// CHECKTYPE NORMAL + 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/at4800.cpp b/at/at4800.cpp new file mode 100755 index 000000000..ba1279a74 --- /dev/null +++ b/at/at4800.cpp @@ -0,0 +1,363 @@ +#include +#include +#include +#include +#include + +#include "soggetti.h" +#include "donaz.h" +#include "benem.h" +#include "sezioni.h" +#include + +#include "at4.h" +#include "at4100b.h" +#include "at4100c.h" + +#include "at4800a.h" + +#include "at4500.h" + +#define ALIAS_CTD 700 // categoria donatori +#define ALIAS_CTN1 701 // categoria non donatori 1 +#define ALIAS_CTN2 702 // categoria non donatori 2 + +#define ALIAS_TCS 200 // tipi/esiti controlli sanitari +#define ALIAS_LDN 400 // punti di prelievo +#define ALIAS_LDNDON 401 // punti di prelievo + +#define ALIAS_LCPDOM 100 // localita' postale di domicilio +#define ALIAS_COMDOM 501 // comune di domicilio +#define ALIAS_COMNAS 500 // comune di nascita + +#define ALIAS_BNZ 600 // benemerenze + +enum ts { undefined=0, schede=1, etichette=2, cartoline=3, donazioni=4 }; + +// definizione form per tessere associative +class TPerCodice_form : public TForm +{ +public: + + virtual TCursor* cursor() const; + virtual TRelation* relation() const; + TPrint_section& get_body() { return section('B'); } ; + TPerCodice_form(): TForm() {}; + TPerCodice_form(const char* form, const char * code = "", int editlevel = 0, const char* desc = "") + : TForm(form,code,editlevel,desc) {}; + virtual ~TPerCodice_form() {}; +}; + +class TStampePerCodice : public TPrintapp +{ + TRelation* _rel; + TLocalisamfile* _donaz; + TLocalisamfile* _benem; + TRecord_array* _sdonazioni; + TRecord_array* _sbenemerenze; + TMask* _msk; + TPerCodice_form* _form_sch; + TPerCodice_form* _form_car; + TPerCodice_form* _form_eti; + TPerCodice_form* _form_don; + ts _tipostampa; + int _cur; + TDate _data_stampa; + TString16 _codsez, _codsot, _orario, _datacart; + TString80 _invitoper, _data, _presso1, _presso2, _presso3, _presso4; + TString80 _note, _intest1, _intest2, _intest3, _intest4; + bool _usomodo, _usasez; + int _etlarghezza, _etcolonne; + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual bool set_print(int m); + virtual void set_page(int file, int cnt); + virtual bool preprocess_page(int file, int counter); + ts dati_cartolina(); + +public: + void dati_sezione(const TString16 codsez, const TString16 codsot); + + TMask& app_mask() { return *_msk; } + TStampePerCodice() : _data_stampa(TODAY) {} +}; + +HIDDEN inline TStampePerCodice& app() { return (TStampePerCodice&) main_app(); } + +TCursor* TPerCodice_form::cursor() const { return app().current_cursor(); } + +TRelation* TPerCodice_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 << "CARTOLINE"; + + TPrinter& p = printer(); + p.set_printtype(normprinter); // Force configuration update + p.read_configuration(config); + if (p.set()) + f.message_box("Stampante configurata per stampa cartoline"); + } + } + return TRUE; +} + +void TStampePerCodice::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; +} + + +ts TStampePerCodice::dati_cartolina() +{ + 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 TStampePerCodice::set_page(int file, int cnt) +{ + switch (_tipostampa) + { + case etichette: + { + TPrint_section& corpo = _form_eti->get_body(); + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } + } + break; + case schede: + { + TPrint_section& corpo = _form_sch->get_body(); + corpo.update_and_print(TRUE); + force_setpage(TRUE); + } + break; + case donazioni: + { + TPrint_section& corpo = _form_don->get_body(); + corpo.update_and_print(TRUE); + force_setpage(TRUE); + } + 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 (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + set_row(i+1,riga); + } + } + break; + } +} + +bool TStampePerCodice::preprocess_page(int file, int counter) +{ + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); + return TRUE; +} + +bool TStampePerCodice::set_print(int m) +{ + _tipostampa = undefined; + KEY tasto; + tasto = _msk->run(); + switch (tasto) + { + case F_CARTOLINE: + _tipostampa=cartoline; + break; + case F_SCHEDE: + _tipostampa=schede; + break; + case F_ETICHETTE: + _tipostampa=etichette; + break; + case F_DONAZIONI: + _tipostampa=donazioni; + break; + } + if (_tipostampa != undefined) + { + if (_tipostampa == cartoline) + dati_cartolina(); + const long codini = _msk->get_long(F_CODINI); + const long codfin = _msk->get_long(F_CODFIN); + TRectype da(LF_SOGGETTI); + TRectype a(LF_SOGGETTI); + if (codini!=0) + da.put(SOG_CODICE, codini); + if (codfin!=0) + a.put(SOG_CODICE, codfin); + current_cursor()->setregion(da, a); + reset_files(); + add_file(LF_SOGGETTI); + reset_print(); + return TRUE; + } + else + return FALSE; +} + +bool TStampePerCodice::user_create() +{ + _rel = new TRelation(LF_SOGGETTI); + _rel->add(LF_DONAZ, "CODICE==CODICE", 1); + _rel->add("LDN", "CODTAB==LUOGODON",1,LF_DONAZ, ALIAS_LDNDON); + _rel->add(LF_BENEM, "CODICE==CODICE", 1); + _rel->add("BNZ", "CODTAB==TIPOBEN", 1, LF_BENEM, ALIAS_BNZ); + _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==DOM_CODLOC",1,0,ALIAS_LCPDOM); + _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"); + _donaz = new TLocalisamfile(LF_DONAZ); + _benem = new TLocalisamfile(LF_BENEM); + _sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON); + _sbenemerenze = new TRecord_array(LF_BENEM,BEN_PROGBEN); + + _cur = add_cursor(new TCursor(_rel, "", 1)); + _msk = new TMask("at4800a"); + //_msk->set_handler(F_PRINTER, printer_handler); + _form_car = new TPerCodice_form("ATCARTO1"); + _form_sch = new TPerCodice_form("AT_PAGIN"); + _form_don = new TPerCodice_form("ATDDONAZ"); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); + _form_eti = new TPerCodice_form(etformato); + /* + TString16 config; + config << "CARTOLINE"; + printer().read_configuration(config); + */ + return TRUE; +} + +bool TStampePerCodice::user_destroy() +{ + delete _msk; + delete _sdonazioni; + delete _sbenemerenze; + delete _donaz; + delete _benem; + delete _rel; + delete _form_sch; + delete _form_car; + delete _form_eti; + delete _form_don; + //printer().read_configuration(); + return TRUE; +} + +int at4800(int argc, char* argv[]) +{ + TStampePerCodice a; + a.run(argc, argv, "Stampe per codice"); + return 0; +} diff --git a/at/at4800a.h b/at/at4800a.h new file mode 100755 index 000000000..11ea2abf0 --- /dev/null +++ b/at/at4800a.h @@ -0,0 +1,10 @@ +// stampa etichette/cartoline/scehde/dettaglio donazioni per codice +// definizione campi per maschera di selezione + + +#define F_CODINI 101 // da codice +#define F_CODFIN 102 // a codice +#define F_CARTOLINE 401 +#define F_ETICHETTE 402 +#define F_SCHEDE 403 +#define F_DONAZIONI 404 diff --git a/at/at4800a.uml b/at/at4800a.uml new file mode 100755 index 000000000..3cce9c81a --- /dev/null +++ b/at/at4800a.uml @@ -0,0 +1,56 @@ +#include "at4800a.h" + +TOOLBAR "" 0 20 0 2 + +BUTTON F_CARTOLINE 9 2 +BEGIN + PROMPT -15 -11 "Cartoline" + MESSAGE EXIT,F_CARTOLINE +END + +BUTTON F_ETICHETTE 9 2 +BEGIN + PROMPT -25 -11 "Etichette" + MESSAGE EXIT,F_ETICHETTE +END + +BUTTON F_SCHEDE 9 2 +BEGIN + PROMPT -35 -11 "Schede" + MESSAGE EXIT,F_SCHEDE +END + +BUTTON F_DONAZIONI 9 2 +BEGIN + PROMPT -45 -11 "Donazioni" + MESSAGE EXIT,F_DONAZIONI +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -55 -11 "" +END + +ENDPAGE + +PAGE "Stampe per codice" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 4 +BEGIN + PROMPT 1 1 "Selezione intervallo codici" +END + +NUMBER F_CODINI 9 +BEGIN + PROMPT 2 2 "Codice iniziale " + HELP "Codice soggetto da cui iniziare la stampa: vuoto = inizio" +END + +NUMBER F_CODFIN 9 +BEGIN + PROMPT 2 3 "Codice finale " + HELP "Codice soggetto finale per la stampa: vuoto = fine" +END + +ENDPAGE +ENDMASK diff --git a/at/at5100a.h b/at/at5100a.h index cea7bf851..1c2f53d5b 100755 --- a/at/at5100a.h +++ b/at/at5100a.h @@ -15,8 +15,24 @@ // data iscrizione #define AT_DATAISC 108 // data iscrizione se vuota = data prima donazione +// stampa +#define AT_STAMPA80 109 // stampa 80 colonne (dove prevista) + +//intervalli di donazione per idoneita' automatiche +#define AT_ETADONNE 110 // limite di et… per intervalli primo caso (eta' fertile) +#define AT_INTSI_F1 111 // intervallo SI per femmine prima fascia +#define AT_INTSI_F2 112 // intervallo SI per femmine seconda fascia +#define AT_INTSI_M 113 // intervallo SI per maschi +#define AT_INTAF_M 114 // intervallo AF per tutti + +// definizione etichette +#define AT_ETFORM 115 +#define AT_ETLARG 116 +#define AT_ETCOL 117 + // descrizioni #define AT_D_CATINI1 151 #define AT_D_CATFIN1 152 #define AT_D_CATINI2 153 #define AT_D_CATFIN2 154 +#define AT_D_ETFORM 155 diff --git a/at/at5100a.uml b/at/at5100a.uml index 3e62e523b..58fe76ca9 100755 --- a/at/at5100a.uml +++ b/at/at5100a.uml @@ -15,9 +15,9 @@ END ENDPAGE -PAGE "Parametri sezione" -1 -1 76 17 +PAGE "Parametri 1" -1 -1 78 20 -GROUPBOX DLG_NULL 74 5 +GROUPBOX DLG_NULL 77 5 BEGIN PROMPT 1 0 "Primo passaggio di categoria" END @@ -57,7 +57,7 @@ BEGIN CHECKTYPE NORMAL END -GROUPBOX DLG_NULL 74 6 +GROUPBOX DLG_NULL 77 6 BEGIN PROMPT 1 5 "Secondo passaggio di categoria" END @@ -111,6 +111,49 @@ BEGIN FIELD DataIsc END +BOOLEAN AT_STAMPA80 +BEGIN + PROMPT 2 12 "Stampa 80 colonne dove prevista" + HELP "Stampa gli elenchi con il formato 80 colonne dove previsto" + FIELD Stampa80 +END + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 14 "Intervalli di donazione nelle idoneita' automatiche" +END + +NUMBER AT_ETADONNE 3 +BEGIN + PROMPT 2 15 "Eta' per la suddivisione delle donne in due fasce " + FIELD EtaDonne +END + +NUMBER AT_INTSI_F1 3 +BEGIN + PROMPT 2 16 "Intervallo SI per femmine 1ø fascia " + FIELD IntSI_F1 +END + +NUMBER AT_INTSI_F2 3 +BEGIN + PROMPT 2 17 "Intervallo SI per femmine 2ø fascia " + FIELD IntSI_F2 +END + + +NUMBER AT_INTSI_M 3 +BEGIN + PROMPT 45 16 "Intervallo SI per maschi " + FIELD IntSI_M +END + +NUMBER AT_INTAF_M 3 +BEGIN + PROMPT 45 17 "Intervallo AF per tutti " + FIELD IntAF_M +END + STRING AT_D_CATINI1 40 BEGIN PROMPT 30 2 "" @@ -137,4 +180,41 @@ END ENDPAGE +PAGE "Parametri 2" -1 -1 78 20 + +GROUPBOX DLG_NULL 77 5 +BEGIN + PROMPT 1 0 "Etichette soggetti" +END + +STRING AT_ETFORM 8 +BEGIN + PROMPT 2 1 "Formato " + FIELD EtFormato + USE LF_FORM + INPUT TIPOPROF AT_ETFORM + DISPLAY "Formato@8" TIPOPROF + DISPLAY "Descrizione@50" DESC + OUTPUT AT_ETFORM TIPOPROF + OUTPUT AT_D_ETFORM DESC +END + +STRING AT_D_ETFORM 50 +BEGIN + PROMPT 2 23 "" + FLAGS "D" +END + +NUMBER AT_ETLARG 3 +BEGIN + PROMPT 2 2 "Larghezza " + FIELD EtLarghezza +END + +NUMBER AT_ETCOL 1 +BEGIN + PROMPT 2 3 "Colonne " + FIELD EtColonne +END + ENDMASK diff --git a/at/at6100.cpp b/at/at6100.cpp index 4ee68384d..773e42a74 100755 --- a/at/at6100.cpp +++ b/at/at6100.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include "medici.h" #include @@ -33,7 +32,8 @@ class TStampaMedici : public TPrintapp int _cur1, _cur2; TParagraph_string _cognome_nome, _dencom, _indirizzo; TDate _data_stampa; - ts _tipo_stampa; + ts _tipostampa; + int _etlarghezza, _etcolonne; protected: virtual bool user_create(); @@ -56,19 +56,32 @@ TRelation* TMed_form::relation() const { return cursor()->relation(); } void TStampaMedici::set_page(int file, int cnt) { // costruzione etichette - switch (_tipo_stampa) + switch (_tipostampa) { 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); + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } } break; case elenco: @@ -86,7 +99,7 @@ void TStampaMedici::set_page(int file, int cnt) bool TStampaMedici::preprocess_page(int file, int counter) { - if (_tipo_stampa == elenco) + if (_tipostampa==elenco) { TString80 nome = current_cursor()->curr().get(MED_COGNOME); nome << " "; @@ -100,24 +113,27 @@ bool TStampaMedici::preprocess_page(int file, int counter) _dencom = localita; _indirizzo = current_cursor()->curr(LF_MEDICI).get(MED_INDIRIZZO); } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); return TRUE; } bool TStampaMedici::set_print(int) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCO: - _tipo_stampa = elenco; + _tipostampa = elenco; break; case F_ETICHETTE: - _tipo_stampa = etichette; + _tipostampa = etichette; break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { long codfr, codto; TString80 cogfr, cogto; @@ -164,7 +180,7 @@ bool TStampaMedici::set_print(int) void TStampaMedici::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString sep(132); TString16 data_stampa; @@ -195,6 +211,10 @@ bool TStampaMedici::user_create() _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per cognome e nome _msk = new TMask("at6100a"); _form_eti = new TMed_form("AT_ETMED"); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); return TRUE; } diff --git a/at/at6200.cpp b/at/at6200.cpp index de44c833e..cbe296370 100755 --- a/at/at6200.cpp +++ b/at/at6200.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include "sezioni.h" #include @@ -32,7 +31,8 @@ class TStampaSezioni : public TPrintapp int _cur1, _cur2; TParagraph_string _dencom, _indirizzo; TDate _data_stampa; - ts _tipo_stampa; + ts _tipostampa; + int _etlarghezza, _etcolonne; protected: virtual bool user_create(); @@ -55,19 +55,32 @@ TRelation* TSez_form::relation() const { return cursor()->relation(); } void TStampaSezioni::set_page(int file, int cnt) { - switch (_tipo_stampa) + switch (_tipostampa) { 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); + for (int r=1;r<=_etcolonne;r++) + { + if (current_cursor()->pos()items()) + { + force_setpage(TRUE); + corpo.update(); + for (word i = 0; i < corpo.height(); i++) + { + TPrintrow& riga = corpo.row(i); + TString256 riga1 = riga.row(); + riga1.cut(_etlarghezza); + int colonna = ((r-1)*_etlarghezza); + TString16 formato; + formato << '@' << colonna << "g"; + riga1.insert(formato,0); + set_row(i+1,riga1); + } + if (r < _etcolonne) + ++(*current_cursor()); + } + } } break; case elenco: @@ -87,7 +100,7 @@ void TStampaSezioni::set_page(int file, int cnt) bool TStampaSezioni::preprocess_page(int file, int counter) { - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString256 localita = ""; localita << current_cursor()->curr("LCP").get("S0"); @@ -97,24 +110,27 @@ bool TStampaSezioni::preprocess_page(int file, int counter) _dencom = localita; _indirizzo = current_cursor()->curr(LF_SEZIONI).get(SEZ_INDIRIZZO); } + if (_tipostampa==etichette) + if (printer().rows_left() < _form_eti->get_body().height()) + printer().formfeed(); return TRUE; } bool TStampaSezioni::set_print(int) { - _tipo_stampa = undefined; + _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { case F_ELENCO: - _tipo_stampa = elenco; + _tipostampa = elenco; break; case F_ETICHETTE: - _tipo_stampa = etichette; + _tipostampa = etichette; break; } - if (_tipo_stampa != undefined) + if (_tipostampa != undefined) { TString16 codfr, codto; TString80 denfr, dento; @@ -161,7 +177,7 @@ bool TStampaSezioni::set_print(int) void TStampaSezioni::crea_intestazione() { reset_header(); - if (_tipo_stampa == elenco) + if (_tipostampa == elenco) { TString sep(132); TString16 data_stampa; @@ -192,6 +208,10 @@ bool TStampaSezioni::user_create() _cur2 = add_cursor(new TCursor(_rel, "", 2)); //cursore ordinamento per denominazione _msk = new TMask("at6200a"); _form_eti = new TSez_form("AT_ETSEZ"); + TConfig config(CONFIG_STUDIO); + TString16 etformato = config.get("EtFormato"); + _etlarghezza = config.get_int("EtLarghezza"); + _etcolonne = config.get_int("EtColonne"); return TRUE; } diff --git a/at/at6300.cpp b/at/at6300.cpp index cafc499ad..a2d7c8025 100755 --- a/at/at6300.cpp +++ b/at/at6300.cpp @@ -1,28 +1,31 @@ #include #include #include +#include #include -#include #include "donaz.h" +#include "contsan.h" #include "soggetti.h" #include "sezioni.h" #include "at6.h" #include "at6300a.h" -#define ALIAS_LDN 100 +#define ALIAS_LDN 400 class TControlloDonazioni : public TPrintapp { TRelation* _rel; TMask* _msk; - int _counter; + TLocalisamfile* _contsan; + int _contatore, _totfinestampa; int _cur; TDate _dataold, _dataini, _datafin; TString16 _tipodon, _luogodon, _luogoold, _sezold; TString16 _sezini, _sotini, _tipostampa,_ordinamento; - + TString16 _controllo; + bool _stampa80, _primedon; TParagraph_string _cognome_nome; protected: @@ -31,10 +34,13 @@ protected: 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_print(int file, int counter); public: void crea_intestazione(); - void header_data(const TDate data, const TString16 luogo, const TString16 sezione); + void header_stampa(const TDate data, const TString16 luogo, const TString16 sezione, const TString16 sottog); + void footer_stampa(); + void fine_stampa(); TMask& app_mask() { return *_msk; } TControlloDonazioni() : _cognome_nome("",35) {} }; @@ -43,30 +49,60 @@ HIDDEN inline TControlloDonazioni& app() { return (TControlloDonazioni&) main_ap void TControlloDonazioni::set_page(int file, int cnt) { - set_row(1,"@0g#D", &_counter); - set_row(1,"@7g@pn", FLD(LF_DONAZ,DON_ETICHETTA,"#########")); - set_row(1,"@17g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); - set_row(1,"@26g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS)); - set_row(1,"@34g#a", &_cognome_nome); - set_row(1,"@70g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); - set_row(1,"@81g@S", FLD(LF_SOGGETTI,SOG_CODSEZ)); - set_row(1,"@84g@S", FLD(LF_SOGGETTI,SOG_CODSOT)); - set_row(1,"@87g@ld", FLD(LF_DONAZ,DON_DATADON)); - set_row(1,"@98g@S", FLD(LF_DONAZ,DON_TIPODON)); - set_row(1,"@104g@S", FLD(LF_DONAZ, DON_LUOGODON)); - set_row(1,"@110g@S", FLD(LF_SOGGETTI, SOG_GRUPPOAB0)); - set_row(1,"@114g@S", FLD(LF_SOGGETTI, SOG_RHANTID)); + if (_stampa80) + { + set_row(1,"@0g#D", &_contatore); + set_row(1,"@6g@pn", FLD(LF_DONAZ,DON_ETICHETTA,"#########")); + set_row(1,"@16g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(2,"@16g@8,rs", FLD(LF_SOGGETTI,SOG_TESSAVIS)); + set_row(1,"@25g#a", &_cognome_nome); + set_row(2,"@25g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@61g@S", FLD(LF_SOGGETTI,SOG_CODSEZ)); + set_row(2,"@64g@S", FLD(LF_SOGGETTI,SOG_CODSOT)); + set_row(1,"@64g@ld", FLD(LF_DONAZ,DON_DATADON)); + set_row(2,"@64g@S", FLD(LF_DONAZ,DON_TIPODON)); + //set_row(1,"@104g@S", FLD(LF_DONAZ, DON_LUOGODON)); + set_row(1,"@75g@S", FLD(LF_SOGGETTI, SOG_GRUPPOAB0)); + set_row(2,"@75g@S", FLD(LF_SOGGETTI, SOG_RHANTID)); + set_row(1,"@79g#t", &_controllo); + } + else + { + set_row(1,"@0g#D", &_contatore); + set_row(1,"@7g@pn", FLD(LF_DONAZ,DON_ETICHETTA,"#########")); + set_row(1,"@17g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); + set_row(1,"@26g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS)); + set_row(1,"@34g#a", &_cognome_nome); + set_row(1,"@70g@ld", FLD(LF_SOGGETTI,SOG_DATANASC)); + set_row(1,"@81g@S", FLD(LF_SOGGETTI,SOG_CODSEZ)); + set_row(1,"@84g@S", FLD(LF_SOGGETTI,SOG_CODSOT)); + set_row(1,"@87g@ld", FLD(LF_DONAZ,DON_DATADON)); + set_row(1,"@98g@S", FLD(LF_DONAZ,DON_TIPODON)); + set_row(1,"@104g@S", FLD(LF_DONAZ, DON_LUOGODON)); + set_row(1,"@110g@S", FLD(LF_SOGGETTI, SOG_GRUPPOAB0)); + set_row(1,"@114g@S", FLD(LF_SOGGETTI, SOG_RHANTID)); + set_row(1,"@118g@S", FLD(LF_SOGGETTI, SOG_FENOTIPORH)); + set_row(1,"@125g@S", FLD(LF_SOGGETTI, SOG_KELL)); + set_row(1,"@129g@S", FLD(LF_SOGGETTI, SOG_DU)); + } } bool TControlloDonazioni::preprocess_page(int file, int counter) { - // contatore soggetti stampati - // per ora non c'è TString80 nome = current_cursor()->curr(LF_SOGGETTI).get(SOG_COGNOME); nome << " "; nome << current_cursor()->curr(LF_SOGGETTI).get(SOG_NOME); _cognome_nome = nome; - + // verifico se ha un controllo sanitario nella data della donazione + TLocalisamfile contsan(LF_CONTSAN); + contsan.setkey(2); + contsan.zero(); + contsan.put(CON_DATACON,current_cursor()->curr().get(DON_DATADON)); + contsan.put(CON_CODICE,current_cursor()->curr().get(DON_CODICE)); + if (contsan.read() == NOERR) + _controllo = contsan.get(CON_TIPOCON); + else + _controllo = " "; // salto pagina se cambio punto di rottura switch (_tipostampa[0]) { @@ -76,10 +112,10 @@ bool TControlloDonazioni::preprocess_page(int file, int counter) if (datanew != _dataold ) { if (_dataold.ok()) - printer().formfeed(); + footer_stampa(); _dataold = datanew; - header_data(datanew,"",""); - _counter = 0; + header_stampa(datanew,"","",""); + _contatore = 0; } } break; @@ -89,34 +125,76 @@ bool TControlloDonazioni::preprocess_page(int file, int counter) if (luogonew != _luogoold ) { if (_luogoold != "****") - printer().formfeed(); + footer_stampa(); _luogoold = luogonew; - header_data(NULLDATE,luogonew,""); - _counter = 0; + header_stampa(NULLDATE,luogonew,"",""); + _contatore = 0; } } break; case 'S': - { - TString16 seznew = current_cursor()->curr(LF_SOGGETTI).get(SOG_CODSEZ); + { + TString16 sezione = current_cursor()->curr(LF_SOGGETTI).get(SOG_CODSEZ); + TString16 sottog = current_cursor()->curr(LF_SOGGETTI).get(SOG_CODSOT); + TString16 seznew = ""; + seznew << sezione; seznew << "/"; - seznew << current_cursor()->curr(LF_SOGGETTI).get(SOG_CODSOT); + seznew << sottog; if (seznew != _sezold ) { if (_sezold != "****") - printer().formfeed(); + footer_stampa(); _sezold = seznew; - header_data(NULLDATE,"",seznew); - _counter = 0; + header_stampa(NULLDATE,"",sezione,sottog); + _contatore = 0; } } break; } - _counter++; + // salto pagina se non ci sono abbastanza righe per il record + if ((_stampa80) && (printer().rows_left() < 2)) + printer().formfeed(); + _contatore++; + _totfinestampa++; return TRUE; } -void TControlloDonazioni::header_data(const TDate data, const TString16 luogo, const TString16 sezione) +print_action TControlloDonazioni::postprocess_print(int file, int counter) +{ + if (_contatore > 0) + footer_stampa(); + if (_totfinestampa > 0) + fine_stampa(); + return NEXT_PAGE; +} + +void TControlloDonazioni::footer_stampa() +{ + // stampa totale soggetti a fine pagina + reset_footer(); + TString sep(80); + sep.fill('-'); + set_footer(1, (const char *) sep); + set_footer(2,"TOTALE DONAZIONI %d", _contatore); + printer().formfeed(); + reset_footer(); +} + +void TControlloDonazioni::fine_stampa() +{ + // stampa totale soggetti a fine stampa + + reset_footer(); + printer().footerlen(20); + TString sep(80); + sep.fill('-'); + set_footer(1, (const char *) sep); + set_footer(2,"DONAZIONI TOTALI STAMPATE %d", _totfinestampa); + printer().formfeed(); + reset_footer(); +} + +void TControlloDonazioni::header_stampa(const TDate data, const TString16 luogo, const TString16 sezione, const TString16 sottog) { TString intestazione(132); intestazione = "STAMPA DI CONTROLLO DONAZIONI "; @@ -130,21 +208,54 @@ void TControlloDonazioni::header_data(const TDate data, const TString16 luogo, c break; case 'L': { - intestazione << "PER LUOGO "; + intestazione << "PER PUNTO DI PRELIEVO "; intestazione << luogo; + intestazione << " "; + TTable ldn("LDN"); + ldn.put("CODTAB",luogo); + if (ldn.read() == NOERR) + intestazione << ldn.get("S0"); } break; case 'S': { intestazione << "PER SEZIONE "; intestazione << sezione; + if (sottog.not_empty()) + { + intestazione << "/"; + intestazione << sottog; + } + TLocalisamfile sez(LF_SEZIONI); + sez.setkey(1); + TRectype& recsez = sez.curr(); + recsez.zero(); + recsez.put(SEZ_CODSEZ, sezione); + recsez.put(SEZ_CODSOT, sottog); + if (sez.read() == NOERR) + { + intestazione << " "; + intestazione << recsez.get(SEZ_DENSEZ); + TString80 densot = recsez.get(SEZ_DENSOT); + if (densot.not_empty()) + { + intestazione << "/"; + intestazione << densot; + } + } } break; } - intestazione.center_just(); + if (_stampa80) + intestazione.center_just(80); + else + intestazione.center_just(132); set_header(1,"@0g%s", (const char*) intestazione); intestazione = "Pag. @#"; - set_header(1, "@110g%s", (const char*) intestazione); + if (_stampa80) + set_header(1, "@73g%s", (const char*) intestazione); + else + set_header(1, "@110g%s", (const char*) intestazione); return; } @@ -160,6 +271,7 @@ bool TControlloDonazioni::set_print(int m) _datafin = _msk->get_date(F_DATAFIN); _tipodon = _msk->get(F_TIPODON); _luogodon = _msk->get(F_LUOGODON); + _primedon = _msk->get_bool(F_PRIMEDON); _tipostampa = _msk->get(F_TIPOSTAMPA); _ordinamento = _msk->get(F_ORDINAMENTO); @@ -188,7 +300,7 @@ bool TControlloDonazioni::set_print(int m) chiave << "92->ETICHETTA"; break; } - TString80 filtro = ""; + TString256 filtro = ""; // filtro per tipo donazione if (_tipodon.not_empty()) filtro = format("(TIPODON == \"%s\")",(const char*)_tipodon); @@ -203,6 +315,17 @@ bool TControlloDonazioni::set_print(int m) filtro << format("(LUOGODON == \"%s\")",(const char*)_luogodon); } } + if (_primedon) + { + if (filtro.empty()) + filtro = format("(PRIMADON == \"X\")"); + else + { + filtro << " && "; + filtro << format("(PRIMADON == \"X\")"); + } + } + // filtro per sezione/sottogruppo if (_sezini.not_empty()) { @@ -231,9 +354,11 @@ bool TControlloDonazioni::set_print(int m) da.put(DON_DATADON, _dataini); if (_datafin.ok()) a.put(DON_DATADON, _datafin); - _cur = add_cursor(new TSorted_cursor(_rel, (const char*) chiave, "", 2, &da, &a)); - current_cursor()->setfilter((const char*) filtro, TRUE); - _counter = 0; + current_cursor()->setregion(da, a); + current_cursor()->setfilter(filtro, TRUE); + ((TSorted_cursor*)current_cursor())->change_order(chiave); + _contatore = 0; + _totfinestampa = 0; _dataold = NULLDATE; _luogoold = "****"; _sezold = "****"; @@ -250,19 +375,24 @@ bool TControlloDonazioni::set_print(int m) void TControlloDonazioni::crea_intestazione() { reset_header(); - TString sep(132); - sep = "Selezioni della stampa: "; - if (_sezini.not_empty()) - { - sep << "Sez. "; - sep << _sezini; - if (_sotini.not_empty()) + TString sep(132); + if (_primedon) + sep = "PRIME DONAZIONI EFFETTUATE "; + else + { + sep = "Selezioni della stampa: "; + if (_sezini.not_empty()) { - sep << "/"; - sep << _sotini; - } - sep << "; "; - } + sep << "Sez. "; + sep << _sezini; + if (_sotini.not_empty()) + { + sep << "/"; + sep << _sotini; + } + sep << "; "; + } + } if (_dataini.ok()) { sep << "Dal "; @@ -287,10 +417,23 @@ void TControlloDonazioni::crea_intestazione() sep << _luogodon; sep << "; "; } - sep.center_just(); + if (_stampa80) + sep.center_just(80); + else + sep.center_just(132); set_header(2,"@0g%s", (const char*) sep); - set_header(3,"@0gProg.@7gEt.sacca@17gCodice@26gTessera@34gCognome e nome@70gNato il@81gSe/So@87gData don.@98gTipo@104gLuogo@110gGr.@114gRh"); - set_header(4,"@0g------@7g---------@17g--------@26g-------@34g-----------------------------------@70g----------@81g-----@87g----------@98g----@104g-----@110g---@114g---"); + if (_stampa80) + { + set_header(3,"@0gProg.@6gEt.sacca@16gCodice@25gCognome e nome@61gSe@64gData don.@75gGr."); + set_header(4,"@16gTessera@25gData nascita@61gSo@64gTipo don.@75gRh"); + set_header(5,"@0g-----@6g---------@16g--------@25g-----------------------------------@61g--@64g----------@75g---"); + } + else + { + set_header(3,"@0gProg.@7gEt.sacca@17gCodice@26gTessera@34gCognome e nome@70gNato il@81gSe/So@87gData don.@98gTipo@104gLuogo@110gGr.@114gRh@118gFen.Rh@125gKellDu"); + set_header(4,"@0g------@7g---------@17g--------@26g-------@34g-----------------------------------@70g----------@81g-----@87g----------@98g----@104g-----@110g---@114g---@118g------@125g--- ---"); + } + printer().footerlen(3); } bool TControlloDonazioni::user_create() @@ -299,6 +442,10 @@ bool TControlloDonazioni::user_create() _rel->add(LF_SOGGETTI, "CODICE==CODICE"); _rel->add("LDN", "CODTAB==LUOGODON",1,0,ALIAS_LDN); _msk = new TMask("at6300a"); + _contsan = new TLocalisamfile(LF_CONTSAN); + add_cursor(new TSorted_cursor(_rel,"","",2)); + TConfig config(CONFIG_STUDIO); + _stampa80 = config.get_bool("Stampa80"); return TRUE; } @@ -306,6 +453,7 @@ bool TControlloDonazioni::user_destroy() { delete _msk; delete _rel; + delete _contsan; return TRUE; } diff --git a/at/at6300a.h b/at/at6300a.h index 833d3fe80..21bb2e0cc 100755 --- a/at/at6300a.h +++ b/at/at6300a.h @@ -13,7 +13,8 @@ #define F_DATAFIN 110 #define F_TIPODON 111 #define F_LUOGODON 112 -#define F_TIPOSTAMPA 113 -#define F_ORDINAMENTO 114 +#define F_PRIMEDON 113 +#define F_TIPOSTAMPA 114 +#define F_ORDINAMENTO 115 #define F_D_TIPODON 201 #define F_D_LUOGODON 202 diff --git a/at/at6300a.uml b/at/at6300a.uml index 9d3b09ecd..ec5bc638e 100755 --- a/at/at6300a.uml +++ b/at/at6300a.uml @@ -117,9 +117,9 @@ END // HELP "Sottogruppo finale" //END -GROUPBOX DLG_NULL 77 5 +GROUPBOX DLG_NULL 77 6 BEGIN - PROMPT 1 5 "Selezione dati per la stampa" + PROMPT 1 5 "Opzioni per la stampa" END DATA F_DATAINI @@ -166,15 +166,20 @@ BEGIN WARNING "Codice non presente" END -STRING F_D_LUOGODON 30 +STRING F_D_LUOGODON 50 30 BEGIN PROMPT 26 8 "" FLAGS "D" END +BOOLEAN F_PRIMEDON +BEGIN + PROMPT 2 9 "Stampa solo prime donazioni" +END + RADIOBUTTON F_TIPOSTAMPA 25 BEGIN - PROMPT 1 10 "Stampa per " + PROMPT 1 11 "Stampa per " ITEM "D|Data donazione" ITEM "L|Punto prelievo" ITEM "S|Sezione/Sottogruppo" @@ -182,7 +187,7 @@ END RADIOBUTTON F_ORDINAMENTO 35 BEGIN - PROMPT 30 10 "Ordinamento per data donazione e ..." + PROMPT 30 11 "Ordinamento per data donazione e ..." ITEM "C|Cognome e nome" ITEM "I|Inserimento" ITEM "E|Etichetta sacca" diff --git a/at/at6400.cpp b/at/at6400.cpp index c04b55b42..ef6c94064 100755 --- a/at/at6400.cpp +++ b/at/at6400.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include "soggetti.h" #include "sezioni.h" @@ -21,11 +20,11 @@ class TStampaIncompleti : public TPrintapp TMask* _msk; TAssoc_array _catdon; TAssoc_array _catnondon; - int _cur; TParagraph_string _cognome_nome, _dencom; TDate _data_stampa; TString16 _codsez, _codsot; - bool _indirizzo, _datanasc, _categoria, _sezione, _gruppoab0, _rhantid; + bool _indirizzo, _datanasc, _categoria, _sezione, _gruppoab0; + bool _rhantid, _tessera, _telabi, _cf; protected: virtual bool user_create(); @@ -75,6 +74,7 @@ void TStampaIncompleti::set_page(int file, int cnt) set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); set_row(2,"@49g#a", &_dencom); set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + set_row(3,""); } bool TStampaIncompleti::filter_func_incompleti(const TRelation* rel) @@ -102,9 +102,9 @@ bool TStampaIncompleti::filter_func_incompleti(const TRelation* rel) } if (app()._catdon.items() == 0 && app()._catnondon.items() == 0) filtrato = TRUE; - incompleto = !(app()._indirizzo || app()._datanasc - || app()._categoria || app()._sezione - || app()._gruppoab0 || app()._rhantid); + incompleto = !(app()._indirizzo || app()._datanasc || app()._categoria + || app()._sezione || app()._gruppoab0 || app()._rhantid + || app()._tessera || app()._telabi || app()._cf); if (filtrato && app()._indirizzo && !incompleto) { @@ -139,6 +139,21 @@ bool TStampaIncompleti::filter_func_incompleti(const TRelation* rel) TString16 rhantid = sog.get(SOG_RHANTID); incompleto = rhantid.empty(); } + if (filtrato && app()._tessera && !incompleto) + { + TString16 tessera = sog.get(SOG_TESSAVIS); + incompleto = tessera.empty(); + } + if (filtrato && app()._telabi && !incompleto) + { + TString16 telabi = sog.get(SOG_TELABI); + incompleto = telabi.empty(); + } + if (filtrato && app()._cf && !incompleto) + { + TString16 cf = sog.get(SOG_CF); + incompleto = cf.empty(); + } filtrato = (filtrato && incompleto); return filtrato; } @@ -198,6 +213,8 @@ bool TStampaIncompleti::preprocess_page(int file, int counter) _codsot = codsot; header_sezione(codsez, codsot); } + if (printer().rows_left()<3) + printer().formfeed(); return TRUE; } @@ -254,6 +271,9 @@ bool TStampaIncompleti::set_print(int m) _sezione = _msk->get_bool(F_SEZIONE); _gruppoab0 = _msk->get_bool(F_GRUPPOAB0); _rhantid = _msk->get_bool(F_RHANTID); + _tessera = _msk->get_bool(F_TESSERA); + _telabi = _msk->get_bool(F_TELABI); + _cf = _msk->get_bool(F_CF); //current_cursor()->setfilter("DOM_CODCOM == \"\""); current_cursor()->set_filterfunction (filter_func_incompleti); reset_print(); @@ -276,12 +296,33 @@ void TStampaIncompleti::crea_intestazione() sep = ""; sep << "Pag. @#"; set_header(2, "@120g%s", (const char*) sep); + sep = "DATI MANCANTI: "; + if (_indirizzo) + sep << "INDIRIZZO - "; + if (_datanasc) + sep << "DATA NASCITA - "; + if (_gruppoab0) + sep << "GRUPPO AB0 - "; + if (_rhantid) + sep << "RH/ANTID - "; + if (_sezione) + sep << "SEZIONE - "; + if (_categoria) + sep << "CATEGORIA - "; + if (_tessera) + sep << "TESSERA - "; + if (_telabi) + sep << "TEL. ABIT. - "; + if (_cf) + sep << "COD. FISCALE - "; + sep.center_just(); + set_header(3, (const char *) sep); sep = ""; sep.fill('-'); - set_header(3, (const char *) sep); - set_header(4,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro"); - set_header(5,"@49gCAP/Località/Comune/Prov.@116gTelefono altro"); - set_header(6,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------"); + set_header(4, (const char *) sep); + set_header(5,"@0gCodice@9gC.@12gCognome e nome@38gNato il@49gIndirizzo@100gTelefono abit.@116gTelefono lavoro"); + set_header(6,"@49gCAP/Località/Comune/Prov.@116gTelefono altro"); + set_header(7,"@0g--------@9g--@12g-------------------------@38g----------@49g--------------------------------------------------@100g---------------@116g---------------"); } bool TStampaIncompleti::user_create() @@ -289,10 +330,8 @@ bool TStampaIncompleti::user_create() _rel = new TRelation(LF_SOGGETTI); _rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCP); _rel->add(LF_COMUNI, "COM==DOM_CODCOM"); - // per stampare nell'intestazione la denominazione della sezione _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); - // ordinamento per sezione+sottogruppo+cognome+nome - _cur = add_cursor(new TCursor(_rel, "", 3)); + add_cursor(new TCursor(_rel, "", 3)); _msk = new TMask("at6400a"); return TRUE; } diff --git a/at/at6400a.h b/at/at6400a.h index 9d4ae1fb6..25d3b6051 100755 --- a/at/at6400a.h +++ b/at/at6400a.h @@ -42,3 +42,6 @@ #define F_RHANTID 404 #define F_CATEGORIA 405 #define F_SEZIONE 406 +#define F_TESSERA 407 +#define F_TELABI 408 +#define F_CF 409 diff --git a/at/at6400a.uml b/at/at6400a.uml index a7f4b4fe1..9bc7ed28b 100755 --- a/at/at6400a.uml +++ b/at/at6400a.uml @@ -1,5 +1,19 @@ #include "at6400a.h" +TOOLBAR "" 0 20 0 2 + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" +END + +END + PAGE "Stampa soggetti incompleti" -1 -1 78 20 GROUPBOX DLG_NULL 77 4 @@ -369,9 +383,9 @@ BEGIN FLAGS "D" END -GROUPBOX DLG_NULL 77 4 +GROUPBOX DLG_NULL 77 5 BEGIN - PROMPT 1 14 "Soggetti con i seguenti dati incompleti" + PROMPT 1 14 "Soggetti con i seguenti dati mancanti" END BOOLEAN F_INDIRIZZO @@ -386,32 +400,37 @@ END BOOLEAN F_CATEGORIA BEGIN - PROMPT 27 15 "Categoria" + PROMPT 2 17 "Categoria" END BOOLEAN F_SEZIONE BEGIN - PROMPT 27 16 "Sezione di appartenenza" + PROMPT 27 15 "Sezione di appartenenza" END BOOLEAN F_GRUPPOAB0 BEGIN - PROMPT 57 15 "Gruppo AB0" + PROMPT 27 16 "Gruppo AB0" END BOOLEAN F_RHANTID BEGIN - PROMPT 57 16 "Rh/AntiD" + PROMPT 27 17 "Rh/AntiD" END -BUTTON DLG_OK 9 2 +BOOLEAN F_TESSERA BEGIN - PROMPT -12 -1 "" + PROMPT 57 15 "Tessera AVIS" END -BUTTON DLG_QUIT 9 2 +BOOLEAN F_TELABI BEGIN - PROMPT -22 -1 "" + PROMPT 57 16 "Tel. abit." +END + +BOOLEAN F_CF +BEGIN + PROMPT 57 17 "Codice fiscale" END ENDPAGE diff --git a/at/at6500.cpp b/at/at6500.cpp index 69d4b504d..cf7e5a798 100755 --- a/at/at6500.cpp +++ b/at/at6500.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "contsan.h" #include "soggetti.h" @@ -11,7 +10,7 @@ #include "at6.h" #include "at6500a.h" -#define ALIAS_TCS 100 +#define ALIAS_TCS 200 class TControlloControlli : public TPrintapp { diff --git a/at/at6600.cpp b/at/at6600.cpp index 3c0ce0f45..c93077306 100755 --- a/at/at6600.cpp +++ b/at/at6600.cpp @@ -1,5 +1,5 @@ #include -#include +//#include #include #include #include @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include "at6.h" @@ -94,6 +94,7 @@ class TRiepilogoDonazioni : public TApplication TAssoc_array* _colonne; TArray _righe; // array per riepilogo donazioni TArray _righe_prime; // array per riepilogo prime don + TString16 _sezini, _sotini, _sezfin, _sotfin; protected: virtual bool create(); @@ -244,10 +245,10 @@ bool TRiepilogoDonazioni::menu(MENU_TAG m) _dataini = msk.get(F_DATAINI); _datafin = msk.get(F_DATAFIN); _primedon = msk.get_bool(F_PRIMEDON); - //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); + _sezini = _msk->get(F_SEZINI); + _sotini = _msk->get(F_SOTINI); + _sezfin = _msk->get(F_SEZFIN); + _sotfin = _msk->get(F_SOTFIN); if (riepilogo()) stampa(); } @@ -576,8 +577,51 @@ bool TRiepilogoDonazioni::riepilogo() da.put(DON_DATADON, _dataini); if (_datafin.ok()) a.put(DON_DATADON, _datafin); - _cur = new TCursor(_rel, "", 2, &da, &a); - //current_cursor()->setfilter((const char*) filtro, TRUE); + _cur = new TCursor(_rel, "", 2, &da, &a); + TString256 filtro = ""; + + // filtro per sezione/sottogruppo + if (_sezini.not_empty()) + { + if (filtro.empty()) + filtro = format("(90->CODSEZ >= \"%s\")",(const char*)_sezini); + else + { + filtro << " && "; + filtro << format("(90->CODSEZ >= \"%s\")",(const char*)_sezini); + } + if (_sotini.not_empty()) + { + if (filtro.empty()) + filtro = format("(90->CODSOT >= \"%s\")",(const char*)_sotini); + else + { + filtro << " && "; + filtro << format("(90->CODSOT >= \"%s\")",(const char*)_sotini); + } + } + } + if (_sezfin.not_empty()) + { + if (filtro.empty()) + filtro = format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin); + else + { + filtro << " && "; + filtro << format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin); + } + if (_sotfin.not_empty()) + { + if (filtro.empty()) + filtro = format("(90->CODSOT <= \"%s\")",(const char*)_sotfin); + else + { + filtro << " && "; + filtro << format("(90->CODSOT <= \"%s\")",(const char*)_sotfin); + } + } + } + _cur->setfilter((const char*) filtro, TRUE); TString16 codsez, codsot, tipodon; TDate datadon; int anno, mese; @@ -645,6 +689,6 @@ bool TRiepilogoDonazioni::riepilogo() int at6600(int argc, char* argv[]) { TRiepilogoDonazioni a; - a.run(argc, argv, "Riepilogo donazioni"); + a.run(argc, argv, "Riepilogo mensile donazioni"); return 0; } \ No newline at end of file diff --git a/at/at6700.cpp b/at/at6700.cpp index ded24422b..981deb926 100755 --- a/at/at6700.cpp +++ b/at/at6700.cpp @@ -1,5 +1,5 @@ #include -#include +//#include #include #include #include @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include "at6.h" @@ -92,6 +92,7 @@ class TRiepilogoGiornaliero : public TApplication TAssoc_array* _colonne; TArray _righe; // array per riepilogo donazioni TArray _righe_prime; // array per riepilogo prime don + TString16 _sezini, _sotini, _sezfin, _sotfin; protected: virtual bool create(); @@ -178,10 +179,10 @@ bool TRiepilogoGiornaliero::menu(MENU_TAG m) _dataini = msk.get(F_DATAINI); _datafin = msk.get(F_DATAFIN); _primedon = msk.get_bool(F_PRIMEDON); - //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); + _sezini = _msk->get(F_SEZINI); + _sotini = _msk->get(F_SOTINI); + _sezfin = _msk->get(F_SEZFIN); + _sotfin = _msk->get(F_SOTFIN); if (riepilogo()) stampa(); } @@ -458,7 +459,50 @@ bool TRiepilogoGiornaliero::riepilogo() if (_datafin.ok()) a.put(DON_DATADON, _datafin); _cur = new TCursor(_rel, "", 2, &da, &a); - //current_cursor()->setfilter((const char*) filtro, TRUE); + TString256 filtro = ""; + + // filtro per sezione/sottogruppo + if (_sezini.not_empty()) + { + if (filtro.empty()) + filtro = format("(90->CODSEZ >= \"%s\")",(const char*)_sezini); + else + { + filtro << " && "; + filtro << format("(90->CODSEZ >= \"%s\")",(const char*)_sezini); + } + if (_sotini.not_empty()) + { + if (filtro.empty()) + filtro = format("(90->CODSOT >= \"%s\")",(const char*)_sotini); + else + { + filtro << " && "; + filtro << format("(90->CODSOT >= \"%s\")",(const char*)_sotini); + } + } + } + if (_sezfin.not_empty()) + { + if (filtro.empty()) + filtro = format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin); + else + { + filtro << " && "; + filtro << format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin); + } + if (_sotfin.not_empty()) + { + if (filtro.empty()) + filtro = format("(90->CODSOT <= \"%s\")",(const char*)_sotfin); + else + { + filtro << " && "; + filtro << format("(90->CODSOT <= \"%s\")",(const char*)_sotfin); + } + } + } + _cur->setfilter((const char*) filtro, TRUE); TString16 codsez, codsot, tipodon; int anno, mese, giorno; TDate data; diff --git a/at/at7.cpp b/at/at7.cpp index 1f69a6133..0fbb88693 100755 --- a/at/at7.cpp +++ b/at/at7.cpp @@ -4,7 +4,7 @@ #include "at7.h" -#define usage "Error - usage : %s -{0|1|2|3|4}" +#define usage "Error - usage : %s -{0|1|2|3|4|5|6|7|8}" int main(int argc,char** argv) @@ -24,6 +24,14 @@ int main(int argc,char** argv) rt = at7400(argc,argv) ; break; case 4: rt = at7500(argc,argv) ; break; + case 5: + rt = at7600(argc,argv) ; break; + case 6: + rt = at7700(argc,argv) ; break; + case 7: + rt = at7800(argc,argv) ; break; + case 8: + rt = at7900(argc,argv) ; break; default: error_box(usage, argv[0]) ; break; } diff --git a/at/at7.h b/at/at7.h index 70bbdbafb..db6cd2ad9 100755 --- a/at/at7.h +++ b/at/at7.h @@ -6,6 +6,10 @@ int at7200(int argc, char* argv[]); int at7300(int argc, char* argv[]); int at7400(int argc, char* argv[]); int at7500(int argc, char* argv[]); +int at7600(int argc, char* argv[]); +int at7700(int argc, char* argv[]); +int at7800(int argc, char* argv[]); +int at7900(int argc, char* argv[]); #endif // __AT7_H diff --git a/at/at7.url b/at/at7.url index cde2661ca..1c8f68f69 100755 --- a/at/at7.url +++ b/at/at7.url @@ -29,3 +29,23 @@ MENUBAR MENU_BAR(4) MENU MENU_BAR(4) SUBMENU MENU_FILE "~File" +/* at7 -5 riordina controlli */ +MENUBAR MENU_BAR(5) +MENU MENU_BAR(5) + SUBMENU MENU_FILE "~File" + +/* at7 -6 riordina controlli */ +MENUBAR MENU_BAR(6) +MENU MENU_BAR(6) + SUBMENU MENU_FILE "~File" + +/* at7 -7 soggetti senza categoria donatori diventano AV */ +MENUBAR MENU_BAR(7) +MENU MENU_BAR(7) + SUBMENU MENU_FILE "~File" + +/* at7 -8 correzione date prossima AF */ +MENUBAR MENU_BAR(8) +MENU MENU_BAR(8) + SUBMENU MENU_FILE "~File" + diff --git a/at/at7100.cpp b/at/at7100.cpp index 24705f7a4..5fe69f5eb 100755 --- a/at/at7100.cpp +++ b/at/at7100.cpp @@ -39,31 +39,43 @@ bool TAggiornaCAP::preprocess_page(int file, int counter) TString16 cap; TString16 loc; TString16 com; + TString16 capcom; TRectype& recsog = current_cursor()->curr(); cap = recsog.get(SOG_DOM_CAP); com = recsog.get(SOG_DOM_CODCOM); + loc = recsog.get(SOG_DOM_CODLOC); + if (loc.empty()) + capcom = current_cursor()->file(-ALIAS_COMD).get("CAPCOM"); + else + capcom = current_cursor()->file(-ALIAS_LCPD).get("S6"); if (cap.empty() && com.not_empty()) { - loc = recsog.get(SOG_DOM_CODLOC); - if (loc.empty()) - cap = current_cursor()->file(-ALIAS_COMD).get("CAPCOM"); - else - cap = current_cursor()->file(-ALIAS_LCPD).get("S6"); - recsog.put(SOG_DOM_CAP, cap); + recsog.put(SOG_DOM_CAP, capcom); rew = TRUE; } + if (cap.not_empty() && com.not_empty() && (cap != capcom)) + { + recsog.put(SOG_DOM_CAP, capcom); + rew = TRUE; + } + cap = recsog.get(SOG_RES_CAP); com = recsog.get(SOG_RES_CODCOM); + loc = recsog.get(SOG_RES_CODLOC); + if (loc.empty()) + capcom = current_cursor()->file(-ALIAS_COMR).get("CAPCOM"); + else + capcom = current_cursor()->file(-ALIAS_LCPR).get("S6"); if (cap.empty() && com.not_empty()) { - loc = recsog.get(SOG_RES_CODLOC); - if (loc.empty()) - cap = current_cursor()->file(-ALIAS_COMR).get("CAPCOM"); - else - cap = current_cursor()->file(-ALIAS_LCPR).get("S6"); - recsog.put(SOG_RES_CAP, cap); + recsog.put(SOG_RES_CAP, capcom); rew = TRUE; } + if (cap.not_empty() && com.not_empty() && (cap != capcom)) + { + recsog.put(SOG_RES_CAP, capcom); + rew = TRUE; + } if (rew) current_cursor()->file().rewrite(); return rew; @@ -74,6 +86,9 @@ void TAggiornaCAP::set_page(int file, int cnt) set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_COGNOME)); set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_NOME)); + set_row(1,"@62g@S", FLD(LF_SOGGETTI,SOG_CODSEZ)); + set_row(1,"@67g@S", FLD(LF_SOGGETTI,SOG_DOM_CAP)); + set_row(1,"@74g@S", FLD(LF_SOGGETTI,SOG_RES_CAP)); } bool TAggiornaCAP::set_print(int) diff --git a/at/at7200.cpp b/at/at7200.cpp index 395f5f72b..13a2f6661 100755 --- a/at/at7200.cpp +++ b/at/at7200.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -8,16 +9,15 @@ // nomi dei campi #include "soggetti.h" +#include "donaz.h" -class TBolzano_app : public TPrintapp +class TPrimaDon : public TPrintapp { TMask* _msk; TRelation* _rel; int _cur; - TString16 _cateme; - TString16 _catdec; - TString16 _fenEE; - TString16 _fenee; + TLocalisamfile* _donaz; + TRecord_array* _sdonazioni; protected: virtual bool user_create(); @@ -27,79 +27,49 @@ protected: virtual bool preprocess_page(int file, int counter); public: - TBolzano_app() {} + TPrimaDon() {} }; -HIDDEN inline TBolzano_app& app() { return (TBolzano_app&) main_app(); } +HIDDEN inline TPrimaDon& app() { return (TPrimaDon&) main_app(); } -bool TBolzano_app::preprocess_page(int file, int counter) +bool TPrimaDon::preprocess_page(int file, int counter) { - bool rew = FALSE; + bool rewrite = FALSE; TRectype& recsog = current_cursor()->curr(); - // luogo di lavoro == gruppo aziendale - TString16 luogo; - luogo = recsog.get(SOG_LUOGOLAV); - if (luogo.not_empty()) - { - recsog.put(SOG_GRUPPOAZIE, luogo); - rew = TRUE; - } - // categorie EM/DE scambiate - TString16 cat; - cat = recsog.get(SOG_CATDON); - if (cat == _cateme) - { - recsog.put(SOG_CATDON, _catdec); - rew = TRUE; - } - if (cat == _catdec) - { - recsog.put(SOG_CATDON, _cateme); - rew = TRUE; - } - long cod = recsog.get_long(SOG_CODICE); - if (cod < 15077) - { - TString16 fenotipo; - fenotipo = recsog.get(SOG_FENOTIPORH); - if (fenotipo.not_empty()) + const long codice = recsog.get_long(SOG_CODICE); + TRectype* keyd = new TRectype(LF_DONAZ); + keyd->put(DON_CODICE, codice); + int errd = _sdonazioni->read(keyd); + if ((errd == NOERR) && (_sdonazioni->rows()>0)) + { + TDate dataprisi = recsog.get(SOG_DATAPRISI); + TDate datapriaf = recsog.get(SOG_DATAPRIAF); + + TRectype& riga = _sdonazioni->row(1, TRUE); + TDate datadon = riga.get(DON_DATADON); + if (datadon==dataprisi || datadon==datapriaf) { - int pos; - pos = fenotipo.find(_fenEE); - if (pos > 0) + rewrite = TRUE; + riga.put(DON_PRIMADON, TRUE); + } + else + if ((!dataprisi.ok()) && (!datapriaf.ok())) { - fenotipo.overwrite(_fenee,pos); - recsog.put(SOG_FENOTIPORH,fenotipo); - rew = TRUE; - } - else - { - pos = fenotipo.find(_fenee); - if (pos > 0) - { - fenotipo.overwrite(_fenEE,pos); - recsog.put(SOG_FENOTIPORH,fenotipo); - rew = TRUE; - } - } - } - } - if (rew) - current_cursor()->file().rewrite(); - return rew; + rewrite = TRUE; + riga.put(DON_PRIMADON, TRUE); + } + if (rewrite) + _sdonazioni->rewrite(); + } + return rewrite; } -void TBolzano_app::set_page(int file, int cnt) +void TPrimaDon::set_page(int file, int cnt) { set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); - set_row(1,"@10g@S", FLD(LF_SOGGETTI,SOG_COGNOME)); - set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_NOME)); - set_row(1,"@62g@S", FLD(LF_SOGGETTI,SOG_CATDON)); - set_row(1,"@65g@S", FLD(LF_SOGGETTI,SOG_LUOGOLAV)); - set_row(1,"@70g@S", FLD(LF_SOGGETTI,SOG_FENOTIPORH)); } -bool TBolzano_app::set_print(int) +bool TPrimaDon::set_print(int) { KEY tasto; tasto = _msk->run(); @@ -108,34 +78,34 @@ bool TBolzano_app::set_print(int) reset_files(); add_file(LF_SOGGETTI); reset_print(); - _cateme = "EM"; - _catdec = "DE"; - _fenEE = "EE"; - _fenee = "ee"; return TRUE; } else return FALSE; } -bool TBolzano_app::user_create() +bool TPrimaDon::user_create() { _msk = new TMask("at7200a"); _rel = new TRelation(LF_SOGGETTI); + _donaz = new TLocalisamfile(LF_DONAZ); + _sdonazioni = new TRecord_array(LF_DONAZ,DON_PROGDON); _cur = add_cursor(new TCursor(_rel, "", 1)); return TRUE; } -bool TBolzano_app::user_destroy() +bool TPrimaDon::user_destroy() { - delete _rel; delete _msk; + delete _rel; + delete _donaz; + delete _sdonazioni; return TRUE; } int at7200(int argc, char* argv[]) { - TBolzano_app a; - a.run(argc, argv, "Correzioni per AVIS Bolzano"); + TPrimaDon a; + a.run(argc, argv, "Marca prime donazioni"); return 0; } \ No newline at end of file diff --git a/at/at7200a.uml b/at/at7200a.uml index 89eea4a52..dd6692258 100755 --- a/at/at7200a.uml +++ b/at/at7200a.uml @@ -1,4 +1,4 @@ -PAGE "Correzioni per AVIS Bolzano" -1 -1 78 20 +PAGE "Marca prime donazioni" -1 -1 78 20 BUTTON DLG_OK 9 2 BEGIN diff --git a/at/at7300.cpp b/at/at7300.cpp index 6043c7f4a..29af16c73 100755 --- a/at/at7300.cpp +++ b/at/at7300.cpp @@ -48,15 +48,25 @@ bool TFS_NoData_app::preprocess_page(int file, int counter) if (err == NOERR) { const int numrighe = _scontrolli->rows(); - if (numrighe > 1) + if (numrighe > 0) { - const TRectype& riga = _scontrolli->row(numrighe-1); + const TRectype& riga = _scontrolli->row(numrighe); const TString16 tipocon = riga.get(CON_TIPOCON); const TString16 prosstipo = riga.get(CON_PROSSTIPO); const TDate prossdata = riga.get(CON_PROSSDATA); const TDate datanulla(NULLDATE); - if ((tipocon == _sospensione) && (prosstipo == _finesospensione) && (prossdata == datanulla)) - rew = TRUE; + if ((tipocon == _sospensione) && (prosstipo == _finesospensione) && (prossdata != datanulla)) + { + TString16 statopross = recsog.get(SOG_PROS_STATO); + TDate datapross = recsog.get(SOG_DATA_PROS); + if (statopross.empty() && datapross == datanulla) + { + recsog.put(SOG_PROS_STATO, prosstipo); + recsog.put(SOG_DATA_PROS, prossdata); + current_cursor()->file().rewrite(); + rew = TRUE; + } + } } } return rew; @@ -80,7 +90,7 @@ bool TFS_NoData_app::set_print(int) reset_print(); _sospensione = "SO"; _finesospensione = "FS"; - current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)_finesospensione)); + current_cursor()->setfilter(format("STATO == \"%s\"",(const char*)_sospensione)); return TRUE; } else @@ -109,6 +119,6 @@ bool TFS_NoData_app::user_destroy() int at7300(int argc, char* argv[]) { TFS_NoData_app a; - a.run(argc, argv, "Stampa SO ripristinati senza data FS"); + a.run(argc, argv, "Correzione stato e data prossimo stato"); return 0; } \ No newline at end of file diff --git a/at/at_pagin.frm b/at/at_pagin.frm index ae296d63b..7a4fc45ae 100755 --- a/at/at_pagin.frm +++ b/at/at_pagin.frm @@ -1,836 +1,547 @@ USE 90 -JOIN CTD ALIAS 100 INTO CODTAB==CATDON -JOIN CTN ALIAS 110 INTO CODTAB==CATNOND1 -JOIN CTN ALIAS 120 INTO CODTAB==CATNOND2 -JOIN TCS ALIAS 200 INTO CODTAB==STATO -JOIN LDN ALIAS 300 INTO CODTAB==PUNTORACC -JOIN LCP ALIAS 400 INTO CODTAB==RES_CODLOC -JOIN LCP ALIAS 410 INTO CODTAB==DOM_CODLOC -JOIN 13 ALIAS 500 INTO COM==RES_CODCOM -JOIN 13 ALIAS 510 INTO COM==DOM_CODCOM -JOIN 13 ALIAS 520 INTO COM==COMNASC -JOIN 96 INTO CODSEZ==CODSEZ +JOIN 13 ALIAS 500 INTO COM==COMNASC +JOIN 13 ALIAS 501 INTO COM==DOM_CODCOM +JOIN LCP ALIAS 100 INTO CODTAB==DOM_CODLOC +JOIN 96 INTO CODSEZ==CODSEZ|CODSOT=CODSOT JOIN 97 INTO CODMED==CODMED +JOIN CTD ALIAS 700 INTO CODTAB==CATDON +JOIN TCS ALIAS 200 INTO CODTAB==STATO +JOIN LDN ALIAS 400 INTO CODTAB==PUNTORACC +JOIN GAZ ALIAS 300 INTO CODTAB==GRUPPOAZIE +JOIN 94 INTO CODICE==CODICE +JOIN BNZ TO 94 ALIAS 600 INTO CODTAB==TIPOBEN END - DESCRIPTION BEGIN 90->* "Soggetti Sezioni AVIS" - CTD->* "Categorie donatori" - CTN->* "Categorie non donatori" - TCS->* "Tipi/Esiti controlli sanitari" - LDN->* "Luoghi di donazione/Punti di raccolta" - LCP->* "Localita' postali" - 13->* "COMUNI" + 100@->* "Localita' postali" + 200@->* "TCS" + 300@->* "GAZ" + 100@->* "LCP" + 500@->* "Comune di nascita" + 501@->* "Comuni di domicilio" + 600@->* "Tabella benemerenze" 96->* "Sezioni AVIS" 97->* "Medici" + 94->* "Benemerenze" END GENERAL BEGIN OFFSET 0 0 - FONT "Arial" + FONT "Courier New" SIZE 12 GRID "" END -SECTION BODY ODD 33 +SECTION BODY ODD 60 -NUMERO 1 15 +STRINGA 1 50 BEGIN - KEY "Codice" - FIELD 90->CODICE - PROMPT 1 1 "Codice " + KEY "Intestazione della scheda + data del giorno" + PROMPT 1 1 "SCHEDA ANAGRAFICA SOGGETTO stampata il " + MESSAGE _TODAY END -STRINGA 2 33 -BEGIN - KEY "Cognome" - FIELD 90->COGNOME - PROMPT 17 1 "Cognome " -END - -STRINGA 3 30 -BEGIN - KEY "Nome" - FIELD 90->NOME - PROMPT 52 1 "Nome " -END - -DATA 4 18 -BEGIN - KEY "Data nascita" - FIELD 90->DATANASC - PROMPT 1 2 "Nato il " -END - -STRINGA 5 30 -BEGIN - KEY "Comune di nascita" - PROMPT 0 0 "" - FIELD 520@->DENCOM - FLAG "H" - MESSAGE RESET,7|COPY,7 -END - -STRINGA 6 5 -BEGIN - KEY "Provincia di nascita" - PROMPT 0 0 "" - FIELD 520@->PROVCOM - FLAG "H" - MESSAGE APPEND,7 -END - -STRINGA 7 40 -BEGIN - KEY "Comune e provincia di nascita" - PROMPT 20 2 "Nato a " -END - -STRINGA 8 6 -BEGIN - KEY "Testo" - PROMPT 62 2 "Sesso " -END - -LISTA 9 -BEGIN - KEY "Sesso" - PROMPT 68 2 "Sesso " - FIELD 90->SESSO - ITEM "0|Sconosciuto" - ITEM "1|Maschio" - ITEM "2|Femmina" - ITEM "9|Non specif." -END - -STRINGA 10 7 -BEGIN - KEY "Codice sezione" - FIELD 90->CODSEZ - PROMPT 1 4 "Sez. " -END - -STRINGA 11 25 +STRINGA 2 35 BEGIN KEY "Denominazione sezione" + PROMPT 1 2 "Sezione " FIELD 96->DENSEZ - PROMPT 9 4 "" END -STRINGA 12 7 +STRINGA 3 35 BEGIN - KEY "Codice sottog." - FIELD 90->CODSOT - PROMPT 41 4 "Sot. " -END - -STRINGA 13 25 -BEGIN - KEY "Denominazione sottog." + KEY "Denominazione sottogruppo" + PROMPT 40 2 "Sottog. " FIELD 96->DENSOT - PROMPT 49 4 "" END -STRINGA 14 7 +STRINGA 4 25 BEGIN - KEY "Categoria don." - FIELD 90->CATDON - PROMPT 1 5 "Cat. " + KEY "Cognome" + PROMPT 0 0 "" + FLAGS "H" + MESSAGE RESET,6|COPY,6 + FIELD 90->COGNOME END -STRINGA 15 25 +STRINGA 5 25 BEGIN - KEY "Descrizione categoria" - FIELD 100@->S0 - PROMPT 9 5 "" + KEY "Nome" + PROMPT 0 0 "" + FLAGS "H" + MESSAGE APPEND,6 + FIELD 90->NOME END -DATA 16 21 +STRINGA 6 51 1 BEGIN - KEY "Data iscrizione" - FIELD 90->DATAISC - PROMPT 36 5 "Data iscr. " + KEY "Cognome e nome" + PROMPT 1 4 "" END -DATA 17 20 +STRINGA 7 30 1 BEGIN - KEY "Data dimissione" - FIELD 90->DATADIM - PROMPT 59 5 "Data dim. " + KEY "Indirizzo" + PROMPT 1 6 "" + FIELD 90->DOM_INDIR END -STRINGA 18 16 +STRINGA 8 4 BEGIN - KEY "Tessera AVIS" - FIELD 90->TESSAVIS - PROMPT 1 7 "Tess.AVIS " + KEY "Codice localita'" + PROMPT 0 0 "" + FLAGS "H" + FIELD 90->DOM_CODLOC END -STRINGA 19 13 +STRINGA 9 5 BEGIN - KEY "Codice Centro Trasfusionale" - FIELD 90->CODCT - PROMPT 18 7 "Cod.CT " + KEY "CAP" + PROMPT 1 7 "" + FIELD 100@->S6 + FIELD 501@->CAPCOM END -STRINGA 20 16 +STRINGA 10 30 BEGIN - KEY "Cartella clinica" - FIELD 90->CODCL - PROMPT 33 7 "Car.clin. " + KEY "Denominazione localita' o comune" + PROMPT 0 0 "" + FLAGS "H" + MESSAGE RESET,12|COPY,12 + FIELD 100@->S0 + FIELD 501@->DENCOM END -STRINGA 21 28 +STRINGA 11 5 BEGIN - KEY "Documento di identita'" - FIELD 90->DOCID - PROMPT 51 7 "Doc.id. " + KEY "Provincia" + PROMPT 0 0 "" + FLAGS "H" + MESSAGE APPEND,12 + FIELD 501@->PROVCOM END -STRINGA 22 26 +STRINGA 12 44 2 BEGIN - KEY "Codice fiscale" - FIELD 90->CF - PROMPT 1 8 "Cod.fisc. " + KEY "Loc./Com. e Prov." + PROMPT 7 7 "" END -STRINGA 23 10 +STRINGA 12 50 BEGIN - KEY "Testo" - PROMPT 1 10 "Domicilio:" + KEY "Comune di nascita" + PROMPT 0 0 "" + FLAGS "H" + MESSAGE RESET,14|COPY,14 + FIELD 500@->DENCOM END -STRINGA 24 30 +STRINGA 13 5 BEGIN - KEY "Domicilio: indirizzo" - FIELD 90->DOM_INDIR - PROMPT 1 11 "" - MESSAGE RESET,30 + KEY "Provincia di nascita" + PROMPT 0 0 "" + FLAGS "H" + MESSAGE APPEND,14 + FIELD 500@->PROVCOM END -STRINGA 25 4 +STRINGA 14 55 BEGIN - KEY "Domicilio: codice localita'" - FIELD 90->DOM_CODLOC - PROMPT 0 0 "" - FLAG "H" + KEY "Comune e provincia di nascita" + PROMPT 1 9 "Nato a " END -STRINGA 26 5 +DATA 15 18 BEGIN - KEY "Domicilio: CAP" - FIELD 410@->S6 - FIELD 510@->CAPCOM - PROMPT 0 0 "" - FLAG "H" - MESSAGE APPEND,30 + KEY "Data nascita" + PROMPT 55 4 "Nato il " + FIELD 90->DATANASC + FORMAT "1444-" END -STRINGA 27 30 +LISTA 16 BEGIN - KEY "Domicilio: localita'" - FIELD 410@->S0 - PROMPT 0 0 "" - FLAG "H" - MESSAGE APPEND,30 + KEY "Sesso" + PROMPT 55 6 "Sesso " + FIELD 90->SESSO + ITEM "0|Sesso ?" + ITEM "1|Maschio" + ITEM "2|Femmina" + ITEM "9|Sesso ?" END -STRINGA 28 50 -BEGIN - KEY "Domicilio: comune" - FIELD 510@->DENCOM - PROMPT 0 0 "" - FLAG "H" - MESSAGE APPEND,30 -END - -STRINGA 29 5 -BEGIN - KEY "Domicilio: provincia" - FIELD 510@->PROVCOM - PROMPT 0 0 "" - FLAG "H" - MESSAGE APPEND,30 -END - -STRINGA 30 39 3 -BEGIN - KEY "Domicilio: Loc/Com/Prov" - PROMPT 1 12 "" -END - -STRINGA 31 10 -BEGIN - KEY "Testo" - PROMPT 41 10 "Residenza:" -END - -STRINGA 32 30 -BEGIN - KEY "Residenza: indirizzo" - FIELD 90->RES_INDIR - PROMPT 41 11 "" - MESSAGE RESET,38 -END - -STRINGA 33 4 -BEGIN - KEY "Residenza: codice localita'" - FIELD 90->RES_CODLOC - PROMPT 0 0 "" - FLAG "H" -END - -STRINGA 34 5 -BEGIN - KEY "Residenza: CAP" - FIELD 400@->S6 - FIELD 500@->CAPCOM - PROMPT 0 0 "" - FLAG "H" - MESSAGE APPEND,38 -END - -STRINGA 35 30 -BEGIN - KEY "Residenza: localita'" - FIELD 400@->S0 - PROMPT 0 0 "" - FLAG "H" - MESSAGE APPEND,38 -END - -STRINGA 36 50 -BEGIN - KEY "Residenza: comune" - FIELD 500@->DENCOM - PROMPT 0 0 "" - FLAG "H" - MESSAGE APPEND,38 -END - -STRINGA 37 5 -BEGIN - KEY "Residenza: provincia" - FIELD 500@->PROVCOM - PROMPT 0 0 "" - FLAG "H" - MESSAGE APPEND,38 -END - -STRINGA 38 39 3 -BEGIN - KEY "Residenza: Loc/Com/Prov" - PROMPT 41 12 "" -END - -STRINGA 39 23 +STRINGA 17 25 BEGIN KEY "Telefono abitazione" + PROMPT 55 7 "Tel.abi. " FIELD 90->TELABI - PROMPT 1 15 "Tel.abi. " END -STRINGA 40 23 +STRINGA 18 25 BEGIN KEY "Telefono lavoro" + PROMPT 55 8 "Tel.lav. " FIELD 90->TELLAV - PROMPT 25 15 "Tel.lav. " END -STRINGA 41 25 +STRINGA 19 25 BEGIN - KEY "Telefono altro" + KEY "Telefono altri" + PROMPT 55 9 "Altro " FIELD 90->TELALT - PROMPT 49 15 "Tel.altro " END -STRINGA 42 +NUMERO 20 20 BEGIN - KEY "Testo" - PROMPT 1 16 "Escluso " + KEY "Codice soggetto" + PROMPT 1 11 "Codice " + FIELD 90->CODICE END -LISTA 43 +STRINGA 21 20 BEGIN - KEY "Esclusione" - FIELD 90->ESCLUSO - ITEM " | " - ITEM "TI|T. indeterminato" - ITEM "TD|T. determinato" - PROMPT 10 16 "Escluso " + KEY "Cartella clinica" + PROMPT 1 12 "Cart.clin. " + FIELD 90->CODCL END -DATA 44 18 +STRINGA 22 20 BEGIN - KEY "Data termine esclusione" - FIELD 90->TERMESCL - PROMPT 27 16 "Termine " + KEY "Tessera AVIS" + PROMPT 1 13 "Tessera " + FIELD 90->TESSAVIS END -STRINGA 45 35 +STRINGA 23 31 BEGIN - KEY "Motivo esclusione" - FIELD 90->MOTESCL - PROMPT 46 16 "Per " + KEY "Documento identita'" + PROMPT 1 14 "Doc.ident. " + FIELD 90->DOCID END -STRINGA 46 26 +STRINGA 24 25 BEGIN - KEY "Descrizione stato" - FIELD 200@->S3 - PROMPT 1 17 "Stato " + KEY "Codice fiscale" + PROMPT 1 15 "Cod. fisc. " + FIELD 90->CF END -DATA 47 15 +STRINGA 25 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" + KEY "Gruppo sanguigno" + PROMPT 35 11 "Gruppo " FIELD 90->GRUPPOAB0 - PROMPT 1 23 "Gruppo AB0 " END -STRINGA 73 12 +STRINGA 26 15 BEGIN KEY "Rh/AntiD" + PROMPT 35 12 "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 +STRINGA 27 15 BEGIN KEY "Fenotipo Rh" + PROMPT 35 13 "Fenotipo " FIELD 90->FENOTIPORH - PROMPT 40 23 "Fenotipo Rh " END -STRINGA 76 12 +STRINGA 28 15 +BEGIN + KEY "Kell" + PROMPT 35 14 "Kell " + FIELD 90->KELL +END + +STRINGA 29 15 BEGIN KEY "Du" + PROMPT 35 15 "Du " FIELD 90->DU - PROMPT 60 23 "Du " END -NUMERO 77 13 + +STRINGA 30 25 BEGIN - KEY "Codice medico" - FIELD 90->CODMED - PROMPT 1 24 "Medico " + KEY "Stato " + PROMPT 55 11 "Stato att. " + FIELD 200@->S0[1,15] END -STRINGA 78 25 +DATA 31 25 +BEGIN + KEY "Data stato" + PROMPT 55 12 "Data stato " + FIELD 90->DATASTATO +END + +DATA 31 25 +BEGIN + KEY "Data fine sospensione" + PROMPT 55 13 "Data fine " + FIELD 90->DATA_PROS +END + +DATA 32 25 +BEGIN + KEY "Data iscrizione" + PROMPT 55 14 "Data iscr. " + FIELD 90->DATAISC +END + +DATA 33 25 +BEGIN + KEY "Data ult. agg. " + PROMPT 55 15 "Ultimo agg. " + FIELD 90->DATAULTAGG +END + +STRINGA 34 25 BEGIN KEY "Cognome medico" - FIELD 97->COGNOME + PROMPT 0 0 "" FLAGS "H" - MESSAGE RESET,80|COPY,80 + MESSAGE RESET,36|COPY,36 + FIELD 97->COGNOME END -STRINGA 79 25 +STRINGA 35 25 BEGIN KEY "Nome medico" - FIELD 97->NOME + PROMPT 0 0 "" FLAGS "H" - MESSAGE APPEND,80 + MESSAGE APPEND,36 + FIELD 97->NOME END -STRINGA 80 51 +STRINGA 36 51 1 BEGIN KEY "Cognome e nome medico" - PROMPT 15 24 "" + PROMPT 1 17 "Medico " END -STRINGA 81 10 +STRINGA 37 25 +BEGIN + KEY "Telefono ambulatorio" + PROMPT 1 18 "Tel.amb. " + FIELD 97->TELAMB +END + +STRINGA 38 25 +BEGIN + KEY "Numero libretto sanitario" + PROMPT 1 19 "Tess.SSN " +END + +NUMERO 39 15 +BEGIN + KEY "Numero cartolina" + PROMPT 55 17 "Num. convoc. " + FIELD 90->NUMCONV +END + +DATA 40 25 +BEGIN + KEY "Data ultima cartolina " + PROMPT 55 18 "Data ultima " + FIELD 90->DATACONV +END + +DATA 41 25 +BEGIN + KEY "Data ultima donazione" + PROMPT 1 21 "Ultima don. " + FIELD 90->DATAULTDON +END + +STRINGA 42 2 +BEGIN + KEY "Tipo ultima donazione" + PROMPT 24 21 "" + FIELD 90->TIPOULTDON +END + +NUMERO 43 15 +BEGIN + KEY "Totale donazioni" + PROMPT 1 22 "Totale don. " + FIELD 90->TOTDON +END + +STRINGA 44 15 +BEGIN + KEY "Idoneita' 1" + PROMPT 35 21 "Idoneita' " + FIELD 90->IDON1 +END + +STRINGA 45 2 +BEGIN + KEY "Idoneita' 2" + PROMPT 48 21 "" + FIELD 90->IDON2 +END + +STRINGA 46 2 +BEGIN + KEY "Idoneita' 3" + PROMPT 51 21 "" + FIELD 90->IDON3 +END + +STRINGA 47 2 +BEGIN + KEY "Idoneita' 4" + PROMPT 54 21 "" + FIELD 90->IDON4 +END + +NUMERO 48 15 +BEGIN + KEY "Intervallo SI" + PROMPT 35 22 "Interv. SI " + FIELD 90->INTSI +END + +NUMERO 49 15 +BEGIN + KEY "Intervallo AF" + PROMPT 35 23 "Interv. AF " + FIELD 90->INTAF +END + +DATA 49 +BEGIN + KEY "Data prossima SI" + PROMPT 1 23 "Prossima SI " + FIELD 90->DATAPROSSI +END + +DATA 49 +BEGIN + KEY "Data prossima AF" + PROMPT 1 24 "Prossima AF " + FIELD 90->DATAPROSAF +END + +STRINGA 50 12 BEGIN KEY "Testo" - PROMPT 1 25 "Mod.conv. " + PROMPT 55 19 "Mod.convoc. " END -LISTA 83 22 +LISTA 51 12 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" + KEY "Modalita' di convocazione" + PROMPT 67 19 "" + FIELD 90->MODCONV + ITEM " | " + ITEM "PO|Postale" + ITEM "T1|Tel. abitaz." + ITEM "T2|Tel. lavoro" + ITEM "T3|Tel. altro" + ITEM "TE|Telefonica" + ITEM "IN|Indifferente" END -STRINGA 84 19 +STRINGA 52 19 BEGIN - KEY "Codice punto di racolta" - FIELD 90->PUNTORACC - PROMPT 35 25 "Punto di racc. " + KEY "Codice punto di racolta" + PROMPT 0 0 "" + FLAGS "H" + FIELD 90->PUNTORACC END -STRINGA 85 25 +STRINGA 53 25 BEGIN KEY "Descrizione punto di raccolta" - FIELD 300@->S0 - PROMPT 56 25 "" + PROMPT 55 20 "Punto prel. " + FIELD 400@->S0 END -STRINGA 86 27 +STRINGA 54 25 BEGIN KEY "Testo" - PROMPT 1 26 "Giorni pref.: L M M G V S D" + PROMPT 55 21 "Giorni pr.: L M M G V S D" END -STRINGA 87 13 +STRINGA 55 2 BEGIN - KEY "Testo" - PROMPT 1 27 " Donazione" + KEY "Lu" + PROMPT 67 22 "" + FIELD 90->GIOPREDON[1,1] END -STRINGA 88 2 +STRINGA 56 2 BEGIN - KEY "Lu" - FIELD 90->GIOPREDON[1,1] - PROMPT 15 27 "" + KEY "Ma" + PROMPT 69 22 "" + FIELD 90->GIOPREDON[2,2] END -STRINGA 89 2 +STRINGA 57 2 BEGIN - KEY "Ma" - FIELD 90->GIOPREDON[2,2] - PROMPT 17 27 "" + KEY "Me" + PROMPT 71 22 "" + FIELD 90->GIOPREDON[3,3] END -STRINGA 90 2 +STRINGA 58 2 BEGIN - KEY "Me" - FIELD 90->GIOPREDON[3,3] - PROMPT 19 27 "" + KEY "Gi" + PROMPT 73 22 "" + FIELD 90->GIOPREDON[4,4] END -STRINGA 91 2 +STRINGA 59 2 BEGIN - KEY "Gi" - FIELD 90->GIOPREDON[4,4] - PROMPT 21 27 "" + KEY "Ve" + PROMPT 75 22 "" + FIELD 90->GIOPREDON[5,5] END -STRINGA 92 2 +STRINGA 60 2 BEGIN - KEY "Ve" - FIELD 90->GIOPREDON[5,5] - PROMPT 23 27 "" + KEY "Sa" + PROMPT 77 22 "" + FIELD 90->GIOPREDON[6,6] END -STRINGA 93 2 +STRINGA 61 2 BEGIN - KEY "Sa" - FIELD 90->GIOPREDON[6,6] - PROMPT 25 27 "" + KEY "Do" + PROMPT 79 22 "" + FIELD 90->GIOPREDON[7,7] END -STRINGA 94 2 +STRINGA 62 25 BEGIN - KEY "Do" - FIELD 90->GIOPREDON[7,7] - PROMPT 27 27 "" + KEY "Testo" + PROMPT 35 24 "B E N E M E R E N Z E" END -STRINGA 95 13 +SECTION BENEMERENZE 25 1 1 FILE 94 + +STRINGA 1 25 BEGIN - KEY "Testo" - PROMPT 1 28 " Controlli" + KEY "Benemerenza " + PROMPT 35 1 "" + FIELD 600@->S0[1,25] END -STRINGA 96 2 +DATA 2 10 BEGIN - KEY "Lu" - FIELD 90->GIOPRECON[1,1] - PROMPT 15 28 "" + KEY "Data attribuzione" + PROMPT 62 1 "" + FIELD 94->DATABEN END -STRINGA 97 2 -BEGIN - KEY "Ma" - FIELD 90->GIOPRECON[2,2] - PROMPT 17 28 "" -END +END // FINE SECTION BENEMERENZE -STRINGA 98 2 -BEGIN - KEY "Me" - FIELD 90->GIOPRECON[3,3] - PROMPT 19 28 "" -END +END // FINE SECTION BODY -STRINGA 99 2 -BEGIN - KEY "Gi" - FIELD 90->GIOPRECON[4,4] - PROMPT 21 28 "" -END - -STRINGA 100 2 -BEGIN - KEY "Ve" - FIELD 90->GIOPRECON[5,5] - PROMPT 23 28 "" -END - -STRINGA 101 2 -BEGIN - KEY "Sa" - FIELD 90->GIOPRECON[6,6] - PROMPT 25 28 "" -END - -STRINGA 102 2 -BEGIN - KEY "Do" - FIELD 90->GIOPRECON[7,7] - PROMPT 27 28 "" -END - -STRINGA 103 10 -BEGIN - KEY "Testo" - PROMPT 33 26 "Cond.occ. " -END - -LISTA 104 19 -BEGIN - KEY "Condizione occupazionale" - FIELD 90->CONDOCC - ITEM " |" - ITEM "01|Occupato" - ITEM "02|Disoccupato" - ITEM "03|In cerca di 1^ occ." - ITEM "04|Pensionato" - ITEM "05|Casalinga" - ITEM "06|Studente" - ITEM "07|Religioso" - ITEM "99|Altro" - PROMPT 44 26 "" -END - -STRINGA 105 10 -BEGIN - KEY "Testo" - PROMPT 33 27 "Pos.prof. " -END - -LISTA 106 19 -BEGIN - KEY "Posizione professionale" - FIELD 90->POSPROF - ITEM " |" - ITEM "01|Imprend./Profess." - ITEM "02|Lavoratore autonomo" - ITEM "03|Coadiuvante" - ITEM "04|Impiegato/Dirigente" - ITEM "05|Altro lav. dip." - ITEM "99|Altro" - PROMPT 44 27 "" -END - -STRINGA 107 10 -BEGIN - KEY "Testo" - PROMPT 33 28 "Ramo att. " -END - -LISTA 108 30 -BEGIN - KEY "Ramo di attivita'" - FIELD 90->RAMOATT - ITEM " |" - ITEM "01|Agricoltura e associati" - ITEM "02|Industria costruzioni" - ITEM "03|Industria manifatturiera" - ITEM "04|Energia, acqua, gas" - ITEM "05|Commercio" - ITEM "06|Pubblica amministrazione" - ITEM "07|Trasporti e comunicazioni" - ITEM "08|Credito e assicurazioni" - ITEM "09|Altri servizi" - ITEM "99|Altro" - PROMPT 44 28 "" -END - -END +END // END FORM diff --git a/at/atlib1.cpp b/at/atlib1.cpp index 8f5fb2563..3a277f571 100755 --- a/at/atlib1.cpp +++ b/at/atlib1.cpp @@ -150,9 +150,9 @@ void con_reord(TRectype& soggetto, TRecord_array* controlli) if ((penultstato == 'S') && ((ultstato == 'I') || (ultstato == 'F'))) { data = soggetto.get_date(SOG_DATAPROSSI); - if (data < dataultstato) soggetto.put(SOG_DATAPROSSI,dataultstato); + if (data < dataultstato && data.ok()) soggetto.put(SOG_DATAPROSSI,dataultstato); data = soggetto.get_date(SOG_DATAPROSAF); - if (data < dataultstato) soggetto.put(SOG_DATAPROSAF,dataultstato); + if (data < dataultstato && data.ok()) soggetto.put(SOG_DATAPROSAF,dataultstato); } if ((penultstato == '1') && (ultstato == 'F')) { diff --git a/at/batbtcs.h b/at/batbtcs.h index 64675585e..94d17305f 100755 --- a/at/batbtcs.h +++ b/at/batbtcs.h @@ -1,5 +1,8 @@ +// tabella tipi/esiti controlli sanitari #define F_TABTCS_CODTAB 100 #define F_TABTCS_DESCR 101 -#define F_TABTCS_MODSTATO 102 -#define F_TABTCS_STATO 103 -#define DLG_DEL 105 +#define F_TABTCS_CATCOLL 102 +#define F_TABTCS_MODSTATO 103 +#define F_TABTCS_STATO 104 +#define F_DESCR_CATCOLL 105 +#define DLG_DEL 106 diff --git a/at/batbtcs.uml b/at/batbtcs.uml index 302dfcaf2..e5c31bc77 100755 --- a/at/batbtcs.uml +++ b/at/batbtcs.uml @@ -8,62 +8,83 @@ PAGE "Tipi/Esiti controlli sanitari" -1 -1 78 18 STRING F_TABTCS_CODTAB 2 BEGIN - PROMPT 2 1 "Codice " - FIELD CODTAB - HELP "Inserire il codice del controllo" - USE TCS - CHECKTYPE REQUIRED - INPUT CODTAB F_TABTCS_CODTAB - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@30" S0 - OUTPUT F_TABTCS_CODTAB CODTAB - OUTPUT F_TABTCS_DESCR S0 - KEY 1 - FLAGS "U" + PROMPT 2 1 "Codice " + FIELD CODTAB + USE TCS + CHECKTYPE REQUIRED + INPUT CODTAB F_TABTCS_CODTAB + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_TABTCS_CODTAB CODTAB + OUTPUT F_TABTCS_DESCR S0 + KEY 1 + FLAGS "U" + HELP "Inserire il codice del controllo sanitario" END STRING F_TABTCS_DESCR 30 BEGIN - PROMPT 2 3 "Descrizione " - FIELD S0 - HELP "Inserire la descrizione del controllo" - USE TCS KEY 2 - CHECKTYPE REQUIRED - INPUT S0 F_TABTCS_DESCR - DISPLAY "Descrizione@30" S0 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_TABTCS_CODTAB - KEY 2 + PROMPT 2 3 "Descrizione " + FIELD S0 + USE TCS KEY 2 + CHECKTYPE REQUIRED + INPUT S0 F_TABTCS_DESCR + DISPLAY "Descrizione@30" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_TABTCS_CODTAB + KEY 2 + HELP "Inserire la descrizione del controllo" END -RADIOBUTTON F_TABTCS_MODSTATO 25 +STRING F_TABTCS_CATCOLL 2 BEGIN - PROMPT 2 5 "Modifica stato" - FIELD S6 - ITEM "N|Non modifica" - MESSAGE CLEAR, F_TABTCS_STATO - MESSAGE DISABLE, F_TABTCS_STATO - ITEM "I|Idoneita'" - MESSAGE ENABLE, F_TABTCS_STATO - ITEM "S|Sospensione" - MESSAGE ENABLE, F_TABTCS_STATO - ITEM "F|Fine sospensione" - MESSAGE ENABLE, F_TABTCS_STATO - ITEM "1|Sospeso per SI" - MESSAGE ENABLE, F_TABTCS_STATO - ITEM "2|Sospeso per AF" - MESSAGE ENABLE, F_TABTCS_STATO - ITEM "M|Modifica id. pr." - MESSAGE CLEAR, F_TABTCS_STATO - MESSAGE DISABLE, F_TABTCS_STATO - HELP "Indicare se il controllo modifica lo stato e in che modo" + PROMPT 2 5 "Cat.collegata " + FIELD S7 + FLAGS "U" + USE CTD + INPUT CODTAB F_TABTCS_CATCOLL + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_TABTCS_CATCOLL CODTAB + OUTPUT F_DESCR_CATCOLL S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" +END + +STRING F_DESCR_CATCOLL 30 +BEGIN + PROMPT 23 5 "" + FLAGS "D" +END + +RADIOBUTTON F_TABTCS_MODSTATO 35 +BEGIN + PROMPT 2 7 "Modifica stato" + FIELD S6 + ITEM "N|Non modifica" + MESSAGE CLEAR, F_TABTCS_STATO + MESSAGE DISABLE, F_TABTCS_STATO + ITEM "I|Idoneita'" + MESSAGE ENABLE, F_TABTCS_STATO + ITEM "S|Sospensione" + MESSAGE ENABLE, F_TABTCS_STATO + ITEM "F|Fine sospensione" + MESSAGE ENABLE, F_TABTCS_STATO + //ITEM "1|Sospeso per SI" + //MESSAGE ENABLE, F_TABTCS_STATO + //ITEM "2|Sospeso per AF" + //MESSAGE ENABLE, F_TABTCS_STATO + ITEM "M|Modifica dati idon. precedente" + MESSAGE CLEAR, F_TABTCS_STATO + MESSAGE DISABLE, F_TABTCS_STATO + HELP "Indicare se il controllo modifica lo stato e in che modo" END STRING F_TABTCS_STATO 20 BEGIN - PROMPT 30 6 "Stato " - FIELD S3 -END - + PROMPT 40 8 "Stato " + FIELD S3 +END + ENDPAGE ENDMASK diff --git a/at/f90.trr b/at/f90.trr index a2f01437b..014f77676 100755 --- a/at/f90.trr +++ b/at/f90.trr @@ -90,10 +90,9 @@ NOTIZIARIO|8|1|0|Vuole il notiziario S/N BENEM|8|1|0|Vuole le benemerenze S/N COGNOME_SP|1|25|0|Cognome del marito NOTE|11|10|0|Note -6 +5 CODICE| UPPER(COGNOME)+UPPER(NOME)+DATANASC|X -CODSEZ+CODSOT+CODICE| CODSEZ+CODSOT+UPPER(COGNOME)+UPPER(NOME)+DATANASC|X TESSAVIS|X DATAPROSSI|X diff --git a/at/f92.dir b/at/f92.dir index c9f64a590..2b454517c 100755 --- a/at/f92.dir +++ b/at/f92.dir @@ -1,3 +1,3 @@ 92 0 -$donaz|0|0|60|17|Donazioni AVIS||| +$donaz|0|0|66|17|Donazioni AVIS||| diff --git a/at/f92.trr b/at/f92.trr index 560b786d4..d0d8827cd 100755 --- a/at/f92.trr +++ b/at/f92.trr @@ -1,7 +1,8 @@ 92 -14 +15 CODICE|3|8|0|Codice soggetto -PROGDON|2|3|0|Progressivo donazione +PROGDON|2|3|0|Progressivo donazione per soggetto +PROGINS|3|6|0|Progressivo inserimento DATADON|5|8|0|Data donazione TIPODON|1|2|0|Tipo donazione LUOGODON|1|4|0|Luogo donazione @@ -16,5 +17,5 @@ CODSEZ|1|2|0|Sezione di app. al momento della donazione CODSOT|1|2|0|Sottogruppo di app. 3 CODICE+PROGDON| -DATADON+CODICE| -DATADON+TIPODON+LUOGODON+CODICE| +DATADON+CODICE|X +PROGINS|X diff --git a/at/motdim.h b/at/motdim.h index b8b8f03d6..a64441b37 100755 --- a/at/motdim.h +++ b/at/motdim.h @@ -3,7 +3,8 @@ ITEM " |" ITEM "CC|Cambio categoria" ITEM "DE|Decesso" -ITEM "LE|Limiti di età" +ITEM "LE|Limiti di eta'" ITEM "SA|Motivi di salute" ITEM "TR|Trasferimento" ITEM "VO|Volontarie" +ITEM "UF|Tolto d'ufficio" diff --git a/at/soggetti.h b/at/soggetti.h index ce479d741..871640efb 100755 --- a/at/soggetti.h +++ b/at/soggetti.h @@ -89,4 +89,11 @@ #define SOG_NOTIZIARIO "NOTIZIARIO" #define SOG_BENEM "BENEM" #define SOG_COGNOME_SP "COGNOME_SP" +#define SOG_CONSENSO "CONSENSO" +#define SOG_STATOSI "STATOSI" +#define SOG_DATASI "DATASI" +#define SOG_FINESOSSI "FINESOSSI" +#define SOG_STATOAF "STATOAF" +#define SOG_DATAAF "DATAAF" +#define SOG_FINESOSAF "FINESOSAF" #define SOG_NOTE "NOTE"