Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione AGA 1.7 patch 335 git-svn-id: svn://10.65.10.50/trunk@10495 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			387 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			387 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| // 771310.cpp  - Modello 770 - Gestione quadro ST (ex-quadro L)
 | |
| #include <applicat.h>
 | |
| #include <mask.h>
 | |
| #include <msksheet.h>
 | |
| #include <relapp.h>
 | |
| #include <relation.h>
 | |
| #include <tabutil.h>
 | |
| #include <urldefid.h>
 | |
| #include <config.h>      
 | |
| #include <utility.h> 
 | |
| #include <mailbox.h> 
 | |
| #include <execp.h>
 | |
| 
 | |
| #include "771310.h" 
 | |
| #include "774100.h"
 | |
| #include "774200.h"
 | |
| #include "77lib.h"
 | |
| #include "scperc.h"
 | |
| #include "rver.h"
 | |
| #include "rpag.h"  
 | |
| #include "quadrol.h"
 | |
| 
 | |
| class M71310_application : public TRelation_application
 | |
| {
 | |
|     TRelation* _rel;
 | |
|     TMask*     _msk; 
 | |
|     TGenera*   _app;
 | |
|     TConfig*   _cnf;
 | |
|     int        _anno;  
 | |
|     bool       _registra;
 | |
|     TRiporti   _rip;
 | |
|     
 | |
|   protected:
 | |
|     virtual bool user_create();
 | |
|     virtual bool user_destroy();
 | |
|     virtual TRelation*   get_relation() const { return _rel; }
 | |
|     virtual TMask*       get_mask(int mode) { return _msk; }
 | |
|     virtual bool         changing_mask(int mode) {return FALSE; }
 | |
|     virtual void init_query_mode(TMask&);
 | |
|     virtual void init_modify_mode(TMask&);
 | |
|     virtual void init_insert_mode(TMask&); 
 | |
|     virtual void on_config_change();  
 | |
|     virtual int  rewrite(const TMask& m);
 | |
|     virtual int  write(const TMask& m);  
 | |
|     virtual bool remove();
 | |
|     void   build_note(const TMask& m);
 | |
|     void   set_field_note(TMask& m);                
 | |
|     bool   changed_anno_dic(TMask& m);
 | |
|     real    arrotonda(const TMask& m);
 | |
|     static bool generazione (TMask_field& f, KEY k);                  
 | |
|     static bool genera_para (TMask_field& f, KEY k);                    
 | |
|     static bool tipo        (TMask_field& f, KEY k);                  
 | |
|     static bool luogo       (TMask_field& f, KEY k);
 | |
|     static bool auto_premi  (TMask_field& f, KEY k);  
 | |
|     static bool mese        (TMask_field& f, KEY k);
 | |
|     static bool anno        (TMask_field& f, KEY k);                  
 | |
|     static bool cod_tributo (TMask_field& f, KEY k);
 | |
|     static bool codditta_hnd(TMask_field& f, KEY k);
 | |
|     static bool artbil_hnd(TMask_field& f, KEY k);
 | |
|   
 | |
|   public:
 | |
|     M71310_application() {}
 | |
| };                     
 | |
| 
 | |
| M71310_application& app() { return (M71310_application&) main_app(); }
 | |
| 
 | |
| bool M71310_application::generazione(TMask_field& f , KEY k)
 | |
