2001-09-19 14:52:11 +00:00
|
|
|
|
#include <automask.h>
|
2002-12-20 16:15:03 +00:00
|
|
|
|
#include <modaut.h>
|
|
|
|
|
#include <recarray.h>
|
|
|
|
|
#include <relapp.h>
|
|
|
|
|
#include <sheet.h>
|
2001-09-19 14:52:11 +00:00
|
|
|
|
|
2002-12-20 16:15:03 +00:00
|
|
|
|
#include "cespi.h"
|
|
|
|
|
|
|
|
|
|
#include "celib.h"
|
|
|
|
|
#include "collces.h"
|
|
|
|
|
|
|
|
|
|
#include "ce2300a.h"
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////
|
|
|
|
|
// Ricerca per categoria su collces
|
|
|
|
|
/////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
class TCollces_sheet : public TBrowse_sheet
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual void get_row(long n, TToken_string& row);
|
|
|
|
|
|
|
|
|
|
public:
|
2007-09-17 15:33:04 +00:00
|
|
|
|
TCollces_sheet(TCursor* cursor, TEdit_field& ef);
|
2002-12-20 16:15:03 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void TCollces_sheet::get_row(long n, TToken_string& row)
|
|
|
|
|
{
|
|
|
|
|
TBrowse_sheet::get_row(n, row);
|
|
|
|
|
const int gru = row.get_int(0);
|
|
|
|
|
TString8 spe = row.get();
|
|
|
|
|
switch(spe.len())
|
|
|
|
|
{
|
|
|
|
|
case 1: spe.right_just(2); break;
|
|
|
|
|
case 3: spe.insert(" "); break;
|
|
|
|
|
default: break;
|
|
|
|
|
}
|
|
|
|
|
const int cat = row.get_int();
|
|
|
|
|
const TString& desc = ditta_cespiti().categoria(gru, spe, cat).get("S0");
|
|
|
|
|
row.add(desc, 3);
|
|
|
|
|
}
|
|
|
|
|
|
2007-09-17 15:33:04 +00:00
|
|
|
|
TCollces_sheet::TCollces_sheet(TCursor* cursor, TEdit_field& ef)
|
2003-05-13 14:55:32 +00:00
|
|
|
|
: TBrowse_sheet(cursor, "CODGRUPPO|CODSPECIE|CODCAT|CODCAT", TR("Categorie"),
|
2007-09-17 15:33:04 +00:00
|
|
|
|
HR("Gruppo|Specie|Categoria|Descrizione@70"), 0, ef, TToken_string())
|
2002-12-20 16:15:03 +00:00
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////
|
|
|
|
|
// Maschera query
|
|
|
|
|
/////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
class TCesp2cg_qmask : public TAutomask
|
2001-09-19 14:52:11 +00:00
|
|
|
|
{
|
2002-12-20 16:15:03 +00:00
|
|
|
|
TCursor* _curcoll;
|
|
|
|
|
|
2001-09-19 14:52:11 +00:00
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
|
|
|
|
|
|
public:
|
2002-12-20 16:15:03 +00:00
|
|
|
|
TCesp2cg_qmask(TRelation* rel);
|
|
|
|
|
virtual ~TCesp2cg_qmask();
|
2001-09-19 14:52:11 +00:00
|
|
|
|
};
|
|
|
|
|
|
2002-12-20 16:15:03 +00:00
|
|
|
|
bool TCesp2cg_qmask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
2001-09-19 14:52:11 +00:00
|
|
|
|
{
|
2002-12-20 16:15:03 +00:00
|
|
|
|
switch (o.dlg())
|
|
|
|
|
{
|
|
|
|
|
case F_CODCAT:
|
|
|
|
|
if (e == fe_button)
|
|
|
|
|
{
|
|
|
|
|
TEdit_field& ef = (TEdit_field&)o;
|
2007-09-17 15:33:04 +00:00
|
|
|
|
TCollces_sheet sht(_curcoll, ef);
|
2002-12-20 16:15:03 +00:00
|
|
|
|
if (!o.empty())
|
|
|
|
|
{
|
|
|
|
|
TRectype& rec = _curcoll->curr();
|
|
|
|
|
rec.zero();
|
|
|
|
|
rec.put(COLLCES_CODGRUPPO, get(F_GRUPPO));
|
|
|
|
|
rec.put(COLLCES_CODSPECIE, get(F_SPECIE));
|
|
|
|
|
rec.put(COLLCES_CODCAT, o.get());
|
|
|
|
|
long sel = _curcoll->read();
|
|
|
|
|
sht.select(sel);
|
|
|
|
|
}
|
|
|
|
|
if (sht.run() == K_ENTER)
|
|
|
|
|
{
|
|
|
|
|
TToken_string row = sht.row();
|
|
|
|
|
o.set(row.get(2));
|
|
|
|
|
set(F_DESCAT, row.get(3));
|
|
|
|
|
send_key(K_ENTER, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case F_CODCAT2:
|
2006-07-11 13:10:51 +00:00
|
|
|
|
case F_DESCAT:
|
2002-12-20 16:15:03 +00:00
|
|
|
|
return ditta_cespiti().on_category_event(o, e, jolly);
|
|
|
|
|
case F_IDCESPITE:
|
|
|
|
|
if (e == fe_close)
|
|
|
|
|
{
|
|
|
|
|
const TRectype& cesp = cache().get(LF_CESPI, o.get());
|
|
|
|
|
if (cesp.empty())
|
2003-05-13 14:55:32 +00:00
|
|
|
|
return error_box(TR("Inserire un cespite valido"));
|
2002-12-20 16:15:03 +00:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2001-09-19 14:52:11 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
2002-12-20 16:15:03 +00:00
|
|
|
|
TCesp2cg_qmask::TCesp2cg_qmask(TRelation* rel) : TAutomask("ce2300a")
|
|
|
|
|
{
|
|
|
|
|
_curcoll = new TCursor(rel, "IDCESPITE=\"\"");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TCesp2cg_qmask::~TCesp2cg_qmask()
|
|
|
|
|
{
|
|
|
|
|
delete _curcoll;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////
|
|
|
|
|
// Maschera principale
|
|
|
|
|
/////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
class TCesp2cg_emask : public TAutomask
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
|
|
|
|
|
|
|
|
|
void test_duplication(short g1, short g2);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TCesp2cg_emask() : TAutomask("ce2300b") { }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Se i due gruppi-conti-sottoconti sono uguali azzera il primo
|
|
|
|
|
void TCesp2cg_emask::test_duplication(short g1, short g2)
|
|
|
|
|
{
|
|
|
|
|
TString16 s1, s2;
|
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
|
|
|
{
|
|
|
|
|
s1 << get(g1+i) << ' ';
|
|
|
|
|
s2 << get(g2+i) << ' ';
|
|
|
|
|
}
|
|
|
|
|
if (!s1.blank() && s1 == s2)
|
|
|
|
|
{
|
2003-05-13 14:55:32 +00:00
|
|
|
|
warning_box(TR("Non si deve specificare lo stesso conto della riga precedente"));
|
2002-12-20 16:15:03 +00:00
|
|
|
|
for (int i = 0; i < 4; i++)
|
|
|
|
|
reset(g1+i);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TCesp2cg_emask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
2001-09-19 14:52:11 +00:00
|
|
|
|
{
|
2002-12-20 16:15:03 +00:00
|
|
|
|
switch (o.dlg())
|
|
|
|
|
{
|
|
|
|
|
case F_CODCAT:
|
|
|
|
|
case F_CODCAT2:
|
|
|
|
|
if (e == fe_init)
|
|
|
|
|
return ditta_cespiti().on_category_event(o, e, jolly);
|
|
|
|
|
break;
|
|
|
|
|
case F_TIPO:
|
|
|
|
|
if (e == fe_modify || e == fe_close)
|
|
|
|
|
{
|
|
|
|
|
const int tipo = field(F_IDCESPITE).empty() ? 1 : 2;
|
|
|
|
|
set(F_COMPL, tipo == get_int(F_TIPO) ? "X" : "");
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case F_QANT_S:
|
|
|
|
|
if (e == fe_modify || e == fe_close)
|
|
|
|
|
test_duplication(F_QANT_G, F_QNOR_G);
|
|
|
|
|
break;
|
|
|
|
|
case F_QACC_S:
|
|
|
|
|
if (e == fe_modify || e == fe_close)
|
|
|
|
|
{
|
|
|
|
|
test_duplication(F_QACC_G, F_QANT_G);
|
|
|
|
|
test_duplication(F_QACC_G, F_QNOR_G);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case F_FANT_S:
|
|
|
|
|
if (e == fe_modify || e == fe_close)
|
|
|
|
|
test_duplication(F_FANT_G, F_FNOR_G);
|
|
|
|
|
break;
|
|
|
|
|
case F_FACC_S:
|
|
|
|
|
if (e == fe_modify || e == fe_close)
|
|
|
|
|
{
|
|
|
|
|
test_duplication(F_FACC_G, F_FANT_G);
|
|
|
|
|
test_duplication(F_FACC_G, F_FNOR_G);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////
|
|
|
|
|
// Programma principale
|
|
|
|
|
/////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
class TCesp2cg : public TRelation_application
|
|
|
|
|
{
|
|
|
|
|
TRelation* _rel;
|
|
|
|
|
TMask* _qmsk;
|
|
|
|
|
TMask* _emsk;
|
|
|
|
|
|
2001-09-19 14:52:11 +00:00
|
|
|
|
protected:
|
2002-12-20 16:15:03 +00:00
|
|
|
|
virtual bool changing_mask(int mode) { return TRUE; }
|
|
|
|
|
virtual TMask* get_mask(int mode);
|
|
|
|
|
virtual TRelation* get_relation() const { return _rel; }
|
|
|
|
|
|
|
|
|
|
virtual void init_query_mode(TMask& m);
|
|
|
|
|
virtual void init_query_insert_mode(TMask& m);
|
|
|
|
|
virtual void init_insert_mode(TMask& m);
|
|
|
|
|
virtual void init_modify_mode(TMask& m);
|
|
|
|
|
|
|
|
|
|
virtual bool user_create();
|
|
|
|
|
virtual bool user_destroy();
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
const TRectype& curr_cat(const TMask& m) const;
|
|
|
|
|
void init_mask(TMask& m) const;
|
|
|
|
|
void copy_cat(TMask& m, const TRectype& cat) const;
|
|
|
|
|
|
|
|
|
|
TCesp2cg() : _rel(NULL), _qmsk(NULL), _emsk(NULL) { }
|
2001-09-19 14:52:11 +00:00
|
|
|
|
};
|
|
|
|
|
|
2002-12-20 16:15:03 +00:00
|
|
|
|
bool TCesp2cg::user_create()
|
|
|
|
|
{
|
|
|
|
|
if (!has_module(CGAUT))
|
|
|
|
|
{
|
2003-05-13 14:55:32 +00:00
|
|
|
|
error_box(TR("<EFBFBD> necessario attivare il modulo contabilit<69>"));
|
2002-12-20 16:15:03 +00:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
_rel = new TRelation(LF_COLLCES);
|
|
|
|
|
_qmsk = new TCesp2cg_qmask(_rel);
|
|
|
|
|
_emsk = new TCesp2cg_emask;
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TMask* TCesp2cg::get_mask(int mode)
|
|
|
|
|
{
|
|
|
|
|
return (mode == MODE_QUERY || mode == MODE_QUERYINS) ? _qmsk : _emsk;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TCesp2cg::init_query_mode(TMask& m)
|
|
|
|
|
{
|
|
|
|
|
ditta_cespiti().init_mask(m);
|
|
|
|
|
m.show(-1);
|
|
|
|
|
m.hide(-2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TCesp2cg::init_query_insert_mode(TMask& m)
|
|
|
|
|
{
|
|
|
|
|
m.hide(-1);
|
|
|
|
|
m.show(-2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Compia nella maschera corrente i dati prelevati dalla categoria
|
|
|
|
|
// sovrascrivendo quelli del cespite.
|
|
|
|
|
void TCesp2cg::copy_cat(TMask& m, const TRectype& cat) const
|
|
|
|
|
{
|
|
|
|
|
const TRectype saverec = _rel->curr(); // Salvo record principale e ...
|
|
|
|
|
_rel->curr() = cat; // ... gli scrivo sopra i dati della categoria
|
|
|
|
|
// Carico tutti i campi a partire dalla quota normale in poi
|
|
|
|
|
for (int i = m.id2pos(F_QNOR_G); i < m.fields(); i++)
|
|
|
|
|
{
|
|
|
|
|
TMask_field& f = m.fld(i);
|
|
|
|
|
if (f.is_edit())
|
|
|
|
|
((TLoadable_field&)f).autoload(*_rel);
|
|
|
|
|
}
|
|
|
|
|
_rel->curr() = saverec; // Ripristino record principale
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const TRectype& TCesp2cg::curr_cat(const TMask& m) const
|
|
|
|
|
{
|
|
|
|
|
const int gru = m.get_int(F_GRUPPO);
|
|
|
|
|
const char* spe = m.get(F_SPECIE);
|
|
|
|
|
int cat = m.get_int(F_CODCAT);
|
|
|
|
|
if (cat == 0)
|
|
|
|
|
cat = cache().get(LF_CESPI, m.get(F_IDCESPITE)).get_int(CESPI_CODCAT);
|
|
|
|
|
return ditta_cespiti().categoria(gru, spe, cat);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TCesp2cg::init_mask(TMask& m) const
|
|
|
|
|
{
|
|
|
|
|
const int ese = m.get_int(F_ESERCIZIO);
|
|
|
|
|
const int gru = m.get_int(F_GRUPPO);
|
|
|
|
|
const char* spe = m.get(F_SPECIE);
|
|
|
|
|
ditta_cespiti().set_attivita(ese, gru, spe);
|
|
|
|
|
|
|
|
|
|
const TRectype& cac = curr_cat(m);
|
|
|
|
|
const bool materiali = cac.get_int("I0") == 0;
|
|
|
|
|
m.field(F_FNOR_S).check_type(materiali ? CHECK_REQUIRED : CHECK_NORMAL);
|
|
|
|
|
m.field(F_FNOR_D).check_type(materiali ? CHECK_REQUIRED : CHECK_NORMAL);
|
|
|
|
|
m.enable(-3, materiali);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void TCesp2cg::init_insert_mode(TMask& m)
|
|
|
|
|
{
|
|
|
|
|
init_mask(m);
|
|
|
|
|
|
|
|
|
|
// Valori preimpostati "quasi" sempre buoni :-)
|
2006-07-11 13:10:51 +00:00
|
|
|
|
m.set(F_TIPO, 1);
|
2002-12-20 16:15:03 +00:00
|
|
|
|
|
|
|
|
|
const TString& idcespite = m.get(F_IDCESPITE);
|
|
|
|
|
if (!idcespite.blank())
|
|
|
|
|
{
|
|
|
|
|
const int gru = m.get_int(F_GRUPPO);
|
|
|
|
|
const char* spe = m.get(F_SPECIE);
|
|
|
|
|
const int cat = cache().get(LF_CESPI, idcespite).get_int(CESPI_CODCAT);
|
|
|
|
|
TToken_string key; key.add(gru); key.add(spe); key.add(cat);
|
|
|
|
|
const TRectype& coll = cache().get(LF_COLLCES, key);
|
|
|
|
|
if (coll.get_bool(COLLCES_COMPL))
|
|
|
|
|
{
|
|
|
|
|
m.set(F_TIPO, 1);
|
|
|
|
|
copy_cat(m, coll);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
m.set(F_TIPO, 2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TCesp2cg::init_modify_mode(TMask& m)
|
2001-09-19 14:52:11 +00:00
|
|
|
|
{
|
2002-12-20 16:15:03 +00:00
|
|
|
|
init_mask(m);
|
|
|
|
|
|
|
|
|
|
const TString& idcespite = m.get(F_IDCESPITE);
|
|
|
|
|
if (!idcespite.blank())
|
|
|
|
|
{
|
|
|
|
|
if (!m.get_bool(F_COMPL))
|
|
|
|
|
{
|
|
|
|
|
const int gru = m.get_int(F_GRUPPO);
|
|
|
|
|
const char* spe = m.get(F_SPECIE);
|
|
|
|
|
const int cat = cache().get(LF_CESPI, idcespite).get_int(CESPI_CODCAT);
|
|
|
|
|
TToken_string key; key.add(gru); key.add(spe); key.add(cat);
|
|
|
|
|
const TRectype& coll = cache().get(LF_COLLCES, key);
|
|
|
|
|
if (coll.get_bool(COLLCES_COMPL))
|
|
|
|
|
{
|
|
|
|
|
m.set(F_TIPO, 1);
|
|
|
|
|
copy_cat(m, coll);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
m.set(F_TIPO, 2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TCesp2cg::user_destroy()
|
|
|
|
|
{
|
|
|
|
|
delete _emsk;
|
|
|
|
|
delete _qmsk;
|
|
|
|
|
delete _rel;
|
|
|
|
|
return TRUE;
|
2001-09-19 14:52:11 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ce2300(int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
TCesp2cg a;
|
2003-05-13 14:55:32 +00:00
|
|
|
|
a.run(argc, argv, TR("Collegamenti contabili"));
|
2001-09-19 14:52:11 +00:00
|
|
|
|
return 0;
|
|
|
|
|
}
|