Patch level : 2.2 82

Files correlati     :   ca0.exe
Ricompilazione Demo : [ ]
Commento            :

Aggiunto il collegamento tra piano dei conti analitica e piano dei conti contabile


git-svn-id: svn://10.65.10.50/trunk@12968 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2005-04-20 22:59:40 +00:00
parent f189b22dba
commit f604712a95
9 changed files with 415 additions and 33 deletions

View File

@ -4,28 +4,221 @@
#include "calib01.h"
#include "ca0400a.h"
#include "pdcana.h"
#include "panapdc.h"
#include <pconti.h>
class TPiano_conti_anal_msk : public TSimple_anal_msk
{
int _ind_bilancio;
protected:
virtual int get_logicnum() const { return LF_PCONANA; }
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TPiano_conti_anal_msk() { read("ca0400a"); }
};
bool TPiano_conti_anal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_SHEET:
if (e == fe_init)
{
_ind_bilancio = 0;
TSheet_field & s = (TSheet_field &) o;
if (s.items() > 0)
{
TToken_string str = s.row(0);
TString key;
key << str.get(0) << "|";
key << str.get();
_ind_bilancio = atoi(cache().get(LF_PCON, key, PCN_INDBIL));
}
}
else
if (e == se_leave)
{
TSheet_field & s = (TSheet_field &) o;
TToken_string str = s.row(s.selected());
TString key;
key << str.get(0) << "|";
key << str.get();
const TRectype & pcon = cache().get(LF_PCON, key);
if (!pcon.empty())
{
const int ind_bilancio = pcon.get_int(PCN_INDBIL);
if (_ind_bilancio == 0)
_ind_bilancio = ind_bilancio;
if (_ind_bilancio != ind_bilancio)
return error_box("Indicatore di bilancio errato %d", ind_bilancio);
else
return true;
}
}
break;
default:
break;
}
return TSimple_anal_msk::on_field_event(o, e, jolly);
}
class TAnalisi_rec : public TMultiple_rectype
{
protected:
public:
TAnalisi_rec();
};
TAnalisi_rec::TAnalisi_rec() : TMultiple_rectype(LF_PCONANA)
{
add_file(LF_PANAPDC, PANAPDC_NRIGA);
}
///////////////////////////////////////////////////////////
// TAnalisi_app
///////////////////////////////////////////////////////////
class TAnalisi_app : public TAnal_app
{
TAnalisi_rec * _rows;
int _maxlev;
protected:
virtual TSimple_anal_msk* create_mask() const { return new TPiano_conti_anal_msk; }
void rec2row(const TMask& m);
int row2rec(const TMask& m);
virtual int read(TMask& m);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
virtual bool remove();
void init_modify_mode(TMask& mask);
void init_insert_mode(TMask& mask);
virtual bool create();
virtual bool user_create();
virtual bool user_destroy();
};
void TAnalisi_app::rec2row(const TMask& m)
{
TSheet_field & s = m.sfield(F_SHEET);
const TMultiple_rectype & r = *_rows;
const int items = r.rows();
s.destroy();
if (items > 0)
{
for (int i = 1; i <= items; i++)
{
const TRectype & rec = r.body(0)[i];
TToken_string & str = s.row(i - 1);
str.add(rec.get(PANAPDC_GRUPPO));
str.add(rec.get(PANAPDC_CONTO));
str.add(rec.get(PANAPDC_SOTTOCONTO));
s.check_row(i - 1);
}
}
s.force_update();
}
int TAnalisi_app::read(TMask& m)
{
int err = TAnal_app::read(m);
if (err == NOERR)
{
const TRelation * r = get_relation();
_rows->zero();
_rows->put(PANAPDC_CODCONTO, r->curr().get(PANA_CODCONTO));
if (_rows->read() == NOERR)
rec2row(m);
}
return err;
}
int TAnalisi_app::row2rec(const TMask& m)
{
TSheet_field & s = m.sfield(F_SHEET);
TMultiple_rectype & r = *_rows;
const int items = s.items();
r.destroy_rows();
if (items > 0)
{
for (int i = 0; i < items; i++)
{
TRectype & rec = r.new_row();
TToken_string & str = s.row(i);
rec.put(PANAPDC_GRUPPO, str.get(0));
rec.put(PANAPDC_CONTO, str.get());
rec.put(PANAPDC_SOTTOCONTO, str.get());
}
}
return items;
}
int TAnalisi_app::write(const TMask& m)
{
TRelation * r = get_relation();
((TSimple_anal_msk &)m).update_tree_field();
row2rec(m);
const int err = _rows->write();
return err;
}
int TAnalisi_app::rewrite(const TMask& m)
{
TRelation * r = get_relation();
((TSimple_anal_msk &)m).update_tree_field();
row2rec(m);
const int err = _rows->rewrite();
return err;
}
bool TAnalisi_app::remove()
{
TRelation * r = get_relation();
const int err = _rows->remove();
return err == NOERR;
}
void TAnalisi_app::init_modify_mode(TMask& mask)
{
const short id = ((TPiano_conti_anal_msk &)mask).get_field_id(_maxlev, 1);
mask.enable_page(1, mask.get(id).not_empty());
TAnal_app::init_modify_mode(mask);
}
void TAnalisi_app::init_insert_mode(TMask& mask)
{
const short id = ((TPiano_conti_anal_msk &)mask).get_field_id(_maxlev, 1);
mask.enable_page(1, mask.get(id).not_empty());
TAnal_app::init_insert_mode(mask);
}
bool TAnalisi_app::create()
{
TConfig_anal cfg;
@ -42,9 +235,36 @@ bool TAnalisi_app::create()
else
return error_box(TR("Il piano dei conti analitico non e' stato configurato"));
}
return TAnal_app::create();
}
bool TAnalisi_app::user_create()
{
const bool ok = TAnal_app::user_create();
if (ok)
{
_rows = new TAnalisi_rec();
TPiano_conti_anal_msk * m = (TPiano_conti_anal_msk * ) get_mask(0);
for (int i = 0; i < 4; i++)
{
const short id = m->get_field_id(i, 1);
if (id <= 0 || m->id2pos(id) < 0)
break;
_maxlev = i;
}
}
return ok;
}
bool TAnalisi_app::user_destroy()
{
delete _rows;
return TAnal_app::user_destroy();
}
int ca0400(int argc, char* argv[])
{
TAnalisi_app app;

View File

@ -1,13 +1,22 @@
#define F_KEY_1 101
#define F_KEY_2 102
#define F_KEY_3 103
#define F_KEY_4 104
//#define F_KEY_1 101
//#define F_KEY_2 102
//#define F_KEY_3 103
//#define F_KEY_4 104
#define F_DES_1 111
#define F_DES_2 112
#define F_DES_3 113
#define F_DES_4 114
//#define F_DES_1 111
//#define F_DES_2 112
//#define F_DES_3 113
//#define F_DES_4 114
#define F_SEZSALDI 121
#define F_SOSPESO 122
#define F_SHEET 123
#define FR_GRUPPO 101
#define FR_CONTO 102
#define FR_SOTTOCONTO 103
#define FR_DESCRS 104
#define FR_DESCRG 301
#define FR_DESCRC 302
#define F_SEZSALDI 121
#define F_SOSPESO 122

View File

@ -6,7 +6,7 @@ TOOLBAR "" 0 -3 0 3
ENDPAGE
PAGE "Piano dei conti" -1 -1 80 20
PAGE "Piano dei conti analitica" -1 -1 80 20
GROUPBOX DLG_NULL 78 6
BEGIN
@ -29,4 +29,124 @@ END
ENDPAGE
PAGE "Piano dei conti contabile" -1 -1 64 6
TEXT DLG_NULL
BEGIN
PROMPT 1 2 "@bConti di contabilità collegati"
END
SPREADSHEET F_SHEET 79 -1
BEGIN
PROMPT 1 3 ""
ITEM "Gruppo"
ITEM "Conto"
ITEM "Sottoconto"
ITEM "Descrizione@50"
END
ENDPAGE
ENDMASK
PAGE "Sheet" -1 -1 78 8
NUMBER FR_GRUPPO 3
BEGIN
PROMPT 1 1 "Gruppo "
USE LF_PCON SELECT CONTO==""
INPUT GRUPPO FR_GRUPPO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
OUTPUT FR_GRUPPO GRUPPO
OUTPUT FR_DESCRG DESCR
CHECKTYPE REQUIRED
END
STRING FR_DESCRG 50
BEGIN
PROMPT 25 1 ""
USE LF_PCON KEY 2 SELECT CONTO==""
INPUT DESCR FR_DESCRG
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
COPY OUTPUT FR_GRUPPO
CHECKTYPE SEARCH
END
NUMBER FR_CONTO 3
BEGIN
PROMPT 1 3 "Conto "
USE LF_PCON SELECT SOTTOCONTO==""
INPUT GRUPPO FR_GRUPPO
INPUT CONTO FR_CONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT FR_GRUPPO GRUPPO
OUTPUT FR_CONTO CONTO
OUTPUT FR_DESCRC DESCR
CHECKTYPE REQUIRED
END
STRING FR_DESCRC 50
BEGIN
PROMPT 25 3 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO==""
INPUT DESCR FR_DESCRC
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
COPY OUTPUT FR_CONTO
CHECKTYPE SEARCH
END
NUMBER FR_SOTTOCONTO 6
BEGIN
PROMPT 1 5 "Sottoconto "
USE LF_PCON
INPUT GRUPPO FR_GRUPPO
INPUT CONTO FR_CONTO
INPUT SOTTOCONTO FR_SOTTOCONTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT FR_GRUPPO GRUPPO
OUTPUT FR_CONTO CONTO
OUTPUT FR_SOTTOCONTO SOTTOCONTO
OUTPUT FR_DESCRS DESCR
CHECKTYPE NORMAL
END
STRING FR_DESCRS 50
BEGIN
PROMPT 25 5 ""
USE LF_PCON KEY 2
INPUT DESCR FR_DESCRS
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT FR_SOTTOCONTO
CHECKTYPE SEARCH
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -583,8 +583,8 @@ bool TSimple_anal_msk::on_field_event(TOperable_field& o, TField_event e, long j
case F_KEY2:
case F_KEY3:
case F_KEY4:
if (e == fe_modify || e == fe_close)
return test_key_field(o.dlg());
if ((jolly == 0) &&(e == fe_modify || e == fe_close))
return test_key_field(o.dlg());
break;
default:
break;
@ -737,7 +737,6 @@ int TSimple_anal_msk::create_key_fields()
const int y = 1;
const int n = ca_create_fields(*this, logic, x, y, kid, did, 0x1);
const int m = ca_create_fields(*this, logic, x, y, kid, did, 0x2);
first_focus(kid);
return n;
}
@ -979,26 +978,26 @@ TAnal_tree::~TAnal_tree()
// TAnal_app
///////////////////////////////////////////////////////////
void TAnal_app::init_key_fields() const
void TAnal_app::init_key_fields(TSimple_anal_msk & m) const
{
int maxlev = 0;
for (maxlev = 0; maxlev < 4; maxlev++)
{
const short id = _msk->get_field_id(maxlev, 1);
if (id <= 0 || _msk->id2pos(id) < 0)
const short id = m.get_field_id(maxlev, 1);
if (id <= 0 || m.id2pos(id) < 0)
break;
_msk->disable(id);
m.disable(id);
const short did = _msk->get_field_id(maxlev, 2);
_msk->disable(did);
const short did = m.get_field_id(maxlev, 2);
m.disable(did);
}
for (int i = maxlev-1; i >= 0; i--)
{
const short id = _msk->get_field_id(i, 1);
TEdit_field& e = _msk->efield(id);
const short did = _msk->get_field_id(i, 2);
TEdit_field& d = _msk->efield(did);
const short id = m.get_field_id(i, 1);
TEdit_field& e = m.efield(id);
const short did = m.get_field_id(i, 2);
TEdit_field& d = m.efield(did);
if (e.empty())
{
@ -1011,10 +1010,11 @@ void TAnal_app::init_key_fields() const
e.check(STARTING_CHECK);
TString80 key2;
key2 << _msk->fieldref(0, 2);
key2 << m.fieldref(0, 2);
d.set_field(key2);
d.show();
d.enable();
m.first_focus(d.dlg());
d.enable_check(false);
break;
}
@ -1051,16 +1051,17 @@ void TAnal_app::init_query_mode(TMask& mask)
d.enable_check();
d.set_field("");
}
m.first_focus(m.get_field_id(0, 1));
}
void TAnal_app::init_modify_mode(TMask& m)
void TAnal_app::init_modify_mode(TMask& mask)
{
init_key_fields();
init_key_fields((TSimple_anal_msk &)mask);
}
void TAnal_app::init_insert_mode(TMask& m)
void TAnal_app::init_insert_mode(TMask& mask)
{
init_key_fields();
init_key_fields((TSimple_anal_msk &)mask);
}
int TAnal_app::write(const TMask& m)

View File

@ -99,10 +99,10 @@ protected:
virtual bool user_destroy();
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
void init_key_fields() const;
virtual void init_query_mode(TMask& m);
virtual void init_modify_mode(TMask& m);
virtual void init_insert_mode(TMask& m);
void init_key_fields(TSimple_anal_msk & m) const;
virtual void init_query_mode(TMask& mask);
virtual void init_modify_mode(TMask& mask);
virtual void init_insert_mode(TMask& mask);
protected:
virtual TSimple_anal_msk* create_mask() const pure;

3
ca/f155.dir Executable file
View File

@ -0,0 +1,3 @@
155
0
$panapdc|0|0|36|0|Archivio di colleg. Centri di Costo Conti|||

10
ca/f155.trr Executable file
View File

@ -0,0 +1,10 @@
155
5
CODCONTO|1|20|0|Codice Conto di analitica
NRIGA|2|3|0|Numero di riga
GRUPPO|2|3|0|Gruppo
CONTO|2|3|0|Conto
SOTTOCONTO|3|6|0|Sottoconto
2
CODCONTO+NRIGA|
GRUPPO+CONTO+SOTTOCONTO+CODCONTO|X

10
ca/panapdc.h Executable file
View File

@ -0,0 +1,10 @@
#ifndef __CDCPDC_H
#define __CDCPDC_H
#define PANAPDC_CODCONTO "CODCONTO"
#define PANAPDC_NRIGA "NRIGA"
#define PANAPDC_GRUPPO "GRUPPO"
#define PANAPDC_CONTO "CONTO"
#define PANAPDC_SOTTOCONTO "SOTTOCONTO"
#endif

9
ca/pdcana.h Executable file
View File

@ -0,0 +1,9 @@
#ifndef __PANA_H
#define __PANA_H
#define PANA_CODCONTO "CODCONTO"
#define PANA_DESCR "DESCR"
#define PANA_SEZSALDI "SEZSALDI"
#define PANA_SOSPESO "SOSPESO"
#endif