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 TRecord_array & TArticolo_lavanderie::clifomag(int annoes) const
{ {
((TArticolo_lavanderie*)this)->set_anno_lav(annoes > 0 ? annoes : esercizi().last_mag()); const int es = annoes > 0 ? annoes : esercizi().last_mag();
TRecord_array & recarr = body(LF_CLIFOGIAC); const int esprec = esercizi().pred(annoes);
if (recarr.rows() == 0) if (esprec != 0)
{ {
TString query; const bool closed = esercizi()[esprec].chiusura_mag().ok();
const char * cod = (const char *) codice();
const int esprec = esercizi().pred(annoes);
query << "USE " << LF_CLIFOGIAC << "\n"; if (!closed)
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())
{ {
const TRecmag_lavanderie oldrec(recmag.cursor()->curr()); ((TArticolo_lavanderie*)this)->set_anno_lav(esprec);
const int r = recarr.add_row(oldrec); TRecord_array recarrprec = body(LF_CLIFOGIAC);
TRecmag_lavanderie & rec = (TRecmag_lavanderie &) recarr[r];
rec.put(CLIFOGIAC_ANNOES, annoes); ((TArticolo_lavanderie*)this)->set_anno_lav(es);
::reset_clifogiac(rec, oldrec); 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; return recarr;
} }
const TRecmag_lavanderie & TArticolo_lavanderie::find_rec(int annoes) const const TRecmag_lavanderie & TArticolo_lavanderie::find_rec(int annoes) const
{ {
static TRecmag_lavanderie __rec; 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_magcode(TString & codmagdep);
const char * get_depcode(TString & codmagdep); const char * get_depcode(TString & codmagdep);
bool riporta_ordinato(); 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 #endif //__MGLIB_H

View File

@ -877,6 +877,7 @@ void TMov_mag::update_balance(TRectype & rec, const char * fieldname, const real
struct TBalance_params struct TBalance_params
{ {
bool zero_giac; bool zero_giac;
bool closed;
int codes; int codes;
int codesprec; int codesprec;
int esprec; int esprec;
@ -897,7 +898,7 @@ HIDDEN bool reset_giac(const TRelation& rel, void* pJolly)
return true; return true;
} }
void reset_clifogiac(TRectype & rec, const TRectype & oldrec) void reset_clifogiac(TRectype & rec, const TRectype & oldrec, bool closed)
{ {
if (!oldrec.empty()) 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_VEN); rec.zero(CLIFOGIAC_VALVEN);
rec.zero(CLIFOGIAC_USC); rec.zero(CLIFOGIAC_VALUSC); rec.zero(CLIFOGIAC_USC); rec.zero(CLIFOGIAC_VALUSC);
rec.zero(CLIFOGIAC_SCARTI); rec.zero(CLIFOGIAC_SCARTI);
if (!riporta_ordinato()) if (!riporta_ordinato() || !closed)
{ {
rec.zero(CLIFOGIAC_ORDF); rec.zero(CLIFOGIAC_VALORDF); rec.zero(CLIFOGIAC_ORDF);
rec.zero(CLIFOGIAC_ORDC); rec.zero(CLIFOGIAC_VALORDC); rec.zero(CLIFOGIAC_VALORDF);
rec.zero(CLIFOGIAC_ORDC);
rec.zero(CLIFOGIAC_VALORDC);
} }
rec.put(CLIFOGIAC_DOTOD, oldrec.get(CLIFOGIAC_DOTOD)); if (closed)
rec.put(CLIFOGIAC_DOTIN, oldrec.get(CLIFOGIAC_DOTIN)); {
rec.put(CLIFOGIAC_DOTTM, oldrec.get(CLIFOGIAC_DOTTM)); 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 else
{ {
@ -942,6 +954,40 @@ void reset_clifogiac(TRectype & rec, const TRectype & oldrec)
rec.zero(CLIFOGIAC_CONSANNO); 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) HIDDEN bool rel_reset_clifogiac(const TRelation& rel, void* pJolly)
{ {
TRectype & rec = rel.curr(); TRectype & rec = rel.curr();
@ -954,7 +1000,7 @@ HIDDEN bool rel_reset_clifogiac(const TRelation& rel, void* pJolly)
newrec = rec; newrec = rec;
newrec.put(CLIFOGIAC_ANNOES, p.codes); newrec.put(CLIFOGIAC_ANNOES, p.codes);
} }
reset_clifogiac(newrec, rec); reset_clifogiac(newrec, rec, p.closed);
return newrec.write_rewrite(rel.lfile()) == NOERR; 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.codes = codes;
p.codesprec = esercizi().pred(codes); p.codesprec = esercizi().pred(codes);
//p.zero_giac = p.codesprec > 0 && esercizi().esercizio(p.codesprec).chiusura_mag().ok(); //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.zero_giac = p.codesprec <= 0 || esercizi().esercizio(p.codesprec).chiusura_mag().ok();
p.catv = catven; p.catv = catven;
p.codl = codlis; p.codl = codlis;