Arrotondamento cambio e aggiustamento per coerenza con totale doc in lire
git-svn-id: svn://10.65.10.50/trunk@2461 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									3538c1072f
								
							
						
					
					
						commit
						c0c3decdd2
					
				@ -259,7 +259,7 @@ bool TPrimanota_application::pag_sheet_handler(TMask_field& f, KEY key)
 | 
				
			|||||||
        const TString is(imp.string("."));
 | 
					        const TString is(imp.string("."));
 | 
				
			||||||
        const TString ts(totlit.string("."));
 | 
					        const TString ts(totlit.string("."));
 | 
				
			||||||
        ok = error_box("Il totale in lire delle rate e' %s mentre\n"
 | 
					        ok = error_box("Il totale in lire delle rate e' %s mentre\n"
 | 
				
			||||||
                       "il totale del documento e' %s.", (const char *)ts,  (const char *)is);
 | 
					                       "il totale del documento e' %s.", (const char *)is,  (const char *)ts);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -595,11 +595,13 @@ void TPrimanota_application::set_totale_pagamento()
 | 
				
			|||||||
  const TMask& m = curr_mask();
 | 
					  const TMask& m = curr_mask();
 | 
				
			||||||
  TPagamento& pag = pagamento();        
 | 
					  TPagamento& pag = pagamento();        
 | 
				
			||||||
  pag.set_cambio(m.get_real(SK_CAMBIO));
 | 
					  pag.set_cambio(m.get_real(SK_CAMBIO));
 | 
				
			||||||
 | 
					  real implit; 
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  if (pag.in_valuta())
 | 
					  if (pag.in_valuta())
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    imposta = m.get_real(F_IMPOSTE) / pag.cambio(); imposta.round(3);
 | 
					    imposta = m.get_real(F_IMPOSTE) / pag.cambio(); imposta.round(3);
 | 
				
			||||||
    imponibile = m.get_real(SK_TOTDOCVAL) - imposta;   
 | 
					    imponibile = m.get_real(SK_TOTDOCVAL) - imposta;   
 | 
				
			||||||
 | 
					    implit = m.get_real(F_TOTALE);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
@ -608,6 +610,7 @@ void TPrimanota_application::set_totale_pagamento()
 | 
				
			|||||||
  }  
 | 
					  }  
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  pag.set_total(imponibile, imposta, spese);
 | 
					  pag.set_total(imponibile, imposta, spese);
 | 
				
			||||||
 | 
					  pag.set_implit(implit);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TPrimanota_application::set_scadenze(TMask& m)
 | 
					void TPrimanota_application::set_scadenze(TMask& m)
 | 
				
			||||||
 | 
				
			|||||||
