aggiunto oggetto TEffetto ed integrato nella variazione effetti

git-svn-id: svn://10.65.10.50/trunk@3867 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
paola 1996-11-05 14:24:56 +00:00
parent c0267f0832
commit e37b4da06e
6 changed files with 762 additions and 508 deletions

View File

@ -4,209 +4,343 @@
#include <utility.h>
#include <lffiles.h>
#include <clifo.h>
#include "effetti.h"
#include "cession.h"
#include <comuni.h>
#include <effetti.h>
#include <reffetti.h>
#include <cession.h>
#include "ef0.h"
#include "ef0100.h"
#include "ef0101.h"
class Variazione_Effetti: public TRelation_application
//Classe per la gestione di effetti con metodi
// standard di: inserimento, modifica, cancellazione.
class TVariazione_effetti: public TRelation_application
{
TMask* _msk;
TEffObb *_rel;
TMask *_msk;
TEffetto *_effetto;
TRelation *_rel;
TLocalisamfile *_reff, *_cess, *_com;
protected:
virtual void init_query_mode(TMask&);
virtual void init_insert_mode(TMask&);
static bool handle_sheet(TMask_field& f, KEY);
static bool codval_handler(TMask_field& f, KEY k);
static bool impeff_notify(TSheet_field& s, int r, KEY key);
virtual const char* get_next_key();
TSheet_field& obb_sheet() const;
void obb_pack();
TSheet_field& cess_sheet() const;
TSheet_field& righe_sheet() const;
void common_f(const TMask& m);
static void calcola_totali();
virtual int read(TMask& m);
virtual int rewrite(const TMask& m);
virtual int write(const TMask& m);
virtual bool remove();
bool user_create();
bool user_destroy();
virtual TMask* get_mask(int mode) {return _msk;}
virtual bool changing_mask(int mode) {return FALSE;}
virtual TMask* get_mask(int mode) {return _msk;}
virtual bool changing_mask(int mode) {return FALSE;}
public:
static bool codcf_handler(TMask_field& f, KEY k);
static bool effcomp_handler(TMask_field& f, KEY k);
virtual TRelation* get_relation() const {return _rel;}
Variazione_Effetti() {}
TVariazione_effetti() {};
virtual ~TVariazione_effetti() {};
};
inline TVariazione_effetti& app() {return (TVariazione_effetti&)main_app();}
const char* Variazione_Effetti::get_next_key()
void TVariazione_effetti::init_query_mode(TMask&)
{
_msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL);
}
void TVariazione_effetti::init_insert_mode(TMask&)
{
_msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL);
TToken_string riga("|||||||||");
righe_sheet().row(0)=riga;
righe_sheet().set_dirty();
}
//Ritorna il prossimo numero valido di chiave
const char* TVariazione_effetti::get_next_key()
{
TLocalisamfile& effetti=_rel->lfile();
long nprogtr=1L;
if (!effetti.empty())
if ( !effetti.empty() )
{
effetti.zero();
effetti.setkey(1);
effetti.last();
if (effetti.good())
if ( effetti.good() )
nprogtr+=effetti.get_long(EFF_NPROGTR);
}
return format("%d|%ld",F_NPROGTR,nprogtr);
}
TSheet_field& Variazione_Effetti::obb_sheet() const
//Ritorna un riferimento allo sheet dei cessionari
TSheet_field& TVariazione_effetti::cess_sheet() const
{
TSheet_field& o_sheet=(TSheet_field&) _msk->field(F_SHEET_EFF);
TSheet_field& o_sheet = (TSheet_field&)_msk->field(F_SHEET_EFF);
return o_sheet;
}
void Variazione_Effetti::obb_pack()
//Ritorna un riferimento allo sheet delle righe
TSheet_field& TVariazione_effetti::righe_sheet() const
{
TArray& rows=obb_sheet().rows_array();
int nr=rows.items();
for (int i=0;i<nr;i++)
{
TToken_string& riga=(TToken_string&)rows[i];
if (riga.empty_items())
rows.destroy(i,FALSE);
}
TSheet_field& r_sheet = (TSheet_field&)_msk->field(F_SHEET_RIGHE);
return r_sheet;
}
void Variazione_Effetti::common_f(const TMask& m)
//Metodo che permette di scivere su file i dati inseriti nella maschera;
// comune a write e rewrite
void TVariazione_effetti::common_f(const TMask& m)
{
long nprogtr=m.get_long(F_NPROGTR);
_rel->lfile().zero();
long nprogtr = m.get_long(F_NPROGTR);
m.autosave(*_rel);
// LF_CESS SAVER!
_rel->destroy_rows();
obb_pack();
TArray& rows=obb_sheet().rows_array();
for (int i=0; i<rows.items();i++)
{
TToken_string& row=(TToken_string&)rows[i];
TRectype& rec=_rel->obbligato(i);
_effetto->head() = _rel->curr();
TSheet_field& shcess = cess_sheet();
TSheet_field& shrighe = righe_sheet();
int items = shcess.items();
_effetto->destroy_rows_c();
int ii = 0;
for (int i = 0; i < items; i++)
{
TToken_string& row = shcess.row(i);
if ( row.items()!= 0 )
{
TRectype& rec = _effetto->row_c(ii+1, TRUE);
row.restart();
rec.zero();
rec.put(CES_NPROGTR, nprogtr);
rec.put(CES_NRIGA, ii+1);
rec.put(CES_RAGSOC, row.get());
rec.put(CES_LOCALITA, row.get());
rec.put(CES_STATO, row.get_int());
rec.put(CES_COM, row.get());
ii++;
}
}
items = shrighe.items();
_effetto->destroy_rows_r();
ii = 0;
for (i = 0; i < items; i++)
{
TToken_string& row = shrighe.row(i);
real imp_eff(row.get(1));
if (imp_eff == 0.0) continue;
row.restart();
TRectype& rec = _effetto->row_r(ii+1, TRUE);
rec.zero();
rec.put(CES_NPROGTR,nprogtr);
rec.put(CES_NRIGA,i+1);
rec.put(CES_RAGSOC,row.get());
rec.put(CES_LOCALITA,row.get());
rec.put(CES_STATO,row.get_int());
rec.put(CES_COM,row.get());
rec.put(REFF_NPROGTR, nprogtr);
rec.put(REFF_NRIGATR, ii+1);
rec.put(REFF_IMPFATT, row.get());
rec.put(REFF_IMPORTO, row.get());
rec.put(REFF_IMPFATTVAL, row.get());
rec.put(REFF_IMPORTOVAL, row.get());
rec.put(REFF_ANNO, row.get_int());
rec.put(REFF_NUMPART, row.get());
rec.put(REFF_NRIGA, row.get_int());
rec.put(REFF_NRATA, row.get_int());
rec.put(REFF_NFATT, row.get());
rec.put(REFF_DATAFATT, row.get());
ii++;
}
_effetto->renum(_effetto->numero());
}
int Variazione_Effetti::read(TMask& m)
int TVariazione_effetti::read(TMask& m)
{
m.autoload(*_rel);
// LF_CESS loader!
TToken_string riga(80);
obb_sheet().reset();
for (int i=0; i<_rel->obbligati_items();i++)
int err = _rel->status();
if (err == NOERR)
{
TRectype& rec=_rel->obbligato(i);
riga.cut(0);
riga.add(rec.get(CES_RAGSOC));
riga.add(rec.get(CES_LOCALITA));
riga.add(rec.get(CES_STATO));
riga.add(rec.get(CES_COM));
obb_sheet().row(i)=riga;
err = _effetto->read(_rel->curr());
if (err == NOERR)
{
TString16 codcom(3);
TToken_string riga(80);
TSheet_field& shcess = cess_sheet();
shcess.reset();
TSheet_field& shrighe = righe_sheet();
shrighe.reset();
int items = _effetto->rows_c();
for (int i = 1; i <= items; i++)
{
const TRectype& rec = _effetto->row_c(i);
riga.cut(0);
riga.add(rec.get(CES_RAGSOC));
riga.add(rec.get(CES_LOCALITA));
riga.add(rec.get(CES_STATO));
codcom = rec.get(CES_COM);
riga.add(codcom);
_com->zero();
_com->put("COM", codcom);
if (_com->read() == NOERR) riga.add(_com->get(COM_DENCOM));
shcess.row(i-1)=riga;
}
items = _effetto->rows_r();
for (i = 1; i <= items; i++)
{
const TRectype& rec = _effetto->row_r(i);
riga.cut(0);
riga.add(rec.get(REFF_IMPFATT));
riga.add(rec.get(REFF_IMPORTO));
riga.add(rec.get(REFF_IMPFATTVAL));
riga.add(rec.get(REFF_IMPORTOVAL));
riga.add(rec.get(REFF_ANNO));
riga.add(rec.get(REFF_NUMPART));
riga.add(rec.get(REFF_NRIGA));
riga.add(rec.get(REFF_NRATA));
riga.add(rec.get(REFF_NFATT));
riga.add(rec.get(REFF_DATAFATT));
shrighe.row(i-1) = riga;
}
}
}
return _rel->status();
return err;
}
int Variazione_Effetti::rewrite(const TMask& m)
int TVariazione_effetti::rewrite(const TMask& m)
{
common_f(m);
return _rel->rewrite(TRUE);
return _effetto->rewrite();
}
int Variazione_Effetti::write(const TMask& m)
int TVariazione_effetti::write(const TMask& m)
{
common_f(m);
return _rel->write(TRUE);
int err = _effetto->write();
if (err == NOERR)
_rel->read(); // per posizionare correttamente la relazione
return err;
}
bool TVariazione_effetti::remove()
{
return _effetto->remove() == NOERR;
}
bool Variazione_Effetti::user_create()
bool TVariazione_effetti::user_create()
{
_msk = new TMask("ef0100a") ;
_rel = new TEffObb;
_msk->set_handler(F_CODCF,codcf_handler);
_msk->set_handler(F_EFFCOMP,effcomp_handler);
_rel = new TRelation(LF_EFFETTI);
_reff = new TLocalisamfile(LF_REFFETTI);
_cess = new TLocalisamfile(LF_CESS);
_com = new TLocalisamfile(LF_COMUNI);
_effetto = new TEffetto;
_msk->set_handler(F_CODVAL, codval_handler);
_msk->set_handler(F_SHEET_RIGHE, handle_sheet);
righe_sheet().set_append(FALSE);
righe_sheet().set_notify(impeff_notify);
return TRUE;
}
bool Variazione_Effetti::user_destroy()
bool TVariazione_effetti::user_destroy()
{
delete _msk;
delete _rel;
delete _effetto;
delete _reff;
delete _cess;
delete _com;
return TRUE;
}
bool Variazione_Effetti::codcf_handler(TMask_field& f, KEY k)
//Permette di effettuare il controllo sul fatto che venga inserita almeno una
// riga per un effetto
bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
{
long codcf = atol(f.get()), n = 0;
TString ragsoc(50);
TToken_string line;
TLocalisamfile clifo(LF_CLIFO);
TArray_sheet cli(-1,-1,59,20,"Clienti","Codice|Ragione sociale@50|Sospeso|Codice fiscale@18");
switch (k)
TMask& m = f.mask();
const int mode = m.mode();
if ( k==K_ENTER && (mode== MODE_INS || mode== MODE_MOD) )
{
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE);
int items = sf.items();
bool found=FALSE;
for (int i=0; i< items && !found; i++)
{
TToken_string& row=sf.row(i);
real imp_eff(row.get(1));
if (imp_eff != 0.0) found=TRUE;
}
if (!found)
{
error_box("L'effetto deve contenere almeno una riga!");
return FALSE;
}
}
return TRUE;
}
//Permette il controllo sulla abilitazione dei campi collegati al codice
// valuta
bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
TString val(f.get());
if (f.to_check(k, TRUE))
{
case K_TAB:
if (f.focusdirty()) // When changing focus put customer's name
{
clifo.zero();
clifo.setkey(1);
clifo.put(CLI_TIPOCF,"C");
clifo.put(CLI_CODCF,codcf);
clifo.read();
if (clifo.good())
{
ragsoc=clifo.get(CLI_RAGSOC);
f.mask().set(F_CFRAGSOC,(const char*)ragsoc);
} else
return FALSE;
}
break;
case K_F8: // If F8 was pressed perform customer's search
clifo.setkey(1);
clifo.first();
while (clifo.good() && clifo.get(CLI_TIPOCF)=="C")
{
line.cut(0);
if (codcf == clifo.get_long(CLI_CODCF)) n=cli.items();
line.add(clifo.get(CLI_CODCF));
line.add(clifo.get(CLI_RAGSOC));
line.add(clifo.get(CLI_SOSPESO));
line.add(clifo.get(CLI_COFI));
cli.add(line);
clifo.next();
}
cli.select(n);
if (cli.run()==K_ENTER)
{
line=cli.row(-1);
f.set(line.get(0));
f.mask().set(F_CFRAGSOC,line.get(1));
}
break;
default:
break;
}
const bool condition = (val == "LIT" || val.empty());
m.enable(-1,!condition);
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE);
if (condition){
m.reset(-1);
m.reset(F_TOTIMPVAL);
int items = sf.items();
for (int i= 0; i < items; i++){
TToken_string& row = sf.row(i);
row.add(" ", 2);
row.add(" ", 3);
}
}
sf.enable_column(F_IMPFATTVAL, !condition);
sf.enable_column(F_IMPEFFVAL, !condition);
sf.force_update();
}
return TRUE;
}
bool Variazione_Effetti::effcomp_handler(TMask_field& f, KEY k)
{
if (!f.mask().get(F_NRATA).empty())
f.set("X");
void TVariazione_effetti::calcola_totali()
{
TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET_RIGHE);
int items = sf.items();
real imp, impval, impeff, impeffval;
for (int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
imp = row.get(1);
impeff += imp;
impval = row.get(3);
impeffval += impval;
}
m->set(F_TOTIMP, impeff);
m->set(F_TOTIMPVAL, impeffval);
}
bool TVariazione_effetti::impeff_notify(TSheet_field& s, int r, KEY key)
{
if (s.to_check(key, TRUE)) calcola_totali();
if (key == K_DEL && s.items()==1)
{
error_box("IMPOSSIBILE CANCELLARE: L'effetto deve contenere almeno una riga!");
return FALSE;
}
return TRUE;
}
int ef0100(int argc, char* argv[])
{
Variazione_Effetti a ;
a.run(argc, argv, "Gestione effetti");
TVariazione_effetti a ;
a.run(argc, argv, "Gestione Effetti");
return 0;
}

