Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 01.05 patch 648 git-svn-id: svn://10.65.10.50/trunk@8633 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			256 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			256 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | |
| #include <mask.h>
 | |
| #include <sheet.h>
 | |
| #include <msksheet.h>
 | |
| 
 | |
| #include "ef0.h"
 | |
| #include "ef0200.h"
 | |
| 
 | |
| #include <clifo.h>
 | |
| #include <effetti.h>
 | |
| 
 | |
| class Creazione_Effetti_da_EC : public TSkeleton_application
 | |
| {
 | |
|   TMask * _msk;
 | |
|   TArray_sheet * _Partite_aperte;
 | |
|   real _residuo;
 | |
| 
 | |
|   void          Load_Partite_Aperte(const long cli);
 | |
|   static  bool  Gen_Handler(TMask_field& f, KEY k);
 | |
|   static  bool  Gen_Notify(TSheet_field& sheet, int r, KEY k);                               
 | |
|   static  bool  Cli_Handler(TMask_field& f, KEY k);
 | |
|   virtual bool  create();
 | |
|   virtual bool  destroy();
 | |
|   virtual void  main_loop();
 | |
| public:
 | |
|   real get_res() {return _residuo;}
 | |
|   void set_res(const real& a) {_residuo = a;}
 | |
|   TMask* get_msk() {return _msk;}
 | |
|   Creazione_Effetti_da_EC() : _residuo(0.0) {}
 | |
| };
 | |
| 
 | |
| inline Creazione_Effetti_da_EC& app() {return (Creazione_Effetti_da_EC&)main_app();}
 | |
| 
 | |
| void Creazione_Effetti_da_EC::Load_Partite_Aperte(const long cli)
 | |
| {
 | |
|   /*
 | |
|      Caricamento partite aperte da E.C.
 | |
| 
 | |
|      Questo che segue e' pseudo-codice; andra' verificato non appena 
 | |
|      sara' completato lo scadenziario.
 | |
| 
 | |
|      TLocalisamfile Ec(LF_........);
 | |
| 
 | |
|      * Carica tutte le partite aperte del cliente *
 | |
| 
 | |
|      Ec.zero();
 | |
|      Ec.put(EC_CODCLI,cli);
 | |
|      Ec.read();
 | |
| 
 | |
|      Finche' si tratta dello stesso cliente...
 | |
| 
 | |
|      while (Ec.good() && Ec.get_long(EC_CODCLI) == cli) 
 | |
|      {
 | |
| 
 | |
|      Controlla se la partita esaminata e' aperta...
 | |
| 
 | |
|      if (Ec.get(EC_APERTA)) 
 | |
|      {
 | |
|      Con questo le carica tutte nello sheet...
 | |
| 
 | |
|      TToken_string riga(80);
 | |
|      riga.cut(0);
 | |
|      riga.add(Ec.get(EC_ANNO));
 | |
|      riga.add(Ec.get(EC_NUMERO));
 | |
|      riga.add(Ec.get(EC_DATADOC));
 | |
|      riga.add(Ec.get(EC_SALDO));
 | |
|      _Partite_aperte->add(riga);
 | |
|      }
 | |
| 
 | |
|      Legge il prossimo record
 | |
| 
 | |
|      Ec.next()
 | |
|      }
 | |
|      */
 | |
|   TToken_string riga(80);
 | |
|   riga.cut(0);
 | |
|   riga.add("");
 | |
|   riga.add("1994");
 | |
|   riga.add("1");
 | |
|   riga.add("10-11-94");
 | |
|   riga.add("19000000");
 | |
|   _Partite_aperte->add(riga);
 | |
|   riga.cut(0);
 | |
|   riga.add("");
 | |
|   riga.add("1994");
 | |
|   riga.add("2");
 | |
|   riga.add("11-11-94");
 | |
|   riga.add("18000000");
 | |
|   _Partite_aperte->add(riga);
 | |
|   riga.cut(0);
 | |
|   riga.add("");
 | |
|   riga.add("1994");
 | |
|   riga.add("3");
 | |
|   riga.add("16-11-94");
 | |
|   riga.add("23009000");
 | |
|   _Partite_aperte->add(riga);
 | |
|   riga.cut(0);
 | |
|   riga.add("");
 | |
|   riga.add("1994");
 | |
|   riga.add("4");
 | |
|   riga.add("19-11-94");
 | |
|   riga.add("450600");
 | |
|   _Partite_aperte->add(riga);
 | |
| }
 | |
| 
 | |
| bool Creazione_Effetti_da_EC::Gen_Handler(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_TAB && f.focusdirty())
 | |
