681 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			681 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| // 771232.cpp - Quadri G
 | |
| #include <relapp.h>
 | |
| #include <msksheet.h>
 | |
| #include <execp.h>
 | |
| #include <defmask.h> 
 | |
| #include <recarray.h>
 | |
| 
 | |
| #include "77lib.h"
 | |
| #include "774200.h"
 | |
| #include "771234a.h"   // 771234a.uml
 | |
| #include "771232.h"
 | |
| #include "quadrog.h"
 | |
| #include "quadrogp.h"
 | |
| 
 | |
| 
 | |
| // Aliquote prospetti 2  (I e II)
 | |
| HIDDEN const char* aliq[] =
 | |
| {
 | |
|   "10",
 | |
|   "10",
 | |
|   "12.50",
 | |
|   "15",
 | |
|   "32.40",
 | |
|   "NS",
 | |
|   ""
 | |
| };
 | |
| 
 | |
| HIDDEN const char*  DISTINTA_APP = "771mod -6 4";
 | |
| 
 | |
| //771234b.uml
 | |
| #define AMM_AZ    102
 | |
| #define NUM_AZ    103
 | |
| #define AMM_COMP  104
 | |
| 
 | |
| // 771234d.uml e 771234e.uml
 | |
| #define UTILI1S   101
 | |
| #define UTILI2S   102
 | |
| #define ALIQUOTA  103
 | |
| #define TITOLO    104
 | |
| #define ROPE      105
 | |
| 
 | |
| HIDDEN  real __amm_az = ZERO;
 | |
| HIDDEN  real __num_az = ZERO;  
 | |
| 
 | |
| class TQuadroG : public TRelation_application
 | |
| {
 | |
|   private:
 | |
|     TRelation*        _rel;
 | |
|     TMask*            _msk;
 | |
|     long              _codditta;
 | |
|     TRiporti          _rip;
 | |
|     TString16         _quadro;
 | |
|     TString80         _title;
 | |
|     bool              _registra, _bUsatoDistinta;
 | |
|     static bool     p1_notify(TSheet_field& s, int r, KEY k);
 | |
|     static bool     p2_notify(TSheet_field& s, int r, KEY k);
 | |
|     static bool     p3_notify(TSheet_field& s, int r, KEY k);
 | |
|     static bool     calc_amm(TMask_field& f, KEY k);
 | |
|     static bool     tit_hndlr(TMask_field& f, KEY k);
 | |
|     static bool     calc_rit(TMask_field& f, KEY k);
 | |
|     static bool     exec_distinta(TMask_field& f, KEY k);
 | |
|     static void     update_totals(TSheet_field& f); 
 | |
|     static bool     mainmsk_handler(TMask& m, KEY k);        
 | |
|   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&);
 | |
|     void      read_prospetti_1();
 | |
|     void      read_prospetti_2();
 | |
|     void      read_prospetti();
 | |
|     int       write_prospetti();
 | |
|     int       remove_prospetti();
 | |
|   public:                      
 | |
|     const char*   taitol() { return (const char*)_title; }
 | |
|     TMask&      main_mask() const { return (TMask&) *_msk; }
 | |
|         
 | |
|     TQuadroG(const char quadro='0');
 | |
|     virtual ~TQuadroG() {};
 | |
| };                    
 | |
| 
 | |
| 
 | |
| 
 | |
| TQuadroG::TQuadroG(const char quadro)
 | |
| {
 | |
|   _registra   = _bUsatoDistinta = FALSE;
 | |
|   switch (quadro)
 | |
|   {
 | |
|     case '3':
 | |
|       _quadro = "G";  
 | |
|       _title  = "Quadro G";
 | |
|       break;
 | |
|     default:
 | |
|       break;
 | |
|   }
 | |
| }
 | |
| 
 | |
| inline TQuadroG& app() { return (TQuadroG&) main_app(); }
 | |
| 
 | |
| int TQuadroG::read(TMask& m)
 | |