View File

@ -3,44 +3,53 @@
// campi maschera ef0100a.msk
#define F_NPROGTR 101
#define F_CODCF 102
#define F_NPROGTR 101
#define F_CODCF 102
#define F_CFRAGSOC 103
#define F_TIPOPAG 104
#define F_DATASCAD 105
#define F_IMPORTO 106
#define F_NFATT 107
#define F_DATAFATT 108
#define F_IMPFATT 109
#define F_NRATA 110
#define F_ULTRATA 111
#define F_CODABI 112
#define F_CODCAB 113
#define F_DATAEMISS 114
#define F_NUMEMISS 115
#define F_IMPBOLLO 116
#define F_EFFSTAMP 117
#define F_SHEET_EFF 118
#define F_TIPODIST 119
#define F_DATADIST 121
#define F_NDIST 122
#define F_NRIGADIST 123
#define F_DATASCAD 104
#define F_TIPOPAG 105
#define F_ULTCLASS 106
#define F_CODVAL 107
#define F_DATACAM 108
#define F_CAMBIO 109
#define F_ULTRATA 110
#define F_SHEET_RIGHE 111
#define F_TOTIMP 112
#define F_TOTIMPVAL 113
#define F_CODABI 114
#define F_CODCAB 115
#define F_CODABIP 116
#define F_CODCABP 117
#define F_DATAEMISS 118
#define F_NUMEMISS 119
#define F_EFFSTAMP 120
#define F_TIPODIST 121
#define F_NDIST 122
#define F_DATADIST 123
#define F_DISTSTAM 124
#define F_CODABIP 125
#define F_CODCABP 126
#define F_EFFCONT 127
#define F_CODFOR 128
#define F_ULTCLASS 129
#define F_DATARIBA 130
#define F_DISRIBAEST 131
#define F_EFFCOMP 132
#define F_NRIGADIST 125
#define F_DATARIBA 126
#define F_DISRIBAEST 127
#define F_EFFCONT 128
#define F_EFFCOMP 129
#define F_SHEET_EFF 130
// Identificatori campi per lo spreadsheet "Obbligati principali"
#define F_RAGSOC 101
#define F_LOCALITA 102
#define F_LOCALITA 102
#define F_STATO 103
#define F_COM 104
#define F_COM 104
#define F_DENCOM 105
// Identificatori campi per lo spreadsheet "Righe Effetto"
#define F_IMPFATT 101
#define F_IMPEFF 102
#define F_IMPFATTVAL 103
#define F_IMPEFFVAL 104
#define F_ANNO 105
#define F_NUMPART 106
#define F_NUMRIGA 107
#define F_NUMRATA 108
#define F_NUMFATT 109
#define F_DATAFATT 110
#endif // __EF0100_H

