diff --git a/ba/ba7.cpp b/ba/ba7.cpp index e9796807e..61de4b035 100755 --- a/ba/ba7.cpp +++ b/ba/ba7.cpp @@ -7,8 +7,9 @@ int main(int argc, char** argv) switch (r) { - case 1: ba7200(argc, argv); break; //copia area dati in lire - case 2: ba7300(argc, argv); break; //invio intero file via postino + case 1: ba7200(argc, argv); break; //copia area dati in lire + case 2: ba7300(argc, argv); break; //invio intero file via postino + case 3: ba7400(argc, argv); break; //convertitore ini per Galileo default: ba7100(argc, argv); break; //postino } diff --git a/ba/ba7.h b/ba/ba7.h index e0ae9db4c..564eeaa43 100755 --- a/ba/ba7.h +++ b/ba/ba7.h @@ -4,5 +4,6 @@ int ba7100(int argc, char* argv[]); int ba7200(int argc, char* argv[]); int ba7300(int argc, char* argv[]); +int ba7400(int argc, char* argv[]); #endif diff --git a/ba/ba7100.cpp b/ba/ba7100.cpp index e4ec613db..c12207e50 100755 --- a/ba/ba7100.cpp +++ b/ba/ba7100.cpp @@ -24,7 +24,8 @@ // TConfig utilities /////////////////////////////////////////////////////////// -const TString& set_ini_var(int cfg, const char* para, const char* var, const char* val) +/* Obsolete +static const TString& set_ini_var(int cfg, const char* para, const char* var, const char* val) { TConfig ini(cfg, para); const TString& prev = ini.get(var); @@ -38,7 +39,8 @@ const TString& set_ini_var(int cfg, const char* para, const char* var, const cha } inline const TString& get_ini_var(int cfg, const char* para, const char* var) -{ return set_ini_var(cfg, para, var, NULL); } +{ return ini_get_string(cfg, para, var); } +*/ /////////////////////////////////////////////////////////// // TMail_box @@ -70,7 +72,7 @@ bool TMail_box::default_params(TString& server, TString& user,TString& password) bool ok = true; if (server.blank()) { - server = get_ini_var(CONFIG_INSTALL, "Server", "POP3"); + server = ini_get_string(CONFIG_INSTALL, "Server", "POP3"); if (server.empty()) ok = false; } @@ -1094,10 +1096,6 @@ bool TMailer_mask::save_sheet_line(int& err, int nrow) } } - // Restore mail recipient -// if (old_mailto.full()) -// set_ini_var(CONFIG_INSTALL, "Main", "MailTo", old_mailto); - return ok; } @@ -1229,8 +1227,7 @@ void TMailer_mask::log(const char* text) if (text && *text) { - time_t tempo; time(&tempo); - const struct tm* d = localtime(&tempo); + const struct tm* d = xvt_time_now(); TString256 msg; msg.format("- %02d-%02d-%04d %02d:%02d:%02d %s", d->tm_mday, d->tm_mon+1, 1900+d->tm_year, diff --git a/ba/ba7400.cpp b/ba/ba7400.cpp new file mode 100644 index 000000000..5522b7d45 --- /dev/null +++ b/ba/ba7400.cpp @@ -0,0 +1,189 @@ +#include +#include +#include +#include + +#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.tempdir(); + tmp_out.add(ini_out.name()); + + TConfig input(ini_in, "Transaction"); + const TString user = input.get("User"); + const TString host = input.get("HostName"); + + ofstream output(tmp_out); + if (!output) + return false; + 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; + output << "CODPAG = " << endl; + 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()) + { + TFilename ini_out = ini_get_string(CONFIG_DITTA, "ba7", "ForwardTo"); + + int err = 0; + 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)) + 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; +}