Files correlati : Ricompilazione Demo : [ ] Commento : personalizzazione dinamica git-svn-id: svn://10.65.10.50/trunk@20325 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			292 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			292 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | ||
| #include <automask.h>
 | ||
| #include <defmask.h>
 | ||
| #include <golem.h>
 | ||
| #include <modaut.h>
 | ||
| #include <progind.h>
 | ||
| #include <reputils.h>
 | ||
| #include <textset.h>
 | ||
| #include <utility.h>
 | ||
| 
 | ||
| #include "pg0067100a.h"
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ///////////////////////////////////////////////
 | ||
| //  MASCHERA
 | ||
| ///////////////////////////////////////////////
 | ||
| class TDistribuzione_f24_mask : public TAutomask
 | ||
| {
 | ||
| protected:
 | ||
|   TRecordset* create_recordset() const;
 | ||
|   void print_stats(const bool stampa) const;
 | ||
|   void export_stats() const;
 | ||
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | ||
| 
 | ||
| public:
 | ||
|   TDistribuzione_f24_mask();
 | ||
| };
 | ||
| 
 | ||
| TDistribuzione_f24_mask::TDistribuzione_f24_mask() : TAutomask("pg0067100a")
 | ||
| {
 | ||
| }
 | ||
| 
 | ||
| bool TDistribuzione_f24_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | ||
| {
 | ||
|   switch(o.dlg())
 | ||
|   {
 | ||
|     case DLG_PRINT: //stampa
 | ||
|     if (e == fe_button)
 | ||
|     {
 | ||
|       print_stats(true);
 | ||
|     }
 | ||
|     break;
 | ||
|     case DLG_PREVIEW: //stampa
 | ||
|     if (e == fe_button)
 | ||
|     {
 | ||
|       print_stats(false);
 | ||
|     }
 | ||
|     break;
 | ||
|     case DLG_EXPORT:  //esporta in excel
 | ||
|     if (e == fe_button)
 | ||
|     {
 | ||
|       export_stats();
 | ||
|     }
 | ||
|     break;
 | ||
|   default:
 | ||
|     break;
 | ||
|   }
 | ||
|   return true;
 | ||
| }
 | ||
| 
 | ||
| //metodo comune di generazione del recordset
 | ||
| //recordset che deve ordinare, per piva e anno, i files pdf che trova nelle sottocartelle della..
 | ||
| //..cartella radice di destinazione
 | ||
| TRecordset* TDistribuzione_f24_mask::create_recordset() const
 | ||
| {
 | ||
|   TAS400_recordset* recset = new TAS400_recordset("AS400(58)");
 | ||
|   recset->create_field("CODICE_FISCALE", 0, 16, _alfafld, true);
 | ||
|   for (int j = 2006; j < 2016; j++)
 | ||
|   {
 | ||
|     TString8 anno;
 | ||
|     anno << "F24_" << j;
 | ||
|     recset->create_field(anno, -1, 4, _intfld, true);
 | ||
|   }
 | ||
|   recset->create_field("CR", -1, 2, _alfafld, true, TVariant("\n\r"));
 | ||
| 
 | ||
|   //cartella radice di destinazione
 | ||
|   const TString& dest_dir = get(F_PATH_DST);
 | ||
|   TFilename dest_pivas = dest_dir; dest_pivas.add("*");
 | ||
|   SLIST pivas = xvt_fsys_list_files(DIR_TYPE, dest_pivas, true);
 | ||
|   for (SLIST_ELT e = xvt_slist_get_first(pivas); e; e = xvt_slist_get_next(pivas, e))
 | ||
|   { 
 | ||
|     TFilename dest_years = xvt_slist_get(pivas, e, NULL);
 | ||
|     const TString& piva = dest_years.name_only();
 | ||
|     if (piva.len() < 11 || piva.len() > 16)
 | ||
|       continue;
 | ||
| 
 | ||
|     recset->new_rec("");
 | ||
|     recset->set("CODICE_FISCALE", piva);
 | ||
| 
 | ||
|     dest_years.add("20??");
 | ||
|     SLIST years = xvt_fsys_list_files(DIR_TYPE, dest_years, true);
 | ||
|     for (SLIST_ELT e = xvt_slist_get_first(years); e; e = xvt_slist_get_next(years, e))
 | ||
|     {
 | ||
|       TFilename dest_year = xvt_slist_get(years, e, NULL);
 | ||
|       const TString4 year = dest_year.name_only();
 | ||
|       dest_year.add("*.pdf");
 | ||
|       SLIST files = xvt_fsys_list_files("", dest_year, false);
 | ||
|       const long count = xvt_slist_count(files);
 | ||
|       xvt_slist_destroy(files);
 | ||
| 
 | ||
|       //aggiunge la riga al recordset
 | ||
|       TString8 fld; fld << "F24_" << year;
 | ||
|       recset->set(fld, count);
 | ||
|     }
 | ||
|     xvt_slist_destroy(years);
 | ||
|   }
 | ||
|   xvt_slist_destroy(pivas);
 | ||
| 
 | ||
|   //ordina il recordset per cofi/piva
 | ||
|   recset->sort();
 | ||
|   return recset;
 | ||
| }
 | ||