View File

@ -6,108 +6,77 @@ TOOLBAR "" 0 20 0 2
ENDPAGE
PAGE "Gestione Effetti" 0 -1 0 19
PAGE "Gestione Effetti 1/3" 0 -1 0 19
GROUPBOX DLG_NULL 78 4
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 0 "Dati effetto"
PROMPT 1 1 ""
END
NUMBER F_NPROGTR 7
BEGIN
PROMPT 2 1 "Numero "
PROMPT 2 2 "Numero "
FIELD LF_EFFETTI->NPROGTR
FLAGS "R"
KEY 1
USE LF_EFFETTI KEY 1
JOIN LF_CLIFO TO LF_EFFETTI KEY 1 INTO CODCF=CODCF TIPOCF="C"
INPUT NPROGTR F_NPROGTR
DISPLAY "Nr. Progressivo" NPROGTR
DISPLAY "Nr. progressivo" NPROGTR
DISPLAY "Codice cliente" CODCF
DISPLAY "Data scadenza" DATASCAD
DISPLAY "Data fattura" DATAFATT
DISPLAY "Numero fattura" NFATT
DISPLAY "Importo fattura @R" IMPFATT
DISPLAY "Importo effetto @R" IMPORTO
DISPLAY "Tipo" TIPOPAG
DISPLAY "Nr distinta" NDIST
DISPLAY "Tipo distinta" TIPODIST
DISPLAY "Nr. distinta" NDIST
OUTPUT F_NPROGTR NPROGTR
OUTPUT F_CODCF CODCF
OUTPUT F_DATASCAD DATASCAD
OUTPUT F_TIPOPAG TIPOPAG
OUTPUT F_CFRAGSOC LF_CLIFO->RAGSOC
CHECKTYPE REQUIRED
HELP "Inserire il numero progressivo dell'effetto"
END
NUMBER F_CODCF 6
BEGIN
PROMPT 2 2 "Cod. cliente "
PROMPT 2 3 "Cod. cliente "
FIELD LF_EFFETTI->CODCF
KEY 2
USE LF_EFFETTI KEY 2
JOIN LF_CLIFO TO LF_EFFETTI KEY 1 INTO CODCF=CODCF TIPOCF="C"
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF F_CODCF
INPUT NPROGTR F_NPROGTR
DISPLAY "Ragione sociale@60" RAGSOC
DISPLAY "Codice" CODCF
/*
DISPLAY "Codice cliente" CODCF
DISPLAY "Nr. progressivo" NPROGTR
DISPLAY "Data scadenza" DATASCAD
DISPLAY "Data fattura" DATAFATT
DISPLAY "Numero fattura" NFATT
DISPLAY "Importo fattura @R" IMPFATT
DISPLAY "Importo effetto @R" IMPORTO
DISPLAY "Tipo" TIPOPAG
DISPLAY "Nr distinta" NDIST
DISPLAY "Tipo distinta" TIPODIST
DISPLAY "Nr. distinta" NDIST
COPY OUTPUT F_NPROGTR
CHECKTYPE REQUIRED
HELP "Inserire il codice del cliente. F8 ricerca cliente."
END
STRING F_CFRAGSOC 50
BEGIN
PROMPT 25 2 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_CFRAGSOC
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Codice" CODCF
*/
OUTPUT F_CODCF CODCF
OUTPUT F_CFRAGSOC RAGSOC
CHECKTYPE REQUIRED
END
LIST F_TIPOPAG 18
STRING F_CFRAGSOC 50
BEGIN
PROMPT 2 4 "Tipo effetto "
FIELD LF_EFFETTI->TIPOPAG
ITEM "2|Tratta"
MESSAGE DISABLE,F_CODFOR|RESET,F_CODFOR
ITEM "3|Ricevuta bancaria"
MESSAGE DISABLE,F_CODFOR|UNDO,F_CODFOR
ITEM "4|Cessione"
MESSAGE ENABLE,F_CODFOR|UNDO,F_CODFOR
ITEM "5|Paghero'"
MESSAGE DISABLE,F_CODFOR|UNDO,F_CODFOR
HELP "Inserire il tipo dell'effetto"
END
STRING F_ULTCLASS 1
BEGIN
PROMPT 42 4 "Ulteriore classificazione "
FIELD LF_EFFETTI->ULTCLASS
USE %CLR
INPUT CODTAB[1,1] F_TIPOPAG SELECT
INPUT CODTAB[2,2] F_ULTCLASS
DISPLAY "Classificazione" CODTAB[2,2]
DISPLAY "Descrizione@50" S0
OUTPUT F_ULTCLASS CODTAB[2,2]
HELP "Inserire l'ulteriore classificazione dell'effetto"
PROMPT 25 3 ""
USE LF_CLIFO KEY 2
//JOIN LF_EFFETTI TO LF_CLIFO KEY 2 INTO CODCF==CODCF
INPUT TIPOCF "C"
INPUT RAGSOC F_CFRAGSOC
DISPLAY "Ragione sociale@60" RAGSOC
DISPLAY "Codice" CODCF
/*DISPLAY "Nr. progressivo" LF_EFFETTI->NPROGTR
DISPLAY "Data scadenza" LF_EFFETTI->DATASCAD
DISPLAY "Tipo distinta" LF_EFFETTI->TIPODIST
DISPLAY "Nr. distinta" LF_EFFETTI->NDIST*/
COPY OUTPUT F_CODCF
CHECKTYPE REQUIRED
END
DATE F_DATASCAD
BEGIN
PROMPT 2 5 "Data scadenza "
PROMPT 2 4 "Data scadenza "
FIELD LF_EFFETTI->DATASCAD
KEY 3
USE LF_EFFETTI KEY 3
@ -115,281 +84,308 @@ BEGIN
INPUT DATASCAD F_DATASCAD
INPUT NPROGTR F_NPROGTR
DISPLAY "Data scadenza" DATASCAD
DISPLAY "Nr progressivo" NPROGTR
DISPLAY "Nr. progressivo" NPROGTR
DISPLAY "Codice cliente" CODCF
DISPLAY "Data fattura" DATAFATT
DISPLAY "Numero fattura" NFATT
DISPLAY "Importo fattura @R" IMPFATT
DISPLAY "Importo effetto @R" IMPORTO
DISPLAY "Tipo" TIPOPAG
DISPLAY "Nr distinta" NDIST
DISPLAY "Tipo pag." TIPOPAG
DISPLAY "Nr. distinta" NDIST
DISPLAY "Tipo distinta" TIPODIST
COPY OUTPUT F_NPROGTR
CHECKTYPE REQUIRED
HELP "Inserire la data di scadenza dell'effetto"
END
NUMBER F_IMPORTO 15
LIST F_TIPOPAG 24
BEGIN
PROMPT 42 5 "Importo effetto "
FIELD LF_EFFETTI->IMPORTO
PROMPT 2 6 "Tipo pagamento "
FIELD LF_EFFETTI->TIPOPAG
ITEM "2|Tratta"
ITEM "3|Ricevuta Bancaria"
ITEM "4|Cessione"
ITEM "5|Paghero'"
ITEM "6|Lettera di credito"
ITEM "7|Tratta accettata"
ITEM "8|Rapporti interb. diretti"
ITEM "9|Bonifici"
END
STRING F_ULTCLASS 1
BEGIN
PROMPT 46 6 "Ulteriore classificazione "
FIELD LF_EFFETTI->ULTCLASS
USE %CLR
INPUT CODTAB[1,1] F_TIPOPAG SELECT
INPUT CODTAB[2,2] F_ULTCLASS
DISPLAY "Classificazione" CODTAB[2,2]
DISPLAY "Descrizione@50" S0
OUTPUT F_ULTCLASS CODTAB[2,2]
END
STRING F_CODVAL 3
BEGIN
PROMPT 2 7 "Codice valuta "
FIELD LF_EFFETTI->CODVAL
FLAGS "UZ"
USE %VAL
INPUT CODTAB F_CODVAL
DISPLAY "Codice" CODTAB
DISPLAY "Nome@50" S0
OUTPUT F_CODVAL CODTAB
CHECKTYPE NORMAL
END
DATA F_DATACAM
BEGIN
PROMPT 46 7 "Data cambio "
FIELD LF_EFFETTI->DATACAMBIO
FLAGS "R"
PICTURE "."
HELP "Inserire l'importo dell'effetto"
VALIDATE NOT_EMPTY_FUNC
WARNING "Manca l'importo dell'effetto"
USE CAM
INPUT CODTAB[1,3] F_CODVAL SELECT
INPUT CODTAB[4,11] F_DATACAM
DISPLAY "Valuta@9" CODTAB[1,3]
DISPLAY "Data@12" D0
DISPLAY "Cambio@19" R10
OUTPUT F_DATACAM D0
OUTPUT F_CAMBIO R10
CHECKTYPE SEARCH
GROUP 1
END
STRING F_NFATT 7
BEGIN
PROMPT 2 7 "Nr. fattura "
FIELD LF_EFFETTI->NFATT
VALIDATE NOT_EMPTY_FUNC
HELP "Inserire il numero della fattura"
WARNING "Manca il numero della fattura"
END
DATE F_DATAFATT
BEGIN
PROMPT 2 8 "Data fattura "
FIELD LF_EFFETTI->DATAFATT
VALIDATE NOT_EMPTY_FUNC
HELP "Inserire la data della fattura"
WARNING "Manca la data della fattura"
END
NUMBER F_IMPFATT 15
BEGIN
PROMPT 42 8 "Importo fattura "
FIELD LF_EFFETTI->IMPFATT
FLAGS "R"
PICTURE "."
NUM_EXPR {#THIS_FIELD>=#F_IMPORTO}
HELP "Inserire l'importo della fattura"
WARNING "L'importo dell'effetto deve essere contenuto nell'importo di fattura"
END
NUMBER F_NRATA 3
BEGIN
PROMPT 2 9 "Nr. rata "
FIELD LF_EFFETTI->NRATA
HELP "Inserire il numero della rata"
NUMBER F_CAMBIO 15 5
BEGIN
PROMPT 2 8 "Cambio "
FIELD LF_EFFETTI->CAMBIO
FLAGS "RU"
PICTURE ".5"
CHECKTYPE REQUIRED
WARNING "E' stata specificata una valuta senza il cambio relativo"
GROUP 1
END
BOOLEAN F_ULTRATA
BEGIN
PROMPT 42 9 "Ultima rata"
PROMPT 46 8 "Ultima rata"
FIELD LF_EFFETTI->ULTRATA
HELP "Inserire se e' l'ultima rata relativa alla fattura"
END
GROUPBOX DLG_NULL 38 4
SPREADSHEET F_SHEET_RIGHE 76 7
BEGIN
PROMPT 1 10 "Banca d'appoggio"
PROMPT 2 10 "RIGHE EFFETTO"
ITEM "Importo fatt.@18"
ITEM "Importo effet.@18"
ITEM "Imp.fatt.val.@18"
ITEM "Imp.effet.val.@18"
ITEM "Anno partita"
ITEM "Nr. partita"
ITEM "Nr. riga"
ITEM "Nr. rata"
ITEM "Nr. fattura"
ITEM "Data fattura"
END
NUMBER F_TOTIMP 18 2
BEGIN
PROMPT 2 18 "Totale importi "
FLAG "D"
END
NUMBER F_TOTIMPVAL 18 3
BEGIN
PROMPT 2 19 "Totale importi in valuta "
FLAG "D"
//GROUP 1
END
ENDPAGE
PAGE "Gestione Effetti 2/3" 0 -1 0 19
GROUPBOX DLG_NULL 38 4
BEGIN
PROMPT 1 1 "BANCA D'APPOGGIO"
END
NUMBER F_CODABI 5
BEGIN
PROMPT 2 11 "Codice ABI "
PROMPT 2 2 "Codice ABI "
FIELD LF_EFFETTI->CODABI
FLAGS "RZ"
USE %BAN KEY 1 SELECT CODTAB ?="?????"
USE %BAN KEY 1 SELECT CODTAB ?= "?????"
INPUT CODTAB F_CODABI
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
DISPLAY "Denominazione@50" S0
OUTPUT F_CODABI CODTAB[1,5]
OUTPUT F_CODCAB CODTAB[6,10]
CHECKTYPE REQUIRED
HELP "Inserire il codice ABI della banca d'appoggio"
WARNING "Codice ABI assente"
END
NUMBER F_CODCAB 5
BEGIN
PROMPT 2 12 "Codice CAB "
PROMPT 2 3 "Codice CAB "
FIELD LF_EFFETTI->CODCAB
FLAGS "RZ"
USE %BAN
USE %BAN KEY 1 SELECT CODTAB ?= "??????????"
INPUT CODTAB[1,5] F_CODABI
INPUT CODTAB[6,10] F_CODCAB
COPY DISPLAY F_CODABI
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
DISPLAY "Denominazione@50" S0
OUTPUT F_CODABI CODTAB[1,5]
OUTPUT F_CODCAB CODTAB[6,10]
CHECKTYPE REQUIRED
HELP "Inserire il codice CAB della banca d'appoggio"
VALIDATE REQIF_FUNC 1 F_CODCABP
WARNING "Banca assente"
END
GROUPBOX DLG_NULL 38 4
BEGIN
PROMPT 41 10 "Banca di presentazione"
PROMPT 41 1 "BANCA DI PRESENTAZIONE"
END
NUMBER F_CODABIP 5
BEGIN
PROMPT 42 11 "Codice ABI "
PROMPT 42 2 "Codice ABI "
FIELD LF_EFFETTI->CODABIP
FLAGS "RZ"
USE %BAN KEY 1 SELECT CODTAB ?="?????"
USE %BAN KEY 1 SELECT CODTAB ?= "?????"
INPUT CODTAB F_CODABIP
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]
CHECKTYPE NORMAL
HELP "Inserire il codice ABI della banca di presentazione effetti"
WARNING "Codice ABI assente"
END
NUMBER F_CODCABP 5
BEGIN
PROMPT 42 12 "Codice CAB "
PROMPT 42 3 "Codice CAB "
FIELD LF_EFFETTI->CODCABP
FLAGS "RZ"
USE %BAN
USE %BAN KEY 1 SELECT CODTAB ?= "??????????"
INPUT CODTAB[1,5] F_CODABIP
INPUT CODTAB[6,10] F_CODCABP
COPY DISPLAY F_CODABIP
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]
CHECKTYPE NORMAL
HELP "Inserire il codice CAB della banca di presentazione effetti"
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 F_CODCABP
WARNING "Banca assente"
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 14 "Dati stampa"
PROMPT 1 5 ""
END
DATE F_DATAEMISS
BEGIN
PROMPT 2 15 "Data di emissione "
PROMPT 2 6 "Data di emissione "
FIELD LF_EFFETTI->DATAEMISS
END
NUMBER F_NUMEMISS 8
BEGIN
PROMPT 48 15 "Nr. di emissione "
PROMPT 42 6 "Nr. di emissione "
FIELD LF_EFFETTI->NUMEMISS
END
NUMBER F_IMPBOLLO 15
BEGIN
PROMPT 2 16 "Importo bollo "
FIELD LF_EFFETTI->IMPBOLLO
FLAGS "R"
PICTURE "."
END
BOOLEAN F_EFFSTAMP
BEGIN
PROMPT 48 16 "Effetto stampato"
PROMPT 2 7 "Effetto stampato"
FIELD LF_EFFETTI->EFFSTAMP
END
ENDPAGE
PAGE "Pag. 2" 0 -1 0 19
GROUPBOX DLG_NULL 78 4
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 0 "Dati distinta"
PROMPT 1 9 ""
END
LIST F_TIPODIST 15
BEGIN
PROMPT 2 1 "Tipo distinta "
PROMPT 2 10 "Tipo distinta "
FIELD LF_EFFETTI->TIPODIST
ITEM " |** Nessuno **"
MESSAGE DISABLE,2@|RESET,2@
ITEM "I|All'incasso"
MESSAGE ENABLE,2@|UNDO,2@
MESSAGE ENABLE,2@
ITEM "B|Salvo buon fine"
MESSAGE ENABLE,2@|UNDO,2@
MESSAGE ENABLE,2@
ITEM "S|Allo sconto"
MESSAGE ENABLE,2@|UNDO,2@
HELP "Inserire il tipo di distinta"
MESSAGE ENABLE,2@
END
NUMBER F_NDIST 8
BEGIN
PROMPT 53 1 "Nr Distinta "
PROMPT 52 10 "Nr. distinta "
FIELD LF_EFFETTI->NDIST
FLAGS "D"
VALIDATE NOT_EMPTY_FUNC
HELP "Inserire il numero della distinta"
WARNING "Numero di distinta obbligatorio se si e' inserito il tipo di distinta"
GROUP 2
END
DATE F_DATADIST
BEGIN
PROMPT 2 2 "Data distinta "
PROMPT 2 11 "Data distinta "
FIELD LF_EFFETTI->DATADIST
FLAGS "D"
HELP "Inserire la data della distinta"
GROUP 2
END
BOOLEAN F_DISTSTAM
BEGIN
PROMPT 36 2 "Stampata"
PROMPT 2 12 "Distinta stampata"
FIELD LF_EFFETTI->DISTSTAM
FLAGS "D"
HELP "Inserire se la distinta e' stato stampata"
GROUP 2
END
NUMBER F_NRIGADIST 6
BEGIN
PROMPT 53 2 "Nr di riga "
PROMPT 52 12 "Nr. di riga "
FIELD LF_EFFETTI->NRIGADIST
FLAGS "D"
HELP "Inserire il numero di riga della distinta"
GROUP 2
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 4 "Dati Ri.Ba."
PROMPT 1 14 ""
END
DATE F_DATARIBA
BEGIN
PROMPT 2 5 "Data Ri.Ba. "
PROMPT 2 15 "Data Ri.Ba. "
FIELD LF_EFFETTI->DATARIBA
HELP "Inserire la data della Ricevuta Bancaria"
END
BOOLEAN F_DISRIBAEST
BEGIN
PROMPT 49 5 "Distinta Ri.Ba. estratta"
PROMPT 52 15 "Distinta Ri.Ba. estratta"
FIELD LF_EFFETTI->DISRIBAEST
END
NUMBER F_CODFOR 6
BEGIN
PROMPT 2 7 "Cod. fornitore "
FIELD LF_EFFETTI->CODFOR
USE LF_CLIFO KEY 1
INPUT TIPOCF "F"
INPUT CODCF F_CODFOR
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Sospeso" SOSPESO
OUTPUT F_CODFOR CODCF
CHECKTYPE NORMAL
HELP "Inserire il codice del fornitore relativo alla cessione"
END
BOOLEAN F_EFFCONT
BEGIN
PROMPT 49 7 "Effetto contabilizzato"
PROMPT 2 17 "Effetto contabilizzato"
FIELD LF_EFFETTI->EFFCONT
HELP "Inserire se l'effetto e' contabilizzato"
END
SPREADSHEET F_SHEET_EFF 76 4
BOOLEAN F_EFFCOMP
BEGIN
PROMPT 2 10 "Obbligati principali"
PROMPT 52 17 "Effetto completato"
FIELD LF_EFFETTI->EFFCOMP
END
ENDPAGE
PAGE "Gestione Effetti 3/3" 0 -1 0 19
SPREADSHEET F_SHEET_EFF 76 8
BEGIN
PROMPT 2 1 "OBBLIGATI PRINCIPALI"
ITEM "Ragione Sociale@50"
ITEM "Localita'@35"
ITEM "Stato"
@ -397,14 +393,10 @@ BEGIN
ITEM "Comune@50"
END
BOOLEAN F_EFFCOMP
BEGIN
PROMPT 2 15 "Effetto compilato"
FIELD LF_EFFETTI->EFFCOMP
END
ENDPAGE
ENDMASK
#include "ef0100c.uml"
#include "ef0100b.uml"

