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