| 
 | ||
| void TDistribuzione_f24_mask::print_stats(const bool stampa) const
 | ||
| {
 | ||
|   TRecordset* recset = create_recordset();
 | ||
|   TReport rep;
 | ||
|   rep.load("pg0067100");
 | ||
|   rep.set_recordset(recset);
 | ||
|   if (stampa)
 | ||
|     rep.print();
 | ||
|   else
 | ||
|     rep.preview();
 | ||
| }
 | ||
| 
 | ||
| void TDistribuzione_f24_mask::export_stats() const
 | ||
| {
 | ||
|   TRecordset* recset = create_recordset();
 | ||
|   TFilename temp;
 | ||
|   temp.temp("", "xls");
 | ||
|   if (recset->save_as(temp, fmt_html))
 | ||
|     goto_url(temp);
 | ||
|   delete recset;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| //////////////////////////////////////////////
 | ||
| //  APPLICAZIONE
 | ||
| /////////////////////////////////////////////
 | ||
| //Ridistributore di F24 per il computer
 | ||
| class TDistribuzione_f24 : public TSkeleton_application
 | ||
| {
 | ||
|   TDistribuzione_f24_mask*  _mask;
 | ||
| 
 | ||
|   virtual bool check_autorization() const {return false;}
 | ||
|   
 | ||
| protected:
 | ||
|   virtual const char * extra_modules() const {return "rs";}
 | ||
|   virtual bool create();
 | ||
| 
 | ||
|   void elabora();
 | ||
| 
 | ||
| public:
 | ||
|   virtual void main_loop();
 | ||
| };
 | ||
| 
 | ||
| void TDistribuzione_f24::elabora()
 | ||
| {
 | ||
|   TFilename src_files = _mask->get(F_PATH_SRC);
 | ||
|   src_files.add("*.pdf");
 | ||
|   TString_array src_files_list;
 | ||
|   //dalla cartella origine prende tutti i files .pdf e crea una simpatica lista
 | ||
|   const int n_files_pdf = list_files(src_files, src_files_list);
 | ||
| 
 | ||
|   const TString& dst_root_path = _mask->get(F_PATH_DST);
 | ||
|   const bool delete_src_files = _mask->get_bool(F_ERASE_TRANSFERRED);
 | ||
| 
 | ||
|   //scansione dello string_array per il trasferimento (con tanto di progind e log)
 | ||
|   TProgind pi(n_files_pdf, TR("Trasferimento F24 in corso..."), true, true);
 | ||
|   TLog_report log("ERRORI DI TRASFERIMENTO");
 | ||
| 
 | ||
|   TToken_string curr_tok_file(_MAX_PATH, '_');
 | ||
| 
 | ||
|   for (int i = 0; i < n_files_pdf; i++)
 | ||
|   {
 | ||
|     if (!pi.addstatus(1))
 | ||
|       break;
 | ||
| 
 | ||
|     //file in formato filename e token_string (per prendere i pezzi)
 | ||
|     const TFilename curr_fname = src_files_list.row(i);
 | ||
|     curr_tok_file = curr_fname.name_only();
 | ||
| 
 | ||
|     //anno e relativo controllo
 | ||
|     const int anno = curr_tok_file.get_int(0);
 | ||
|     if (anno < 2000)
 | ||
|     {
 | ||
|       TString msg;
 | ||
|       msg.format("File %s ha ANNO errato", (const char*)curr_tok_file);
 | ||
|       log.log(1, msg);
 | ||
|       continue;
 | ||
|     }
 | ||
| 
 | ||
|     //piva e relativo controllo
 | ||
|     const TString16 piva = curr_tok_file.get(1);
 | ||
|     if (piva.len() < 11)
 | ||
|     {
 | ||
|       TString msg;
 | ||
|       msg.format("File %s ha P.IVA o C.F. errato", (const char*)curr_tok_file);
 | ||
|       log.log(1, msg);
 | ||
|       continue;
 | ||
|     }
 | ||
| 
 | ||
|     //controllo della cartella di destinazione
 | ||
|     TFilename dst_file = dst_root_path;
 | ||
|     dst_file.add(piva);
 | ||
|     TString4 str_anno;
 | ||
|     str_anno << anno;
 | ||
|     dst_file.add(str_anno);
 | ||
|     const bool crea_dir = make_dir(dst_file);
 | ||
|     //non riesce a crearla! deve dare errore di grave livello!
 | ||
|     if (!crea_dir)
 | ||
|     {
 | ||
|       TString msg;
 | ||
|       msg.format("Impossibile creare la cartella %s !", dst_file);
 | ||
|       log.log(2, msg);
 | ||
|       continue;
 | ||
|     }
 | ||
| 
 | ||
|     //se invece crea/trova la cartella -> copia il file
 | ||
|     dst_file.add(curr_fname.name());
 | ||
| 
 | ||
|     const bool copia_riuscita = fcopy(curr_fname, dst_file);
 | ||
|     if (!copia_riuscita)
 | ||
|     {
 | ||
|       TString msg;
 | ||
|       msg.format("Impossibile copiare il file %s !", curr_fname.name());
 | ||
|       log.log(2, msg);
 | ||
|       continue;
 | ||
|     }
 | ||
| 
 | ||
|     //controllo dell'avvenuta copia e della correttezza del file destinazione
 | ||
|     //controllo sulle dimensioni
 | ||
|     const long src_size = fsize(curr_fname);
 | ||
|     const long dst_size = fsize(dst_file);
 | ||
| 
 | ||
|     if (src_size != dst_size)
 | ||
|     {
 | ||
|       TString msg;
 | ||
|       msg.format("Copia del file %s non completata !", curr_fname.name());
 | ||
|       log.log(2, msg);
 | ||
|       continue;
 | ||
|     }
 | ||
| 
 | ||
|     //eliminazione del file sorgente
 | ||
|     if (delete_src_files)
 | ||
|     {
 | ||
|       const bool src_file_removed = remove_file(curr_fname);
 | ||
|       if (!src_file_removed)
 | ||
|       {
 | ||
|         TString msg;
 | ||
|         msg.format("Impossibile eliminare il file origine %s ", curr_fname.name());
 | ||
|         log.log(1, msg);
 | ||
|         continue;
 | ||
|       }
 | ||
|     }
 | ||
|   } //for(int i...
 | ||
| 
 | ||
|   message_box(TR("Elaborazione completata"));
 | ||
| 
 | ||
|   const int items = log.recordset()->items();
 | ||
|   if (items > 0)
 | ||
|     log.preview();
 | ||
| }
 | ||
| 
 | ||
| bool TDistribuzione_f24::create()
 | ||
| {
 | ||
|     //se non ha il modulo RS non pu<70> proseguire
 | ||
|   if (!has_module(RSAUT))
 | ||
|     return error_box(TR("Modulo non autorizzato"));
 | ||
| 
 | ||
|   return TSkeleton_application::create();
 | ||
| }
 | ||
| 
 | ||
| void TDistribuzione_f24::main_loop()
 | ||
| {
 | ||
|   _mask = new TDistribuzione_f24_mask;
 | ||
|   if (_mask->run() != K_QUIT)
 | ||
|     elabora();
 | ||
| 
 | ||
|   delete _mask;
 | ||
|   _mask = NULL;
 | ||
| }
 | ||
| 
 | ||
| int pg0067100 (int argc, char **argv)
 | ||
| {
 | ||
|   TDistribuzione_f24 a;
 | ||
|   a.run(argc,argv, TR("Archiviazione F24"));
 | ||
|   return true;
 | ||
| }
 |