225 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h> 
 | 
						||
#include <urldefid.h>//per definizione BAR_ITEM
 | 
						||
#include <msksheet.h>
 | 
						||
#include <sheet.h>
 | 
						||
#include <utility.h>
 | 
						||
#include <lffiles.h>
 | 
						||
#include "ef0.h"
 | 
						||
#include "ef0101.h"
 | 
						||
#include "ef0400.h"                                                          
 | 
						||
 | 
						||
/////////////////////////////////////////////////////////////////////////////
 | 
						||
//Classe per l'eliminazione di effetti di effetti con selezione per gruppi //
 | 
						||
/////////////////////////////////////////////////////////////////////////////
 | 
						||
class TEliminazione_effetti: public TApplication
 | 
						||
{
 | 
						||
  TMask *_msk;
 | 
						||
  TRelation *_rel;  
 | 
						||
  TLocalisamfile *_reff, *_cession;
 | 
						||
  TRectype *_from, *_to; 
 | 
						||
  virtual bool create() ;                         
 | 
						||
  virtual bool destroy() ;                        
 | 
						||
  virtual bool menu(MENU_TAG);          
 | 
						||
protected:                            
 | 
						||
  static bool from_numero_handler(TMask_field& f, KEY k);
 | 
						||
  static bool to_numero_handler(TMask_field& f, KEY k);
 | 
						||
  static bool from_data_handler(TMask_field& f, KEY k);
 | 
						||
  static bool to_data_handler(TMask_field& f, KEY k);  
 | 
						||
  static bool conferma_handler(TMask_field& f, KEY k); 
 | 
						||
  static bool annulla_handler(TMask_field& f, KEY k); 
 | 
						||
  static void elimina();
 | 
						||
public:         
 | 
						||
  TEliminazione_effetti() {};
 | 
						||
  virtual ~TEliminazione_effetti() {};
 | 
						||
};
 | 
						||
 | 
						||
// restituisce un riferimento all' applicazione
 | 
						||
inline TEliminazione_effetti& app(){return (TEliminazione_effetti&)main_app();}
 | 
						||
 | 
						||
// crea l'applicazione
 | 
						||
