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:
parent
dcc9ea95d7
commit
621266b2dc
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
148
ca/calib01.cpp
148
ca/calib01.cpp
@ -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
|
||||
///////////////////////////////////////////////////////////
|
||||
|
19
ca/calib01.h
19
ca/calib01.h
@ -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);
|
||||
};
|
||||
|
||||
|
@ -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|||
|
||||
|
23
ca/f151.trr
23
ca/f151.trr
@ -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|
|
||||
|
Loading…
x
Reference in New Issue
Block a user