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 <utility.h>
#include <lffiles.h> #include <lffiles.h>
#include <clifo.h> #include <clifo.h>
#include "effetti.h" #include <comuni.h>
#include "cession.h" #include <effetti.h>
#include <reffetti.h>
#include <cession.h>
#include "ef0.h" #include "ef0.h"
#include "ef0100.h" #include "ef0100.h"
#include "ef0101.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; TMask *_msk;
TEffObb *_rel; 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(); virtual const char* get_next_key();
TSheet_field& obb_sheet() const; TSheet_field& cess_sheet() const;
void obb_pack(); TSheet_field& righe_sheet() const;
void common_f(const TMask& m); void common_f(const TMask& m);
static void calcola_totali();
virtual int read(TMask& m); virtual int read(TMask& m);
virtual int rewrite(const TMask& m); virtual int rewrite(const TMask& m);
virtual int write(const TMask& m); virtual int write(const TMask& m);
virtual bool remove();
bool user_create(); bool user_create();
bool user_destroy(); bool user_destroy();
virtual TMask* get_mask(int mode) {return _msk;} virtual TMask* get_mask(int mode) {return _msk;}
virtual bool changing_mask(int mode) {return FALSE;} virtual bool changing_mask(int mode) {return FALSE;}
public: 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;} 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(); TLocalisamfile& effetti=_rel->lfile();
long nprogtr=1L; long nprogtr=1L;
if ( !effetti.empty() )
if (!effetti.empty())
{ {
effetti.zero(); effetti.zero();
effetti.setkey(1); effetti.setkey(1);
effetti.last(); effetti.last();
if (effetti.good()) if ( effetti.good() )
nprogtr+=effetti.get_long(EFF_NPROGTR); nprogtr+=effetti.get_long(EFF_NPROGTR);
} }
return format("%d|%ld",F_NPROGTR,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; 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(); TSheet_field& r_sheet = (TSheet_field&)_msk->field(F_SHEET_RIGHE);
int nr=rows.items(); return r_sheet;
for (int i=0;i<nr;i++)
{
TToken_string& riga=(TToken_string&)rows[i];
if (riga.empty_items())
rows.destroy(i,FALSE);
}
} }
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); long nprogtr = m.get_long(F_NPROGTR);
_rel->lfile().zero();
m.autosave(*_rel); m.autosave(*_rel);
// LF_CESS SAVER! _effetto->head() = _rel->curr();
_rel->destroy_rows();
obb_pack(); TSheet_field& shcess = cess_sheet();
TArray& rows=obb_sheet().rows_array(); TSheet_field& shrighe = righe_sheet();
for (int i=0; i<rows.items();i++)
int items = shcess.items();
_effetto->destroy_rows_c();
int ii = 0;
for (int i = 0; i < items; i++)
{ {
TToken_string& row=(TToken_string&)rows[i]; TToken_string& row = shcess.row(i);
TRectype& rec=_rel->obbligato(i); if ( row.items()!= 0 )
row.restart(); {
rec.zero(); TRectype& rec = _effetto->row_c(ii+1, TRUE);
rec.put(CES_NPROGTR,nprogtr); row.restart();
rec.put(CES_NRIGA,i+1); rec.zero();
rec.put(CES_RAGSOC,row.get()); rec.put(CES_NPROGTR, nprogtr);
rec.put(CES_LOCALITA,row.get()); rec.put(CES_NRIGA, ii+1);
rec.put(CES_STATO,row.get_int()); rec.put(CES_RAGSOC, row.get());
rec.put(CES_COM,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(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); m.autoload(*_rel);
// LF_CESS loader! int err = _rel->status();
TToken_string riga(80); if (err == NOERR)
obb_sheet().reset();
for (int i=0; i<_rel->obbligati_items();i++)
{ {
TRectype& rec=_rel->obbligato(i); err = _effetto->read(_rel->curr());
riga.cut(0); if (err == NOERR)
riga.add(rec.get(CES_RAGSOC)); {
riga.add(rec.get(CES_LOCALITA)); TString16 codcom(3);
riga.add(rec.get(CES_STATO)); TToken_string riga(80);
riga.add(rec.get(CES_COM));
obb_sheet().row(i)=riga; 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); 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); 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") ; _msk = new TMask("ef0100a") ;
_rel = new TEffObb; _rel = new TRelation(LF_EFFETTI);
_reff = new TLocalisamfile(LF_REFFETTI);
_msk->set_handler(F_CODCF,codcf_handler); _cess = new TLocalisamfile(LF_CESS);
_msk->set_handler(F_EFFCOMP,effcomp_handler); _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; return TRUE;
} }
bool Variazione_Effetti::user_destroy() bool TVariazione_effetti::user_destroy()
{ {
delete _msk; delete _msk;
delete _rel; delete _rel;
delete _effetto;
delete _reff;
delete _cess;
delete _com;
return TRUE; 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; TMask& m = f.mask();
TString ragsoc(50); const int mode = m.mode();
TToken_string line; if ( k==K_ENTER && (mode== MODE_INS || mode== MODE_MOD) )
TLocalisamfile clifo(LF_CLIFO);
TArray_sheet cli(-1,-1,59,20,"Clienti","Codice|Ragione sociale@50|Sospeso|Codice fiscale@18");
switch (k)
{ {
case K_TAB:
if (f.focusdirty()) // When changing focus put customer's name 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++)
{ {
clifo.zero(); TToken_string& row=sf.row(i);
clifo.setkey(1); real imp_eff(row.get(1));
clifo.put(CLI_TIPOCF,"C"); if (imp_eff != 0.0) found=TRUE;
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; if (!found)
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); error_box("L'effetto deve contenere almeno una riga!");
if (codcf == clifo.get_long(CLI_CODCF)) n=cli.items(); return FALSE;
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;
} }
return TRUE; return TRUE;
} }
bool Variazione_Effetti::effcomp_handler(TMask_field& f, KEY k) //Permette il controllo sulla abilitazione dei campi collegati al codice
// valuta
bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
{ {
if (!f.mask().get(F_NRATA).empty()) TMask &m = f.mask();
f.set("X"); TString val(f.get());
if (f.to_check(k, TRUE))
{
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;
}
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; return TRUE;
} }
int ef0100(int argc, char* argv[]) int ef0100(int argc, char* argv[])
{ {
Variazione_Effetti a ; TVariazione_effetti a ;
a.run(argc, argv, "Gestione effetti"); a.run(argc, argv, "Gestione Effetti");
return 0; return 0;
} }

View File

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

View File

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

View File

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

View File

@ -1,121 +1,186 @@
#include "effetti.h" #include "effetti.h"
#include "reffetti.h"
#include "cession.h" #include "cession.h"
#include "ef0101.h" #include "ef0101.h"
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
//////// Riga Effetto
/////////////////////////////////////////////////////////////
TEffObb::TEffObb():TRelation(LF_EFFETTI), _oldobbligati(0) 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) /////////////////////////////////////////////////////////////
////////// Effetto
/////////////////////////////////////////////////////////////
TEffetto::TEffetto()
: TRectype(LF_EFFETTI), _righe(LF_REFFETTI, "NRIGATR"), _cess(LF_CESS, "NRIGA")
{ {
TRectype *r=(TRectype*)_obbligati.objptr(i); }
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); TLocalisamfile eff(LF_EFFETTI);
_obbligati.add(r,i); 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");
}
} }
return *r; n++;
return n;
} }
int TEffObb::read_obbligati() long TEffetto::renum(long numeff)
{ {
const TLocalisamfile& robb = lfile(LF_CESS); if (numeff <= 0)
position_rels();
destroy_rows();
for (bool ok=is_first_match(LF_CESS);ok;ok=next_match(LF_CESS))
{ {
const int nriga=robb.get_int(CES_NRIGA) -1; long codcf = codicec();
obbligato(nriga)=robb.curr(); numeff = get_next_key(codcf);
} }
_oldobbligati=obbligati_items(); char num[7]; sprintf(num, "%ld", numeff);
return NOERR; renum_key("NPROGTR", num); // aggiorna testata
_righe.renum_key("NPROGTR", num); // aggiorna righe ok
_cess.renum_key("NPROGTR", num); // aggiorna cessionari ok
return numeff;
} }
int TEffObb::read(TIsamop op, TReclock lockop, TDate& atdate) int TEffetto::read(const TRectype& rec)
{ {
int err=file().read(op,lockop,atdate); head() = rec;
if (err==NOERR) read_obbligati(); 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)
{
_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);
}
return err; return err;
} }
int TEffObb::write_rec(bool re, const TRectype& rec, TLocalisamfile& f) int TEffetto::read(char tipodist, long ndist, long nrigadist)
{ {
if (re) TRectype rec(LF_EFFETTI);
{ set_key4(rec, tipodist,ndist, nrigadist);
const bool scrivi= (f.rewrite(rec)!=NOERR); return read(rec);
if (scrivi) f.write(rec);
} else
f.write(rec);
return f.status();
} }
int TEffObb::cancella(TLocalisamfile& f, int da, int a) int TEffetto::write(bool force)
{ {
const long nprogtr=lfile().get_long(EFF_NPROGTR); 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(); if ((err=_righe.write(force)) == NOERR) err = _cess.write(force);
f.put(CES_NPROGTR,nprogtr); if (err == NOERR)
f.put(CES_NRIGA,i); {
if (f.read(_isequal,_lock)==NOERR) err = TRectype::rewrite(eff);
f.remove(); if (err != NOERR)
} err = TRectype::write(eff);
return f.status(); }
} }
else
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) if (nuovo)
obbligato(i).put(CES_NPROGTR,nprogtr); {
err=write_rec(TRUE,obbligato(i),robb); 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);
} }
if (i<_oldobbligati)
cancella(robb,i+1,_oldobbligati);
_oldobbligati=obbligati_items();
return err; return err;
} }
int TEffObb::write(bool force, TDate&) int TEffetto::remove()const
{ {
_oldobbligati=0; TLocalisamfile eff(LF_EFFETTI);
return registra(FALSE,force); int err;
if ((err=_righe.remove()) == NOERR) err= _cess.remove();
if (err == NOERR)
err = TRectype::remove(eff);
return err;
} }
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> #include <relation.h>
#endif #endif
class TEffetto;
/////////////////////////////////////////////////
// classe per gestire le righe di un effetto
//////////////////////////////////////////////// ////////////////////////////////////////////////
class TRiga_effetto : public TRectype
class TEffObb:public TRelation
{ {
// @DPRIV TEffetto * _eff;
TArray _obbligati;
int _oldobbligati;
// @END
protected: protected:
// @FPROT TObject* dup() const // duplica l'oggetto corrente
int write_rec(bool re, const TRectype& r, TLocalisamfile& f); { return new TRiga_effetto(*this); }
int cancella(TLocalisamfile& f, int da, int a);
int registra(bool re, bool force);
int read_obbligati();
// @END
public: public:
virtual int next(TReclock lockop=_nolock) {return (lfile().next(lockop) || read_obbligati());} int numeror() const // restituisce il numero della riga
virtual int prev(TReclock lockop=_nolock) {return (lfile().prev(lockop) || read_obbligati());} { return get_int("NRIGATR");}
virtual int first(TReclock lockop=_nolock) {return (lfile().first(lockop) || read_obbligati());} void set_numeror(int numero) // setta il valore del numero di riga con quello passato
virtual int last(TReclock lockop=_nolock) {return (lfile().last(lockop) || read_obbligati());} { put("NRIGATR", numero);}
virtual int skip(TReclock lockop=_nolock) {return (lfile().skip(lockop) || read_obbligati());} void set_eff(TEffetto * eff) // setta l'effetto con quello passato
virtual int read(TIsamop = _isgteq, TReclock lockop = _nolock, TDate& atdate = (TDate&) botime); { _eff = eff; }
virtual int write(bool force=TRUE, TDate& atdate = (TDate&) botime); const TEffetto & eff() const
virtual int rewrite(bool force=TRUE, TDate& atdate = (TDate&) botime); { CHECK(_eff, "Effetto nullo"); return *_eff;}
virtual int remove(TDate& atdate = (TDate&) botime); TRiga_effetto(TEffetto* eff);
TRiga_effetto(const TRiga_effetto& rec, TEffetto* eff);
TRectype& obbligato(int i); virtual ~TRiga_effetto() {}
int obbligati_items() const {return _obbligati.items();} };
void destroy_rows();
/////////////////////////////////////////////////
TEffObb(); // classe per gestire gli effetti
virtual ~TEffObb() {} ////////////////////////////////////////////////
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() {}
}; };