aggiunti file per la gestione delle distinte(ef03*.*)

git-svn-id: svn://10.65.10.50/trunk@3899 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
paola 1996-11-14 17:40:05 +00:00
parent 4a5b550d9b
commit 98aaa44159
7 changed files with 911 additions and 0 deletions

442
ef/ef0300.cpp Executable file
View File

@ -0,0 +1,442 @@
#include <relapp.h>
#include <msksheet.h>
#include <sheet.h>
#include <utility.h>
#include <lffiles.h>
#include <effetti.h>
#include <reffetti.h>
#include <cession.h>
#include "ef0.h"
#include "ef0300.h"
#include "ef0301.h"
//Classe per la gestione di distinte (inserimento, modifica, cancellazione)
// e per la creazione automatica di distinte per importi.
class TVariazione_distinte: public TRelation_application
{
TMask *_msk, *_m2;
TDistinta *_distinta;
TRelation *_rel;
TLocalisamfile *_reff, *_cession;
protected:
virtual void init_query_mode(TMask&);
virtual void init_insert_mode(TMask&);
virtual const char* get_next_key();
virtual int read(TMask& m);
virtual int rewrite(const TMask& m);
virtual int write(const TMask& m);
virtual bool remove(char tipodist, long ndist);
virtual TMask* get_mask(int mode) {return _msk;}
virtual bool changing_mask(int mode) {return FALSE;}
static bool aggiungi_handler(TMask_field& f, KEY k);
static bool elimina_handler(TMask_field& f, KEY k);
static bool impdist_notify(TSheet_field& s, int r, KEY key);
static bool m2_handler(TMask& m, KEY key);
static bool conferma_handler(TMask_field& f, KEY k);
static bool annulla_handler(TMask_field& f, KEY k);
static void calcola_totale();
static void carica_riba();
TSheet_field& righe_sheet() const;
TSheet_field& righe_sel_sheet() const;
bool cerca(long num);
bool user_create();
bool user_destroy();
void aggiorna();
void elimina(TString16 tipodist, long ndist) ;
TToken_string* common_f(const TMask& m);
public:
virtual TRelation* get_relation() const {return _rel;}
TVariazione_distinte() {};
virtual ~TVariazione_distinte() {};
};
inline TVariazione_distinte& app()
{
return (TVariazione_distinte&)main_app();
}
void TVariazione_distinte::init_query_mode(TMask&)
{
_msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL);
}
void TVariazione_distinte::init_insert_mode(TMask&)
{
_msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL);
TToken_string riga("|||||||||||");
righe_sheet().row(0)= riga;
righe_sheet().set_dirty();
righe_sel_sheet().row(0)= riga;
righe_sel_sheet().set_dirty();
}
//Ritorna il prossimo numero valido di chiave
const char* TVariazione_distinte::get_next_key()
{
TLocalisamfile& effetti = _rel->lfile();;
long ndist=1L;
if ( !effetti.empty() )
{
effetti.zero();
effetti.setkey(4);
effetti.last();
if ( effetti.good() )
ndist+=effetti.get_long(EFF_NDIST);
}
return format("%d|%ld",F_NUMBER,ndist);
}
//Ritorna un riferimento allo sheet degli effetti (righe) nella distinta
TSheet_field& TVariazione_distinte::righe_sheet() const
{
TSheet_field& r_sheet = (TSheet_field&)_msk->field(F_SHEET_RIBA);
return r_sheet;
}
//Ritorna un riferimento allo sheet delle righe
TSheet_field& TVariazione_distinte::righe_sel_sheet() const
{
TSheet_field& r_sheet = (TSheet_field&)_m2->field(F_SHEET);
return r_sheet;
}
//Ritorna TRUE se trovo nel'array delle righe distinta l'effetto passato
bool TVariazione_distinte::cerca(long num)
{
bool trovato = FALSE;
int items = _distinta->items();
TArray& righedist = _distinta->righe();
for (int i = 0; i < items; i++)//ciclo sugli elementi dell'array
{
TEffetto& eff = (TEffetto&)righedist[i];
long num_eff = eff.get_long("NPROGTR");
if (num_eff == num)
{
trovato = TRUE;
continue;
}
}
return trovato;
}
//Metodo che permette di scivere sull'array gli effetti presenti nello sheet
// comune a write e rewrite
void TVariazione_distinte::aggiorna()
{
TSheet_field& shrighe = righe_sheet();
int items = shrighe.items();
for (int i = 0; i < items; i++)
{
TToken_string& row = shrighe.row(i);
row.restart();
long num = row.get_long(1);
if (!cerca(num))
{
TLocalisamfile eff(LF_EFFETTI);
TRectype rec = eff.curr();
eff.setkey(1);
rec.zero();
rec.put(EFF_NPROGTR, num);
int err = eff.read();
TEffetto* effetto= new TEffetto(rec);
TArray& righedist = _distinta->righe();
righedist.add(effetto);
}
}
}
//Metodo che permette di eliminare il collegamento tra effetto e distinta per gli
//effetti che non fanno parte dell'array
void TVariazione_distinte::elimina(TString16 tipodist, long ndist)
{
TLocalisamfile eff(LF_EFFETTI);
eff.put("TIPODIST",tipodist);
eff.put("NDIST",ndist);
eff.read(_isgteq);
TString16 t = eff.get("TIPODIST");
long n = eff.get_long("NDIST");
long num =eff.get_long("NPROGTR");
while ((t==tipodist)&&(n==ndist))
{
if (!cerca(num))
{
eff.zero("TIPODIST");
eff.zero("NDIST");
eff.zero("DATADIST");
eff.zero("NRIGADIST");
eff.zero("CODABIP");
eff.zero("CODCABP");
eff.rewrite();
}
eff.next();
t = eff.get_char("TIPODIST");
n = eff.get_long("NDIST");
}
}
//Metodo che permette di scivere su file i dati inseriti nella maschera;
// comune a write e rewrite
TToken_string* TVariazione_distinte::common_f(const TMask& m)
{
TString16 tipodist = m.get(F_TIPODIST);
long ndist = m.get_long(F_NUMBER);
TDate datadist = (TDate)m.get(F_DATA);
long codabi = m.get_long(F_CODABIP);
long codcab = m.get_long(F_CODCABP);
elimina(tipodist, ndist);
m.autosave(*_rel);
TToken_string* datidist= new TToken_string;
datidist->cut(0);
datidist->add(tipodist);
datidist->add(ndist);
datidist->add(datadist);
datidist->add(codabi);
datidist->add(codcab);
return datidist;
}
int TVariazione_distinte::read(TMask& m)
{
m.autoload(*_rel);
int err = _rel->status();
if (err == NOERR)
{
err = _distinta->reset();
err = _distinta->read(_rel->curr());
if (err == NOERR)
{
TToken_string riga(80);
TSheet_field& shrighe = righe_sheet();
shrighe.reset();
int items = _distinta->items();
TArray& righedist = _distinta->righe();
for (int i = 0; i < items; i++)
{
TEffetto& eff = (TEffetto&)righedist[i];
riga.cut(0);
riga.add(FALSE);
riga.add(eff.get(EFF_NPROGTR));
riga.add(eff.get(EFF_DATASCAD));
riga.add(eff.get(EFF_CODCF));
if (eff.rows_r() == 1) //se l'effetto contiene solo una riga metto i
{ //riferimenti al documento ed al numero di rata
const TRectype& rec_r = eff.row_r(1);
riga.add(rec_r.get(REFF_NFATT));
riga.add(rec_r.get(REFF_DATAFATT));
riga.add(rec_r.get(REFF_NRATA));
}
else //se l'effetto contiene più di una riga non metto i
{ //riferimenti al documento ed al numero di rata
riga.add(("Varie"));
riga.add(("Varie"));
riga.add(("Varie"));
}
TString codval(3); //gestisco il controllo sulla presenza o meno di una valuta
codval = eff.get(EFF_CODVAL);
const bool condition = (codval.empty());
m.enable(F_CODVAL, !condition);
m.enable(F_TOTIMPVAL, !condition);
if (!condition)
m.set(F_CODVAL, codval);
riga.add(codval);
riga.add(eff.get(EFF_IMPORTO));
riga.add(eff.get(EFF_IMPORTOVAL));
shrighe.row(i) = riga;
}
}
}
return err;
}
int TVariazione_distinte::rewrite(const TMask& m)
{
aggiorna();
return _distinta->rewrite(common_f(m));
}
int TVariazione_distinte::write(const TMask& m)
{
aggiorna();
return _distinta->write(TRUE, common_f(m));
}
bool TVariazione_distinte::remove(char tipodist, long ndist)
{
return _distinta->remove(tipodist, ndist) == NOERR;
}
bool TVariazione_distinte::user_create()
{
_msk = new TMask("ef0300a");
_m2 = new TMask("ef0300c");
_rel = new TRelation(LF_EFFETTI);
_reff = new TLocalisamfile(LF_REFFETTI);
_cession = new TLocalisamfile(LF_CESS);
_distinta = new TDistinta;
set_search_field(F_NUMBER);
_msk->set_handler(B_AGGIUNGI, aggiungi_handler);
_msk->set_handler(B_ELIMINA, elimina_handler);
_m2->set_handler(DLG_OK, conferma_handler);
_m2->set_handler(DLG_CANCEL, annulla_handler);
_m2->set_handler(m2_handler);
righe_sheet().set_notify(impdist_notify);
return TRUE;
}
bool TVariazione_distinte::user_destroy()
{
delete _msk;
delete _m2;
delete _rel;
delete _reff;
delete _cession;
delete _distinta;
return TRUE;
}
//Permette di gestire lo sheet per la selezione delle riba da aggiungere alla distinta
void TVariazione_distinte::carica_riba()
{
TLocalisamfile f(LF_EFFETTI);
TRectype rec = f.curr();
f.setkey(4);
f.put("TIPODIST","");
f.put("NDIST",0);
f.put("NRIGADIST",0);
f.read(_isgteq);
TString16 t = rec.get("TIPODIST");
long n = rec.get_long("NDIST");
int i = 0;
while ((t.empty())&&(n==0))
{
TToken_string riga(80);
TMask* m2 = app()._m2;
TSheet_field& sf = (TSheet_field&)m2->field(F_SHEET);
sf.reset();
riga.cut(0);
riga.add(FALSE);
riga.add(rec.get(EFF_NPROGTR));
riga.add(rec.get(EFF_DATASCAD));
riga.add(rec.get(EFF_CODCF));
TEffetto eff(rec);
if (eff.rows_r() == 1) //se l'effetto contiene solo una riga metto i
{ //riferimenti al documento ed al numero di rata
const TRectype& rec_r = eff.row_r(1);
riga.add(rec_r.get(REFF_NFATT));
riga.add(rec_r.get(REFF_DATAFATT));
riga.add(rec_r.get(REFF_NRATA));
}
else //se l'effetto contiene più di una riga non metto i
{ //riferimenti al documento ed al numero di rata
riga.add(("Varie"));
riga.add(("Varie"));
riga.add(("Varie"));
}
riga.add(rec.get(EFF_CODVAL));
riga.add(rec.get(EFF_IMPORTO));
riga.add(rec.get(EFF_IMPORTOVAL));
sf.row(i) = riga;
f.next();
t = rec.get("TIPODIST");
n = rec.get_long("NDIST");
i++;
}
}
//handler per gestire la pressione del bottone aggiungi della maschera principale(ef0300a)
bool TVariazione_distinte::aggiungi_handler(TMask_field& f, KEY k)
{
if (k==K_SPACE)
{
TMask &m = f.mask();
m.close();
TMask* m2 = app()._m2;
m2->open();
}
return TRUE;
}
//handler per gestire la pressione del bottone elimina della maschera principale(ef0300a)
bool TVariazione_distinte::elimina_handler(TMask_field& f, KEY k)
{
if (k==K_SPACE)
f.yesno_box("Vuoi veramente eliminare gli effetti");
// SE SI ELIMINARE DALLO SHEET GLI EFFETTI SELEZIONATI (LA RIMOZIONE FISICA SARA' FATTA AL
// MOMENTO DELLA REGISTRAZIONE, SE NO NON FACCIO NULLA
return TRUE;
}
//handler per gestire la pressione del bottone conferma della maschera per l'aggiunta delle riba(ef0300c)
bool TVariazione_distinte::conferma_handler(TMask_field& f, KEY k)
{
if (k==K_ENTER)
{
TMask &m = f.mask();
TMask* m2 = app()._msk;
m.close();
m2->open();
}
return TRUE;
}
//handler della maschera per l'aggiunta delle riba(ef0300c)
bool TVariazione_distinte::m2_handler(TMask& m, KEY k)
{
if (k==K_ENTER)
carica_riba();
return TRUE;
}
//handler per gestire la pressione del bottone annulla della maschera per l'aggiunta delle riba(ef0300c)
bool TVariazione_distinte::annulla_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
TMask* m2 = app()._msk;
m.close();
m2->open();
return TRUE;
}
//Calcola i totali relativi alla distinta (totale in lire e totale in valuta(se presente))
void TVariazione_distinte::calcola_totale()
{
TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET_RIBA);
int items = sf.items();
real imp, impval, impdist, impdistval;
for (int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
imp = row.get(8);
impdist += imp;
impval = row.get(9);
impdistval += impval;
}
m->set(F_TOTIMP, impdist);
m->set(F_TOTIMPVAL, impdistval);
}
//Notify per il calcolo dei totali relativi alla distinta
bool TVariazione_distinte::impdist_notify(TSheet_field& s, int r, KEY key)
{
if (s.to_check(key, TRUE))
calcola_totale();
if (key == K_DEL && s.items()==1)
{
error_box("IMPOSSIBILE CANCELLARE: La distinta deve contenere almeno un effetto!");
return FALSE;
}
return TRUE;
}
int ef0300(int argc, char* argv[])
{
TVariazione_distinte a ;
a.run(argc, argv, "Gestione Distinte");
return 0;
}

