Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunta traduzione a i cespiti git-svn-id: svn://10.65.10.50/trunk@11114 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			219 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | |
| #include <automask.h>
 | |
| #include <progind.h>
 | |
| #include <relation.h>
 | |
| #include <viswin.h>
 | |
| 
 | |
| #include "ceeur.h"
 | |
| #include "ceeur20.h"
 | |
| 
 | |
| #include "ammce.h"
 | |
| #include "cespi.h"
 | |
| #include "salce.h"
 | |
| 
 | |
| class TEuro02_app : public TEuro_app
 | |
| {
 | |
| protected:
 | |
|   virtual void main_loop();
 | |
|   
 | |
| public:  
 | |
|   real valore_ammortizzabile(const TRelation& rel, int tipo_sit) const;
 | |
|   real fondo(const TRelation& rel, int tipo_sit) const;
 | |
|   real confronta_valori(const real& val_lit, const real& val_eur) const;
 | |
|   void print_arr(int tipo_sit) const;
 | |
| };
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Maschera di selezione
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TEuro02_mask : public TAutomask
 | |
| {
 | |
| protected:
 | |
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | |
| 
 | |
| public:
 | |
|   TEuro02_mask() : TAutomask("ceeur20") { }
 | |
| };
 | |
| 
 | |
| bool TEuro02_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | |
| {
 | |
|   switch (o.dlg())
 | |
|   {
 | |
|   case F_DITTA:
 | |
|     if (e == fe_close)
 | |
|     {
 | |
|       const long ditta = atol(o.get());
 | |
|       main_app().set_firm(ditta);
 | |
|     }
 | |
|     break;
 | |
|   default: break;
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Applicazione principale
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| real TEuro02_app::confronta_valori(const real& val_lit, const real& val_eur) const
 | |
| {
 | |
|   real expected_val_eur = val_lit / EURO; expected_val_eur.round(2);
 | |
|   real error = expected_val_eur - val_eur;
 | |
|   return error;
 | |
| }
 | |
| 
 | |
| real TEuro02_app::valore_ammortizzabile(const TRelation& rel, int tipo_sit) const
 | |
| {
 | |
|   const TRectype& salpro = rel.curr();
 | |
|   real val = salpro.get_real(SALCE_CSTO) - salpro.get_real(SALCE_PLUSREIN) +
 | |
|              salpro.get_real(SALCE_RIV75) + salpro.get_real(SALCE_RIV83);
 | |
|     
 | |
|   if (tipo_sit == 1)
 | |
|   {
 | |
|     val -= salpro.get_real(SALCE_VNONAMM);
 | |
|     val += salpro.get_real(SALCE_RIVGF);
 | |
|   } 
 | |
|   if (tipo_sit == 2)
 | |
|   {
 | |
|     val += salpro.get_real(SALCE_RIVGC);
 | |
|   }
 | |
|     
 | |
|   const real riv90 = salpro.get(SALCE_RIV90);
 | |
|   const real riv91 = salpro.get(SALCE_RIV91);
 | |
|   if (riv90 != ZERO || riv91 != ZERO)
 | |
|   {
 | |
|     const int annipost90 = salpro.get_int(SALCE_ANNIPOST90);
 | |
|     if (riv91 != ZERO || annipost90 >= 3)
 | |
|       val += riv90;
 | |
|   }
 | |
|   val += riv91;
 | |
| 
 | |
|   return val;
 | |
| }
 | |
| 
 | |
| real TEuro02_app::fondo(const TRelation& rel, int tipo_sit) const
 | |
| {          
 | |
|   const TString16 idcesp = rel.curr().get(SALCE_IDCESPITE);
 | |
|   const TRectype& ammpro = rel.curr(LF_AMMCE);
 | |
|   
 | |
|   real fondo;                                    // Fondo ammortamento
 | |
|   if (ammpro.get(AMMCE_IDCESPITE) == idcesp)
 | |
|   {
 | |
|     if (ammpro.get_int(AMMCE_TPAMM) == tipo_sit)
 | |
|     {
 | |
|       fondo += ammpro.get_real(AMMCE_QNORP);
 | |
|       fondo += ammpro.get_real(AMMCE_QANTP);
 | |
|       fondo += ammpro.get_real(AMMCE_QACCP);
 | |
|       fondo += ammpro.get_real(AMMCE_QPERSEP);
 | |
|       fondo += ammpro.get_real(AMMCE_QPPRIVATEP);
 | |
|       fondo += ammpro.get_real(AMMCE_FPRIVATOP);
 | |
| 
 | |
|       fondo += ammpro.get_real(AMMCE_QNOR);
 | |
|       fondo += ammpro.get_real(AMMCE_QANT);
 | |
|       fondo += ammpro.get_real(AMMCE_QACC);
 | |
|       fondo += ammpro.get_real(AMMCE_QPERSE);
 | |
|       fondo += ammpro.get_real(AMMCE_QPPRIVATE);
 | |
|       fondo += ammpro.get_real(AMMCE_FPRIVATO);
 | |
|     }
 | |
|   }  
 | |
|   else
 | |
|   {
 | |
|     fondo = ZERO;
 | |
|   }
 | |
|   return fondo;
 | |
| }
 | |
| 
 | |
| void TEuro02_app::print_arr(int tipo_sit) const
 | |
| {
 | |
|   TViswin vw(NULL, TR("Controllo arrotondamenti"), FALSE, TRUE, FALSE, 0, 0, 0, 0, FALSE);
 | |
|   vw.maximize();
 | |
|   vw.open_modal();
 | |
|   
 | |
|   TString expr;
 | |
|   expr << "CODES==CODES|IDCESPITE==IDCESPITE|TPSALDO==2|TPAMM==" << tipo_sit;
 | |
|   
 | |
|   TRelation rel_lit(LF_SALCE);
 | |
|   rel_lit.add(LF_AMMCE, expr);
 | |
|   
 | |
|   TEuroisamfile* salce_eur = new TEuroisamfile(LF_SALCE, TRUE);
 | |
|   TEuroisamfile* ammce_eur = new TEuroisamfile(LF_AMMCE, TRUE);
 | |
|   
 | |
|   TRelation rel_eur(salce_eur);
 | |
|   rel_eur.add(LF_AMMCE, expr);
 | |
|   rel_eur.replacef(ammce_eur, LF_AMMCE, expr);
 | |
|   rel_eur.add(LF_CESPI, "IDCESPITE==IDCESPITE");
 | |
|   
 | |
|   TCursor cur_eur(&rel_eur, "(CODES==2001)&&(TPSALDO==2)");
 | |
|   const long items = cur_eur.items();
 | |
|   cur_eur.freeze();
 | |
|   
 | |
|   const TRectype& salce = cur_eur.curr();
 | |
|   const TRectype& cespi = cur_eur.curr(LF_CESPI);
 | |
|   
 | |
|   for (cur_eur = 0L; cur_eur.pos() < items; ++cur_eur)
 | |
|   {
 | |
|     rel_lit.curr() = cur_eur.curr();
 | |
|     if (rel_lit.read() == NOERR)
 | |
|     {
 | |
|       const TString16 idcespite = salce.get(SALCE_IDCESPITE);
 | |
|   
 | |
|       const real val_amm_lit = valore_ammortizzabile(rel_lit, tipo_sit);
 | |
|       const real val_amm_eur = valore_ammortizzabile(rel_eur, tipo_sit);
 | |
|         
 | |
|       const real fondo_lit = fondo(rel_lit, tipo_sit);
 | |
|       const real fondo_eur = fondo(rel_eur, tipo_sit);
 | |
|         
 | |
|       const real residuo_lit = val_amm_lit - fondo_lit;
 | |
|       const real residuo_eur = val_amm_eur - fondo_eur;
 | |
|         
 | |
|       const real err = confronta_valori(residuo_lit, residuo_eur);
 | |
|       if (err <= -0.01 || err >= 0.01)
 | |
|       {
 | |
|         TString str;
 | |
|         str << TR("Cespite ") << idcespite << " - " << cespi.get(CESPI_DESC);
 | |
|         str << TR(" - Situazione ");
 | |
|         switch (tipo_sit)
 | |
|         {
 | |
|         case  2: str << TR("Civilistica"); break;
 | |
|         case  3: str << TR("Gestionale"); break;
 | |
|         default: str << TR("Fiscale"); break;
 | |
|         }
 | |
|         vw.add_line(str); str.cut(0);
 | |
|   
 | |
|         str << TR("Residuo in Lire ") << residuo_lit.string(".");
 | |
|         str << TR(" - Residuo in Euro ") << residuo_eur.string(".2");
 | |
|         vw.add_line(str); str.cut(0);
 | |
|   
 | |
|         str << TR("Errore di arrotondamento in Euro ") << err.string(".2");
 | |
|         vw.add_line(str); str.cut(0);
 | |
|             
 | |
|         vw.add_line(str);
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   
 | |
|   vw.close_print();
 | |
|   vw.run();
 | |
|   vw.close_modal();
 | |
| }
 | |
| 
 | |
| void TEuro02_app::main_loop()
 | |
| {
 | |
|   goto_lire();
 | |
|   TEuro02_mask m;
 | |
|   while (m.run() == K_ENTER)
 | |
|   {
 | |
|     const int tipo_sit = m.get_int(F_TIPO);
 | |
|     print_arr(tipo_sit);
 | |
|   }
 | |
| }
 | |
| 
 | |
| int ceeur02(int argc, char* argv[])
 | |
| {  
 | |
|   TEuro02_app aa;
 | |
|   aa.run(argc, argv, TR("Controllo arrotondamenti"));
 | |
|   
 | |
|   return 0;
 | |
| }
 |