|   {        
 | |
|     TMask& m = f.mask();
 | |
|     real importo = m.get(F_RATA);
 | |
|     importo += m.get_real(F_SPESE);
 | |
|     importo += m.get_real(F_BOLLI);
 | |
|     m.set(F_IMPEFF, importo);
 | |
|     f.set_focusdirty(FALSE);
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool Creazione_Effetti_da_EC::Gen_Notify(TSheet_field& sheet, int r, KEY k)
 | |
| {
 | |
|   if (k == K_CTRL + K_DEL)
 | |
|     return TRUE;
 | |
|   if (k == K_INS)
 | |
|   {
 | |
|     if (app().get_res().is_zero())
 | |
|     {
 | |
|       warning_box("Residuo da ripartire gia' annullato");
 | |
|       return FALSE;
 | |
|     }
 | |
|     else
 | |
|       return TRUE;
 | |
|   }
 | |
|   
 | |
|   TToken_string & row = sheet.row(r);
 | |
|   const real importo(row.get(1));
 | |
|   static real old_rata;
 | |
| 
 | |
|   switch (k)
 | |
|   {
 | |
|   case K_SPACE:
 | |
|     old_rata = importo;
 | |
|     break;
 | |
|   case K_DEL:       
 | |
|     {      
 | |
|       const real new_res = app().get_res() + importo;
 | |
| 
 | |
|       app().set_res(new_res);
 | |
|     }
 | |
|     break;
 | |
|   case K_ENTER:
 | |
|     {
 | |
|       const real new_res = app().get_res() - importo + old_rata;
 | |
|       if (new_res < ZERO)
 | |
|       {
 | |
|         warning_box("Non e' possibile superare l'importo da ripartire");
 | |
|         if (old_rata.is_zero()) 
 | |
|         {
 | |
|           row.add(app().get_res().string(),1);
 | |
|           app().set_res(ZERO);
 | |
|         }
 | |
|         else
 | |
|           row.add(old_rata.string(),1);
 | |
|       }      
 | |
|       else
 | |
|         app().set_res(new_res);
 | |
|       real totale = importo;   
 | |
|       totale+= real(row.get(2));
 | |
|       totale+= real(row.get(3));
 | |
|       row.add(totale.string(),4);
 | |
|     }
 | |
|     break;
 | |
|   default:
 | |
|     break;
 | |
|   }
 | |
|   sheet.mask().set(F_RESIDUO,app().get_res());
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool Creazione_Effetti_da_EC::Cli_Handler(TMask_field&f, KEY k)
 | |
| {
 | |
|   if (f.focusdirty())
 | |
|   {
 | |
|     TSheet_field& sheet =(TSheet_field&)f.mask().field(F_SHEET_EFF);
 | |
|     sheet.reset();
 | |
|     sheet.force_update();
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool Creazione_Effetti_da_EC::create()
 | |
| {
 | |
|   _msk = new TMask("ef0200a");
 | |
|   TSheet_field& sheet = _msk->sfield(F_SHEET_EFF);
 | |
|   sheet.set_notify(Gen_Notify);
 | |
|   sheet.enable_column(4,FALSE);
 | |
|   TMask& mask= sheet.sheet_mask();
 | |
|   mask.set_handler(F_RATA,Gen_Handler);
 | |
|   mask.set_handler(F_SPESE,Gen_Handler);
 | |
|   mask.set_handler(F_BOLLI,Gen_Handler);
 | |
|   _msk->set_handler(F_CODCF,Cli_Handler);
 | |
|   
 | |
|   return TSkeleton_application::create();
 | |
| }
 | |
| 
 | |
| bool Creazione_Effetti_da_EC::destroy()
 | |
| {
 | |
|   if (_msk != NULL) delete _msk;
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| void Creazione_Effetti_da_EC::main_loop()
 | |
| {
 | |
|   KEY tasto;
 | |
| 
 | |
|   do {
 | |
|     tasto=get_msk()->run();
 | |
|     switch (tasto)
 | |
|     {
 | |
|     case K_ENTER:       // first check if the application can write effects 
 | |
|     {
 | |
|       TSheet_field& sheet =(TSheet_field&)get_msk()->field(F_SHEET_EFF);
 | |
|       if (!_residuo && sheet.items()>0)
 | |
|         message_box("Perform writing procedure...");
 | |
|       break;
 | |
|     }
 | |
|   case K_F6: //Selects opened counts from E.C.
 | |
|   {
 | |
|     _Partite_aperte = new TArray_sheet(-1,1,0,-1,"Selezione partite aperte","@1|Anno|Numero|Data documento|Saldo@15", 0, 1);
 | |
|     Load_Partite_Aperte(get_msk()->get_long(F_CODCF));
 | |
|     if (_Partite_aperte->run() == K_ENTER)
 | |
|     {
 | |
|       _residuo = ZERO;       
 | |
|       for (int i = 0; i < _Partite_aperte->items(); i++)
 | |
|         if (_Partite_aperte->checked(i))
 | |
|           _residuo += real(_Partite_aperte->row(i).get(4));
 | |
|       get_msk()->set(F_RESIDUO,_residuo);
 | |
|       TSheet_field& sheet = (TSheet_field&)get_msk()->field(F_SHEET_EFF);
 | |
|       sheet.reset();
 | |
|     }      
 | |
|     delete _Partite_aperte;
 | |
|     break;
 | |
|   }
 | |
|   default:
 | |
|     break;
 | |
|   }
 | |
|   } while (tasto!=K_QUIT);
 | |
| }
 | |
| 
 | |
| int ef0200(int argc, char* argv[])
 | |
| {
 | |
|   Creazione_Effetti_da_EC a ;
 | |
|   a.run(argc, argv, "Creazione effetti da E.C.");
 | |
|   return 0;
 | |
| }
 |