936 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			936 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| // 771230.cpp - Quadri C, D, D1, E, E1, E2
 | |
| #include <relapp.h>
 | |
| #include <config.h>
 | |
| #include <msksheet.h>
 | |
| #include <sort.h>
 | |
| #include <tabutil.h>                
 | |
| #include <progind.h>
 | |
| #include "caus77.h"
 | |
| #include "77lib.h"
 | |
| #include "scperc.h"
 | |
| #include "rpag.h"
 | |
| #include "perc.h"
 | |
| #include "prospe1.h"
 | |
| #include "defmask.h"
 | |
| #include "771230a.h" 
 | |
| #include "774200.h"
 | |
| 
 | |
| class TQuadroC_E2 : public TRelation_application
 | |
| {
 | |
|   private:                                             
 | |
|     TString			_quadro;	// Codice del quadro in gestione        
 | |
|     bool  			_registra;  // Se TRUE fa i riporti
 | |
|     
 | |
|     struct righe_pag
 | |
|     {
 | |
|      char tipoa;
 | |
|      char codan[6];
 | |
|      char codcau[3];
 | |
|      char perc[7]; //3 + 2decimali + la virgola
 | |
|      real somme;
 | |
|      real impo;
 | |
|      real rite;
 | |
|      real comp;
 | |
|      bool acim;
 | |
|      bool bInps;
 | |
|      real inps;                                 
 | |
|     };
 | |
|     righe_pag*       	_rig;
 | |
|     TRelation*       	_rel;
 | |
|     TMask*           	_msk[2];
 | |
|     TSort*           	_sort;
 | |
|     long             	_codanagr;
 | |
|     char             	_tipoa, _tipoq;
 | |
|     int              	_nproga;
 | |
|     int              	_mode;
 | |
|     int              	_anno_dic;  // anno dichiarazione
 | |
|     TLocalisamfile*  	_per, *_scper, *_rpag, *_qd;
 | |
|     TTable*          	_ca7; 
 | |
|     TRiporti         	_rip;
 | |
|     long							_codditta;    
 | |
|     int   						_file;
 | |
| 
 | |
|   private:               
 | |
|     static bool nprog_handler   (TMask_field& f, KEY key);
 | |
|     static bool codanagr_handler(TMask_field& f, KEY key);
 | |
|     static bool genera_handler  (TMask_field& f, KEY key);
 | |
|     static bool codditta_hnd    (TMask_field& f, KEY key);    
 | |
|     static bool setta_nprog     (TMask_field& f);
 | |
|     static bool imponibile_hnd  (TMask_field& f, KEY key);
 | |
| 
 | |
|     bool QuadroC()  const { return _tipoq == 'C'; }  
 | |
|     bool QuadroD()  const { return _tipoq == 'D'; }  
 | |
|     bool QuadroD1() const { return _tipoq == '1'; }  
 | |
|     bool QuadroE()  const { return _tipoq == 'E'; }  
 | |
|     bool QuadroE1() const { return _tipoq == '2'; }  
 | |
|     bool QuadroE2() const { return _tipoq == '3'; }  
 | |
|                     
 | |
|   protected:
 | |
|     virtual bool user_create();
 | |
|     virtual bool user_destroy();
 | |
|     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);
 | |
|     virtual bool changing_mask(int mode);  
 | |
|     virtual void init_query_mode (TMask&);
 | |
|     virtual void init_query_insert_mode (TMask&);    
 | |
|     virtual void on_config_change();    
 | |
|     
 | |
|     TMask* load_mask(int n);
 | |
|     bool generazione(); 
 | |
|     bool azzera_quadro();
 | |
|     void riempi_record(char,long,int,const real&,const real&,
 | |
|                        const real&,const real&,const real&,bool,
 | |
|                        const real& inps_perc, bool bCinps=FALSE);
 | |
|     void init_sort(); 
 | |
|     void leggi_sort(TProgind&);
 | |
|     TRectype& look_causali(int c);
 | |
|     int anno_dic() const { return _anno_dic; }
 | |
|     bool scrivi_dati_per(TRectype& rec);
 | |
|     void genera_prospetto(int,real&,real&,real&);
 | |
|         
 | |
|   public:                    
 | |
|     TQuadroC_E2(char tipo);
 | |
|     virtual ~TQuadroC_E2() {};
 | |
| };                    
 | |
| 
 | |
| inline TQuadroC_E2& app() { return (TQuadroC_E2&) main_app(); }
 | |
| 
 | |
| TQuadroC_E2::TQuadroC_E2(char tipo): _rel(NULL), _mode(0), _tipoq(tipo)
 | |
| {  
 | |
|   memset(_msk, 0, sizeof(_msk));  
 | |
| }
 | |
| 
 | |
| bool TQuadroC_E2::changing_mask(int mode)
 | |
| {
 | |
|  if ((mode == MODE_MOD) && (_mode == MODE_INS))
 | |
| 	return FALSE; 
 | |
|  else	              
 | |
|   return _mode != mode;
 | |
| }
 | |
