Files correlati : nessuno Ricompilazione Demo : [ ] Commento : Riportata la versione aga 07.150 sul main trunk git-svn-id: svn://10.65.10.50/trunk@9871 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			216 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <automask.h>
 | |
| #include <execp.h>
 | |
| 
 | |
| #include <saldi.h>
 | |
| 
 | |
| #include "baeur.h"
 | |
| #include "baeur11.h"
 | |
| 
 | |
| #include "../cg/cglib01.h"
 | |
| 
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Main app declaration
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TApertura_saldi_euro : public TEuro_app
 | |
| {          
 | |
| protected:      
 | |
|   bool has_movs() const;
 | |
|   void convert_saldi(const TDate& adozione, const TBill& arrotino);
 | |
| 
 | |
| public:
 | |
|   virtual void main_loop();
 | |
| };
 | |
| 
 | |
| TApertura_saldi_euro& app() { return (TApertura_saldi_euro&)main_app(); }
 | |
| 
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Main mask
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TEuro90_mask : public TAutomask
 | |
| { 
 | |
| public:
 | |
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | |
|   virtual void on_firm_change();
 | |
|   TEuro90_mask();
 | |
| };
 | |
| 
 | |
| bool TEuro90_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | |
| {
 | |
|   switch (o.dlg())
 | |
|   {
 | |
|   case F11_ADOZIONE:
 | |
|     if (e == fe_modify || e == fe_close)
 | |
|     {
 | |
|       TEsercizi_contabili esc;
 | |
|       TDate d = o.get();
 | |
|       if (!d.ok())
 | |
|         return error_box("E' necessario specificare la data di adozione dell'Euro");
 | |
|       const int codesc = esc.date2esc(d);
 | |
|       if (codesc <= 0)
 | |
|         return error_box("E' necessario aprire l'esercizio per l'anno %d", d.year());
 | |
|       if (d.day() != 1)
 | |
|         warning_box("Si consiglia di specificare una data di inizio mese/trimestre");
 | |
|     }
 | |
|     break;
 | |
|   default: break;
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| void TEuro90_mask::on_firm_change()
 | |
| {
 | |
|   TAutomask::on_firm_change();
 | |
| 
 | |
|   TDate adozione;
 | |
|   bool inizio;
 | |
|   app().data_adozione_euro(0, adozione, inizio);
 | |
|   set(F11_ADOZIONE, adozione);
 | |
| 
 | |
|   TBill arrotino;
 | |
|   if (app().load_round_bill(arrotino))
 | |
|   {
 | |
|     arrotino.set(*this, F11_DIFF_G, F11_DIFF_C, F11_DIFF_S);
 | |
|     field(F11_DIFF_S).check(STARTING_CHECK);
 | |
|   }
 | |
| }
 | |
| 
 | |
| TEuro90_mask::TEuro90_mask() : TAutomask("baeur11") 
 | |
| { 
 | |
|   for (int i = fields()-1; i > 0; i--)
 | |
|   {  
 | |
|     TMask_field& f = fld(i);
 | |
|     if (f.in_group(1))
 | |
|     {
 | |
|       if (f.dlg() == F11_SALDI)
 | |
|       {
 | |
|         f.set("X");
 | |
|         f.disable();
 | |
|       }
 | |
|       else
 | |
|         f.hide();
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Main app implementation
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Conversione saldi copiata pari pari da baeur01
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| struct TSaldi_data
 | |
| {  
 | |
|   int _annoes;
 | |
|   TBill _arrot;
 | |
|   TImporto _sld;
 | |
| };
 | |
| 
 | |
| static bool saldi_handler(TRectype& rec, void* jolly)
 | |
| { 
 | |
|   TSaldi_data& sld = *(TSaldi_data*)jolly;
 | |
|   const int annoes = rec.get_int(SLD_ANNOES);
 | |
|   if (annoes == sld._annoes)
 | |
|   {
 | |
|     const TImporto iniz(rec.get_char(SLD_FLAGSALINI), rec.get_real(SLD_SALDO));
 | |
|     const TImporto pdare('D', rec.get_real(SLD_PDARE));
 | |
|     const TImporto pavere('A', rec.get_real(SLD_PAVERE));
 | |
|     TImporto saldo = iniz; saldo += pdare; saldo += pavere; 
 | |
|     if (!saldo.is_zero())
 | |
|     {
 | |
|       saldo.normalize();
 | |
|       rec.put(SLD_FLAGSALINI, saldo.sezione());
 | |
|       rec.put(SLD_SALDO, saldo.valore());
 | |
|       convert_import(rec, "SALDO");
 | |
|       zero_import(rec, "PDARE|PAVERE|PDAREPRO|PAVEREPRO|FLAGSALFIN|SALDOFIN|DATAULMOV|NUMULTMOV");
 | |
|       sld._sld += TImporto(saldo.sezione(), rec.get_real(SLD_SALDO));  // Somma saldo in euro
 | |
|       return TRUE;
 | |
|     }
 | |
|   }  
 | |
|   
 | |
|   return FALSE;           
 | |
| }
 | |
| 
 | |
| void TApertura_saldi_euro::convert_saldi(const TDate& adozione, const TBill& arrotino)
 | |
| {
 | |
|   TEsercizi_contabili esc;
 | |
| 
 | |
|   TSaldi_data sld;
 | |
|   sld._annoes = esc.date2prevesc(adozione);
 | |
|   sld._arrot = arrotino;
 | |
|   convert_file(LF_SALDI, NULL, NULL, NULL, saldi_handler, &sld);
 | |
|   
 | |
|   TImporto& saldo = sld._sld;
 | |
|   saldo.valore().round(-2);
 | |
|   if (!saldo.is_zero())
 | |
|   {       
 | |
|     TLocalisamfile saldi_lire(LF_SALDI); // Open trc
 | |
|     TEuroisamfile saldi(LF_SALDI, TRUE);
 | |
|   
 | |
|     TRectype& curr = saldi.curr();
 | |
|     curr.zero();
 | |
|     curr.put(SLD_ANNOES, sld._annoes);
 | |
|     curr.put(SLD_GRUPPO, arrotino.gruppo());
 | |
|     curr.put(SLD_CONTO, arrotino.conto());
 | |
|     curr.put(SLD_SOTTOCONTO, arrotino.sottoconto());
 | |
|     
 | |
|     saldo.normalize();
 | |
|     saldo.swap_section();
 | |
|     curr.put(SLD_FLAGSALINI, saldo.sezione());
 | |
|     curr.put(SLD_SALDO, saldo.valore());
 | |
|     saldi.write();
 | |
|   }
 | |
| }
 | |
| 
 | |
| bool TApertura_saldi_euro::has_movs() const
 | |
| {
 | |
|   TEuroisamfile s(LF_MOV, TRUE);
 | |
|   int err = s.first();
 | |
|   return err == NOERR;
 | |
| }
 | |
| 
 | |
| void TApertura_saldi_euro::main_loop()
 | |
| {
 | |
|   goto_lire();
 | |
|   if (set_firm())
 | |
|   {
 | |
|     TEuro90_mask m;
 | |
|   
 | |
|     TFilename lit, eur;
 | |
|     get_aree_dati(lit, eur);
 | |
|     m.set(F11_DATI, lit);
 | |
|     m.set(F11_DATIE, eur);
 | |
|     m.on_firm_change();
 | |
|     if (m.run() == K_ENTER)
 | |
|     {
 | |
|       const bool was_full = has_movs();
 | |
|     
 | |
|       TDate adozione = m.get(F11_ADOZIONE);
 | |
|       TBill arrotino;
 | |
|       arrotino.get(m, F11_DIFF_G, F11_DIFF_C, F11_DIFF_S);
 | |
|       convert_saldi(adozione, arrotino);
 | |
|       
 | |
|       if (was_full && yesno_box("Esistono movimenti contabili:\nSi desidera ricalcolare i saldi?"))
 | |
|       { 
 | |
|         goto_euro();
 | |
|         TExternal_app app("cg4 -0");
 | |
|         app.run();
 | |
|         goto_lire();
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
|   
 | |
| int baeur09(int argc, char* argv[])
 | |
| {  
 | |
|   TApertura_saldi_euro ase;
 | |
|   ase.run(argc, argv, "Ricalcolo saldi Lire/Euro");
 | |
|   
 | |
|   return 0;
 | |
| }
 |