campo-sirio/cg/cg0201.cpp
angelo 0ffb982941 Tolta l'inutile disabilitazione dei campi, l'autorizzazione dei moduli
ft e sp; sistemate funzioni di init_..._mode. Corretto costruttore di
TClifoVI.


git-svn-id: svn://10.65.10.50/trunk@201 c028cbd2-c16b-5b4b-a496-9718f37d4682
1994-09-09 08:37:55 +00:00

148 lines
3.0 KiB
C++
Executable File

#include "cg0201.h"
#include <lffiles.h>
extern bool gest_vend();
// Definizione dei metodi relativi alla classe TClifoVI
TClifoVI::TClifoVI():TRelation(LF_CLIFO), _oldindirizzi(0)
{
add(LF_CFVEN,"TIPOCF=TIPOCF|CODCF=CODCF");
add(LF_INDSP,"TIPOCF=TIPOCF|CODCF=CODCF");
}
void TClifoVI::destroy_rows()
{
_indirizzi.destroy();
}
TRectype& TClifoVI::indirizzo(int i)
{
TRectype *r=(TRectype*)_indirizzi.objptr(i);
if (r == NULL)
{
r = new TRectype(LF_INDSP);
_indirizzi.add(r,i);
}
return *r;
}
int TClifoVI::read_indirizzi()
{
const TLocalisamfile* rind = lfile(LF_INDSP);
// Put here gest_vend() discrimination
if (gest_vend())
{
position_rels();
destroy_rows();
for (bool ok=is_first_match(LF_INDSP); ok; ok=next_match(LF_INDSP))
{
const int nriga=rind->get_int("CODIND") -1;
indirizzo(nriga)=rind->curr();
}
}
_oldindirizzi=indirizzi_items();
return NOERR;
}
int TClifoVI::read(TIsamop op, TReclock lockop, TDate& atdate)
{
int err=file()->read(op,lockop,atdate);
if (err==NOERR) read_indirizzi();
return err;
}
int TClifoVI::write_rec(bool re, const TRectype& rec, TLocalisamfile* f)
{
if (re)
{
const bool scrivi= (f->rewrite(rec)!=NOERR);
if (scrivi) f->write(rec);
} else
f->write(rec);
return f->status();
}
int TClifoVI::cancella(TLocalisamfile* f, int da, int a)
{
const char tipocf=lfile()->get("TIPOCF")[0];
const long codcf=lfile()->get_long("CODCF");
for (int i=da; i<=a;i++)
{
f->zero();
f->put("TIPOCF",tipocf);
f->put("CODCF",codcf);
f->put("CODIND",i);
if (f->read(_isequal,_lock)==NOERR)
f->remove();
}
return f->status();
}
int TClifoVI::registra(bool re, bool force)
{
TLocalisamfile* c=lfile(LF_CLIFO);
int err=write_rec(re,c->curr(),c);
if (err!=NOERR) return err;
// Put here gest_vend() discrimination
if (gest_vend())
{
TLocalisamfile* v=lfile(LF_CFVEN);
err=write_rec(TRUE,v->curr(),v);
if (err!=NOERR) return err;
TLocalisamfile* rind=lfile(LF_INDSP);
const char tipocf=c->get("TIPOCF")[0];
const long codcf=c->get_long("CODCF");
for (int i=0; i<indirizzi_items(); i++)
{
if (!re)
{
indirizzo(i).put("TIPOCF",tipocf);
indirizzo(i).put("CODCF",codcf);
}
err=write_rec(TRUE,indirizzo(i),rind);
}
if (i<_oldindirizzi)
cancella(rind,i+1,_oldindirizzi);
_oldindirizzi=indirizzi_items();
}
// END of gest_vend() discrimination
return err;
}
int TClifoVI::write(bool force, TDate&)
{
_oldindirizzi=0;
return registra(FALSE,force);
}
int TClifoVI::rewrite(bool force, TDate&)
{
return registra(TRUE,force);
}
int TClifoVI::remove(TDate&)
{
TLocalisamfile* c=lfile(LF_CLIFO);
c->remove();
// Put here gest_vend() discrimination
if (gest_vend())
{
TLocalisamfile* v=lfile(LF_CFVEN);
TLocalisamfile* rind=lfile(LF_INDSP);
cancella(rind,1,_oldindirizzi);
v->remove();
}
_oldindirizzi=0;
return c->status();
}