Patch level : 2.2 210

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/trunk@12653 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2005-02-02 16:28:42 +00:00
parent dcc9ea95d7
commit 621266b2dc
7 changed files with 233 additions and 45 deletions

View File

@ -18,15 +18,39 @@ class TMovanal_msk : public TAutomask
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly);
virtual bool can_be_closed() const; virtual bool can_be_closed() const;
virtual bool on_key(KEY key);
public: public:
void show_locked_buttons();
TMovanal_msk(); TMovanal_msk();
virtual ~TMovanal_msk() { } virtual ~TMovanal_msk() { }
}; };
bool TMovanal_msk::can_be_closed() const bool TMovanal_msk::can_be_closed() const
{ {
return !get_bool(F_BLOCCATO); return mode() != MODE_MOD || !get_bool(F_BLOCCATO);
}
bool TMovanal_msk::on_key(KEY key)
{
if (key == K_SHIFT + K_F12 && !can_be_closed())
{
enable(F_BLOCCATO);
return true;
}
return TAutomask::on_key(key);
}
void TMovanal_msk::show_locked_buttons()
{
const bool editmode = mode() == MODE_MOD;
const bool unlocked = can_be_closed();
show (F_BLOCCATO, editmode);
enable(F_BLOCCATO, unlocked);
enable(DLG_SAVEREC, unlocked && edit_mode()); // Abilito il "Registra" solo in modo modifica
enable(DLG_DELREC, unlocked && editmode);
enable(DLG_QUIT, unlocked);
} }
bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
@ -93,6 +117,10 @@ bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly
totrig.sezione() == 'D' ? TR("Dare") : TR("Avere")); totrig.sezione() == 'D' ? TR("Dare") : TR("Avere"));
} }
break; break;
case F_BLOCCATO:
if (e == fe_modify)
show_locked_buttons();
break;
default: default:
break; break;
} }
@ -194,10 +222,8 @@ const TString& TMovanal_app::somma_campi(TToken_string& row, int first) const
int TMovanal_app::write_rows(const TMask& m) int TMovanal_app::write_rows(const TMask& m)
{ {
TRecord_array a(LF_RMOVANA, RMOVANA_NUMRIG); TAnal_mov& mov = (TAnal_mov&)_rel->curr();
TRectype* key = new TRectype(LF_RMOVANA); mov.destroy_rows();
key->put(RMOVANA_NUMREG, m.get(F_NUMREG));
a.set_key(key);
TSheet_field& sheet = _msk->sfield(F_RIGHE); TSheet_field& sheet = _msk->sfield(F_RIGHE);
@ -210,7 +236,7 @@ int TMovanal_app::write_rows(const TMask& m)
// Scandisce lo sheet e riempie il recarray // Scandisce lo sheet e riempie il recarray
FOR_EACH_SHEET_ROW(sheet, i, row) FOR_EACH_SHEET_ROW(sheet, i, row)
{ {
TRectype& rec = a.row(i+1, true); // Crea una riga nuova TRectype& rec = mov.new_row(); // Crea una riga nuova
rec.put(RMOVANA_ANNOES, m.get(F_ANNOES)); rec.put(RMOVANA_ANNOES, m.get(F_ANNOES));
rec.put(RMOVANA_DATAREG, m.get(F_DATAREG)); rec.put(RMOVANA_DATAREG, m.get(F_DATAREG));
rec.put(RMOVANA_DESCR, row->get(sheet.cid2index(S_DESCR))); rec.put(RMOVANA_DESCR, row->get(sheet.cid2index(S_DESCR)));
@ -231,7 +257,6 @@ int TMovanal_app::write_rows(const TMask& m)
rec.put(RMOVANA_CODFASE, somma_campi(*row, pos_fas)); rec.put(RMOVANA_CODFASE, somma_campi(*row, pos_fas));
rec.put(RMOVANA_CODCONTO, somma_campi(*row, pos_con)); rec.put(RMOVANA_CODCONTO, somma_campi(*row, pos_con));
} }
a.rewrite();
return NOERR; return NOERR;
} }
@ -257,9 +282,8 @@ void TMovanal_app::spezza_campo(const TString& str, TToken_string& row, int firs
void TMovanal_app::read_rows(const TMask& m) void TMovanal_app::read_rows(const TMask& m)
{ {
TRectype key (LF_RMOVANA); const TAnal_mov& mov = (const TAnal_mov&)_rel->curr();
key.put(RMOVANA_NUMREG, _msk->get(F_NUMREG)); const TRecord_array& a = mov[LF_RMOVANA];
TRecord_array a(key, RMOVANA_NUMRIG);
TSheet_field& sheet = m.sfield(F_RIGHE); TSheet_field& sheet = m.sfield(F_RIGHE);
sheet.destroy(); sheet.destroy();
@ -295,9 +319,8 @@ int TMovanal_app::write(const TMask& m)
int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR; int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR;
if (err == NOERR) if (err == NOERR)
{ {
err = TRelation_application::write(m);
if (err == NOERR)
write_rows(m); write_rows(m);
err = TRelation_application::write(m);
} }
return err; return err;
} }
@ -307,47 +330,40 @@ int TMovanal_app::rewrite(const TMask& m)
int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR; int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR;
if (err == NOERR) if (err == NOERR)
{ {
err = TRelation_application::rewrite(m);
if (err == NOERR)
write_rows(m); write_rows(m);
err = TRelation_application::rewrite(m);
} }
return err; return err;
} }
int TMovanal_app::read(TMask& m) int TMovanal_app::read(TMask& m)
{ {
int err = TRelation_application::read(m); const int err = TRelation_application::read(m);
if (err == NOERR) if (err == NOERR)
{
read_rows(m); read_rows(m);
}
return err; return err;
} }
void TMovanal_app::init_query_mode(TMask& m) void TMovanal_app::init_query_mode(TMask& m)
{ {
m.enable(F_BLOCCATO); ((TMovanal_msk&)m).show_locked_buttons();
m.enable(DLG_SAVEREC);
m.enable(DLG_QUIT);
} }
void TMovanal_app::init_insert_mode(TMask& m) void TMovanal_app::init_insert_mode(TMask& m)
{ {
m.enable(F_BLOCCATO); ((TMovanal_msk&)m).show_locked_buttons();
m.enable(DLG_SAVEREC);
} }
void TMovanal_app::init_modify_mode(TMask& m) void TMovanal_app::init_modify_mode(TMask& m)
{ {
const bool unlocked = m.can_be_closed(); ((TMovanal_msk&)m).show_locked_buttons();
m.enable(F_BLOCCATO, unlocked);
m.enable(DLG_SAVEREC, unlocked);
m.enable(DLG_QUIT, unlocked);
} }
bool TMovanal_app::user_create() bool TMovanal_app::user_create()
{ {
_rel = new TRelation(LF_MOVANA); _rel = new TRelation(LF_MOVANA);
_rel->lfile().set_curr(new TAnal_mov);
_msk = new TMovanal_msk; _msk = new TMovanal_msk;
return true; return true;
} }

