Corretto numero riga distinta

git-svn-id: svn://10.65.10.50/trunk@4482 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1997-06-02 09:16:17 +00:00
parent 3b319547c8
commit ddb6256d91
3 changed files with 119 additions and 119 deletions

View File

@ -1,21 +1,21 @@
#include "ef0101.h" #include "ef0101.h"
////////////////////////////////////////////////// //////////////////////////////////////////////////
// Definizione dei metodi della classe TEffetto // // Definizione dei metodi della classe TEffetto //
////////////////////////////////////////////////// //////////////////////////////////////////////////
// costruttore di default // costruttore di default
TEffetto::TEffetto() TEffetto::TEffetto()
: TRectype(LF_EFFETTI), _righe(LF_REFFETTI, REFF_NRIGATR), _cess(LF_CESS, CES_NRIGA) : TRectype(LF_EFFETTI), _righe(LF_REFFETTI, REFF_NRIGATR), _cess(LF_CESS, CES_NRIGA)
{ {
} }
// costuisce l'effetto con il record passato // costuisce l'effetto con il record passato
TEffetto::TEffetto(TRectype& rec) TEffetto::TEffetto(TRectype& rec)
: TRectype(LF_EFFETTI), _righe(LF_REFFETTI, REFF_NRIGATR), _cess(LF_CESS, CES_NRIGA) : TRectype(LF_EFFETTI), _righe(LF_REFFETTI, REFF_NRIGATR), _cess(LF_CESS, CES_NRIGA)
{ {
TLocalisamfile f(LF_EFFETTI); TLocalisamfile f(LF_EFFETTI);
read(f,rec); read(f,rec);
} }
TEffetto::TEffetto(const TEffetto& eff) TEffetto::TEffetto(const TEffetto& eff)
@ -23,33 +23,33 @@ TEffetto::TEffetto(const TEffetto& eff)
{ {
} }
TObject* TEffetto::dup() const TObject* TEffetto::dup() const
{ {
TEffetto* e = new TEffetto((const TEffetto&)*this); TEffetto* e = new TEffetto((const TEffetto&)*this);
return e; return e;
} }
// setta i campi per la prima chiave (nprogtr) // setta i campi per la prima chiave (nprogtr)
void TEffetto::put_key(TRectype& rec, long numeff) const void TEffetto::put_key(TRectype& rec, long numeff) const
{ {
CHECKD(numeff >= 0, "Numero effetto non valido ", numeff); CHECKD(numeff >= 0, "Numero effetto non valido ", numeff);
rec.put(EFF_NPROGTR, numeff); rec.put(EFF_NPROGTR, numeff);
} }
// setta i campi per la quarta chiave (tipodist+ndist+nrigadist) // setta i campi per la quarta chiave (tipodist+ndist+nrigadist)
void TEffetto::put_key(TRectype& rec,char tipodist, long ndist, long nrigadist) void TEffetto::put_key(TRectype& rec,char tipodist, long ndist, int nrigadist)
{ {
CHECK(tipodist == 'I' || tipodist == 'S' || tipodist == 'B' || tipodist == 0, "Tipo distinta"); CHECK(tipodist == 'I' || tipodist == 'S' || tipodist == 'B' || tipodist == 0, "Tipo distinta");
CHECKD(ndist >= 0, "Numero distinta non valido ", ndist); CHECKD(ndist >= 0, "Numero distinta non valido ", ndist);
CHECKD(nrigadist >= 0, "Numero riga distinta non valido ", nrigadist); CHECKD(nrigadist >= 0, "Numero riga distinta non valido ", nrigadist);
rec.put(EFF_TIPODIST, tipodist); rec.put(EFF_TIPODIST, tipodist);
rec.put(EFF_NDIST, ndist); rec.put(EFF_NDIST, ndist);
rec.put(EFF_NRIGADIST, nrigadist); rec.put(EFF_NRIGADIST, nrigadist);
} }
// ritorna la prossima chiave utilizzabile // ritorna la prossima chiave utilizzabile
long TEffetto::get_next_key(const long codcf) const long TEffetto::get_next_key(const long codcf) const
{ {
static long n = 0; static long n = 0;
if (n == 0) if (n == 0)
{ {
@ -63,20 +63,20 @@ long TEffetto::get_next_key(const long codcf) const
eff.prev(); eff.prev();
if (curr.get_long(EFF_CODCF) == codcf) if (curr.get_long(EFF_CODCF) == codcf)
n = curr.get_long(EFF_NPROGTR); n = curr.get_long(EFF_NPROGTR);
} }
} }
n++; n++;
return n; return n;
} }
// rinumera la chiave 1 (nprogtr) // rinumera la chiave 1 (nprogtr)
long TEffetto::renum(long numeff) long TEffetto::renum(long numeff)
{ {
if (numeff <= 0) if (numeff <= 0)
{ {
long codcf = codicec(); long codcf = codicec();
numeff = get_next_key(codcf); numeff = get_next_key(codcf);
} }
char num[7]; sprintf(num, "%ld", numeff); char num[7]; sprintf(num, "%ld", numeff);
renum_key(EFF_NPROGTR, num); // aggiorna testata renum_key(EFF_NPROGTR, num); // aggiorna testata
_righe.renum_key(EFF_NPROGTR, num); // aggiorna righe ok _righe.renum_key(EFF_NPROGTR, num); // aggiorna righe ok
@ -86,87 +86,87 @@ long TEffetto::renum(long numeff)
// restituisce il prossimo effetto // restituisce il prossimo effetto
int TEffetto::next(TBaseisamfile& f) int TEffetto::next(TBaseisamfile& f)
{ {
const int err = f.next(); const int err = f.next();
*this = f.curr(); *this = f.curr();
return err; return err;
} }
// permette di leggere il record passato nel file passato, comune alla // permette di leggere il record passato nel file passato, comune alla
// lettura per chiave 1 e per chiave 4 // lettura per chiave 1 e per chiave 4
int TEffetto::leggi(TLocalisamfile &f, const TRectype& r, word lockop) int TEffetto::leggi(TLocalisamfile &f, const TRectype& r, word lockop)
{ {
//int err = TRectype::read(f); //int err = TRectype::read(f);
int err = f.read(*this, _isequal, lockop); int err = f.read(*this, _isequal, lockop);
const long nu = numero(); const long nu = numero();
// necessari per poter andare a leggere i due record array // necessari per poter andare a leggere i due record array
// cessionari e righe effetto // cessionari e righe effetto
TRectype *k_reff = new TRectype(LF_REFFETTI), TRectype *k_reff = new TRectype(LF_REFFETTI),
*k_cess = new TRectype(LF_CESS); *k_cess = new TRectype(LF_CESS);
// setto la chiave per poter leggere dai due record array // setto la chiave per poter leggere dai due record array
put_key(*k_reff, nu); put_key(*k_reff, nu);
put_key(*k_cess, nu); put_key(*k_cess, nu);
if (err == NOERR) if (err == NOERR)
{ // leggo dai record array { // leggo dai record array
_righe.read(k_reff); _righe.read(k_reff);
_cess.read(k_cess); _cess.read(k_cess);
} }
else // se ho trovato un errore else // se ho trovato un errore
{ {
head() = r; head() = r;
const long nu = numero(); const long nu = numero();
put_key(*k_reff, nu); put_key(*k_reff, nu);
put_key(*k_cess, nu); put_key(*k_cess, nu);
if (nu !=0) if (nu !=0)
{ {
destroy_rows_r(); destroy_rows_r();
destroy_rows_c(); destroy_rows_c();
_cess.set_key(k_cess); _cess.set_key(k_cess);
_righe.set_key(k_reff); _righe.set_key(k_reff);
} }
} }
return err; return err;
} }
// legge il record passato, con chiave 1 // legge il record passato, con chiave 1
int TEffetto::read(TLocalisamfile& f, const TRectype& rec, word lockop) int TEffetto::read(TLocalisamfile& f, const TRectype& rec, word lockop)
{ {
head() = rec; head() = rec;
return leggi(f, rec, lockop); return leggi(f, rec, lockop);
} }
// legge l'effetto usando la chiave 4 // legge l'effetto usando la chiave 4
int TEffetto::read(TLocalisamfile& f, char tipodist, long ndist, long nrigadist, word lockop) int TEffetto::read(TLocalisamfile& f, char tipodist, long ndist, int nrigadist)
{ {
f.setkey(4); f.setkey(4);
TRectype rec(LF_EFFETTI); TRectype rec(LF_EFFETTI);
put_key(rec, tipodist, ndist, nrigadist); put_key(rec, tipodist, ndist, nrigadist);
head() = rec; head() = rec;
return leggi(f, rec, lockop); return leggi(f, rec, lockop);
} }
// scrive l'effetto, usando la chiave 1 // scrive l'effetto, usando la chiave 1
int TEffetto::write(TLocalisamfile& f, bool force) int TEffetto::write(TLocalisamfile& f, bool force)
{ {
const bool nuovo = numero() <= 0; // E' nuovo! const bool nuovo = numero() <= 0; // E' nuovo!
if (nuovo && force) // quindi ... if (nuovo && force) // quindi ...
force = FALSE; // ... non fare la rewrite force = FALSE; // ... non fare la rewrite
f.setkey(1); f.setkey(1);
int err = NOERR; int err = NOERR;
if (force) if (force)
{ {
if ((err=_righe.write(force)) == NOERR) err= _cess.write(force); if ((err=_righe.write(force)) == NOERR) err= _cess.write(force);
if (err == NOERR) if (err == NOERR)
{ {
err = TRectype::rewrite(f); err = TRectype::rewrite(f);
if (err != NOERR) if (err != NOERR)
err = TRectype::write(f); err = TRectype::write(f);
} }
} }
else else
{ {
if (nuovo) if (nuovo)
{ {
TEffetto& myself = *(TEffetto*)this; TEffetto& myself = *(TEffetto*)this;
if (numero() <= 0) if (numero() <= 0)
myself.renum(); myself.renum();
@ -177,60 +177,60 @@ int TEffetto::write(TLocalisamfile& f, bool force)
myself.renum(); myself.renum();
} while (err == _isreinsert); } while (err == _isreinsert);
} }
else else
{ {
err = TRectype::write(f); err = TRectype::write(f);
if (err != NOERR) if (err != NOERR)
err = TRectype::rewrite(f); err = TRectype::rewrite(f);
} }
if (err == NOERR) if (err == NOERR)
if ((err=_righe.write(force)) == NOERR) err= _cess.write(force); if ((err=_righe.write(force)) == NOERR) err= _cess.write(force);
} }
return err; return err;
} }
// rimuove l'effetto // rimuove l'effetto
int TEffetto::remove(TLocalisamfile& f)const int TEffetto::remove(TLocalisamfile& f)const
{ {
int err; int err;
if ((err=_righe.remove()) == NOERR) err= _cess.remove(); if ((err=_righe.remove()) == NOERR) err= _cess.remove();
if (err == NOERR) if (err == NOERR)
err = TRectype::remove(f); err = TRectype::remove(f);
return err; return err;
} }
// restituisce true se l'effetto si riferisce ad una sola fattura // restituisce true se l'effetto si riferisce ad una sola fattura
// ovvero se l'effetto non è raggruppato // ovvero se l'effetto non è raggruppato
bool TEffetto::fatt(long num) bool TEffetto::fatt(long num)
{ {
TLocalisamfile righe_eff(LF_REFFETTI); TLocalisamfile righe_eff(LF_REFFETTI);
righe_eff.put(REFF_NPROGTR, num); righe_eff.put(REFF_NPROGTR, num);
righe_eff.read(); righe_eff.read();
// prende il numero delle righe dell'effetto // prende il numero delle righe dell'effetto
// ovvero di fatture a cui fa riferimento // ovvero di fatture a cui fa riferimento
int items = rows_r(); int items = rows_r();
bool condition = (items == 1); bool condition = (items == 1);
return condition; return condition;
} }
// restituisce i dati relativi alle fatture a cui si riferisce l'effetto // restituisce i dati relativi alle fatture a cui si riferisce l'effetto
// costruendo una TToken_string del tipo // costruendo una TToken_string del tipo
// "num_fatt0|data_fatt0|imp_fatt0|num_fatt1|data_fatt1|imp_fatt1|..." // "num_fatt0|data_fatt0|imp_fatt0|num_fatt1|data_fatt1|imp_fatt1|..."
TToken_string* TEffetto::dati_fatt(long num) TToken_string* TEffetto::dati_fatt(long num)
{ {
TToken_string* dati= new TToken_string; TToken_string* dati= new TToken_string;
dati->cut(0); dati->cut(0);
TLocalisamfile righe_eff(LF_REFFETTI); TLocalisamfile righe_eff(LF_REFFETTI);
righe_eff.put(REFF_NPROGTR, num); righe_eff.put(REFF_NPROGTR, num);
righe_eff.read(); righe_eff.read();
int items = rows_r(); // prende il numero delle righe dell'effetto int items = rows_r(); // prende il numero delle righe dell'effetto
for (int i = 1; i <= items; i++)// le legge tutte for (int i = 1; i <= items; i++)// le legge tutte
{ {
dati->add(righe_eff.get(REFF_NFATT));//prende il numero dati->add(righe_eff.get(REFF_NFATT));//prende il numero
dati->add(righe_eff.get(REFF_DATAFATT));//prende la data dati->add(righe_eff.get(REFF_DATAFATT));//prende la data
dati->add(righe_eff.get(REFF_IMPFATT));//prende l' importo dati->add(righe_eff.get(REFF_IMPFATT));//prende l' importo
righe_eff.next();// passa alla riga successiva righe_eff.next();// passa alla riga successiva
} }
return dati; return dati;
} }

