git-svn-id: svn://10.65.10.50/branches/R_10_00@22899 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			196 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <applicat.h>
 | |
| #include <config.h>
 | |
| #include <real.h>
 | |
| #include <utility.h>
 | |
| 
 | |
| #include "ba7.h"
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Main app
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TCopia_ini_app : public TSkeleton_application
 | |
| { 
 | |
| protected:
 | |
|   bool process_number(TString& val, int len) const;
 | |
|   void save_ini_var(ostream& out, TConfig& input, const char* key, int len = -1) const;
 | |
|   bool replace_var(TFilename& filename, const char* key, const char* var) const;
 | |
|   bool copy_ini(const TFilename& ini_in, TFilename& ini_out) const;
 | |
| 
 | |
| public:
 | |
|   virtual void main_loop();
 | |
| };
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Main 
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| bool TCopia_ini_app::process_number(TString& val, int len) const
 | |
| {
 | |
|   const TString80 old(val);
 | |
|   if (len > 0)
 | |
|   {
 | |
|     const long n = atol(val);
 | |
|     val.format("%0*ld", len, n);
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     if (val.find('.') > 0)
 | |
|     {
 | |
|       const real n = val;
 | |
|       val = n.stringa(0, 2);
 | |
|     }
 | |
|     if (val.starts_with("-"))
 | |
|       val.ltrim(1);
 | |
|   }
 | |
|   return val != old;
 | |
| }
 | |
| 
 | |
| bool TCopia_ini_app::replace_var(TFilename& filename, const char* key, const char* var) const
 | |