View File

@ -15,6 +15,7 @@
#define F_DARE 115 #define F_DARE 115
#define F_AVERE 116 #define F_AVERE 116
#define F_BLOCCATO 117 #define F_BLOCCATO 117
#define F_TIPO 118
#define F_NUMREG2 201 #define F_NUMREG2 201
#define F_ANNOES2 202 #define F_ANNOES2 202
@ -22,7 +23,6 @@
#define F_DESCR2 204 #define F_DESCR2 204
#define F_RIGHE 300 #define F_RIGHE 300
#define S_DARE 101 #define S_DARE 101
#define S_AVERE 102 #define S_AVERE 102
#define S_DESCR 103 #define S_DESCR 103

View File

@ -91,6 +91,7 @@ BEGIN
DISPLAY "Descrizione@60" S0 DISPLAY "Descrizione@60" S0
OUTPUT F_TIPODOC CODTAB OUTPUT F_TIPODOC CODTAB
CHECKTYPE NORMAL CHECKTYPE NORMAL
FIELD TIPODOC
END END
STRING F_DESCR 50 STRING F_DESCR 50
@ -141,15 +142,24 @@ BEGIN
PROMPT 1 14 "@bMovimento" PROMPT 1 14 "@bMovimento"
END END
LIST F_TIPO 1 25
BEGIN
PROMPT 2 15 "Tipo "
ITEM " |Normale"
ITEM "P|Preventivo"
ITEM "V|Variazione preventivo"
FIELD TIPOMOV
END
CURRENCY F_TOTDOC 18 CURRENCY F_TOTDOC 18
BEGIN BEGIN
PROMPT 2 15 "Totale documento " PROMPT 2 16 "Totale documento "
FIELD TOTDOC FIELD TOTDOC
END END
LISTBOX F_SEZIONE 1 5 LISTBOX F_SEZIONE 1 5
BEGIN BEGIN
PROMPT 39 15 "" PROMPT 39 16 ""
ITEM "D|Dare" ITEM "D|Dare"
ITEM "A|Avere" ITEM "A|Avere"
FIELD SEZIONE FIELD SEZIONE