| {
 | |
|   int err = TRelation_application::read(m);
 | |
|   if (err == NOERR)
 | |
|     read_prospetti();
 | |
|   return err;
 | |
| }
 | |
| 
 | |
| int TQuadroG::write(const TMask& m)
 | |
| {
 | |
|   int err = TRelation_application::write(m);
 | |
|   _registra = err == NOERR;    
 | |
|   if (_registra)
 | |
|     err = write_prospetti();
 | |
|   return err;
 | |
| }
 | |
| 
 | |
| int TQuadroG::rewrite(const TMask& m)
 | |
| {                         
 | |
|   int err = TRelation_application::rewrite(m);
 | |
|   _registra = err == NOERR;    
 | |
|   if (_registra)
 | |
|     err = write_prospetti();
 | |
|   return err;
 | |
| }
 | |
| 
 | |
| bool TQuadroG::remove()
 | |
| {  
 | |
|   _registra = TRelation_application::remove();
 | |
|   remove_prospetti();
 | |
|   return _registra;
 | |
| }
 | |
| 
 | |
| void TQuadroG::read_prospetti_1()
 | |
| {
 | |
|   TRectype k(LF_QUAGP);
 | |
|   TRecord_array ra(LF_QUAGP,"NPROG"); 
 | |
|   TSheet_field& p1_I = (TSheet_field&)_msk->field(F_P1_I);
 | |
|   TSheet_field& p1_II = (TSheet_field&)_msk->field(F_P1_II);
 | |
| 
 | |
|   // Prospetto 1 - I  Utili in denaro
 | |
|   k.put(QGP_CODDITTA,_codditta);
 | |
|   k.put(QGP_PROSPETTO,"1");
 | |
|   k.put(QGP_SEZIONE,"1");
 | |
|   ra.read(k);
 | |
|   p1_I.destroy();
 | |
|   if (ra.rows()>0)
 | |
|   {
 | |
|     const int items = ra.rows();
 | |
|     for (int i = 0; i < items; i++)
 | |
|     {
 | |
|       const TRectype& r = ra.row(i+1);
 | |
|       TToken_string& t = p1_I.row(i);
 | |
|       t.add(r.get(QGP_DATADEL));
 | |
|       t.add(r.get(QGP_UTILI1S));
 | |
|       t.add(r.get(QGP_NUMQUOTE));
 | |
|       t.add(r.get(QGP_UTILI2S));
 | |
|     }
 | |
|   }
 | |
|   update_totals(p1_I);
 | |
|   
 | |
|   // Prospetto 1 - II  Utili in natura
 | |
|   k.zero();
 | |
|   k.put(QGP_CODDITTA,_codditta);
 | |
|   k.put(QGP_PROSPETTO,"1");
 | |
|   k.put(QGP_SEZIONE,"2");
 | |
|   ra.read(k);
 | |
|   p1_II.destroy();
 | |
|   if (ra.rows()>0)
 | |
|   {
 | |
|     const int items = ra.rows();
 | |
|     for (int i = 0; i < items; i++)
 | |
|     {
 | |
|       const TRectype& r = ra.row(i+1);
 | |
|       TToken_string& t = p1_II.row(i);
 | |
|       t.add(r.get(QGP_DESCRBENI));
 | |
|       t.add(r.get(QGP_UTILI1S));
 | |
|     }
 | |
|   }
 | |
|   update_totals(p1_II);
 | |
| }
 | |
| 
 | |
| void TQuadroG::read_prospetti_2()
 | |
