Discriminazione apertura files indsped e cfven

git-svn-id: svn://10.65.10.50/trunk@196 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
angelo 1994-09-08 15:06:53 +00:00
parent a947a1c109
commit f114c65d04
2 changed files with 106 additions and 103 deletions

View File

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

View File

@ -4,32 +4,32 @@
class TClifoVI:public TRelation class TClifoVI:public TRelation
{ {
// @DPRIV // @DPRIV
TArray _indirizzi; TArray _indirizzi;
int _oldindirizzi; int _oldindirizzi;
// @END // @END
protected: protected:
// @FPROT // @FPROT
int write_rec(bool re, const TRectype& r, TLocalisamfile* f); int write_rec(bool re, const TRectype& r, TLocalisamfile* f);
int cancella(TLocalisamfile* f, int da, int a); int cancella(TLocalisamfile* f, int da, int a);
int registra(bool re, bool force); int registra(bool re, bool force);
int read_indirizzi(); int read_indirizzi();
// @END // @END
public: public:
virtual int next(TReclock lockop=_nolock) {return (lfile()->next(lockop) || read_indirizzi());} virtual int next(TReclock lockop=_nolock) {return (lfile()->next(lockop) || read_indirizzi());}
virtual int prev(TReclock lockop=_nolock) {return (lfile()->prev(lockop) || read_indirizzi());} virtual int prev(TReclock lockop=_nolock) {return (lfile()->prev(lockop) || read_indirizzi());}
virtual int first(TReclock lockop=_nolock) {return (lfile()->first(lockop) || read_indirizzi());} virtual int first(TReclock lockop=_nolock) {return (lfile()->first(lockop) || read_indirizzi());}
virtual int last(TReclock lockop=_nolock) {return (lfile()->last(lockop) || read_indirizzi());} virtual int last(TReclock lockop=_nolock) {return (lfile()->last(lockop) || read_indirizzi());}
virtual int skip(TReclock lockop=_nolock) {return (lfile()->skip(lockop) || read_indirizzi());} virtual int skip(TReclock lockop=_nolock) {return (lfile()->skip(lockop) || read_indirizzi());}
virtual int read(TIsamop = _isgteq, TReclock lockop = _nolock, TDate& atdate = (TDate&) botime); virtual int read(TIsamop = _isgteq, TReclock lockop = _nolock, TDate& atdate = (TDate&) botime);
virtual int write(bool force=TRUE, TDate& atdate = (TDate&) botime); virtual int write(bool force=TRUE, TDate& atdate = (TDate&) botime);
virtual int rewrite(bool force=TRUE, TDate& atdate = (TDate&) botime); virtual int rewrite(bool force=TRUE, TDate& atdate = (TDate&) botime);
virtual int remove(TDate& atdate = (TDate&) botime); virtual int remove(TDate& atdate = (TDate&) botime);
TRectype& indirizzo(int i); TRectype& indirizzo(int i);
int indirizzi_items() const {return _indirizzi.items();} int indirizzi_items() const {return _indirizzi.items();}
void destroy_rows(); void destroy_rows();
TClifoVI(); TClifoVI();
virtual ~TClifoVI() {} virtual ~TClifoVI() {}
}; };