187 lines
4.3 KiB
C++
Executable File
187 lines
4.3 KiB
C++
Executable File
#include "effetti.h"
|
|
#include "reffetti.h"
|
|
#include "cession.h"
|
|
#include "ef0101.h"
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
//////// Riga Effetto
|
|
/////////////////////////////////////////////////////////////
|
|
TRiga_effetto::TRiga_effetto(TEffetto* eff)
|
|
: TRectype(LF_REFFETTI), _eff(eff)
|
|
{
|
|
}
|
|
|
|
TRiga_effetto::TRiga_effetto(const TRiga_effetto& rec, TEffetto* eff)
|
|
: TRectype(rec), _eff(eff)
|
|
{
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
////////// Effetto
|
|
/////////////////////////////////////////////////////////////
|
|
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::set_key(TRectype& rec, long numeff) const
|
|
{
|
|
CHECKD(numeff >= 0, "Numero effetto non valido ", numeff);
|
|
rec.put("NPROGTR",numeff);
|
|
}
|
|
|
|
void TEffetto::set_key4(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();
|
|
set_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(const TRectype& rec)
|
|
{
|
|
head() = rec;
|
|
TRectype *k_reff = new TRectype(LF_REFFETTI), *k_cess= new TRectype(LF_CESS);
|
|
const long nu = numero();
|
|
CHECK(nu > 0, "Numero effetto nullo.");
|
|
set_key(*k_reff, nu);
|
|
set_key(*k_cess, nu);
|
|
|
|
TLocalisamfile eff(LF_EFFETTI);
|
|
int err = TRectype::read(eff);
|
|
if (err == NOERR)
|
|
{
|
|
_righe.read(k_reff);
|
|
_cess.read(k_cess);
|
|
}
|
|
else
|
|
{
|
|
head() = rec;
|
|
destroy_rows_r();
|
|
destroy_rows_c();
|
|
_cess.set_key(k_cess);
|
|
_righe.set_key(k_reff);
|
|
}
|
|
return err;
|
|
}
|
|
|
|
int TEffetto::read(char tipodist, long ndist, long nrigadist)
|
|
{
|
|
TRectype rec(LF_EFFETTI);
|
|
set_key4(rec, tipodist,ndist, nrigadist);
|
|
return read(rec);
|
|
}
|
|
|
|
int TEffetto::write(bool force)
|
|
{
|
|
const bool nuovo = numero() <= 0; // E' nuovo di zecca!
|
|
if (nuovo && force) // quindi ...
|
|
force = FALSE; // ... non fare la rewrite
|
|
|
|
TLocalisamfile eff(LF_EFFETTI);
|
|
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;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|