Files correlati : Ricompilazione Demo : [ ] Commento :corretti errori di compilazione dovuti a compilatore nuovo git-svn-id: svn://10.65.10.50/trunk@14700 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			559 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			559 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| // 771231.cpp - Quadri F
 | |
| //
 | |
| #include <relapp.h>
 | |
| #include <defmask.h>  
 | |
| #include <msksheet.h>
 | |
| #include <recarray.h>
 | |
| 
 | |
| #include "77lib.h"
 | |
| #include "774200.h"
 | |
| #include "771231a.h"  // F, F-1
 | |
| #include "771232.h"   // quadro G
 | |
| #include "prospe1.h"
 | |
| #include "quadrif.h"
 | |
| #include "ca7.h"
 | |
|                 
 | |
| // Righe spreadsheet F                
 | |
| #define S_CODC  101
 | |
| #define S_DESC  102
 | |
| #define S_ALIQ  103
 | |
| #define S_SOGG  104
 | |
| #define S_ROPE  105
 | |
| #define S_SOMM  106
 | |
| 
 | |
| class TQuadroF : public TRelation_application
 | |
| {
 | |
|   private:
 | |
|     TRelation*      _rel;
 | |
|     TMask*          _msk;
 | |
| 
 | |
|     int             _anno_dic;  // anno dichiarazione
 | |
|     long            _codditta;
 | |
|     TRecord_array*  _prosp_a, *_prosp_b, *_prosp_c;
 | |
|     bool            _registra;
 | |
|     
 | |
|     static void     calcola_ritenuta_operata(TMask& m, char prosp);
 | |
|     static bool     aliq_handler(TMask_field& f, KEY k);
 | |
|     static bool     sogg_handler(TMask_field& f, KEY k);
 | |
|     static bool     rope_handler(TMask_field& f, KEY k);
 | |
| 
 | |
|     static bool     dprov_handler(TMask_field& f, KEY k);        
 | |
|     static bool     daliq_handler(TMask_field& f, KEY k);        
 | |
|     
 | |
|     static bool     mainmsk_handler(TMask& m, KEY k);        
 | |
| 
 | |
|     int salva_prospetto(char prosp, bool re);
 | |
| 
 | |
|   protected:
 | |
|     virtual bool  user_create();
 | |
|     virtual bool  user_destroy();
 | |
|     virtual int   read(TMask& m);
 | |
|     virtual int   rewrite(const TMask& m);
 | |
|     virtual int   write  (const TMask& m);  
 | |
|     virtual bool  remove();
 | |
|     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_insert_mode (TMask&);
 | |
|     virtual void  init_modify_mode (TMask&);
 | |
|     
 | |
|     void init_mask (TMask&);
 | |
|     void init_sheet(TSheet_field& s);
 | |
|     void fill_ss();
 | |
|     void ss_pack(TSheet_field& ss) const;
 | |
|     void riempi_prospetto(const char prosp);
 | |
|     int  re_write(bool re);
 | |
| 
 | |
|   public:                      
 | |
|     TString _quadro, _title;
 | |
|     const char* taitol() const { return _title; }
 | |
|     
 | |
|     TQuadroF(char quadro = '0');
 | |
|     virtual ~TQuadroF() {};
 | |
| };                    
 | |
| 
 | |
| TQuadroF::TQuadroF(char quadro)
 | |
| {
 | |
|   _registra = FALSE;
 | |
|   switch (quadro)
 | |
|   {
 | |
|     case '0':
 | |
|       _quadro = "F";  
 | |
|       _title  = "Quadro F";
 | |
|       break;
 | |
|     case '1':
 | |
|       _quadro = "F1";  
 | |
|       _title  = "Quadro F1";
 | |
|       break;
 | |
|     case '2':
 | |
|       _quadro = "F2";  
 | |
|       _title  = "Quadro F2";
 | |
|       break;
 | |
|     default:
 | |
|       break;
 | |
|   }
 | |
| }
 | |
| 
 | |
| inline TQuadroF& app() { return (TQuadroF&) main_app(); }
 | |
|                                           
 | |
| void TQuadroF::init_insert_mode (TMask& m)
 | |
| {                                                                   
 | |
|   init_mask(m);
 | |
| }
 | |
|                                           
 | |
| void TQuadroF::init_modify_mode (TMask& m)
 | |
| {                                                                   
 | |
| //  m.disable(DLG_DELREC);   // disabilito Elimina nella toolbar
 | |
| }
 | |
| 
 | |
| void TQuadroF::init_query_mode (TMask& m)
 | |
