campo-sirio/ef/ef0101.cpp
paola 4a5b550d9b modificato l'oggetto effetto per l'utilizzo nell'oggetto distinta
git-svn-id: svn://10.65.10.50/trunk@3898 c028cbd2-c16b-5b4b-a496-9718f37d4682
1996-11-14 17:36:49 +00:00

186 lines
4.1 KiB
C++
Executable File

#include "effetti.h"
#include "reffetti.h"
#include "cession.h"
#include "ef0101.h"
TEffetto::TEffetto()
: TRectype(LF_EFFETTI), _righe(LF_REFFETTI, "NRIGATR"), _cess(LF_CESS, "NRIGA")
{
}
TEffetto::TEffetto(TRectype& rec)
: TRectype(LF_EFFETTI), _righe(LF_REFFETTI, "NRIGATR"), _cess(LF_CESS, "NRIGA")
{
read(rec);
}
void TEffetto::put_key(TRectype& rec, long numeff) const
{
CHECKD(numeff >= 0, "Numero effetto non valido ", numeff);
rec.put("NPROGTR",numeff);
}
void TEffetto::put_key(TRectype& rec,char tipodist, long ndist, long nrigadist)
{
CHECK(tipodist == 'I' || tipodist == 'S' || tipodist == 'B', "Tipo distinta");
CHECKD(ndist >= 0, "Numero distinta non valido ", ndist);
CHECKD(nrigadist >= 0, "Numero riga distinta non valido ", nrigadist);
rec.put("TIPODIST", tipodist);
rec.put("NDIST", ndist);
rec.put("NRIGADIST", nrigadist);
}
long TEffetto::get_next_key(const long codcf) const
{
static long n = 0;
if (n == 0)
{
TLocalisamfile eff(LF_EFFETTI);
TRectype& curr = eff.curr();
put_key(curr, 9999999L);
const int err = eff.read(_isgreat);
if (err != _isemptyfile)
{
if (err == NOERR)
eff.prev();
if (curr.get_long("CODCF")==codcf)
n = curr.get_long("NPROGTR");
}
}
n++;
return n;
}
long TEffetto::renum(long numeff)
{
if (numeff <= 0)
{
long codcf = codicec();
numeff = get_next_key(codcf);
}
char num[7]; sprintf(num, "%ld", numeff);
renum_key("NPROGTR", num); // aggiorna testata
_righe.renum_key("NPROGTR", num); // aggiorna righe ok
_cess.renum_key("NPROGTR", num); // aggiorna cessionari ok
return numeff;
}
int TEffetto::read(TLocalisamfile &f, const TRectype& r)
{
int err = TRectype::read(f);
const long nu = numero();
TRectype *k_reff = new TRectype(LF_REFFETTI),
*k_cess = new TRectype(LF_CESS);
put_key(*k_reff, nu);
put_key(*k_cess, nu);
if (err == NOERR)
{
_righe.read(k_reff);
_cess.read(k_cess);
}
else
{
head() = r;
const long nu = numero();
put_key(*k_reff, nu);
put_key(*k_cess, nu);
if (nu !=0)
{
destroy_rows_r();
destroy_rows_c();
_cess.set_key(k_cess);
_righe.set_key(k_reff);
}
}
return err;
}
int TEffetto::read(const TRectype& rec)
{
TLocalisamfile eff(LF_EFFETTI);
head() = rec;
return read(eff, rec);
}
int TEffetto::read(char tipodist, long ndist, long nrigadist)
{
TLocalisamfile eff(LF_EFFETTI);
eff.setkey(4);
TRectype rec(LF_EFFETTI);
put_key(rec, tipodist,ndist, nrigadist);
head() = rec;
int err = read(eff, rec);
return err;
}
int TEffetto::write(bool force)
{
const bool nuovo = numero() <= 0; // E' nuovo!
if (nuovo && force) // quindi ...
force = FALSE; // ... non fare la rewrite
TLocalisamfile eff(LF_EFFETTI);
eff.setkey(1);
int err = NOERR;
if (force)
{
if ((err=_righe.write(force)) == NOERR) err= _cess.write(force);
if (err == NOERR)
{
err = TRectype::rewrite(eff);
if (err != NOERR)
err = TRectype::write(eff);
}
}
else
{
if (nuovo)
{
TEffetto& myself = *(TEffetto*)this;
if (numero() <= 0)
myself.renum();
do
{
err = TRectype::write(eff);
if (err == _isreinsert)
myself.renum();
} while (err == _isreinsert);
}
else
{
err = TRectype::write(eff);
if (err != NOERR)
err = TRectype::rewrite(eff);
}
if (err == NOERR)
if ((err=_righe.write(force)) == NOERR) err= _cess.write(force);
}
return err;
}
int TEffetto::remove()const
{
TLocalisamfile eff(LF_EFFETTI);
int err;
if ((err=_righe.remove()) == NOERR) err= _cess.remove();
if (err == NOERR)
err = TRectype::remove(eff);
return err;
}