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);