Patch level : 10.0
Files correlati : agalib Ricompilazione Demo : [ ] Commento : Aggiunto supporto per firma digitale git-svn-id: svn://10.65.10.50/trunk@18571 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									89aad9db2e
								
							
						
					
					
						commit
						512126d4df
					
				| @ -3546,9 +3546,10 @@ const TString& TRectype::get(const char* fieldname) const | ||||
|       return _memo_data->row( index );     | ||||
|     if (_memo_data->recno() >= 0L) | ||||
|     { | ||||
|       const int orig = _memo_data->file(); | ||||
|       const TIsam_handle orig = _memo_data->file(); | ||||
|       if (orig) | ||||
|       { | ||||
|         CHECKD(orig >= LF_EXTERNAL || orig == num(), "Invalid isam handle ", orig); | ||||
| 	      TCodeb_handle cb_handle = prefix().get_handle(orig, -1); | ||||
| 	      CHECKD(cb_handle >= 0, "Can't read memo from file ", orig); | ||||
|         if (DB_recno(cb_handle) != _memo_data->recno()) | ||||
|  | ||||
| @ -2839,26 +2839,20 @@ KEY TFile_select::run() | ||||
| { | ||||
|   TFilename path; | ||||
|   path.add(field().get()); | ||||
|   if (_filter.find('.') > 0 && !_filter.ends_with(".*")) | ||||
|     path.ext(_filter.ext()); | ||||
| 
 | ||||
|   FILE_SPEC fs; | ||||
|   xvt_fsys_convert_str_to_fspec(path, &fs); | ||||
|   FILE_SPEC fs; xvt_fsys_convert_str_to_fspec(path, &fs); | ||||
|    | ||||
|   DIRECTORY savedir; xvt_fsys_get_dir(&savedir); | ||||
|   bool good = xvt_dm_post_file_open(&fs, field().prompt()) == FL_OK; | ||||
|   xvt_fsys_set_dir(&savedir); | ||||
| 
 | ||||
|   if (good) | ||||
|   { | ||||
|     good = _filter.blank() || xvt_str_match(fs.name, _filter, false); | ||||
|     xvt_fsys_convert_fspec_to_str(&fs, path.get_buffer(), path.size()); | ||||
|     good = _filter.blank() || xvt_str_match(path.name(), _filter, false); | ||||
|     if (good) | ||||
|     { | ||||
|       xvt_fsys_convert_dir_to_str(&fs.dir, path.get_buffer(), path.size()); | ||||
|       path.add(fs.name); | ||||
|       field().set(path); | ||||
|     } | ||||
|     else | ||||
|       field().error_box(FR("Il nome non corrisponde a %s"), _filter.get_buffer()); | ||||
|       field().error_box(FR("Il nome del file non corrisponde a %s"), _filter.get_buffer()); | ||||
|   } | ||||
|   return good ? K_ENTER : K_ESC; | ||||
| } | ||||
|  | ||||
| @ -434,7 +434,7 @@ int TFile_info::close() | ||||
|       { | ||||
|         // Chiudi fisicamente solo se necessario
 | ||||
|         if (_locked || _exclusive || dir_type() == _extdir) | ||||
|           err = close_low(); | ||||
|           err = close_low();         // Chiudo fisicamente il file per eliminare i lock
 | ||||
|       }   | ||||
|       _locked = _exclusive = false; | ||||
|     } | ||||
| @ -454,7 +454,7 @@ void TFile_info::auto_close() | ||||
| int TFile_info::auto_open(int key) | ||||
| { | ||||
|   if (_handle < 0) | ||||
|     open_low(FALSE, TRUE); | ||||
|     open_low(false, true); | ||||
| 
 | ||||
|   if (_handle >= 0) | ||||
|   { | ||||
| @ -715,8 +715,14 @@ void TFile_manager::destroy_info(int logicnum) | ||||
| TCodeb_handle TFile_manager::get_handle(TIsam_handle name, int key) | ||||
| { | ||||
|   TFile_info& i = fileinfo(name); | ||||
| 
 | ||||
| #ifdef DBG | ||||
|   if (i.ref_count() == 0) | ||||
|     NFCHECK("Can't use closed file %d", i.num()); | ||||
|   { | ||||
|     NFCHECK("Sarebbe bene aggiungere una bella open_files(%d, ...) in TYour_app::create()", i.num()); | ||||
|     i.open(false, true); | ||||
|   } | ||||
| #endif | ||||
| 
 | ||||
|   TCodeb_handle handle = i.handle(); | ||||
|   if (handle < 0) | ||||
| @ -879,7 +885,7 @@ bool TFirm::read(long cod) | ||||
|   int err = NOERR; | ||||
|   if (cod < 0L) | ||||
|     cod = prefix().get_codditta(); | ||||
|   _rec.destroy(); | ||||
|   destroy(); | ||||
|   TLocalisamfile ditte(LF_NDITTE); | ||||
|   if (cod > 0L) | ||||
|   {            | ||||
| @ -894,18 +900,18 @@ bool TFirm::read(long cod) | ||||
|     for (int f = ditta.items()-1; f >= 0; f--) | ||||
|     { | ||||
|       const char* name = ditta.fieldname(f); | ||||
|       _rec.add(name, ditta.get(name)); | ||||
|       add(name, ditta.get(name)); | ||||
|     } | ||||
| 	} | ||||
| 	else | ||||
|     NFCHECK("Can't read firm %ld: error %d", cod, err); | ||||
| 
 | ||||
|   return _rec.items() > 0; | ||||
|   return items() > 0; | ||||
| } | ||||
| 
 | ||||
| const TString& TFirm::get(const char* attr) const | ||||
| { | ||||
|   const TString* str = (const TString*)_rec.objptr(attr); | ||||
|   const TString* str = (const TString*)objptr(attr); | ||||
|   if (str == NULL) | ||||
|     str = &EMPTY_STRING; | ||||
|   return *str; | ||||
| @ -1069,7 +1075,7 @@ bool TPrefix::exist(long codditta) const | ||||
| { | ||||
|   if (codditta > 0L && codditta < 100000L) | ||||
|   { | ||||
|     TFilename s(firm2dir(codditta));  | ||||
|     TFilename s = firm2dir(codditta);  | ||||
|     s.add("dir.gen"); | ||||
|     if (s.exist()) | ||||
|     { | ||||
| @ -1134,10 +1140,14 @@ bool TPrefix::set_codditta(long codditta, bool force) | ||||
|       s.format("%05lda", codditta);  | ||||
|     set(s, force); | ||||
|     CPutPref(_prefix); | ||||
|     if (_firm)  | ||||
|     if (_firm && _firm->read(codditta))  | ||||
|     { | ||||
|       _firm->read(codditta); | ||||
|       xvt_sys_set_profile_string(NULL, "Main", "Company", _firm->get(NDT_RAGSOC)); | ||||
|       TConfig ini(CONFIG_DITTA, "Main"); | ||||
|       FOR_EACH_ASSOC_STRING((*_firm), h, key, str) | ||||
|       { | ||||
|         if (*str > ' ') | ||||
|           ini.set(key, str); | ||||
|       } | ||||
|     } | ||||
|     return true; | ||||
|   } | ||||
| @ -1257,6 +1267,12 @@ const char* firm2dir(long codditta) | ||||
|     firm.format("%05lda", codditta); break; | ||||
|   }     | ||||
| 
 | ||||
|   if (__ptprf[0] == '\0') | ||||
|   { | ||||
|     CGetPref(); | ||||
|     CHECK(__ptprf[0], "Invalid prefix"); | ||||
|   } | ||||
| 
 | ||||
|   TString& path = get_tmp_string(_MAX_PATH); | ||||
|   xvt_fsys_build_pathname(path.get_buffer(), "", __ptprf, firm, NULL, NULL); | ||||
|   return path; | ||||
| @ -1383,7 +1399,7 @@ bool TPrefix::build_firm_data(long codditta, bool flagcom) | ||||
|   return true; | ||||
| } | ||||
| 
 | ||||
| int TPrefix::firms(TString_array& codes) const | ||||
| int TPrefix::firms(TString_array& codes) | ||||
| { | ||||
|   codes.destroy(); | ||||
|   TFilename n = __ptprf; n.add("?????A"); | ||||
| @ -1392,14 +1408,16 @@ int TPrefix::firms(TString_array& codes) const | ||||
|   {  | ||||
|     n = xvt_slist_get(dirs, e, NULL); | ||||
|     const TString& code = n.name_only(); | ||||
|     if (exist(atol(code))) | ||||
|     TFilename s = firm2dir(atol(code));  | ||||
|     s.add("dir.gen"); | ||||
|     if (s.exist()) | ||||
|       codes.add(code); | ||||
|   } | ||||
|   xvt_slist_destroy(dirs); | ||||
|   return codes.items(); | ||||
| } | ||||
| 
 | ||||
| int TPrefix::firms(TPointer_array& codes) const | ||||
| int TPrefix::firms(TPointer_array& codes) | ||||
| { | ||||
|   TString_array strcodes; firms(strcodes); | ||||
|   FOR_EACH_ARRAY_ROW(strcodes, t, row) | ||||
| @ -1407,6 +1425,44 @@ int TPrefix::firms(TPointer_array& codes) const | ||||
|   return codes.items(); | ||||
| } | ||||
| 
 | ||||
| int TPrefix::firms(TArray& ditte) | ||||
| { | ||||
|   ditte.destroy(); | ||||
|   TPointer_array codes; firms(codes); | ||||
|   for (int i = 0; i < codes.items(); i++) | ||||
|   { | ||||
|     const long codditta = codes.get_long(i); | ||||
|     TFilename ininame = firm2dir(codditta); | ||||
|     ininame.add("ditta.ini"); | ||||
|     TConfig ini(ininame, "Main"); | ||||
|     TAssoc_array& fields = ini.list_variables(); | ||||
|     if (fields.empty() && prefix_valid()) | ||||
|     { | ||||
|       TLocalisamfile nditte(LF_NDITTE); | ||||
|       TRectype& ditta = nditte.curr(); | ||||
|       ditta.put(NDT_CODDITTA, codditta); | ||||
|       if (nditte.read() == NOERR) | ||||
|       { | ||||
|         for (int f = 0; f < ditta.items(); f++) | ||||
|         { | ||||
|           const char* fname = ditta.fieldname(f); | ||||
|           const TString& value = ditta.get(fname); | ||||
|           if (!value.blank()) | ||||
|             ini.set(fname, value); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     if (fields.empty()) | ||||
|     { | ||||
|       ini.set(NDT_CODDITTA, codditta); | ||||
|       CHECK(!fields.empty(), "Can't genenerate firm data"); | ||||
|     } | ||||
|     ditte.add(fields); | ||||
|   } | ||||
|   return ditte.items(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////
 | ||||
| // TTable name converter
 | ||||
| ///////////////////////////////////////////////////////////
 | ||||
|  | ||||
| @ -67,10 +67,8 @@ public: | ||||
| // @class TFirm | Classe contenente le informazioni sulla ditta correntemente in uso
 | ||||
| //
 | ||||
| // @base public | TObject     
 | ||||
| class TFirm : public TObject | ||||
| class TFirm : public TAssoc_array | ||||
| {  | ||||
|   TAssoc_array _rec; | ||||
| 
 | ||||
| public: | ||||
|   bool read(long code); | ||||
|   TFirm& operator=(long code) { read(code); return *this; } | ||||
| @ -220,8 +218,9 @@ public: | ||||
|   { _manager.destroy_info(logicnum); } | ||||
| 
 | ||||
|   const TFirm& firm(); | ||||
|   int firms(TString_array& codes) const; | ||||
|   int firms(TPointer_array& codes) const; // calls above method!
 | ||||
|   static int firms(TString_array& codes); | ||||
|   static int firms(TPointer_array& codes); // calls above method!
 | ||||
|   static int firms(TArray& data);          // calls above method!
 | ||||
| 
 | ||||
|   // @cmember Costruttore
 | ||||
|   TPrefix(); | ||||
|  | ||||
| @ -3128,6 +3128,13 @@ bool TReport::print_or_preview() | ||||
|   return book.print_or_preview(); | ||||
| } | ||||
| 
 | ||||
| bool TReport::print() | ||||
| { | ||||
|   TReport_book book; | ||||
|   book.add(*this); | ||||
|   return book.print(); | ||||
| } | ||||
| 
 | ||||
| bool TReport::preview() | ||||
| { | ||||
|   TReport_book book; | ||||
| @ -3135,11 +3142,11 @@ bool TReport::preview() | ||||
|   return book.preview(); | ||||
| } | ||||
| 
 | ||||
| bool TReport::archive() | ||||
| bool TReport::archive(bool signature) | ||||
| { | ||||
|   TReport_book book; | ||||
|   book.add(*this); | ||||
|   return book.archive(); | ||||
|   return book.archive(NULL, signature); | ||||
| } | ||||
| 
 | ||||
| TReport::TReport()  | ||||
|  | ||||
| @ -582,8 +582,9 @@ public: | ||||
|   void destroy(); | ||||
| 
 | ||||
|   bool print_or_preview(); | ||||
|   bool print(); | ||||
|   bool preview(); | ||||
|   bool archive(); | ||||
|   bool archive(bool signature); | ||||
| 
 | ||||
|   TReport(); | ||||
|   virtual ~TReport(); | ||||
|  | ||||
| @ -1,3 +1,4 @@ | ||||
| #include <applicat.h> | ||||
| #include <automask.h> | ||||
| #include <colors.h> | ||||
| #include <config.h> | ||||
| @ -1494,7 +1495,7 @@ bool TBook::print_page(TWindow& win, size_t page) | ||||
|   return true; | ||||
| } | ||||
| 
 | ||||
| bool TBook::export_text(const TFilename& fname, bool signature) | ||||
| bool TBook::export_text(TFilename& fname, bool signature) | ||||
| { | ||||
|   if (fname.ends_with(".pdf", true)) | ||||
|     return export_pdf(fname, signature); | ||||
| @ -1631,6 +1632,13 @@ bool TBook::export_text(const TFilename& fname, bool signature) | ||||
|       _vertical_alignment = str.get_char(); | ||||
|     } | ||||
|   } | ||||
|   ofs.close(); | ||||
|   if (signature && main_app().has_module(FDAUT)) | ||||
|   { | ||||
|     char outfile[_MAX_PATH] = ""; | ||||
|     if (xvt_sign_file(fname, outfile)) | ||||
|       fname = outfile; | ||||
|   } | ||||
| 
 | ||||
|   return true; | ||||
| } | ||||
| @ -1922,9 +1930,9 @@ bool TBook::print(size_t pagefrom, size_t pageto, word copies) | ||||
|   return xvt_print_start_thread(main_loop_callback, (long)this) != 0; | ||||
| } | ||||
| 
 | ||||
| bool TBook::export_pdf(const TFilename& filename, bool certified) | ||||
| bool TBook::export_pdf(TFilename& filename, bool signature) | ||||
| { | ||||
|   bool ok = (pages() > 0) && dongle().active(RSAUT); | ||||
|   bool ok = (pages() > 0) && main_app().has_module(RSAUT); // Controllo paranoico dei permessi
 | ||||
|   if (ok) | ||||
|   { | ||||
|     _pdf_file = filename; | ||||
| @ -1932,10 +1940,14 @@ bool TBook::export_pdf(const TFilename& filename, bool certified) | ||||
|     _pageto = 0; | ||||
|     _copies = 1; | ||||
|     ok = xvt_print_start_thread(main_loop_callback, (long)this) != 0; | ||||
|     if (ok && certified) | ||||
|     if (ok && signature && main_app().has_module(FDAUT)) // Controllo paranoico dei permessi
 | ||||
|     { | ||||
|       if (!xvt_pdf_sign(filename)) | ||||
|         error_box(TR("Impossibile apporre la firma digitale al documento")); | ||||
|       char outfile[_MAX_PATH] = ""; | ||||
|       if (xvt_sign_file(filename, outfile)) | ||||
|       {   | ||||
|         xvt_fsys_remove_file(filename); // Sbatto via il documento originale non firmato
 | ||||
|         filename = outfile; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   return ok; | ||||
| @ -1993,7 +2005,7 @@ bool TBook::archive(const char* repname, bool signature) | ||||
|   return ok; | ||||
| } | ||||
| 
 | ||||
| bool TBook::send_mail(const TFilename& file, bool signature) | ||||
| bool TBook::send_mail(TFilename& file, bool signature) | ||||
| { | ||||
|   bool ok = export_pdf(file, signature); | ||||
|   if (ok) | ||||
| @ -2033,8 +2045,8 @@ bool TBook::print_or_preview() | ||||
|     break; | ||||
|   case exportprinter: | ||||
|     { | ||||
|       const TFilename f = printer().get_export_file(); | ||||
|       ok = export_text(f, false); | ||||
|       TFilename f = printer().get_export_file(); | ||||
|       ok = export_text(f, NULL); | ||||
|       if (ok) | ||||
|         xvt_sys_goto_url(f, "open"); | ||||
|     } | ||||
| @ -2720,7 +2732,7 @@ bool TReport_book::print(size_t pagefrom, size_t pageto, word copies) | ||||
|   return TBook::print(pagefrom, pageto, copies); | ||||
| } | ||||
| 
 | ||||
| bool TReport_book::archive(const char* repname) | ||||
| bool TReport_book::archive(const char* repname, bool signature) | ||||
| { | ||||
|   TFilename n = repname; | ||||
|   if (n.blank() && _report != NULL) | ||||
| @ -2728,7 +2740,7 @@ bool TReport_book::archive(const char* repname) | ||||
|     n = _report->filename().name(); | ||||
|     n.ext(""); | ||||
|   } | ||||
|   return TBook::archive(n); | ||||
|   return TBook::archive(n, signature); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -86,12 +86,12 @@ public: | ||||
|   virtual bool on_link(const TReport_link&) { return false; } | ||||
| 
 | ||||
|   virtual bool print(size_t pagefrom = 0, size_t pageto = 0, word copies = 0); | ||||
|   virtual bool archive(const char* repname = NULL, bool certified = false); | ||||
|   virtual bool archive(const char* repname, bool signature); | ||||
|   virtual bool preview(); | ||||
|    | ||||
|   virtual bool export_pdf(const TFilename& fname, bool certified); | ||||
|   virtual bool export_text(const TFilename& fname, bool certified); | ||||
|   virtual bool send_mail(const TFilename& fname, bool certified); | ||||
|   virtual bool export_pdf(TFilename& fname, bool signature); | ||||
|   virtual bool export_text(TFilename& fname, bool signature); | ||||
|   virtual bool send_mail(TFilename& fname, bool signature); | ||||
|   virtual bool esporta(); | ||||
|   bool print_or_preview(); // Calls one of the above
 | ||||
| 
 | ||||
| @ -132,7 +132,7 @@ public: | ||||
|   virtual int logical_page_width() const { return _logical_page_width; } | ||||
|   virtual int logical_page_height() const { return _logical_page_height; } | ||||
|   virtual bool print(size_t pagefrom = 0, size_t pageto = 0, word copies = 0); | ||||
|   virtual bool archive(const char* repname = NULL); | ||||
|   virtual bool archive(const char* repname, bool signature); | ||||
|   TReport_book(const char* name = NULL); | ||||
| }; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user