View File

@ -4,76 +4,76 @@ PAGE "Obbligati principali" -1 -1 76 12
STRING F_RAGSOC 50
BEGIN
PROMPT 2 2 "Rag. sociale "
HELP "Inserire la ragione sociale dell'obbligato"
PROMPT 2 2 "Rag. sociale "
HELP "Inserire la ragione sociale dell'obbligato"
END
STRING F_LOCALITA 35
BEGIN
PROMPT 2 4 "Localita "
HELP "Inserire la localita dell'obbligato"
PROMPT 2 4 "Localita' "
HELP "Inserire la localita dell'obbligato"
END
NUMBER F_STATO 3
BEGIN
PROMPT 60 4 "Stato "
FLAGS "RZ"
USE %STA
INPUT CODTAB F_STATO
DISPLAY "Codice" CODTAB
DISPLAY "Stato@50" S0
OUTPUT F_STATO CODTAB
CHECKTYPE NORMAL
WARNING "Stato assente"
HELP "Inserire lo stato in cui risiede l'obbligato"
PROMPT 60 4 "Stato "
FLAGS "RZ"
USE %STA
INPUT CODTAB F_STATO
DISPLAY "Codice" CODTAB
DISPLAY "Stato@50" S0
OUTPUT F_STATO CODTAB
CHECKTYPE NORMAL
WARNING "Stato assente"
HELP "Inserire lo stato in cui risiede l'obbligato"
END
STRING F_COM 4
BEGIN
PROMPT 2 6 "Comune "
FLAGS "U"
USE LF_COMUNI
INPUT STATO F_STATO
INPUT COM F_COM
DISPLAY "Stato" STATO
DISPLAY "Codice" COM
DISPLAY "Comune@50" DENCOM
OUTPUT F_STATO STATO
OUTPUT F_COM COM
OUTPUT F_DENCOM DENCOM
CHECKTYPE NORMAL
WARNING "Comune assente"
HELP "Inserire il comune in cui risiede l'obbligato"
ADD MASK ba4100a
PROMPT 2 6 "Comune "
FLAGS "U"
USE LF_COMUNI
INPUT STATO F_STATO
INPUT COM F_COM
DISPLAY "Stato" STATO
DISPLAY "Codice" COM
DISPLAY "Comune@50" DENCOM
OUTPUT F_STATO STATO
OUTPUT F_COM COM
OUTPUT F_DENCOM DENCOM
CHECKTYPE NORMAL
WARNING "Comune assente"
HELP "Inserire il comune in cui risiede l'obbligato"
ADD MASK ba4100a
END
STRING F_DENCOM 50
BEGIN
PROMPT 24 6 ""
USE LF_COMUNI KEY 2
INPUT DENCOM F_DENCOM
DISPLAY "Comune @50" DENCOM
DISPLAY "Stato" STATO
DISPLAY "Codice" COM
COPY OUTPUT F_COM
CHECKTYPE NORMAL
ADD MASK ba4100a
PROMPT 24 6 ""
USE LF_COMUNI KEY 2
INPUT DENCOM F_DENCOM
DISPLAY "Comune @50" DENCOM
DISPLAY "Stato" STATO
DISPLAY "Codice" COM
COPY OUTPUT F_COM
CHECKTYPE NORMAL
ADD MASK ba4100a
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -13 -1 ""
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -23 -1 ""
PROMPT -23 -1 ""
END
BUTTON DLG_DELREC 9 2
BEGIN
PROMPT -33 -1 "Elimina"
MESSAGE EXIT, K_DEL
PROMPT -33 -1 "Elimina"
MESSAGE EXIT, K_DEL
END
ENDPAGE