42
ef/ef0300.h Executable file
View File

@ -0,0 +1,42 @@
#ifndef __EF0300_H
#define __EF0300_H
// campi maschera EF0300a.msk
#define F_TIPODIST 101
#define F_NUMBER 102
#define F_NUMBERRIGA 103
#define F_DATA 104
#define F_DENBANP 105
#define F_CODABIP 106
#define F_CODCABP 107
#define F_TOTIMP 108
#define F_TOTIMPVAL 109
#define F_CODVAL 110
#define F_SHEET_RIBA 111
#define B_AGGIUNGI 112
#define B_ELIMINA 113
// Identificatori campi per lo spreadsheet Righe Distinta
#define F_CHECK 101
#define F_NRIBA 102
#define F_SCAD 103
#define F_CLIENTE 104
#define F_NFATT 105
#define F_DATAFATT 106
#define F_NRATA 107
#define F_VALUTA 108
#define F_IMPORTO 109
#define F_IMPORTOVAL 110
// campi maschera EF0300C.msk
#define F_DADATA 101
#define F_ADATA 102
#define F_TIPORD 103
#define F_SHEET 104
#endif // __EF0300.H

161
ef/ef0300a.uml Executable file
View File

@ -0,0 +1,161 @@
#include "ef0300.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Gestione Distinte" 0 -1 0 19
GROUPBOX DLG_NULL 78 9
BEGIN
PROMPT 1 0 ""
END
LIST F_TIPODIST 19
BEGIN
PROMPT 2 1 "Tipo Distinta "
KEY 4
FIELD LF_EFFETTI->TIPODIST
ITEM "I|All'incasso"
ITEM "B|Salvo buon fine"
ITEM "S|Allo sconto"
END
LIST F_NUMBERRIGA 10
BEGIN
PROMPT 1 60 "Numero Riga Distinta"
KEY 4
FIELD LF_EFFETTI->NRIGADIST
ITEM "1|PRIMA RIGA"
FLAGS "D"
END
NUMBER F_NUMBER 7
BEGIN
PROMPT 48 1 "Numero Distinta "
FIELD LF_EFFETTI->NDIST
FLAGS "R"
KEY 4
USE LF_EFFETTI KEY 4 SELECT NRIGADIST = 1
INPUT TIPODIST F_TIPODIST
INPUT NDIST F_NUMBER
INPUT NRIGADIST F_NUMBERRIGA
DISPLAY "Tipo distinta" TIPODIST
DISPLAY "Nr. distinta" NDIST
//DISPLAY "Nr. riga distinta" NRIGADIST
OUTPUT F_TIPODIST TIPODIST
OUTPUT F_NUMBER NDIST
OUTPUT F_NUMBERRIGA NRIGADIST
CHECKTYPE REQUIRED
END
DATE F_DATA
BEGIN
PROMPT 2 2 "Data Distinta "
FIELD LF_EFFETTI->DATADIST
END
TEXT DLG_NULL
BEGIN
PROMPT 2 3 "Banca di Presentazione "
END
STRING F_DENBANP 50
BEGIN
PROMPT 25 3 ""
FLAGS "U"
USE %BAN KEY 2
INPUT S0 F_DENBANP
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Denominazione@50" S0
OUTPUT F_DENBANP S0
OUTPUT F_CODABIP CODTAB[1,5]
OUTPUT F_CODCABP CODTAB[6,10]
END
NUMBER F_CODABIP 5 0
BEGIN
PROMPT 14 4 "Codice ABI "
FIELD LF_EFFETTI->CODABIP
FLAGS "RZ"
USE %BAN KEY 1 SELECT CODTAB ?= "?????"
INPUT CODTAB F_CODABIP
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Denominazione@50" S0
OUTPUT F_CODABIP CODTAB[1,5]
OUTPUT F_CODCABP CODTAB[6,10]
OUTPUT F_DENBANP S0
CHECKTYPE NORMAL
WARNING "Codice ABI assente"
END
NUMBER F_CODCABP 5 0
BEGIN
PROMPT 14 5 "Codice CAB "
FIELD LF_EFFETTI->CODCABP
FLAGS "RZ"
USE %BAN KEY 1 SELECT CODTAB ?= "??????????"
INPUT CODTAB[1,5] F_CODABIP
INPUT CODTAB[6,10] F_CODCABP
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
DISPLAY "Denominazione@50" S0
OUTPUT F_CODABIP CODTAB[1,5]
OUTPUT F_CODCABP CODTAB[6,10]
OUTPUT F_DENBANP S0
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 F_CODCABP
WARNING "Banca assente"
END
NUMBER F_TOTIMP 18 2
BEGIN
PROMPT 2 6 "Valore Distinta "
END
NUMBER F_TOTIMPVAL 18 3
BEGIN
PROMPT 2 7 "Valore Distinta Val. "
END
STTING F_CODVAL 8
BEGIN
PROMPT 48 7 "Codice Valuta "
END
SPREADSHEET F_SHEET_RIBA 78 8
BEGIN
PROMPT 1 10 "RIGHE DISTINTA"
ITEM " "
ITEM "Nr. Ri.Ba."
ITEM "Scadenza"
ITEM "Cliente@50"
ITEM "Nr. Fattura"
ITEM "Data Fattura"
ITEM "Nr. Rata"
ITEM "Valuta"
ITEM "Importo"
ITEM "Importo Val."
END
BUTTON B_AGGIUNGI 10 2
BEGIN
PROMPT -12 -2 "~AGGIUNGI"
PICTURE BMP_NEWREC
PICTURE BMP_NEWRECDN
END
BUTTON B_ELIMINA 10 2
BEGIN
PROMPT -22 -2 "~ELIMINA"
PICTURE BMP_DELREC
PICTURE BMP_DELRECDN
END
ENDPAGE
ENDMASK
#include "EF0300B.UML"