| {
 | |
|   if (key && *key > ' ' && var && *var > ' ')
 | |
|   {
 | |
|     TString80 k; k << "$(" << key;
 | |
|     const int start = filename.find(k);
 | |
|     if (start >= 0)
 | |
|     {
 | |
|       const int end = filename.find(')', start+1);
 | |
|       if (end > start)
 | |
|       {
 | |
|         TString str;
 | |
|         str << filename.left(start) << var << filename.mid(end+1);
 | |
|         filename = str;
 | |
|         return true;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| void TCopia_ini_app::save_ini_var(ostream& out, TConfig& input, const char* key, int len) const
 | |
| {
 | |
|   TString val = input.get(key);
 | |
|   if (len >= 0)
 | |
|     process_number(val, len);
 | |
|   else
 | |
|     val.strip("\"");
 | |
|   out << key << " = " << val << endl;
 | |
| }
 | |
| 
 | |
| bool TCopia_ini_app::copy_ini(const TFilename& ini_in, TFilename& ini_out) const
 | |
| {
 | |
|   TFilename tmp_out; tmp_out.temp("pm", "ini");
 | |
|   ofstream output(tmp_out);
 | |
|   if (!output)
 | |
|     return false;
 | |
| 
 | |
|   TConfig input(ini_in, "Transaction");
 | |
|   const TString user = input.get("User");
 | |
|   const TString host = input.get("HostName");
 | |
| 
 | |
|   TString str;
 | |
|   
 | |
|   output << "[Transaction]" << endl;
 | |
|   save_ini_var(output, input, "Firm", 3);
 | |
|   output << "Action = INSERT" << endl;
 | |
|   output << endl;
 | |
| 
 | |
|   input.set_paragraph("23");
 | |
|   output << "[23]" << endl;
 | |
|   save_ini_var(output, input, "ANNOES",   4);
 | |
|   save_ini_var(output, input, "DATAREG");
 | |
|   save_ini_var(output, input, "DATACOMP");
 | |
|   save_ini_var(output, input, "DATADOC");
 | |
|   save_ini_var(output, input, "NUMDOC");
 | |
|   save_ini_var(output, input, "NUMREG");
 | |
|   save_ini_var(output, input, "TIPODOC");
 | |
|   save_ini_var(output, input, "DESCR");
 | |
|   save_ini_var(output, input, "TIPOMOV",  1);
 | |
|   save_ini_var(output, input, "ANNOIVA",  4);
 | |
|   save_ini_var(output, input, "TIPO");
 | |
|   save_ini_var(output, input, "CODCF",    7);
 | |
|   save_ini_var(output, input, "TOTDOC",   0);
 | |
|   output << "PROVVIS = 0" << endl;
 | |
|   save_ini_var(output, input, "CODPAG");
 | |
|   save_ini_var(output, input, "CODCAUS");
 | |
| 
 | |
|   for (int r = 1; ; r++)
 | |
|   {
 | |
|     TString8 str; str.format("25,%d", r);
 | |
|     if (!input.set_paragraph(str))
 | |
|       break;
 | |
|     output << endl << '[' << str << ']' << endl;
 | |
|     save_ini_var(output, input, "ANNOES",     4);
 | |
|     save_ini_var(output, input, "NUMRIG");
 | |
|     save_ini_var(output, input, "CODIVA");
 | |
|     save_ini_var(output, input, "IMPONIBILE", 0);
 | |
|     save_ini_var(output, input, "IMPOSTA",    0);
 | |
|     save_ini_var(output, input, "GRUPPO",     2);
 | |
|     save_ini_var(output, input, "CONTO",      2);
 | |
|     str.format("%02d%02d%03d", input.get_int("GRUPPO"), 
 | |
|                input.get_int("CONTO"), input.get_int("SOTTOCONTO"));
 | |
|     output << "SOTTOCONTO = " << str << endl;
 | |
|     output << "TIPODET = " << endl;
 | |
|   }
 | |
| 
 | |
|   output.close();
 | |
| 
 | |
|   replace_var(ini_out, "User", user);
 | |
|   replace_var(ini_out, "Host", host);
 | |
|   bool done = fcopy(tmp_out, ini_out);
 | |
|   tmp_out.fremove();
 | |
| 
 | |
|   return done;
 | |
| }
 | |
| 
 | |
| void TCopia_ini_app::main_loop()
 | |
| {
 | |
|   TFilename ini_in;
 | |
|   if (argc() >= 3)
 | |
|   {
 | |
|     ini_in = argv(2);
 | |
|     if (ini_in.starts_with("/i", true) || ini_in.starts_with("-i", true))
 | |
|       ini_in.ltrim(2);
 | |
|   }
 | |
|   if (ini_in.exist())
 | |
|   {
 | |
|     const TString& vers = ini_get_string(ini_in, "Transaction", "Version");
 | |
|     if (vers.full()) // Elabora solo file generati da campo
 | |
|     {
 | |
|       int err = NOERR;
 | |
| 
 | |
|       TFilename ini_out = ini_get_string(CONFIG_DITTA, "ba7", "ForwardTo");
 | |
|       if (ini_out.full())
 | |
|       {
 | |
|         const struct tm* n = xvt_time_now();
 | |
|         TString80 fname;
 | |
|         fname.format("%02d%02d%02d_%02d%02d%02d_0.ini", 
 | |
|                       n->tm_year%100, n->tm_mon+1, n->tm_mday,
 | |
|                       n->tm_hour, n->tm_min, n->tm_sec);
 | |
|         ini_out.add(fname);
 | |
|         if (!copy_ini(ini_in, ini_out))
 | |
|         {
 | |
|           xvt_dm_popup_error(TString("Impossibile copiare file in ") << ini_out);
 | |
|           err = EACCES;
 | |
|         }
 | |
|       }
 | |
|       else
 | |
|         err = ENOTDIR;
 | |
|       ini_set_string(ini_in, "Transaction", "Result", err ? "ERROR" : "OK");
 | |
|       ini_set_int(ini_in, "Transaction", "Error", err);
 | |
|     }
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     ini_in.insert(TR("Impossibile aprire il file ini da convertire\n"));
 | |
|     xvt_dm_popup_error(ini_in);
 | |
|   }
 | |
| }
 | |
| 
 | |
| int ba7400(int argc, char* argv[])
 | |
| {  
 | |
|   TCopia_ini_app ma;
 | |
|   ma.run(argc, argv, "Copia Ini");
 | |
|   return 0;
 | |
| }
 |