View File

@ -6,7 +6,7 @@
#endif #endif
#ifndef __RECTYPES_H #ifndef __RECTYPES_H
#include <rectypes.h> #include <rectypes.h>
#endif #endif
#ifndef __RECARRAY_H #ifndef __RECARRAY_H
#include <recarray.h> #include <recarray.h>
#endif #endif
@ -15,88 +15,88 @@
#include <cession.h> #include <cession.h>
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// Definizione dell'oggetto Effetto con la classe TEffetto// // Definizione dell'oggetto Effetto con la classe TEffetto//
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
class TEffetto:public TRectype class TEffetto:public TRectype
{ {
TRecord_array _righe;// righe dell'effetto TRecord_array _righe;// righe dell'effetto
TRecord_array _cess;// cessionari dell'effetto TRecord_array _cess;// cessionari dell'effetto
protected: protected:
// ritorna la prossima chiave // ritorna la prossima chiave
long get_next_key(const long codcf) const; long get_next_key(const long codcf) const;
// permette di leggere il record passato nel file passato // permette di leggere il record passato nel file passato
int leggi(TLocalisamfile& f, const TRectype& rec, word lockop = _nolock); int leggi(TLocalisamfile& f, const TRectype& rec, word lockop = _nolock);
public: public:
// Duplica l'effetto // Duplica l'effetto
virtual TObject* dup() const; virtual TObject* dup() const;
// rinumera la chiave 1 // rinumera la chiave 1
long renum(long numeff = 0); long renum(long numeff = 0);
// ritorna un riferimento alla testata dell'effetto // ritorna un riferimento alla testata dell'effetto
const TRectype& head() const { return *this; } const TRectype& head() const { return *this; }
// ritorna un riferimento alla testata dell'effetto // ritorna un riferimento alla testata dell'effetto
TRectype& head() { return *this; } TRectype& head() { return *this; }
// ritorna un riferimento alle righe dell'effetto // ritorna un riferimento alle righe dell'effetto
TRecord_array& righe() {return _righe;} TRecord_array& righe() {return _righe;}
// ritorna un riferimento ai cessionari dell'effetto // ritorna un riferimento ai cessionari dell'effetto
TRecord_array& cess() {return _cess;} TRecord_array& cess() {return _cess;}
// ritorna la riga i_esima dei cessionari // ritorna la riga i_esima dei cessionari
TRectype& row_c(int i, bool create=FALSE) { return _cess.row(i,create); } TRectype& row_c(int i, bool create=FALSE) { return _cess.row(i,create); }
// ritorna la riga i delle righe // ritorna la riga i delle righe
TRectype& row_r(int i, bool create=FALSE) { return _righe.row(i,create); } TRectype& row_r(int i, bool create=FALSE) { return _righe.row(i,create); }
// ritorna il numero delle righe presenti nelle righe effetto // ritorna il numero delle righe presenti nelle righe effetto
int rows_r() const { return _righe.rows(); } int rows_r() const { return _righe.rows(); }
// ritorna il numero delle righe presenti nei cessionari // ritorna il numero delle righe presenti nei cessionari
int rows_c() const { return _cess.rows(); } int rows_c() const { return _cess.rows(); }
// elimina l'elemento riga nella posizione n nelle righe effetto // elimina l'elemento riga nella posizione n nelle righe effetto
bool destroy_row_r(int n, bool pack = FALSE) { return _righe.destroy_row(n, pack); } bool destroy_row_r(int n, bool pack = FALSE) { return _righe.destroy_row(n, pack); }
// elimina tutti gli elementi riga nelle righe effetto // elimina tutti gli elementi riga nelle righe effetto
void destroy_rows_r() { _righe.destroy_rows(); } void destroy_rows_r() { _righe.destroy_rows(); }
// elimina l'elemento riga nella posizione n nei cessionari // elimina l'elemento riga nella posizione n nei cessionari
bool destroy_row_c(int n, bool pack = FALSE) { return _cess.destroy_row(n, pack); } bool destroy_row_c(int n, bool pack = FALSE) { return _cess.destroy_row(n, pack); }
// elimina tutti gli elementi riga nei cessionari // elimina tutti gli elementi riga nei cessionari
void destroy_rows_c() { _cess.destroy_rows(); } void destroy_rows_c() { _cess.destroy_rows(); }
// restituisce il prossimo effetto // restituisce il prossimo effetto
int next(TBaseisamfile& f); int next(TBaseisamfile& f);
// legge il record passato, con chiave 1 // legge il record passato, con chiave 1
int read(TLocalisamfile& f, const TRectype& rec, word lockop = _nolock); int read(TLocalisamfile& f, const TRectype& rec, word lockop = _nolock);
// legge il record passato, con chiave 4 // legge il record passato, con chiave 4
int read(TLocalisamfile& f, char tipodist, long ndist, long nrigadist, word lockop = _nolock); int read(TLocalisamfile& f, char tipodist, long ndist, int nrigadist);
// scrive l'effetto, sempre usando la chiave 1 // scrive l'effetto, sempre usando la chiave 1
int write(TLocalisamfile& f, bool force = FALSE); int write(TLocalisamfile& f, bool force = FALSE);
// riscrive l'effetto // riscrive l'effetto
int rewrite(TLocalisamfile& f) { return write(f, TRUE); } int rewrite(TLocalisamfile& f) { return write(f, TRUE); }
// rimuove l'effetto // rimuove l'effetto
int remove(TLocalisamfile& f)const; int remove(TLocalisamfile& f)const;
// restituisce il numero progressivo dell'effetto estraendolo dal record // restituisce il numero progressivo dell'effetto estraendolo dal record
long numero() const { return get_long(EFF_NPROGTR); } long numero() const { return get_long(EFF_NPROGTR); }
// restituisce il codice del cliente intestatario dell'effetto estraendolo dal record // restituisce il codice del cliente intestatario dell'effetto estraendolo dal record
long codicec() const { return get_long(EFF_CODCF); } long codicec() const { return get_long(EFF_CODCF); }
// restituisce la data di scadenza dell'effetto estraendola dal record // restituisce la data di scadenza dell'effetto estraendola dal record
TDate datasc() const { return get_date(EFF_DATASCAD); } TDate datasc() const { return get_date(EFF_DATASCAD); }
// restituisce il tipo di distinta a cui appartiene l'effetto estraendolo dal record // restituisce il tipo di distinta a cui appartiene l'effetto estraendolo dal record
char tipodist() const { return get_char(EFF_TIPODIST); } char tipodist() const { return get_char(EFF_TIPODIST); }
// restituisce il numero della distinta a cui appartiene l'effetto estraendolo dal record // restituisce il numero della distinta a cui appartiene l'effetto estraendolo dal record
long ndist() const { return get_long(EFF_NDIST); } long ndist() const { return get_long(EFF_NDIST); }
// restituisce il numero della riga distinta a cui appartiene l'effetto estraendolo dal record // restituisce il numero della riga distinta a cui appartiene l'effetto estraendolo dal record
long nrgdist() const { return get_long(EFF_NRIGADIST); } int nrgdist() const { return get_int(EFF_NRIGADIST); }
// restituisce l'importo dell'effetto // restituisce l'importo dell'effetto
real importo() const { return get_real(EFF_IMPORTO); } real importo() const { return get_real(EFF_IMPORTO); }
// setta i campi per la quarta chiave del file // setta i campi per la quarta chiave del file
void put_key(TRectype& rec,char tipodist, long ndist, long nrigadist = 0); void put_key(TRectype& rec,char tipodist, long ndist, int nrigadist = 0);
// setta i campi per la prima chiave del file // setta i campi per la prima chiave del file
void put_key(TRectype& rec,long numeff) const; void put_key(TRectype& rec,long numeff) const;
// restituisce true se l'effetto si riferisce ad una sola fattura // restituisce true se l'effetto si riferisce ad una sola fattura
bool fatt(long num); bool fatt(long num);
// restituisce i dati relativi alle fatture a cui si riferisce l'effetto // restituisce i dati relativi alle fatture a cui si riferisce l'effetto
TToken_string* dati_fatt(long num); TToken_string* dati_fatt(long num);
// costruttore di default // costruttore di default
TEffetto(); TEffetto();
// costuisce l'effetto con il record passato // costuisce l'effetto con il record passato
TEffetto(TRectype& rec); TEffetto(TRectype& rec);
// costuttore di copia // costuttore di copia
TEffetto(const TEffetto& eff); TEffetto(const TEffetto& eff);
// distruttore di default // distruttore di default
virtual ~TEffetto() {} virtual ~TEffetto() {}
}; };
#endif//__EF0101_H #endif//__EF0101_H

View File

@ -1,3 +1,3 @@
31 31
0 0
$effetti|0|0|157|34|Effetti|NEFF|| $effetti|0|0|154|34|Effetti|NEFF||