1b14ec9415
git-svn-id: svn://10.65.10.50/branches/R_10_00@23236 c028cbd2-c16b-5b4b-a496-9718f37d4682
400 lines
8.7 KiB
C++
Executable File
400 lines
8.7 KiB
C++
Executable File
#include <automask.h>
|
|
#include <defmask.h>
|
|
#include <prefix.h>
|
|
#include <progind.h>
|
|
#include <relation.h>
|
|
#include <utility.h>
|
|
|
|
#include <nditte.h>
|
|
#include <partite.h>
|
|
#include <scadenze.h>
|
|
#include <pagsca.h>
|
|
#include <saldi.h>
|
|
#include <tabutil.h>
|
|
|
|
#include "baeur.h"
|
|
#include "../cg/cglib01.h"
|
|
|
|
#include "baeur01.h"
|
|
#include "baeur02.h"
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// Main app
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TEuro00_app : public TEuro_app
|
|
{
|
|
protected:
|
|
void set_prassis(const TString& dir, const TMask& m) const;
|
|
void reset_770(const TString& dst) const;
|
|
|
|
void convert_tabcom(const TString& lit, const TString& eur);
|
|
void convert_ini();
|
|
void convert_ditte(const TString& eur);
|
|
void convert_anag();
|
|
|
|
public:
|
|
KEY step1();
|
|
KEY step2();
|
|
virtual void main_loop();
|
|
};
|
|
|
|
inline TEuro00_app& app() { return (TEuro00_app&)main_app(); }
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// Step 1
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TEuro01_mask : public TAutomask
|
|
{
|
|
public:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
TEuro01_mask() : TAutomask("baeur01") { }
|
|
};
|
|
|
|
bool TEuro01_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
switch (o.dlg())
|
|
{
|
|
case F01_DATIE:
|
|
if (e == fe_close || e == fe_modify)
|
|
{
|
|
const TFilename n = o.get();
|
|
const bool esiste = n.exist();
|
|
enable(DLG_QUIT, esiste);
|
|
if (strlen(n.name()) > 8)
|
|
return error_box("L'area dati in Euro ha un nome troppo lungo: %s", (const char*)n.name());
|
|
if (esiste)
|
|
return error_box("L'area dati in Euro esiste già");
|
|
} else
|
|
if (e == fe_init)
|
|
{
|
|
TFilename lit, eur;
|
|
app().get_aree_dati(lit, eur);
|
|
set(F01_DATI, lit);
|
|
if (eur.empty())
|
|
eur << lit << "e";
|
|
set(F01_DATIE, eur);
|
|
enable(DLG_QUIT, eur.exist());
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void TEuro00_app::set_prassis(const TString& dir, const TMask& m) const
|
|
{
|
|
TFilename str = dir;
|
|
str.add("config/prassis.ini");
|
|
TConfig prassis(str, "Euro");
|
|
prassis.set("DatiLire", m.get(F01_DATI));
|
|
prassis.set("DatiEuro", m.get(F01_DATIE));
|
|
}
|
|
|
|
void TEuro00_app::reset_770(const TString& dst) const
|
|
{
|
|
TFilename filemask = dst; filemask.add("*.dbf");
|
|
TString_array files;
|
|
list_files(filemask, files);
|
|
FOR_EACH_ARRAY_ROW(files, i, name)
|
|
{
|
|
TExternisamfile eif(*name);
|
|
eif.zap();
|
|
}
|
|
}
|
|
|
|
KEY TEuro00_app::step1()
|
|
{
|
|
goto_lire();
|
|
|
|
TEuro01_mask* m = new TEuro01_mask;
|
|
KEY k = m->run();
|
|
if (k == K_ENTER)
|
|
{
|
|
const TFilename dir1 = m->get(F01_DATI);
|
|
const TFilename dir2 = m->get(F01_DATIE);
|
|
|
|
if (!fexist(dir2))
|
|
make_dir(dir2);
|
|
|
|
TFilename src = dir1; src.add("config");
|
|
TFilename dst = dir2; dst.add("config");
|
|
copy_dir(src, dst);
|
|
|
|
set_prassis(dir1, *m);
|
|
set_prassis(dir2, *m);
|
|
|
|
delete m; m = NULL;
|
|
TCurrency::force_cache_update(); // Chiude cache valute
|
|
prefix().set(NULL); // Chiude tutti i files
|
|
|
|
src = dir1; src.add("com"); // Copia dati comuni
|
|
dst = dir2; dst.add("com");
|
|
copy_dir(src, dst);
|
|
|
|
src = dir1; src.add("std"); // Copia dati standard
|
|
dst = dir2; dst.add("std");
|
|
copy_dir(src, dst);
|
|
|
|
src = dir1; src.add("m770"); // Copia dati 770
|
|
dst = dir2; dst.add("m770");
|
|
copy_dir(src, dst);
|
|
goto_lire(); // Necessario per riaccedere ai tracciati
|
|
reset_770(dst);
|
|
}
|
|
if (m) delete m;
|
|
return k;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// Step 2
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TEuro02_mask : public TAutomask
|
|
{
|
|
protected:
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
public:
|
|
TEuro02_mask() : TAutomask("baeur02") { }
|
|
};
|
|
|
|
bool TEuro02_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|
{
|
|
switch (o.dlg())
|
|
{
|
|
case F02_LIT:
|
|
case F02_EUR:
|
|
if (e == fe_init)
|
|
{
|
|
TEdit_field& ef = (TEdit_field&)o;
|
|
TCursor* cur = ef.browse()->cursor();
|
|
if (cur != NULL && cur->items() > 0)
|
|
{
|
|
*cur = 0;
|
|
ef.set(cur->curr().get("CODTAB"));
|
|
ef.check(STARTING_CHECK);
|
|
}
|
|
}
|
|
break;
|
|
default: break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
struct TTabcom_data
|
|
{
|
|
TString4 _lit, _eur;
|
|
int _last_stato;
|
|
};
|
|
|
|
HIDDEN bool tabcom_handler(TRectype& curr, void* jolly)
|
|
{
|
|
bool update = TRUE;
|
|
const TString4 cod = curr.get("COD");
|
|
if (cod == "CLM")
|
|
{
|
|
convert_import(curr, "R0|R1|R2|R3");
|
|
}
|
|
if (cod == "DEL")
|
|
{
|
|
update = FALSE;
|
|
}
|
|
if (cod == "LIA")
|
|
{
|
|
const int anno = atoi(curr.get("CODTAB").mid(5, 4));
|
|
if (anno >= 2001)
|
|
keep_import(curr, "COD|CODTAB|B1|B2|S7|S8|S9"); // Azzera quasi tutto
|
|
else
|
|
update = FALSE;
|
|
}
|
|
if (cod == "PLA")
|
|
{
|
|
update = FALSE;
|
|
}
|
|
if (cod == "VAL")
|
|
{
|
|
TTabcom_data* data = (TTabcom_data*)jolly;
|
|
const TString& lit = data->_lit;
|
|
const TString& eur = data->_eur;
|
|
|
|
const TString& val = curr.get("CODTAB");
|
|
if (val == lit)
|
|
{
|
|
const real r = 1.0 / EURO;
|
|
curr.put("B0", ""); curr.put("B1", "X");
|
|
curr.put("S4", EURO); curr.put("R10", r);
|
|
} else
|
|
if (val == eur)
|
|
{
|
|
curr.put("B0", "X"); curr.put("B1", "");
|
|
curr.put("S4", "1"); curr.put("R10", "1");
|
|
}
|
|
else
|
|
{
|
|
curr.put("B0", "");
|
|
if (!curr.get_bool("B1"))
|
|
{
|
|
real c = curr.get("S4");
|
|
if (c != ZERO)
|
|
{
|
|
c = EURO / c;
|
|
curr.put("S4", c.string(0,6));
|
|
curr.put("B1", "X");
|
|
}
|
|
curr.zero("R10");
|
|
}
|
|
}
|
|
}
|
|
if (cod == "VER")
|
|
{
|
|
zero_import(curr, "R5|R6|R7|R8|R9|R10");
|
|
}
|
|
return update;
|
|
}
|
|
|
|
void TEuro00_app::convert_tabcom(const TString& lit, const TString& eur)
|
|
{
|
|
TTabcom_data data;
|
|
|
|
data._lit = lit;
|
|
data._eur = eur;
|
|
|
|
TTable stati("%STD");
|
|
TTable tipi("%TIP");
|
|
stati.last();
|
|
const int last_stato = stati.get_int("CODTAB");
|
|
|
|
for (tipi.first(); tipi.good(); tipi.next())
|
|
{
|
|
TString80 s2;
|
|
|
|
s2 = tipi.get("S2");
|
|
if (s2.len() < 3 || s2[2] == ' ')
|
|
{
|
|
const char s[2] = { last_stato + '0', '\0'};
|
|
|
|
s2.overwrite(s, 2, 1);
|
|
tipi.put("S2", s2);
|
|
tipi.rewrite();
|
|
}
|
|
}
|
|
convert_file(LF_TABCOM, NULL, NULL, NULL, tabcom_handler, &data);
|
|
}
|
|
|
|
HIDDEN void convert_ini_val(TConfig& inilit, TConfig& inieur, const char* name, int index)
|
|
{
|
|
real val = inilit.get(name, NULL, index);
|
|
if (!val.is_zero())
|
|
{
|
|
val /= EURO;
|
|
val.round(2);
|
|
inieur.set(name, val.string(0, 2), NULL, TRUE, index);
|
|
}
|
|
}
|
|
|
|
void TEuro00_app::convert_ini()
|
|
{
|
|
TFilename lit, eur;
|
|
app().get_aree_dati(lit, eur);
|
|
|
|
lit.add("config\\prassis.ini");
|
|
TConfig inilit(lit, "ve");
|
|
|
|
eur.add("config\\prassis.ini");
|
|
TConfig inieur(eur, "ve");
|
|
|
|
for (int i = 1; i <= 7; i++)
|
|
{
|
|
convert_ini_val(inilit, inieur, "SPBOSCA", i);
|
|
convert_ini_val(inilit, inieur, "SPBOIMP", i);
|
|
}
|
|
convert_ini_val(inilit, inieur, "BOLLIES", -1);
|
|
convert_ini_val(inilit, inieur, "IMPMINBOLLI", -1);
|
|
for (i = 1; i <= 9; i++)
|
|
convert_ini_val(inilit, inieur, "IMPSPINC", i);
|
|
}
|
|
|
|
HIDDEN bool ditte_handler(TRectype& curr, void* jolly)
|
|
{
|
|
TTabcom_data* data = (TTabcom_data*)jolly;
|
|
curr.put(NDT_VALUTA, data->_eur);
|
|
return TRUE;
|
|
}
|
|
|
|
void TEuro00_app::convert_ditte(const TString& eur)
|
|
{
|
|
TTabcom_data data;
|
|
data._eur = eur;
|
|
convert_file(LF_NDITTE, NULL, NULL, NULL, ditte_handler, &data);
|
|
|
|
zap_file(LF_TAB1100A, TRUE);
|
|
zap_file(LF_TAB1100B, TRUE);
|
|
}
|
|
|
|
void TEuro00_app::convert_anag()
|
|
{
|
|
convert_file(LF_ANAGGIU, NULL, "VALNOM|CAPSOC|CAPVER|FATT", NULL, NULL);
|
|
convert_file(LF_SOCI, NULL, "EMOLUMENTO", NULL, NULL);
|
|
if (is_com_file(LF_CLIFO))
|
|
{
|
|
convert_file(LF_CLIFO, NULL, "FIDO", NULL, NULL);
|
|
convert_file(LF_CFVEN, "IMPMINEFF", "", NULL, NULL);
|
|
}
|
|
}
|
|
|
|
KEY TEuro00_app::step2()
|
|
{
|
|
goto_lire();
|
|
|
|
TString16 eur, lit;
|
|
KEY k = K_QUIT;
|
|
{
|
|
TEuro02_mask m;
|
|
k = m.run();
|
|
lit = m.get(F02_LIT);
|
|
eur = m.get(F02_EUR);
|
|
}
|
|
if (k == K_ENTER)
|
|
{
|
|
convert_tabcom(lit, eur);
|
|
convert_ini();
|
|
convert_ditte(eur);
|
|
convert_anag();
|
|
}
|
|
return k;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// Main
|
|
///////////////////////////////////////////////////////////
|
|
|
|
void TEuro00_app::main_loop()
|
|
{
|
|
int step = 1;
|
|
while (step >= 1 && step <= 2)
|
|
{
|
|
KEY k = K_ENTER;
|
|
switch (step)
|
|
{
|
|
case 1: k = step1(); break;
|
|
case 2: k = step2(); break;
|
|
default: break;
|
|
}
|
|
if (k == K_ENTER || k == K_QUIT)
|
|
step++;
|
|
if (k == K_ESC)
|
|
step--;
|
|
}
|
|
}
|
|
|
|
int baeur00(int argc, char* argv[])
|
|
{
|
|
TEuro00_app ma;
|
|
ma.run(argc, argv, "Creazione Studio Euro");
|
|
|
|
return 0;
|
|
} |