bool TEliminazione_effetti::create()
 | 
						||
{
 | 
						||
  _msk = new TMask("ef0400a");  
 | 
						||
  _rel = new TRelation(LF_EFFETTI);       
 | 
						||
  _reff = new TLocalisamfile(LF_REFFETTI);
 | 
						||
  _cession = new TLocalisamfile(LF_CESS); 
 | 
						||
  _rel->first();                   
 | 
						||
  _from = new TRectype(_rel->lfile().curr());
 | 
						||
  _rel->last(); 
 | 
						||
  _to = new TRectype(_rel->lfile().curr());
 | 
						||
  _msk->set_handler(F_DA_RIBA, from_numero_handler);
 | 
						||
  _msk->set_handler(F_A_RIBA, to_numero_handler);
 | 
						||
  _msk->set_handler(F_DA_DATA, from_data_handler);
 | 
						||
  _msk->set_handler(F_A_DATA, to_data_handler);
 | 
						||
  _msk->set_handler(DLG_OK, conferma_handler); 
 | 
						||
  _msk->set_handler(DLG_CANCEL, annulla_handler); 
 | 
						||
  dispatch_e_menu(BAR_ITEM(1)); 
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
 | 
						||
// distrugge l'applicazione
 | 
						||
bool TEliminazione_effetti::destroy()
 | 
						||
{
 | 
						||
  delete _msk;  
 | 
						||
  delete _rel;             
 | 
						||
  delete _reff;
 | 
						||
  delete _cession;
 | 
						||
  delete _from;
 | 
						||
  delete _to;
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
 | 
						||
//Carica maschera eliminazione effetti
 | 
						||
bool TEliminazione_effetti::menu(MENU_TAG)
 | 
						||
{
 | 
						||
  KEY key = K_ENTER;
 | 
						||
  while (key != K_QUIT)//finch<63> non si chiude la maschera
 | 
						||
  {  
 | 
						||
    key = _msk->run(); 
 | 
						||
  }
 | 
						||
  return FALSE;
 | 
						||
}            
 | 
						||
 | 
						||
//Handler per la gestione della prima chiave (from) del cursore per numero
 | 
						||
bool TEliminazione_effetti::from_numero_handler(TMask_field& f, KEY k)
 | 
						||
{ 
 | 
						||
  TMask &m = f.mask(); 
 | 
						||
  if (k == K_TAB)
 | 
						||
  {
 | 
						||
    if (!f.get().empty())// se il campo non <20> vuoto
 | 
						||
    { 
 | 
						||
      TRectype* from = app()._from;
 | 
						||
      long num = m.get_long(F_DA_RIBA);               
 | 
						||
      from->put(EFF_NPROGTR, num);
 | 
						||
    }
 | 
						||
  } 
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
 | 
						||
//Handler per la gestione della seconda chiave (to) del cursore per numero 
 | 
						||
bool TEliminazione_effetti::to_numero_handler(TMask_field& f, KEY k)
 | 
						||
{ 
 | 
						||
  TMask &m = f.mask(); 
 | 
						||
  if (k == K_TAB)
 | 
						||
  {  
 | 
						||
    if (!f.get().empty())// se il campo non <20> vuoto
 | 
						||
    {                                
 | 
						||
      TRectype* to = app()._to;
 | 
						||
      long num = m.get_long(F_A_RIBA);                  
 | 
						||
      to->put(EFF_NPROGTR, num);
 | 
						||
    }
 | 
						||
  } 
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
 | 
						||
//Handler per la gestione della prima chiave (from) del cursore per data
 | 
						||
bool TEliminazione_effetti::from_data_handler(TMask_field& f, KEY k)
 | 
						||
{ 
 | 
						||
  TMask &m = f.mask(); 
 | 
						||
  if (k == K_TAB)
 | 
						||
  { 
 | 
						||
    if (!f.get().empty())// se il campo non <20> vuoto
 | 
						||
    {        
 | 
						||
      TRectype* from = app()._from;
 | 
						||
      TDate data = m.get(F_DA_DATA);
 | 
						||
      long num = m.get_long(F_DA_RIBA);               
 | 
						||
      from->put(EFF_NPROGTR, num);               
 | 
						||
      from->put(EFF_DATASCAD, data);             
 | 
						||
    }
 | 
						||
  } 
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
 | 
						||
//Handler per la gestione della seconda chiave (to) del cursore per numero
 | 
						||
bool TEliminazione_effetti::to_data_handler(TMask_field& f, KEY k)
 | 
						||
{ 
 | 
						||
  TMask &m = f.mask(); 
 | 
						||
  if (k == K_TAB)
 | 
						||
  {  
 | 
						||
    if (!f.get().empty())// se il campo non <20> vuoto
 | 
						||
    {                 
 | 
						||
      TRectype* to = app()._to;
 | 
						||
      TDate data = m.get(F_A_DATA);
 | 
						||
      long num = m.get_long(F_A_RIBA);                  
 | 
						||
      to->put(EFF_NPROGTR, num);               
 | 
						||
      to->put(EFF_DATASCAD, data);      
 | 
						||
    }
 | 
						||
  } 
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
 | 
						||
// Si effettua l'istanziazione del cursore e si eliminano gli effetti che vi
 | 
						||
// appartengono
 | 
						||
void TEliminazione_effetti::elimina()
 | 
						||
{
 | 
						||
 const TRectype *from = app()._from;
 | 
						||
 const TRectype *to = app()._to; 
 | 
						||
 TMask *m = app()._msk;                   
 | 
						||
 TRelation *rel = app()._rel;
 | 
						||
 const char* filter;
 | 
						||
 int key;
 | 
						||
 char op1 = m->get(F_TIPOSEL)[0];
 | 
						||
 char op2 = m->get(F_TIPOCANC)[0];
 | 
						||
 switch (op1) //scelgo la chiave per il cursore
 | 
						||
 {
 | 
						||
   case 'N':  //selezione effetti per numero
 | 
						||
        key = 1;
 | 
						||
        break;
 | 
						||
   case 'D':  //selezione effetti per data
 | 
						||
        key = 3;
 | 
						||
        break; 
 | 
						||
 }                      
 | 
						||
 switch (op2) //scelgo il filtro per il cursore
 | 
						||
 {
 | 
						||
   case 'S':  //cancello effetti stampati
 | 
						||
        filter = "EFFSTAMP=\"X\"";
 | 
						||
        break;
 | 
						||
   case 'C':  //cancello effetti contabilizzati
 | 
						||
        filter = "EFFCONT=\"X\"";
 | 
						||
        break; 
 | 
						||
   default :  //cancello tutti gli effetti
 | 
						||
        filter = "";
 | 
						||
        break;
 | 
						||
 }
 | 
						||
 TCursor cur(rel,filter,key,from,to); // istanzio il cursore    
 | 
						||
 TLocalisamfile& delfile = cur.file();// prendo un riferimento al file 
 | 
						||
 long n = cur.items();// prendo il numero di elementi del cursore 
 | 
						||
 cur.freeze();// congelo lo stato del cursore 
 | 
						||
 for (cur=0; cur.pos() < n; ++cur)// scandisco tutti gli elementi del cursore
 | 
						||
 {
 | 
						||
  TEffetto eff(delfile.curr());// istanzio un effetto
 | 
						||
  eff.remove(delfile);         // e lo cancello
 | 
						||
 } 
 | 
						||
}    
 | 
						||
 | 
						||
//Handler per gestire la conferma della cancellazione degli effetti    
 | 
						||
bool TEliminazione_effetti::conferma_handler(TMask_field& f, KEY k)
 | 
						||
{ 
 | 
						||
  TMask &m = f.mask(); 
 | 
						||
  if (k == K_SPACE)
 | 
						||
  {  
 | 
						||
    if (yesno_box("Vuoi veramete eliminare gli effetti selezionati"))
 | 
						||
       elimina(); 
 | 
						||
  }       
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
 | 
						||
// Handler per gestire la conferma dell'annullamento dei dati 
 | 
						||
// inseriti nella maschera       
 | 
						||
bool TEliminazione_effetti::annulla_handler(TMask_field& f, KEY k)
 | 
						||
{ 
 | 
						||
  TMask &m = f.mask(); 
 | 
						||
  if (k == K_SPACE)
 | 
						||
  {  
 | 
						||
    if (yesno_box("Vuoi veramete annullare i dati inseriti"))
 | 
						||
       m.reset(); 
 | 
						||
  }       
 | 
						||
  return TRUE;
 | 
						||
}
 | 
						||
 | 
						||
int ef0400(int argc, char* argv[])
 | 
						||
{
 | 
						||
  TEliminazione_effetti a ;
 | 
						||
  a.run(argc, argv, "Eliminazione Effetti");
 | 
						||
  return 0;
 | 
						||
} |