1996-12-06 15:50:15 +00:00
|
|
|
#include "ef0301.h"
|
1996-11-14 17:40:05 +00:00
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
///////////////////////////////////////////////////
|
1997-02-12 09:15:50 +00:00
|
|
|
// Definizione dei metodi della classe TDistinta //
|
1997-02-18 15:10:08 +00:00
|
|
|
///////////////////////////////////////////////////
|
1996-12-06 15:50:15 +00:00
|
|
|
|
|
|
|
// costruttore distinta utilizzando il record passato
|
1997-05-31 13:26:38 +00:00
|
|
|
TDistinta::TDistinta(const TRectype& rec, word lockop)
|
1996-11-14 17:40:05 +00:00
|
|
|
{
|
1999-05-24 13:34:11 +00:00
|
|
|
read(rec,lockop);
|
1996-11-14 17:40:05 +00:00
|
|
|
}
|
|
|
|
|
1996-11-27 14:11:39 +00:00
|
|
|
// costruisce la distinta del tipo e numero passati
|
1997-05-31 13:26:38 +00:00
|
|
|
TDistinta::TDistinta(const char tipo, const long numero, word lockop)
|
1996-11-14 17:40:05 +00:00
|
|
|
{
|
2000-05-05 15:25:49 +00:00
|
|
|
read(tipo,numero,lockop);
|
1997-05-31 13:26:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TDistinta::~TDistinta()
|
|
|
|
{
|
|
|
|
TLocalisamfile f(LF_EFFETTI);
|
|
|
|
if (_righe_dist.items() > 0) // Se ha letto elementi sblocca eventualmente la prima riga
|
|
|
|
f.read((TRectype&)_righe_dist[0], _isequal,_unlock);
|
1996-11-14 17:40:05 +00:00
|
|
|
}
|
|
|
|
|
1996-11-27 14:11:39 +00:00
|
|
|
// permette di leggere la distinta del tipo e numero passati
|
1997-05-31 13:26:38 +00:00
|
|
|
int TDistinta::read(const char tipo, const long numero, word lockop)
|
1996-11-14 17:40:05 +00:00
|
|
|
{
|
1999-06-18 15:35:05 +00:00
|
|
|
int err = _iskeynotfound;
|
1999-04-06 15:34:39 +00:00
|
|
|
TLocalisamfile f(LF_EFFETTI); f.setkey(4);
|
1997-05-31 13:26:38 +00:00
|
|
|
if (_righe_dist.items() > 0) // Se ha letto una distinta precedente, sblocca la prima riga
|
|
|
|
{
|
|
|
|
f.read((TRectype&)_righe_dist[0],_isequal,_unlock);
|
|
|
|
_righe_dist.destroy(); // Rimuove tutte le righe precedenti
|
|
|
|
}
|
1999-06-18 15:35:05 +00:00
|
|
|
if (tipo >= ' ' && numero > 0)
|
1996-11-14 17:40:05 +00:00
|
|
|
{
|
1999-06-18 15:35:05 +00:00
|
|
|
err = NOERR;
|
2000-05-05 15:25:49 +00:00
|
|
|
for (int i = 1; err == NOERR ; i++)
|
1999-06-18 15:35:05 +00:00
|
|
|
{
|
|
|
|
TEffetto* effetto = new TEffetto;
|
2000-05-05 15:25:49 +00:00
|
|
|
word lock = (i == 1 && lockop == _lock) ? _lock : _nolock; // Lock solo sulla prima riga
|
|
|
|
err = effetto->read(f, tipo, numero, i, lock);//legge un effetto per chiave 4
|
1999-06-18 15:35:05 +00:00
|
|
|
if (err == NOERR)
|
|
|
|
_righe_dist.add(effetto);
|
2000-05-05 15:25:49 +00:00
|
|
|
else
|
|
|
|
delete effetto;
|
1999-06-18 15:35:05 +00:00
|
|
|
}
|
|
|
|
}
|
1997-02-18 15:10:08 +00:00
|
|
|
// se ho letto degli effetti della distinta ed ho
|
|
|
|
// trovato la fine file elimino l'errore
|
|
|
|
if ((_righe_dist.items()>0)||(err == _iseof) )
|
|
|
|
err = NOERR;
|
1996-11-14 17:40:05 +00:00
|
|
|
return err;
|
|
|
|
}
|
1996-11-27 14:11:39 +00:00
|
|
|
|
1996-12-06 15:50:15 +00:00
|
|
|
// permette di leggere la distinta dal record passato
|
1997-05-31 13:26:38 +00:00
|
|
|
int TDistinta::read(const TRectype& rec, word lockop)
|
1996-11-14 17:40:05 +00:00
|
|
|
{
|
|
|
|
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);
|
1997-05-31 13:26:38 +00:00
|
|
|
return read(tipo,numero,lockop);//legge la distinta
|
1996-11-14 17:40:05 +00:00
|
|
|
}
|
|
|
|
|
1996-11-27 14:11:39 +00:00
|
|
|
// scrive la distinta
|
1996-11-14 17:40:05 +00:00
|
|
|
int TDistinta::write(bool force, TToken_string* dati_dist)
|
|
|
|
{
|
|
|
|
int err = NOERR;
|
1997-02-18 15:10:08 +00:00
|
|
|
//quanti effetti sono nella distinta (nell'array in memoria)
|
|
|
|
const int elem = items();
|
1999-04-06 15:34:39 +00:00
|
|
|
TLocalisamfile f(LF_EFFETTI); f.setkey(4);
|
|
|
|
|
1996-11-14 17:40:05 +00:00
|
|
|
for (int i=0; i<elem && err==NOERR; i++)
|
|
|
|
{
|
1999-04-06 15:34:39 +00:00
|
|
|
TEffetto& effetto = eff(i);
|
1997-02-18 15:10:08 +00:00
|
|
|
// token string che contiene i dati da registrare sull'effetto
|
1997-05-31 13:26:38 +00:00
|
|
|
if (dati_dist)
|
|
|
|
{
|
|
|
|
dati_dist->restart();
|
|
|
|
effetto.put(EFF_TIPODIST, dati_dist->get());
|
1999-04-06 15:34:39 +00:00
|
|
|
effetto.put(EFF_NDIST, dati_dist->get());
|
1997-05-31 13:26:38 +00:00
|
|
|
effetto.put(EFF_DATADIST, dati_dist->get());
|
1999-04-06 15:34:39 +00:00
|
|
|
effetto.put(EFF_CODABIP, dati_dist->get());
|
|
|
|
effetto.put(EFF_CODCABP, dati_dist->get());
|
1999-06-18 15:35:05 +00:00
|
|
|
|
1997-05-31 13:26:38 +00:00
|
|
|
effetto.put(EFF_NRIGADIST, i+1);
|
|
|
|
}
|
1997-02-18 15:10:08 +00:00
|
|
|
//riscrivo l'effetto con i dati della distinta a cui appartiene
|
|
|
|
err = effetto.rewrite(f);
|
1996-11-14 17:40:05 +00:00
|
|
|
}
|
1999-04-06 15:34:39 +00:00
|
|
|
|
|
|
|
if (dati_dist)
|
|
|
|
{
|
|
|
|
f.setkey(4);
|
|
|
|
f.put(EFF_TIPODIST, dati_dist->get(0));
|
|
|
|
f.put(EFF_NDIST, dati_dist->get());
|
|
|
|
|
|
|
|
int i = elem;
|
|
|
|
f.put(EFF_NRIGADIST, ++i);
|
|
|
|
for (int e = f.read(); e == NOERR; e = f.read())
|
|
|
|
{
|
2000-05-05 15:25:49 +00:00
|
|
|
e = f.remove();
|
1999-04-06 15:34:39 +00:00
|
|
|
f.put(EFF_NRIGADIST, ++i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1996-11-14 17:40:05 +00:00
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
1997-02-18 15:10:08 +00:00
|
|
|
// 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)
|
1996-11-14 17:40:05 +00:00
|
|
|
int TDistinta::remove(char tipodist, long ndist)
|
|
|
|
{
|
1996-11-22 17:17:26 +00:00
|
|
|
int err;
|
|
|
|
TLocalisamfile file(LF_EFFETTI);
|
1996-12-06 15:50:15 +00:00
|
|
|
// scandisco tutti gli effetti della distinta (nell'array),
|
|
|
|
// cancello i dati della distinta e riscrivo gli effetti
|
1996-11-22 17:17:26 +00:00
|
|
|
for (int i = 0; i < items(); i++)
|
1996-11-14 17:40:05 +00:00
|
|
|
{
|
1996-11-22 17:17:26 +00:00
|
|
|
TEffetto& effetto = (TEffetto&)_righe_dist[i];
|
|
|
|
err = effetto.read(file, tipodist,ndist,i+1);
|
1997-02-12 09:15:50 +00:00
|
|
|
effetto.zero(EFF_TIPODIST);
|
|
|
|
effetto.zero(EFF_NDIST);
|
|
|
|
effetto.zero(EFF_DATADIST);
|
|
|
|
effetto.zero(EFF_NRIGADIST);
|
|
|
|
effetto.zero(EFF_CODABIP);
|
|
|
|
effetto.zero(EFF_CODCABP);
|
1996-11-22 17:17:26 +00:00
|
|
|
err = effetto.rewrite(file);
|
1996-11-14 17:40:05 +00:00
|
|
|
}
|
1996-12-06 15:50:15 +00:00
|
|
|
reset();//elimino gli effetti dalla memoria resettando l'array
|
1996-11-14 17:40:05 +00:00
|
|
|
return err;
|
|
|
|
}
|