currency.cpp Correzioni sulla gestione valuta
isam.cpp Evita di chiudere files se il prefix e' gia' stato chiuso mask.cpp Riconoscimento campi CURRENCY maskfld.* Aggiunti campi CURRENCY prefix.* Aggiunta funzione prefix_valid() per sapere se il prefix e' stato inizializzato git-svn-id: svn://10.65.10.50/trunk@6653 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
e69efac5d4
commit
d5db644881
@ -40,19 +40,23 @@ public:
|
|||||||
TObject* TDowJones::rec2obj(const TRectype& rec) const
|
TObject* TDowJones::rec2obj(const TRectype& rec) const
|
||||||
{
|
{
|
||||||
TExchangeData* data = new TExchangeData;
|
TExchangeData* data = new TExchangeData;
|
||||||
data->_num = rec.get_real("R12");
|
data->_den = rec.get_real("I11");
|
||||||
if (data->_num < 1.0)
|
|
||||||
data->_num = 1.0;
|
|
||||||
data->_den = rec.get_real("R13");
|
|
||||||
if (data->_den > ZERO)
|
if (data->_den > ZERO)
|
||||||
{
|
{
|
||||||
|
data->_num = rec.get_real("R11");
|
||||||
|
if (data->_num < 1.0)
|
||||||
|
data->_num = 1.0;
|
||||||
data->_dec = rec.get_int("I0");
|
data->_dec = rec.get_int("I0");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
data->_num = rec.get_real("I10");
|
||||||
|
if (data->_num < 1.0)
|
||||||
|
data->_num = 1.0;
|
||||||
data->_den = rec.get_real("R10");
|
data->_den = rec.get_real("R10");
|
||||||
data->_num = 1.0;
|
data->_num = 1.0;
|
||||||
data->_dec = rec.get("CODTAB").empty() ? 0 : 2;
|
const TString& codval = rec.get("CODTAB");
|
||||||
|
data->_dec = codval.empty() || codval == "LIT" ? 0 : 2;
|
||||||
}
|
}
|
||||||
if (data->_den <= ZERO)
|
if (data->_den <= ZERO)
|
||||||
{
|
{
|
||||||
@ -135,7 +139,7 @@ void TCurrency::change_value(const char* val)
|
|||||||
{
|
{
|
||||||
if (_num != ZERO)
|
if (_num != ZERO)
|
||||||
_num = DowJones.exchange(_num, _val, val);
|
_num = DowJones.exchange(_num, _val, val);
|
||||||
strncpy(_val, val, 3);
|
strncpy(_val, val, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCurrency::read(const TRectype& rec, const char* field, const char* val)
|
void TCurrency::read(const TRectype& rec, const char* field, const char* val)
|
||||||
@ -212,6 +216,6 @@ TCurrency::TCurrency(const TCurrency& cur)
|
|||||||
TCurrency::TCurrency(const real& num, const char* val)
|
TCurrency::TCurrency(const real& num, const char* val)
|
||||||
: _num(num)
|
: _num(num)
|
||||||
{
|
{
|
||||||
strncpy(_val, val, 3);
|
strncpy(_val, val, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1036,8 +1036,12 @@ int TBaseisamfile::_open_ex(
|
|||||||
|
|
||||||
int TBaseisamfile::_close()
|
int TBaseisamfile::_close()
|
||||||
{
|
{
|
||||||
int err = prefix().close_isamfile(_isam_handle);
|
int err = NOERR;
|
||||||
|
if (prefix_valid())
|
||||||
|
{
|
||||||
|
err = prefix().close_isamfile(_isam_handle);
|
||||||
setstatus(err);
|
setstatus(err);
|
||||||
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -833,6 +833,7 @@ TMask_field* TMask::parse_field(TScanner& scanner)
|
|||||||
if (k == "GR") return new TGroup_field(this);
|
if (k == "GR") return new TGroup_field(this);
|
||||||
if (k == "LI") return new TList_field(this);
|
if (k == "LI") return new TList_field(this);
|
||||||
if (k == "RA") return new TRadio_field(this);
|
if (k == "RA") return new TRadio_field(this);
|
||||||
|
if (k == "CU") return new TCurrency_field(this);
|
||||||
if (k == "ME") return new TMemo_field(this);
|
if (k == "ME") return new TMemo_field(this);
|
||||||
if (k == "ZO") return new TZoom_field(this);
|
if (k == "ZO") return new TZoom_field(this);
|
||||||
if (k == "GO") return new TGolem_field(this);
|
if (k == "GO") return new TGolem_field(this);
|
||||||
|
@ -1110,7 +1110,7 @@ void TButton_field::set_native_icon(unsigned icon)
|
|||||||
|
|
||||||
TEditable_field::TEditable_field(TMask* m)
|
TEditable_field::TEditable_field(TMask* m)
|
||||||
: TLoadable_field(m), _prompt(NULL), _field(NULL), _keys(NULL),
|
: TLoadable_field(m), _prompt(NULL), _field(NULL), _keys(NULL),
|
||||||
_validate(NULL), _warning(NULL)
|
_validate(NULL), _warning(NULL), _drivers(NULL), _userdata(NULL)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
@ -1121,6 +1121,8 @@ TEditable_field::~TEditable_field()
|
|||||||
if (_keys) delete _keys;
|
if (_keys) delete _keys;
|
||||||
if (_validate) delete _validate;
|
if (_validate) delete _validate;
|
||||||
if (_warning) delete _warning;
|
if (_warning) delete _warning;
|
||||||
|
if (_drivers) delete _drivers;
|
||||||
|
if (_userdata) delete _userdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1167,6 +1169,32 @@ bool TEditable_field::parse_item(TScanner& scanner)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (k == "DR") // DRIVENBY
|
||||||
|
{
|
||||||
|
if (_drivers == NULL)
|
||||||
|
_drivers = new TPointer_array;
|
||||||
|
TToken_string lista(scanner.line(), ' ');
|
||||||
|
FOR_EACH_TOKEN(lista, tok)
|
||||||
|
{
|
||||||
|
const int id = atoi(tok);
|
||||||
|
if (id > 0)
|
||||||
|
{
|
||||||
|
const int pos = mask().id2pos(id);
|
||||||
|
if (pos >= 0)
|
||||||
|
{
|
||||||
|
TEdit_field& driver = mask().efield(id);
|
||||||
|
_drivers->add(&driver);
|
||||||
|
TString16 msg;
|
||||||
|
msg.format("CHECK,%d", dlg());
|
||||||
|
driver.message(0, TRUE)->add(msg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
NFCHECK("Non esiste ancora il campo driver %d", id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
if (k == "CU") // CUSTOM DATA
|
if (k == "CU") // CUSTOM DATA
|
||||||
{
|
{
|
||||||
if (_userdata == NULL)
|
if (_userdata == NULL)
|
||||||
@ -2328,7 +2356,7 @@ KEY TBrowse::run()
|
|||||||
TToken_string siblings, vals;
|
TToken_string siblings, vals;
|
||||||
create_siblings(siblings);
|
create_siblings(siblings);
|
||||||
|
|
||||||
{
|
{
|
||||||
byte buttons = 0;
|
byte buttons = 0;
|
||||||
if (_insert.not_empty())
|
if (_insert.not_empty())
|
||||||
{
|
{
|
||||||
@ -2370,7 +2398,7 @@ KEY TBrowse::run()
|
|||||||
TBrowse_sheet s(_cursor, _items, caption, _head, buttons, &field(), siblings);
|
TBrowse_sheet s(_cursor, _items, caption, _head, buttons, &field(), siblings);
|
||||||
k = s.run();
|
k = s.run();
|
||||||
selected = s.selected();
|
selected = s.selected();
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (k)
|
switch (k)
|
||||||
{
|
{
|
||||||
@ -3619,7 +3647,6 @@ const char* TReal_field::win2raw(const char* data) const
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TReal_field::set_decimals(int d)
|
void TReal_field::set_decimals(int d)
|
||||||
{
|
{
|
||||||
_decimals = d;
|
_decimals = d;
|
||||||
@ -3630,7 +3657,6 @@ void TReal_field::set_decimals(int d)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TReal_field::exchange(bool show_value, const real& nuo)
|
void TReal_field::exchange(bool show_value, const real& nuo)
|
||||||
{
|
{
|
||||||
const int dec = show_value ? 2 : 0; // Quanti decimali voglio
|
const int dec = show_value ? 2 : 0; // Quanti decimali voglio
|
||||||
@ -3658,6 +3684,97 @@ void TReal_field::exchange(bool show_value, const real& nuo)
|
|||||||
set_decimals(dec);
|
set_decimals(dec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// Currency_field
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <currency.h>
|
||||||
|
|
||||||
|
const char* TCurrency_field::raw2win(const char* data) const
|
||||||
|
{
|
||||||
|
const real num = data;
|
||||||
|
if (num == ZERO)
|
||||||
|
return "";
|
||||||
|
const char* value = NULL;
|
||||||
|
if (driver(0))
|
||||||
|
value = driver(0)->get();
|
||||||
|
|
||||||
|
TCurrency cur(num, value);
|
||||||
|
return cur.string(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* TCurrency_field::win2raw(const char* data) const
|
||||||
|
{
|
||||||
|
TString& str = _ctl_data._park;
|
||||||
|
const real num(real::ita2eng(data));
|
||||||
|
str = num.string();
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TCurrency_field::on_key(KEY key)
|
||||||
|
{
|
||||||
|
if (key == K_TAB && focusdirty())
|
||||||
|
{
|
||||||
|
const TString& raw = get_window_data();
|
||||||
|
set_window_data(raw2win(raw));
|
||||||
|
}
|
||||||
|
return TEdit_field::on_key(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TCurrency_field::autosave(TRelation& r)
|
||||||
|
{
|
||||||
|
if (field())
|
||||||
|
{
|
||||||
|
int file = field()->file();
|
||||||
|
const TString& name = field()->name();
|
||||||
|
const char* value = NULL;
|
||||||
|
if (driver(0))
|
||||||
|
value = driver(0)->get();
|
||||||
|
const real num = get();
|
||||||
|
const TCurrency cur(num, value);
|
||||||
|
cur.write(r.curr(file), name, value);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TCurrency_field::autoload(const TRelation& r)
|
||||||
|
{
|
||||||
|
if (field())
|
||||||
|
{
|
||||||
|
int file = field()->file();
|
||||||
|
const TString& name = field()->name();
|
||||||
|
const char* value = NULL;
|
||||||
|
if (driver(0))
|
||||||
|
value = driver(0)->get();
|
||||||
|
TCurrency cur;
|
||||||
|
cur.read(r.curr(file), name, value);
|
||||||
|
set(cur.string());
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TCurrency_field::parse_head(TScanner& scanner)
|
||||||
|
{
|
||||||
|
int size = scanner.integer();
|
||||||
|
if (size <= 0)
|
||||||
|
size = 18;
|
||||||
|
_ctl_data._size = _ctl_data._width = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TCurrency_field::create(WINDOW w)
|
||||||
|
{
|
||||||
|
_ctl_data._flags.strip("AMVZ");
|
||||||
|
_ctl_data._flags << 'R';
|
||||||
|
TEdit_field::create(w);
|
||||||
|
}
|
||||||
|
|
||||||
|
TCurrency_field::TCurrency_field(TMask* m)
|
||||||
|
: TEdit_field(m)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// List_field
|
// List_field
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
@ -570,6 +570,9 @@ class TEditable_field : public TLoadable_field
|
|||||||
// @cmember Messaggi da mandare in caso di errore sul campo
|
// @cmember Messaggi da mandare in caso di errore sul campo
|
||||||
TString* _warning;
|
TString* _warning;
|
||||||
|
|
||||||
|
// @cmember:(INTERNAL) Lista dei campi da cui dipende
|
||||||
|
TPointer_array* _drivers;
|
||||||
|
|
||||||
// @cmember:(INTERNAL) Stringa definibile dall'utilizzatore della classe da utilizzare a piacimento
|
// @cmember:(INTERNAL) Stringa definibile dall'utilizzatore della classe da utilizzare a piacimento
|
||||||
TToken_string* _userdata;
|
TToken_string* _userdata;
|
||||||
|
|
||||||
@ -654,6 +657,10 @@ public:
|
|||||||
// @cmember Ritorna TRUE se il campo e' di tipo editable
|
// @cmember Ritorna TRUE se il campo e' di tipo editable
|
||||||
virtual bool is_editable() const { return TRUE; }
|
virtual bool is_editable() const { return TRUE; }
|
||||||
|
|
||||||
|
// @cmember Ritorna un eventuale campo driver
|
||||||
|
const TEditable_field* driver(int n) const
|
||||||
|
{ return _drivers ? (const TEditable_field*)_drivers->objptr(n) : NULL; }
|
||||||
|
|
||||||
TEditable_field(TMask* m);
|
TEditable_field(TMask* m);
|
||||||
virtual ~TEditable_field();
|
virtual ~TEditable_field();
|
||||||
};
|
};
|
||||||
@ -1111,6 +1118,36 @@ public:
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// @class TCurrency_field | Classe per la gestione dei campi in valuta
|
||||||
|
//
|
||||||
|
// @base public | TEdit_field
|
||||||
|
class TCurrency_field : public TEdit_field
|
||||||
|
// @author:(INTERNAL) Guido
|
||||||
|
{
|
||||||
|
// @access:(INTERNAL) Private Member
|
||||||
|
|
||||||
|
protected: // TMask_field
|
||||||
|
// @cmember Legge un item del controllo dal file .msk <p scanner>
|
||||||
|
virtual void parse_head(TScanner& scanner);
|
||||||
|
|
||||||
|
virtual void create(WINDOW w);
|
||||||
|
|
||||||
|
protected: // TEditable_field
|
||||||
|
virtual const char* win2raw(const char* data) const;
|
||||||
|
virtual const char* raw2win(const char* data) const;
|
||||||
|
virtual bool on_key(KEY key);
|
||||||
|
|
||||||
|
virtual bool autosave(TRelation& r);
|
||||||
|
virtual bool autoload(const TRelation& r);
|
||||||
|
|
||||||
|
public:
|
||||||
|
// @cmember Costruttore
|
||||||
|
TCurrency_field(TMask* mask);
|
||||||
|
// @cmember Distruttore
|
||||||
|
virtual ~TCurrency_field()
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
// @doc EXTERNAL
|
// @doc EXTERNAL
|
||||||
|
|
||||||
// @class TDate_field | Classe per la gestione dei campi data
|
// @class TDate_field | Classe per la gestione dei campi data
|
||||||
|
@ -32,6 +32,16 @@ TPrefix& prefix_init()
|
|||||||
|
|
||||||
// @doc EXTERNAL
|
// @doc EXTERNAL
|
||||||
|
|
||||||
|
// @func Determina se il prefix e' stato inizializzato
|
||||||
|
//
|
||||||
|
// @rdesc Ritorna TRUE o FALSE
|
||||||
|
bool prefix_valid()
|
||||||
|
{
|
||||||
|
return _prefhndl != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @doc EXTERNAL
|
||||||
|
|
||||||
// @func Legge il file "prefix.txt"
|
// @func Legge il file "prefix.txt"
|
||||||
//
|
//
|
||||||
// @rdesc Ritorna l'oggetto <c TPrefix> letto
|
// @rdesc Ritorna l'oggetto <c TPrefix> letto
|
||||||
|
@ -168,6 +168,7 @@ public:
|
|||||||
const char* firm2dir(long codditta);
|
const char* firm2dir(long codditta);
|
||||||
|
|
||||||
TPrefix& prefix_init();
|
TPrefix& prefix_init();
|
||||||
|
bool prefix_valid();
|
||||||
TPrefix& prefix();
|
TPrefix& prefix();
|
||||||
void prefix_destroy();
|
void prefix_destroy();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user