#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; irestart();// 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; }