campo-sirio/ce/ceeur01.cpp
alex 37178085ef Patch level : main 07.150
Files correlati     : nessuno
Ricompilazione Demo : [ ]
Commento            :
Riportata la versione aga 07.150 sul main trunk


git-svn-id: svn://10.65.10.50/trunk@9871 c028cbd2-c16b-5b4b-a496-9718f37d4682
2001-09-19 14:52:11 +00:00

442 lines
9.9 KiB
C++
Executable File

#include <applicat.h>
#include <automask.h>
#include <browfile.h>
#include <dongle.h>
#include <execp.h>
#include <modaut.h>
#include <prefix.h>
#include <progind.h>
#include <relation.h>
#include <nditte.h>
#include <partite.h>
#include <scadenze.h>
#include <pagsca.h>
#include <saldi.h>
#include "ceeur.h"
#include "ceeur10.h"
#include "ceeur11.h"
#include "movce.h"
#include "../cg/cglib01.h"
#include "../mg/mag.h"
#include "../mg/movmag.h"
#include "../mg/rmovmag.h"
#include "../mg/mglib.h"
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
class TEuro01_app : public TEuro_app
{
TEsercizi_contabili _esc;
protected:
virtual bool create();
virtual void main_loop();
public:
TEsercizi_contabili& esc() { return _esc; }
void copy_cespi();
void convert_saldi(int codes);
void convert_saldi_file(int lf, int codes);
void convert_mov(int codes, bool infra);
void convert_mov_file(int lf, int codes);
KEY convert_firm(long ditta);
};
inline TEuro01_app& app() { return (TEuro01_app&)main_app(); }
///////////////////////////////////////////////////////////
// Step 1
///////////////////////////////////////////////////////////
class TEuro03_mask : public TAutomask
{
void fill_ditte();
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TEuro03_mask() : TAutomask("ceeur10") { }
};
void TEuro03_mask::fill_ditte()
{
TFilename lit, eur;
app().get_aree_dati(lit, eur);
TRelation rel(LF_NDITTE);
TCursor cur(&rel);
const TRectype& curr = rel.curr();
const long items = cur.items();
cur.freeze();
TSheet_field& ditte = sfield(F10_DITTE);
ditte.destroy();
for (cur = 0L; cur.pos() < items; ++cur)
{
const long ditta = curr.get_long(NDT_CODDITTA);
if (prefix().exist(ditta))
{
TToken_string& row = ditte.row(-1);
row.add(ditta);
row.add(curr.get(NDT_RAGSOC));
TFilename firm;
firm.format("%s/%05ldA", (const char*)eur, ditta);
if (firm.exist())
{
row.add("X");
firm.add("prassid.ini");
TConfig ini(firm, "Euro");
TString16 dde = ini.get("DataAdozione");
if (dde.empty()) dde = "01-01-2002";
row.add(dde);
if (ini.get_bool("Cespiti"))
row.add("X");
if (field(F10_DITTA).empty())
{
set(F10_DITTA, ditta);
set(F10_RAGSOC, row.get(1));
}
}
else
{
ditte.disable_row(ditte.items()-1);
}
}
}
ditte.force_update();
}
bool TEuro03_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F10_DITTA:
if (e == fe_modify || e == fe_close)
{
TSheet_field& s = sfield(F10_DITTE);
TEdit_field& f = efield(F10_DITTA);
const long ditta = atol(o.get());
for (int r = s.items()-1; r >= 0; r--)
{
TToken_string& row = s.row(r);
const long d = row.get_long(0);
if (d == ditta)
{
set(F10_RAGSOC, row.get());
break;
}
}
if (r < 0)
return error_box(f.get_warning());
}
break;
case F10_DITTE:
if (e == fe_init)
fill_ditte();
if (e == se_query_add || e == se_query_del)
return FALSE;
if (e == se_enter)
{
TSheet_field& s = sfield(F10_DITTE);
TToken_string& r = s.row((int)jolly);
set(F10_DITTA, r.get(0));
set(F10_RAGSOC, r.get());
}
break;
default:
break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// Step 2 - Conversione ditta
///////////////////////////////////////////////////////////
class TEuro11_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TEuro11_mask();
};
TEuro11_mask::TEuro11_mask() : TAutomask("ceeur11")
{
disable(F11_ADOZIONE);
}
bool TEuro11_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return TRUE;
}
///////////////////////////////////////////////////////////
// Conversione ditta
///////////////////////////////////////////////////////////
KEY TEuro01_app::convert_firm(long ditta)
{
TFilename lit, eur;
get_aree_dati(lit, eur);
prefix().set_studio(lit, ditta);
TString16 firm; firm.format("%05ldA", ditta);
TFilename litf = lit; litf.add(firm);
TFilename eurf = eur; eurf.add(firm);
TFilename europrassid;
europrassid = eurf; europrassid.add("prassid.ini");
TDate adozione;
bool already_present = FALSE;
if (!adozione.ok())
{
TConfig prassid(europrassid, "Euro");
already_present = prassid.get_bool("Cespiti");
adozione = prassid.get("DataAdozione");
}
bool do_copy = TRUE;
bool do_saldi = TRUE;
bool do_movim = TRUE;
TEuro11_mask m;
m.set(F11_DITTA, ditta, TRUE);
m.set(F11_DATI, lit);
m.set(F11_DATIE, eur);
m.set(F11_ADOZIONE, adozione);
m.enable(F11_COPY, already_present);
m.set(F11_COPY, do_copy ? "X" : "");
m.enable(F11_SALDI, already_present);
m.set(F11_SALDI, do_saldi ? "X" : "");
m.enable(F11_MOVIM, already_present);
m.set(F11_MOVIM, do_movim ? "X" : "");
KEY k = m.run();
if (k == K_ENTER)
{
if (already_present && !yesno_box("Si conferma la sovrascrittura dei cespiti della ditta %ld in Euro?", ditta))
return K_ESC;
do_copy = m.get_bool(F11_COPY);
do_saldi = m.get_bool(F11_SALDI);
do_movim = m.get_bool(F11_MOVIM);
const bool infra = adozione.day() != 1 || adozione.month() != 1;
const int codes = infra ? _esc.date2esc(adozione) : _esc.date2prevesc(adozione);
if (do_copy)
copy_cespi();
if (do_saldi)
convert_saldi(codes);
if (do_movim)
convert_mov(codes, infra);
if (!already_present)
{
TConfig prassid(europrassid, "Euro");
prassid.set("Cespiti", "X");
}
}
return k;
}
///////////////////////////////////////////////////////////
// Copia cespiti
///////////////////////////////////////////////////////////
struct TCespi_data
{
int _codes;
TEsercizi_contabili _esc;
TLocalisamfile* _movcelit;
TEuroisamfile* _movce;
public:
TCespi_data(int codes, bool movce = FALSE);
~TCespi_data();
};
TCespi_data::TCespi_data(int codes, bool movce)
: _codes(codes), _movce(NULL)
{
if (movce)
{
_movcelit = new TLocalisamfile(LF_MOVCE);
_movce = new TEuroisamfile(LF_MOVCE, TRUE);
}
}
TCespi_data::~TCespi_data()
{
if (_movce)
{
delete _movce;
delete _movcelit;
}
}
void TEuro01_app::copy_cespi()
{
convert_file(LF_CESPI, NULL, NULL);
}
///////////////////////////////////////////////////////////
// Conversione saldi
///////////////////////////////////////////////////////////
HIDDEN bool codes_filter(TRectype& rec, void* jolly)
{
const TCespi_data* data = (const TCespi_data*)jolly;
const int codrec = rec.get_int("CODES");
return data->_codes == codrec;
}
void TEuro01_app::convert_saldi_file(int lf, int codes)
{
TToken_string fields;
TString desc;
if (lf > LF_TAB)
{
TLocalisamfile file(lf);
const TRectype& rec = file.curr();
for (int i = rec.items()-1; i >= 0; i--)
{
const char* name = rec.fieldname(i);
const int length = rec.length(name);
const int ndec = rec.ndec(name);
if (length >= 9 && ndec >= 2)
fields.add(name);
}
desc << "Conversione " << file.description();
}
TCespi_data data(codes);
convert_file(lf, fields, NULL, codes_filter, (void*)&data);
}
void TEuro01_app::convert_saldi(int codes)
{
convert_saldi_file(LF_SALCE, codes);
convert_saldi_file(LF_AMMCE, codes);
}
///////////////////////////////////////////////////////////
// Conversione movimenti cespiti
///////////////////////////////////////////////////////////
HIDDEN bool mov_filter(TRectype& rec, void* jolly)
{
TCespi_data* data = (TCespi_data*)jolly;
TDate dtmov;
switch (rec.num())
{
case LF_MOVCE:
dtmov = rec.get(MOVCE_DTMOV);
break;
default:
{
CHECK(data->_movce, "Bad TCespi_data");
const TString16 idmov = rec.get(MOVCE_IDMOV);
TRectype& head = data->_movce->curr();
head.zero();
head.put(MOVCE_IDMOV, idmov);
if (data->_movce->read(_isgteq) == NOERR)
{
if (head.get(MOVCE_IDMOV) == idmov)
dtmov = head.get(MOVCE_DTMOV);
}
}
break;
}
const int codrec = data->_esc.date2esc(dtmov);
return data->_codes == codrec;
}
void TEuro01_app::convert_mov_file(int lf, int codes)
{
TToken_string fields;
if (lf > LF_TAB)
{
TLocalisamfile file(lf);
const TRectype& rec = file.curr();
for (int i = rec.items()-1; i >= 0; i--)
{
const char* name = rec.fieldname(i);
const int length = rec.length(name);
const int ndec = rec.ndec(name);
if (length >= 9 && ndec >= 2)
fields.add(name);
}
}
TCespi_data data(codes, lf != LF_MOVCE);
convert_file(lf, fields, NULL, mov_filter, (void*)&data);
}
void TEuro01_app::convert_mov(int codes, bool infra)
{
if (infra)
{
convert_mov_file(LF_MOVCE, codes);
convert_mov_file(LF_MOVAM, codes);
convert_mov_file(LF_AMMMV, codes);
}
else
{
zap_file(LF_MOVCE);
zap_file(LF_MOVAM);
zap_file(LF_AMMMV);
}
}
///////////////////////////////////////////////////////////
// Main
///////////////////////////////////////////////////////////
bool TEuro01_app::create()
{
TFilename lit, eur;
if (!app().get_aree_dati(lit, eur))
return error_box("Non esiste lo studio in Euro di destinazione");
return TEuro_app::create();
}
void TEuro01_app::main_loop()
{
long ditta = 0L;
if (goto_lire())
{
TEuro03_mask m;
if (m.run() == K_ENTER)
ditta = m.get_long(F10_DITTA);
}
if (ditta > 0L)
convert_firm(ditta);
}
int ceeur01(int argc, char* argv[])
{
TEuro01_app ma;
ma.run(argc, argv, "Conversione Cespiti Euro");
return 0;
}