From 391a5e9a50e1abcff52be0085e494de50ba60368 Mon Sep 17 00:00:00 2001 From: alex <alex@c028cbd2-c16b-5b4b-a496-9718f37d4682> Date: Mon, 14 Apr 2003 15:47:09 +0000 Subject: [PATCH] Patch level : 2..0 452 Files correlati : ab0.exe Ricompilazione Demo : [ ] Commento : Aggiunto metodo valore_al all' oggetto saldo fare la patch man mano che ci sono spedizioni git-svn-id: svn://10.65.10.50/trunk@11008 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/cglib02.cpp | 103 +++++++++++++++++++++++++++++++++++++++++++++++++ cg/cglib02.h | 8 ++-- 2 files changed, 108 insertions(+), 3 deletions(-) diff --git a/cg/cglib02.cpp b/cg/cglib02.cpp index eae575f2a..545d23d8f 100755 --- a/cg/cglib02.cpp +++ b/cg/cglib02.cpp @@ -5,6 +5,7 @@ // ///////////////////////////////////////////////////////////////////////////// #include <diction.h> +#include <progind.h> #include <relation.h> #include <tabutil.h> @@ -463,6 +464,108 @@ bool TSaldo::ultima_immissione_bilancio(int annoes,int g,int c,long s,int indbil return esito; } +real & TSaldo::valore_al(int g, int c, long s, const TDate& dal, const TDate& al, + int indbil, bool provv) + +{ + _saldo_iniziale = ZERO; + _saldo = ZERO; + _prg_dare = ZERO; + _prg_avere = ZERO; + _movimentato = FALSE; + _rec_presente_ep = FALSE; + _rec_presente_ec = FALSE; + _prec = FALSE; + + TEsercizi_contabili es; + const int codes = es.date2esc(dal); + + _annoes = codes; + TString16 key; + + key.format("%d||%d|%d|%ld", _annoes, g, c, s); + const TRectype & saldo = cache().get(LF_SALDI, key); + + _saldo_iniziale = saldo.get_real(SLD_SALDO); + _prec = _saldo_iniziale == ZERO; + + if (_prec) + { + _prec = TRUE; + _saldo_iniziale = saldofin_esprec(codes,g,c,s); + } + else + if (saldo.get_char(SLD_FLAGSALINI) == 'A') + _saldo_iniziale = -_saldo_iniziale; + + + TRelation relrmov(LF_RMOV); + TRectype & rmov = relrmov.curr(); + + rmov.put(RMV_GRUPPO,g); + rmov.put(RMV_CONTO,c); + rmov.put(RMV_SOTTOCONTO,s); + + TCursor cur(&relrmov, "", 2, &rmov, &rmov); + const TRecnotype items = cur.items(); + + cur.freeze(); + + TString prompt(30); + + prompt.format(FR("Calcolo saldo conto %d-%d_%ld"), g, c, s); + + TProgind p(items, prompt, FALSE); + + for (cur = 0L; cur.pos() < items && !p.iscancelled(); ++cur) + { + p.addstatus(1L); + + const long num_reg = rmov.get_long(RMV_NUMREG); + + leggi_mov(num_reg); + + const char sezione = rmov.get_char(RMV_SEZIONE); + const real importo = rmov.get_real(RMV_IMPORTO); + + if ((_datacomp >= dal && _datacomp <= al) && + (provv || _provv.empty()) && + importo != ZERO) + { + // "Se la causale del movimento e' di chiusura, + // o di apertura il movimento non va considerato" + if (_codcaus.not_empty()) + { + const TString& movap = _causali_apertura.decode(_codcaus); + if (movap == "A" || movap == "C") + continue; + } + + _movimentato = TRUE; + + if (sezione == 'D') + _prg_dare += importo; + else + _prg_avere += importo; + } + else + if (_datacomp < dal) + { + if (codes == es.date2esc(_datacomp)) + { + if (sezione == 'D') + _saldo_iniziale += importo; + else + _saldo_iniziale -= importo; + } + } + + } + + _saldo = _saldo_iniziale + _prg_dare - _prg_avere; + return _saldo; +} + bool TSaldo::ricerca_progr_prec (int annoesprec, int g, int c, long s) { if (annoesprec == 0) diff --git a/cg/cglib02.h b/cg/cglib02.h index bef14c75b..0e1012271 100755 --- a/cg/cglib02.h +++ b/cg/cglib02.h @@ -87,11 +87,13 @@ class TSaldo : public TObject TRecord_cache _movimenti; protected: - void InFinEs(int); + void InFinEs(int); bool leggi_mov(long numreg); // Leggi testata real calcola_saldo_iniziale(int g, int c, long s, int indbil); bool prg_saldo(int, TConto&, real&, real&, bool); - + const real & iniziale() const { return _saldo_iniziale;} + void set_iniziale(const real & val) { _saldo_iniziale = val; } + public: bool movimentato() const { return _movimentato; } @@ -109,7 +111,7 @@ public: bool ultima_immissione_bilancio(int anno,int g,int c,long s,int indbil,int prov,bool saldo_chiusura = TRUE); bool ultima_immissione_verifica(int anno,int g,int c,long s,int indbil,int prov); bool data_limite_bilancio(int,int,int,long,const TDate&,const TDate&,int,int, const char* = NULL); - + real & valore_al(int g,int c,long s,const TDate& dal,const TDate& al,int indbil, bool provv); bool ricerca_progr_prec(int, int, int, long);