Files correlati : ve6.exe Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 979 git-svn-id: svn://10.65.10.50/trunk@15623 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			626 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			626 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| // quadb_b1.cpp
 | ||
| #include <relapp.h>
 | ||
| #include <urldefid.h>
 | ||
| 
 | ||
| #include "dipend.h"
 | ||
| #include "774200.h"
 | ||
| #include "77lib.h"   
 | ||
| #include "quadrob.h"
 | ||
| #include "quadrob1.h"
 | ||
| #include "77qb.h"
 | ||
| #include "77qb1.h"
 | ||
| 
 | ||
| class TQuadriBB1_application : public TRelation_application
 | ||
| {
 | ||
|     static bool codditta77_handler (TMask_field& m, KEY k);
 | ||
|     static bool PrimoNprogLibero   (TMask& m, const long codditta, const long coddip);
 | ||
|     static bool CodDipHandler      (TMask_field& m, KEY k);
 | ||
|     static bool NprogExitHandler   (TMask_field& m, KEY k);
 | ||
|     static bool QBTotRedImpHandler (TMask_field& f, KEY k);
 | ||
|     static bool QBAmmRopeHandler   (TMask_field& f, KEY k);
 | ||
|     static bool QBTotIndennHandler (TMask_field& f, KEY k);
 | ||
|     static bool QBCalcola37 			 (TMask_field& f, KEY k);
 | ||
|     static void BB1SettaCognomeNome(TMask& m);
 | ||
|     const char*   _maskname;
 | ||
|     int           _num;
 | ||
|     int			_pos_quadro;  // posizione nell'array dei quadri. Usato in set_comp
 | ||
|     TString16     _quadro;
 | ||
|     TRiporti      _rip;
 | ||
|     TRelation*    _rel;
 | ||
|     TMask*        _msk[2];
 | ||
|     bool          _registra;
 | ||
|     int			_anno_dic;
 | ||
|     int              _mode;    
 | ||
|     bool			_MaskConAnnoDic, _MaskConCodditta;
 | ||
|     bool			MaskConAnnoDic() const;
 | ||
|     bool			MaskConCodditta() const { return _MaskConCodditta; }
 | ||
|     bool			QuadroB()  const { return _num == LF_QUAB;  }
 | ||
|     bool			QuadroB1() const { return _num == LF_QUAB1; }
 | ||
|     bool 			CheckImporti(const TMask& m);            
 | ||
|     bool 			EsisteGiaCodDip(const TMask& m);
 | ||
|     bool 			EsisteGiaRecordDip(const TMask& m);
 | ||
|     long			_codditta;              
 | ||
|     long			_lCodDip;  
 | ||
|     int				_iNprog;
 | ||
|     TString			_sCognome, _sNome;
 | ||
|     void 			init_mask(TMask&);  
 | ||
| 
 | ||
|   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 void on_config_change();
 | ||
|     virtual TMask* get_mask(int);
 | ||
|     virtual bool changing_mask(int);           
 | ||
|     TMask*  load_mask(int n);
 | ||
|     virtual TRelation* get_relation() const { return _rel; }  
 | ||
|     virtual void init_query_mode(TMask&);
 | ||
|     virtual void init_query_insert_mode(TMask&);  
 | ||
|     virtual void init_insert_mode(TMask&);
 | ||
|     virtual void init_modify_mode(TMask&);
 | ||
| 
 | ||
|   public:                                                                     
 | ||
|     TQuadriBB1_application(const char* name, const int num, const char* quadro);
 | ||
| };
 | ||
| 
 | ||
| TQuadriBB1_application::TQuadriBB1_application(const char* name, const int num, const char* quadro)
 | ||
| : _maskname(name), _num(num), _mode(0),
 | ||
|   _MaskConCodditta(FALSE), _MaskConAnnoDic(FALSE),
 | ||
|   _rel(NULL), _quadro(quadro) 
 | ||
