From eaafbe86e6270289cd1ee69f4b83eed13c42cf14 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 30 Nov 2010 01:40:47 +0000 Subject: [PATCH] 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 --- lv/lvlib.cpp | 69 ++++++++++++++++++++++++++++++------------------- mg/mglib.h | 3 ++- mg/mglib02a.cpp | 63 ++++++++++++++++++++++++++++++++++++++------ 3 files changed, 100 insertions(+), 35 deletions(-) diff --git a/lv/lvlib.cpp b/lv/lvlib.cpp index 48a8e57a2..0f5b0b44b 100755 --- a/lv/lvlib.cpp +++ b/lv/lvlib.cpp @@ -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; diff --git a/mg/mglib.h b/mg/mglib.h index b1e864b03..ade523682 100755 --- a/mg/mglib.h +++ b/mg/mglib.h @@ -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 diff --git a/mg/mglib02a.cpp b/mg/mglib02a.cpp index d285fd959..968679c61 100755 --- a/mg/mglib02a.cpp +++ b/mg/mglib02a.cpp @@ -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;