91
ef/ef0300b.uml Executable file
View File

@ -0,0 +1,91 @@
#include "ef0300.h"
PAGE "Righe Distinta" -1 -1 76 13
LISTBOX F_CHECK 5
BEGIN
PROMPT 2 1 "Selezionato "
ITEM " |FALSE"
ITEM "X|TRUE"
END
NUMBER F_NRIBA 7
BEGIN
PROMPT 2 2 "Numero RiBa "
FIELD LF_EFFETTI->NPROGTR
FLAGS "D"
END
DATA F_SCAD
BEGIN
PROMPT 2 3 "Scadenza "
FIELD LF_EFFETTI->DATASCAD
FLAGS "D"
END
STRING F_CLIENTE 50 40
BEGIN
PROMPT 2 4 "Cliente "
FLAGS "D"
END
STRING F_NFATT 7
BEGIN
PROMPT 2 5 "Numero Fatt. "
FIELD LF_REFFETTI->NFATT
FLAGS "D"
END
DATA F_DATAFATT
BEGIN
PROMPT 2 6 "Data Fattura "
FIELD LF_REFFETTI->DATAFATT
FLAGS "D"
END
NUMBER F_NRATA 3
BEGIN
PROMPT 2 7 "Numero Rata "
FIELD LF_REFFETTI->NRATA
FLAGS "D"
END
STRING F_VALUTA 3
BEGIN
PROMPT 2 8 "Valuta "
FIELD LF_EFFETTI->CODVAL
FLAGS "D"
END
NUMBER F_IMPORTO 18 2
BEGIN
PROMPT 2 9 "Importo "
FIELD LF_EFFETTI->IMPORTO
FLAGS "D"
END
NUMBER F_IMPORTOVAL 18 3
BEGIN
PROMPT 2 9 "Importo Val. "
FIELD LF_EFFETTI->IMPORTOVAL
FLAGS "D"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_DELREC 9 2
BEGIN
PROMPT -33 -1 "Elimina"
MESSAGE EXIT, K_DEL
END
ENDPAGE
ENDMASK

