diff --git a/at/at4400.cpp b/at/at4400.cpp index 053dcd64f..b03f63c46 100755 --- a/at/at4400.cpp +++ b/at/at4400.cpp @@ -8,6 +8,7 @@ #include "sezioni.h" #include "convoc.h" #include "rconvoc.h" +#include #include "at4.h" #include "at4400a.h" @@ -20,7 +21,7 @@ #define ALIAS_COMLDN 503 // comune per punti di prelievo #define ALIAS_LCPLDN 102 // localita' postale per punti di prelievo -enum ts { undefined = 0, elenco = 1, etichette = 2, cartoline = 3 }; +enum ts { undefined=0, sintetico=1, completo=2, etichette=3, cartoline=4 }; // definizione form per etichette class TStConvoc_form : public TForm @@ -43,12 +44,12 @@ class TConvocazioniPerPunto : public TPrintapp TStConvoc_form* _form_eti; TStConvoc_form* _form_car; int _cur; - TParagraph_string _cognome_nome; + TParagraph_string _cognome_nome, _dencom; TDate _data_stampa; TDate _dataini, _datafin; - bool _aggiorna, _persezione; - TString16 _punto,_tipo, _sezione, _sottog, _ordina; - TString16 _codsez, _codsot; + bool _aggiorna, _persezione, _tutti; + TString16 _punto,_tipo, _ordina; + TString16 _codsez, _codsot, _sezini,_sotini, _sezfin,_sotfin; TString16 _orario, _datacart; TString80 _invitoper, _data, _presso1, _presso2, _presso3, _presso4; TString80 _note, _intest1, _intest2, _intest3, _intest4; @@ -75,7 +76,7 @@ public: void fine_stampa(); void dati_sezione(const TString16 codsez, const TString16 codsot); TMask& app_mask() { return *_msk; } - TConvocazioniPerPunto() : _data_stampa(TODAY), _cognome_nome("",35) {} + TConvocazioniPerPunto() : _data_stampa(TODAY), _cognome_nome("",35), _dencom("",30) {} }; HIDDEN inline TConvocazioniPerPunto& app() { return (TConvocazioniPerPunto&) main_app(); } @@ -109,14 +110,21 @@ void TConvocazioniPerPunto::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,"TOTALE SOGGETTI CONVOCATI %d", _contatore); - printer().formfeed(); - reset_footer(); + //reset_footer(); + //printer().footerlen(20); + //TString sep(80); + //sep.fill('-'); + //set_footer(1, (const char *) sep); + //set_footer(2,"TOTALE SOGGETTI CONVOCATI %d", _contatore); + //printer().formfeed(); + //reset_footer(); + reset_footer(); + TString sep(80); + sep.fill('-'); + set_footer(2, (const char *) sep); + set_footer(3,"TOTALE SOGGETTI CONVOCATI %d", _contatore); + printer().formfeed(); + reset_footer(); } void TConvocazioniPerPunto::set_page(int file, int cnt) @@ -200,7 +208,7 @@ void TConvocazioniPerPunto::set_page(int file, int cnt) // altrimenti stampa sempre la stessa etichetta } break; - case elenco: + case sintetico: { set_row(1,"@0g#a", &_cognome_nome); set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_CATDON)); @@ -214,6 +222,25 @@ void TConvocazioniPerPunto::set_page(int file, int cnt) set_row(1,"@84g@S", FLD(LF_CONVOC,COV_DATA)); } break; + case completo: + { + set_row(1,"@0g#a", &_cognome_nome); + set_row(1,"@36g@S", FLD(LF_SOGGETTI,SOG_CATDON)); + set_row(1,"@40g@S", FLD(LF_SOGGETTI,SOG_TESSAVIS)); + set_row(2,"@40g@S", FLD(LF_SOGGETTI,SOG_CODSEZ)); + set_row(2,"@43g@S", FLD(LF_SOGGETTI,SOG_CODSOT)); + set_row(1,"@48g@S", FLD(LF_SOGGETTI,SOG_DOM_INDIR)); + set_row(2,"@48g#a", &_dencom); + set_row(1,"@79g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + set_row(2,"@83g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON)); + set_row(1,"@90g@ld", FLD(LF_RCONVOC,RCV_DATACONV)); + set_row(2,"@94g@S", FLD(LF_RCONVOC,RCV_CHIAMATA)); + set_row(1,"@101g@S", FLD(LF_SOGGETTI,SOG_TELABI)); + set_row(1,"@116g@S", FLD(LF_SOGGETTI,SOG_TELLAV)); + set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TELALT)); + set_row(3,""); + } + break; } } @@ -233,13 +260,26 @@ bool TConvocazioniPerPunto::preprocess_page(int file, int counter) current_cursor()->curr().put(RCV_STAMPATO,"X"); current_cursor()->file().rewrite(); } - if (_tipostampa==elenco) + if ((_tipostampa==sintetico) || (_tipostampa==completo)) { TString80 nome = current_cursor()->curr(LF_SOGGETTI).get(SOG_COGNOME); nome << " "; nome << current_cursor()->curr(LF_SOGGETTI).get(SOG_NOME); _cognome_nome = nome; - + if (_tipostampa==completo) + { + TString256 localita = ""; + localita = current_cursor()->curr(LF_SOGGETTI).get(SOG_DOM_CAP); + localita << ' '; + if (current_cursor()->curr(LF_SOGGETTI).get(SOG_DOM_CODLOC).not_empty()) + { + localita << current_cursor()->curr(-ALIAS_LCPDOM).get("S0"); + localita << " - "; + } + localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); + localita.trim(); + _dencom = localita; + } // salto pagina se cambio sezione const TString16 codsez = current_cursor()->curr(LF_SOGGETTI).get(SOG_CODSEZ); const TString16 codsot = current_cursor()->curr(LF_SOGGETTI).get(SOG_CODSOT); @@ -329,37 +369,53 @@ void TConvocazioniPerPunto::dati_sezione(const TString16 codsez, const TString16 bool TConvocazioniPerPunto::set_print(int m) { _tipostampa = undefined; - KEY tasto; - tasto = _msk->run(); + KEY tasto = F_AZZERA; + while (tasto == F_AZZERA) + { + tasto = _msk->run(); + if (tasto == F_AZZERA) + _msk->reset(); + } switch (tasto) { - case F_ELENCO: - _tipostampa = elenco; - break; - case F_ETICHETTE: - _tipostampa = etichette; - break; - case F_CARTOLINE: - //_tipostampa = dati_cartoline(); - _tipostampa = cartoline; - break; + case F_SINTETICO: + _tipostampa = sintetico; + break; + case F_COMPLETO: + _tipostampa = completo; + break; + case F_ETICHETTE: + _tipostampa = etichette; + break; + case F_CARTOLINE: + //_tipostampa = dati_cartoline(); + _tipostampa = cartoline; + break; } if (_tipostampa != undefined) { + _sezini = _msk->get(F_SEZINI); + _sotini = _msk->get(F_SOTINI); + _sezfin = _msk->get(F_SEZFIN); + _sotfin = _msk->get(F_SOTFIN); _dataini = _msk->get(F_DATAINI); _datafin = _msk->get(F_DATAFIN); _punto = _msk->get(F_PUNTO); _tipo = _msk->get(F_TIPO); - _sezione = _msk->get(F_CODSEZ); - _sottog = _msk->get(F_CODSOT); _aggiorna = _msk->get_bool(F_AGGIORNA); _persezione = _msk->get_bool(F_PERSEZIONE); + _tutti = (_msk->get(F_TUTTI)[0] == 'T'); _ordina = _msk->get(F_ORDINA); TString256 chiave = ""; switch (_ordina[0]) { case 'A': - chiave = "90->CODSEZ|90->CODSOT|UPPER(90->COGNOME)|UPPER(90->NOME)|116->DATACONV"; + { + if (_tipostampa==cartoline) + chiave = "90->GRUPPOAZIE|90->CODSEZ|90->CODSOT|UPPER(90->COGNOME)|UPPER(90->NOME)|116->DATACONV"; + else + chiave = "90->CODSEZ|90->CODSOT|UPPER(90->COGNOME)|UPPER(90->NOME)|116->DATACONV"; + } break; case 'C': chiave = "90->CODSEZ|90->CODSOT|90->DOM_CAP|UPPER(90->COGNOME)|UPPER(90->NOME)|116->DATACONV"; @@ -367,33 +423,54 @@ bool TConvocazioniPerPunto::set_print(int m) } TString256 filtro = ""; filtro << "(116->ANNULLATO != \"X\")"; + if (!_tutti) + filtro << " && (116->STAMPATO != \"X\")"; // filtro per punto di raccolta if (_punto.not_empty()) { - if (filtro.not_empty()) - filtro << " && "; + filtro << " && "; filtro << format("(115->PUNTO == \"%s\")",(const char*)_punto); } // filtro per tipo if (_tipo.not_empty()) { - if (filtro.not_empty()) - filtro << " && "; + filtro << " && "; filtro << format("(115->TIPO == \"%s\")",(const char*)_tipo); } - // filtro per sezione/sottogruppo - if (_sezione.not_empty()) - { - if (filtro.not_empty()) - filtro << " && "; - filtro << format("(90->CODSEZ == \"%s\")",(const char*)_sezione); - if (_sottog.not_empty()) - { - if (filtro.not_empty()) - filtro << " && "; - filtro << format("(90->CODSOT == \"%s\")",(const char*)_sottog); - } - } + if (_sezini.not_empty()) + { + filtro << " && "; + if (_sotini.not_empty()) + { + filtro << "("; + filtro << format("(90->CODSEZ > \"%s\")",(const char*)_sezini); + filtro << " || "; + filtro << "(" << format("(90->CODSEZ == \"%s\")",(const char*)_sezini); + filtro << " && "; + filtro << format("(90->CODSOT >= \"%s\")",(const char*)_sotini); + filtro << ")"; + filtro << ")"; + } + else + filtro << format("(90->CODSEZ >= \"%s\")",(const char*)_sezini); + } + if (_sezfin.not_empty()) + { + filtro << " && "; + if (_sotfin.not_empty()) + { + filtro << "("; + filtro << format("(90->CODSEZ < \"%s\")",(const char*)_sezfin); + filtro << " || "; + filtro << "(" << format("(90->CODSEZ == \"%s\")",(const char*)_sezfin); + filtro << " && "; + filtro << format("(90->CODSOT <= \"%s\")",(const char*)_sotfin); + filtro << ")"; + filtro << ")"; + } + else + filtro << format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin); + } // filtro per data TRectype da(LF_RCONVOC); TRectype a (LF_RCONVOC); @@ -422,7 +499,7 @@ bool TConvocazioniPerPunto::set_print(int m) void TConvocazioniPerPunto::crea_intestazione() { reset_header(); - if (_tipostampa == elenco) + if ((_tipostampa==sintetico) || (_tipostampa==completo)) { TString sep(80); sep = "ELENCO CONVOCATI"; @@ -464,8 +541,17 @@ void TConvocazioniPerPunto::crea_intestazione() char ora[16]; _strtime(ora); set_header(3,"@0g%8s", ora); - set_header(5,"@0gCognome e nome@36gCat.@40gTessera@48gSe/So@54gUltima donaz.@68gData cart.@79gTipo@84gData conv."); - set_header(6,"@0g-----------------------------------@36g---@40g-------@48g-- --@54g---------- --@68g----------@79g----@84g----------"); + if (_tipostampa==sintetico) + { + set_header(5,"@0gCognome e nome@36gCat.@40gTessera@48gSe/So@54gUltima donaz.@68gData cart.@79gTipo@84gData conv."); + set_header(6,"@0g-----------------------------------@36g---@40g-------@48g-- --@54g---------- --@68g----------@79g----@84g----------"); + } + else + { + set_header(5,"@0gCognome e nome@36gCat.@40gTessera@48gIndirizzo@79gUltima donaz.@90gData cart.@101gTel.abitazione@116gTel.lavoro"); + set_header(6,"@40gSe/So@79gTipo u.d.@90gTipo cart.@116gTel.altro"); + set_header(7,"@0g-----------------------------------@36g---@40g-------@48g------------------------------@79g----------@90g----------@101g--------------@116g--------------"); + } printer().footerlen(3); } } diff --git a/at/at4400a.h b/at/at4400a.h index 7d7d667d6..279331d88 100755 --- a/at/at4400a.h +++ b/at/at4400a.h @@ -7,14 +7,26 @@ #define F_D_PUNTO 104 #define F_TIPO 105 #define F_D_TIPO 106 -#define F_CODSEZ 107 -#define F_DENSEZ 108 -#define F_CODSOT 109 -#define F_DENSOT 110 -#define F_AGGIORNA 111 -#define F_PERSEZIONE 112 -#define F_ORDINA 113 +#define F_SEZINI 107 +#define F_D_SEZINI 108 +#define F_SOTINI 109 +#define F_D_SOTINI 110 +#define F_SEZFIN 111 +#define F_D_SEZFIN 112 +#define F_SOTFIN 113 +#define F_D_SOTFIN 114 +//#define F_CODSEZ 107 +//#define F_DENSEZ 108 +//#define F_CODSOT 109 +//#define F_DENSOT 110 +#define F_ORDINA 115 +#define F_PERSEZIONE 116 -#define F_ELENCO 151 -#define F_ETICHETTE 152 -#define F_CARTOLINE 153 +#define F_TUTTI 117 +#define F_AGGIORNA 118 + +#define F_SINTETICO 151 +#define F_COMPLETO 152 +#define F_ETICHETTE 153 +#define F_CARTOLINE 154 +#define F_AZZERA 155 diff --git a/at/at4400a.uml b/at/at4400a.uml index 93eb98ab0..be3cb4c6d 100755 --- a/at/at4400a.uml +++ b/at/at4400a.uml @@ -2,51 +2,178 @@ TOOLBAR "" 0 20 0 2 -BUTTON F_ELENCO 9 2 +BUTTON F_SINTETICO 9 2 BEGIN - PROMPT -14 -11 "E~lenco" - MESSAGE EXIT,F_ELENCO + 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_ETICHETTE 9 2 BEGIN - PROMPT -24 -11 "~Etichette" + PROMPT -36 -11 "~Etichette" MESSAGE EXIT,F_ETICHETTE END BUTTON F_CARTOLINE 9 2 BEGIN - PROMPT -34 -11 "C~artoline" + PROMPT -46 -11 "C~artoline" MESSAGE EXIT,F_CARTOLINE END +BUTTON F_AZZERA 9 2 +BEGIN + PROMPT -56 -11 "A~zzera" + MESSAGE EXIT,F_AZZERA +END + BUTTON DLG_QUIT 9 2 BEGIN - PROMPT -44 -11 "" + PROMPT -66 -11 "" END ENDPAGE PAGE "Stampa convocazioni per punto di prelievo" -1 -1 78 20 -GROUPBOX DLG_NULL 77 12 +GROUPBOX DLG_NULL 77 4 BEGIN - PROMPT 1 1 "Opzioni per la stampa convocazioni" + PROMPT 1 0 "Scelta sezioni/sottogruppi" +END + +STRING F_SEZINI 2 +BEGIN + PROMPT 2 1 "Da " + FLAGS "U" + USE LF_SEZIONI + INPUT CODSEZ F_SEZINI + INPUT CODSOT F_SOTINI + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + OUTPUT F_SEZINI CODSEZ + OUTPUT F_D_SEZINI DENSEZ + OUTPUT F_SOTINI CODSOT + OUTPUT F_D_SOTINI DENSOT + CHECKTYPE SEARCH + HELP "Codice sezione da cui partire" +END + +STRING F_D_SEZINI 25 +BEGIN + PROMPT 11 1 "" + FLAGS "U" + USE LF_SEZIONI KEY 2 + INPUT DENSEZ F_D_SEZINI + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + COPY OUTPUT F_SEZINI + CHECKTYPE NORMAL + HELP "Sezione da cui partire" +END + +STRING F_SOTINI 2 +BEGIN + PROMPT 2 2 " " + COPY ALL F_SEZINI + CHECKTYPE SEARCH + HELP "Codice sottogruppo da cui partire" +END + +STRING F_D_SOTINI 25 +BEGIN + PROMPT 11 2 "" + FLAGS "U" + COPY USE F_D_SEZINI + INPUT DENSEZ F_D_SEZINI + INPUT DENSOT F_D_SOTINI + COPY DISPLAY F_D_SEZINI + COPY OUTPUT F_D_SEZINI + CHECKTYPE NORMAL + HELP "Sottogruppo da cui partire" +END + +STRING F_SEZFIN 2 +BEGIN + PROMPT 41 1 "A " + FLAGS "U" + USE LF_SEZIONI + INPUT CODSEZ F_SEZFIN + INPUT CODSOT F_SOTFIN + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + OUTPUT F_SEZFIN CODSEZ + OUTPUT F_D_SEZFIN DENSEZ + OUTPUT F_SOTFIN CODSOT + OUTPUT F_D_SOTFIN DENSOT + CHECKTYPE SEARCH + HELP "Codice sezione finale" +END + +STRING F_D_SEZFIN 25 +BEGIN + PROMPT 49 1 "" + FLAGS "U" + USE LF_SEZIONI KEY 2 + INPUT DENSEZ F_D_SEZFIN + DISPLAY "Sezione@25" DENSEZ + DISPLAY "Sottogruppo@25" DENSOT + DISPLAY "Cod.sez" CODSEZ + DISPLAY "Cod.sot." CODSOT + COPY OUTPUT F_SEZFIN + CHECKTYPE NORMAL + HELP "Sezione finale" +END + +STRING F_SOTFIN 2 +BEGIN + PROMPT 41 2 " " + COPY ALL F_SEZFIN + CHECKTYPE SEARCH + HELP "Codice sottogruppo finale" +END + +STRING F_D_SOTFIN 25 +BEGIN + PROMPT 49 2 "" + FLAGS "U" + COPY USE F_D_SEZFIN + INPUT DENSEZ F_D_SEZFIN + INPUT DENSOT F_D_SOTFIN + COPY DISPLAY F_D_SEZFIN + COPY OUTPUT F_D_SEZFIN + CHECKTYPE NORMAL + HELP "Sottogruppo finale" +END + +GROUPBOX DLG_NULL 77 13 +BEGIN + PROMPT 1 4 "Opzioni per la stampa convocazioni" END DATE F_DATAINI BEGIN - PROMPT 2 2 "Data iniziale " + PROMPT 2 5 "Data iniziale " END DATE F_DATAFIN BEGIN - PROMPT 2 3 "Data finale " + PROMPT 2 6 "Data finale " END STRING F_PUNTO 4 BEGIN - PROMPT 2 4 "Punto prelievo " + PROMPT 2 7 "Punto prelievo " FLAGS "U" USE LDN INPUT CODTAB F_PUNTO @@ -60,13 +187,13 @@ END STRING F_D_PUNTO 50 BEGIN - PROMPT 25 4 "" + PROMPT 25 7 "" FLAGS "D" END STRING F_TIPO 2 BEGIN - PROMPT 2 5 "Tipo donazione " + PROMPT 2 8 "Tipo donazione " FLAGS "U" USE TDN INPUT CODTAB F_TIPO @@ -79,87 +206,36 @@ END STRING F_D_TIPO 25 BEGIN - PROMPT 23 5 "" + PROMPT 23 8 "" FLAGS "D" END -STRING F_CODSEZ 2 -BEGIN - PROMPT 2 6 "Sezione " - FLAGS "U" - USE LF_SEZIONI - INPUT CODSEZ F_CODSEZ - INPUT CODSOT F_CODSOT - DISPLAY "Cod.sez" CODSEZ - DISPLAY "Cod.sot." CODSOT - DISPLAY "Sezione@25" DENSEZ - DISPLAY "Sottogruppo@25" DENSOT - OUTPUT F_CODSEZ CODSEZ - OUTPUT F_DENSEZ DENSEZ - OUTPUT F_CODSOT CODSOT - OUTPUT F_DENSOT DENSOT - CHECKTYPE SEARCH - HELP "Codice sezione da convocare" - ADD MASK batbsez -END - -STRING F_DENSEZ 25 -BEGIN - PROMPT 23 6 "" - FLAGS "U" - USE LF_SEZIONI KEY 2 - INPUT DENSEZ F_DENSEZ - DISPLAY "Sezione@25" DENSEZ - DISPLAY "Sottogruppo@25" DENSOT - DISPLAY "Cod.sez" CODSEZ - DISPLAY "Cod.sot." CODSOT - COPY OUTPUT F_CODSEZ - CHECKTYPE NORMAL - HELP "Denominazione sezione da convocare" - ADD MASK batbsez -END - -STRING F_CODSOT 2 -BEGIN - PROMPT 2 7 "Sottogruppo " - COPY ALL F_CODSEZ - CHECKTYPE NORMAL - HELP "Codice sottogruppo da convocare" - ADD MASK batbsez -END - -STRING F_DENSOT 25 -BEGIN - PROMPT 23 7 "" - FLAGS "U" - COPY USE F_DENSEZ - INPUT DENSEZ F_DENSEZ - INPUT DENSOT F_DENSOT - COPY DISPLAY F_DENSEZ - COPY OUTPUT F_DENSEZ - CHECKTYPE NORMAL - HELP "Sottogruppo da convocare" - ADD MASK batbsez -END - -BOOLEAN F_AGGIORNA -BEGIN - PROMPT 2 9 "Aggiorna campo convocazione stampata" -END - -BOOLEAN F_PERSEZIONE -BEGIN - PROMPT 2 10 "Stampa suddivisa per sezione" - HELP "Indicare se si vuole la stampa suddivisa per sezione di appartenenza" -END - LISTBOX F_ORDINA 12 BEGIN - PROMPT 2 11 "Ordinamento " + PROMPT 2 9 "Ordinamento " FLAGS "U" ITEM "A|Alfabetico" ITEM "C|CAP" END +RADIOBUTTON F_TUTTI 75 +BEGIN + FLAG "Z" + PROMPT 2 10 "Stampa" + ITEM "S|Convocazioni non stampate" + ITEM "T|Tutte le convocazioni" +END + +BOOLEAN F_PERSEZIONE +BEGIN + PROMPT 2 13 "Stampa suddivisa per sezione" + HELP "Indicare se si vuole la stampa suddivisa per sezione di appartenenza" +END + +BOOLEAN F_AGGIORNA +BEGIN + PROMPT 2 15 "Aggiorna campo convocazione stampata" +END + ENDPAGE ENDMASK