|         
 | |
| TMask* TQuadroC_E2::get_mask(int mode)
 | |
| {
 | |
|   const int m = (mode == MODE_QUERY) ? 0 : 1;
 | |
|   _mode = mode;
 | |
|   return load_mask(m);
 | |
| }
 | |
| 
 | |
| TMask* TQuadroC_E2::load_mask(int n)
 | |
| {
 | |
|   if (_msk[n] != NULL) 
 | |
|     return _msk[n]; 
 | |
|     
 | |
|   TFilename name("771230"); 
 | |
|   
 | |
|   if (n == 0) 
 | |
|   { 
 | |
|     switch (_tipoq) 
 | |
|     {
 | |
|     case 'C':
 | |
|       name << 'd';
 | |
|       break;
 | |
|     case 'D':
 | |
|       name << 'a';
 | |
|       break;
 | |
|     case '1':
 | |
|       name << 'e';
 | |
|       break;
 | |
|     case 'E' :
 | |
|       name << 'g';
 | |
|       break;
 | |
|     case '2' :
 | |
|       name << 'i';
 | |
|       break;       
 | |
|     case '3':
 | |
|       name = "77qe2a";
 | |
|       break;
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|   }
 | |
|   else 
 | |
|   {
 | |
|     switch (_tipoq)
 | |
|     {
 | |
|     case 'C':
 | |
|       name << 'f';
 | |
|       break;
 | |
|     case 'D':
 | |
|       name << 'b';
 | |
|       break;
 | |
|     case '1':
 | |
|       name << 'c';
 | |
|       break;      
 | |
|     case 'E':
 | |
|       name << 'h';
 | |
|       break;
 | |
|     case '2' :
 | |
|       name << 'l';
 | |
|       break;        
 | |
|     case '3':
 | |
|       name = "77qe2b";
 | |
|       break;
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|   }  
 | |
|   
 | |
|   TMask* m = new TMask(name);
 | |
| 
 | |
|   switch (n)
 | |
|   {                                   
 | |
|     case 0:
 | |
|       if (m)
 | |
|       {        
 | |
|        m->set_handler(F_CODDITTA, codditta_hnd);
 | |
|        m->set_handler(F_NPROG, nprog_handler);
 | |
|        m->set_handler(F_CODANAGRCOM, codanagr_handler);
 | |
|        m->set_handler(F_CODANAGRPERC, codanagr_handler);
 | |
|        if (_quadro != "E2")
 | |
|          m->set_handler(F_GENERA, genera_handler);    
 | |
|       }
 | |
|       break;
 | |
|     case 1:                                 
 | |
|       if (m)
 | |
|       {
 | |
|         m->set_handler(F_IMPONIBILE, imponibile_hnd);
 | |
|         m->set_handler(F_PERC,       imponibile_hnd);
 | |
|       }
 | |
|       break;
 | |
|     default:
 | |
|       break;  
 | |
|   }        
 | |
|   m->disable(DLG_FINDREC);
 | |
|   
 | |
|   return _msk[n] = m;
 | |
| }
 | |
| 
 | |
| // Ricerca e output dell'ultimo nprog del percipiente scelto
 | |
| bool TQuadroC_E2::setta_nprog(TMask_field& f)
 | |
| {
 | |
|   long  nprog = 0L;
 | |
|   const char tipoa    = f.mask().get(F_TIPOA)[0];
 | |
|   const long codanagr = atol(f.get());
 | |
|   const long codditta = get_firm_770();
 | |
|   
 | |
|   TLocalisamfile quad(app()._file);
 | |
|     
 | |
|   quad.zero();
 | |
|   quad.put("CODDITTA", codditta);
 | |
|   quad.put("TIPOA",    tipoa);
 | |
|   quad.put("CODANAGR", codanagr);
 | |
|     
 | |
|   TRectype rec(quad.curr());
 | |
|     
 | |
|   quad.read();
 | |
|     
 | |
|   if (quad.curr() > rec) 
 | |
|   {
 | |
|     f.mask().set(F_NPROG, nprog+1);
 | |
|     return TRUE;
 | |
|   }
 | |
|       
 | |
|   for ( ; !quad.eof(); quad.next())   
 | |
|   {
 | |
|     if (quad.curr() > rec) break;
 | |
|     nprog = quad.get_long("NPROG");
 | |
|   }
 | |
| 
 | |
|   //app()._last_scheda = nprog;
 | |
| 
 | |
|   f.mask().set(F_NPROG, nprog+1);
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroC_E2::codditta_hnd(TMask_field& f, KEY k)
 | |
| {         
 | |
|   if (k == K_TAB && !f.mask().is_running())
 | |
|   {
 | |
|     TString16 codditta; codditta << app()._codditta;
 | |
|     if (codditta != "0")        
 | |
|     {
 | |
|       f.set(codditta);
 | |
|       f.check();
 | |
|     }
 | |
|   }   
 | |
|   return TRUE;                                           
 | |
| }
 | |
| 
 | |
| bool TQuadroC_E2::imponibile_hnd(TMask_field& f, KEY k)
 | |
| {         
 | |
|   if (k == K_TAB)
 | |
|   {
 | |
|     if (f.dlg() == F_PERC)
 | |
|     {
 | |
|       real perc (f.get());
 | |
|       if (perc == ZERO)
 | |
|       {                              
 | |
|         int causale = f.mask().get_int(F_CODCAUS);
 | |
|         TRectype& cau = app().look_causali(causale);
 | |
|         real aliquota = cau.get_real(rPERC_RAC);
 | |
|         f.mask().set(F_PERC, aliquota.string());
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     real imponibile (f.mask().get(F_IMPONIBILE));
 | |
|     real aliquota   (f.mask().get(F_PERC));
 | |
|     
 | |
|     real importo = ZERO;
 | |
|     
 | |
|     importo = imponibile * (aliquota/100);
 | |
| 
 | |
|     f.mask().set(app()._tipoq == 'C' ? F_RITENUTE : F_IMPORTO, importo.string());
 | |
|   }   
 | |
|   return TRUE;                                           
 | |
| }
 | |
| 
 | |
| void TQuadroC_E2::init_sort()
 | |
| {
 | |
|   _rig  = new righe_pag;
 | |
|   _sort = new TSort(sizeof(righe_pag));
 | |
| 
 | |
|   _sort->addsortkey ((char*)&(_rig->tipoa)  - (char*)&(_rig->tipoa), 1);
 | |
|   _sort->addsortkey ((char*)&(_rig->codan)  - (char*)&(_rig->tipoa), 5);
 | |
|   _sort->addsortkey ((char*)&(_rig->codcau) - (char*)&(_rig->tipoa), 2);
 | |
|   _sort->addsortkey ((char*)&(_rig->perc)   - (char*)&(_rig->tipoa), 6);
 | |
|   _sort->init();
 | |
| }
 | |
| 
 | |
| void TQuadroC_E2::riempi_record(char t,long ca,int cc,const real& p, 
 | |
|                              const real& so,const real& im,
 | |
|                              const real& ri,const real& co,bool acim,
 | |
|                              const real& inps, bool bInps)
 | |
| {
 | |
|   _rig->tipoa = t;
 | |
|   sprintf(_rig->codan, "%5ld", ca);
 | |
|   sprintf(_rig->codcau, "%02d", cc);
 | |
| // 22.5.96 Cambiato il formato @@@,@@ con @.@@@,@@
 | |
| // Ci vuole anche il punto delle migliaia se real::string() sbaglia 
 | |
| // a calcolare il numero di decimali.
 | |
| //  TString16 pp(p.string("@.@@@,@@"));
 | |
|   double ppd = atof(p.string());
 | |
|   sprintf(_rig->perc, "%.2f", ppd);
 | |
|   _rig->somme = so;
 | |
|   _rig->impo  = im;
 | |
|   _rig->rite  = ri;
 | |
|   _rig->comp  = co;
 | |
|   _rig->acim  = acim;                        
 | |
|   _rig->inps  = inps;                                    
 | |
|   _rig->bInps = bInps;
 | |
|   _sort->sort((const char*)_rig);
 | |
| }    
 | |
| 
 | |
| bool TQuadroC_E2::genera_handler(TMask_field& f , KEY k)
 | |
| {
 | |
|   if (k == K_SPACE)  
 | |
|   {
 | |
|     app().generazione();
 | |
|     app()._registra = TRUE; // Genera i riporti alla fine
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| TRectype& TQuadroC_E2::look_causali(int codc)
 | |
| {                            
 | |
|   TString16 dep;
 | |
|   _ca7->zero();
 | |
|   dep.format("%02d", codc);
 | |
|   _ca7->put("CODTAB", dep);
 | |
|   _ca7->read();      
 | |
|   if (_ca7->bad())
 | |
|      _ca7->zero();
 | |
|   return _ca7->curr();
 | |
| }
 | |
| 
 | |
| bool TQuadroC_E2::generazione()
 | |
| { 
 | |
|   if (!yesno_box("Conferma la generazione ?"))
 | |
|     return FALSE;
 | |
| 
 | |
|   init_sort();
 | |
|   
 | |
|   TToken_string exp;
 | |
|   exp.add("CODDITTA=CODDITTA");
 | |
|   exp.add("TIPOA=TIPOA");
 | |
|   exp.add("CODANAGR=CODANAGR");
 | |
|   exp.add("NPROG=NPROG");
 | |
|   
 | |
|   TRelation rel (LF_SCPERC);
 | |
|   rel.add(LF_RPAG, exp, 1);
 | |
|   TString16 filt; filt.format("CODDITTA=%ld", get_firm_770());
 | |
|   
 | |
|   TCursor cur (&rel,filt,1);              
 | |
|   
 | |
|   azzera_quadro();
 | |
|   
 | |
|   TLocalisamfile& scperc = rel.lfile();
 | |
|   TLocalisamfile& rpag   = rel.lfile(LF_RPAG);  
 | |
|   cur = 0L;
 | |
|   const long nitems = cur.items();  
 | |
|   
 | |
|   TProgind p(nitems ? nitems : 1, "Generazione in corso...", FALSE, TRUE, 70);
 | |
|   long codan, codditta;
 | |
|   char tipoa;
 | |
|   int codcaus, nprog;
 | |
|   TString16 qua;
 | |
|   TDate datapag; 
 | |
|   real perc=ZERO,spesa=ZERO,impo=ZERO,rite=ZERO,comp=ZERO,inps=ZERO;
 | |
|   
 | |
|   for (; cur.pos() < nitems; ++cur)
 | |
|   { 
 | |
|     p.addstatus(1);
 | |
|     
 | |
|     codditta = scperc.get_long(SPR_CODDITTA);
 | |
|     tipoa    = scperc.get(SPR_TIPOA)[0];
 | |
|     codan    = scperc.get_long(SPR_CODANAGR);
 | |
|     codcaus  = scperc.get_int(SPR_CODCAUS);
 | |
|     nprog    = scperc.get_int(SPR_NPROG);
 | |
|     
 | |
|     TRectype  cau        = look_causali(codcaus);
 | |
|     TString16 qua        = cau.get(bCODICE_QUADRO);
 | |
|     bool      acc_imp    = cau.get_bool(bSOMME_ASSOG_RAC);
 | |
|     bool	  bContrInps = cau.get_bool(bCONTRIBUTO_INPS);
 | |
|                          
 | |
|     if (_tipoq == 'D' && qua != "D")  continue;
 | |
|     if (_tipoq == 'C' && qua != "C")  continue;  
 | |
|     if (_tipoq == '1' && qua != "D1") continue;
 | |
|     if (_tipoq == 'E' && qua != "E")  continue;
 | |
|     if (_tipoq == '2' && qua != "E1") continue;
 | |
|     
 | |
|     if (cur.is_first_match(LF_RPAG))
 | |
|     {
 | |
|       TRecnotype nrec = rpag.recno();
 | |
|       rpag.zero();
 | |
|       rpag.setkey(1);
 | |
|       rpag.put(PAG_CODDITTA, (long)codditta);      
 | |
|       rpag.put(PAG_TIPOA, tipoa);
 | |
|       rpag.put(PAG_CODANAGR, (long)codan);
 | |
|       rpag.put(PAG_NPROG, nprog);
 | |
|       TRectype recc (rpag.curr());
 | |
|       for (rpag.read(_isgteq); !rpag.eof() ;rpag.next())
 | |
|       {
 | |
|         TRectype rec (rpag.curr());
 | |
|         if (rec > recc) break;
 | |
|         datapag = rpag.get(PAG_DATAPAG);
 | |
|         if (datapag.year() != _anno_dic)
 | |
|           continue;  
 | |
|         //codtrib = cau.get_int("I0");
 | |
|         perc  = rpag.get_real(PAG_PERC);
 | |
|         spesa = rpag.get_real(PAG_SPESA);
 | |
|         rite  = rpag.get_real(PAG_RITENUTA);
 | |
|         impo  = rpag.get_real(PAG_IMPONIBILE);
 | |
|         comp  = rpag.get_real(PAG_COMPENSO);    
 | |
|         inps  = rpag.get_real(PAG_INPSPERC);
 | |
|         
 | |
|         if (perc==ZERO && comp==ZERO && rite==ZERO && impo==ZERO 
 | |
|             && spesa==ZERO) 
 | |
|           continue;
 | |
|         riempi_record(tipoa,codan,codcaus,perc,spesa,impo,rite,comp,acc_imp,inps,bContrInps);  
 | |
|       } 
 | |
|       rpag.readat(nrec);
 | |
|     }
 | |
|   }
 | |
|   _sort->endsort();      
 | |
|   
 | |
|   leggi_sort(p);
 | |
|   
 | |
|   delete _rig;
 | |
|   delete _sort;
 | |
|   return TRUE;
 | |
| }                
 | |
| 
 | |
| bool TQuadroC_E2::azzera_quadro()
 | |
| { 
 | |
|   const char* title;
 | |
|   
 | |
|   if (_tipoq == 'C')
 | |
|     title = "Azzeramento quadro C";
 | |
|   else
 | |
|     if (_tipoq == 'D')
 | |
|       title = "Azzeramento quadro D";
 | |
|     else    
 | |
|       if (_tipoq == '1')
 | |
|         title = "Azzeramento quadro D1";
 | |
|       else 
 | |
|         if (_tipoq == 'E')
 | |
|           title = "Azzeramento quadro E";
 | |
|         else
 | |
|           title = "Azzeramento quadro E1";
 | |
|                  
 | |
| 
 | |
| // Tutto cio' solo per contare gli items e far andare correttamente
 | |
| // il "termometro" (sic..)
 | |
|   TRelation rel (_file);
 | |
|   TString16 filt; filt.format("CODDITTA=%ld", get_firm_770());
 | |
|   TCursor cur (&rel,filt,1);           
 | |
| //  TLocalisamfile& quadro = rel.lfile();   
 | |
|   TLocalisamfile quadro(_file);                    
 | |
|   cur = 0L;
 | |
|   const long nitems = cur.items();  
 | |
|   
 | |
|   TProgind prog(nitems, title, FALSE, TRUE);
 | |
| 
 | |
|   quadro.zero();
 | |
|   quadro.put("CODDITTA", (long)get_firm_770());
 | |
|   TRectype dep(quadro.curr());
 | |
|     
 | |
|   for (quadro.read(); !quadro.eof(); quadro.next())
 | |
|   { 
 | |
|     prog.addstatus(1);
 | |
|     if (quadro.curr() > dep) break;
 | |
|     quadro.read(_isequal, _lock);
 | |
|     quadro.remove();
 | |
|   }   
 | |
|   
 | |
|   if (_tipoq == '2')
 | |
|   {            
 | |
|     TLocalisamfile quadro(LF_PROSPE1);                    
 | |
|   
 | |
|     TProgind prog(quadro.items(), "Azzeramento prospetto del quadro E1", FALSE, TRUE);
 | |
|   
 | |
|     quadro.zero();
 | |
|     quadro.put("CODDITTA", (long)get_firm_770());
 | |
|     TRectype dep(quadro.curr());
 | |
|     
 | |
|     for (quadro.read(); !quadro.eof(); quadro.next())
 | |
|     { 
 | |
|       prog.addstatus(1);
 | |
|       if (quadro.curr() > dep) break;
 | |
|       quadro.read(_isequal, _lock);
 | |
|       quadro.remove();
 | |
|     }   
 | |
|   }
 | |
|   return TRUE;
 | |
| }     
 | |
| 
 | |
| void TQuadroC_E2::genera_prospetto(int cau, real& comp, real& impo, real& rite)
 | |
| {
 | |
|   TLocalisamfile pr (LF_PROSPE1);
 | |
|   
 | |
|   pr.setkey(1);
 | |
|   pr.zero();
 | |
|   pr.put(PRE_CODDITTA, (long)get_firm_770());
 | |
|   pr.put(PRE_CODCAUS,  cau);
 | |
|   if (pr.read() == NOERR)
 | |
|   {
 | |
|     comp += pr.get_real(PRE_COMPENSO);
 | |
|     impo += pr.get_real(PRE_IMPONIBILE);
 | |
|     rite += pr.get_real(PRE_RITENUTA);
 | |
| 
 | |
|     pr.put(PRE_COMPENSO,   comp);
 | |
|     pr.put(PRE_IMPONIBILE, impo);
 | |
|     pr.put(PRE_RITENUTA,   rite);
 | |
|     pr.rewrite();    
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     pr.put(PRE_CODDITTA,   (long)get_firm_770());
 | |
|     pr.put(PRE_CODCAUS,    cau);
 | |
|     pr.put(PRE_COMPENSO,   comp);
 | |
|     pr.put(PRE_IMPONIBILE, impo);
 | |
|     pr.put(PRE_RITENUTA,   rite);
 | |
|     pr.write();
 | |
|   }
 | |
| }
 | |
| 
 | |
| void TQuadroC_E2::leggi_sort(TProgind& p)
 | |
| {
 | |
|   TLocalisamfile qd(_file);
 | |
|   const char* buf;
 | |
|   TString16 keyp, key, perc, perc_p; 
 | |
|   char tipoa, tipoa_p;
 | |
|   long codanag, codanag_p;
 | |
|   int codcaus_p, codcaus, nprog;
 | |
|   real tot_somme=ZERO,tot_impo=ZERO,tot_rite=ZERO,tot_comp=ZERO, rQCInps=ZERO;
 | |
|   real rTotQCInps    = ZERO;
 | |
|   bool esiste_record=FALSE, bAssoggettateRacc=FALSE,bFattoProspetto=FALSE;
 | |
|   struct righe_pag* rp;
 | |
| 
 | |
|   keyp = key = ""; 
 | |
|   nprog = 1;
 | |
|   tot_somme = tot_impo = tot_rite = tot_comp = ZERO;
 | |
|   
 | |
|   while ((buf = _sort->retrieve()) != NULL)
 | |
|   {
 | |
|     p.addstatus(1);
 | |
|     esiste_record = TRUE;
 | |
|     rp 			= (struct righe_pag*)buf;
 | |
|     tipoa   					= rp->tipoa;           
 | |
|     codanag 					= atol(rp->codan);
 | |
|     codcaus 					= atoi(rp->codcau);
 | |
|     perc    					= rp->perc;                                                      
 | |
|     bAssoggettateRacc = rp->acim;
 | |
| // non frega un tubo    bInps   = rp->bInps;  // se la riga aveva il contributo inps nella caus.
 | |
|     rQCInps =  rp->inps;    
 | |
| 
 | |
|     if (QuadroE1() && !bAssoggettateRacc) 
 | |
|     {
 | |
|       genera_prospetto(codcaus,rp->comp,rp->impo,rp->rite);
 | |
|       bFattoProspetto = TRUE;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       key.format("%c%5ld%2d%s", tipoa, codanag, codcaus, (const char*)perc);
 | |
|       if ( (key != keyp) && (keyp != "") ) 
 | |
|       {
 | |
|         bFattoProspetto = FALSE;
 | |
|         qd.zero();
 | |
|         qd.put("CODDITTA", (long)get_firm_770());
 | |
|         qd.put("TIPOA",    tipoa_p);
 | |
|         qd.put("CODANAGR", (long)codanag_p);
 | |
|         qd.put("CODCAUS",  codcaus_p);                
 | |
|         qd.put("NPROG",    nprog++);
 | |
| 
 | |
| // 12.6.96 aggiunto contributo inps        
 | |
|         if (QuadroC())
 | |
|           qd.put("CONTSSN", rTotQCInps);
 | |
|           
 | |
|         if (QuadroD() || QuadroC() || QuadroE())
 | |
|           qd.put("SOMME", tot_somme + tot_comp - tot_impo);
 | |
|         else
 | |
|           if (QuadroD1())
 | |
|           {
 | |
|             qd.put("QUOTAPRO", tot_comp - tot_impo);
 | |
|             qd.put("SPESEANT", tot_somme);
 | |
|           }
 | |
|           else
 | |
|             if (QuadroE1())
 | |
|               qd.put("SOMME", tot_comp);
 | |
|         
 | |
|         if (QuadroE1())
 | |
|           qd.put("AMMONTARE",  tot_impo);
 | |
|         else
 | |
|           qd.put("IMPONIBILE", tot_impo);
 | |
|         
 | |
|         if (QuadroC())
 | |
|           qd.put("RITENUTE", tot_rite);
 | |
|         else
 | |
|           qd.put("IMPORTO",  tot_rite);
 | |
|     
 | |
|         qd.put("PERC", perc_p);
 | |
|       
 | |
|         if (!QuadroE() && !QuadroE1())
 | |
|           qd.put("TOTALE", tot_comp + tot_somme);
 | |
|         
 | |
|         if (QuadroC())
 | |
|       qd.put("TOTALE", tot_somme + tot_impo + rTotQCInps);
 | |
|           
 | |
|         if (QuadroE1())
 | |
|           qd.put("NETTO", tot_comp - tot_rite);
 | |
|         else
 | |
|           qd.put("NETTO", tot_impo - tot_rite); 
 | |
|         qd.write();     
 | |
|         rTotQCInps = tot_impo = tot_somme = tot_rite = tot_comp = ZERO;
 | |
|       }                  
 | |
|       
 | |
|       tot_somme 	+= rp->somme;
 | |
|       tot_rite  	+= rp->rite;
 | |
|       tot_impo  	+= rp->impo; 
 | |
|       tot_comp  	+= rp->comp;
 | |
|       rTotQCInps 	+= rQCInps;
 | |
|     
 | |
|       if (tipoa_p != tipoa || codanag != codanag_p)
 | |
|         nprog = 1;
 | |
|       
 | |
|       tipoa_p   = tipoa;        
 | |
|       codanag_p = codanag;
 | |
|       codcaus_p = codcaus;
 | |
|       perc_p    = perc;
 | |
|     
 | |
|       keyp.format("%c%5ld%2d%s", tipoa_p, codanag_p, codcaus_p, (const char*)perc_p);
 | |
|     } 
 | |
|   }    // while (retrieve() != NULL)
 | |
| 
 | |
|   if (esiste_record || bFattoProspetto)
 | |
|   {
 | |
|     qd.zero();
 | |
|     qd.put("CODDITTA", (long)_codditta);
 | |
|     qd.put("TIPOA",    tipoa_p);
 | |
|     qd.put("CODANAGR", (long)codanag_p);
 | |
|     qd.put("CODCAUS",  codcaus_p);                
 | |
|     qd.put("NPROG",    nprog++);
 | |
| 
 | |
|     if (QuadroD() || QuadroC() || QuadroE())
 | |
|       qd.put("SOMME", tot_somme + tot_comp - tot_impo);
 | |
|     else
 | |
|       if (QuadroD1())
 | |
|       {
 | |
|         qd.put("QUOTAPRO", tot_comp - tot_impo);
 | |
|         qd.put("SPESEANT", tot_somme);      
 | |
|       }
 | |
|       else                              
 | |
|         if (QuadroE1())
 | |
|           qd.put("SOMME", tot_comp);
 | |
|   
 | |
|     if (QuadroE1())
 | |
|       qd.put("AMMONTARE",  tot_impo);
 | |
|     else
 | |
|       qd.put("IMPONIBILE", tot_impo);
 | |
|     
 | |
|     if (QuadroC())
 | |
|       qd.put("RITENUTE", tot_rite);
 | |
|     else
 | |
|       qd.put("IMPORTO",  tot_rite);
 | |
|       
 | |
|     qd.put("PERC", perc_p);
 | |
| 
 | |
| // 12.6.96 aggiunto contributo inps
 | |
|     if (QuadroC())
 | |
|       qd.put("CONTSSN", rTotQCInps);
 | |
|           
 | |
|     if (!QuadroE() && !QuadroE1())
 | |
|       qd.put("TOTALE", tot_comp + tot_somme);
 | |
| 
 | |
|     if (QuadroC())
 | |
|       qd.put("TOTALE", tot_somme + tot_impo + rTotQCInps);
 | |
|       
 | |
|     if (QuadroE1())
 | |
|       qd.put("NETTO", tot_comp - tot_rite);
 | |
|     else
 | |
|       qd.put("NETTO", tot_impo - tot_rite); 
 | |
|     qd.write();     
 | |
|   }  
 | |
| }
 | |
| 
 | |
| bool TQuadroC_E2::codanagr_handler(TMask_field& f, KEY k)
 | |
| {
 | |
|   if (k == K_TAB && f.focusdirty())
 | |
|   {                      
 | |
|     TMask& m = f.mask();
 | |
|     const long codanagr = atol(f.get()); 
 | |
|     const char tipoa    = m.get(F_TIPOA)[0];
 | |
| // 12.6.96 Non lascia andare avanti se il perc. non esiste
 | |
|     if (!esiste_perc(tipoa, codanagr))
 | |
|       return f.warning_box("Percipiente inesistente");
 | |
|     if (app()._quadro != "E2")
 | |
|       f.mask().disable(F_GENERA);
 | |
|     TString16 dummy(f.get());
 | |
|     if (dummy.not_empty())   
 | |
|       setta_nprog(f);
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| // Passa al modo inserimento/modifica.
 | |
| bool TQuadroC_E2::nprog_handler(TMask_field& f, KEY key)
 | |
| {
 | |
|   if (!f.mask().is_running()) return TRUE;
 | |
| 
 | |
|   if (key == K_CTRL+K_TAB)
 | |
|   {
 | |
|     f.set_dirty();
 | |
|     return TRUE;
 | |
|   }
 | |
|   
 | |
|   if (key == K_TAB)   
 | |
|   {
 | |
|     const int nprog = atoi(f.get());
 | |
|     if (nprog==0) return TRUE;
 | |
| //    f.mask().stop_run(K_AUTO_ENTER); // entra in modo modifica (se il record che ha chiave specificata esiste gia') oppure
 | |
|                                      // inserimento (se trova che non esiste)
 | |
|   }                                   
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroC_E2::scrivi_dati_per(TRectype& rec)
 | |
| {
 | |
|   TLocalisamfile dati_per(LF_PERC);
 | |
|   const long codditta = rec.get_long("CODDITTA");
 | |
|   char       tipoa    = rec.get_char("TIPOA");
 | |
|   const long codanagr = rec.get_long("CODANAGR");
 | |
|   
 | |
|   dati_per.zero();
 | |
|   dati_per.put("CODDITTA", codditta);    
 | |
|   dati_per.put("TIPOA", tipoa);    
 | |
|   dati_per.put("CODANAGR", codanagr);   
 | |
|   
 | |
|   const bool preesistente = (dati_per.read() == NOERR);
 | |
|   
 | |
|   if (!preesistente)
 | |
|   {
 | |
|     dati_per.zero();
 | |
|     dati_per.put("CODDITTA", codditta);    
 | |
|     dati_per.put("TIPOA", tipoa);    
 | |
|     dati_per.put("CODANAGR", codanagr);   
 | |
|   
 | |
|     dati_per.write();   
 | |
|   }
 | |
|     
 | |
|   return preesistente;
 | |
| }
 | |
| 
 | |
| int TQuadroC_E2::rewrite(const TMask& m)
 | |
| {
 | |
|   m.autosave(*_rel);
 | |
|   const int err = _rel->rewrite();
 | |
|   scrivi_dati_per(_rel->curr());         
 | |
|   _registra = TRUE;
 | |
|   return err;
 | |
| }
 | |
| 
 | |
| int TQuadroC_E2::write(const TMask& m)
 | |
| {
 | |
|   m.autosave(*_rel);
 | |
|   const int err = _rel->write();
 | |
|   scrivi_dati_per(_rel->curr());         
 | |
|   
 | |
|   _registra = TRUE;
 | |
|   
 | |
|   return err;
 | |
| }
 | |
| 
 | |
| bool TQuadroC_E2::remove()
 | |
| {
 | |
|   _registra = TRUE;
 | |
|   return TRelation_application::remove();
 | |
| }
 | |
| 
 | |
| bool TQuadroC_E2::user_create()
 | |
| {                      
 | |
|   switch (_tipoq)
 | |
|   {
 | |
|   case 'C':
 | |
|     _file   = LF_QUAC;
 | |
|     _quadro = "C";
 | |
|     break;
 | |
|   case 'D':
 | |
|     _file   = LF_QUAD;
 | |
|     _quadro = "D";
 | |
|     break;
 | |
|   case '1':
 | |
|     _file   = LF_QUAD1;
 | |
|     _quadro = "D1";
 | |
|     break;           
 | |
|   case 'E':
 | |
|     _file   = LF_QUAE;
 | |
|     _quadro = "E";
 | |
|     break;
 | |
|   case '2':
 | |
|     _file   = LF_QUAE1;
 | |
|     _quadro = "E1";
 | |
|     break;    
 | |
|   case '3':
 | |
|     _file   = LF_QUAE2;
 | |
|     _quadro = "E2";
 | |
|     break;    
 | |
|   default:
 | |
|     break;
 | |
|   }
 | |
|      
 | |
|   _qd       = new TLocalisamfile(_file);
 | |
|   _rel      = new TRelation(_file);
 | |
|   _rpag     = new TLocalisamfile(LF_RPAG);
 | |
|   _ca7      = new TTable ("%CA7");
 | |
|   _codditta	= get_firm_770();
 | |
|   set_search_field(F_CODANAGRPERC);
 | |
|   
 | |
|   _registra = FALSE;
 | |
|   
 | |
|   load_mask(0);                                   
 | |
| 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TQuadroC_E2::user_destroy()
 | |
| { 
 | |
|   if (_msk[1] != NULL) delete _msk[1];
 | |
|   if (_msk[0] != NULL) delete _msk[0];
 | |
| 
 | |
|   TString16 quadro = "";
 | |
|   
 | |
|   switch (_tipoq)
 | |
|   {
 | |
|   case 'C':
 | |
|     quadro << "C";
 | |
|     break;
 | |
|   case 'D':
 | |
|     quadro << "D";
 | |
|     break;
 | |
|   case '1':
 | |
|     quadro << "D1";
 | |
|     break;         
 | |
|   case 'E':
 | |
|     quadro << "E";
 | |
|     break;
 | |
|   case '2':
 | |
|     quadro << "E1";
 | |
|     break;    
 | |
|   case '3':
 | |
|     quadro << "E2";
 | |
|     break;    
 | |
|   default:
 | |
|     break;
 | |
|   }
 | |
|   
 | |
|   if (_registra)
 | |
|     _rip.set(quadro);
 | |
| 
 | |
|   delete _rel; 
 | |
|   delete _qd;
 | |
|   delete _rpag;
 | |
|   delete _ca7;
 | |
|   
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| void TQuadroC_E2::on_config_change()
 | |
| {                                
 | |
|   TConfig conf(CONFIG_STUDIO);
 | |
|   _anno_dic = (int)conf.get_long(ANNO_SEL, NULL); 
 | |
| }
 | |
| 
 | |
| void TQuadroC_E2::init_query_mode(TMask& m)
 | |
| { 
 | |
|   m.set(F_ANNODIC, _anno_dic); 
 | |
|   if (_quadro != "E2")
 | |
|     m.enable(F_GENERA); 
 | |
|     
 | |
| // forza il ricalcolo dell'ultimo numero disponibile
 | |
|   TString16 dummy(m.get(F_NPROG));
 | |
|   if (dummy.not_empty())
 | |
|     setta_nprog(m.field(F_NPROG));
 | |
| 
 | |
|   m.hide(-1);  // nasconde (hide) group 1 - Scelta ANAGR
 | |
|   m.show(-2);  // abilita (show) group 2 - Ricerca su DATI PERC
 | |
| }
 | |
| 
 | |
| void TQuadroC_E2::init_query_insert_mode(TMask& m)
 | |
| { 
 | |
|   m.set(F_ANNODIC, _anno_dic);
 | |
| 
 | |
|   m.hide(-2);  // group 3 Nasconde ricerca su PERC
 | |
|   m.show(-1);  // group 1 Ricerca su ANAGR
 | |
| }
 | |
| 
 | |
| int quadriC_E2(int argc, char* argv[])
 | |
| {
 | |
|   const char tipo = toupper(*argv[2]); 
 | |
|   const char* title = "Quadro D";
 | |
|   TQuadroC_E2 a(tipo);
 | |
|   switch (tipo)
 | |
|   {
 | |
|     case '1':
 | |
|       title = "Quadro D1";
 | |
|       break;
 | |
|     case 'C':
 | |
|       title = "Quadro C";
 | |
|       break;      
 | |
|     case 'E':
 | |
|       title = "Quadro E";
 | |
|       break;
 | |
|     case '2':
 | |
|       title = "Quadro E1";
 | |
|       break;
 | |
|     case '3':
 | |
|       title = "Quadro E2";
 | |
|       break;
 | |
|     default:
 | |
|       break;    
 | |
|   }
 | |
|   a.run(argc, argv, title);
 | |
|   return TRUE;
 | |
| }
 |