| {
 | |
|   TRectype k(LF_QUAGP);
 | |
|   TRecord_array ra(LF_QUAGP,"NPROG"); 
 | |
|   TSheet_field& p2_I = (TSheet_field&)_msk->field(F_P2_I);
 | |
|   TSheet_field& p2_II = (TSheet_field&)_msk->field(F_P2_II);
 | |
| 
 | |
|   k.zero();
 | |
|   k.put(QGP_CODDITTA,_codditta);
 | |
|   k.put(QGP_PROSPETTO,"2");
 | |
|   p2_I.destroy();
 | |
|   p2_II.destroy();
 | |
|   for (int h = 1; h<=2; h++)
 | |
|   {
 | |
|     k.put(QGP_SEZIONE,h == 1 ? "1" : "2");
 | |
|     ra.read(k);
 | |
|     TSheet_field& f = h == 1 ? p2_I : p2_II;
 | |
|     if (ra.rows()>0)
 | |
|     {
 | |
|       const int items = ra.rows();
 | |
|       for (int i = 0; i < items; i++)
 | |
|       {
 | |
|         const TRectype& r = ra.row(i+1);
 | |
|         TToken_string& t = f.row(i);
 | |
|         t.add(r.get(QGP_UTILI1S));
 | |
|         t.add(r.get(QGP_UTILI2S));
 | |
|         t.add(r.get(QGP_ALIQUOTA));
 | |
|         t.add(r.get(QGP_TITOLO));
 | |
|         t.add(r.get(QGP_ROPE));
 | |
|         if (i < 6)
 | |
|         {
 | |
|           f.disable_cell(i,2);
 | |
|           f.disable_cell(i,3);
 | |
|           if (i == 5)
 | |
|           {
 | |
|             t.add("NS",2);
 | |
|             f.disable_cell(i,4);
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     else // Non vi sono righe di prospetto, aggiunge quelle standard
 | |
|     {
 | |
|       for (int i=0; ;i++)
 | |
|       {
 | |
|         if (aliq[i][0] == '\0')
 | |
|           break;
 | |
|         f.disable_cell(i,2);
 | |
|         f.disable_cell(i,3);
 | |
|         TToken_string& t = f.row(i);
 | |
|         t.add("");t.add("");
 | |
|         t.add(aliq[i]); 
 | |
|         char c = ' ';
 | |
|         if (aliq[i][0] == 'N')
 | |
|           f.disable_cell(i,4);
 | |
|         else
 | |
|           c = i == 0 ? 'A' : 'I'; // L'acconto e'solo per la prima riga (aliquota 10%)
 | |
|         t.add(c);
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| void TQuadroG::read_prospetti()
 | |
| {
 | |
|   read_prospetti_1();
 | |
|   // Prospetto 2 - I  Utili in denaro
 | |
|   // Prospetto 2 - II  Utili in natura
 | |
|   read_prospetti_2();
 | |
| }
 | |
| 
 | |
| int TQuadroG::write_prospetti()
 | |
| {
 | |
|   int err = NOERR, i, j;
 | |
|   TSheet_field& p1_I  = (TSheet_field&)_msk->field(F_P1_I);
 | |
|   TSheet_field& p1_II = (TSheet_field&)_msk->field(F_P1_II);
 | |
|   TSheet_field& p2_I  = (TSheet_field&)_msk->field(F_P2_I);
 | |
|   TSheet_field& p2_II = (TSheet_field&)_msk->field(F_P2_II);
 | |
|   TRectype k(LF_QUAGP);
 | |
| 
 | |
|   k.put(QGP_CODDITTA,_codditta);
 | |
|   k.put(QGP_PROSPETTO,"1");
 | |
|   k.put(QGP_SEZIONE,"1");
 | |
|   TRecord_array ra(LF_QUAGP,"NPROG"); 
 | |
|   ra.set_key((TRectype*)k.dup());
 | |
|   
 | |
|   int items = p1_I.items();
 | |
|   // Prospetto 1 - I  Utili in denaro
 | |
|   for (i = 0,j = 1; i < items; i++)
 | |
|   {
 | |
|     TToken_string& t = p1_I.row(i);
 | |
|     if (!t.empty_items())
 | |
|     {
 | |
|       TRectype& r   = ra.row(j++,TRUE);
 | |
|       r.put(QGP_DATADEL,t.get(0));
 | |
|       r.put(QGP_UTILI1S,t.get(1));
 | |
|       r.put(QGP_NUMQUOTE,t.get(2));
 | |
|       r.put(QGP_UTILI2S,t.get(3));
 | |
|     }
 | |
|   }
 | |
|   err = ra.rewrite();  // Esegue una write se i record non ci sono, cancella tutti i rimanenti
 | |
|   if (err != NOERR) return err;
 | |
|   
 | |
|   // Prospetto 1 - II  Utili in natura
 | |
|   items = p2_I.items();
 | |
|   k.put(QGP_SEZIONE,"2");
 | |
|   ra.destroy_rows();
 | |
|   ra.set_key((TRectype*)k.dup());
 | |
|   for (i = 0, j = 1; i < items; i++)
 | |
|   {
 | |
|     TToken_string& t = p1_II.row(i);
 | |
|     if (!t.empty_items())
 | |
|     {
 | |
|       TRectype& r = ra.row(j++,TRUE);
 | |
|       r.put(QGP_DESCRBENI,t.get(0));
 | |
|       r.put(QGP_UTILI1S,t.get(1));
 | |
|     }
 | |
|   }
 | |
|   err = ra.rewrite(); // Esegue una write se i record non ci sono, cancella tutti i rimanenti
 | |
|   if (err != NOERR) return err;
 | |
| 
 | |
|   // Prospetto 2 - I  Utili in denaro
 | |
|   // Prospetto 2 - II  Utili in natura
 | |
|   const char* al;
 | |
|   for (int h = 1; h<=2; h++)
 | |
|   {
 | |
|     TSheet_field& f = h == 1 ? p2_I : p2_II;
 | |
|     items = f.items();
 | |
|     k.put(QGP_PROSPETTO,"2");
 | |
|     k.put(QGP_SEZIONE,h == 1  ? "1" : "2");
 | |
|     ra.destroy_rows();
 | |
|     ra.set_key((TRectype*)k.dup());
 | |
|     for (i = 0, j = 1; i < items; i++)
 | |
|     {
 | |
|       TToken_string& t = f.row(i);
 | |
|       if (!t.empty_items())
 | |
|       {
 | |
|         TRectype& r      = ra.row(j++,TRUE);
 | |
|         r.put(QGP_UTILI1S,t.get(0));
 | |
|         r.put(QGP_UTILI2S,t.get(1));
 | |
|         al = t.get(2);
 | |
|         if (al[0] != 'N')
 | |
|           r.put(QGP_ALIQUOTA,al);
 | |
|         r.put(QGP_TITOLO,t.get(3));
 | |
|         r.put(QGP_ROPE,t.get(4));
 | |
|       }
 | |
|     }
 | |
|     err = ra.rewrite(); // Esegue una write se i record non ci sono, cancella tutti i rimanenti
 | |
|     if (err != NOERR) return err;
 | |
|   }  
 | |
|   return NOERR;
 | |
| }
 | |
| 
 | |
| int TQuadroG::remove_prospetti()
 | |
| {
 | |
|   TRectype k(LF_QUAGP);
 | |
|   TRecord_array ra(LF_QUAGP,"NPROG"); 
 | |
|   k.put(QGP_CODDITTA,_codditta);
 | |
|   k.put(QGP_PROSPETTO,"2");
 | |
|   for (int h = 1; h<=2; h++)
 | |
|   {
 | |
|     k.put(QGP_SEZIONE,h == 1 ? "1" : "2");
 | |
|     ra.read(k);
 | |
|     ra.remove();
 | |
|   }
 | |
|   return NOERR;
 | |
| }
 | |
| 
 | |
| void TQuadroG::init_insert_mode (TMask& m)
 | |
| {
 | |
|   read_prospetti_2(); // Read it void
 | |
| }
 | |
| 
 | |
| void TQuadroG::init_query_mode (TMask& m)
 | |
| {
 | |
|   TString16 codditta;
 | |
|   codditta << _codditta;
 | |
|   TMask_field& f = m.field(F_CODDITTA);
 | |
|   f.set(codditta);
 | |
|   f.check();
 | |
|   m.send_key(K_AUTO_ENTER,0);
 | |
| }
 | |
| 
 | |
| void TQuadroG::update_totals(TSheet_field& f)
 | |
| {
 | |
|   int i = 0;
 | |
|   TMask& m = f.mask();
 | |
|   short dlg = f.dlg();
 | |
|   switch (dlg)
 | |
|   {
 | |
|     case F_P1_I:
 | |
|     {
 | |
|       real tot_numq, tot_amm;
 | |
|       tot_numq = tot_amm = ZERO;
 | |
|       const int items = f.items();
 | |
|       // Calcolo il totale
 | |
|       for (i = 0;  i < items; i++)
 | |
|       {
 | |
|         TToken_string& r = f.row(i);
 | |
|         real numq(r.get(2));
 | |
|         real amm (r.get(3));     
 | |
|         tot_numq += numq;
 | |
|         tot_amm  += amm;
 | |
|       } 
 | |
|       // totali...
 | |
|       m.set(F_P1_I_TOT1,tot_numq);
 | |
|       m.set(F_P1_I_TOT2,tot_amm);
 | |
|     }       
 | |
|     break;
 | |
|   case F_P1_II:
 | |
|     {
 | |
|       real tot_valult;
 | |
|       const int items = f.items();
 | |
|       // Calcolo il totale
 | |
|       for (i = 0;  i < items; i++)
 | |
|       {
 | |
|         TToken_string& r = f.row(i);
 | |
|         real val(r.get(1));
 | |
|         tot_valult  += val;
 | |
|       }
 | |
|       // totali...
 | |
|       m.set(F_P1_II_TOT,tot_valult);
 | |
|     }       
 | |
|     break;
 | |
|   default:
 | |
|     break;
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Quadro G prospetto 1 - I
 | |
| // Calcola amm_complessivo = num_quote * amm_azione
 | |
| bool TQuadroG::calc_amm(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_TAB)
 | |
|   {                    
 | |
|     TMask& m = f.mask();
 | |
|     real amm_az(m.get(AMM_AZ));
 | |
|     real rNumAz = m.get_real(NUM_AZ);
 | |
|     bool ricalcola = FALSE;
 | |
|     real amm_comp(m.get(AMM_COMP));
 | |
|     ricalcola = ( (__amm_az != amm_az) || (__num_az != rNumAz) );
 | |
|     if (!ricalcola && amm_comp != ZERO)
 | |
|       return TRUE;   
 | |
|       
 | |
|     // Calcola e setta il valore
 | |
|     real amm = ZERO;
 | |
|     amm = amm_az * rNumAz;
 | |
|     amm.trunc();
 | |
|     m.set(AMM_COMP, amm.string());   
 | |
|     // Setta i flag usati per il confronto successivo
 | |
|     __amm_az = amm_az;
 | |
|     __num_az = rNumAz;
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroG::calc_rit(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_TAB && f.to_check(k))
 | |
|   {
 | |
|     TMask& m = f.mask();
 | |
|     real r1(m.get(UTILI1S));
 | |
|     real r2(m.get(UTILI2S));
 | |
|     TString16 al(m.get(ALIQUOTA));
 | |
|     
 | |
|     if (al == "NS") return TRUE;
 | |
|     if (real::is_real(al))
 | |
|     {
 | |
|       const real a1 = al;                
 | |
|       if (a1 != 0.0 && m.field(ALIQUOTA).enabled())
 | |
|       {
 | |
|         al = real::ita2eng(a1.string(".2"));
 | |
|         m.set(ALIQUOTA,al);
 | |
|       }
 | |
|       if (a1 >= 0.0 && a1 <= 100.0)
 | |
|       {
 | |
|         real res = ((r1 + r2) / 100.0 * a1);
 | |
|         res.round();
 | |
|         m.set(ROPE,res);
 | |
|       }
 | |
|       else 
 | |
|         return f.error_box("Aliquota non valida.");
 | |
|     }
 | |
|     else 
 | |
|       return f.error_box("Aliquota non valida.");
 | |
|     
 | |
|     if (f.dlg() == ALIQUOTA && al.empty() && (r1 != 0.0 || r2 != 0.0))
 | |
|       return f.error_box("Il campo aliquota e' obbligatorio.");
 | |
|   }
 | |
|   if (k == K_ENTER && f.dlg() == ALIQUOTA)
 | |
|   {
 | |
|     TMask& m = f.mask();
 | |
|       
 | |
|     TSheet_field& s = *m.get_sheet();
 | |
|     const int selected = s.selected();
 | |
|     TToken_string& row = s.row(selected);
 | |
|     bool ok;
 | |
|       
 | |
|     if (selected > 5 && !row.empty_items())
 | |
|     {
 | |
|       const real aliquota = f.get();
 | |
|       const char titolo = m.get(TITOLO)[0];
 | |
|       for (int i = 0; i < s.items(); i++) if (i != selected)
 | |
|       { 
 | |
|         const real aliq = s.row(i).get(2);
 | |
|         const char tit = m.get(TITOLO)[0];
 | |
|         if (aliquota == aliq && titolo == tit)
 | |
|         {
 | |
|           ok = f.yesno_box("L'aliquota %s%%(%s) e' gia' stata utilizzata al rigo %d.\n"
 | |
|                            "Si desidera sommare gli importi nello stesso rigo?", 
 | |
|                            (const char*) aliq.string(".2"), titolo == 'I' ? "Imposta" : "Acconto", i+1);
 | |
|           if (ok)
 | |
|           { 
 | |
|             // Forza aggiornamento riga corrente dello sheet con la maschera
 | |
|             row.cut(0);                        
 | |
|             for (short id = UTILI1S; id <= ROPE; id++)
 | |
|               row.add(m.get(id));
 | |
|               
 | |
|             // Sceglie come destinazione la riga piu' in alto
 | |
|             int src = selected, dst = i;
 | |
|             if (src < dst)
 | |
|             { int tmp = src; src = dst; dst = tmp; }
 | |
|               
 | |
|             // Righe conivolte nella somma  
 | |
|             TToken_string& srcrow = s.row(src);
 | |
|             TToken_string& dstrow = s.row(dst);
 | |
|                 
 | |
|             for (int x = 0; x < 5; x++) if (x < 2 || x > 3)
 | |
|             {
 | |
|               real tot = dstrow.get(x);
 | |
|               if (x < 2 || dst != 2)
 | |
|               {
 | |
|                 tot += real(srcrow.get(x)); 
 | |
|                 dstrow.add(tot.string(), x);
 | |
|               }
 | |
|               if (dst == selected)
 | |
|                 m.set(UTILI1S+x, tot);
 | |
|               else
 | |
|                 m.reset(UTILI1S+x);
 | |
|             }
 | |
|             if (src == selected)
 | |
|             {
 | |
|               m.reset(ALIQUOTA);
 | |
|               m.set(TITOLO, " ");
 | |
|               s.force_update(dst);
 | |
|             }  
 | |
|             else
 | |
|             {
 | |
|               srcrow.cut(0); 
 | |
|               s.force_update(src);
 | |
|             }  
 | |
|           }
 | |
|           break;
 | |
|         }
 | |
|       }
 | |
|     }  
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroG::tit_hndlr(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (f.to_check(k))
 | |
|   {
 | |
|     TMask& m = f.mask();
 | |
|     real r1(m.get(UTILI1S));
 | |
|     real r2(m.get(UTILI2S));
 | |
|     TString16 tit(f.get());
 | |
| 
 | |
|     if (tit.empty() && (r1 != 0.0 || r2 != 0.0))
 | |
|       return f.error_box("Il campo titolo e' obbligatorio.");
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroG::exec_distinta(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_SPACE)
 | |
|   {
 | |
|     TExternal_app zzz(DISTINTA_APP);
 | |
|     zzz.run();
 | |
|     f.set_focus();
 | |
|     // Fai il ricalcolo    
 | |
|     app()._bUsatoDistinta = TRUE;
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroG::user_create() 
 | |
| {
 | |
|   _msk = new TMask("771234a");
 | |
|   _rel = new TRelation(LF_QUAG);
 | |
|   _rel->add(LF_QUAGP,"CODDITTA=CODDITTA");
 | |
|   _codditta = get_firm_770();  
 | |
|   _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
 | |
|   _msk->set_handler(DLG_DISTINTA, exec_distinta);  
 | |
|   _msk->set_handler(mainmsk_handler);
 | |
|   TSheet_field& p1_I = (TSheet_field&) _msk->field(F_P1_I);  
 | |
|   p1_I.set_append(FALSE);
 | |
|   p1_I.set_notify(p1_notify);                          
 | |
|   p1_I.sheet_mask().set_handler(NUM_AZ, calc_amm);
 | |
|   p1_I.sheet_mask().set_handler(AMM_AZ, calc_amm);  
 | |
|   TSheet_field& p1_II = (TSheet_field&) _msk->field(F_P1_II);  
 | |
|   p1_II.set_notify(p2_notify);                              
 | |
|   p1_II.set_append(FALSE);
 | |
|   TSheet_field& p2_I = (TSheet_field&) _msk->field(F_P2_I);  
 | |
|   p2_I.sheet_mask().set_handler(UTILI1S, calc_rit);  
 | |
|   p2_I.sheet_mask().set_handler(UTILI2S, calc_rit);  
 | |
|   p2_I.sheet_mask().set_handler(ALIQUOTA, calc_rit);  
 | |
|   p2_I.sheet_mask().set_handler(TITOLO, tit_hndlr);  
 | |
|   p2_I.set_notify(p3_notify);                              
 | |
|   TSheet_field& p2_II = (TSheet_field&) _msk->field(F_P2_II);  
 | |
|   p2_II.sheet_mask().set_handler(UTILI1S, calc_rit);  
 | |
|   p2_II.sheet_mask().set_handler(UTILI2S, calc_rit);  
 | |
|   p2_II.sheet_mask().set_handler(ALIQUOTA, calc_rit);  
 | |
|   p2_II.sheet_mask().set_handler(TITOLO, tit_hndlr);  
 | |
|   p2_II.set_notify(p3_notify);                              
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroG::user_destroy() 
 | |
| {
 | |
|   delete _rel; delete _msk;  
 | |
|   if (_registra || _bUsatoDistinta)
 | |
|     _rip.set(_quadro);  
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroG::p1_notify(TSheet_field& s, int r, KEY k)
 | |
| {
 | |
|   switch(k)
 | |
|   {                               
 | |
|     case K_ENTER:
 | |
|       __amm_az = ZERO;
 | |
|       __num_az = ZERO;
 | |
|       update_totals(s);    
 | |
|       break;
 | |
|     case K_SPACE: 
 | |
|       {
 | |
|       TToken_string& row = s.row(r);
 | |
|       __num_az  = row.get(3);
 | |
|       __amm_az  = row.get(4);
 | |
|       }
 | |
|       break;
 | |
|     default:
 | |
|       break;
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroG::p2_notify(TSheet_field& s, int r, KEY k)
 | |
| {
 | |
|   switch(k)
 | |
|   {                               
 | |
|     case K_ENTER:
 | |
|       update_totals(s);
 | |
|       break;
 | |
|     default:
 | |
|       break;
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroG::p3_notify(TSheet_field& s, int r, KEY k)
 | |
| {
 | |
|   if  (k == K_DEL)
 | |
|    if (r > 8) 
 | |
|      return TRUE;
 | |
|    else
 | |
|      return FALSE;
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroG::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 quadro_g(int argc, char* argv[])
 | |
| {
 | |
|   TQuadroG a('3');
 | |
|   a.run(argc,argv,a.taitol());
 | |
|   return TRUE;
 | |
| }
 |