| {
 | |
|   if (k == K_SPACE)  
 | |
|   {
 | |
|     app()._app->set(get_firm_770(), app()._cnf);
 | |
|     app()._registra = TRUE;
 | |
|   }  
 | |
|     
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool M71310_application::genera_para(TMask_field& f , KEY k)
 | |
| {
 | |
|   if (k == K_SPACE)
 | |
|   {    
 | |
|     TString appname("776mod -4 d");
 | |
|     TExternal_app a(appname);
 | |
|     a.run();
 | |
|     f.mask().set_focus();
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool M71310_application::codditta_hnd(TMask_field& f, KEY k)
 | |
| {         
 | |
|   if (k == K_TAB && !(f.mask().is_running()) )
 | |
|   {
 | |
|     TString16 codditta; codditta << get_firm_770();
 | |
|     if (codditta != "0")        
 | |
|     {
 | |
|       f.set(codditta);
 | |
|       f.check();
 | |
|     }
 | |
|   }   
 | |
|   return TRUE;                                           
 | |
| }
 | |
| 
 | |
| bool M71310_application::mese(TMask_field& f , KEY k)
 | |
| { 
 | |
| // is_running() serve per fare il controllo solo quando la maschera sta andando
 | |
| // In questo modo tutti i K_TAB che ricevono i campi durante la costruzione della maschera
 | |
| // vengono ignorati.
 | |
| // Il K_TAB mi fa scattare il controllo quando lascio il campo
 | |
| // Il K_ENTER mi serve per fare i controlli quando uso uno dei tasti della bottoniera
 | |
| 
 | |
|   if (k == K_TAB || k == K_ENTER)
 | |
|   {
 | |
|     int mese = f.mask().get_int(F_QLMESEPAG);
 | |
|     
 | |
|     if (mese == 0)
 | |
|       return f.error_box("Il mese di pagamento deve essere indicato obbligatoriamente");
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool M71310_application::anno(TMask_field& f , KEY k)
 | |
| { 
 | |
| // is_running() serve per fare il controllo solo quando la maschera sta andando
 | |
| // In questo modo tutti i K_TAB che ricevono i campi durante la costruzione della maschera
 | |
| // vengono ignorati.
 | |
| // Il K_TAB mi fa scattare il controllo quando lascio il campo
 | |
| // Il K_ENTER mi serve per fare i controlli quando uso uno dei tasti della bottoniera
 | |
| 
 | |
|   if ((k == K_TAB && f.mask().is_running()) || k == K_ENTER)
 | |
|   {
 | |
|     int anno = f.mask().get_int(F_QLANNOPAG);
 | |
|     
 | |
|     if (anno == 0)
 | |
|       return f.error_box("L'anno di pagamento deve essere indicato obbligatoriamente");
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool M71310_application::cod_tributo(TMask_field& f , KEY k)
 | |
| {
 | |
| // is_running() serve per fare il controllo solo quando la maschera sta andando
 | |
| // In questo modo tutti i K_TAB che ricevono i campi durante la costruzione della maschera
 | |
| // vengono ignorati.
 | |
| // Il K_TAB mi fa scattare il controllo quando lascio il campo
 | |
| // Il K_ENTER mi serve per fare i controlli quando uso uno dei tasti della bottoniera
 | |
| 
 | |
|   if ((k == K_TAB && f.mask().is_running()) || k == K_ENTER)
 | |
|   {
 | |
|     int tributo = f.mask().get_int(F_QLCODTRIB);
 | |
|     if (tributo == 0)
 | |
|       return f.error_box("Il codice tributo deve essere indicato obbligatoriamente");
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| // "auto-premimento" 
 | |
| // Sia da F_ABI che da F_NUMERO
 | |
| bool M71310_application::auto_premi(TMask_field& f, KEY k)
 | |
| { 
 | |
|   if (k == K_CTRL+K_TAB && f.mask().is_running())
 | |
|   {
 | |
|     f.set_dirty();
 | |
|     return TRUE;
 | |
|   }
 | |
| 
 | |
| //  if (k == K_TAB && f.mask().is_running())
 | |
| //    f.mask().stop_run(K_AUTO_ENTER);
 | |
|   return TRUE;
 | |
| }
 | |
|                                                  
 | |
| bool M71310_application::tipo(TMask_field& f , KEY k)
 | |
| {
 | |
|   if (k == K_SPACE)
 | |
|   {         
 | |
|     TMask& m = f.mask();
 | |
|     TString16 tipo  = m.get(F_QLTIPOVERS);
 | |
|     TString16 luogo = m.get(F_QLLUOVERS);
 | |
| 
 | |
|     if (tipo.not_empty() && luogo.not_empty())
 | |
|       if (tipo == "D" && luogo == "T") 
 | |
|       {
 | |
|         m.reset(-G_DISTINTA_TESORERIA);         
 | |
|         m.disable(-G_DISTINTA_TESORERIA);               
 | |
|       }
 | |
|       else
 | |
|         m.enable(-G_DISTINTA_TESORERIA);
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool M71310_application::luogo(TMask_field& f , KEY k)
 | |
| {
 | |
|   if (k == K_SPACE)
 | |
|   {                                  
 | |
|     TMask& m = f.mask();
 | |
|     TString16 tipo  = m.get(F_QLTIPOVERS);
 | |
|     TString16 luogo = m.get(F_QLLUOVERS);
 | |
| 
 | |
|     if (tipo.not_empty())
 | |
|       if (tipo == "D" && luogo == "T")
 | |
|       {
 | |
|         m.reset(-G_DISTINTA_TESORERIA);
 | |
|         m.disable(-G_DISTINTA_TESORERIA);       
 | |
|       }
 | |
|       else
 | |
|         m.enable(-G_DISTINTA_TESORERIA);
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| // Tenta di mandare il focus al campo visibile invece che a quello
 | |
| // nascosto
 | |
| bool M71310_application::artbil_hnd(TMask_field& f , KEY k) 
 | |
| {
 | |
|   if (k == K_TAB)
 | |
|   {
 | |
|     TMask& m = f.mask();    
 | |
|     const char tipo  = m.get(F_QLTIPOVERS)[0];
 | |
|     const char luogo = m.get(F_QLLUOVERS)[0];
 | |
| 
 | |
| // Determina chi ha il focus in questo momento
 | |
|     TMask_field& fld = m.focus_field(); 
 | |
| 
 | |
| // Se il focus e' sull'ultimo campo prima di F_ABI
 | |
|     if (fld.dlg() == F_ARTBIL)
 | |
|     {
 | |
| //      WINDOW  win;
 | |
| // Determina chi ce lo dovrebbe avere dopo..    
 | |
|       if (tipo == 'B')
 | |
|       {                               
 | |
|         TMask_field& fabi = m.field(F_ABI);
 | |
|         fabi.set_focus();
 | |
| //        win = m.field(F_ABI).win();
 | |
| //        m.set_focus_win(win, TRUE);
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| void M71310_application::on_config_change()
 | |
| {
 | |
|   TConfig conf(CONFIG_STUDIO);
 | |
|   _anno = (int) conf.get_long(ANNO_SEL);
 | |
| } 
 | |
| 
 | |
| // Determina se l'utente ha cambiato l'anno di dichiarazione
 | |
| // impostato. Se si' non bisogna toccarlo
 | |
| bool M71310_application::changed_anno_dic(TMask& m)
 | |
| {
 | |
|   const int anno_corr = m.get_int(F_ANNODIC);
 | |
|   return anno_corr ? anno_corr != _anno : FALSE;
 | |
| }
 | |
| 
 | |
| void M71310_application::init_insert_mode(TMask& m)
 | |
| {
 | |
|   if (!changed_anno_dic(m))
 | |
|     m.set(F_ANNODIC, _anno);
 | |
|   m.disable(F_ANNODIC);
 | |
|   m.disable(F_GENERA);
 | |
| }
 | |
|                                
 | |
| void M71310_application::init_query_mode(TMask& m)
 | |
| {         
 | |
|   if (!changed_anno_dic(m))
 | |
|     m.set(F_ANNODIC, _anno);
 | |
|   m.enable(F_ANNODIC);
 | |
|   m.enable (F_GENERA); 
 | |
| }
 | |
| 
 | |
| void M71310_application::init_modify_mode(TMask& m)
 | |
| {         
 | |
|   if (!changed_anno_dic(m))
 | |
|     m.set(F_ANNODIC, _anno); 
 | |
|   m.disable(F_ANNODIC);
 | |
|   set_field_note(m);
 | |
|   
 | |
|   m.disable(F_GENERA);
 | |
| }
 | |
| 
 | |
| void M71310_application::set_field_note(TMask& m)
 | |
| {
 | |
|   const TString& note = _rel->lfile().get(QUL_QLNOTE);
 | |
|   for (int i = note.len()-1; i >= 0; i--) if (note[i] > ' ')
 | |
|   {
 | |
|     const short dlg = F_NOTEA + int(note[i] - 'A');
 | |
|     m.set(dlg, "X");
 | |
|   }  
 | |
| }
 | |
| 
 | |
| void M71310_application::build_note(const TMask& m)
 | |
| {
 | |
|   int index = 0;
 | |
|   TString note; note.spaces(20);
 | |
|   for (short dlg = F_NOTEA; dlg <= F_NOTEZ; dlg++) if (m.id2pos(dlg) > 0)
 | |
|   {
 | |
|     if (!m.get(dlg).blank())
 | |
|     {
 | |
|       char letter = 'A' + dlg - F_NOTEA;
 | |
|       note[index] = letter; 
 | |
|     }
 | |
|     index++;
 | |
|   }
 | |
|   _rel->lfile().put(QUL_QLNOTE, note);
 | |
| }
 | |
| 
 | |
| // Arrotonda l'importo versato
 | |
| real M71310_application::arrotonda(const TMask& m)
 | |
| {
 | |
|   real rImpVers = m.get_real(F_QLRITVEREC);
 | |
|   real rImpArr = round_770(rImpVers);
 | |
|   return rImpArr;
 | |
| }
 | |
| 
 | |
| int M71310_application::rewrite(const TMask& m)
 | |
| {
 | |
|   _registra = TRUE;
 | |
|   build_note(m);          
 | |
|   m.autosave(*_rel);
 | |
|   const real rImpVersArr = arrotonda(m);
 | |
|   _rel->lfile().put(QUL_QLRITVER, rImpVersArr);
 | |
|   return _rel->rewrite();
 | |
| }
 | |
| 
 | |
| int M71310_application::write(const TMask& m)
 | |
| {                  
 | |
|   _registra = TRUE;
 | |
|   build_note(m);
 | |
|   m.autosave(*_rel);
 | |
|   const real rImpVersArr = arrotonda(m);                
 | |
|   _rel->lfile().put(QUL_QLRITVER, rImpVersArr);  
 | |
|   return _rel->write();
 | |
| }
 | |
| 
 | |
| bool M71310_application::remove()
 | |
| {
 | |
|   _registra = TRUE;
 | |
|   return TRelation_application::remove();
 | |
| }
 | |
| 
 | |
| bool M71310_application::user_create()
 | |
| {
 | |
|   _cnf = new TConfig(CONFIG_STUDIO);
 | |
|   _rel = new TRelation (LF_QUAL);
 | |
|   _msk = new TMask("771310a");
 | |
|   _app = new TGenera('d');
 | |
|   _registra = FALSE;
 | |
| 
 | |
|   set_search_field(F_QLANNOPAG);
 | |
|   _msk->set_handler(F_GENERA, generazione);
 | |
|   _msk->set_handler(F_PARAMETRI, genera_para);
 | |
|   _msk->set_handler(F_CODDITTA, codditta_hnd);                    
 | |
|   _msk->set_handler(F_QLTIPOVERS, tipo);
 | |
|   _msk->set_handler(F_QLLUOVERS,luogo);
 | |
|   _msk->set_handler(F_QLMESEPAG, mese);
 | |
|   _msk->set_handler(F_QLANNOPAG, anno);
 | |
|   _msk->set_handler(F_QLCODTRIB, cod_tributo);   
 | |
|   _msk->set_handler(F_QLNUMERO, auto_premi); 
 | |
|   _msk->set_handler(F_CCQUIETANZA, auto_premi); 
 | |
|   _msk->set_handler(F_NPROG, auto_premi);
 | |
|   _msk->set_handler(F_ARTBIL, artbil_hnd);
 | |
|     
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool M71310_application::user_destroy()
 | |
| {
 | |
|   if (_registra)
 | |
|     _rip.set("L");
 | |
|   
 | |
|   delete _msk;
 | |
|   delete _rel;            
 | |
|   delete _cnf;  
 | |
|   delete _app;
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| int m71310(int argc, char* argv[])
 | |
| {
 | |
|   M71310_application a;
 | |
|   a.run(argc, argv, "Riepilogo ST");
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| 
 |