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:
virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly);
virtual bool can_be_closed() const;
virtual bool on_key(KEY key);
public:
void show_locked_buttons();
TMovanal_msk();
virtual ~TMovanal_msk() { }
};
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)
@ -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"));
}
break;
case F_BLOCCATO:
if (e == fe_modify)
show_locked_buttons();
break;
default:
break;
}
@ -194,11 +222,9 @@ const TString& TMovanal_app::somma_campi(TToken_string& row, int first) const
int TMovanal_app::write_rows(const TMask& m)
{
TRecord_array a(LF_RMOVANA, RMOVANA_NUMRIG);
TRectype* key = new TRectype(LF_RMOVANA);
key->put(RMOVANA_NUMREG, m.get(F_NUMREG));
a.set_key(key);
TAnal_mov& mov = (TAnal_mov&)_rel->curr();
mov.destroy_rows();
TSheet_field& sheet = _msk->sfield(F_RIGHE);
// Calcola le posizioni dei campi multilivello generati
@ -210,7 +236,7 @@ int TMovanal_app::write_rows(const TMask& m)
// Scandisce lo sheet e riempie il recarray
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_DATAREG, m.get(F_DATAREG));
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_CODCONTO, somma_campi(*row, pos_con));
}
a.rewrite();
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)
{
TRectype key (LF_RMOVANA);
key.put(RMOVANA_NUMREG, _msk->get(F_NUMREG));
TRecord_array a(key, RMOVANA_NUMRIG);
const TAnal_mov& mov = (const TAnal_mov&)_rel->curr();
const TRecord_array& a = mov[LF_RMOVANA];
TSheet_field& sheet = m.sfield(F_RIGHE);
sheet.destroy();
@ -295,9 +319,8 @@ int TMovanal_app::write(const TMask& m)
int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR;
if (err == NOERR)
{
write_rows(m);
err = TRelation_application::write(m);
if (err == NOERR)
write_rows(m);
}
return err;
}
@ -307,47 +330,40 @@ int TMovanal_app::rewrite(const TMask& m)
int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR;
if (err == NOERR)
{
write_rows(m);
err = TRelation_application::rewrite(m);
if (err == NOERR)
write_rows(m);
}
return err;
}
int TMovanal_app::read(TMask& m)
{
int err = TRelation_application::read(m);
const int err = TRelation_application::read(m);
if (err == NOERR)
{
read_rows(m);
}
return err;
}
void TMovanal_app::init_query_mode(TMask& m)
{
m.enable(F_BLOCCATO);
m.enable(DLG_SAVEREC);
m.enable(DLG_QUIT);
((TMovanal_msk&)m).show_locked_buttons();
}
void TMovanal_app::init_insert_mode(TMask& m)
{
m.enable(F_BLOCCATO);
m.enable(DLG_SAVEREC);
((TMovanal_msk&)m).show_locked_buttons();
}
void TMovanal_app::init_modify_mode(TMask& m)
{
const bool unlocked = m.can_be_closed();
m.enable(F_BLOCCATO, unlocked);
m.enable(DLG_SAVEREC, unlocked);
m.enable(DLG_QUIT, unlocked);
((TMovanal_msk&)m).show_locked_buttons();
}
bool TMovanal_app::user_create()
{
_rel = new TRelation(LF_MOVANA);
_rel->lfile().set_curr(new TAnal_mov);
_msk = new TMovanal_msk;
return true;
}

View File

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

View File

@ -91,6 +91,7 @@ BEGIN
DISPLAY "Descrizione@60" S0
OUTPUT F_TIPODOC CODTAB
CHECKTYPE NORMAL
FIELD TIPODOC
END
STRING F_DESCR 50
@ -141,15 +142,24 @@ BEGIN
PROMPT 1 14 "@bMovimento"
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
BEGIN
PROMPT 2 15 "Totale documento "
PROMPT 2 16 "Totale documento "
FIELD TOTDOC
END
LISTBOX F_SEZIONE 1 5
BEGIN
PROMPT 39 15 ""
PROMPT 39 16 ""
ITEM "D|Dare"
ITEM "A|Avere"
FIELD SEZIONE

View File

@ -4,6 +4,10 @@
#include <tree.h>
#include <pconti.h>
#include "movana.h"
#include "rmovana.h"
#include "saldana.h"
///////////////////////////////////////////////////////////
// TMultilevel_code_info
///////////////////////////////////////////////////////////
@ -931,9 +935,147 @@ bool TAnal_app::user_destroy()
// 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)
{
put("NUMREG", numreg);
put(MOVANA_NUMREG, numreg);
return TMultiple_rectype::read(_isequal, lock);
}
@ -941,9 +1083,11 @@ TAnal_mov::TAnal_mov(long numreg) : TMultiple_rectype(LF_MOVANA)
{
add_file(LF_RMOVANA, "NUMRIG");
if (numreg > 0)
read (numreg);
read(numreg);
}
///////////////////////////////////////////////////////////
// Utilities
///////////////////////////////////////////////////////////

View File

@ -113,10 +113,23 @@ protected:
class TAnal_mov : public TMultiple_rectype
{
public:
int read(long numreg, word lockop = _nolock);
TAssoc_array _saldi;
//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);
};

View File

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