campo-sirio/src/ba/baeur00.cpp
mtollari 1b14ec9415 Spostamento cartella sorgenti
git-svn-id: svn://10.65.10.50/branches/R_10_00@23236 c028cbd2-c16b-5b4b-a496-9718f37d4682
2016-09-09 13:59:02 +00:00

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