59
ef/ef0300c.uml Executable file
View File

@ -0,0 +1,59 @@
#include "ef0300.h"
PAGE "Aggiungi Effetti alla Distinta" -1 -1 78 18
GROUPBOX DLG_NULL 60 3
BEGIN
PROMPT 1 1 "Selezione effetti per data"
END
DATE F_DADATA
BEGIN
PROMPT 2 2 "Dalla Data "
FIELD LF_EFFETTI->DATASCAD
CHECKTYPE NORMAL
END
DATE F_ADATA
BEGIN
PROMPT 30 2 "Alla Data "
FIELD LF_EFFETTI->DATASCAD
CHECKTYPE NORMAL
END
LIST F_TIPORD 14
BEGIN
PROMPT 2 4 "Tipo Ordinamento "
ITEM " |** Nessuno **"
ITEM "S|Scadenza "
ITEM "F|Fattura "
END
SPREADSHEET F_SHEET 74 8
BEGIN
PROMPT 2 6 "EFFETTI SELEZIONABILI"
ITEM " "
ITEM "Nr. Ri.Ba."
ITEM "Scadenza"
ITEM "Cliente@50"
ITEM "Nr. Fattura"
ITEM "Data Fattura"
ITEM "Nr. Rata"
ITEM "Valuta"
ITEM "Importo"
ITEM "Importo Val."
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
#include "EF0300B.UML"

