Patch level : 2.0 nopatch
Files correlati : Ricompilazione Demo : [ ] Commento : Utilizzati i fraction per le conversioni git-svn-id: svn://10.65.10.50/trunk@11041 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
cf2a2bb9f8
commit
cf7a81a9bc
@ -812,7 +812,7 @@ bool TExplode_distinta_form::validate(TForm_item &f, TToken_string &t)
|
|||||||
{
|
{
|
||||||
case 'A':
|
case 'A':
|
||||||
{
|
{
|
||||||
valore = _art_cache.get(re.articolo()).get(code);
|
valore = cache().get(LF_ANAMAG, re.articolo(), code);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'L':
|
case 'L':
|
||||||
@ -864,7 +864,7 @@ bool TExplode_distinta_form::validate(TForm_item &f, TToken_string &t)
|
|||||||
{
|
{
|
||||||
case 'A':
|
case 'A':
|
||||||
{
|
{
|
||||||
valore = _art_cache.get(re.articolo()).get(ANAMAG_DESCR);
|
valore = cache().get(LF_ANAMAG, re.articolo(), ANAMAG_DESCR);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'L':
|
case 'L':
|
||||||
@ -952,7 +952,7 @@ bool TExplode_distinta_form::validate(TForm_item &f, TToken_string &t)
|
|||||||
else
|
else
|
||||||
if (code == "_CODFORN")
|
if (code == "_CODFORN")
|
||||||
{
|
{
|
||||||
valore = _art_cache.get(re.articolo()).get(ANAMAG_CODFORN);
|
valore = cache().get(LF_ANAMAG, re.articolo(), ANAMAG_CODFORN);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (code == "_CODCORR")
|
if (code == "_CODCORR")
|
||||||
|
88
db/dblib.cpp
88
db/dblib.cpp
@ -17,33 +17,31 @@
|
|||||||
// TQuantita'
|
// TQuantita'
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
real TQuantita::get_factor(const TCodice_um& um) const
|
const fraction& TQuantita::get_factor(const TCodice_um& um) const
|
||||||
{
|
{
|
||||||
real fc = 1.0;
|
static TAssoc_array factors;
|
||||||
if (_articolo.blank())
|
|
||||||
|
TString80 code;
|
||||||
|
code << _articolo << '|' << (um.empty() ? _um : um);
|
||||||
|
|
||||||
|
fraction* conv = (fraction*)factors.objptr(code);
|
||||||
|
if (conv == NULL)
|
||||||
{
|
{
|
||||||
NFCHECK("Unita' di misura generica non supportata");
|
TLocalisamfile umart(LF_UMART);
|
||||||
|
umart.setkey(2);
|
||||||
|
umart.put(UMART_CODART, _articolo);
|
||||||
|
umart.put(UMART_UM, um.empty() ? _um : um);
|
||||||
|
if (umart.read() == NOERR)
|
||||||
|
conv = new fraction(umart.get_real(UMART_FC), UNO);
|
||||||
|
else
|
||||||
|
conv = new fraction(1,1);
|
||||||
|
factors.add(code, conv);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
return *conv;
|
||||||
static TDecoder* umart2 = NULL;
|
|
||||||
if (umart2 == NULL)
|
|
||||||
{
|
|
||||||
umart2 = new TDecoder(LF_UMART, UMART_FC, 2);
|
|
||||||
umart2->test_file_changes();
|
|
||||||
umart2->set_items_limit(512);
|
|
||||||
}
|
|
||||||
|
|
||||||
TString80 code;
|
|
||||||
code << _articolo << '|' << (um.empty() ? _um : um);
|
|
||||||
const TString& val = umart2->decode(code);
|
|
||||||
if (val.not_empty())
|
|
||||||
fc = real(val);
|
|
||||||
}
|
|
||||||
return fc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
real TQuantita::find_umbase(TCodice_um& um)
|
void TQuantita::find_umbase(TCodice_um& um) const
|
||||||
{
|
{
|
||||||
TString80 code;
|
TString80 code;
|
||||||
code << _articolo << "|1";
|
code << _articolo << "|1";
|
||||||
@ -52,13 +50,13 @@ real TQuantita::find_umbase(TCodice_um& um)
|
|||||||
um = cache().get("LAV", _articolo, "S6");
|
um = cache().get("LAV", _articolo, "S6");
|
||||||
else
|
else
|
||||||
um = new_um;
|
um = new_um;
|
||||||
return 1.0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
real TQuantita::find_umdist(TCodice_um& um)
|
void TQuantita::find_umdist(TCodice_um& um) const
|
||||||
{
|
{
|
||||||
um = cache().get(LF_DIST, _articolo, UMART_UM);
|
um = cache().get(LF_DIST, _articolo, UMART_UM);
|
||||||
return um.blank() ? find_umbase(um) : get_factor(um);
|
if (um.blank())
|
||||||
|
find_umbase(um);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TQuantita::set_articolo(const TString& art, const TString& um)
|
void TQuantita::set_articolo(const TString& art, const TString& um)
|
||||||
@ -66,41 +64,34 @@ void TQuantita::set_articolo(const TString& art, const TString& um)
|
|||||||
_articolo = art;
|
_articolo = art;
|
||||||
|
|
||||||
if (isalnum(um[0]))
|
if (isalnum(um[0]))
|
||||||
{
|
|
||||||
_um = um;
|
_um = um;
|
||||||
_conv = get_factor(_um);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (um.blank())
|
if (um.blank())
|
||||||
_conv = find_umbase(_um);
|
find_umbase(_um);
|
||||||
else
|
else
|
||||||
_conv = find_umdist(_um);
|
find_umdist(_um);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!art.blank() && _um.blank())
|
if (!art.blank() && _um.blank())
|
||||||
NFCHECK("Unita' di misura nulla per %s", (const char*)art);
|
NFCHECK("Unita' di misura nulla per %s", (const char*)art);
|
||||||
CHECK(_conv > ZERO, "Invalid conversion factor");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TQuantita::copy(const TQuantita& q)
|
void TQuantita::copy(const TQuantita& q)
|
||||||
{
|
{
|
||||||
_articolo = q._articolo;
|
_articolo = q._articolo;
|
||||||
_um = q._um;
|
_um = q._um;
|
||||||
_conv = q._conv;
|
|
||||||
_val = q._val;
|
_val = q._val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TQuantita::convert(real& val, const TCodice_um& from_um,
|
void TQuantita::convert(real& val, const TCodice_um& from_um, const TCodice_um& to_um) const
|
||||||
const TCodice_um& to_um) const
|
|
||||||
{
|
{
|
||||||
CHECK(!from_um.blank() && !to_um.blank(), "Unita' di misura nulla");
|
CHECK(!from_um.blank() && !to_um.blank(), "Unita' di misura nulla");
|
||||||
if (from_um != to_um && !val.is_zero())
|
if (from_um != to_um && !val.is_zero())
|
||||||
{
|
{
|
||||||
const real mul = get_factor(from_um);
|
const fraction& mul = get_factor(from_um);
|
||||||
const real div = get_factor(to_um);
|
const fraction& div = get_factor(to_um);
|
||||||
val *= mul;
|
val = fraction(val, UNO) * mul / div;
|
||||||
val /= div;
|
|
||||||
TArticolo::round_um(val, to_um);
|
TArticolo::round_um(val, to_um);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -108,7 +99,7 @@ void TQuantita::convert(real& val, const TCodice_um& from_um,
|
|||||||
void TQuantita::convert2umdist()
|
void TQuantita::convert2umdist()
|
||||||
{
|
{
|
||||||
TCodice_um dummy;
|
TCodice_um dummy;
|
||||||
_conv = find_umdist(dummy);
|
find_umdist(dummy);
|
||||||
if (dummy != _um)
|
if (dummy != _um)
|
||||||
{
|
{
|
||||||
convert(_val, _um, dummy);
|
convert(_val, _um, dummy);
|
||||||
@ -122,20 +113,22 @@ void TQuantita::convert2umbase()
|
|||||||
find_umbase(dummy);
|
find_umbase(dummy);
|
||||||
if (dummy != _um)
|
if (dummy != _um)
|
||||||
{
|
{
|
||||||
CHECK(_conv > ZERO, "Invalid conversion factor");
|
convert(_val, _um, dummy);
|
||||||
_val *= _conv;
|
|
||||||
_um = dummy;
|
_um = dummy;
|
||||||
_conv = 1.0;
|
|
||||||
TArticolo::round_um(_val, _um);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
real TQuantita::base_val() const
|
real TQuantita::base_val() const
|
||||||
{
|
{
|
||||||
CHECK(_conv > ZERO, "Invalid conversion factor");
|
TCodice_um dummy;
|
||||||
real v = _conv * _val;
|
find_umbase(dummy);
|
||||||
TArticolo::round_um(v, _um);
|
if (dummy != _um) // Se non sono gia' la base...
|
||||||
return v;
|
{
|
||||||
|
real v = _val;
|
||||||
|
convert(v, _um, dummy);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
return _val;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TQuantita::compare(const TSortable& s) const
|
int TQuantita::compare(const TSortable& s) const
|
||||||
@ -206,7 +199,6 @@ const TQuantita& TQuantita::operator /=(const real& q)
|
|||||||
}
|
}
|
||||||
|
|
||||||
TQuantita::TQuantita()
|
TQuantita::TQuantita()
|
||||||
: _conv(1.0)
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
TQuantita::TQuantita(const TString& art, const TString& um, const real& val)
|
TQuantita::TQuantita(const TString& art, const TString& um, const real& val)
|
||||||
|
12
db/dblib.h
12
db/dblib.h
@ -5,6 +5,10 @@
|
|||||||
#include <expr.h>
|
#include <expr.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __FRACTION_H
|
||||||
|
#include <fraction.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __RECARRAY_H
|
#ifndef __RECARRAY_H
|
||||||
#include <recarray.h>
|
#include <recarray.h>
|
||||||
#endif
|
#endif
|
||||||
@ -147,7 +151,6 @@ class TQuantita : public TSortable
|
|||||||
{
|
{
|
||||||
TCodice_articolo _articolo; // Articolo di riferimento
|
TCodice_articolo _articolo; // Articolo di riferimento
|
||||||
TCodice_um _um; // Unita' di misura
|
TCodice_um _um; // Unita' di misura
|
||||||
real _conv; // Fattore di conversione alla base
|
|
||||||
real _val; // Valore attuale
|
real _val; // Valore attuale
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -155,11 +158,11 @@ protected:
|
|||||||
virtual TObject* dup() const { return new TQuantita(*this); }
|
virtual TObject* dup() const { return new TQuantita(*this); }
|
||||||
|
|
||||||
void copy(const TQuantita& q);
|
void copy(const TQuantita& q);
|
||||||
real get_factor(const TCodice_um& um) const;
|
const fraction& get_factor(const TCodice_um& um) const;
|
||||||
void convert(real& val, const TCodice_um& from_um, const TCodice_um& to_um) const;
|
void convert(real& val, const TCodice_um& from_um, const TCodice_um& to_um) const;
|
||||||
|
|
||||||
real find_umbase(TCodice_um& um);
|
void find_umbase(TCodice_um& um) const;
|
||||||
real find_umdist(TCodice_um& um);
|
void find_umdist(TCodice_um& um) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual bool ok() const { return !_um.blank(); }
|
virtual bool ok() const { return !_um.blank(); }
|
||||||
@ -177,7 +180,6 @@ public:
|
|||||||
|
|
||||||
const TCodice_articolo& articolo() const { return _articolo; }
|
const TCodice_articolo& articolo() const { return _articolo; }
|
||||||
const TCodice_um& um() const { return _um; }
|
const TCodice_um& um() const { return _um; }
|
||||||
const real& conv() const { return _conv; }
|
|
||||||
const real& val() const { return _val; }
|
const real& val() const { return _val; }
|
||||||
real base_val() const;
|
real base_val() const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user