| {
 | |
|   TString16 codditta;
 | |
|   codditta << _codditta; 
 | |
|   TMask_field& f = m.field(DLG_CODDITTA);
 | |
|   f.set(codditta);
 | |
|   f.check();
 | |
|   m.send_key(K_AUTO_ENTER,0);
 | |
| }
 | |
| 
 | |
| void TQuadroF::init_mask (TMask&)
 | |
| {
 | |
|   fill_ss();
 | |
| }
 | |
| 
 | |
| void TQuadroF::init_sheet(TSheet_field& s) 
 | |
| {
 | |
|    const int delta = _quadro == "F1" ? 3 : 0;
 | |
| 
 | |
|    TMask& m = s.sheet_mask();
 | |
|    for (short id = S_CODC; id <= S_DESC; id++)
 | |
|    {
 | |
|      TEdit_field& e = m.efield(id+delta);
 | |
|      TBrowse* browse = e.browse();
 | |
|      CHECKD(browse, "Manca la ricerca sul file delle causali nel campo ", id);
 | |
|      TCursor* cur = browse->cursor();
 | |
|      TString16 filter; filter << "S1=" << "\"" << _quadro << "\"";
 | |
|      cur->setfilter(filter);
 | |
|    }                    
 | |
|    
 | |
|    m.set_handler(S_ALIQ + delta, aliq_handler);
 | |
|    m.set_handler(S_SOGG + delta, sogg_handler);
 | |
|    m.set_handler(S_ROPE + delta, rope_handler);
 | |
| }
 | |
| 
 | |
| bool TQuadroF::user_create() 
 | |
| {
 | |
|   _codditta = get_firm_770();
 | |
| 
 | |
|   if (_quadro == "F")
 | |
|   {
 | |
|     _msk = new TMask("771231a");
 | |
|     _msk->set_handler(D_PROVENTI, dprov_handler);
 | |
|     _msk->set_handler(D_ALI,      daliq_handler);
 | |
| 
 | |
|     _msk->set_handler(mainmsk_handler);
 | |
|     
 | |
|     TSheet_field& p_a = (TSheet_field&) _msk->field(F_A);  
 | |
|     init_sheet(p_a);
 | |
|     
 | |
|     TSheet_field& p_b = (TSheet_field&) _msk->field(F_B);  
 | |
|     init_sheet(p_b);
 | |
|     
 | |
|     TSheet_field& p_c = (TSheet_field&) _msk->field(F_C);  
 | |
|     init_sheet(p_c);
 | |
| 
 | |
|     _rel = new TRelation(LF_QUAF);
 | |
|     for (char prosp = 'D'; prosp <= 'H'; prosp++)
 | |
|     {          
 | |
|        TString80 filter;
 | |
|        filter.format("CODDITTA=%ld|TIPOPRO=\"%c\"|NPROG=1", 
 | |
|                      _codditta, prosp); 
 | |
|        const int alias = -PROSP_A + prosp - 'A';
 | |
|       _rel->add(LF_RIGHEF, filter, 1, 0, alias);
 | |
|       _rel->write_enable(-alias);
 | |
|     }
 | |
|     
 | |
|     TRectype dep(LF_RIGHEF);
 | |
|     dep.zero();                
 | |
|     dep.put("CODDITTA", _codditta);
 | |
|     dep.put("TIPOPRO", "A");
 | |
|     _prosp_a = new TRecord_array(dep, "NPROG");
 | |
|     dep.put("TIPOPRO", "B");
 | |
|     _prosp_b = new TRecord_array(dep, "NPROG");
 | |
|     dep.put("TIPOPRO", "C");
 | |
|     _prosp_c = new TRecord_array(dep, "NPROG");
 | |
|   }
 | |
| 
 | |
|   if (_quadro == "F1")
 | |
|   {
 | |
|     _msk = new TMask("771232a");
 | |
|     _msk->set_handler(mainmsk_handler);
 | |
|     TSheet_field& p_a = (TSheet_field&) _msk->field(F_A);
 | |
|     init_sheet(p_a);
 | |
| 
 | |
|     _rel = new TRelation(LF_QUAF1);
 | |
|     TString80 filter;
 | |
|     filter.format("CODDITTA=%ld|NPROG=1", _codditta); 
 | |
|     _rel->add(LF_RIGHEF1, filter);
 | |
| 
 | |
|     TRectype dep(LF_RIGHEF1);
 | |
|     dep.zero();                
 | |
|     dep.put("CODDITTA", _codditta);
 | |
|     dep.put("TIPOPRO", "A");
 | |
|     _prosp_a = new TRecord_array(dep, "NPROG");
 | |
|   }
 | |
| 
 | |
|   if (_quadro == "F2")
 | |
|   {
 | |
|     _msk = new TMask("771233a");
 | |
|     _msk->set_handler(mainmsk_handler);
 | |
|     TSheet_field& p_a = (TSheet_field&)_msk->field(F_A);  
 | |
|     init_sheet(p_a);
 | |
| 
 | |
|     _rel = new TRelation(LF_QUAF2);
 | |
|     TString80 filter;
 | |
|     filter.format("CODDITTA=%ld|NPROG=1", _codditta); 
 | |
|     _rel->add(LF_RIGHEF2, filter);
 | |
| 
 | |
|     TRectype dep(LF_RIGHEF2);
 | |
|     dep.zero();                
 | |
|     dep.put("CODDITTA", _codditta);
 | |
|     dep.put("TIPOPRO", "A");
 | |
|     _prosp_a = new TRecord_array(dep, "NPROG");
 | |
|   }
 | |
| 
 | |
|   _msk->disable(DLG_CANCEL);   // disabilito Annulla nella toolbar
 | |
|   _msk->disable(DLG_NEWREC);   // disabilito Nuovo   nella toolbar
 | |
|   _msk->disable(DLG_DELREC);   // disabilito Elimina nella toolbar
 | |
|   _msk->disable(DLG_FINDREC);  // disabilito Ricerca nella toolbar
 | |
|     
 | |
|   return TRUE;                               
 | |
| }
 | |
