93 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include "effetti.h"         
 | 
						|
#include "reffetti.h"
 | 
						|
#include "cession.h"
 | 
						|
#include "ef0301.h"    
 | 
						|
 | 
						|
///////////////////////////////////////////////////
 | 
						|
// definizione dei metodi della classe TDistinta // 
 | 
						|
///////////////////////////////////////////////////
 | 
						|
 | 
						|
// costruttore distinta utilizzando il record passato
 | 
						|
TDistinta::TDistinta(const TRectype& rec)
 | 
						|
{      
 | 
						|
   read(rec);                           
 | 
						|
}
 | 
						|
 | 
						|
// costruisce la distinta del tipo e numero passati
 | 
						|
TDistinta::TDistinta(const char tipo, const long numero)
 | 
						|
{      
 | 
						|
   read(tipo,numero);                           
 | 
						|
}
 | 
						|
 | 
						|
// permette di leggere la distinta del tipo e numero passati 
 | 
						|
int TDistinta::read(const char tipo, const long numero)
 | 
						|
{ 
 | 
						|
  int err = NOERR;
 | 
						|
  CHECK(tipo!='\0' && numero > 0,"Can't read distinta from NULL elements");
 | 
						|
  TLocalisamfile f(LF_EFFETTI); 
 | 
						|
  for (int i=0; err == NOERR ; i++)
 | 
						|
  {
 | 
						|
    TEffetto* effetto = new TEffetto; 
 | 
						|
    err = effetto->read(f, tipo, numero, i+1);//legge un effetto per chiave 4
 | 
						|
    if (err == NOERR)
 | 
						|
      _righe_dist.add(effetto);
 | 
						|
  }
 | 
						|
  if ((_righe_dist.items()>0)||(err == _iseof) )//se ho letto degli effetti della distinta ed ho 
 | 
						|
    err = NOERR;                                //trovato la fine file elimino l'errore 
 | 
						|
  return err;
 | 
						|
}
 | 
						|
 
 | 
						|
// permette di leggere la distinta dal record passato    
 | 
						|
int TDistinta::read(const TRectype& rec)
 | 
						|
{ 
 | 
						|
  CHECK(rec.num() == LF_EFFETTI,"Can't read distinta from a different record type");
 | 
						|
  const char tipo = rec.get_char(EFF_TIPODIST);
 | 
						|
  const long numero = rec.get_long(EFF_NDIST);
 | 
						|
  return read(tipo,numero);//legge la distinta
 | 
						|
} 
 | 
						|
 | 
						|
// scrive la distinta
 | 
						|
int TDistinta::write(bool force, TToken_string* dati_dist)
 | 
						|
{ 
 | 
						|
  int err = NOERR;
 | 
						|
  const int elem = items(); //quanti effetti sono nella distinta (nell'array in memoria)
 | 
						|
  TLocalisamfile f(LF_EFFETTI);
 | 
						|
  for (int i=0; i<elem && err==NOERR; i++)
 | 
						|
  {
 | 
						|
    TEffetto& effetto = (TEffetto&)_righe_dist[i];
 | 
						|
    dati_dist->restart();// token string che contiene i dati da registrare sull'effetto 
 | 
						|
    effetto.put("TIPODIST", dati_dist->get());
 | 
						|
    effetto.put("NDIST", dati_dist->get_long());   
 | 
						|
    effetto.put("DATADIST", dati_dist->get()); 
 | 
						|
    effetto.put("CODABIP", dati_dist->get_long());
 | 
						|
    effetto.put("CODCABP", dati_dist->get_long());  
 | 
						|
    effetto.put("NRIGADIST", i+1);
 | 
						|
    err = effetto.rewrite(f);//riscrivo l'effetto con i dati della distinta a cui appartiene
 | 
						|
  }    
 | 
						|
  return err;  
 | 
						|
}
 | 
						|
 | 
						|
// rimuove la distinta (non si effettua la rimozione del record su file ma si elimina dal file il 
 | 
						|
// collegamento tra gli effetti e la distinta)
 | 
						|
int TDistinta::remove(char tipodist, long ndist)
 | 
						|
{
 | 
						|
  int err;
 | 
						|
  TLocalisamfile file(LF_EFFETTI);
 | 
						|
  // scandisco tutti gli effetti della distinta (nell'array),
 | 
						|
  // cancello i dati della distinta e riscrivo gli effetti
 | 
						|
  for (int i = 0; i < items(); i++)
 | 
						|
  { 
 | 
						|
    TEffetto& effetto = (TEffetto&)_righe_dist[i];
 | 
						|
    err = effetto.read(file, tipodist,ndist,i+1);
 | 
						|
    effetto.zero("TIPODIST");
 | 
						|
    effetto.zero("NDIST");
 | 
						|
    effetto.zero("DATADIST");
 | 
						|
    effetto.zero("NRIGADIST");
 | 
						|
    effetto.zero("CODABIP");
 | 
						|
    effetto.zero("CODCABP");
 | 
						|
    err = effetto.rewrite(file);
 | 
						|
  }
 | 
						|
  reset();//elimino gli effetti dalla memoria resettando l'array
 | 
						|
  return err;  
 | 
						|
}                        
 |