@ -347,6 +347,7 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void TPagamento::set_cambio(const real& cambio)
 | 
					void TPagamento::set_cambio(const real& cambio)
 | 
				
			||||||
{   
 | 
					{   
 | 
				
			||||||
 | 
					  const int first = _tpr < 4 ? 0 : 1;
 | 
				
			||||||
  const bool era_valuta = _cambio != 1.0;
 | 
					  const bool era_valuta = _cambio != 1.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (cambio.sign() <= 0)
 | 
					  if (cambio.sign() <= 0)
 | 
				
			||||||
@ -404,6 +405,27 @@ void TPagamento::set_cambio(const real& cambio)
 | 
				
			|||||||
      set_total(imponibile, imposta, spese);
 | 
					      set_total(imponibile, imposta, spese);
 | 
				
			||||||
    }  
 | 
					    }  
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  if (in_valuta) adjust_importo_lire();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					                                               
 | 
				
			||||||
 | 
					void TPagamento::set_implit(const real & r)
 | 
				
			||||||
 | 
					{ 
 | 
				
			||||||
 | 
					  _implit = r;          
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TPagamento::adjust_importo_lire()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (_cambio == 1.0) return;
 | 
				
			||||||
 | 
					  const int first = _tpr < 4 ? 0 : 1;
 | 
				
			||||||
 | 
					  real totlit;
 | 
				
			||||||
 | 
					  for (int i = 0; i < n_rate(); i++)
 | 
				
			||||||
 | 
					    totlit += tlit_rata(i);
 | 
				
			||||||
 | 
					  real residuo = _implit - totlit;
 | 
				
			||||||
 | 
					  if (!residuo.is_zero())
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    real rs = tlit_rata(first) + residuo;
 | 
				
			||||||
 | 
					    rata(first).add(rs.string(), 7);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
                                               
 | 
					                                               
 | 
				
			||||||
void TPagamento::next_scad(TDate& d, int scad, bool mcomm, int rata)
 | 
					void TPagamento::next_scad(TDate& d, int scad, bool mcomm, int rata)
 | 
				
			||||||
@ -1269,7 +1291,7 @@ void TPagamento::adjust_perc(int rdiff)
 | 
				
			|||||||
   for (int j = first; j < _rate.items(); j++)
 | 
					   for (int j = first; j < _rate.items(); j++)
 | 
				
			||||||
   {   
 | 
					   {   
 | 
				
			||||||
     real rvl = tpay_rata(j); 
 | 
					     real rvl = tpay_rata(j); 
 | 
				
			||||||
     // togli pezxo di troppo
 | 
					     // togli pezzo di troppo
 | 
				
			||||||
     if (j == first && _tpr > 0 && _tpr < 4)
 | 
					     if (j == first && _tpr > 0 && _tpr < 4)
 | 
				
			||||||
        rvl -= _secndr;                     
 | 
					        rvl -= _secndr;                     
 | 
				
			||||||
     real zpx = (rvl * 100.0)/other; // percentuale
 | 
					     real zpx = (rvl * 100.0)/other; // percentuale
 | 
				
			||||||
@ -1281,7 +1303,6 @@ void TPagamento::adjust_perc(int rdiff)
 | 
				
			|||||||
       implit *= _cambio;
 | 
					       implit *= _cambio;
 | 
				
			||||||
       implit.round();
 | 
					       implit.round();
 | 
				
			||||||
       TToken_string& tr = rata(j);           
 | 
					       TToken_string& tr = rata(j);           
 | 
				
			||||||
           
 | 
					 | 
				
			||||||
       tr.add(implit.string(), 7);
 | 
					       tr.add(implit.string(), 7);
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
   }             
 | 
					   }             
 | 
				
			||||||
@ -1300,7 +1321,6 @@ void TPagamento::adjust_perc_imp(bool is_perc, int rdiff)
 | 
				
			|||||||
   TDistrib dt(toshare, _round);                 
 | 
					   TDistrib dt(toshare, _round);                 
 | 
				
			||||||
   const int first = _tpr > 3 ? 1 : 0;               
 | 
					   const int first = _tpr > 3 ? 1 : 0;               
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//   for (int j = first; j < _rate.items(); j++)
 | 
					 | 
				
			||||||
   for (int j = _rate.items() - 1; j >= first ; j--)
 | 
					   for (int j = _rate.items() - 1; j >= first ; j--)
 | 
				
			||||||
   {   
 | 
					   {   
 | 
				
			||||||
     real rvl = perc_rata(j); 
 | 
					     real rvl = perc_rata(j); 
 | 
				
			||||||
@ -1309,7 +1329,6 @@ void TPagamento::adjust_perc_imp(bool is_perc, int rdiff)
 | 
				
			|||||||
     dt.add(zpx);  // * cento???      
 | 
					     dt.add(zpx);  // * cento???      
 | 
				
			||||||
   }    
 | 
					   }    
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
//   for (j = first; j < n_rate(); j++)
 | 
					 | 
				
			||||||
   real rem(toshare);    
 | 
					   real rem(toshare);    
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
   for (j = n_rate() - 1; j >= first ; j--)
 | 
					   for (j = n_rate() - 1; j >= first ; j--)
 | 
				
			||||||
@ -1323,17 +1342,7 @@ void TPagamento::adjust_perc_imp(bool is_perc, int rdiff)
 | 
				
			|||||||
      if (j == first) 
 | 
					      if (j == first) 
 | 
				
			||||||
      {  
 | 
					      {  
 | 
				
			||||||
        rfirst = rvl; 
 | 
					        rfirst = rvl; 
 | 
				
			||||||
//        if (rdiff == 2 && !rem.is_zero())
 | 
					        if (!rem.is_zero()) rfirst += rem;
 | 
				
			||||||
        if (!rem.is_zero())
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
//          real reminder  = toshare - rfirst;
 | 
					 | 
				
			||||||
//          real rdiv = reminder.is_zero() ? real(0.0) : 
 | 
					 | 
				
			||||||
//                     (reminder / real(_rate.items() - (1+first)));  
 | 
					 | 
				
			||||||
//          rdiv.round(_round);
 | 
					 | 
				
			||||||
//          rfirst   += reminder - (rdiv * real(_rate.items() - (1+first)));
 | 
					 | 
				
			||||||
//          rvl       = rdiv;
 | 
					 | 
				
			||||||
            rfirst += rem;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
           
 | 
					           
 | 
				
			||||||
      if (j == first && _tpr > 0 && _tpr < 4)
 | 
					      if (j == first && _tpr > 0 && _tpr < 4)
 | 
				
			||||||
@ -1624,6 +1633,7 @@ void TPagamento::set_sheet(TSheet_field& sf, int sscad)
 | 
				
			|||||||
  if (_inited)
 | 
					  if (_inited)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    const bool in_valuta = _cambio != 1.0;
 | 
					    const bool in_valuta = _cambio != 1.0;
 | 
				
			||||||
 | 
					    if (in_valuta) adjust_importo_lire();
 | 
				
			||||||
                       
 | 
					                       
 | 
				
			||||||
    // si istanzia uno sheet di primanota
 | 
					    // si istanzia uno sheet di primanota
 | 
				
			||||||
    for (int i = 0; i < n_rate(); i++)
 | 
					    for (int i = 0; i < n_rate(); i++)
 | 
				
			||||||
 | 
				
			|||||||
@ -35,6 +35,7 @@ class TPagamento : public TObject
 | 
				
			|||||||
  real      _imposta;    // imposta da affettare
 | 
					  real      _imposta;    // imposta da affettare
 | 
				
			||||||
  real      _spese;      // spese da affettare
 | 
					  real      _spese;      // spese da affettare
 | 
				
			||||||
  real      _cambio;     // cambio valuta
 | 
					  real      _cambio;     // cambio valuta
 | 
				
			||||||
 | 
					  real      _implit;     // imponibile in lire
 | 
				
			||||||
  TDistrib  _slicer;     // affettatrice
 | 
					  TDistrib  _slicer;     // affettatrice
 | 
				
			||||||
  bool      _new;        // non letto da database
 | 
					  bool      _new;        // non letto da database
 | 
				
			||||||
  TString_array _rate;   // rate medesime
 | 
					  TString_array _rate;   // rate medesime
 | 
				
			||||||
@ -75,8 +76,9 @@ protected:
 | 
				
			|||||||
  // riaggiusta le percentuali o gli importi rispetto al dato modificato              
 | 
					  // riaggiusta le percentuali o gli importi rispetto al dato modificato              
 | 
				
			||||||
  void adjust_perc_imp(bool is_perc, int rdiff);
 | 
					  void adjust_perc_imp(bool is_perc, int rdiff);
 | 
				
			||||||
  // riaggiusta le percentuali rispetto al dato modificato              
 | 
					  // riaggiusta le percentuali rispetto al dato modificato              
 | 
				
			||||||
  void TPagamento::adjust_perc(int rdiff);
 | 
					  void adjust_perc(int rdiff);
 | 
				
			||||||
  
 | 
					  // riaggiusta l'importo in lire per consistenza con il totale documento in lire
 | 
				
			||||||
 | 
					  void adjust_importo_lire();
 | 
				
			||||||
  // controlla il segno di un valore in base a _tpr e row
 | 
					  // controlla il segno di un valore in base a _tpr e row
 | 
				
			||||||
  bool sign_ok(const real& val, int row) const;
 | 
					  bool sign_ok(const real& val, int row) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -176,6 +178,8 @@ public:
 | 
				
			|||||||
  void   set_imprata(int i, const real& r);
 | 
					  void   set_imprata(int i, const real& r);
 | 
				
			||||||
  // setta l'importo in lire di una rata
 | 
					  // setta l'importo in lire di una rata
 | 
				
			||||||
  void   set_implit(int i, const real & r);
 | 
					  void   set_implit(int i, const real & r);
 | 
				
			||||||
 | 
					  // setta l'imponibile in lire totale
 | 
				
			||||||
 | 
					  void   set_implit(const real & r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // slicer interface
 | 
					  // slicer interface
 | 
				
			||||||
  void   set_total(const real& ib, const real& im, const real& sp);
 | 
					  void   set_total(const real& ib, const real& im, const real& sp);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user