87 lines
2.7 KiB
C++
Executable File
87 lines
2.7 KiB
C++
Executable File
#include "effetti.h"
|
|
#include "reffetti.h"
|
|
#include "cession.h"
|
|
#include "ef0301.h"
|
|
|
|
// costruttore di default
|
|
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 il 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();
|
|
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
|
|
int TDistinta::remove(char tipodist, long ndist)
|
|
{
|
|
int err;
|
|
//elimino dal file il collegamento tra gli effetti e la distinta
|
|
TLocalisamfile file(LF_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
|
|
return err;
|
|
}
|