View File

@ -1,121 +1,186 @@
#include "effetti.h"
#include "effetti.h"
#include "reffetti.h"
#include "cession.h"
#include "ef0101.h"
/////////////////////////////////////////////////////////////
TEffObb::TEffObb():TRelation(LF_EFFETTI), _oldobbligati(0)
//////// Riga Effetto
/////////////////////////////////////////////////////////////
TRiga_effetto::TRiga_effetto(TEffetto* eff)
: TRectype(LF_REFFETTI), _eff(eff)
{
add(LF_CESS,"NPROGTR=NPROGTR");
}
void TEffObb::destroy_rows()
TRiga_effetto::TRiga_effetto(const TRiga_effetto& rec, TEffetto* eff)
: TRectype(rec), _eff(eff)
{
_obbligati.destroy();
}
TRectype& TEffObb::obbligato(int i)
{
TRectype *r=(TRectype*)_obbligati.objptr(i);
/////////////////////////////////////////////////////////////
////////// Effetto
/////////////////////////////////////////////////////////////
TEffetto::TEffetto()
: TRectype(LF_EFFETTI), _righe(LF_REFFETTI, "NRIGATR"), _cess(LF_CESS, "NRIGA")
{
}
if (r == NULL)
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)
{
r = new TRectype(LF_CESS);
_obbligati.add(r,i);
}
return *r;
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;
}
int TEffObb::read_obbligati()
long TEffetto::renum(long numeff)
{
const TLocalisamfile& robb = lfile(LF_CESS);
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;
}
position_rels();
destroy_rows();
for (bool ok=is_first_match(LF_CESS);ok;ok=next_match(LF_CESS))
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)
{
const int nriga=robb.get_int(CES_NRIGA) -1;
obbligato(nriga)=robb.curr();
_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);
}
_oldobbligati=obbligati_items();
return NOERR;
}
int TEffObb::read(TIsamop op, TReclock lockop, TDate& atdate)
{
int err=file().read(op,lockop,atdate);
if (err==NOERR) read_obbligati();
return err;
}
int TEffObb::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 TEffetto::read(char tipodist, long ndist, long nrigadist)
{
TRectype rec(LF_EFFETTI);
set_key4(rec, tipodist,ndist, nrigadist);
return read(rec);
}
int TEffObb::cancella(TLocalisamfile& f, int da, int a)
{
const long nprogtr=lfile().get_long(EFF_NPROGTR);
int TEffetto::write(bool force)
{
const bool nuovo = numero() <= 0; // E' nuovo di zecca!
if (nuovo && force) // quindi ...
force = FALSE; // ... non fare la rewrite
for (int i=da; i<=a;i++)
TLocalisamfile eff(LF_EFFETTI);
int err = NOERR;
if (force)
{
f.zero();
f.put(CES_NPROGTR,nprogtr);
f.put(CES_NRIGA,i);
if (f.read(_isequal,_lock)==NOERR)
f.remove();
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 f.status();
return err;
}
int TEffObb::registra(bool re, bool force)
{
TLocalisamfile& c=lfile(LF_EFFETTI);
int err=write_rec(re,c.curr(),c);
if (err!=NOERR) return err;
TLocalisamfile& robb=lfile(LF_CESS);
const long nprogtr=c.get_long(CES_NPROGTR);
for (int i=0; i<obbligati_items(); i++)
{
if (!re)
obbligato(i).put(CES_NPROGTR,nprogtr);
err=write_rec(TRUE,obbligato(i),robb);
}
if (i<_oldobbligati)
cancella(robb,i+1,_oldobbligati);
_oldobbligati=obbligati_items();
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;
}
int TEffObb::write(bool force, TDate&)
{
_oldobbligati=0;
return registra(FALSE,force);
}
int TEffObb::rewrite(bool force, TDate&)
{
return registra(TRUE,force);
}
int TEffObb::remove(TDate&)
{
TLocalisamfile& c=lfile(LF_EFFETTI);
c.remove();
TLocalisamfile& robb=lfile(LF_CESS);
cancella(robb,1,_oldobbligati);
_oldobbligati=0;
return c.status();
}

View File

@ -2,37 +2,91 @@
#include <relation.h>
#endif
class TEffetto;
/////////////////////////////////////////////////
// classe per gestire le righe di un effetto
////////////////////////////////////////////////
class TEffObb:public TRelation
class TRiga_effetto : public TRectype
{
// @DPRIV
TArray _obbligati;
int _oldobbligati;
// @END
TEffetto * _eff;
protected:
// @FPROT
int write_rec(bool re, const TRectype& r, TLocalisamfile& f);
int cancella(TLocalisamfile& f, int da, int a);
int registra(bool re, bool force);
int read_obbligati();
// @END
public:
virtual int next(TReclock lockop=_nolock) {return (lfile().next(lockop) || read_obbligati());}
virtual int prev(TReclock lockop=_nolock) {return (lfile().prev(lockop) || read_obbligati());}
virtual int first(TReclock lockop=_nolock) {return (lfile().first(lockop) || read_obbligati());}
virtual int last(TReclock lockop=_nolock) {return (lfile().last(lockop) || read_obbligati());}
virtual int skip(TReclock lockop=_nolock) {return (lfile().skip(lockop) || read_obbligati());}
virtual int read(TIsamop = _isgteq, TReclock lockop = _nolock, 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 remove(TDate& atdate = (TDate&) botime);
TRectype& obbligato(int i);
int obbligati_items() const {return _obbligati.items();}
void destroy_rows();
TEffObb();
virtual ~TEffObb() {}
TObject* dup() const // duplica l'oggetto corrente
{ return new TRiga_effetto(*this); }
public:
int numeror() const // restituisce il numero della riga
{ return get_int("NRIGATR");}
void set_numeror(int numero) // setta il valore del numero di riga con quello passato
{ put("NRIGATR", numero);}
void set_eff(TEffetto * eff) // setta l'effetto con quello passato
{ _eff = eff; }
const TEffetto & eff() const
{ CHECK(_eff, "Effetto nullo"); return *_eff;}
TRiga_effetto(TEffetto* eff);
TRiga_effetto(const TRiga_effetto& rec, TEffetto* eff);
virtual ~TRiga_effetto() {}
};
/////////////////////////////////////////////////
// classe per gestire gli effetti
////////////////////////////////////////////////
class TEffetto:public TRectype
{
TRecord_array _righe,_cess;
protected:
long get_next_key(const long codcf) const; // ritorna la prossima chiave
public:
long renum(long numeff = 0); // rinumera le chiavi
const TRectype& head() const
{ return *this; } // Ritorna la testata dell'effetto
TRectype& head()
{ return *this; }
TRecord_array& righe() {return _righe;}
TRecord_array& cess() {return _cess;}
TRectype& row_c(int i, bool create=FALSE)
{ return _cess.row(i,create); } // ritorna la riga i dei cessionari
TRectype& row_r(int i, bool create=FALSE)
{ return _righe.row(i,create); } // ritorna la riga i delle righe
int rows_r() const // ritorna il numero delle righe presenti
{ return _righe.rows(); } // nelle righe effetto
int rows_c() const // ritorna il numero delle righe presenti
{ return _cess.rows(); } // nei cessionari
bool destroy_row_r(int n, bool pack = FALSE) // elimina l'elemento riga nella posizione n
{ return _righe.destroy_row(n, pack); } // nelle righe effetto
void destroy_rows_r() // elimina tutti gli elementi riga
{ _righe.destroy_rows(); } // nelle righe effetto
bool destroy_row_c(int n, bool pack = FALSE) // elimina l'elemento riga nella posizione n
{ return _cess.destroy_row(n, pack); } // nei cessionari
void destroy_rows_c() // elimina tutti gli elementi riga
{ _cess.destroy_rows(); } // nei cessionari
int read(const TRectype& rec);
int read(char tipodist, long ndist, long nrigadist);
int write(bool force=FALSE);
int rewrite()
{ return write(TRUE); }
int remove()const;
long numero() const // metodi per ritornare i campi chiave
{ return get_long("NPROGTR"); } // del file EFFETTI
long codicec() const
{ return get_long("CODCF"); }
TDate datasc() const
{ return get_date("DATASCAD"); }
char tipodist() const
{ return get_char("TIPODIST"); }
long ndist() const
{ return get_long("NDIST"); }
long nrgdist() const
{ return get_long("NRIGADIST"); }
void set_key4(TRectype& rec,char tipodist, long ndist, long nrigadist); //setta i campi per la quarta chiave del file
void set_key(TRectype& rec,long numeff) const; //setta i campi per la chiave
TEffetto();
TEffetto(TRectype& rec);
virtual ~TEffetto() {}
};