diff --git a/pr/pr1300.cpp b/pr/pr1300.cpp index a2ac225c8..a6783de65 100755 --- a/pr/pr1300.cpp +++ b/pr/pr1300.cpp @@ -1,4 +1,6 @@ #include +#include +#include #include #include @@ -6,6 +8,10 @@ #include "pr1300a.h" #include "..\ve\velib.h" +/////////////////////////////////////////////////////////// +// TStampa_schedeprovv_form +/////////////////////////////////////////////////////////// + class TStampa_schedeprovv_form : public TForm { TString _basecalcolo; @@ -25,7 +31,7 @@ TStampa_schedeprovv_form::TStampa_schedeprovv_form(const char* name) : TForm(nam bool TStampa_schedeprovv_form::validate(TForm_item &cf, TToken_string &s) { - const TString code = s.get(0); + const TFixed_string code(s.get(0)); if (code == "_BASECALCOLO") { real valore; @@ -59,12 +65,41 @@ bool TStampa_schedeprovv_form::validate(TForm_item &cf, TToken_string &s) return TForm::validate(cf, s); } +/////////////////////////////////////////////////////////// +// TStampa_schedeprovv_mask +/////////////////////////////////////////////////////////// + +class TStampa_schedeprovv_mask : public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); +public: + TStampa_schedeprovv_mask() : TAutomask("pr1300a") {} +}; + +bool TStampa_schedeprovv_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + if (e == fe_button && o.dlg() == DLG_PREVIEW) // Anteprima + { stop_run('A'); } + return true; +} + +/////////////////////////////////////////////////////////// +// TStampa_schedeprovv +/////////////////////////////////////////////////////////// + class TStampa_schedeprovv : public TSkeleton_application { TMask * _m; - void riporta_pagamenti(TCursor &cur); protected: + void riporta_pagamenti(TCursor &cur); + void print_or_preview(bool paper); + + virtual void print() { print_or_preview(true); } + virtual void preview() { print_or_preview(false); } + +public: virtual bool create(); virtual bool destroy(); virtual void main_loop(); @@ -77,7 +112,7 @@ bool TStampa_schedeprovv::create() LF_OCCAS, LF_PCON, LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0); - _m= new TMask ("pr1300a"); + _m = new TStampa_schedeprovv_mask; return TSkeleton_application::create(); } @@ -119,117 +154,134 @@ void TStampa_schedeprovv::riporta_pagamenti(TCursor &cur) } } +void TStampa_schedeprovv::print_or_preview(bool paper) +{ + const TPrtype pt = printer().printtype(); // save printer mode + if (paper == (pt == screenvis)) + { + if (paper) + printer().set_printtype(winprinter); + else + printer().set_printtype(screenvis); + } + + TStampa_schedeprovv_form frm("pr1300a"); + + const int hh = 7; + const int fh = 1; + const int fl = printer().formlen(); + + int rows[4]; // Righe orizzontali + rows[0] = hh-3; + rows[1] = hh; + rows[2] = fl-1; + rows[3] = 0; + frm.genera_intestazioni(odd_page, hh-2); + frm.genera_fincatura(odd_page, hh-3, fl-1, rows); + + // filtro e regione + TString filter; + + if (_m->get(F_FILTRO).full()) + { + filter = PROV_SALDATA; + if (_m->get(F_FILTRO)[0]=='P') + filter << "==\"X\"" ; + else + filter << "!=\"X\"" ; + } + if (_m->get_bool(F_NOZERO)) + { + bool not_empty = filter.not_empty(); + if (not_empty) + { + filter.insert("("); + filter << ") && ("; + } + filter << "(" << PROV_IMPPRDOC << "!= 0)"; + if (not_empty) + filter << ")"; + } + if (_m->get(F_DADATA).not_empty() || _m->get(F_ADATA).not_empty()) + { + TDate datam; + bool not_empty = filter.not_empty(); + if (not_empty) + { + filter.insert("("); + filter << ") && ("; + } + if (_m->get(F_DADATA).not_empty()) + { + datam = _m->get_date(F_DADATA); + filter << "(ANSI(" << PROV_DATADOC << ")>=\"" << datam.string(ANSI) << "\")"; + if (_m->get(F_ADATA).not_empty()) + filter << " && "; + } + if (_m->get(F_ADATA).not_empty()) + { + datam = _m->get_date(F_ADATA); + filter << "(ANSI(" << PROV_DATADOC << ")<=\"" << datam.string(ANSI) << "\")"; + } + if (not_empty) + filter << ")"; + } + + // aggiungo comunque il file alla relazione perche' mi serve avere il documento sempre + frm.cursor()->relation()->add(LF_DOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==\"D\"|NDOC==NDOC"); + + const TString& tipodoc = _m->get(F_TIPODOC); + if (tipodoc.full()) + { + //frm.cursor()->relation()->add(LF_DOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==\"D\"|NDOC==NDOC"); + bool not_empty = filter.full(); + + if (not_empty) + { + filter.insert("("); + filter << ") && ("; + } + + filter << LF_DOC << "->TIPODOC == \"" << tipodoc << "\""; + + if (not_empty) + filter << ")"; + + frm.cursor()->setfilter(filter, TRUE); + } + else + frm.cursor()->setfilter(filter); + + TRectype start(LF_PROVV),end(LF_PROVV); + if (_m->get(F_DAAGE).not_empty()) + start.put(PROV_CODAGE,_m->get(F_DAAGE)); + if (_m->get(F_AAGE).not_empty()) + end.put(PROV_CODAGE,_m->get(F_AAGE)); + frm.cursor()->setregion(start,end); + + frm.set_basecalcolo(_m->get(F_FORMULA)); + + // abilita le sezioni dei totali + frm.find_field('B',odd_page,"CLIENTI").show(!_m->get_bool(F_RAGGCLI)); + frm.find_field('B',odd_page,"HCLIENTI").show(!_m->get_bool(F_RAGGDOC)); + frm.find_field('B',odd_page,"DOCUMENTI").show(!_m->get_bool(F_RAGGDOC)); + frm.find_field('B',odd_page,"HDOCUMENTI").show(!_m->get_bool(F_RAGGRATE)); + frm.find_field('B',odd_page,"RATEDOC").show(!_m->get_bool(F_RAGGRATE)); + frm.print(); + if (_m->get(F_DEFINITIVA)[0]=='D') + { + riporta_pagamenti(*frm.cursor()); + } + + printer().set_printtype(pt); // Restore printer mode +} + void TStampa_schedeprovv::main_loop() { - while (_m->run()!=K_QUIT) + KEY k; + while ((k = _m->run()) != K_QUIT) { - TStampa_schedeprovv_form frm("pr1300a"); - - const int hh = 7; - const int fh = 1; - const int fl = printer().formlen(); - - int rows[4]; // Righe orizzontali - rows[0] = hh-3; - rows[1] = hh; - rows[2] = fl-1; - rows[3] = 0; - frm.genera_intestazioni(odd_page, hh-2); - frm.genera_fincatura(odd_page, hh-3, fl-1, rows); - - // filtro e regione - TString filter; - - if (_m->get(F_FILTRO).not_empty()) - { - filter = PROV_SALDATA; - if (_m->get(F_FILTRO)[0]=='P') - filter << "==\"X\"" ; - else - filter << "!=\"X\"" ; - } - if (_m->get_bool(F_NOZERO)) - { - bool not_empty = filter.not_empty(); - if (not_empty) - { - filter.insert("("); - filter << ") && ("; - } - filter << "(" << PROV_IMPPRDOC << "!= 0)"; - if (not_empty) - filter << ")"; - } - if (_m->get(F_DADATA).not_empty() || _m->get(F_ADATA).not_empty()) - { - TDate datam; - bool not_empty = filter.not_empty(); - if (not_empty) - { - filter.insert("("); - filter << ") && ("; - } - if (_m->get(F_DADATA).not_empty()) - { - datam = _m->get_date(F_DADATA); - filter << "(ANSI(" << PROV_DATADOC << ")>=\"" << datam.string(ANSI) << "\")"; - if (_m->get(F_ADATA).not_empty()) - filter << " && "; - } - if (_m->get(F_ADATA).not_empty()) - { - datam = _m->get_date(F_ADATA); - filter << "(ANSI(" << PROV_DATADOC << ")<=\"" << datam.string(ANSI) << "\")"; - } - if (not_empty) - filter << ")"; - } - - // aggiungo comunque il file alla relazione perche' mi serve avere il documento sempre - frm.cursor()->relation()->add(LF_DOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==\"D\"|NDOC==NDOC"); - - const TString & tipodoc = _m->get(F_TIPODOC); - if (tipodoc.not_empty()) - { - //frm.cursor()->relation()->add(LF_DOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==\"D\"|NDOC==NDOC"); - bool not_empty = filter.not_empty(); - - if (not_empty) - { - filter.insert("("); - filter << ") && ("; - } - - filter << LF_DOC << "->TIPODOC == \"" << tipodoc << "\""; - - if (not_empty) - filter << ")"; - - frm.cursor()->setfilter(filter, TRUE); - } - else - frm.cursor()->setfilter(filter); - - TRectype start(LF_PROVV),end(LF_PROVV); - if (_m->get(F_DAAGE).not_empty()) - start.put(PROV_CODAGE,_m->get(F_DAAGE)); - if (_m->get(F_AAGE).not_empty()) - end.put(PROV_CODAGE,_m->get(F_AAGE)); - frm.cursor()->setregion(start,end); - - frm.set_basecalcolo(_m->get(F_FORMULA)); - - // abilita le sezioni dei totali - frm.find_field('B',odd_page,"CLIENTI").show(!_m->get_bool(F_RAGGCLI)); - frm.find_field('B',odd_page,"HCLIENTI").show(!_m->get_bool(F_RAGGDOC)); - frm.find_field('B',odd_page,"DOCUMENTI").show(!_m->get_bool(F_RAGGDOC)); - frm.find_field('B',odd_page,"HDOCUMENTI").show(!_m->get_bool(F_RAGGRATE)); - frm.find_field('B',odd_page,"RATEDOC").show(!_m->get_bool(F_RAGGRATE)); - frm.print(); - if (_m->get(F_DEFINITIVA)[0]=='D') - { - riporta_pagamenti(*frm.cursor()); - } + print_or_preview(k == K_ENTER); } } diff --git a/pr/pr1300a.uml b/pr/pr1300a.uml index e9cd62ba3..72488df02 100755 --- a/pr/pr1300a.uml +++ b/pr/pr1300a.uml @@ -1,14 +1,19 @@ #include "pr1300a.h" TOOLBAR "topbar" 0 0 0 2 -#include +#include ENDPAGE PAGE "Stampa schede di provvigione" 0 2 0 0 +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 1 "@bIntervallo" +END + STRING F_DAAGE 5 BEGIN - PROMPT 2 1 "Da agente " + PROMPT 2 2 "Da agente " FLAGS "UZ" USE LF_AGENTI INPUT CODAGE F_DAAGE @@ -20,7 +25,7 @@ END STRING F_AAGE 5 BEGIN - PROMPT 34 1 "Ad agente " + PROMPT 2 3 "Ad agente " FLAGS "UZ" COPY USE F_DAAGE INPUT CODAGE F_AAGE @@ -29,51 +34,66 @@ BEGIN GROUP G_CODAGE END +DATE F_DADATA +BEGIN + PROMPT 34 2 "Da data " +END + +DATE F_ADATA +BEGIN + PROMPT 34 3 "A data " +END + +GROUPBOX DLG_NULL 78 8 +BEGIN + PROMPT 1 5 "@bParametri e filtri" +END + LIST F_DEFINITIVA 15 BEGIN - PROMPT 2 3 "Stampa " + PROMPT 2 6 "Stampa " ITEM "P|provvisoria" MESSAGE ENABLE,F_FILTRO ITEM "D|definitiva" MESSAGE "D",F_FILTRO|DISABLE,F_FILTRO END -LIST F_FILTRO 30 +LIST F_FILTRO 1 30 BEGIN - PROMPT 34 3 "Seleziona " - ITEM "|tutte le provvigioni" - ITEM "D|solo le provv. da pagare" - ITEM "P|solo le provv. gia' pagate" + PROMPT 34 6 "Selezione " + ITEM "|Tutte le provvigioni" + ITEM "D|Solo da pagare" + ITEM "P|Solo gia' pagate" END BOOL F_RAGGCLI BEGIN - PROMPT 2 5 "Raggruppa i clienti" - MESSAGE TRUE "X",F_RAGGDOC|DISABLE,F_RAGGDOC + PROMPT 2 7 "Raggruppamento clienti" MESSAGE FALSE ENABLE,F_RAGGDOC + MESSAGE TRUE "X",F_RAGGDOC|DISABLE,F_RAGGDOC END BOOL F_RAGGDOC BEGIN - PROMPT 35 5 "Raggruppa i documenti" - MESSAGE TRUE "X",F_RAGGRATE|DISABLE,F_RAGGRATE|"",F_TIPODOC|DISABLE, F_TIPODOC + PROMPT 34 7 "Raggruppamento documenti" MESSAGE FALSE ENABLE,F_RAGGRATE|ENABLE,F_TIPODOC + MESSAGE TRUE "X",F_RAGGRATE|DISABLE,F_RAGGRATE|"",F_TIPODOC|DISABLE, F_TIPODOC END BOOL F_RAGGRATE BEGIN - PROMPT 2 7 "Raggruppa le rate" + PROMPT 2 8 "Raggruppamento rate" END BOOL F_NOZERO BEGIN - PROMPT 35 7 "Non stampare doc. con provvigione nulla" + PROMPT 34 8 "Non stampare documenti senza provvigioni" END STRING F_TIPODOC 4 BEGIN - PROMPT 2 9 "Tipo doc. " - HELP "Codice tipo documento" + PROMPT 2 9 "Tipo documento " + HELP "Selezionare il tipo documento da stampare" USE %TIP SELECT B3=="X" INPUT CODTAB F_TIPODOC DISPLAY "Codice" CODTAB @@ -83,19 +103,9 @@ BEGIN FLAG "UP" END -DATE F_DADATA -BEGIN - PROMPT 2 11 "Da data " -END - -DATE F_ADATA -BEGIN - PROMPT 35 11 "A data " -END - STRING F_FORMULA 10 BEGIN - PROMPT 2 13 "Stampa " + PROMPT 2 11 "Stampa " USE %FRD FLAG "U" CHECKTYPE NORMAL @@ -108,13 +118,13 @@ END STRING F_D_FORMULA 50 BEGIN - PROMPT 25 13 "" + PROMPT 26 11 "" FLAG "D" END STRING F_PROFILO 50 BEGIN - PROMPT 2 15 "Profilo " + PROMPT 2 -1 "Profilo " PSELECT //MESSAGE K_SPACE,F_ORDINAMENTO|K_SPACE,F_VAL2PRINT END