| {
 | ||
|   memset(_msk, 0, sizeof(_msk));  
 | ||
|   switch (_num)
 | ||
|   {
 | ||
|     case LF_QUAB:
 | ||
|       _pos_quadro = B;
 | ||
|       break;
 | ||
|     case LF_QUAB1:
 | ||
|       _pos_quadro = B1;
 | ||
|       break;
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| TQuadriBB1_application& app() { return (TQuadriBB1_application&)main_app(); }
 | ||
| 
 | ||
| bool TQuadriBB1_application::changing_mask(int mode)
 | ||
| {
 | ||
|   if ((mode == MODE_MOD) && (_mode == MODE_INS))
 | ||
| 	return FALSE; 
 | ||
|  else	              
 | ||
|   return _mode != mode;
 | ||
| }
 | ||
|         
 | ||
| TMask* TQuadriBB1_application::get_mask(int mode)
 | ||
| {
 | ||
|   const int m = (mode == MODE_QUERY) ? 0 : 1;
 | ||
|   _mode = mode;
 | ||
|   return load_mask(m);
 | ||
| }
 | ||
| 
 | ||
| TMask* TQuadriBB1_application::load_mask(int n)
 | ||
| {
 | ||
|   if (_msk[n] != NULL) 
 | ||
|     return _msk[n]; 
 | ||
|     
 | ||
|   TFilename name("77qb"); 
 | ||
|   
 | ||
|   if (n == 0) 
 | ||
|   { 
 | ||
|     switch (_num) 
 | ||
|     {
 | ||
|       case LF_QUAB:       
 | ||
|         name << 'a';  
 | ||
|         break; 
 | ||
|       case LF_QUAB1:      
 | ||
|         name << "1a";  
 | ||
|         break;
 | ||
|       default:
 | ||
|         break;
 | ||
|     }
 | ||
|   }
 | ||
|   else 
 | ||
|   {
 | ||
|     switch (_num)
 | ||
|     {
 | ||
|       case LF_QUAB:       
 | ||
|         name << 'b';
 | ||
|         break;
 | ||
|       case LF_QUAB1:      
 | ||
|         name << "1b";
 | ||
|         break;
 | ||
|       default:
 | ||
|         break;
 | ||
|     }
 | ||
|   }  
 | ||
|   
 | ||
|   TMask* m = new TMask(name);
 | ||
|   m->set_handler(CODDITTA77,   codditta77_handler);  
 | ||
| 
 | ||
|   switch (n)
 | ||
|   {                                   
 | ||
|     case 0:           
 | ||
|       if (QuadroB())                                    
 | ||
|       {
 | ||
|         m->set_handler(QBF_CODDIP_QB,   CodDipHandler);    
 | ||
|         m->set_handler(QBF_CODDIP_ANAG,   CodDipHandler);    
 | ||
|         set_search_field(QBF_NPROG);
 | ||
|       }                               
 | ||
|       else
 | ||
|       {
 | ||
|         m->set_handler(QB1F_CODDIP_QB1,  CodDipHandler);    
 | ||
|         m->set_handler(QB1F_CODDIP_ANAG,  CodDipHandler);        
 | ||
|         set_search_field(QB1F_NPROG);  
 | ||
|       }
 | ||
|       m->set_handler(QuadroB() ? QBF_NPROG : QB1F_NPROG,   NprogExitHandler);    
 | ||
|       break;
 | ||
|     case 1:                                 
 | ||
|       if (m)
 | ||
|         if (QuadroB())
 | ||
|         {           
 | ||
|           m->set_handler(QBF_TOTIMP, QBTotRedImpHandler);
 | ||
|           m->set_handler(QBF_ROPE,   QBAmmRopeHandler);
 | ||
|           m->set_handler(QBF_AMMNETTO,  QBTotIndennHandler);
 | ||
|           m->set_handler(QBF_AMMNETTO2, QBTotIndennHandler);    
 | ||
|           m->set_handler(QBF_CONTLAV,   QBTotIndennHandler);    
 | ||
|           m->set_handler(QBF_TFR7494,   QBTotIndennHandler);    
 | ||
|           m->set_handler(QBF_INDEN7494, QBTotIndennHandler); 
 | ||
|           m->set_handler(QBF_TIND7494, 	QBCalcola37);  // 28
 | ||
|           m->set_handler(QBF_TRID, 			QBCalcola37);  // 29
 | ||
|         }                                       
 | ||
|         m->disable(DLG_FINDREC);
 | ||
|       break;
 | ||
|     default:
 | ||
|       break;  
 | ||
|   }        
 | ||
|   return _msk[n] = m;
 | ||
| }
 | ||
| 
 | ||
| bool TQuadriBB1_application::QBCalcola37(TMask_field& f, KEY k)
 | ||
| {
 | ||
|   TMask& m=f.mask();
 | ||
|   if (k==K_TAB && m.is_running())
 | ||
|   {       
 | ||
|     real c28=m.get_real(QBF_TIND7494);
 | ||
|     real c29=m.get_real(QBF_TRID);
 | ||
|     real c37 = c28 - c29;
 | ||
|     if (c37 < ZERO)
 | ||
|       c37 = ZERO;
 | ||
|     TString c37s(c37.string());
 | ||
|     m.set(QBF_TOTIMP,c37s);
 | ||
|   }
 | ||
|   return TRUE;
 | ||
| }
 | ||
| 
 | ||
| bool TQuadriBB1_application::MaskConAnnoDic() const
 | ||
| {
 | ||
|   return  _MaskConAnnoDic;
 | ||
| }
 | ||
| 
 | ||
| void TQuadriBB1_application::on_config_change()
 | ||
| {
 | ||
|   TConfig conf(CONFIG_STUDIO);
 | ||
|   _anno_dic = (int)conf.get_long(ANNO_SEL, NULL, -1, TDate(TODAY).year());
 | ||
| }
 | ||
|                                     
 | ||
| bool TQuadriBB1_application::user_create()
 | ||
| {           
 | ||
|   _registra = FALSE;
 | ||
|   _rel      = new TRelation(_num);
 | ||
|   _codditta = get_firm_770();
 | ||
|   return TRUE;
 | ||
| }
 | ||
| 
 | ||
| bool TQuadriBB1_application::user_destroy()
 | ||
| {  
 | ||
|   if (_quadro != "")
 | ||
|     if (_registra)
 | ||
|       _rip.set(_quadro);
 | ||
|   if (_msk[1] != NULL) delete _msk[1];
 | ||
|   if (_msk[0] != NULL) delete _msk[0];
 | ||
|   delete _rel;
 | ||
|   return TRUE;
 | ||
| }                         
 | ||
| 
 | ||
| // Q.B. Controlla che ci sia diverso da ZERO il tot.red.imp.
 | ||
| bool TQuadriBB1_application::CheckImporti(const TMask& m)
 | ||
| {
 | ||
|   real TotRedImp(m.get(QBF_TOTIMP));  
 | ||
|   return TotRedImp != ZERO;
 | ||
| }
 | ||
| 
 | ||
| // Controlla se esiste gia' un record con lo stesso cod.dip.
 | ||
| bool TQuadriBB1_application::EsisteGiaCodDip(const TMask& m)
 | ||
| {
 | ||
|   TLocalisamfile q(_num);
 | ||
|   const long codip = m.get_long(QuadroB()? QBF_CODDIP : QB1F_CODDIP);
 | ||
|   q.zero();
 | ||
|   q.put(QB_CODDITTA, _codditta);   
 | ||
|   q.put(QB_CODDIP,   codip);
 | ||
|   TRectype dep(q.curr());
 | ||
|   q.read(_isgteq);                      
 | ||
|   const bool bEq = q.curr() == dep;
 | ||
|   return bEq;
 | ||
| }
 | ||
| 
 | ||
| // Controlla se esiste gia' una chiave completa
 | ||
| bool TQuadriBB1_application::EsisteGiaRecordDip(const TMask& m)
 | ||
| {
 | ||
|   TLocalisamfile q(_num);               
 | ||
|   const long codip = m.get_long(QuadroB()? QBF_CODDIP : QB1F_CODDIP);
 | ||
|   const long nprog = m.get_long(QuadroB()? QBF_NPROG  : QB1F_NPROG);
 | ||
|   q.zero();
 | ||
|   q.put(QB_CODDITTA, _codditta);   
 | ||
|   q.put(QB_CODDIP,   codip);               
 | ||
|   q.put(QB_NPROG,    nprog);
 | ||
|   TRectype dep(q.curr());
 | ||
|   const bool bEq = q.read() == NOERR;
 | ||
|   return bEq;
 | ||
| }
 | ||
| 
 | ||
| int TQuadriBB1_application::rewrite(const TMask& m)
 | ||
| {
 | ||
|   m.autosave(*_rel);
 | ||
|   const int err = _rel->rewrite();      
 | ||
|   _registra = err == NOERR;
 | ||
|   return err;
 | ||
| }
 | ||
| 
 | ||
| /*
 | ||
| int TQuadriBB1_application::read(TMask& m)
 | ||
| {
 | ||
|   int err;
 | ||
|   _rel->lfile().put("CODDITTA", (long)_codditta);
 | ||
|   _rel->lfile().put("CODDIP",   (long)_lCodDip);
 | ||
|   _rel->lfile().put("NPROG",    _iNprog);
 | ||
|   err = _rel->read();
 | ||
|   return err;
 | ||
| }  
 | ||
| */
 | ||
| 
 | ||
| int TQuadriBB1_application::write(const TMask& m)
 | ||
| {
 | ||
|   m.autosave(*_rel);
 | ||
|   if (QuadroB1())
 | ||
|     if (EsisteGiaRecordDip(m))
 | ||
|       return warning_box("E' gi<67> presente un record per questo dipendente");
 | ||
|   const int err = _rel->write();
 | ||
|   _registra = err == NOERR;
 | ||
|   return err;
 | ||
| }
 | ||
| 
 | ||
| bool TQuadriBB1_application::remove()
 | ||
| {
 | ||
|   _registra = TRUE;
 | ||
|   return TRelation_application::remove();
 | ||
| }
 | ||
| 
 | ||
| void TQuadriBB1_application::init_mask(TMask& m)
 | ||
| {
 | ||
|   if (QuadroB())
 | ||
|   {                                
 | ||
| // leggi dalla maschera di query, che' dovrebbero li' esservi sempre..  
 | ||
|     const long codditta = _msk[0]->get_long(QBF_CODDITTA);
 | ||
|     const long codip    = _msk[0]->get_long(QBF_CODDIP);
 | ||
|     if (codip==0L)
 | ||
|       return;
 | ||
|     if (is_erede(codditta,codip)) // && modifica(m))
 | ||
|     {
 | ||
|       m.disable(-GROUP_ALL);    
 | ||
|       m.enable(-GROUP_EREDE);   
 | ||
|     }
 | ||
|     else
 | ||
|     {
 | ||
|       m.enable(-GROUP_ALL);   
 | ||
|       if (is_deceduto(codditta,codip) || is_dipendente(codditta,codip))
 | ||
|         m.disable(-GROUP_DIPDEC);
 | ||
|       else
 | ||
|         m.enable(-GROUP_DIPDEC);
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| void TQuadriBB1_application::init_modify_mode(TMask& m)
 | ||
| {
 | ||
|   init_mask(m);                     
 | ||
| /*  
 | ||
|   if (QuadroB())
 | ||
|   {
 | ||
|     m.set(QBF_CODDIP,  	_lCodDip);
 | ||
|     m.set(QBF_COGNOME, 	_sCognome);
 | ||
|     m.set(QBF_NOME,		_sNome);
 | ||
|     m.set(QBF_NPROG,	_iNprog);
 | ||
|   }
 | ||
|   else
 | ||
|   {
 | ||
|     m.set(QB1F_CODDIP,  	_lCodDip);
 | ||
|     m.set(QB1F_COGNOME, 	_sCognome);
 | ||
|     m.set(QB1F_NOME,		_sNome);
 | ||
|     m.set(QB1F_NPROG,		_iNprog);
 | ||
|   }*/
 | ||
| }
 | ||
| 
 | ||
| void TQuadriBB1_application::init_insert_mode(TMask& m)
 | ||
| {
 | ||
|   init_mask(m);
 | ||
| }
 | ||
| 
 | ||
| void TQuadriBB1_application::init_query_mode(TMask& m)
 | ||
| {                   
 | ||
|   m.set(ANNODIC77, _anno_dic);               
 | ||
|   if (QuadroB())
 | ||
|   {
 | ||
|     m.show(-QBG_QUADROB);
 | ||
|     m.hide(-QBG_ANADIP);
 | ||
|   }
 | ||
|   else
 | ||
|   {
 | ||
|     m.show(-QB1G_QUADROB);
 | ||
|     m.hide(-QB1G_ANADIP);
 | ||
|   }  
 | ||
| }
 | ||
| 
 | ||
| void TQuadriBB1_application::init_query_insert_mode(TMask& m)
 | ||
| {                                            
 | ||
|   m.set(ANNODIC77, _anno_dic);               
 | ||
|   if (QuadroB())
 | ||
|   {    
 | ||
|     m.hide(-QBG_QUADROB);
 | ||
|     m.show(-QBG_ANADIP);
 | ||
|   } 
 | ||
|   else
 | ||
|   {
 | ||
|     m.hide(-QB1G_QUADROB);
 | ||
|     m.show(-QB1G_ANADIP);
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| bool TQuadriBB1_application::codditta77_handler(TMask_field& f, KEY k)
 | ||
| {
 | ||
|   if (k == K_TAB)
 | ||
|   {
 | ||
| 	  TMask& m = f.mask();
 | ||
| 	  TString16 codditta; codditta << app()._codditta;
 | ||
| 	  if (codditta != "0")        
 | ||
| 	  {
 | ||
| 	    m.set(CODDITTA77, codditta);
 | ||
| 	    m.field(CODDITTA77).check();
 | ||
| 	  }
 | ||
|   }
 | ||
|   return TRUE;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| // 2 modi :
 | ||
| //  RUN,773,-1,771230m,89,"Prospetto del Quadro E1","E1"    [771230i.uml]
 | ||
| // oppure
 | ||
| //  773 -1 menu_st "Stampe dichiarazioni" [prassi.mnu]
 | ||
| // QUADRO N:
 | ||
| // 773,-2,77qn,72,"Quadro N","N"
 | ||
| ///////////////////////////////////////////////////////////
 | ||
| int quadriB_B1(int argc, char* argv[])
 | ||
| {
 | ||
|   TFilename mask;
 | ||
|   int num = 0;
 | ||
|   if (argc > 1) 
 | ||
|     mask = argv[2];
 | ||
|   num    = atoi(argv[3]);
 | ||
|   const char* title  = argv[4];             
 | ||
|   const char* quadro = argv[5];
 | ||
|   TQuadriBB1_application a(mask, num, quadro);
 | ||
|   a.run(argc, argv, title ? title : "Test Relation Application");
 | ||
|   return 0;
 | ||
| }
 | ||
| 
 | ||
| //
 | ||
| // CodDipHandler
 | ||
| // 
 | ||
| //   1 - Controlla che il codice dipendente esista
 | ||
| //   2 - Propone il primo progressivo disponibile per quel codice
 | ||
| //
 | ||
| bool TQuadriBB1_application::CodDipHandler(TMask_field& f, KEY k)
 | ||
| {
 | ||
|   TMask& m = f.mask();             
 | ||
|   if (!m.is_running()) return TRUE;  
 | ||
| 
 | ||
|   if (k == K_ENTER)
 | ||
|   {                                           
 | ||
|     const long codip = atol(f.get());
 | ||
|     if (codip==0L) 
 | ||
|       return TRUE;
 | ||
| 
 | ||
|     if (!esiste_dipendente(app()._codditta, codip))
 | ||
|       return f.warning_box("Dipendente inesistente");
 | ||
|   }
 | ||
|   
 | ||
|   if (k == K_TAB)
 | ||
|   {                                           
 | ||
|     const long codip = atol(f.get());
 | ||
|     if (codip==0L) 
 | ||
|       return TRUE;
 | ||
| 
 | ||
|     if (!esiste_dipendente(app()._codditta, codip))
 | ||
|       return f.warning_box("Dipendente inesistente");
 | ||
| 
 | ||
|     PrimoNprogLibero(m, app()._codditta, codip);
 | ||
|   }       
 | ||
|   return TRUE;
 | ||
| }
 | ||
| 
 | ||
| // Compila cognome e nome se vuoti
 | ||
| void TQuadriBB1_application::BB1SettaCognomeNome(TMask& m)
 | ||
| {
 | ||
|   const int iDlgCognome = app().QuadroB() ? QBF_COGNOME : QB1F_COGNOME;
 | ||
|   const int iDlgNome    = app().QuadroB() ? QBF_NOME    : QB1F_NOME;
 | ||
|   const int iDlgNProg   = app().QuadroB() ? QBF_NPROG   : QB1F_NPROG;
 | ||
|   const int iProg  = m.get_int(iDlgNProg);
 | ||
|   TString sCognome(m.get(iDlgCognome));
 | ||
|   TString sNome;
 | ||
|   if (app()._lCodDip != 0L) 
 | ||
|   {
 | ||
|     TLocalisamfile dip (LF_DIPEND);
 | ||
|     dip.zero();
 | ||
|     dip.put(DIP_CODDITTA, app()._codditta);
 | ||
|     dip.put(DIP_CODIP,    app()._lCodDip);
 | ||
|     if (dip.read() == NOERR)
 | ||
|     {
 | ||
|       sCognome = dip.get("COGNOME");
 | ||
|       sNome    = dip.get("NOME");    
 | ||
|       app()._sCognome = sCognome;
 | ||
|       app()._sNome    = sNome;
 | ||
|       app()._iNprog   = iProg;
 | ||
|       m.set(iDlgCognome, sCognome);
 | ||
|       m.set(iDlgNome,    sNome);
 | ||
|     }
 | ||
|   }  
 | ||
| }
 | ||
| 
 | ||
| bool TQuadriBB1_application::NprogExitHandler(TMask_field& f, KEY k)
 | ||
| {
 | ||
|   TMask& m = f.mask();
 | ||
|   if (!m.is_running()) return TRUE;
 | ||
| 
 | ||
|   if (k == K_CTRL+K_TAB)
 | ||
|   {
 | ||
|     f.set_dirty();
 | ||
|     return TRUE;
 | ||
|   }
 | ||
|     
 | ||
|   if (k == K_TAB)
 | ||
|   {
 | ||
|     TString nprog(f.get());
 | ||
|     if (nprog.not_empty())
 | ||
|     {
 | ||
|       const int ID_CODDIP = app().QuadroB()? QBF_CODDIP : QB1F_CODDIP;
 | ||
|       const long codip    = app()._lCodDip = m.get_long(ID_CODDIP);
 | ||
|       const long codditta = app()._codditta;
 | ||
| //      const long codip    = m.get_long(ID_CODDIP);
 | ||
| //      const long codditta = app()._codditta;
 | ||
| 
 | ||
|       if (codip==0L) 
 | ||
|         return TRUE;
 | ||
| 
 | ||
| // Nel B1 e nel B (per gli eredi) pu<70> esserci un solo record per dipendente
 | ||
|       if (app().QuadroB1() || (app().QuadroB() && is_erede(codditta,codip)) )
 | ||
| // Se esiste gia' un record per questo dipendente MA NON la chiave completa
 | ||
| // (ora presente nella maschera) rifiuta il record
 | ||
| // (impedisce cioe' di andare in inserimento, a meno che non sia la prima
 | ||
| //  volta, cioe' a meno che non esista ancora nessun record per il dip.
 | ||
| //  (questo caso e' segnalato dal fallimento della EsisteGiaCodDip) )
 | ||
|         if (app().EsisteGiaCodDip(m) && !app().EsisteGiaRecordDip(m))  
 | ||
|           return f.warning_box("Esiste gi<67> una riga per questo dipendente");    
 | ||
| 
 | ||
| // Compila cognome e nome se vuoti
 | ||
|       BB1SettaCognomeNome(m);
 | ||
| //      m.stop_run(K_AUTO_ENTER);
 | ||
|     }
 | ||
|   }
 | ||
|   return TRUE;
 | ||
| }
 | ||
| 
 | ||
| bool TQuadriBB1_application::PrimoNprogLibero(TMask& m, const long codditta, const long codip)
 | ||
| {
 | ||
| // Propone il primo numero disponibile
 | ||
|   if (codip != 0L)
 | ||
|   {
 | ||
|     long nprog = 0L;              
 | ||
|     const int id_nprog = app().QuadroB() ? QBF_NPROG : QB1F_NPROG;
 | ||
|     const bool erede   = is_erede(codditta,codip);
 | ||
|     bool EsisteGiaDip  = FALSE;
 | ||
|     TLocalisamfile qb(app()._num);
 | ||
|     qb.zero();
 | ||
|     qb.put(QB_CODDITTA, codditta);
 | ||
|     qb.put(QB_CODDIP,   codip);
 | ||
|     TRectype dep(qb.curr());       
 | ||
|     qb.read(_isgteq);
 | ||
|     TRecnotype lPosPrec = qb.recno();
 | ||
|     for ( ; !qb.eof(); qb.next())
 | ||
|     {
 | ||
|       if (qb.curr() > dep) break;
 | ||
|       EsisteGiaDip = TRUE;
 | ||
|       nprog = qb.get_long(QB_NPROG);
 | ||
|     }
 | ||
|     qb.readat(lPosPrec);    
 | ||
|     
 | ||
| // Nel B se e' un erede si puo' solo andare in modifica
 | ||
| // Nel B1 <20> consentito un solo record per dipendente
 | ||
|     if ( (nprog == 0) || (app().QuadroB1() && !EsisteGiaDip) ||
 | ||
|                          (app().QuadroB()  && !erede) )
 | ||
|       nprog++;
 | ||
| 
 | ||
|     TString16 nprog_str; nprog_str << nprog;
 | ||
|     m.set(id_nprog, nprog_str);
 | ||
|   }
 | ||
|   return TRUE;                   
 | ||
| }                         
 | ||
| 
 | ||
| ///////////////////////////////////////////////////////////////////////////////////
 | ||
| // QUADRO B
 | ||
| ///////////////////////////////////////////////////////////////////////////////////
 | ||
| bool TQuadriBB1_application::QBTotRedImpHandler(TMask_field& f, KEY k)             
 | ||
| {
 | ||
|   TMask& m = f.mask();
 | ||
|   if (k == K_ENTER && !ricerca(m))
 | ||
|   {
 | ||
|     const long codditta = m.get_long(QBF_CODDITTA);
 | ||
|     const long codip    = m.get_long(QBF_CODDIP);
 | ||
|     if (!is_erede(codditta,codip))
 | ||
|     {
 | ||
|       real totimp(f.get());
 | ||
|       if (totimp == ZERO)
 | ||
|         return f.warning_box("Il totale reddito imponibile non pu<70> essere nullo");
 | ||
|     }
 | ||
|   }
 | ||
|   return TRUE;
 | ||
| }
 | ||
| 
 | ||
| bool TQuadriBB1_application::QBAmmRopeHandler(TMask_field& f, KEY k)             
 | ||
| {
 | ||
|   TMask& m = f.mask();  
 | ||
|   if (k == K_ENTER && !ricerca(m))
 | ||
|   {
 | ||
|     TMask& m = f.mask();
 | ||
|     const long codditta = m.get_long(QBF_CODDITTA);
 | ||
|     const long codip    = m.get_long(QBF_CODDIP);
 | ||
|     if (!is_erede(codditta,codip))
 | ||
|     {
 | ||
|       real totimp(m.get(QBF_TOTIMP));
 | ||
|       real rope(f.get());            
 | ||
|       if (rope > totimp)
 | ||
|         return f.warning_box("Il totale ritenute non pu<70> essere maggiore del totale reddito imponibile");
 | ||
|     }
 | ||
|   }
 | ||
|   return TRUE;
 | ||
| }
 | ||
| 
 | ||
| // 23.5.96 Calcola totale indennit<69>
 | ||
| bool TQuadriBB1_application::QBTotIndennHandler(TMask_field& f, KEY k)             
 | ||
| {
 | ||
|   if (k == K_TAB)
 | ||
|   {
 | ||
|     const bool ricalcola = f.focusdirty();
 | ||
|     if (ricalcola)
 | ||
|     {
 | ||
|       TMask& m = f.mask();                             
 | ||
|       real c20 = m.get_real(QBF_AMMNETTO);
 | ||
|       real c24 = m.get_real(QBF_AMMNETTO2);
 | ||
|       real c25 = m.get_real(QBF_CONTLAV);
 | ||
|       real c26 = m.get_real(QBF_TFR7494);
 | ||
|       real c27 = m.get_real(QBF_INDEN7494);
 | ||
|       
 | ||
|       real c28 = c20 + c24 - c25 + c26 + c27;
 | ||
|       if (c28 < ZERO)
 | ||
|         c28 = ZERO;
 | ||
|       TString c28s(c28.string());
 | ||
|       m.set(QBF_TIND7494, c28s);         
 | ||
| // Ricalcola il 37 da qui perche' il 28 e' disabilitato
 | ||
|       QBCalcola37(f,k);
 | ||
|     }
 | ||
|   }
 | ||
|   return TRUE;
 | ||
| }
 | ||
|  
 |