From d2557814b4ce3889fccf39d44676702f181cb5b8 Mon Sep 17 00:00:00 2001 From: cris Date: Tue, 26 Jan 1999 13:59:56 +0000 Subject: [PATCH] Patch level : Files correlati : Ricompilazione Demo : [ ] Commento : Stampa sospesi: possibilita' di 5 motivi + scelta data sospensione da a + configurazione stampante per etichette git-svn-id: svn://10.65.10.50/trunk@7695 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- at/at2100.cpp | 204 ++++++++++++++++++++++++++++++++++++++----------- at/at2100a.h | 28 +++++-- at/at2100a.uml | 147 +++++++++++++++++++++++++++++------ 3 files changed, 304 insertions(+), 75 deletions(-) diff --git a/at/at2100.cpp b/at/at2100.cpp index 1d249e880..30eceabb7 100755 --- a/at/at2100.cpp +++ b/at/at2100.cpp @@ -6,14 +6,16 @@ #include "soggetti.h" #include "contsan.h" #include "sezioni.h" +#include #include "at2.h" #include "at2100a.h" +#include "atlib.h" -#define ALIAS_LCP 100 -#define ALIAS_TCS 200 +#define ALIAS_LCPDOM 100 +#define ALIAS_TCS 200 -enum ts { undefined = 0, elenco = 1, etichette = 2 }; +enum ts { undefined=0, sintetico=1, completo=2, etichette=3, lettere=4 }; // definizione form per etichette class TEti_sospesi_form : public TForm @@ -35,13 +37,15 @@ class TStampaSospesi : public TPrintapp TMask* _msk; TLocalisamfile* _contsan; TEti_sospesi_form* _form_eti; + TEti_sospesi_form* _form_let; TAssoc_array _categorie; - TParagraph_string _cognome_nome; + TParagraph_string _cognome_nome, _dencom, _motivo; TDate _data_stampa; - TDate _dataini, _datafin; + TDate _dataini, _datafin, _sodataini, _sodatafin; ts _tipostampa; - TString16 _codsez, _codsot, _motivo; + TString16 _codsez, _codsot, _motivo1, _motivo2, _motivo3, _motivo4, _motivo5; int _etlarghezza, _etcolonne; + bool _motivi; static bool filter_func_sospesi(const TRelation* rel); @@ -51,13 +55,14 @@ 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 filtra_sezioni(); void header_sezione(const TString16 codsez, const TString16 codsot); TMask& app_mask() { return *_msk; } - TStampaSospesi() : _data_stampa(TODAY), _cognome_nome("",25) {} + TStampaSospesi() : _data_stampa(TODAY), _cognome_nome("",25), _dencom("",30), _motivo("",5) {} }; HIDDEN inline TStampaSospesi& app() { return (TStampaSospesi&) main_app(); } @@ -103,7 +108,20 @@ void TStampaSospesi::set_page(int file, int cnt) // altrimenti stampa sempre la stessa etichetta } break; - case elenco: + case lettere: + { + TPrint_section& corpo = _form_let->get_body(); + 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 + } + break; + case sintetico: { set_row(1,"@0g@pn", FLD(LF_SOGGETTI,SOG_CODICE,"########")); set_row(2,"@0g@8,rs", FLD(LF_SOGGETTI,SOG_TESSAVIS)); @@ -125,39 +143,89 @@ void TStampaSospesi::set_page(int file, int cnt) set_row(3,""); } break; + case completo: + { + 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(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@ld", FLD(LF_SOGGETTI,SOG_DATASTATO)); + set_row(3,"@94g@S", FLD(LF_SOGGETTI,SOG_PROS_STATO)); + set_row(4,"@94g@ld", FLD(LF_SOGGETTI,SOG_DATA_PROS)); + set_row(5,"@94g#a", &_motivo); + + set_row(1,"@105g@ld", FLD(LF_SOGGETTI,SOG_DATAULTID)); + set_row(2,"@105g@S", FLD(LF_SOGGETTI,SOG_TIPOULTID)); + set_row(3,"@105g@pn", FLD(LF_SOGGETTI,SOG_INTSI,"###")); + set_row(4,"@105g@pn", FLD(LF_SOGGETTI,SOG_INTAF,"###")); + set_row(1,"@116g@ld", FLD(LF_SOGGETTI,SOG_DATAULTDON)); + set_row(2,"@116g@S", FLD(LF_SOGGETTI,SOG_TIPOULTDON)); + set_row(2,"@116g@pn", FLD(LF_SOGGETTI,SOG_TOTDON)); + set_row(6,""); + } + break; } } bool TStampaSospesi::filter_func_sospesi(const TRelation* rel) { bool filtrato = TRUE; - TLocalisamfile& sog = rel->lfile(); + TRectype recsog = rel->lfile().curr(); // filtro per categorie TAssoc_array& categorie = app()._categorie; if (categorie.items() != 0) { - const TString16 cat = sog.get(SOG_CATDON); + const TString16 cat = recsog.get(SOG_CATDON); filtrato = categorie.is_key((const char*) cat); } + if ((filtrato) && (app()._sodataini.ok())) + { + const TDate datastato = recsog.get_date(SOG_DATASTATO); + filtrato = (datastato >= app()._sodataini); + } + if ((filtrato) && (app()._sodatafin.ok())) + { + const TDate datastato = recsog.get_date(SOG_STATO); + filtrato = (datastato <= app()._sodatafin); + } if ((filtrato) && (app()._dataini.ok())) { - const TDate datapross = sog.get_date(SOG_DATA_PROS); + const TDate datapross = recsog.get_date(SOG_DATA_PROS); filtrato = (datapross >= app()._dataini); } if ((filtrato) && (app()._datafin.ok())) { - const TDate datapross = sog.get_date(SOG_DATA_PROS); + const TDate datapross = recsog.get_date(SOG_DATA_PROS); filtrato = (datapross <= app()._datafin); } - if ((filtrato) && (app()._motivo.not_empty())) + if ((filtrato) && app()._motivi) { TLocalisamfile contsan(LF_CONTSAN); contsan.setkey(2); - contsan.put(CON_DATACON, sog.get(SOG_DATASTATO)); - contsan.put(CON_CODICE, sog.get(SOG_CODICE)); + contsan.put(CON_DATACON, recsog.get(SOG_DATASTATO)); + contsan.put(CON_CODICE, recsog.get(SOG_CODICE)); if (contsan.read() == NOERR) - { - if (app()._motivo == contsan.get(CON_MOTIVO)) + { + const TString16 motivo = contsan.get(CON_MOTIVO); + if ((app()._motivo1==motivo) || (app()._motivo2==motivo) || (app()._motivo3==motivo) || (app()._motivo4==motivo) || (app()._motivo5==motivo)) filtrato = TRUE; else filtrato = FALSE; @@ -170,13 +238,31 @@ bool TStampaSospesi::filter_func_sospesi(const TRelation* rel) bool TStampaSospesi::preprocess_page(int file, int counter) { - if (_tipostampa == elenco) + if ((_tipostampa==sintetico) || (_tipostampa==completo)) { TRectype& recsog = current_cursor()->curr(); TString80 nome = recsog.get(SOG_COGNOME); nome << " "; nome << recsog.get(SOG_NOME); _cognome_nome = nome; + TString256 localita = ""; + localita << recsog.get(SOG_DOM_CAP); + localita << " "; + if (recsog.get(SOG_DOM_CODLOC).empty()) + localita << current_cursor()->curr(-ALIAS_LCPDOM).get("S0"); + else + localita << current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); + localita << ' ' << current_cursor()->curr(LF_COMUNI).get(COM_PROVCOM); + localita.trim(); + _dencom = localita; + TString16 motivo = ""; + TLocalisamfile contsan(LF_CONTSAN); + contsan.setkey(2); + contsan.put(CON_DATACON, recsog.get(SOG_DATASTATO)); + contsan.put(CON_CODICE, recsog.get(SOG_CODICE)); + if (contsan.read() == NOERR) + motivo = contsan.get(CON_MOTIVO); + _motivo = motivo; // salto pagina se cambio sezione const TString16 codsez = recsog.get(SOG_CODSEZ); const TString16 codsot = recsog.get(SOG_CODSOT); @@ -195,6 +281,12 @@ bool TStampaSospesi::preprocess_page(int file, int counter) return TRUE; } +print_action TStampaSospesi::postprocess_print(int file, int counter) +{ + printer().formfeed(); + return NEXT_PAGE; +} + void TStampaSospesi::header_sezione(const TString16 codsez, const TString16 codsot) { const TString80 densez = current_cursor()->curr(LF_SEZIONI).get(SEZ_DENSEZ); @@ -202,11 +294,14 @@ void TStampaSospesi::header_sezione(const TString16 codsez, const TString16 cods TString intestazione(132); intestazione = "Sezione: "; intestazione << codsez; - intestazione << "/"; - intestazione << codsot; + if (codsot.not_empty()) + { + intestazione << "/"; + intestazione << codsot; + } intestazione << " "; intestazione << densez; - if ((densot.ok())&& (densot.not_empty())) + if (densot.not_empty()) { intestazione << "/"; intestazione << densot; @@ -217,32 +312,49 @@ void TStampaSospesi::header_sezione(const TString16 codsez, const TString16 cods } bool TStampaSospesi::set_print(int m) -{ +{ + TPrinter& p = printer(); + p.read_configuration(); _tipostampa = undefined; KEY tasto; tasto = _msk->run(); switch (tasto) { - case F_ELENCO: - _tipostampa = elenco; - _codsez = "**"; - _codsot = "**"; - break; + case F_SINTETICO: + { + _tipostampa = sintetico; + _codsez = _codsot = "**"; + } + break; + case F_COMPLETO: + { + _tipostampa = completo; + _codsez = _codsot = "**"; + } + break; case F_ETICHETTE: - _tipostampa = etichette; - break; + _tipostampa = (configura_stampante(p, "AT_ETICHETTE", "etichette")) ? etichette : undefined; + break; + case F_LETTERE: + _tipostampa = lettere; + break; } if (_tipostampa != undefined) { reset_files(); add_file(LF_SOGGETTI); - // filtro per sezioni selezionati + // filtro per sezioni selezionate filtra_sezioni(); - _motivo = _msk->get(F_MOTIVO); + _motivo1 = _msk->get(F_MOTIVO1); + _motivo2 = _msk->get(F_MOTIVO2); + _motivo3 = _msk->get(F_MOTIVO3); + _motivo4 = _msk->get(F_MOTIVO4); + _motivo5 = _msk->get(F_MOTIVO5); + _motivi = (_motivo1.not_empty() || _motivo2.not_empty() || _motivo3.not_empty() || _motivo4.not_empty() || _motivo5.not_empty()); TString filtro; // filtro per tipo sospensione const TString16 tiposo = _msk->get(F_TIPO); - if (tiposo.not_empty() && tiposo.ok()) + if (tiposo.not_empty()) filtro << '(' << SOG_STATO << "== \"" << tiposo << "\")"; else filtro << "TCS->S6 == \"S\""; @@ -258,20 +370,22 @@ bool TStampaSospesi::set_print(int m) 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()) + if (catpri.not_empty()) _categorie.add((const char*) catpri); - if (catsec.not_empty() && catsec.ok()) + if (catsec.not_empty()) _categorie.add((const char*) catsec); - if (catter.not_empty() && catter.ok()) + if (catter.not_empty()) _categorie.add((const char*) catter); - if (catqua.not_empty() && catqua.ok()) + if (catqua.not_empty()) _categorie.add((const char*) catqua); - if (catqui.not_empty() && catqui.ok()) + if (catqui.not_empty()) _categorie.add((const char*) catqui); - if (catses.not_empty() && catses.ok()) + if (catses.not_empty()) _categorie.add((const char*) catses); _dataini = _msk->get_date(F_DATAINI); _datafin = _msk->get_date(F_DATAFIN); + _sodataini = _msk->get_date(F_SODATAINI); + _sodatafin = _msk->get_date(F_SODATAFIN); current_cursor()->set_filterfunction(filter_func_sospesi); reset_print(); crea_intestazione(); @@ -284,19 +398,17 @@ bool TStampaSospesi::set_print(int m) void TStampaSospesi::crea_intestazione() { reset_header(); - - if (_tipostampa == elenco) + if (_tipostampa==sintetico || _tipostampa==completo) { TString sep(132); - sep = "ELENCO SOSPESI"; + sep = "SOGGETTI SOSPESI"; const TString16 tipo = _msk->get(F_TIPO); - if ((tipo.ok()) && (tipo.not_empty())) + if (tipo.not_empty()) { sep << ": tipo "; sep << tipo; - const TString80 dtipo = _msk->get(F_D_TIPO); sep << " "; - sep << dtipo; + sep << _msk->get(F_D_TIPO); } sep.center_just(); set_header(2, "@0g%s", (const char*) sep); @@ -318,7 +430,7 @@ bool TStampaSospesi::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("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCPDOM); _rel->add(LF_COMUNI, "COM==DOM_CODCOM"); _rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT"); _contsan = new TLocalisamfile(LF_CONTSAN); @@ -329,11 +441,13 @@ bool TStampaSospesi::user_create() _etlarghezza = config.get_int("EtLarghezza"); _etcolonne = config.get_int("EtColonne"); _form_eti = new TEti_sospesi_form(etformato); + _form_let = new TEti_sospesi_form("ATLETTER"); return TRUE; } bool TStampaSospesi::user_destroy() { + delete _form_let; delete _form_eti; delete _msk; delete _contsan; diff --git a/at/at2100a.h b/at/at2100a.h index 95515730b..753dbd9eb 100755 --- a/at/at2100a.h +++ b/at/at2100a.h @@ -25,12 +25,24 @@ #define F_TIPO 301 #define F_D_TIPO 302 -#define F_PROSSTIPO 303 -#define F_D_PROSSTIPO 304 -#define F_DATAINI 305 -#define F_DATAFIN 306 -#define F_MOTIVO 307 -#define F_D_MOTIVO 308 +#define F_SODATAINI 303 +#define F_SODATAFIN 304 +#define F_PROSSTIPO 305 +#define F_D_PROSSTIPO 306 +#define F_DATAINI 307 +#define F_DATAFIN 308 +#define F_MOTIVO1 309 +#define F_D_MOTIVO1 310 +#define F_MOTIVO2 311 +#define F_D_MOTIVO2 312 +#define F_MOTIVO3 313 +#define F_D_MOTIVO3 314 +#define F_MOTIVO4 315 +#define F_D_MOTIVO4 316 +#define F_MOTIVO5 317 +#define F_D_MOTIVO5 318 -#define F_ELENCO 401 -#define F_ETICHETTE 402 +#define F_SINTETICO 401 +#define F_COMPLETO 402 +#define F_ETICHETTE 403 +#define F_LETTERE 404 diff --git a/at/at2100a.uml b/at/at2100a.uml index 486e89a0c..e33203c6e 100755 --- a/at/at2100a.uml +++ b/at/at2100a.uml @@ -1,31 +1,40 @@ #include "at2100a.h" - TOOLBAR "" 0 20 0 2 - -BUTTON F_ELENCO 9 2 +BUTTON F_SINTETICO 9 2 BEGIN - PROMPT -13 -11 "E~lenco" - MESSAGE EXIT,F_ELENCO + PROMPT -15 -11 "~Sintetico" + MESSAGE EXIT,F_SINTETICO +END + +BUTTON F_COMPLETO 9 2 +BEGIN + PROMPT -25 -11 "~Completo" + MESSAGE EXIT,F_COMPLETO END BUTTON F_ETICHETTE 9 2 BEGIN - PROMPT -23 -11 "~Etichette" - MESSAGE EXIT,F_ETICHETTE + PROMPT -35 -11 "~Etichette" + MESSAGE EXIT,F_ETICHETTE +END + +BUTTON F_LETTERE 9 2 +BEGIN + PROMPT -45 -11 "~Lettere" + MESSAGE EXIT,F_LETTERE END BUTTON DLG_QUIT 9 2 BEGIN - PROMPT -33 -11 "" + PROMPT -55 -11 "" END - ENDPAGE PAGE "Stampa soggetti sospesi" -1 -1 78 20 GROUPBOX DLG_NULL 77 4 BEGIN - PROMPT 1 1 "Scelta sezioni/sottogruppi" + PROMPT 1 1 "Scelta sezioni/sottogruppi" END STRING F_SEZINI 2 @@ -265,7 +274,7 @@ BEGIN FLAGS "D" END -GROUPBOX DLG_NULL 77 6 +GROUPBOX DLG_NULL 77 11 BEGIN PROMPT 1 10 "Opzioni per la stampa" END @@ -291,9 +300,19 @@ BEGIN FLAGS "D" END +DATE F_SODATAINI +BEGIN + PROMPT 2 12 "Data sosp. dal " +END + +DATE F_SODATAFIN +BEGIN + PROMPT 33 12 "al " +END + STRING F_PROSSTIPO 2 BEGIN - PROMPT 2 12 "Prossimo tipo " + PROMPT 2 13 "Prossimo tipo " FLAGS "U" USE TCS INPUT CODTAB F_PROSSTIPO @@ -308,38 +327,122 @@ END STRING F_D_PROSSTIPO 30 BEGIN - PROMPT 27 12 "" + PROMPT 27 13 "" FLAGS "D" END DATE F_DATAINI BEGIN - PROMPT 2 13 "Data pross. tipo dal " + PROMPT 2 14 "Data pross. dal " END DATE F_DATAFIN BEGIN - PROMPT 34 13 "al " + PROMPT 33 14 "al " END -STRING F_MOTIVO 4 +STRING F_MOTIVO1 4 BEGIN - PROMPT 2 14 "Motivo " + PROMPT 2 15 "Motivi " FLAGS "U" USE MTC - INPUT CODTAB F_MOTIVO + INPUT CODTAB F_MOTIVO1 DISPLAY "Codice" CODTAB DISPLAY "Descrizione@30" S0 - OUTPUT F_MOTIVO CODTAB - OUTPUT F_D_MOTIVO S0 + OUTPUT F_MOTIVO1 CODTAB + OUTPUT F_D_MOTIVO1 S0 CHECKTYPE NORMAL WARNING "Codice non presente" HELP "Motivo del controllo: vuoto = tutti" END -STRING F_D_MOTIVO 30 +STRING F_D_MOTIVO1 30 BEGIN - PROMPT 27 14 "" + PROMPT 27 15 "" + FLAGS "D" +END + +STRING F_MOTIVO2 4 +BEGIN + PROMPT 2 16 " " + FLAGS "U" + USE MTC + INPUT CODTAB F_MOTIVO2 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_MOTIVO2 CODTAB + OUTPUT F_D_MOTIVO2 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Motivo del controllo: vuoto = tutti" +END + +STRING F_D_MOTIVO2 30 +BEGIN + PROMPT 27 16 "" + FLAGS "D" +END + +STRING F_MOTIVO3 4 +BEGIN + PROMPT 2 17 " " + FLAGS "U" + USE MTC + INPUT CODTAB F_MOTIVO3 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_MOTIVO3 CODTAB + OUTPUT F_D_MOTIVO3 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Motivo del controllo: vuoto = tutti" +END + +STRING F_D_MOTIVO3 30 +BEGIN + PROMPT 27 17 "" + FLAGS "D" +END + +STRING F_MOTIVO4 4 +BEGIN + PROMPT 2 18 " " + FLAGS "U" + USE MTC + INPUT CODTAB F_MOTIVO4 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_MOTIVO4 CODTAB + OUTPUT F_D_MOTIVO4 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Motivo del controllo: vuoto = tutti" +END + +STRING F_D_MOTIVO4 30 +BEGIN + PROMPT 27 18 "" + FLAGS "D" +END + +STRING F_MOTIVO5 4 +BEGIN + PROMPT 2 19 " " + FLAGS "U" + USE MTC + INPUT CODTAB F_MOTIVO5 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@30" S0 + OUTPUT F_MOTIVO5 CODTAB + OUTPUT F_D_MOTIVO5 S0 + CHECKTYPE NORMAL + WARNING "Codice non presente" + HELP "Motivo del controllo: vuoto = tutti" +END + +STRING F_D_MOTIVO5 30 +BEGIN + PROMPT 27 19 "" FLAGS "D" END