| 
 | |
| bool TQuadroF::user_destroy()
 | |
| { 
 | |
|   delete _msk;
 | |
|   delete _rel;
 | |
|   delete _prosp_a;
 | |
|   
 | |
|   if (_quadro == "F")
 | |
|   {
 | |
|     delete _prosp_b; 
 | |
|     delete _prosp_c; 
 | |
|   }
 | |
| 
 | |
|   if (_registra) 
 | |
|   {  
 | |
|     TRiporti rip;
 | |
|     rip.set(_quadro);
 | |
|   }
 | |
|   
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| const int PROSP_RIGHE = 16;
 | |
| 
 | |
| void TQuadroF::riempi_prospetto(const char prosp)
 | |
| {
 | |
|   TSheet_field& ss = (TSheet_field&)_msk->field(F_A + prosp - 'A');
 | |
|   TRecord_array& prosp_x = *(prosp == 'B' ? _prosp_b : (prosp == 'C' ? _prosp_c : _prosp_a));
 | |
|   const int last = prosp_x.last_row();
 | |
|   int i;
 | |
|   for (i = 0; i < last; i++)
 | |
|   {
 | |
|     TRectype& r = prosp_x.row(i+1, TRUE);
 | |
|     TToken_string& row = ss.row(i);                 
 | |
|     if (_quadro == "F1")
 | |
|     {                           
 | |
|       row.add(r.get(RQF1_TIPOA));
 | |
|       row.add(r.get(RQF1_CODANAGR));
 | |
|       row.add("");
 | |
|     }
 | |
|     row.add(r.get(QUF_CODCAUS));
 | |
|     row.add(r.get(QUF_DENCAUS));
 | |
|     row.add(r.get(QUF_ALIQUOTA));
 | |
|     
 | |
|     const real sogg = r.get_real(QUF_SOGRIT);
 | |
|     const real rope = r.get_real(QUF_ROPE);
 | |
|     const real somm = sogg - rope;
 | |
|     row.add(sogg.string());
 | |
|     row.add(rope.string());
 | |
|     row.add(somm.string());
 | |
|     
 | |
|     ss.check_row(i);
 | |
|   }
 | |
|   for (i = last; i < PROSP_RIGHE; i++)
 | |
|     ss.row(i);    
 | |
| }
 | |
| 
 | |
| void TQuadroF::fill_ss()
 | |
| {
 | |
|   riempi_prospetto('A');
 | |
|   if (_quadro == "F")
 | |
|   {
 | |
|     riempi_prospetto('B');
 | |
|     riempi_prospetto('C');
 | |
|   }
 | |
| }
 | |
| 
 | |
| int TQuadroF::read(TMask& m)
 | |
| {
 | |
|   int err = TRelation_application::read(m);
 | |
|   if (err == NOERR)
 | |
|   {                
 | |
|     _prosp_a->read(_prosp_a->key());
 | |
|     if (_quadro == "F")
 | |
|     {
 | |
|       _prosp_b->read(_prosp_b->key());
 | |
|       _prosp_c->read(_prosp_c->key());
 | |
|     }
 | |
|     fill_ss();
 | |
|   }  
 | |
|   return err;
 | |
| }            
 | |
| 
 | |
| int TQuadroF::write(const TMask& m)
 | |
| {
 | |
|   int err = TRelation_application::write(m);
 | |
|   if (err == NOERR)
 | |
|     err = re_write(FALSE);   
 | |
|   _registra = err == NOERR;    
 | |
|   return err;
 | |
| }
 | |
| 
 | |
| int TQuadroF::rewrite(const TMask& m)
 | |
| {
 | |
|   int err = re_write(TRUE);
 | |
|   if (err == NOERR)
 | |
|     err = TRelation_application::rewrite(m);
 | |
|   _registra = err == NOERR;    
 | |
|   return err;
 | |
| }
 | |
| 
 | |
| void TQuadroF::ss_pack(TSheet_field& ss) const
 | |
| {
 | |
|   TString_array& rows = ss.rows_array();
 | |
| 
 | |
|   const int max = rows.items();
 | |
|   for (int i = 0; i < max; i++)
 | |
|   {
 | |
|     TToken_string& r = (TToken_string&)rows[i];
 | |
|     const int pos = _quadro == "F1" ? 4 : 1;
 | |
|     const char* desc = r.get(pos);
 | |
|     bool destroy = desc == NULL;
 | |
|     if (!destroy)                        
 | |
|     {
 | |
|       const TFixed_string desccaus(desc);
 | |
|       destroy = desccaus.blank();
 | |
|     }
 | |
|     if (destroy) 
 | |
|       rows.destroy(i, FALSE);
 | |
|   }
 | |
|   rows.pack();
 | |
| }        
 | |
| 
 | |
| int TQuadroF::salva_prospetto(char prosp, bool re)
 | |
| { 
 | |
|   TRecord_array& prosp_x = *(prosp == 'B' ? _prosp_b : (prosp == 'C' ? _prosp_c : _prosp_a));
 | |
|   prosp_x.destroy_rows();                      
 | |
|   prosp_x.renum_key("CODDITTA", _codditta);
 | |
|   
 | |
|   TSheet_field& p_x = (TSheet_field&)_msk->field(F_A + prosp - 'A');
 | |
|   TString_array& rows = p_x.rows_array();
 | |
|   ss_pack(p_x);
 | |
|   
 | |
|   TString caus, desc, aliq, sogg, rope;
 | |
|   
 | |
|   for (int i = 0;  i < p_x.items(); i++)
 | |
|   {
 | |
|     TToken_string &riga = p_x.row(i);
 | |
|     
 | |
|     const int delta = _quadro == "F1" ? 3 : 0;
 | |
|     caus = riga.get(delta);
 | |
|     desc = riga.get();     
 | |
|     aliq = riga.get();   
 | |
|     sogg = riga.get();
 | |
|     rope = riga.get();
 | |
| 
 | |
|     const int row = i + 1;
 | |
|     TRectype& r = _prosp_a->row(row, TRUE);
 | |
|     r.zero();                          // Probabilmente inutile
 | |
|     r.put (QUF_CODDITTA, _codditta);   // Probabilmente inutile
 | |
|     r.put (QUF_TIPOPRO,  prosp);       // Probabilmente inutile
 | |
|     r.put (QUF_NPROG,    row);         // Probabilmente inutile
 | |
| 
 | |
|     if (app()._quadro == "F1")
 | |
|     {
 | |
|       r.put (RQF1_TIPOA,    riga.get(0));
 | |
|       r.put (RQF1_CODANAGR, riga.get());
 | |
|     }
 | |
|     r.put (QUF_ALIQUOTA, aliq);
 | |
|     r.put (QUF_CODCAUS,  caus);
 | |
|     r.put (QUF_DENCAUS,  desc);
 | |
|     r.put (QUF_SOGRIT,   sogg);
 | |
|     r.put (QUF_ROPE,     rope);
 | |
|   }
 | |
|   return _prosp_a->write(re);  
 | |
| }        
 | |
| 
 | |
| int TQuadroF::re_write(bool re)
 | |
| {
 | |
|   int err = salva_prospetto('A', re);  
 | |
|   if (_quadro == "F")
 | |
|   { 
 | |
|     if (err == NOERR)
 | |
|       err = salva_prospetto('B', re);  
 | |
|     if (err == NOERR)
 | |
|       err = salva_prospetto('C', re);  
 | |
|   } 
 | |
|   return err;
 | |
| }
 | |
| 
 | |
| bool TQuadroF::remove()
 | |
| {  
 | |
|   bool ok, ok_a, ok_b, ok_c;
 | |
|   ok = TRelation_application::remove();
 | |
|   ok_a = _prosp_a->remove() == NOERR; 
 | |
|   _prosp_a->destroy_rows();
 | |
|   
 | |
|   if (_quadro == "F")
 | |
|   {
 | |
|     ok_b = _prosp_b->remove() == NOERR;   
 | |
|     _prosp_b->destroy_rows();
 | |
|     ok_c = _prosp_c->remove() == NOERR;
 | |
|     _prosp_c->destroy_rows();
 | |
|     return _registra = ok && ok_a && ok_b && ok_c;
 | |
|   }                 
 | |
|   else
 | |
|     return _registra = ok && ok_a;
 | |
| }
 | |
| 
 | |
| bool TQuadroF::mainmsk_handler(TMask& m, KEY k)
 | |
| { 
 | |
|   if (k == K_ESC)
 | |
|   {
 | |
|     TOperable_field& f = m.focus_field();
 | |
|     m.set_focus_field(f.dlg()); 
 | |
|   } 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroF::dprov_handler(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_TAB && f.focusdirty())
 | |
|   {                          
 | |
|     calcola_ritenuta_operata(f.mask(), 'D');
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
|         
 | |
| bool TQuadroF::daliq_handler(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_TAB && f.focusdirty())
 | |
|   {                         
 | |
|     calcola_ritenuta_operata(f.mask(), 'D');
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroF::aliq_handler(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_TAB && f.focusdirty())
 | |
|   {            
 | |
|     TMask& m = f.mask();
 | |
|     TSheet_field* s = m.get_sheet();
 | |
|     char prosp = 'A' + s->dlg() - F_A;
 | |
|     calcola_ritenuta_operata(m, prosp);
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroF::sogg_handler(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_TAB && f.focusdirty()) 
 | |
|   {
 | |
|     TMask& m = f.mask();
 | |
|     TSheet_field* s = m.get_sheet();
 | |
|     char prosp = 'A' + s->dlg() - F_A;
 | |
|     calcola_ritenuta_operata(m, prosp);
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroF::rope_handler(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_TAB && f.focusdirty())
 | |
|   {              
 | |
|     TMask& m = f.mask();
 | |
|     const real sogg = m.get_real(f.dlg()-1);
 | |
|     const real rope = m.get_real(f.dlg());
 | |
|     const real somm = sogg - rope;
 | |
|     m.set(f.dlg()+1, somm);
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| void TQuadroF::calcola_ritenuta_operata(TMask& m, char prosp)
 | |
| {   
 | |
|   if (app()._msk->is_running())
 | |
|   {
 | |
|     int id_ali, id_sogg, id_rope, id_somm;
 | |
|     
 | |
|     if (prosp == 'D')
 | |
|     {                 
 | |
|       id_ali  = D_ALI;
 | |
|       id_sogg = D_PROVENTI;
 | |
|       id_rope = D_ROP;
 | |
|       id_somm = 0;
 | |
|     }
 | |
|     else                    // A, B, C
 | |
|     {
 | |
|       const int delta = app()._quadro == "F1" ? 3 : 0;
 | |
|       id_ali  = S_ALIQ + delta;
 | |
|       id_sogg = S_SOGG + delta;
 | |
|       id_rope = S_ROPE + delta;     
 | |
|       id_somm = S_SOMM + delta;
 | |
|     }
 | |
|     
 | |
|     real sogg = m.get_real(id_sogg);
 | |
|     real ali  = m.get_real(id_ali);
 | |
|     real rope = (sogg * ali) / 100.00;           
 | |
|     rope.round();
 | |
|     
 | |
|     if (rope != ZERO)  // Evita di scrivere "0" nel campo (v. reqif_func nella msk)
 | |
|       m.set(id_rope, rope);
 | |
|     else
 | |
|       m.reset(id_rope);
 | |
|       
 | |
|     if (id_somm)  
 | |
|     {
 | |
|       real somma = sogg - rope;
 | |
|       m.set(id_somm, somma);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| int quadroF(int argc, char* argv[])
 | |
| {
 | |
|   const char quadro = *argv[2];  // 0 = F, 1 = F-1, 2 = F-2, 3 = G
 | |
|                                  // 4 = distinta G, 5 = G-1
 | |
|   if (quadro <= '2')
 | |
|   {  
 | |
|     TQuadroF a(quadro);
 | |
|     a.run(argc, argv, a.taitol());
 | |
|   }
 | |
| 
 | |
|   if (quadro == '3')
 | |
|     quadro_g(argc,argv);
 | |
| 
 | |
|   if (quadro == '4')
 | |
|     distinta_quadro_g(argc,argv);
 | |
| 
 | |
|   if (quadro == '5')
 | |
|     quadro_g1(argc, argv);
 | |
| 
 | |
|   return 0;
 | |
| }
 |