diff --git a/ve/ve1100a.uml b/ve/ve1100a.uml index bbfca71df..847d8f4c6 100755 --- a/ve/ve1100a.uml +++ b/ve/ve1100a.uml @@ -10,14 +10,57 @@ END BUTTON DLG_SETPRINT 10 2 BEGIN - PROMPT 3 1 "~Imposta" + PROMPT 2 1 "~Imposta" +END + +BUTTON DLG_PREVIEW 10 2 +BEGIN + PROMPT 3 1 "~Anteprima" + PICTURE TOOL_PREVIEW + MESSAGE EXIT,65 +END + +BUTTON DLG_NULL 10 2 +BEGIN + PROMPT 4 1 "" + PICTURE 0 END BUTTON DLG_EMAIL 10 2 BEGIN - PROMPT 2 1 "~Mail" - PICTURE BMP_EMAIL - MESSAGE EXIT,K_ESC + PROMPT 5 1 "Mail" + PICTURE TOOL_EMAIL + MESSAGE EXIT,69 + FLAGS "D" +END + +BUTTON DLG_SIGNMAIL 10 2 +BEGIN + PROMPT 6 1 "Firmata" + PICTURE TOOL_SIGNMAIL + MESSAGE EXIT,101 + FLAGS "D" +END + +BUTTON DLG_NULL 10 2 +BEGIN + PROMPT 7 1 "" + PICTURE 0 +END + +BUTTON DLG_PDF 10 2 +BEGIN + PROMPT 8 1 "Pdf" + PICTURE TOOL_PDF + MESSAGE EXIT,80 + FLAGS "D" +END + +BUTTON DLG_SIGNPDF 10 2 +BEGIN + PROMPT 9 1 "Firmato" + PICTURE TOOL_SIGNPDF + MESSAGE EXIT,112 FLAGS "D" END diff --git a/ve/ve1300.cpp b/ve/ve1300.cpp index ec091ddf5..ed66d137a 100755 --- a/ve/ve1300.cpp +++ b/ve/ve1300.cpp @@ -807,7 +807,15 @@ bool TReport_doc_mask::on_field_event(TOperable_field& o, TField_event e, long j TReport_doc_mask::TReport_doc_mask() : TAutomask("ve1100a") { hide(F_PROVV); - enable(DLG_EMAIL); + + //abilita i bottoni della toolbar in base ai moduli presenti sulla chiave + TApplication& a = main_app(); + const bool can_pdf = a.has_module(RSAUT); + const bool can_sign = can_pdf && a.has_module(FDAUT); + enable(DLG_EMAIL, can_pdf); + enable(DLG_SIGNMAIL, can_sign); + enable(DLG_PDF, can_pdf); + enable(DLG_SIGNPDF, can_sign); } /////////////////////////////////////////////////////////// @@ -838,6 +846,8 @@ class TReport_doc_app : public TSkeleton_application { TReport_doc_mask* _msk; + enum TOutput_mode {out_preview, out_print, out_mail, out_signed_mail, out_pdf, out_signed_pdf}; + int _anno; TString16 _codnum; // codice numerazione / profilo long _ndoc, _codcf; @@ -847,8 +857,9 @@ protected: void add_data_filter(TString& query, bool from) const; void add_ndoc_filter(TString& query, bool from) const; void add_filter(TString& str, bool from) const; - bool print_loop(const TString& query, bool send_by_mail); - void print_selection(bool send_by_mail = false); + bool print_loop(const TString& query, TOutput_mode mode); + void print_selection(TOutput_mode mode); + TOutput_mode key2mode(KEY k) const; void set_next_pdf(int an, const char* cn, long nd, char tcf, long cf); virtual bool get_next_pdf(int anno, long ditta, const char* codnum, long numdoc, long codcf, TFilename& pdf) const; @@ -956,7 +967,7 @@ bool TReport_doc_app::destroy() return TSkeleton_application::destroy(); } -bool TReport_doc_app::print_loop(const TString& query, bool send_by_mail) +bool TReport_doc_app::print_loop(const TString& query, TOutput_mode mode) { TISAM_recordset doc(query); const int docs = doc.items(); @@ -1000,7 +1011,7 @@ bool TReport_doc_app::print_loop(const TString& query, bool send_by_mail) const TString& tipodoc = doc.get(DOC_TIPODOC).as_string(); const TTipo_documento& tipo = cached_tipodoc(tipodoc); - const bool send_mail = send_by_mail && get_mail_address().full(); + const bool send_mail = ( mode == out_mail || mode == out_signed_mail) && get_mail_address().full(); TFilename profilo; // Tenta di costruirsi il nome del report bool ok = false; @@ -1014,7 +1025,7 @@ bool TReport_doc_app::print_loop(const TString& query, bool send_by_mail) int copies = _msk->get_int(F_NCOPIE); if (copies <= 0 && is_definitive) copies = tipo.ncopie(); - if (copies <= 0) + if (copies <= 0 || send_mail) copies = 1; TReport_doc& report = reports.get(profilo); @@ -1072,7 +1083,7 @@ bool TReport_doc_app::print_loop(const TString& query, bool send_by_mail) attachment.tempdir(); attachment << SLASH << _anno <<'_' << _codnum << '_' << _ndoc; attachment.ext("pdf"); - mail_book->send_mail(attachment); + mail_book->send_mail(attachment, mode == out_signed_mail); remove(attachment); } delete mail_book; @@ -1083,39 +1094,77 @@ bool TReport_doc_app::print_loop(const TString& query, bool send_by_mail) if (book.pages() > 0) { if (docs > 1) - set_next_pdf(0, "", 0L, ' ', 0L); // Disabilita archiviazione PDF + set_next_pdf(0, "", 0L, ' ', 0L); //spegne l'archiviazione nell'esportazione;non si possono archiviare pił docs in uno!!! book.add(log); - book.print_or_preview(); + switch (mode) + { + case out_preview: book.preview(); break; + case out_pdf: + case out_signed_pdf: + { + TFilename pdf; + pdf.tempdir(); + pdf << SLASH << _anno <<'_' << _codnum << '_' << _ndoc; + pdf.ext("pdf"); + + if (book.export_pdf(pdf, mode == out_signed_pdf)) + xvt_sys_goto_url(pdf, "open"); + } + break; + default: book.print(); break; + } } return true; } -void TReport_doc_app::print_selection(bool send_by_mail) +void TReport_doc_app::print_selection(TOutput_mode mode) { TString query; query << "USE " << LF_DOC; add_filter(query, true); add_filter(query, false); - print_loop(query, send_by_mail); + print_loop(query, mode); +} + +//Allah!! +TReport_doc_app::TOutput_mode TReport_doc_app::key2mode(KEY k) const +{ + TOutput_mode mode = out_print; + switch (k) + { + case 'A': mode = out_preview; break; + case 'E': mode = out_mail; break; + case 'e': mode = out_signed_mail; break; + case 'P': mode = out_pdf; break; + case 'p': mode = out_signed_pdf; break; + default : mode = out_print; break; + } + return mode; } void TReport_doc_app::main_loop() { const int a = argc(); + if (a > 2) _msk->set(F_CODNUM, argv(2)); // Stampa da menu con numerazione imposta if (a > 6) // Stampa da riga di comando { + TOutput_mode mode = out_print; + _msk->set(F_DATA_O_NUM, "N"); // Stampa per numero documento _msk->set(F_ANNO, argv(3)); _msk->set(F_PROVV, argv(4)); _msk->set(F_DA_NDOC, argv(5)); _msk->set(F_A_NDOC, argv(6)); + if (a > 7) + mode = key2mode(argv(7)[0]); // modo di stampa if (a > 8) _msk->set(F_NCOPIE, argv(8)); // Numero copie - print_selection(); + + print_selection(mode); return; } @@ -1124,8 +1173,7 @@ void TReport_doc_app::main_loop() const KEY k = _msk->run(); if (k == K_QUIT) break; - const bool mail = k != K_ENTER; - print_selection(mail); + print_selection(key2mode(k)); } }