Patch level : 12.0 916
Files correlati : mg1.exe lv0.exe lv1.exe lv3.exe Commento : Corretta ricostruzione saldi per clifogiac sulle dotazioni lv0.exe lv1.exe lv3.exe
This commit is contained in:
parent
83594bcdd5
commit
349e4210c0
@ -609,15 +609,9 @@ protected:
|
|||||||
void add_saldi(const bool plus = true);
|
void add_saldi(const bool plus = true);
|
||||||
// @member: effettua l'aggiornamento dei saldi relativi alle giacenze interessate al movimento
|
// @member: effettua l'aggiornamento dei saldi relativi alle giacenze interessate al movimento
|
||||||
bool update_balances(bool lock = true) ;
|
bool update_balances(bool lock = true) ;
|
||||||
// @member: effettua l'aggiornamento dei saldi di una giacenza
|
|
||||||
void update_balances(TRectype& magrec, const TSaldo_mag& s, const TCausale_magazzino& caus) const;
|
|
||||||
// @member: effettua l'aggiornamento dei saldi di una giacenza sulle gacenze per ciente/fornitore
|
|
||||||
void update_balances_clifo(TRectype& clifomagrec, const TSaldo_mag_clifo & s);
|
|
||||||
// @member: effettua l'aggiornamento di un saldo di una giacenza
|
// @member: effettua l'aggiornamento di un saldo di una giacenza
|
||||||
void update_balance(TRectype& rec, const char * fieldname, const real& diff, int sgn) const;
|
void update_balance(TRectype& rec, const char * fieldname, const real& diff, int sgn) const;
|
||||||
|
|
||||||
void giac_putkey(TRectype& mag, const TSaldo_mag & s);
|
|
||||||
void giac_putkey_clifo(TRectype& clifomag, const TSaldo_mag_clifo & s);
|
|
||||||
bool lock_anamag(const char *codart);
|
bool lock_anamag(const char *codart);
|
||||||
bool unlock_anamag(const char *codart) ;
|
bool unlock_anamag(const char *codart) ;
|
||||||
virtual const char * codmag_rauto(int r) const { return NULL;}
|
virtual const char * codmag_rauto(int r) const { return NULL;}
|
||||||
@ -813,7 +807,7 @@ const char* add_depcode(TString & codmagdep, const char* d);
|
|||||||
const char* get_magcode(const TString & codmagdep);
|
const char* get_magcode(const TString & codmagdep);
|
||||||
const char* get_depcode(const TString & codmagdep);
|
const char* get_depcode(const TString & codmagdep);
|
||||||
bool riporta_ordinato();
|
bool riporta_ordinato();
|
||||||
void update_clifogiac(TRectype& rec, const TRectype& oldrec);
|
//void update_clifogiac(TRectype& rec, const TRectype& oldrec);
|
||||||
void reset_clifogiac(TRectype& rec, const TRectype& oldrec, bool closed);
|
void reset_clifogiac(TRectype& rec, const TRectype& oldrec, bool closed);
|
||||||
|
|
||||||
#endif //__MGLIB_H
|
#endif //__MGLIB_H
|
||||||
|
@ -13,6 +13,17 @@
|
|||||||
#include "../cg/cglib01.h"
|
#include "../cg/cglib01.h"
|
||||||
#include "../db/dblib.h"
|
#include "../db/dblib.h"
|
||||||
|
|
||||||
|
void update_balance(TRectype& rec, const char* fieldname, const real& val, const int sgn)
|
||||||
|
{
|
||||||
|
if (sgn != 0 && !val.is_zero())
|
||||||
|
{
|
||||||
|
if (sgn > 0)
|
||||||
|
rec.add(fieldname, val);
|
||||||
|
else
|
||||||
|
rec.sub(fieldname, val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class TSaldo_mag : public TObject
|
class TSaldo_mag : public TObject
|
||||||
{
|
{
|
||||||
int _codes;
|
int _codes;
|
||||||
@ -32,7 +43,10 @@ public:
|
|||||||
const real& quant() const { return _quant; }
|
const real& quant() const { return _quant; }
|
||||||
const real& valore() const { return _valore; }
|
const real& valore() const { return _valore; }
|
||||||
void set(int codes, const char * codmag, const char * codart, const char * livello, const char * codcaus);
|
void set(int codes, const char * codmag, const char * codart, const char * livello, const char * codcaus);
|
||||||
int operator==(const TSaldo_mag&) const;
|
int operator==(const TSaldo_mag& s) const;
|
||||||
|
const TSaldo_mag & operator+=(const TSaldo_mag& s);
|
||||||
|
const TSaldo_mag & operator-=(const TSaldo_mag& s);
|
||||||
|
const char * operator<<(const TSaldo_mag& s) const;
|
||||||
|
|
||||||
virtual TObject* dup() const { return new TSaldo_mag(*this); }
|
virtual TObject* dup() const { return new TSaldo_mag(*this); }
|
||||||
|
|
||||||
@ -41,9 +55,15 @@ public:
|
|||||||
void add_quant(const real & q, bool plus = true) { _quant += (plus ? q : -q); }
|
void add_quant(const real & q, bool plus = true) { _quant += (plus ? q : -q); }
|
||||||
void add_valore(const real & v, bool plus = true) { _valore += (plus ? v : -v); }
|
void add_valore(const real & v, bool plus = true) { _valore += (plus ? v : -v); }
|
||||||
void add(const real & q, const real & v, bool plus = true) { add_quant(q, plus); add_valore(v, plus); }
|
void add(const real & q, const real & v, bool plus = true) { add_quant(q, plus); add_valore(v, plus); }
|
||||||
|
void add(const TSaldo_mag & s, bool plus = true) { add_quant(s._quant, plus); add_valore(s._valore, plus); }
|
||||||
void sub_quant(const real & q) { add_quant(q, false); }
|
void sub_quant(const real & q) { add_quant(q, false); }
|
||||||
void sub_valore(const real & v) { add_valore(v, false); }
|
void sub_valore(const real & v) { add_valore(v, false); }
|
||||||
void sub(const real & q, const real & v) { add(q, v, false); }
|
void sub(const TSaldo_mag & s) { add(s, false); }
|
||||||
|
|
||||||
|
void putkey(TRectype& mag) const;
|
||||||
|
// @member: effettua l'aggiornamento dei saldi di una giacenza
|
||||||
|
void update_record(TRectype& magrec) const;
|
||||||
|
|
||||||
|
|
||||||
TSaldo_mag(int codes, const char * codmag, const char * codart, const char * livello, const char * codcaus) {set(codes, codmag, codart, livello, codcaus);}
|
TSaldo_mag(int codes, const char * codmag, const char * codart, const char * livello, const char * codcaus) {set(codes, codmag, codart, livello, codcaus);}
|
||||||
TSaldo_mag(const TRectype & head, const TRectype & row);
|
TSaldo_mag(const TRectype & head, const TRectype & row);
|
||||||
@ -69,6 +89,51 @@ int TSaldo_mag::operator==(const TSaldo_mag & s) const
|
|||||||
(_codcaus == s._codcaus);
|
(_codcaus == s._codcaus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const TSaldo_mag & TSaldo_mag::operator+=(const TSaldo_mag & s)
|
||||||
|
{
|
||||||
|
if (*this == s)
|
||||||
|
add(s);
|
||||||
|
#ifdef DBG
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TString msg(TR("Somma di saldi incompatibili : "));
|
||||||
|
|
||||||
|
msg << *this << " - " << s;
|
||||||
|
error_box(msg);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TSaldo_mag & TSaldo_mag::operator-=(const TSaldo_mag & s)
|
||||||
|
{
|
||||||
|
if (*this == s)
|
||||||
|
sub(s);
|
||||||
|
#ifdef DBG
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TString msg(TR("Somma di saldi incompatibili : "));
|
||||||
|
|
||||||
|
msg << *this << " - " << s;
|
||||||
|
error_box(msg);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * TSaldo_mag::operator<<(const TSaldo_mag& s) const
|
||||||
|
{
|
||||||
|
TString & tmp = get_tmp_string(256);
|
||||||
|
|
||||||
|
tmp << "Articolo " << codart();
|
||||||
|
if (livello().full())
|
||||||
|
tmp << " Livello " << livello();
|
||||||
|
tmp << " Magazzino " << codmag()
|
||||||
|
<< " Esercizio " << codes()
|
||||||
|
<< " Causale " << codcaus();
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
TToken_string & TSaldo_mag::key(const TRectype & head, const TRectype & row)
|
TToken_string & TSaldo_mag::key(const TRectype & head, const TRectype & row)
|
||||||
{
|
{
|
||||||
TToken_string& key = get_tmp_string();
|
TToken_string& key = get_tmp_string();
|
||||||
@ -93,6 +158,71 @@ TSaldo_mag::TSaldo_mag(const TRectype & head, const TRectype & row)
|
|||||||
_codcaus = head.get(MOVMAG_CODCAUS);
|
_codcaus = head.get(MOVMAG_CODCAUS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TSaldo_mag::putkey(TRectype& mag) const
|
||||||
|
{
|
||||||
|
mag.zero();
|
||||||
|
mag.put(MAG_ANNOES, codes());
|
||||||
|
mag.put(MAG_CODMAG, codmag());
|
||||||
|
mag.put(MAG_CODART, codart());
|
||||||
|
mag.put(MAG_LIVELLO, livello());
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSaldo_mag::update_record(TRectype& magrec) const
|
||||||
|
{
|
||||||
|
const TCausale_magazzino& caus = cached_causale_magazzino(codcaus());
|
||||||
|
|
||||||
|
if (caus.update_qta())
|
||||||
|
{
|
||||||
|
const real diff = quant();
|
||||||
|
|
||||||
|
if (!diff.is_zero())
|
||||||
|
{
|
||||||
|
update_balance(magrec, MAG_GIAC, diff, caus.sgn(s_giac)); // update ..
|
||||||
|
update_balance(magrec, MAG_ACQ, diff, caus.sgn(s_acq)); // update ..
|
||||||
|
update_balance(magrec, MAG_ENT, diff, caus.sgn(s_ent));
|
||||||
|
update_balance(magrec, MAG_VEN, diff, caus.sgn(s_ven));
|
||||||
|
update_balance(magrec, MAG_USC, diff, caus.sgn(s_usc));
|
||||||
|
update_balance(magrec, MAG_ORDC, diff, caus.sgn(s_ordc));
|
||||||
|
update_balance(magrec, MAG_ORDF, diff, caus.sgn(s_ordf));
|
||||||
|
update_balance(magrec, MAG_RIM, diff, caus.sgn(s_rim));
|
||||||
|
update_balance(magrec, MAG_SCARTI, diff, caus.sgn(s_scart));
|
||||||
|
update_balance(magrec, MAG_INCL, diff, caus.sgn(s_incl));
|
||||||
|
update_balance(magrec, MAG_ACL, diff, caus.sgn(s_acl));
|
||||||
|
update_balance(magrec, MAG_PRODCOMP, diff, caus.sgn(s_prodc));
|
||||||
|
update_balance(magrec, MAG_PRODFIN, diff, caus.sgn(s_prodf));
|
||||||
|
update_balance(magrec, MAG_NLABEL, diff, caus.sgn(s_label));
|
||||||
|
update_balance(magrec, MAG_USER1, diff, caus.sgn(s_user1));
|
||||||
|
update_balance(magrec, MAG_USER2, diff, caus.sgn(s_user2));
|
||||||
|
update_balance(magrec, MAG_USER3, diff, caus.sgn(s_user3));
|
||||||
|
update_balance(magrec, MAG_USER4, diff, caus.sgn(s_user4));
|
||||||
|
update_balance(magrec, MAG_USER5, diff, caus.sgn(s_user5));
|
||||||
|
update_balance(magrec, MAG_USER6, diff, caus.sgn(s_user6));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (caus.update_val())
|
||||||
|
{
|
||||||
|
const real diff_val = valore();
|
||||||
|
|
||||||
|
if (!diff_val.is_zero())
|
||||||
|
{
|
||||||
|
update_balance(magrec, MAG_VALACQ, diff_val, caus.sgn(s_acq)); // update ..
|
||||||
|
update_balance(magrec, MAG_VALENT, diff_val, caus.sgn(s_ent));
|
||||||
|
update_balance(magrec, MAG_VALVEN, diff_val, caus.sgn(s_ven));
|
||||||
|
update_balance(magrec, MAG_VALUSC, diff_val, caus.sgn(s_usc));
|
||||||
|
update_balance(magrec, MAG_VALORDC, diff_val, caus.sgn(s_ordc));
|
||||||
|
update_balance(magrec, MAG_VALORDF, diff_val, caus.sgn(s_ordf));
|
||||||
|
update_balance(magrec, MAG_VALRIM, diff_val, caus.sgn(s_rim));
|
||||||
|
update_balance(magrec, MAG_VALSCARTI, diff_val, caus.sgn(s_scart));
|
||||||
|
update_balance(magrec, MAG_USERVAL1, diff_val, caus.sgn(s_user1));
|
||||||
|
update_balance(magrec, MAG_USERVAL2, diff_val, caus.sgn(s_user2));
|
||||||
|
update_balance(magrec, MAG_USERVAL3, diff_val, caus.sgn(s_user3));
|
||||||
|
update_balance(magrec, MAG_USERVAL4, diff_val, caus.sgn(s_user4));
|
||||||
|
update_balance(magrec, MAG_USERVAL5, diff_val, caus.sgn(s_user5));
|
||||||
|
update_balance(magrec, MAG_USERVAL6, diff_val, caus.sgn(s_user6));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TSaldo_mag::TSaldo_mag(const TSaldo_mag & s)
|
TSaldo_mag::TSaldo_mag(const TSaldo_mag & s)
|
||||||
{
|
{
|
||||||
set(s._codes, s._codmag, s._codart, s._livello, s._codcaus);
|
set(s._codes, s._codmag, s._codart, s._livello, s._codcaus);
|
||||||
@ -126,6 +256,9 @@ public:
|
|||||||
const real& valore() const { return _valore; }
|
const real& valore() const { return _valore; }
|
||||||
void set(int codes, char tipocf, const char * codcf, int codindsp, const char * codart, const char * livello, const char * codcaus);
|
void set(int codes, char tipocf, const char * codcf, int codindsp, const char * codart, const char * livello, const char * codcaus);
|
||||||
int operator==(const TSaldo_mag_clifo&) const;
|
int operator==(const TSaldo_mag_clifo&) const;
|
||||||
|
const TSaldo_mag_clifo & operator+=(const TSaldo_mag_clifo& s);
|
||||||
|
const TSaldo_mag_clifo & operator-=(const TSaldo_mag_clifo& s);
|
||||||
|
const char * operator<<(const TSaldo_mag_clifo& s) const;
|
||||||
|
|
||||||
virtual TObject* dup() const { return new TSaldo_mag_clifo(*this); }
|
virtual TObject* dup() const { return new TSaldo_mag_clifo(*this); }
|
||||||
|
|
||||||
@ -134,10 +267,16 @@ public:
|
|||||||
void add_quant(const real & q, bool plus = true) { _quant = _quant + (plus ? q : -q); }
|
void add_quant(const real & q, bool plus = true) { _quant = _quant + (plus ? q : -q); }
|
||||||
void add_valore(const real & v, bool plus = true) { _valore = _valore + (plus ? v : -v); }
|
void add_valore(const real & v, bool plus = true) { _valore = _valore + (plus ? v : -v); }
|
||||||
void add(const real & q, const real & v, bool plus = true) { add_quant(q, plus); add_valore(v, plus); }
|
void add(const real & q, const real & v, bool plus = true) { add_quant(q, plus); add_valore(v, plus); }
|
||||||
|
void add(const TSaldo_mag_clifo & s, bool plus = true) { add_quant(s._quant, plus); add_valore(s._valore, plus); }
|
||||||
void sub_quant(const real & q) { add_quant(q, false); }
|
void sub_quant(const real & q) { add_quant(q, false); }
|
||||||
void sub_valore(const real & v) { add_valore(v, false); }
|
void sub_valore(const real & v) { add_valore(v, false); }
|
||||||
void sub(const real & q, const real & v) { add(q, v, false); }
|
void sub(const real & q, const real & v) { add(q, v, false); }
|
||||||
|
void sub(const TSaldo_mag_clifo & s) { add(s, false); }
|
||||||
|
|
||||||
|
void putkey(TRectype& clifomag) const;
|
||||||
|
// @member: effettua l'aggiornamento dei saldi di una giacenza sulle gacenze per ciente/fornitore
|
||||||
|
void update_record(TRectype& clifomagrec) const;
|
||||||
|
|
||||||
TSaldo_mag_clifo(int codes, char tipocf, const char * codcf, int codindsp, const char * codart, const char * livello, const char * codcaus);
|
TSaldo_mag_clifo(int codes, char tipocf, const char * codcf, int codindsp, const char * codart, const char * livello, const char * codcaus);
|
||||||
TSaldo_mag_clifo(const TRectype & head, const TRectype & row);
|
TSaldo_mag_clifo(const TRectype & head, const TRectype & row);
|
||||||
TSaldo_mag_clifo(const TSaldo_mag_clifo & s);
|
TSaldo_mag_clifo(const TSaldo_mag_clifo & s);
|
||||||
@ -167,6 +306,53 @@ int TSaldo_mag_clifo::operator==(const TSaldo_mag_clifo & s) const
|
|||||||
(_codcaus == s._codcaus);
|
(_codcaus == s._codcaus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const TSaldo_mag_clifo & TSaldo_mag_clifo::operator+=(const TSaldo_mag_clifo & s)
|
||||||
|
{
|
||||||
|
if (*this == s)
|
||||||
|
add(s);
|
||||||
|
#ifdef DBG
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TString msg(TR("Somma di saldi incompatibili : "));
|
||||||
|
|
||||||
|
msg << *this << " - " << s;
|
||||||
|
error_box(msg);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TSaldo_mag_clifo & TSaldo_mag_clifo::operator-=(const TSaldo_mag_clifo & s)
|
||||||
|
{
|
||||||
|
if (*this == s)
|
||||||
|
sub(s);
|
||||||
|
#ifdef DBG
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TString msg(TR("Somma di saldi incompatibili : "));
|
||||||
|
|
||||||
|
msg << *this << " - " << s;
|
||||||
|
error_box(msg);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * TSaldo_mag_clifo::operator<<(const TSaldo_mag_clifo& s) const
|
||||||
|
{
|
||||||
|
TString & tmp = get_tmp_string(256);
|
||||||
|
|
||||||
|
tmp << (tipocf() == 'C' ? "Cliente " : "Fornitore ") << codcf();
|
||||||
|
if (codindsp() != 0)
|
||||||
|
tmp << " Indirizzo " << codindsp();
|
||||||
|
tmp << "Articolo " << codart();
|
||||||
|
if (livello().full())
|
||||||
|
tmp << " Livello " << livello();
|
||||||
|
tmp << " Esercizio " << codes()
|
||||||
|
<< " Causale " << codcaus();
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
TToken_string & TSaldo_mag_clifo::key(const TRectype & head, const TRectype & row)
|
TToken_string & TSaldo_mag_clifo::key(const TRectype & head, const TRectype & row)
|
||||||
{
|
{
|
||||||
TToken_string& key = get_tmp_string();
|
TToken_string& key = get_tmp_string();
|
||||||
@ -184,6 +370,74 @@ TToken_string & TSaldo_mag_clifo::key(const TRectype & head, const TRectype & ro
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TSaldo_mag_clifo::putkey(TRectype& clifomag) const
|
||||||
|
{
|
||||||
|
clifomag.zero();
|
||||||
|
clifomag.put(CLIFOGIAC_ANNOES, codes());
|
||||||
|
clifomag.put(CLIFOGIAC_TIPOCF, tipocf());
|
||||||
|
clifomag.put(CLIFOGIAC_CODCF, codcf());
|
||||||
|
clifomag.put(CLIFOGIAC_INDSPED, codindsp());
|
||||||
|
clifomag.put(CLIFOGIAC_CODART, codart());
|
||||||
|
clifomag.put(CLIFOGIAC_LIVELLO, livello());
|
||||||
|
}
|
||||||
|
|
||||||
|
// aggiorna i saldi del record corrente
|
||||||
|
// in base alla causale e alla modifica fatta (con segno + o -)
|
||||||
|
// aggiorna i saldi del record corrente
|
||||||
|
// in base alla causale e alla modifica fatta (con segno + o -)
|
||||||
|
void TSaldo_mag_clifo::update_record(TRectype & clifomagrec) const
|
||||||
|
{
|
||||||
|
const TCausale_magazzino& caus = cached_causale_magazzino(codcaus());
|
||||||
|
|
||||||
|
if (caus.update_qta())
|
||||||
|
{
|
||||||
|
const real diff = quant();
|
||||||
|
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_GIAC, -diff, caus.sgn(s_giac)); // update ..
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_ACQ, diff, caus.sgn(s_ven)); // update ..
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_ENT, diff, caus.sgn(s_ent));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_VEN, diff, caus.sgn(s_acq));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USC, diff, caus.sgn(s_usc));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_ORDC, diff, caus.sgn(s_ordf));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_ORDF, diff, caus.sgn(s_ordc));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_RIM, -diff, caus.sgn(s_rim));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_SCARTI, -diff, caus.sgn(s_scart));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_INCL, diff, caus.sgn(s_acl));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_ACL, diff, caus.sgn(s_incl));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_PRODCOMP, -diff, caus.sgn(s_prodc));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_PRODFIN, -diff, caus.sgn(s_prodf));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_DOTIN, diff, caus.sgn(s_dotin));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_DOTOD, diff, caus.sgn(s_dotod));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_DOTTM, diff, caus.sgn(s_dottm));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_CONSANNO, diff, caus.sgn(s_consanno));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USER1, diff, caus.sgn(s_user1));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USER2, diff, caus.sgn(s_user2));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USER3, diff, caus.sgn(s_user3));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USER4, diff, caus.sgn(s_user4));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USER5, diff, caus.sgn(s_user5));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USER6, diff, caus.sgn(s_user6));
|
||||||
|
}
|
||||||
|
if (caus.update_val())
|
||||||
|
{
|
||||||
|
const real diff_val = valore();
|
||||||
|
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_VALACQ, diff_val, caus.sgn(s_ven)); // update ..
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_VALENT, diff_val, caus.sgn(s_ent));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_VALVEN, diff_val, caus.sgn(s_acq));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_VALUSC, diff_val, caus.sgn(s_usc));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_VALORDC, diff_val, caus.sgn(s_ordf));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_VALORDF, diff_val, caus.sgn(s_ordc));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_VALRIM, -diff_val, caus.sgn(s_rim));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_VALSCARTI, -diff_val, caus.sgn(s_scart));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USERVAL1, diff_val, caus.sgn(s_user1));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USERVAL2, diff_val, caus.sgn(s_user2));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USERVAL3, diff_val, caus.sgn(s_user3));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USERVAL4, diff_val, caus.sgn(s_user4));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USERVAL5, diff_val, caus.sgn(s_user5));
|
||||||
|
update_balance(clifomagrec, CLIFOGIAC_USERVAL6, diff_val, caus.sgn(s_user6));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TSaldo_mag_clifo::TSaldo_mag_clifo(const TRectype & head, const TRectype & row)
|
TSaldo_mag_clifo::TSaldo_mag_clifo(const TRectype & head, const TRectype & row)
|
||||||
{
|
{
|
||||||
_codes = head.get_int(MOVMAG_ANNOES);
|
_codes = head.get_int(MOVMAG_ANNOES);
|
||||||
@ -204,6 +458,10 @@ TSaldo_mag_clifo::TSaldo_mag_clifo(const TSaldo_mag_clifo & s)
|
|||||||
_valore = s._valore;
|
_valore = s._valore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool __cache_saldi = false;
|
||||||
|
static TAssoc_array __saldi_mag;
|
||||||
|
static TAssoc_array __saldi_mag_clifo;
|
||||||
|
|
||||||
// ********************************
|
// ********************************
|
||||||
// TMov_mag
|
// TMov_mag
|
||||||
|
|
||||||
@ -480,7 +738,7 @@ bool TMov_mag::force_update_bal()
|
|||||||
_saldi_mag.destroy();
|
_saldi_mag.destroy();
|
||||||
_saldi_mag_clifo.destroy();
|
_saldi_mag_clifo.destroy();
|
||||||
add_saldi();
|
add_saldi();
|
||||||
return update_balances(false);
|
return __cache_saldi ? true : update_balances(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TMov_mag::renum_mov(const long numreg)
|
void TMov_mag::renum_mov(const long numreg)
|
||||||
@ -499,11 +757,14 @@ void TMov_mag::add_saldi(const bool plus)
|
|||||||
{
|
{
|
||||||
const TRectype & rec = b[i];
|
const TRectype & rec = b[i];
|
||||||
TToken_string & key_mag = TSaldo_mag::key(*this, rec);
|
TToken_string & key_mag = TSaldo_mag::key(*this, rec);
|
||||||
TSaldo_mag * s_mag = (TSaldo_mag*) _saldi_mag.objptr(key_mag);
|
TSaldo_mag * s_mag = (TSaldo_mag*)(__cache_saldi ? __saldi_mag.objptr(key_mag) : _saldi_mag.objptr(key_mag));
|
||||||
|
|
||||||
if (s_mag == NULL)
|
if (s_mag == NULL)
|
||||||
{
|
{
|
||||||
s_mag = new TSaldo_mag(*this, rec);
|
s_mag = new TSaldo_mag(*this, rec);
|
||||||
|
if (__cache_saldi)
|
||||||
|
__saldi_mag.add(key_mag, s_mag);
|
||||||
|
else
|
||||||
_saldi_mag.add(key_mag, s_mag);
|
_saldi_mag.add(key_mag, s_mag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -520,11 +781,14 @@ void TMov_mag::add_saldi(const bool plus)
|
|||||||
if (caus.aggiorna_clifo()&& get_long(MOVMAG_CODCF) > 0L)
|
if (caus.aggiorna_clifo()&& get_long(MOVMAG_CODCF) > 0L)
|
||||||
{
|
{
|
||||||
TToken_string & key_clifo = TSaldo_mag_clifo::key(*this, rec);
|
TToken_string & key_clifo = TSaldo_mag_clifo::key(*this, rec);
|
||||||
TSaldo_mag_clifo * s_clifo = (TSaldo_mag_clifo*) _saldi_mag_clifo.objptr(key_clifo);
|
TSaldo_mag_clifo * s_clifo = (TSaldo_mag_clifo*)(__cache_saldi ? __saldi_mag_clifo.objptr(key_clifo) : _saldi_mag_clifo.objptr(key_clifo));
|
||||||
|
|
||||||
if (s_clifo == NULL)
|
if (s_clifo == NULL)
|
||||||
{
|
{
|
||||||
s_clifo = new TSaldo_mag_clifo(*this, rec);
|
s_clifo = new TSaldo_mag_clifo(*this, rec);
|
||||||
|
if (__cache_saldi)
|
||||||
|
__saldi_mag_clifo.add(key_clifo, s_clifo);
|
||||||
|
else
|
||||||
_saldi_mag_clifo.add(key_clifo, s_clifo);
|
_saldi_mag_clifo.add(key_clifo, s_clifo);
|
||||||
}
|
}
|
||||||
s_clifo->add(quant, valore, plus);
|
s_clifo->add(quant, valore, plus);
|
||||||
@ -561,27 +825,6 @@ bool TMov_mag::lock_anamag(const char *codart)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TMov_mag::giac_putkey(TRectype& mag, const TSaldo_mag & s)
|
|
||||||
{
|
|
||||||
mag.zero();
|
|
||||||
mag.put(MAG_ANNOES, s.codes());
|
|
||||||
mag.put(MAG_CODMAG, s.codmag());
|
|
||||||
mag.put(MAG_CODART, s.codart());
|
|
||||||
mag.put(MAG_LIVELLO, s.livello());
|
|
||||||
}
|
|
||||||
|
|
||||||
void TMov_mag::giac_putkey_clifo(TRectype& clifomag, const TSaldo_mag_clifo & s)
|
|
||||||
{
|
|
||||||
clifomag.zero();
|
|
||||||
clifomag.put(CLIFOGIAC_ANNOES, s.codes());
|
|
||||||
clifomag.put(CLIFOGIAC_TIPOCF, s.tipocf());
|
|
||||||
clifomag.put(CLIFOGIAC_CODCF, s.codcf());
|
|
||||||
clifomag.put(CLIFOGIAC_INDSPED, s.codindsp());
|
|
||||||
clifomag.put(CLIFOGIAC_CODART, s.codart());
|
|
||||||
clifomag.put(CLIFOGIAC_LIVELLO, s.livello());
|
|
||||||
}
|
|
||||||
|
|
||||||
// aggiorna tutti i saldi in base alle modifiche fatte.
|
// aggiorna tutti i saldi in base alle modifiche fatte.
|
||||||
// il lock su anagrafica dovrebbe garantire il lock su tutte le giacenze dell'articolo
|
// il lock su anagrafica dovrebbe garantire il lock su tutte le giacenze dell'articolo
|
||||||
bool TMov_mag::update_balances(bool lock)
|
bool TMov_mag::update_balances(bool lock)
|
||||||
@ -606,39 +849,41 @@ bool TMov_mag::update_balances(bool lock)
|
|||||||
if (_saldi_mag.items() > 0)
|
if (_saldi_mag.items() > 0)
|
||||||
{
|
{
|
||||||
TFast_isamfile mag(LF_MAG);
|
TFast_isamfile mag(LF_MAG);
|
||||||
mag.setkey(2);
|
|
||||||
TRectype& magcurr = mag.curr();
|
TRectype& magcurr = mag.curr();
|
||||||
|
|
||||||
TString_array keys_mag;
|
TString_array keys_mag;
|
||||||
|
|
||||||
|
mag.setkey(2);
|
||||||
_saldi_mag.get_keys(keys_mag);
|
_saldi_mag.get_keys(keys_mag);
|
||||||
keys_mag.sort();
|
keys_mag.sort();
|
||||||
int err = NOERR;
|
|
||||||
|
|
||||||
TString msg;
|
int err = NOERR;
|
||||||
msg << TR("Aggiornamento saldi del movimento ") << get(MOVMAG_NUMREG)
|
TString msg;
|
||||||
|
|
||||||
|
msg << TR("Aggiornamento saldi del movimento ") << get(MOVMAG_NUMREG)
|
||||||
<< ": " << get(MOVMAG_DESCR);
|
<< ": " << get(MOVMAG_DESCR);
|
||||||
TProgress_monitor pi(keys_mag.items(), msg, false);
|
|
||||||
FOR_EACH_ARRAY_ROW(keys_mag, r, curr_key)
|
TProgress_monitor pi(keys_mag.items(), msg, false);
|
||||||
|
|
||||||
|
FOR_EACH_ARRAY_ROW(keys_mag, r, curr_key)
|
||||||
{
|
{
|
||||||
const TSaldo_mag& saldo = (const TSaldo_mag&)_saldi_mag[*curr_key];
|
const TSaldo_mag& saldo = (const TSaldo_mag&)_saldi_mag[*curr_key];
|
||||||
const TCodice_articolo& codart = saldo.codart();
|
const TCodice_articolo& codart = saldo.codart();
|
||||||
|
|
||||||
TArticolo_giacenza& art = cached_article_balances(codart);
|
TArticolo_giacenza& art = cached_article_balances(codart);
|
||||||
const TCausale_magazzino& caus = cached_causale_magazzino(saldo.codcaus());
|
const TCausale_magazzino& caus = cached_causale_magazzino(saldo.codcaus());
|
||||||
|
|
||||||
giac_putkey(magcurr, saldo);
|
saldo.putkey(magcurr);
|
||||||
err = art.lock_and_prompt_giac(magcurr, lock ? _testandlock : _nolock);
|
err = art.lock_and_prompt_giac(magcurr, lock ? _testandlock : _nolock);
|
||||||
if (err != NOERR)
|
if (err != NOERR)
|
||||||
{
|
{
|
||||||
TRecord_array& sld = art.mag(saldo.codes());
|
TRecord_array& sld = art.mag(saldo.codes());
|
||||||
const int nriga = sld.rows() + 1;
|
const int nriga = sld.rows() + 1;
|
||||||
giac_putkey(magcurr, saldo);
|
saldo.putkey(magcurr);
|
||||||
magcurr.put(MAG_NRIGA, nriga);
|
magcurr.put(MAG_NRIGA, nriga);
|
||||||
sld.add_row(magcurr);
|
sld.add_row(magcurr);
|
||||||
err = mag.write();
|
err = mag.write();
|
||||||
CHECKD(err == NOERR, "Errore di write:" , err);
|
CHECKD(err == NOERR, "Errore di write:" , err);
|
||||||
}
|
}
|
||||||
update_balances(magcurr, saldo, caus);
|
saldo.update_record(magcurr);
|
||||||
err = mag.rewrite();
|
err = mag.rewrite();
|
||||||
if (err != NOERR)
|
if (err != NOERR)
|
||||||
updated_bal = false;
|
updated_bal = false;
|
||||||
@ -652,48 +897,57 @@ bool TMov_mag::update_balances(bool lock)
|
|||||||
if (_saldi_mag_clifo.items() > 0)
|
if (_saldi_mag_clifo.items() > 0)
|
||||||
{
|
{
|
||||||
TFast_isamfile clifomag(LF_CLIFOGIAC);
|
TFast_isamfile clifomag(LF_CLIFOGIAC);
|
||||||
clifomag.setkey(2);
|
|
||||||
TRectype& clifomag_curr = clifomag.curr();
|
TRectype& clifomag_curr = clifomag.curr();
|
||||||
|
|
||||||
TString_array keys_clifo;
|
TString_array keys_clifo;
|
||||||
|
|
||||||
|
clifomag.setkey(2);
|
||||||
_saldi_mag_clifo.get_keys(keys_clifo);
|
_saldi_mag_clifo.get_keys(keys_clifo);
|
||||||
keys_clifo.sort();
|
keys_clifo.sort();
|
||||||
|
|
||||||
int err = NOERR;
|
int err = NOERR;
|
||||||
|
TString msg;
|
||||||
|
|
||||||
|
msg << TR("Aggiornamento saldi del movimento ") << get(MOVMAG_NUMREG)
|
||||||
|
<< ": " << get(MOVMAG_DESCR);
|
||||||
|
|
||||||
|
TProgress_monitor pi(keys_clifo.items(), msg, false);
|
||||||
|
|
||||||
for (TToken_string* curr_key = (TToken_string*)keys_clifo.first_item();
|
for (TToken_string* curr_key = (TToken_string*)keys_clifo.first_item();
|
||||||
curr_key != NULL; curr_key = (TToken_string*)keys_clifo.succ_item())
|
curr_key != NULL; curr_key = (TToken_string*)keys_clifo.succ_item())
|
||||||
{
|
{
|
||||||
TSaldo_mag_clifo & saldo=(TSaldo_mag_clifo &)_saldi_mag_clifo[*curr_key];
|
TSaldo_mag_clifo & saldo=(TSaldo_mag_clifo &)_saldi_mag_clifo[*curr_key];
|
||||||
const TCodice_articolo& codart = saldo.codart();
|
const TCodice_articolo& codart = saldo.codart();
|
||||||
|
|
||||||
TArticolo_giacenza & art = cached_article_balances(codart);
|
TArticolo_giacenza & art = cached_article_balances(codart);
|
||||||
giac_putkey_clifo(clifomag_curr, saldo);
|
|
||||||
|
saldo.putkey(clifomag_curr);
|
||||||
err = art.lock_and_prompt_giac_cf(clifomag_curr, lock ? _testandlock : _nolock);
|
err = art.lock_and_prompt_giac_cf(clifomag_curr, lock ? _testandlock : _nolock);
|
||||||
if (err != NOERR)
|
if (err != NOERR)
|
||||||
{
|
{
|
||||||
// non trovato: aggiungo
|
// non trovato: aggiungo
|
||||||
clifomag.setkey(1);
|
clifomag.setkey(1);
|
||||||
giac_putkey_clifo(clifomag_curr, saldo);
|
saldo.putkey(clifomag_curr);
|
||||||
clifomag_curr.put(CLIFOGIAC_NRIGA, 999);
|
clifomag_curr.put(CLIFOGIAC_NRIGA, 999);
|
||||||
if (clifomag.read(_isgteq) == NOERR)
|
if (clifomag.read(_isgteq) == NOERR)
|
||||||
clifomag.prev();
|
clifomag.prev();
|
||||||
|
saldo.putkey(clifomag_curr);
|
||||||
|
|
||||||
int nriga = 1;
|
int nriga = 1;
|
||||||
|
|
||||||
if (clifomag_curr.get_int(CLIFOGIAC_ANNOES) == saldo.codes() &&
|
if (clifomag_curr.get_int(CLIFOGIAC_ANNOES) == saldo.codes() &&
|
||||||
clifomag_curr.get_char(CLIFOGIAC_TIPOCF) == saldo.tipocf() &&
|
clifomag_curr.get_char(CLIFOGIAC_TIPOCF) == saldo.tipocf() &&
|
||||||
clifomag_curr.get(CLIFOGIAC_CODCF) == saldo.codcf() &&
|
clifomag_curr.get(CLIFOGIAC_CODCF) == saldo.codcf() &&
|
||||||
clifomag_curr.get(CLIFOGIAC_CODART) == saldo.codart() &&
|
clifomag_curr.get(CLIFOGIAC_CODART) == saldo.codart() &&
|
||||||
clifomag_curr.get(CLIFOGIAC_LIVELLO ) == saldo.livello())
|
clifomag_curr.get(CLIFOGIAC_LIVELLO) == saldo.livello())
|
||||||
nriga = clifomag_curr.get_int(CLIFOGIAC_NRIGA) + 1;
|
nriga = clifomag_curr.get_int(CLIFOGIAC_NRIGA) + 1;
|
||||||
giac_putkey_clifo(clifomag_curr, saldo);
|
|
||||||
clifomag_curr.put(CLIFOGIAC_NRIGA, nriga);
|
clifomag_curr.put(CLIFOGIAC_NRIGA, nriga);
|
||||||
clifomag.write();
|
clifomag.write();
|
||||||
}
|
}
|
||||||
update_balances_clifo(clifomag_curr, saldo);
|
saldo.update_record(clifomag_curr);
|
||||||
clifomag.rewrite();
|
clifomag.rewrite();
|
||||||
|
|
||||||
if (lock)
|
if (lock)
|
||||||
art.unlock_giac_cf(clifomag_curr);
|
art.unlock_giac_cf(clifomag_curr);
|
||||||
|
pi.add_status();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_saldi_mag.destroy();
|
_saldi_mag.destroy();
|
||||||
@ -701,115 +955,6 @@ bool TMov_mag::update_balances(bool lock)
|
|||||||
return updated_bal;
|
return updated_bal;
|
||||||
}
|
}
|
||||||
|
|
||||||
// aggiorna i saldi del record corrente
|
|
||||||
// in base alla causale e alla modifica fatta (con segno + o -)
|
|
||||||
void TMov_mag::update_balances(TRectype& magrec, const TSaldo_mag& s, const TCausale_magazzino& caus) const
|
|
||||||
{
|
|
||||||
if (caus.update_qta())
|
|
||||||
{
|
|
||||||
const real diff = s.quant();
|
|
||||||
if (!diff.is_zero())
|
|
||||||
{
|
|
||||||
update_balance(magrec, MAG_GIAC, diff, caus.sgn(s_giac)); // update ..
|
|
||||||
update_balance(magrec, MAG_ACQ, diff, caus.sgn(s_acq)); // update ..
|
|
||||||
update_balance(magrec, MAG_ENT, diff, caus.sgn(s_ent));
|
|
||||||
update_balance(magrec, MAG_VEN, diff, caus.sgn(s_ven));
|
|
||||||
update_balance(magrec, MAG_USC, diff, caus.sgn(s_usc));
|
|
||||||
update_balance(magrec, MAG_ORDC, diff, caus.sgn(s_ordc));
|
|
||||||
update_balance(magrec, MAG_ORDF, diff, caus.sgn(s_ordf));
|
|
||||||
update_balance(magrec, MAG_RIM, diff, caus.sgn(s_rim));
|
|
||||||
update_balance(magrec, MAG_SCARTI, diff, caus.sgn(s_scart));
|
|
||||||
update_balance(magrec, MAG_INCL, diff, caus.sgn(s_incl));
|
|
||||||
update_balance(magrec, MAG_ACL, diff, caus.sgn(s_acl));
|
|
||||||
update_balance(magrec, MAG_PRODCOMP, diff, caus.sgn(s_prodc));
|
|
||||||
update_balance(magrec, MAG_PRODFIN, diff, caus.sgn(s_prodf));
|
|
||||||
update_balance(magrec, MAG_NLABEL, diff, caus.sgn(s_label));
|
|
||||||
update_balance(magrec, MAG_USER1, diff, caus.sgn(s_user1));
|
|
||||||
update_balance(magrec, MAG_USER2, diff, caus.sgn(s_user2));
|
|
||||||
update_balance(magrec, MAG_USER3, diff, caus.sgn(s_user3));
|
|
||||||
update_balance(magrec, MAG_USER4, diff, caus.sgn(s_user4));
|
|
||||||
update_balance(magrec, MAG_USER5, diff, caus.sgn(s_user5));
|
|
||||||
update_balance(magrec, MAG_USER6, diff, caus.sgn(s_user6));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (caus.update_val())
|
|
||||||
{
|
|
||||||
const real diff_val = s.valore();
|
|
||||||
if (!diff_val.is_zero())
|
|
||||||
{
|
|
||||||
update_balance(magrec, MAG_VALACQ, diff_val, caus.sgn(s_acq)); // update ..
|
|
||||||
update_balance(magrec, MAG_VALENT, diff_val, caus.sgn(s_ent));
|
|
||||||
update_balance(magrec, MAG_VALVEN, diff_val, caus.sgn(s_ven));
|
|
||||||
update_balance(magrec, MAG_VALUSC, diff_val, caus.sgn(s_usc));
|
|
||||||
update_balance(magrec, MAG_VALORDC, diff_val, caus.sgn(s_ordc));
|
|
||||||
update_balance(magrec, MAG_VALORDF, diff_val, caus.sgn(s_ordf));
|
|
||||||
update_balance(magrec, MAG_VALRIM, diff_val, caus.sgn(s_rim));
|
|
||||||
update_balance(magrec, MAG_VALSCARTI, diff_val, caus.sgn(s_scart));
|
|
||||||
update_balance(magrec, MAG_USERVAL1, diff_val, caus.sgn(s_user1));
|
|
||||||
update_balance(magrec, MAG_USERVAL2, diff_val, caus.sgn(s_user2));
|
|
||||||
update_balance(magrec, MAG_USERVAL3, diff_val, caus.sgn(s_user3));
|
|
||||||
update_balance(magrec, MAG_USERVAL4, diff_val, caus.sgn(s_user4));
|
|
||||||
update_balance(magrec, MAG_USERVAL5, diff_val, caus.sgn(s_user5));
|
|
||||||
update_balance(magrec, MAG_USERVAL6, diff_val, caus.sgn(s_user6));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// aggiorna i saldi del record corrente
|
|
||||||
// in base alla causale e alla modifica fatta (con segno + o -)
|
|
||||||
void TMov_mag::update_balances_clifo(TRectype & clifomagrec, const TSaldo_mag_clifo & s)
|
|
||||||
{
|
|
||||||
const TCausale_magazzino& caus = cached_causale_magazzino(s.codcaus());
|
|
||||||
|
|
||||||
if (caus.update_qta())
|
|
||||||
{
|
|
||||||
const real diff = s.quant();
|
|
||||||
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_GIAC, -diff, caus.sgn(s_giac)); // update ..
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_ACQ, diff, caus.sgn(s_ven)); // update ..
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_ENT, diff, caus.sgn(s_usc));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_VEN, diff, caus.sgn(s_acq));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USC, diff, caus.sgn(s_ent));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_ORDC, diff, caus.sgn(s_ordf));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_ORDF, diff, caus.sgn(s_ordc));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_RIM, -diff, caus.sgn(s_rim));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_SCARTI, -diff, caus.sgn(s_scart));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_INCL, diff, caus.sgn(s_acl));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_ACL, diff, caus.sgn(s_incl));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_PRODCOMP, -diff, caus.sgn(s_prodc));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_PRODFIN, -diff, caus.sgn(s_prodf));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_DOTIN, diff, caus.sgn(s_dotin));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_DOTOD, diff, caus.sgn(s_dotod));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_DOTTM, diff, caus.sgn(s_dottm));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_CONSANNO, diff, caus.sgn(s_consanno));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USER1, diff, caus.sgn(s_user1));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USER2, diff, caus.sgn(s_user2));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USER3, diff, caus.sgn(s_user3));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USER4, diff, caus.sgn(s_user4));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USER5, diff, caus.sgn(s_user5));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USER6, diff, caus.sgn(s_user6));
|
|
||||||
}
|
|
||||||
if (caus.update_val())
|
|
||||||
{
|
|
||||||
const real diff_val = s.valore();
|
|
||||||
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_VALACQ, diff_val, caus.sgn(s_ven)); // update ..
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_VALENT, diff_val, caus.sgn(s_usc));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_VALVEN, diff_val, caus.sgn(s_acq));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_VALUSC, diff_val, caus.sgn(s_ven));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_VALORDC, diff_val, caus.sgn(s_ordf));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_VALORDF, diff_val, caus.sgn(s_ordc));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_VALRIM, -diff_val, caus.sgn(s_rim));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_VALSCARTI, -diff_val, caus.sgn(s_scart));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USERVAL1, diff_val, caus.sgn(s_user1));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USERVAL2, diff_val, caus.sgn(s_user2));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USERVAL3, diff_val, caus.sgn(s_user3));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USERVAL4, diff_val, caus.sgn(s_user4));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USERVAL5, diff_val, caus.sgn(s_user5));
|
|
||||||
update_balance(clifomagrec, CLIFOGIAC_USERVAL6, diff_val, caus.sgn(s_user6));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TMov_mag::update_balances(TRectype& magrec, int numrig, bool plus)
|
void TMov_mag::update_balances(TRectype& magrec, int numrig, bool plus)
|
||||||
{
|
{
|
||||||
const TRectype& rec = body()[numrig];
|
const TRectype& rec = body()[numrig];
|
||||||
@ -823,8 +968,7 @@ void TMov_mag::update_balances(TRectype& magrec, int numrig, bool plus)
|
|||||||
const real valore = (quant.is_zero() && caus.update_val()) ? rec.get_real(RMOVMAG_PREZZO) : rec.get_real(RMOVMAG_PREZZO) * quant;
|
const real valore = (quant.is_zero() && caus.update_val()) ? rec.get_real(RMOVMAG_PREZZO) : rec.get_real(RMOVMAG_PREZZO) * quant;
|
||||||
|
|
||||||
saldo.add(quant, valore, plus);
|
saldo.add(quant, valore, plus);
|
||||||
|
return saldo.update_record(magrec);
|
||||||
return update_balances(magrec, saldo, caus);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TMov_mag::update_balances_clifo(TRectype& cliforec, int numrig, bool plus)
|
void TMov_mag::update_balances_clifo(TRectype& cliforec, int numrig, bool plus)
|
||||||
@ -841,7 +985,7 @@ void TMov_mag::update_balances_clifo(TRectype& cliforec, int numrig, bool plus)
|
|||||||
|
|
||||||
saldo.add(quant, valore, plus);
|
saldo.add(quant, valore, plus);
|
||||||
|
|
||||||
return update_balances_clifo(cliforec, saldo);
|
return saldo.update_record(cliforec);
|
||||||
}
|
}
|
||||||
|
|
||||||
int TMov_mag::codice_esercizio(const TDate& d) const
|
int TMov_mag::codice_esercizio(const TDate& d) const
|
||||||
@ -851,13 +995,7 @@ int TMov_mag::codice_esercizio(const TDate& d) const
|
|||||||
|
|
||||||
void TMov_mag::update_balance(TRectype& rec, const char* fieldname, const real& val, const int sgn) const
|
void TMov_mag::update_balance(TRectype& rec, const char* fieldname, const real& val, const int sgn) const
|
||||||
{
|
{
|
||||||
if (sgn != 0 && !val.is_zero())
|
::update_balance(rec, fieldname, val, sgn);
|
||||||
{
|
|
||||||
if (sgn > 0)
|
|
||||||
rec.add(fieldname, val);
|
|
||||||
else
|
|
||||||
rec.add(fieldname, -val);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TBalance_params
|
struct TBalance_params
|
||||||
@ -914,14 +1052,12 @@ void reset_clifogiac(TRectype& rec, const TRectype& oldrec, bool closed)
|
|||||||
rec.zero(CLIFOGIAC_ORDC);
|
rec.zero(CLIFOGIAC_ORDC);
|
||||||
rec.zero(CLIFOGIAC_VALORDC);
|
rec.zero(CLIFOGIAC_VALORDC);
|
||||||
}
|
}
|
||||||
|
rec.put(CLIFOGIAC_DOTOD, oldrec.get(CLIFOGIAC_DOTOD));
|
||||||
|
rec.put(CLIFOGIAC_DOTIN, oldrec.get(CLIFOGIAC_DOTIN));
|
||||||
rec.put(CLIFOGIAC_DOTOD, oldrec.get(CLIFOGIAC_DOTOD));
|
rec.put(CLIFOGIAC_DOTTM, oldrec.get(CLIFOGIAC_DOTTM));
|
||||||
rec.put(CLIFOGIAC_DOTIN, oldrec.get(CLIFOGIAC_DOTIN));
|
}
|
||||||
rec.put(CLIFOGIAC_DOTTM, oldrec.get(CLIFOGIAC_DOTTM));
|
else
|
||||||
}
|
{
|
||||||
else
|
|
||||||
{
|
|
||||||
for (int i = 0; zero_fields[i]; i++)
|
for (int i = 0; zero_fields[i]; i++)
|
||||||
rec.zero(zero_fields[i]);
|
rec.zero(zero_fields[i]);
|
||||||
rec.zero(CLIFOGIAC_DOTIN);
|
rec.zero(CLIFOGIAC_DOTIN);
|
||||||
@ -931,6 +1067,7 @@ void reset_clifogiac(TRectype& rec, const TRectype& oldrec, bool closed)
|
|||||||
rec.zero(CLIFOGIAC_CONSANNO);
|
rec.zero(CLIFOGIAC_CONSANNO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
void update_clifogiac(TRectype & rec, const TRectype & oldrec)
|
void update_clifogiac(TRectype & rec, const TRectype & oldrec)
|
||||||
{
|
{
|
||||||
if (!oldrec.empty())
|
if (!oldrec.empty())
|
||||||
@ -959,11 +1096,12 @@ void update_clifogiac(TRectype & rec, const TRectype & oldrec)
|
|||||||
rec.add(CLIFOGIAC_ORDC, oldrec.get_real(CLIFOGIAC_ORDC));
|
rec.add(CLIFOGIAC_ORDC, oldrec.get_real(CLIFOGIAC_ORDC));
|
||||||
rec.add(CLIFOGIAC_VALORDC, oldrec.get_real(CLIFOGIAC_VALORDC));
|
rec.add(CLIFOGIAC_VALORDC, oldrec.get_real(CLIFOGIAC_VALORDC));
|
||||||
}
|
}
|
||||||
rec.add(CLIFOGIAC_DOTOD, oldrec.get_real(CLIFOGIAC_DOTOD));
|
// rec.add(CLIFOGIAC_DOTOD, oldrec.get_real(CLIFOGIAC_DOTOD));
|
||||||
rec.add(CLIFOGIAC_DOTIN, oldrec.get_real(CLIFOGIAC_DOTIN));
|
// rec.add(CLIFOGIAC_DOTIN, oldrec.get_real(CLIFOGIAC_DOTIN));
|
||||||
rec.add(CLIFOGIAC_DOTTM, oldrec.get_real(CLIFOGIAC_DOTTM));
|
// rec.add(CLIFOGIAC_DOTTM, oldrec.get_real(CLIFOGIAC_DOTTM));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
HIDDEN bool rel_reset_clifogiac(const TRelation& rel, void* pJolly)
|
HIDDEN bool rel_reset_clifogiac(const TRelation& rel, void* pJolly)
|
||||||
{
|
{
|
||||||
@ -1060,8 +1198,8 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
|
|||||||
// Compattamento giacenze dopo cancellazione
|
// Compattamento giacenze dopo cancellazione
|
||||||
{
|
{
|
||||||
//prefix().close_closeable_isamfiles(); // Altrimenti segnala -69 durante la pack
|
//prefix().close_closeable_isamfiles(); // Altrimenti segnala -69 durante la pack
|
||||||
TSystemisamfile mag(LF_MAG);
|
// TSystemisamfile mag(LF_MAG);
|
||||||
mag.pack(true, true);
|
// mag.pack(true, true);
|
||||||
|
|
||||||
/* Mi da sempre errore di compattamento
|
/* Mi da sempre errore di compattamento
|
||||||
if (p.codesprec > 0)
|
if (p.codesprec > 0)
|
||||||
@ -1076,14 +1214,111 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
|
|||||||
bool ok = true;
|
bool ok = true;
|
||||||
{
|
{
|
||||||
TRelation relmovmag(LF_MOVMAG);
|
TRelation relmovmag(LF_MOVMAG);
|
||||||
TRectype& rec = relmovmag.curr();
|
TRectype filter(LF_MOVMAG);
|
||||||
rec.put(MOVMAG_ANNOES, codes);
|
filter.put(MOVMAG_ANNOES, codes);
|
||||||
|
|
||||||
|
TCursor mov_cur(&relmovmag, "", 2, &filter, &filter);
|
||||||
|
|
||||||
|
mov_cur = 0L; //non togliere
|
||||||
|
mov_cur.freeze(); // non togliere
|
||||||
|
|
||||||
TCursor mov_cur(&relmovmag, "", 2, &rec, &rec);
|
|
||||||
relmovmag.lfile().set_curr(new TMov_mag());
|
relmovmag.lfile().set_curr(new TMov_mag());
|
||||||
msg.format(FR("Ricostruzione saldi esercizio %04d ..."), codes);
|
msg.format(FR("Ricostruzione saldi esercizio %04d ..."), codes);
|
||||||
|
__cache_saldi = true;
|
||||||
mov_cur.scan(recalc_mov, (void*)&ok, msg);
|
mov_cur.scan(recalc_mov, (void*)&ok, msg);
|
||||||
|
|
||||||
|
if (__cache_saldi && __saldi_mag.items() > 0)
|
||||||
|
{
|
||||||
|
TFast_isamfile mag(LF_MAG);
|
||||||
|
TRectype& magcurr = mag.curr();
|
||||||
|
TString_array keys_mag;
|
||||||
|
|
||||||
|
mag.setkey(2);
|
||||||
|
__saldi_mag.get_keys(keys_mag);
|
||||||
|
keys_mag.sort();
|
||||||
|
|
||||||
|
TString msg = TR("Aggiornamento saldi magazzini");
|
||||||
|
TProgress_monitor pi(keys_mag.items(), msg, false);
|
||||||
|
|
||||||
|
FOR_EACH_ARRAY_ROW(keys_mag, r, curr_key)
|
||||||
|
{
|
||||||
|
const TSaldo_mag& saldo = (const TSaldo_mag&)__saldi_mag[*curr_key];
|
||||||
|
const TCodice_articolo& codart = saldo.codart();
|
||||||
|
TArticolo_giacenza& art = cached_article_balances(codart);
|
||||||
|
|
||||||
|
saldo.putkey(magcurr);
|
||||||
|
|
||||||
|
if (magcurr.read(mag, _isequal) != NOERR)
|
||||||
|
{
|
||||||
|
TRecord_array& sld = art.mag(saldo.codes());
|
||||||
|
const int nriga = sld.rows() + 1;
|
||||||
|
|
||||||
|
saldo.putkey(magcurr);
|
||||||
|
magcurr.put(MAG_NRIGA, nriga);
|
||||||
|
sld.add_row(magcurr);
|
||||||
|
int err = mag.write();
|
||||||
|
CHECKD(err == NOERR, "Errore di write:", err);
|
||||||
}
|
}
|
||||||
|
saldo.update_record(magcurr);
|
||||||
|
if (mag.rewrite() != NOERR)
|
||||||
|
ok = false;
|
||||||
|
pi.add_status();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (__cache_saldi && __saldi_mag_clifo.items() > 0)
|
||||||
|
{
|
||||||
|
TFast_isamfile clifomag(LF_CLIFOGIAC);
|
||||||
|
TRectype& clifomag_curr = clifomag.curr();
|
||||||
|
TString_array keys_clifo;
|
||||||
|
|
||||||
|
clifomag.setkey(2);
|
||||||
|
__saldi_mag_clifo.get_keys(keys_clifo);
|
||||||
|
keys_clifo.sort();
|
||||||
|
|
||||||
|
TString msg = TR("Aggiornamento saldi magazzini clienti");
|
||||||
|
TProgress_monitor pi(keys_clifo.items(), msg, false);
|
||||||
|
|
||||||
|
for (TToken_string* curr_key = (TToken_string*)keys_clifo.first_item();
|
||||||
|
curr_key != NULL; curr_key = (TToken_string*)keys_clifo.succ_item())
|
||||||
|
{
|
||||||
|
TSaldo_mag_clifo & saldo = (TSaldo_mag_clifo &)__saldi_mag_clifo[*curr_key];
|
||||||
|
const TCodice_articolo& codart = saldo.codart();
|
||||||
|
TArticolo_giacenza & art = cached_article_balances(codart);
|
||||||
|
|
||||||
|
saldo.putkey(clifomag_curr);
|
||||||
|
if (clifomag.read(_isequal) != NOERR)
|
||||||
|
{
|
||||||
|
// non trovato: aggiungo
|
||||||
|
clifomag.setkey(1);
|
||||||
|
saldo.putkey(clifomag_curr);
|
||||||
|
clifomag_curr.put(CLIFOGIAC_NRIGA, 999);
|
||||||
|
if (clifomag.read(_isgteq) == NOERR)
|
||||||
|
clifomag.prev();
|
||||||
|
saldo.putkey(clifomag_curr);
|
||||||
|
|
||||||
|
int nriga = 1;
|
||||||
|
|
||||||
|
if (clifomag_curr.get_int(CLIFOGIAC_ANNOES) == saldo.codes() &&
|
||||||
|
clifomag_curr.get_char(CLIFOGIAC_TIPOCF) == saldo.tipocf() &&
|
||||||
|
clifomag_curr.get(CLIFOGIAC_CODCF) == saldo.codcf() &&
|
||||||
|
clifomag_curr.get(CLIFOGIAC_CODART) == saldo.codart() &&
|
||||||
|
clifomag_curr.get(CLIFOGIAC_LIVELLO) == saldo.livello())
|
||||||
|
nriga = clifomag_curr.get_int(CLIFOGIAC_NRIGA) + 1;
|
||||||
|
clifomag_curr.put(CLIFOGIAC_NRIGA, nriga);
|
||||||
|
clifomag.write();
|
||||||
|
clifomag.setkey(2);
|
||||||
|
}
|
||||||
|
saldo.update_record(clifomag_curr);
|
||||||
|
if (clifomag.rewrite() != NOERR)
|
||||||
|
ok = false;
|
||||||
|
pi.add_status();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__saldi_mag.destroy();
|
||||||
|
__saldi_mag_clifo.destroy();
|
||||||
|
__cache_saldi = false;
|
||||||
|
}
|
||||||
|
|
||||||
a.close();
|
a.close();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user