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;
 | 
						|
}
 |