Patch level : 10.0 848

Files correlati     : ve0.exe ve1.exe ve5.exe ve6.exe mg1.exe lv0.exe lv3.exe
Ricompilazione Demo : [ ]
Commento            :

MOdificata la gestione del cambio anno per le lavanderie


git-svn-id: svn://10.65.10.50/branches/R_10_00@21206 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2010-11-30 01:40:47 +00:00
parent 404b0230cb
commit eaafbe86e6
3 changed files with 100 additions and 35 deletions

View File

@ -654,40 +654,57 @@ int TArticolo_lavanderie::find_clifomag(int annoes, const char * livello, int fr
TRecord_array & TArticolo_lavanderie::clifomag(int annoes) const
{
((TArticolo_lavanderie*)this)->set_anno_lav(annoes > 0 ? annoes : esercizi().last_mag());
TRecord_array & recarr = body(LF_CLIFOGIAC);
if (recarr.rows() == 0)
const int es = annoes > 0 ? annoes : esercizi().last_mag();
const int esprec = esercizi().pred(annoes);
if (esprec != 0)
{
TString query;
const char * cod = (const char *) codice();
const int esprec = esercizi().pred(annoes);
const bool closed = esercizi()[esprec].chiusura_mag().ok();
query << "USE " << LF_CLIFOGIAC << "\n";
query << "FROM " << CLIFOGIAC_ANNOES << '=' << esprec << ' '
<< CLIFOGIAC_TIPOCF << '=' << _tipocf << ' '
<< CLIFOGIAC_CODCF << '=' << _codcf << ' '
<< CLIFOGIAC_INDSPED << '=' << _indsped << ' '
<< CLIFOGIAC_CODART << '=' << cod << '\n';
query << "TO " << CLIFOGIAC_ANNOES << '=' << esprec << ' '
<< CLIFOGIAC_TIPOCF << '=' << _tipocf << ' '
<< CLIFOGIAC_CODCF << '=' << _codcf << ' '
<< CLIFOGIAC_INDSPED << '=' << _indsped << ' '
<< CLIFOGIAC_CODART << '=' << cod << '\n';
TISAM_recordset recmag(query);
for (bool ok=recmag.move_first(); ok; ok=recmag.move_next())
if (!closed)
{
const TRecmag_lavanderie oldrec(recmag.cursor()->curr());
const int r = recarr.add_row(oldrec);
TRecmag_lavanderie & rec = (TRecmag_lavanderie &) recarr[r];
((TArticolo_lavanderie*)this)->set_anno_lav(esprec);
TRecord_array recarrprec = body(LF_CLIFOGIAC);
rec.put(CLIFOGIAC_ANNOES, annoes);
::reset_clifogiac(rec, oldrec);
((TArticolo_lavanderie*)this)->set_anno_lav(es);
TRecord_array & recarr = body(LF_CLIFOGIAC);
for (int r = 1; r <= recarr.rows(); r++)
{
TRecmag_lavanderie & rec = (TRecmag_lavanderie &) recarr[r];
int r1;
for (r1 = 1; r <= recarrprec.rows(); r++)
if (rec.get(CLIFOGIAC_INDSPED) == recarrprec[r1].get(CLIFOGIAC_INDSPED) &&
rec.get(CLIFOGIAC_CODART) == recarrprec[r1].get(CLIFOGIAC_CODART) &&
rec.get(CLIFOGIAC_LIVELLO) == recarrprec[r1].get(CLIFOGIAC_LIVELLO))
break;
if (r1 <= recarrprec.rows())
{
TRecmag_lavanderie & rec = (TRecmag_lavanderie &) recarr[r];
TRecmag_lavanderie & old = (TRecmag_lavanderie &) recarrprec[r1];
::update_clifogiac(rec, old);
recarrprec.destroy_row(r1, true);
}
}
for (int rp = 1; rp <= recarrprec.rows(); rp++)
{
TRecmag_lavanderie & old = (TRecmag_lavanderie &) recarrprec[rp];
const int r = recarr.add_row(old);
TRecmag_lavanderie & rec = (TRecmag_lavanderie &) recarr[r];
rec.put(CLIFOGIAC_ANNOES, annoes);
::reset_clifogiac(rec, old, esercizi()[esprec].chiusura_mag().ok());
}
return recarr;
}
}
((TArticolo_lavanderie*)this)->set_anno_lav(es);
TRecord_array & recarr = body(LF_CLIFOGIAC);
return recarr;
}
const TRecmag_lavanderie & TArticolo_lavanderie::find_rec(int annoes) const
{
static TRecmag_lavanderie __rec;

View File

@ -757,7 +757,8 @@ const char * add_depcode(TString & codmagdep, const char * d);
const char * get_magcode(TString & codmagdep);
const char * get_depcode(TString & codmagdep);
bool riporta_ordinato();
void reset_clifogiac(TRectype & rec, const TRectype & oldrec);
void update_clifogiac(TRectype & rec, const TRectype & oldrec);
void reset_clifogiac(TRectype & rec, const TRectype & oldrec, bool closed);
#endif //__MGLIB_H

View File

@ -877,6 +877,7 @@ void TMov_mag::update_balance(TRectype & rec, const char * fieldname, const real
struct TBalance_params
{
bool zero_giac;
bool closed;
int codes;
int codesprec;
int esprec;
@ -897,7 +898,7 @@ HIDDEN bool reset_giac(const TRelation& rel, void* pJolly)
return true;
}
void reset_clifogiac(TRectype & rec, const TRectype & oldrec)
void reset_clifogiac(TRectype & rec, const TRectype & oldrec, bool closed)
{
if (!oldrec.empty())
{
@ -922,14 +923,25 @@ void reset_clifogiac(TRectype & rec, const TRectype & oldrec)
rec.zero(CLIFOGIAC_VEN); rec.zero(CLIFOGIAC_VALVEN);
rec.zero(CLIFOGIAC_USC); rec.zero(CLIFOGIAC_VALUSC);
rec.zero(CLIFOGIAC_SCARTI);
if (!riporta_ordinato())
if (!riporta_ordinato() || !closed)
{
rec.zero(CLIFOGIAC_ORDF); rec.zero(CLIFOGIAC_VALORDF);
rec.zero(CLIFOGIAC_ORDC); rec.zero(CLIFOGIAC_VALORDC);
rec.zero(CLIFOGIAC_ORDF);
rec.zero(CLIFOGIAC_VALORDF);
rec.zero(CLIFOGIAC_ORDC);
rec.zero(CLIFOGIAC_VALORDC);
}
rec.put(CLIFOGIAC_DOTOD, oldrec.get(CLIFOGIAC_DOTOD));
rec.put(CLIFOGIAC_DOTIN, oldrec.get(CLIFOGIAC_DOTIN));
rec.put(CLIFOGIAC_DOTTM, oldrec.get(CLIFOGIAC_DOTTM));
if (closed)
{
rec.put(CLIFOGIAC_DOTOD, oldrec.get(CLIFOGIAC_DOTOD));
rec.put(CLIFOGIAC_DOTIN, oldrec.get(CLIFOGIAC_DOTIN));
rec.put(CLIFOGIAC_DOTTM, oldrec.get(CLIFOGIAC_DOTTM));
}
else
{
rec.zero(CLIFOGIAC_DOTOD);
rec.zero(CLIFOGIAC_DOTIN);
rec.zero(CLIFOGIAC_DOTTM);
}
}
else
{
@ -942,6 +954,40 @@ void reset_clifogiac(TRectype & rec, const TRectype & oldrec)
rec.zero(CLIFOGIAC_CONSANNO);
}
void update_clifogiac(TRectype & rec, const TRectype & oldrec)
{
if (!oldrec.empty())
{
const real acq = oldrec.get_real(CLIFOGIAC_ACQ) + oldrec.get_real(CLIFOGIAC_RIM);
const real valacq = oldrec.get_real(CLIFOGIAC_VALACQ) + oldrec.get_real(CLIFOGIAC_VALRIM);
real val = acq.is_zero() ? ZERO : valacq / acq;
const TPrice p(val);
const real rim_prec = rec.get_real(CLIFOGIAC_RIM);
real rim = oldrec.get_real(CLIFOGIAC_GIAC);
rim += oldrec.get_real(CLIFOGIAC_PRODFIN);
rim -= oldrec.get_real(CLIFOGIAC_PRODCOMP);
rim += oldrec.get_real(CLIFOGIAC_ACL);
rim -= oldrec.get_real(CLIFOGIAC_INCL);
const real valrim = p.get_num() * rim;
const TCurrency c(valrim); // Arrontonda alla valuta
rec.put(CLIFOGIAC_RIM, rim); rec.put(CLIFOGIAC_VALRIM, c.get_num());
rec.add(CLIFOGIAC_GIAC, rim - rim_prec);
if (riporta_ordinato())
{
rec.add(CLIFOGIAC_ORDF, oldrec.get_real(CLIFOGIAC_ORDF));
rec.add(CLIFOGIAC_VALORDF, oldrec.get_real(CLIFOGIAC_VALORDF));
rec.add(CLIFOGIAC_ORDC, oldrec.get_real(CLIFOGIAC_ORDC));
rec.add(CLIFOGIAC_VALORDC, oldrec.get_real(CLIFOGIAC_VALORDC));
}
rec.add(CLIFOGIAC_DOTOD, oldrec.get_real(CLIFOGIAC_DOTOD));
rec.add(CLIFOGIAC_DOTIN, oldrec.get_real(CLIFOGIAC_DOTIN));
rec.add(CLIFOGIAC_DOTTM, oldrec.get_real(CLIFOGIAC_DOTTM));
}
}
HIDDEN bool rel_reset_clifogiac(const TRelation& rel, void* pJolly)
{
TRectype & rec = rel.curr();
@ -954,7 +1000,7 @@ HIDDEN bool rel_reset_clifogiac(const TRelation& rel, void* pJolly)
newrec = rec;
newrec.put(CLIFOGIAC_ANNOES, p.codes);
}
reset_clifogiac(newrec, rec);
reset_clifogiac(newrec, rec, p.closed);
return newrec.write_rewrite(rel.lfile()) == NOERR;
}
@ -980,6 +1026,7 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
p.codes = codes;
p.codesprec = esercizi().pred(codes);
//p.zero_giac = p.codesprec > 0 && esercizi().esercizio(p.codesprec).chiusura_mag().ok();
p.closed = esercizi().esercizio(p.codesprec).chiusura_mag().ok();
p.zero_giac = p.codesprec <= 0 || esercizi().esercizio(p.codesprec).chiusura_mag().ok();
p.catv = catven;
p.codl = codlis;