86
ef/ef0301.cpp Executable file
View File

@ -0,0 +1,86 @@
#include "effetti.h"
#include "reffetti.h"
#include "cession.h"
#include "ef0301.h"
TDistinta::TDistinta(const TRectype& rec)
{
read(rec);
}
TDistinta::TDistinta(const char tipo, const long numero)
{
read(tipo,numero);
}
int TDistinta::read(const char tipo, const long numero)
{
int err = NOERR;
CHECK(tipo!='\0' && numero>0,"Can't read distinta from NULL elements");
for (int i=0; err == NOERR ; i++)
{
TEffetto* effetto = new TEffetto;
err = effetto->read(tipo, numero, i+1);
if (err == NOERR)
_righe_dist.add(effetto);
}
if ((_righe_dist.items()>0)||(err == _iseof))
err = NOERR;
return err;
}
int TDistinta::read(const TRectype& rec)
{
CHECK(rec.num() == LF_EFFETTI,"Can't read distinta from a different record type");
const char tipo = rec.get_char(EFF_TIPODIST);
const long numero = rec.get_long(EFF_NDIST);
return read(tipo,numero);
}
int TDistinta::write(bool force, TToken_string* dati_dist)
{
int err = NOERR;
const int elem = items();
for (int i=0; i<elem && err==NOERR; i++)
{
TEffetto& effetto = (TEffetto&)_righe_dist[i];
dati_dist->restart();
effetto.put("TIPODIST", dati_dist->get());
effetto.put("NDIST", dati_dist->get_long());
effetto.put("DATADIST", dati_dist->get());
effetto.put("CODABIP", dati_dist->get_long());
effetto.put("CODCABP", dati_dist->get_long());
effetto.put("NRIGADIST", i+1);
err = effetto.rewrite();
}
return err;
}
int TDistinta::remove(char tipodist, long ndist)
{
int err= NOERR;
err = reset() == NOERR;
//rimuovo dal file effetti
TLocalisamfile eff(LF_EFFETTI);
eff.put("TIPODIST",tipodist);
eff.put("NDIST",ndist);
eff.read(_isgteq);
char t = eff.get_char("TIPODIST");
long n = eff.get_long("NDIST");
while ((t==tipodist)&&(n==ndist))
{
eff.zero("TIPODIST");
eff.zero("NDIST");
eff.zero("DATADIST");
eff.zero("NRIGADIST");
eff.zero("CODABIP");
eff.zero("CODCABP");
eff.rewrite();
eff.next();
t = eff.get_char("TIPODIST");
n = eff.get_long("NDIST");
}
return err;
}

30
ef/ef0301.h Executable file
View File

@ -0,0 +1,30 @@
#ifndef __RELATION_H
#include <relation.h>
#endif
#include "ef0101.h"
class TDistinta:public TObject
{
TArray _righe_dist;
public:
TArray& righe()
{ return _righe_dist;}
//ritorna il numero degli effetti nella distinta (nell'array)
const int items() const
{ return _righe_dist.items(); }
//elimina tutti gli effetti nella distinta (appartenti all'array)
int reset()
{ return _righe_dist.destroy() == NOERR; }
int read(const char tipo, const long numero);
int read(const TRectype& rec);
int write(bool force = FALSE, TToken_string* dati_dist = NULL);
int rewrite(TToken_string* dati_dist)
{ return write(TRUE, dati_dist); }
int remove(char tipodist, long ndist);
const char tipodist() const { return ((TRectype&)_righe_dist[0]).get_char(EFF_TIPODIST); }
const long ndist() const { return ((TRectype&)_righe_dist[0]).get_long(EFF_NDIST); }
TDistinta() {};
TDistinta(const char tipo, const long numero);
TDistinta(const TRectype& rec);
virtual ~TDistinta() {}
};