View File

@ -4,6 +4,10 @@
#include <tree.h> #include <tree.h>
#include <pconti.h> #include <pconti.h>
#include "movana.h"
#include "rmovana.h"
#include "saldana.h"
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TMultilevel_code_info // TMultilevel_code_info
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -931,9 +935,147 @@ bool TAnal_app::user_destroy()
// TAnal_mov // TAnal_mov
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
TImporto& TAnal_mov::saldo(const TRectype& row)
{
TToken_string key;
key.add(get(MOVANA_TIPOMOV));
key.add(get(MOVANA_ANNOES));
key.add(row.get(RMOVANA_CODCCOSTO));
key.add(row.get(RMOVANA_CODCMS));
key.add(row.get(RMOVANA_CODFASE));
key.add(row.get(RMOVANA_CODCONTO));
TImporto* imp = (TImporto*)_saldi.objptr(key);
if (imp == NULL)
{
imp = new TImporto;
_saldi.add(key, imp);
}
return *imp;
}
void TAnal_mov::load_saldi(bool reset)
{
if (reset)
_saldi.destroy();
const TRecord_array& a = body(LF_RMOVANA);
for (int i = a.last_row(); i > 0; i--)
{
const TRectype& row = a[i];
const TImporto imp(row.get_char(RMOVANA_SEZIONE), row.get_real(RMOVANA_IMPORTO));
TImporto& sld = saldo(row);
if (reset)
sld -= imp;
else
sld += imp;
}
}
void TAnal_mov::update_saldi(bool kill)
{
if (!kill)
load_saldi(false);
save_saldi();
if (kill)
_saldi.destroy();
else
load_saldi(true);
}
void TAnal_mov::save_saldi()
{
TLocalisamfile saldi(LF_SALDANA);
FOR_EACH_ASSOC_OBJECT(_saldi, h, k, o)
{
const TImporto& imp = (const TImporto&)o;
if (!imp.is_zero())
{
TToken_string key = k;
const char tipo = key.get_char(0);
saldi.put(SALDANA_ANNO, key.get());
saldi.put(SALDANA_COSTO, key.get());
saldi.put(SALDANA_COMMESSA, key.get());
saldi.put(SALDANA_FASE, key.get());
saldi.put(SALDANA_CONTO, key.get());
int err = saldi.read(_isequal, _testandlock);
if (err != NOERR)
{
saldi.put(SALDANA_ANNO, key.get(1));
saldi.put(SALDANA_COSTO, key.get());
saldi.put(SALDANA_COMMESSA, key.get());
saldi.put(SALDANA_FASE, key.get());
saldi.put(SALDANA_CONTO, key.get());
saldi.write();
}
const char* fld_sez = NULL;
const char* fld_val = NULL;
switch (tipo)
{
case 'P': fld_sez = SALDANA_SEZIONEP; fld_val = SALDANA_SEZIONEP; break;
case 'V': fld_sez = SALDANA_SEZIONEV; fld_val = SALDANA_SEZIONEV; break;
default : fld_sez = SALDANA_SEZIONE; fld_val = SALDANA_SEZIONE; break;
}
TImporto saldo(saldi.get_char(fld_sez), saldi.get_real(fld_val));
saldo += imp;
saldo.normalize();
saldi.put(fld_sez, saldo.sezione());
saldi.put(fld_val, saldo.valore());
saldi.rewrite();
}
}
}
int TAnal_mov::readat(TBaseisamfile& f, TRecnotype nrec, word lockop)
{
const int err = TMultiple_rectype::readat(f, nrec, lockop);
load_saldi(true);
return err;
}
int TAnal_mov::read(TBaseisamfile& f, word op, word lockop)
{
const int err = TMultiple_rectype::read(f, op, lockop);
load_saldi(true);
return err;
}
int TAnal_mov::write(TBaseisamfile& f) const
{
const int err = TMultiple_rectype::write(f);
if (err == NOERR)
{
((TAnal_mov*)this)->update_saldi(false);
}
return err;
}
int TAnal_mov::rewrite(TBaseisamfile& f) const
{
const int err = TMultiple_rectype::rewrite(f);
if (err == NOERR)
{
((TAnal_mov*)this)->update_saldi(false);
}
return err;
}
int TAnal_mov::remove(TBaseisamfile& f) const
{
const int err = TMultiple_rectype::remove(f);
if (err == NOERR)
((TAnal_mov*)this)->update_saldi(true);
return err;
}
int TAnal_mov::read(long numreg, word lock) int TAnal_mov::read(long numreg, word lock)
{ {
put("NUMREG", numreg); put(MOVANA_NUMREG, numreg);
return TMultiple_rectype::read(_isequal, lock); return TMultiple_rectype::read(_isequal, lock);
} }
@ -944,6 +1086,8 @@ TAnal_mov::TAnal_mov(long numreg) : TMultiple_rectype(LF_MOVANA)
read(numreg); read(numreg);
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// Utilities // Utilities
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -113,10 +113,23 @@ protected:
class TAnal_mov : public TMultiple_rectype class TAnal_mov : public TMultiple_rectype
{ {
public: TAssoc_array _saldi;
int read(long numreg, word lockop = _nolock);
//costruttore protected:
TImporto& saldo(const TRectype& rec);
void load_saldi(bool reset);
void update_saldi(bool kill);
void save_saldi();
public:
virtual int readat(TBaseisamfile& f, TRecnotype nrec, word lockop);
virtual int read(TBaseisamfile& f, word op, word lockop);
virtual int write(TBaseisamfile& f) const;
virtual int rewrite(TBaseisamfile& f) const;
virtual int remove(TBaseisamfile& f) const;
public:
int read(long numreg, word lockop = _nolock); // Funzione read di comodo
TAnal_mov(long numreg = 0); TAnal_mov(long numreg = 0);
}; };

View File

@ -1,3 +1,3 @@
151 151
0 0
$parana|0|0|46|0|Parametri rip.centri di costo/commesse||| $saldana|0|0|142|0|Saldi contabilita' analitica|||

View File

@ -1,10 +1,15 @@
151 151
5 11
TIPO|1|3|0|<CDC> Centro di costo, <CMS> Commessa ANNO|9|4|0|Codice esercizio
COD|1|20|0|Centro di costo/commessa COSTO|1|20|0|Centro Di costo
NRIGA|1|3|0|Numero riga COMMESSA|1|20|0|Commessa
CODRIP|1|4|0|Codice Ripartizione FASE|1|20|0|Fase
VALRIP|4|15|5|Valore CONTO|1|20|0|Conto
2 SEZIONE|7|1|0|Sezione (Normale)
TIPO+COD+NRIGA| SALDO|4|18|3|Saldo (Normale)
TIPO+CODRIP+COD|X SEZIONEP|7|1|0|Sezione (Preventivo)
SALDOP|4|18|3|Saldo (Preventivo)
SEZIONEV|7|1|0|Sezione (Variazione preventivo)
SALDOV|4|18|3|Saldo (Variazione preventivo)
1
ANNO+COSTO+COMMESSA+FASE+CONTO|