Finito prototipo programma gestione distinte

git-svn-id: svn://10.65.10.50/trunk@3920 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
paola 1996-11-22 17:17:26 +00:00
parent b701a96e66
commit 1a6c398836
10 changed files with 850 additions and 437 deletions

View File

@ -11,9 +11,8 @@
#include "ef0.h" #include "ef0.h"
#include "ef0100.h" #include "ef0100.h"
#include "ef0101.h" #include "ef0101.h"
// Classe per la gestione di effetti con metodi standard di:
//Classe per la gestione di effetti con metodi // inserimento, modifica, cancellazione.
// standard di: inserimento, modifica, cancellazione.
class TVariazione_effetti: public TRelation_application class TVariazione_effetti: public TRelation_application
{ {
TMask *_msk; TMask *_msk;
@ -45,14 +44,17 @@ public:
virtual ~TVariazione_effetti() {}; virtual ~TVariazione_effetti() {};
}; };
// restituisce un riferimento all' applicazione
inline TVariazione_effetti& app() {return (TVariazione_effetti&)main_app();} inline TVariazione_effetti& app() {return (TVariazione_effetti&)main_app();}
// quando si va in query mode resetta i due campi della maschera
void TVariazione_effetti::init_query_mode(TMask&) void TVariazione_effetti::init_query_mode(TMask&)
{ {
_msk->reset(F_TOTIMP); _msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL); _msk->reset(F_TOTIMPVAL);
} }
// quando si va in insert mode resetta i due campi della maschera,
// inserisce una riga vuota nello sheet e setta il flag dirty dello sheet
// per forzare l'utente all'inserimento di una riga
void TVariazione_effetti::init_insert_mode(TMask&) void TVariazione_effetti::init_insert_mode(TMask&)
{ {
_msk->reset(F_TOTIMP); _msk->reset(F_TOTIMP);
@ -61,8 +63,7 @@ void TVariazione_effetti::init_insert_mode(TMask&)
righe_sheet().row(0)=riga; righe_sheet().row(0)=riga;
righe_sheet().set_dirty(); righe_sheet().set_dirty();
} }
// ritorna il prossimo numero valido di chiave
//Ritorna il prossimo numero valido di chiave
const char* TVariazione_effetti::get_next_key() const char* TVariazione_effetti::get_next_key()
{ {
TLocalisamfile& effetti=_rel->lfile(); TLocalisamfile& effetti=_rel->lfile();
@ -77,33 +78,27 @@ const char* TVariazione_effetti::get_next_key()
} }
return format("%d|%ld",F_NPROGTR,nprogtr); return format("%d|%ld",F_NPROGTR,nprogtr);
} }
// ritorna un riferimento allo sheet dei cessionari
//Ritorna un riferimento allo sheet dei cessionari
TSheet_field& TVariazione_effetti::cess_sheet() const 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;
} }
// ritorna un riferimento allo sheet delle righe
//Ritorna un riferimento allo sheet delle righe
TSheet_field& TVariazione_effetti::righe_sheet() const TSheet_field& TVariazione_effetti::righe_sheet() const
{ {
TSheet_field& r_sheet = (TSheet_field&)_msk->field(F_SHEET_RIGHE); TSheet_field& r_sheet = (TSheet_field&)_msk->field(F_SHEET_RIGHE);
return r_sheet; return r_sheet;
} }
// metodo che permette di scivere su file i dati inseriti nella maschera;
//Metodo che permette di scivere su file i dati inseriti nella maschera; // comune alla write e alla rewrite
// comune a write e rewrite
void TVariazione_effetti::common_f(const TMask& m) void TVariazione_effetti::common_f(const TMask& m)
{ {
long nprogtr = m.get_long(F_NPROGTR); long nprogtr = m.get_long(F_NPROGTR);
m.autosave(*_rel); m.autosave(*_rel);
_effetto->head() = _rel->curr(); _effetto->head() = _rel->curr();
TSheet_field& shcess = cess_sheet(); TSheet_field& shcess = cess_sheet();
TSheet_field& shrighe = righe_sheet(); TSheet_field& shrighe = righe_sheet();
int items = shcess.items(); int items = shcess.items();
_effetto->destroy_rows_c(); _effetto->destroy_rows_c();
int ii = 0; int ii = 0;
@ -122,7 +117,6 @@ void TVariazione_effetti::common_f(const TMask& m)
rec.put(CES_COM, row.get()); rec.put(CES_COM, row.get());
ii++; ii++;
} }
items = shrighe.items(); items = shrighe.items();
_effetto->destroy_rows_r(); _effetto->destroy_rows_r();
ii = 0; ii = 0;
@ -150,24 +144,23 @@ void TVariazione_effetti::common_f(const TMask& m)
} }
_effetto->renum(_effetto->numero()); _effetto->renum(_effetto->numero());
} }
// carica nella maschera i dati dai files
int TVariazione_effetti::read(TMask& m) int TVariazione_effetti::read(TMask& m)
{ {
m.autoload(*_rel); m.autoload(*_rel);
TLocalisamfile f(LF_EFFETTI);
int err = _rel->status(); int err = _rel->status();
if (err == NOERR) if (err == NOERR)
{ {
err = _effetto->read(_rel->curr()); err = _effetto->read(f, _rel->curr());
if (err == NOERR) if (err == NOERR)
{ {
TString16 codcom(3); TString16 codcom(3);
TToken_string riga(80); TToken_string riga(80);
TSheet_field& shcess = cess_sheet(); TSheet_field& shcess = cess_sheet();
shcess.reset(); shcess.reset();
TSheet_field& shrighe = righe_sheet(); TSheet_field& shrighe = righe_sheet();
shrighe.reset(); shrighe.reset();
int items = _effetto->rows_c(); int items = _effetto->rows_c();
for (int i = 1; i <= items; i++) for (int i = 1; i <= items; i++)
{ {
@ -183,7 +176,6 @@ int TVariazione_effetti::read(TMask& m)
if (_com->read() == NOERR) riga.add(_com->get(COM_DENCOM)); if (_com->read() == NOERR) riga.add(_com->get(COM_DENCOM));
shcess.row(i-1)=riga; shcess.row(i-1)=riga;
} }
items = _effetto->rows_r(); items = _effetto->rows_r();
for (i = 1; i <= items; i++) for (i = 1; i <= items; i++)
{ {
@ -205,25 +197,28 @@ int TVariazione_effetti::read(TMask& m)
} }
return err; return err;
} }
// riscrive i dati su file
int TVariazione_effetti::rewrite(const TMask& m) int TVariazione_effetti::rewrite(const TMask& m)
{ {
common_f(m); common_f(m);
return _effetto->rewrite(); TLocalisamfile f(LF_EFFETTI);
return _effetto->rewrite(f);
} }
// scrive i dati su file
int TVariazione_effetti::write(const TMask& m) int TVariazione_effetti::write(const TMask& m)
{ {
common_f(m); common_f(m);
int err = _effetto->write(); TLocalisamfile f(LF_EFFETTI);
if (err == NOERR) int err = _effetto->write(f);
_rel->read(); // per posizionare correttamente la relazione if (err == NOERR)
_rel->read();// rilegge per posizionare correttamente la relazione
return err; return err;
} }
// rimuove i dati dell'effetto
bool TVariazione_effetti::remove() bool TVariazione_effetti::remove()
{ {
return _effetto->remove() == NOERR; TLocalisamfile f(LF_EFFETTI);
return _effetto->remove(f) == NOERR;
} }
bool TVariazione_effetti::user_create() bool TVariazione_effetti::user_create()
@ -240,7 +235,6 @@ bool TVariazione_effetti::user_create()
righe_sheet().set_notify(impeff_notify); righe_sheet().set_notify(impeff_notify);
return TRUE; return TRUE;
} }
bool TVariazione_effetti::user_destroy() bool TVariazione_effetti::user_destroy()
{ {
delete _msk; delete _msk;
@ -251,16 +245,14 @@ bool TVariazione_effetti::user_destroy()
delete _com; delete _com;
return TRUE; return TRUE;
} }
// handler che permette di effettuare il controllo sul fatto che venga inserita
//Permette di effettuare il controllo sul fatto che venga inserita almeno una // almeno una riga per un effetto
// riga per un effetto
bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k) bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
{ {
TMask& m = f.mask(); TMask& m = f.mask();
const int mode = m.mode(); const int mode = m.mode();
if ( k==K_ENTER && (mode== MODE_INS || mode== MODE_MOD) ) if ( k==K_ENTER && (mode== MODE_INS || mode== MODE_MOD) )
{ {
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE); TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE);
int items = sf.items(); int items = sf.items();
bool found=FALSE; bool found=FALSE;
@ -278,9 +270,8 @@ bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
} }
return TRUE; return TRUE;
} }
// handler che permette il controllo sulla abilitazione dei campi collegati
//Permette il controllo sulla abilitazione dei campi collegati al codice // al codice valuta
// valuta
bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k) bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
{ {
TMask &m = f.mask(); TMask &m = f.mask();
@ -290,14 +281,16 @@ bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
const bool condition = (val == "LIT" || val.empty()); const bool condition = (val == "LIT" || val.empty());
m.enable(-1,!condition); m.enable(-1,!condition);
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE); TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE);
if (condition){ if (condition)
{
m.reset(-1); m.reset(-1);
m.reset(F_TOTIMPVAL); m.reset(F_TOTIMPVAL);
int items = sf.items(); int items = sf.items();
for (int i= 0; i < items; i++){ for (int i= 0; i < items; i++)
TToken_string& row = sf.row(i); {
row.add(" ", 2); TToken_string& row = sf.row(i);
row.add(" ", 3); row.add(" ", 2);
row.add(" ", 3);
} }
} }
sf.enable_column(F_IMPFATTVAL, !condition); sf.enable_column(F_IMPFATTVAL, !condition);
@ -306,7 +299,8 @@ bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
} }
return TRUE; return TRUE;
} }
// funzione chiamata dal notify dello sheet per effettuare il calcolo degli importi totali
// (in lire ed in valuta) dell'effetto
void TVariazione_effetti::calcola_totali() void TVariazione_effetti::calcola_totali()
{ {
TMask* m = app()._msk; TMask* m = app()._msk;
@ -324,7 +318,8 @@ void TVariazione_effetti::calcola_totali()
m->set(F_TOTIMP, impeff); m->set(F_TOTIMP, impeff);
m->set(F_TOTIMPVAL, impeffval); m->set(F_TOTIMPVAL, impeffval);
} }
// notify per il calcolo dei totali dell'effetto e per il controllo che non vengano eliminate
// tutte le righe dell'effetto, almeno una deve rimanere
bool TVariazione_effetti::impeff_notify(TSheet_field& s, int r, KEY key) bool TVariazione_effetti::impeff_notify(TSheet_field& s, int r, KEY key)
{ {
if (s.to_check(key, TRUE)) calcola_totali(); if (s.to_check(key, TRUE)) calcola_totali();

View File

@ -44,14 +44,6 @@ BEGIN
INPUT CODCF F_CODCF INPUT CODCF F_CODCF
DISPLAY "Ragione sociale@60" RAGSOC DISPLAY "Ragione sociale@60" RAGSOC
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
/*
DISPLAY "Codice cliente" CODCF
DISPLAY "Nr. progressivo" NPROGTR
DISPLAY "Data scadenza" DATASCAD
DISPLAY "Tipo distinta" TIPODIST
DISPLAY "Nr. distinta" NDIST
COPY OUTPUT F_NPROGTR
*/
OUTPUT F_CODCF CODCF OUTPUT F_CODCF CODCF
OUTPUT F_CFRAGSOC RAGSOC OUTPUT F_CFRAGSOC RAGSOC
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
@ -61,17 +53,10 @@ STRING F_CFRAGSOC 50
BEGIN BEGIN
PROMPT 26 3 "" PROMPT 26 3 ""
USE LF_CLIFO KEY 2 USE LF_CLIFO KEY 2
//JOIN LF_EFFETTI TO LF_CLIFO KEY 2 INTO CODCF==CODCF
INPUT TIPOCF "C" INPUT TIPOCF "C"
INPUT RAGSOC F_CFRAGSOC INPUT RAGSOC F_CFRAGSOC
DISPLAY "Ragione sociale@60" RAGSOC DISPLAY "Ragione sociale@60" RAGSOC
DISPLAY "Codice" CODCF 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 COPY OUTPUT F_CODCF
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
@ -88,7 +73,6 @@ BEGIN
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 "Tipo pag." TIPOPAG
DISPLAY "Nr. distinta" NDIST DISPLAY "Nr. distinta" NDIST
DISPLAY "Tipo distinta" TIPODIST DISPLAY "Tipo distinta" TIPODIST
COPY OUTPUT F_NPROGTR COPY OUTPUT F_NPROGTR

View File

@ -2,35 +2,35 @@
#include "reffetti.h" #include "reffetti.h"
#include "cession.h" #include "cession.h"
#include "ef0101.h" #include "ef0101.h"
// costruttore di default
TEffetto::TEffetto() TEffetto::TEffetto()
: TRectype(LF_EFFETTI), _righe(LF_REFFETTI, "NRIGATR"), _cess(LF_CESS, "NRIGA") : TRectype(LF_EFFETTI), _righe(LF_REFFETTI, "NRIGATR"), _cess(LF_CESS, "NRIGA")
{ {
} }
// costuisce l'effetto con il record passato
TEffetto::TEffetto(TRectype& rec) TEffetto::TEffetto(TRectype& rec)
: TRectype(LF_EFFETTI), _righe(LF_REFFETTI, "NRIGATR"), _cess(LF_CESS, "NRIGA") : TRectype(LF_EFFETTI), _righe(LF_REFFETTI, "NRIGATR"), _cess(LF_CESS, "NRIGA")
{ {
read(rec); TLocalisamfile f(LF_EFFETTI);
read(f,rec);
} }
//setta i campi per la prima chiave (nprogtr) del file
void TEffetto::put_key(TRectype& rec, long numeff) const void TEffetto::put_key(TRectype& rec, long numeff) const
{ {
CHECKD(numeff >= 0, "Numero effetto non valido ", numeff); CHECKD(numeff >= 0, "Numero effetto non valido ", numeff);
rec.put("NPROGTR",numeff); rec.put("NPROGTR",numeff);
} }
//setta i campi per la quarta chiave (tipodist+ndist+nrigadist) del file
void TEffetto::put_key(TRectype& rec,char tipodist, long ndist, long nrigadist) void TEffetto::put_key(TRectype& rec,char tipodist, long ndist, long nrigadist)
{ {
CHECK(tipodist == 'I' || tipodist == 'S' || tipodist == 'B', "Tipo distinta"); CHECK(tipodist == 'I' || tipodist == 'S' || tipodist == 'B' || tipodist == 0, "Tipo distinta");
CHECKD(ndist >= 0, "Numero distinta non valido ", ndist); CHECKD(ndist >= 0, "Numero distinta non valido ", ndist);
CHECKD(nrigadist >= 0, "Numero riga distinta non valido ", nrigadist); CHECKD(nrigadist >= 0, "Numero riga distinta non valido ", nrigadist);
rec.put("TIPODIST", tipodist); rec.put("TIPODIST", tipodist);
rec.put("NDIST", ndist); rec.put("NDIST", ndist);
rec.put("NRIGADIST", nrigadist); rec.put("NRIGADIST", nrigadist);
} }
// ritorna la prossima chiave utilizzabile (il prossimo numero progressivo)
long TEffetto::get_next_key(const long codcf) const long TEffetto::get_next_key(const long codcf) const
{ {
static long n = 0; static long n = 0;
@ -39,9 +39,7 @@ long TEffetto::get_next_key(const long codcf) const
TLocalisamfile eff(LF_EFFETTI); TLocalisamfile eff(LF_EFFETTI);
TRectype& curr = eff.curr(); TRectype& curr = eff.curr();
put_key(curr, 9999999L); put_key(curr, 9999999L);
const int err = eff.read(_isgreat); const int err = eff.read(_isgreat);
if (err != _isemptyfile) if (err != _isemptyfile)
{ {
if (err == NOERR) if (err == NOERR)
@ -53,7 +51,7 @@ long TEffetto::get_next_key(const long codcf) const
n++; n++;
return n; return n;
} }
// rinumera la chiave 1
long TEffetto::renum(long numeff) long TEffetto::renum(long numeff)
{ {
if (numeff <= 0) if (numeff <= 0)
@ -68,7 +66,18 @@ long TEffetto::renum(long numeff)
return numeff; return numeff;
} }
int TEffetto::read(TLocalisamfile &f, const TRectype& r) // restituisce il prossimo effetto
int TEffetto::next(TBaseisamfile& f)
{
const int err = f.next();
*this = f.curr();
return err;
}
// permette di leggere il record passato nel file passato, comune alla lettura
// per chiave 1 e per chiave 4
int TEffetto::leggi(TLocalisamfile &f, const TRectype& r)
{ {
int err = TRectype::read(f); int err = TRectype::read(f);
const long nu = numero(); const long nu = numero();
@ -97,42 +106,40 @@ int TEffetto::read(TLocalisamfile &f, const TRectype& r)
} }
return err; return err;
} }
// legge il record passato, con chiave 1
int TEffetto::read(const TRectype& rec) int TEffetto::read(TLocalisamfile& f, const TRectype& rec)
{ {
TLocalisamfile eff(LF_EFFETTI);
head() = rec; head() = rec;
return read(eff, rec); return leggi(f, rec);
} }
// legge l'effetto usando la chiave 4
int TEffetto::read(char tipodist, long ndist, long nrigadist) int TEffetto::read(TLocalisamfile& f, char tipodist, long ndist, long nrigadist)
{ {
TLocalisamfile eff(LF_EFFETTI); f.setkey(4);
eff.setkey(4);
TRectype rec(LF_EFFETTI); TRectype rec(LF_EFFETTI);
put_key(rec, tipodist,ndist, nrigadist); put_key(rec, tipodist, ndist, nrigadist);
head() = rec; head() = rec;
int err = read(eff, rec); int err = leggi(f, rec);
/*if (err == _iskeynotfound)
err = f.next();*/
return err; return err;
} }
// scrive l'effetto, sempre usando la chiave 1
int TEffetto::write(bool force) int TEffetto::write(TLocalisamfile& f, bool force)
{ {
const bool nuovo = numero() <= 0; // E' nuovo! const bool nuovo = numero() <= 0; // E' nuovo!
if (nuovo && force) // quindi ... if (nuovo && force) // quindi ...
force = FALSE; // ... non fare la rewrite force = FALSE; // ... non fare la rewrite
f.setkey(1);//per evitare problemi in quanto la chiave 4 e' duplicabile
TLocalisamfile eff(LF_EFFETTI);
eff.setkey(1);
int err = NOERR; int err = NOERR;
if (force) if (force)
{ {
if ((err=_righe.write(force)) == NOERR) err= _cess.write(force); if ((err=_righe.write(force)) == NOERR) err= _cess.write(force);
if (err == NOERR) if (err == NOERR)
{ {
err = TRectype::rewrite(eff); err = TRectype::rewrite(f);
if (err != NOERR) if (err != NOERR)
err = TRectype::write(eff); err = TRectype::write(f);
} }
} }
else else
@ -144,42 +151,28 @@ int TEffetto::write(bool force)
myself.renum(); myself.renum();
do do
{ {
err = TRectype::write(eff); err = TRectype::write(f);
if (err == _isreinsert) if (err == _isreinsert)
myself.renum(); myself.renum();
} while (err == _isreinsert); } while (err == _isreinsert);
} }
else else
{ {
err = TRectype::write(eff); err = TRectype::write(f);
if (err != NOERR) if (err != NOERR)
err = TRectype::rewrite(eff); err = TRectype::rewrite(f);
} }
if (err == NOERR) if (err == NOERR)
if ((err=_righe.write(force)) == NOERR) err= _cess.write(force); if ((err=_righe.write(force)) == NOERR) err= _cess.write(force);
} }
return err; return err;
} }
// rimuove l'effetto
int TEffetto::remove()const int TEffetto::remove(TLocalisamfile& f)const
{ {
TLocalisamfile eff(LF_EFFETTI);
int err; int err;
if ((err=_righe.remove()) == NOERR) err= _cess.remove(); if ((err=_righe.remove()) == NOERR) err= _cess.remove();
if (err == NOERR) if (err == NOERR)
err = TRectype::remove(eff); err = TRectype::remove(f);
return err; return err;
} }

View File

@ -1,74 +1,74 @@
#ifndef __RELATION_H #ifndef __RELATION_H
#include <relation.h> #include <relation.h>
#endif #endif
class TEffetto:public TRectype class TEffetto:public TRectype
{ {
TRecord_array _righe,_cess; TRecord_array _righe,// righe dell'effetto
_cess;// cessionari dell'effetto
protected: protected:
// ritorna la prossima chiave // ritorna la prossima chiave
long get_next_key(const long codcf) const; long get_next_key(const long codcf) const;
int read(TLocalisamfile& f, const TRectype& rec); // permette di leggere il record passato nel file passato
int leggi(TLocalisamfile& f, const TRectype& rec);
public: public:
// rinumera le chiavi // rinumera la chiave 1
long renum(long numeff = 0); long renum(long numeff = 0);
// ritorna la testata dell'effetto // ritorna un riferimento alla testata dell'effetto
const TRectype& head() const const TRectype& head() const { return *this; }
{ return *this; } // ritorna un riferimento alla testata dell'effetto
// ritorna la testata dell'effetto TRectype& head() { return *this; }
TRectype& head() // ritorna un riferimento alle righe dell'effetto
{ return *this; } TRecord_array& righe() {return _righe;}
TRecord_array& righe() {return _righe;} // ritorna un riferimento ai cessionari dell'effetto
TRecord_array& cess() {return _cess;} TRecord_array& cess() {return _cess;}
// ritorna la riga i_esima dei cessionari // ritorna la riga i_esima dei cessionari
TRectype& row_c(int i, bool create=FALSE) TRectype& row_c(int i, bool create=FALSE) { return _cess.row(i,create); }
{ return _cess.row(i,create); }
// ritorna la riga i delle righe // ritorna la riga i delle righe
TRectype& row_r(int i, bool create=FALSE) TRectype& row_r(int i, bool create=FALSE) { return _righe.row(i,create); }
{ return _righe.row(i,create); }
// ritorna il numero delle righe presenti nelle righe effetto // ritorna il numero delle righe presenti nelle righe effetto
int rows_r() const int rows_r() const { return _righe.rows(); }
{ return _righe.rows(); }
// ritorna il numero delle righe presenti nei cessionari // ritorna il numero delle righe presenti nei cessionari
int rows_c() const int rows_c() const { return _cess.rows(); }
{ return _cess.rows(); }
// elimina l'elemento riga nella posizione n nelle righe effetto // elimina l'elemento riga nella posizione n nelle righe effetto
bool destroy_row_r(int n, bool pack = FALSE) bool destroy_row_r(int n, bool pack = FALSE) { return _righe.destroy_row(n, pack); }
{ return _righe.destroy_row(n, pack); }
// elimina tutti gli elementi riga nelle righe effetto // elimina tutti gli elementi riga nelle righe effetto
void destroy_rows_r() void destroy_rows_r() { _righe.destroy_rows(); }
{ _righe.destroy_rows(); }
// elimina l'elemento riga nella posizione n nei cessionari // elimina l'elemento riga nella posizione n nei cessionari
bool destroy_row_c(int n, bool pack = FALSE) bool destroy_row_c(int n, bool pack = FALSE) { return _cess.destroy_row(n, pack); }
{ return _cess.destroy_row(n, pack); }
// elimina tutti gli elementi riga nei cessionari // elimina tutti gli elementi riga nei cessionari
void destroy_rows_c() void destroy_rows_c() { _cess.destroy_rows(); }
{ _cess.destroy_rows(); } // legge il record passato, con chiave 1
int read(const TRectype& rec); // restituisce il prossimo effetto
int read(char tipodist, long ndist, long nrigadist); int next(TBaseisamfile& f);
int write(bool force=FALSE); int read(TLocalisamfile& f, const TRectype& rec);
int rewrite() // legge il record passato, con chiave 4
{ return write(TRUE); } int read(TLocalisamfile& f, char tipodist, long ndist, long nrigadist);
int remove()const; // scrive l'effetto, sempre usando la chiave 1
long numero() const int write(TLocalisamfile& f, bool force = FALSE);
{ return get_long("NPROGTR"); } // riscrive l'effetto
long codicec() const int rewrite(TLocalisamfile& f) { return write(f, TRUE); }
{ return get_long("CODCF"); } // rimuove l'effetto
TDate datasc() const int remove(TLocalisamfile& f)const;
{ return get_date("DATASCAD"); } // restituisce il numero progressivo dell'effetto estraendolo dal record
char tipodist() const long numero() const { return get_long("NPROGTR"); }
{ return get_char("TIPODIST"); } // restituisce il codice del cliente intestatario dell'effetto estraendolo dal record
long ndist() const long codicec() const { return get_long("CODCF"); }
{ return get_long("NDIST"); } // restituisce la data di scadenza dell'effetto estraendola dal record
long nrgdist() const TDate datasc() const { return get_date("DATASCAD"); }
{ return get_long("NRIGADIST"); } // restituisce il tipo di distinta a cui appartiene l'effetto estraendolo dal record
char tipodist() const { return get_char("TIPODIST"); }
// restituisce il numero della distinta a cui appartiene l'effetto estraendolo dal record
long ndist() const { return get_long("NDIST"); }
// restituisce il numero della riga distinta a cui appartiene l'effetto estraendolo dal record
long nrgdist() const { return get_long("NRIGADIST"); }
//setta i campi per la quarta chiave del file //setta i campi per la quarta chiave del file
void put_key(TRectype& rec,char tipodist, long ndist, long nrigadist = 0); void put_key(TRectype& rec,char tipodist, long ndist, long nrigadist = 0);
//setta i campi per la prima chiave del file //setta i campi per la prima chiave del file
void put_key(TRectype& rec,long numeff) const; void put_key(TRectype& rec,long numeff) const;
// costruttore di default
TEffetto(); TEffetto();
TEffetto(TRectype& rec); // costuisce l'effetto con il record passato
TEffetto(TRectype& rec);
// distruttore di default
virtual ~TEffetto() {} virtual ~TEffetto() {}
}; };

View File

@ -16,33 +16,52 @@ class TVariazione_distinte: public TRelation_application
{ {
TMask *_msk, *_m2; TMask *_msk, *_m2;
TDistinta *_distinta; TDistinta *_distinta;
TRelation *_rel; TRelation *_rel;
TLocalisamfile *_reff, *_cession; TLocalisamfile *_reff, *_cession, *_clifo;
protected: protected:
virtual void init_query_mode(TMask&); virtual void init_query_mode(TMask&);
virtual void init_insert_mode(TMask&); virtual void init_insert_mode(TMask&);
virtual void init_modify_mode(TMask&);
virtual const char* get_next_key(); virtual const char* get_next_key();
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(char tipodist, long ndist); virtual bool remove();
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;}
static bool aggiungi_handler(TMask_field& f, KEY k);
static bool elimina_handler(TMask_field& f, KEY k); static bool codval_handler(TMask_field& f, KEY k);
static bool impdist_notify(TSheet_field& s, int r, KEY key); static bool importo_handler(TMask_field& f, KEY k);
static bool m2_handler(TMask& m, KEY key); static bool imp_aut_handler(TMask_field& f, KEY k);
static bool impdist_notify(TSheet_field& s, int r, KEY key);
static bool imp_notify(TSheet_field& s, int r, KEY key);
static bool conferma_handler(TMask_field& f, KEY k); static bool conferma_handler(TMask_field& f, KEY k);
static bool annulla_handler(TMask_field& f, KEY k); static bool annulla_handler(TMask_field& f, KEY k);
static void calcola_totale(); static bool from_data_handler(TMask_field& f, KEY k);
static bool to_data_handler(TMask_field& f, KEY k);
static bool ordina_handler(TMask_field& f, KEY k);
static void calcola_totale();
static void calcola();
static void aggiungi();
static void carica_riba(); static void carica_riba();
static void ord_data();
static void ord_fatt();
TSheet_field& righe_sheet() const; TSheet_field& righe_sheet() const;
TSheet_field& righe_sel_sheet() const; TSheet_field& righe_sel_sheet() const;
bool cerca(long num); bool cerca(long num);
bool user_create(); bool user_create();
bool user_destroy(); bool user_destroy();
void aggiorna(); void aggiorna();
void elimina(TString16 tipodist, long ndist) ; void elimina();
TToken_string* common_f(const TMask& m); TToken_string* common_f(const TMask& m);
public: public:
virtual TRelation* get_relation() const {return _rel;} virtual TRelation* get_relation() const {return _rel;}
@ -57,6 +76,8 @@ inline TVariazione_distinte& app()
void TVariazione_distinte::init_query_mode(TMask&) void TVariazione_distinte::init_query_mode(TMask&)
{ {
_msk->enable(F_NUMBER);
_msk->enable(F_TIPODIST);
_msk->reset(F_TOTIMP); _msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL); _msk->reset(F_TOTIMPVAL);
} }
@ -65,28 +86,46 @@ void TVariazione_distinte::init_insert_mode(TMask&)
{ {
_msk->reset(F_TOTIMP); _msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL); _msk->reset(F_TOTIMPVAL);
TToken_string riga("|||||||||||");
righe_sheet().row(0)= riga; _msk->enable(F_TOTIMPVAL);
righe_sheet().set_dirty(); _msk->enable(F_CODVAL);
righe_sel_sheet().row(0)= riga;
righe_sel_sheet().set_dirty(); _msk->disable(F_NUMBER);
_msk->disable(F_TIPODIST);
} }
//Ritorna il prossimo numero valido di chiave void TVariazione_distinte::init_modify_mode(TMask&)
{
_msk->disable(F_NUMBER);
_msk->disable(F_TIPODIST);
}
//Ritorna il prossimo numero di distanta valido
const char* TVariazione_distinte::get_next_key() const char* TVariazione_distinte::get_next_key()
{ {
TLocalisamfile& effetti = _rel->lfile();; long ndist = 1L;
long ndist=1L; TLocalisamfile& effetti = _rel->lfile();
if ( !effetti.empty() ) effetti.zero();
{ effetti.put("NDIST",ndist);
effetti.zero(); effetti.setkey(4);
effetti.setkey(4); int err = effetti.read(_isgteq);
effetti.last();
if ( effetti.good() ) if ( (err == _iskeynotfound) || (err == _iseof) ) //se non esiste alcuna distinta:
ndist+=effetti.get_long(EFF_NDIST); { // il numero sarà 1
err == NOERR;
return format("%d|%ld", F_NUMBER, ndist);
} }
return format("%d|%ld",F_NUMBER,ndist);
} while (err == NOERR) //se esitono già delle distinte:
{ // le leggo tutte e ne prendo il
effetti.setkey(4); // numero, al verificarsi della fine file
err = effetti.next(); // ho l'ultimo numero utilizzato
long n = effetti.get_long("NDIST"); // incrementandolo avrò il numero che cercavo.
if (n > ndist)
ndist = n;
}
return format("%d|%ld",F_NUMBER,++ndist);
}
//Ritorna un riferimento allo sheet degli effetti (righe) nella distinta //Ritorna un riferimento allo sheet degli effetti (righe) nella distinta
TSheet_field& TVariazione_distinte::righe_sheet() const TSheet_field& TVariazione_distinte::righe_sheet() const
@ -108,25 +147,26 @@ bool TVariazione_distinte::cerca(long num)
bool trovato = FALSE; bool trovato = FALSE;
int items = _distinta->items(); int items = _distinta->items();
TArray& righedist = _distinta->righe(); TArray& righedist = _distinta->righe();
for (int i = 0; i < items; i++)//ciclo sugli elementi dell'array for (int i = 0; i < items; i++)//ciclo sugli elementi dell'array
{ { //se l'array è vuoto non trova nulla ed esce subito
TEffetto& eff = (TEffetto&)righedist[i]; TEffetto& eff = (TEffetto&)righedist[i];
long num_eff = eff.get_long("NPROGTR"); long num_eff = eff.get_long("NPROGTR");
if (num_eff == num) if (num_eff == num)
{ {
trovato = TRUE; trovato = TRUE;
continue; break;
} }
} }
return trovato; return trovato;
} }
//Metodo che permette di scivere sull'array gli effetti presenti nello sheet //Metodo che permette di scivere sull'array gli effetti presenti nello sheet
// comune a write e rewrite
void TVariazione_distinte::aggiorna() void TVariazione_distinte::aggiorna()
{ {
TSheet_field& shrighe = righe_sheet(); TSheet_field& shrighe = righe_sheet();
int items = shrighe.items(); int items = shrighe.items();
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
TToken_string& row = shrighe.row(i); TToken_string& row = shrighe.row(i);
@ -147,46 +187,18 @@ void TVariazione_distinte::aggiorna()
} }
} }
//Metodo che permette di eliminare il collegamento tra effetto e distinta per gli //Metodo che permette di prendere i dati dalla maschera e metterli in una TToken_string
//effetti che non fanno parte dell'array //che servirà per passare i dati alla write della distinta
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) TToken_string* TVariazione_distinte::common_f(const TMask& m)
{ {
TString16 tipodist = m.get(F_TIPODIST); char tipodist = m.get(F_TIPODIST)[0];
long ndist = m.get_long(F_NUMBER); long ndist = m.get_long(F_NUMBER);
TDate datadist = (TDate)m.get(F_DATA); TDate datadist = (TDate)m.get(F_DATA);
long codabi = m.get_long(F_CODABIP); long codabi = m.get_long(F_CODABIP);
long codcab = m.get_long(F_CODCABP); long codcab = m.get_long(F_CODCABP);
elimina(tipodist, ndist);
m.autosave(*_rel); m.autosave(*_rel);
TToken_string* datidist= new TToken_string; TToken_string* datidist= new TToken_string;
datidist->cut(0); datidist->cut(0);
datidist->add(tipodist); datidist->add(tipodist);
@ -197,13 +209,15 @@ TToken_string* TVariazione_distinte::common_f(const TMask& m)
return datidist; return datidist;
} }
int TVariazione_distinte::read(TMask& m) int TVariazione_distinte::read(TMask& m)
{ {
m.autoload(*_rel); m.autoload(*_rel);
int err = _rel->status(); int err = _rel->status();
if (err == NOERR) if (err == NOERR)
{ {
err = _distinta->reset(); err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta
err = _distinta->read(_rel->curr()); err = _distinta->read(_rel->curr());
if (err == NOERR) if (err == NOERR)
{ {
@ -212,14 +226,21 @@ int TVariazione_distinte::read(TMask& m)
shrighe.reset(); shrighe.reset();
int items = _distinta->items(); int items = _distinta->items();
TArray& righedist = _distinta->righe(); TArray& righedist = _distinta->righe();
for (int i = 0; i < items; i++)
for (int i = 0; i < items; i++) // carico tutti gli effetti della distinta nello sheet
{ {
TEffetto& eff = (TEffetto&)righedist[i]; TEffetto& eff = (TEffetto&)righedist[i];
riga.cut(0); riga.cut(0);
riga.add(FALSE); riga.add(' ');
riga.add(eff.get(EFF_NPROGTR)); riga.add(eff.get(EFF_NPROGTR));
riga.add(eff.get(EFF_DATASCAD)); riga.add(eff.get(EFF_DATASCAD));
riga.add(eff.get(EFF_CODCF));
long codcf = eff.get_long(EFF_CODCF); //prendo la ragione sociale del cliente
_clifo->zero(); //conoscendone il codice
_clifo->put("TIPOCF", 'C');
_clifo->put("CODCF", codcf);
if (_clifo->read() == NOERR) riga.add(_clifo->get("RAGSOC"));
if (eff.rows_r() == 1) //se l'effetto contiene solo una riga metto i if (eff.rows_r() == 1) //se l'effetto contiene solo una riga metto i
{ //riferimenti al documento ed al numero di rata { //riferimenti al documento ed al numero di rata
const TRectype& rec_r = eff.row_r(1); const TRectype& rec_r = eff.row_r(1);
@ -232,17 +253,23 @@ int TVariazione_distinte::read(TMask& m)
riga.add(("Varie")); riga.add(("Varie"));
riga.add(("Varie")); riga.add(("Varie"));
riga.add(("Varie")); riga.add(("Varie"));
} }
TString codval(3); //gestisco il controllo sulla presenza o meno di una valuta TString codval(3); //gestisco il controllo sulla presenza o meno di una valuta
codval = eff.get(EFF_CODVAL); codval = eff.get(EFF_CODVAL);
const bool condition = (codval.empty()); if (i == 0)
m.enable(F_CODVAL, !condition); {
m.enable(F_TOTIMPVAL, !condition); const bool condition = (codval.empty() || codval == "LIT");
if (!condition) m.enable(F_CODVAL, !condition);
m.set(F_CODVAL, codval); m.enable(F_TOTIMPVAL, !condition);
if (!condition)
m.set(F_CODVAL, codval);
}
riga.add(codval); riga.add(codval);
riga.add(eff.get(EFF_IMPORTO)); riga.add(eff.get(EFF_IMPORTO));
riga.add(eff.get(EFF_IMPORTOVAL)); riga.add(eff.get(EFF_IMPORTOVAL));
shrighe.row(i) = riga; shrighe.row(i) = riga;
} }
} }
@ -250,24 +277,130 @@ int TVariazione_distinte::read(TMask& m)
return err; return err;
} }
//Si prendono tutte le righe dello sheet e si controlla il primo campo se e' a true si distrugge
// la riga e si aggiorna il file.
// GLI EFFETTI PRESENTI NELLO SHEET DEVONO GIA ESSERE STATI REGISTRATI.
void TVariazione_distinte::elimina()
{
TEffetto eff;
TLocalisamfile file(LF_EFFETTI);
char tipodist = _msk->get(F_TIPODIST)[0];
long ndist = _msk->get_long(F_NUMBER);
TDistinta* distinta = app()._distinta;
TSheet_field& sf = (TSheet_field&)_msk->field(F_SHEET_RIBA);
bool condition = FALSE, deleted = FALSE;
TArray& righedist = distinta->righe();
for (int i = 0, k = i+1; i < sf.items(); i++, k++)//ciclo sugli elementi dello sheet
{
if (deleted) i--; //per posizionarsi correttamente sulla prima riga dello sheet
if (sf.items() == 1)
{
error_box("IMPOSSIBILE CANCELLARE: La distinta deve contenere almeno un effetto!");
break;
}
TToken_string& row = sf.row(i);
condition = *row.get(0) == 'X';
if (condition)
{
long num = row.get_long(1);
for (int j = 0; j < distinta->items(); j++)//ciclo sugli elementi dell'array
{
TEffetto& eff = (TEffetto&)righedist[j];
long num_eff = eff.get_long("NPROGTR");
if (num_eff == num)
{
righedist.destroy(j,TRUE);
break;
}
}
sf.destroy(i); deleted = TRUE;
eff.read(file, tipodist, ndist, k);
eff.zero("TIPODIST");
eff.zero("NDIST");
eff.zero("DATADIST");
eff.zero("NRIGADIST");
eff.zero("CODABIP");
eff.zero("CODCABP");
eff.rewrite(file);
}
else deleted = FALSE;
}
}
int TVariazione_distinte::rewrite(const TMask& m) int TVariazione_distinte::rewrite(const TMask& m)
{ {
aggiorna(); TSheet_field& sf = righe_sheet();
return _distinta->rewrite(common_f(m)); bool condition = FALSE;
for (int i = 0; i < sf.items(); i++)
{
TToken_string& row = sf.row(i);
if (condition = *row.get(0) == 'X') break;
}
if (condition)
if (yesno_box("Vuoi veramete eliminare gli effetti selezionati"))
elimina(); //elimino gli effetti nello sheet che sono selezionati con la "X"
int err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta
char tipodist = m.get(F_TIPODIST)[0];
long ndist = m.get_long(F_NUMBER);
aggiorna();
err = _distinta->rewrite(common_f(m));
if (err == NOERR)
{ //riposiziono la relazione
_rel->lfile().setkey(4);
TRectype& curr = _rel->curr();
curr.put("TIPODIST", tipodist);
curr. put("NDIST", ndist);
curr. put("NRIGADIST", 1);
_rel->read();
}
return err;
} }
int TVariazione_distinte::write(const TMask& m) int TVariazione_distinte::write(const TMask& m)
{ {
aggiorna(); int err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta
return _distinta->write(TRUE, common_f(m)); char tipodist = m.get(F_TIPODIST)[0];
} long ndist = m.get_long(F_NUMBER);
bool TVariazione_distinte::remove(char tipodist, long ndist) aggiorna();
{
return _distinta->remove(tipodist, ndist) == NOERR; err = _distinta->write(TRUE, common_f(m));
if (err == NOERR)
{ //riposiziono la relazione
_rel->lfile().setkey(4);
TRectype& curr = _rel->curr();
curr.put("TIPODIST", tipodist);
curr. put("NDIST", ndist);
curr. put("NRIGADIST", 1);
_rel->read();
}
return err;
}
//Metodo che permette di eliminare una distinta, l'eliminazione consiste nell'andare a togliere
// dagli effetti presenti i dati ad essa relativi.
bool TVariazione_distinte::remove()
{
TMask* m = app()._msk;
char tipodist = m->get(F_TIPODIST)[0];
long ndist = m->get_long(F_NUMBER);
int err = _distinta->remove(tipodist, ndist) == NOERR;
return err;
} }
bool TVariazione_distinte::user_create() bool TVariazione_distinte::user_create()
{ {
_msk = new TMask("ef0300a"); _msk = new TMask("ef0300a");
@ -275,14 +408,23 @@ bool TVariazione_distinte::user_create()
_rel = new TRelation(LF_EFFETTI); _rel = new TRelation(LF_EFFETTI);
_reff = new TLocalisamfile(LF_REFFETTI); _reff = new TLocalisamfile(LF_REFFETTI);
_cession = new TLocalisamfile(LF_CESS); _cession = new TLocalisamfile(LF_CESS);
_clifo = new TLocalisamfile(LF_CLIFO);
_distinta = new TDistinta; _distinta = new TDistinta;
set_search_field(F_NUMBER);
_msk->set_handler(B_AGGIUNGI, aggiungi_handler); set_search_field(F_NUMBER); //setto il campo di ricerca della distinta
_msk->set_handler(B_ELIMINA, elimina_handler);
_msk->set_handler(F_CODVAL, codval_handler);
_msk->set_handler(F_IMP, importo_handler);
_m2->set_handler(F_TOTIMPDIST, imp_aut_handler);
_m2->set_handler(DLG_OK, conferma_handler); _m2->set_handler(DLG_OK, conferma_handler);
_m2->set_handler(DLG_CANCEL, annulla_handler); _m2->set_handler(DLG_CANCEL, annulla_handler);
_m2->set_handler(m2_handler); _m2->set_handler(F_DADATA, from_data_handler);
righe_sheet().set_notify(impdist_notify); _m2->set_handler(F_ADATA, to_data_handler);
_m2->set_handler(F_TIPORD, ordina_handler);
righe_sheet().set_notify(impdist_notify);
righe_sel_sheet().set_notify(imp_notify);
return TRUE; return TRUE;
} }
@ -292,37 +434,45 @@ bool TVariazione_distinte::user_destroy()
delete _m2; delete _m2;
delete _rel; delete _rel;
delete _reff; delete _reff;
delete _cession; delete _cession;
delete _clifo;
delete _distinta; delete _distinta;
return TRUE; return TRUE;
} }
//Permette di gestire lo sheet per la selezione delle riba da aggiungere alla distinta //Permette di caricare lo sheet per la selezione delle riba da aggiungere alla distinta:
// vengono presi tutti gli effetti sul file LF_EFFETTI che non hanno ancora un riferimento ad
// una distinta
void TVariazione_distinte::carica_riba() void TVariazione_distinte::carica_riba()
{ {
TLocalisamfile f(LF_EFFETTI); char tipodist = 0;
TRectype rec = f.curr(); long ndist = 0;
f.setkey(4); long nrigadist = 0;
f.put("TIPODIST",""); TEffetto eff;
f.put("NDIST",0); TLocalisamfile f(LF_EFFETTI);
f.put("NRIGADIST",0); TLocalisamfile * clifo = app()._clifo;
f.read(_isgteq); TToken_string riga(80);
TString16 t = rec.get("TIPODIST"); TMask* m2 = app()._m2;
long n = rec.get_long("NDIST"); m2->reset();
TSheet_field& sf = (TSheet_field&)m2->field(F_SHEET);
sf.reset();
int err, i = 0;
int i = 0; err = eff.read(f, tipodist, ndist, nrigadist);
while ((t.empty())&&(n==0)) while ( (err == NOERR) && (tipodist == 0) )
{ { //carico tutti gli effetti che soddisfano alla condizio nello sheet
TToken_string riga(80);
TMask* m2 = app()._m2;
TSheet_field& sf = (TSheet_field&)m2->field(F_SHEET);
sf.reset();
riga.cut(0); riga.cut(0);
riga.add(FALSE); riga.add(' ');
riga.add(rec.get(EFF_NPROGTR)); riga.add(eff.get(EFF_NPROGTR));
riga.add(rec.get(EFF_DATASCAD)); riga.add(eff.get(EFF_DATASCAD));
riga.add(rec.get(EFF_CODCF));
TEffetto eff(rec); long codcf = eff.get_long(EFF_CODCF);
clifo->zero();
clifo->put("TIPOCF", 'C');
clifo->put("CODCF", codcf);
if (clifo->read() == NOERR) riga.add(clifo->get("RAGSOC"));
if (eff.rows_r() == 1) //se l'effetto contiene solo una riga metto i if (eff.rows_r() == 1) //se l'effetto contiene solo una riga metto i
{ //riferimenti al documento ed al numero di rata { //riferimenti al documento ed al numero di rata
const TRectype& rec_r = eff.row_r(1); const TRectype& rec_r = eff.row_r(1);
@ -336,73 +486,308 @@ void TVariazione_distinte::carica_riba()
riga.add(("Varie")); riga.add(("Varie"));
riga.add(("Varie")); riga.add(("Varie"));
} }
riga.add(rec.get(EFF_CODVAL));
riga.add(rec.get(EFF_IMPORTO)); riga.add(eff.get(EFF_CODVAL));
riga.add(rec.get(EFF_IMPORTOVAL)); riga.add(eff.get(EFF_IMPORTO));
riga.add(eff.get(EFF_IMPORTOVAL));
sf.row(i) = riga; sf.row(i) = riga;
f.next();
t = rec.get("TIPODIST");
n = rec.get_long("NDIST");
i++; i++;
f.setkey(4);
err = eff.next(f);
tipodist = eff.get("TIPODIST")[0];
} }
} }
//handler per gestire la pressione del bottone aggiungi della maschera principale(ef0300a) //Handler che permette il controllo sulla abilitazione dei campi collegati
bool TVariazione_distinte::aggiungi_handler(TMask_field& f, KEY k) // al codice valuta
bool TVariazione_distinte::codval_handler(TMask_field& f, KEY k)
{ {
if (k==K_SPACE) TMask &m = f.mask();
{ TString val(f.get());
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) if (f.to_check(k, TRUE))
bool TVariazione_distinte::elimina_handler(TMask_field& f, KEY k) {
{ const bool condition = (val == "LIT" || val.empty());
if (k==K_SPACE) m.enable(F_TOTIMPVAL,!condition);
f.yesno_box("Vuoi veramente eliminare gli effetti"); if (condition)
// SE SI ELIMINARE DALLO SHEET GLI EFFETTI SELEZIONATI (LA RIMOZIONE FISICA SARA' FATTA AL m.reset(F_TOTIMPVAL);
// 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; return TRUE;
} }
//handler per gestire la pressione del bottone annulla della maschera per l'aggiunta delle riba(ef0300c) //Handler per gestire il caricamento degli effetti nella distinta in automatico
bool TVariazione_distinte::annulla_handler(TMask_field& f, KEY k) // relativamente ad un importo fissato (per la maschera princiapale)
{ bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k)
TMask &m = f.mask(); {
TMask* m2 = app()._msk; TMask& m = f.mask();
m.close(); TSheet_field& sf_riba = (TSheet_field&)m.field(F_SHEET_RIBA);
m2->open();
if (f.to_check(k, TRUE))
{
const int mode = m.mode();
if( mode == MODE_INS || mode == MODE_MOD )
{
TMask* m2 = app()._m2;
long imp_pres = m.get_long(F_TOTIMP);
long imp = m.get_long(F_IMP);
long impdist = imp - imp_pres;
if (impdist > 0)
{
app().begin_wait();
carica_riba();
app().end_wait();
m2->reset(F_TOTIMPDIST);
m2->reset(F_IMPSEL);
m2->set(F_TOTIMPDIST, impdist);
m2->run();
}
if (impdist < 0)
error_box("Il valore di presentazione non può superare l'importo della distinta");
}
}
sf_riba.force_update();
sf_riba.set_dirty();
return TRUE;
}
//Handler per gestire il caricamento degli effetti nella distinta in automatico
// relativamente ad un importo fissato (per la maschera secondaria)
bool TVariazione_distinte::imp_aut_handler(TMask_field& f, KEY k)
{
TMask& m2 = f.mask();
if (f.to_check(k, TRUE))
{
TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m2.field(F_SHEET);
TSheet_field& sf_riba = (TSheet_field&)m->field(F_SHEET_RIBA);
long impdist = m->get_long(F_IMP) - m->get_long(F_TOTIMP);
long tot_imp_dist = m2.get_long(F_TOTIMPDIST), impsel = 0;
if (tot_imp_dist != 0 && impdist != 0)
{
TString val = m->get(F_CODVAL);
int items = sf.items();
for(int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
TString codval = row.get(7);
if (codval == " " || codval == "LIT")//se la valuta non appare o è lire
codval.trim(); //faccio in modo che vengano presi gli effetti con valuta inesistente
long imp = row.get_long(8);
if ((imp <= tot_imp_dist) && ((impsel+imp) <= tot_imp_dist))
{
if ((sf_riba.items() == 0) && (val.empty()|| val == "LIT"))//se non è stata specificata una valuta si prende quella del
{ //primo effetto che si carica nella distinta
m->set(F_CODVAL, codval);
val = m->get(F_CODVAL);
}
if (codval == val)
{
row.add('X',0);//seleziono l'effetto poichè soddisfa alle condizione richieste
impsel += imp;
}
}
if (impsel <= tot_imp_dist) continue;
else break;
}
sf.force_update();
calcola();
}
}
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)
{
TMask* msk = app()._msk;
TSheet_field& sf_riba = (TSheet_field&)msk->field(F_SHEET_RIBA);
if (k==K_ENTER)
{
TMask& m = f.mask();
m.close();
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET);
int items = sf.items();
bool condition = FALSE;
for (int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
condition = *row.get(0)== 'X';
if (condition)
{
row[0] = ' ';
sf_riba.row(-1) = row;
}
}
}
sf_riba.force_update();
calcola_totale();
return TRUE; return TRUE;
} }
//Calcola i totali relativi alla distinta (totale in lire e totale in valuta(se presente)) //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();
m.close();
return TRUE;
}
//Handler per gestire la scelta per data
bool TVariazione_distinte::from_data_handler(TMask_field& f, KEY k)
{
if (k == K_TAB)
{
TMask& m = f.mask();
if (!f.get().empty())
{
bool deleted = FALSE;
TDate data = m.get_date(F_DADATA);
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET);
for(int i = 0; i < sf.items(); i++)
{
if (deleted) i--;
TToken_string& row = sf.row(i);
TDate data_sh = (TDate)row.get(2);
if (data_sh < data)
{
sf.destroy(i);
deleted = TRUE;
}
else deleted = FALSE;
}
}
}
return TRUE;
}
//Handler per gestire la scelta per data
bool TVariazione_distinte::to_data_handler(TMask_field& f, KEY k)
{
if (k == K_TAB)
{
TMask& m = f.mask();
if (!f.get().empty())
{
bool deleted = FALSE;
TDate data = m.get_date(F_ADATA);
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET);
for(int i = 0; i < sf.items(); i++)
{
if (deleted) i--;
TToken_string& row = sf.row(i);
TDate data_sh = (TDate)row.get(2);
if (data_sh > data)
{
sf.destroy(i);
deleted = TRUE;
}
else deleted = FALSE;
}
}
}
return TRUE;
}
//COMPARE FUNCTION per l'ordinamento per data degli effetti presenti nello sheet
HIDDEN int confronta_data(const TObject** o1, const TObject** o2)
{
int val;
TToken_string* s1 = (TToken_string*) *o1;
TToken_string* s2 = (TToken_string*) *o2;
TDate data1 = s1->get(2);
TDate data2 = s2->get(2);
if (data1 == data2)
val = 0;
else
val = (data1 > data2) ? +1 : -1;
return val;
}
//Handler per gestire l'ordinamento per data degli effetti presenti nello sheet
void TVariazione_distinte::ord_data()
{
TMask* m = app()._m2;
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET);
TArray& effetti = sf.rows_array();
app().begin_wait();
effetti.sort(confronta_data);
app().end_wait();
sf.force_update();
}
//COMPARE FUNCTION per l'ordinamento per numero e data fattura degli effetti presenti nello sheet
HIDDEN int confronta_fatt(const TObject** o1, const TObject** o2)
{
int val;
TToken_string* s1 = (TToken_string*) *o1;
TToken_string* s2 = (TToken_string*) *o2;
long num1 = s1->get_long(4);
long num2 = s2->get_long(4);
TDate data1 = s1->get(5);
TDate data2 = s2->get(5);
if (num1 != num2)
{
val = (num1 > num2) ? +1 : -1;
return val;
}
if (data1 == data2)
{
val = 0;
return val;
}
else
{
val = (data1 > data2) ? +1 : -1;
return val;
}
}
//Handler per gestire l'ordinamento per numero e data fattura degli effetti presenti nello sheet
void TVariazione_distinte::ord_fatt()
{
TMask* m = app()._m2;
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET);
TArray& effetti = sf.rows_array();
app().begin_wait();
effetti.sort(confronta_fatt);
app().end_wait();
sf.force_update();
}
//Handler per gestire i diversi ordinamenti
bool TVariazione_distinte::ordina_handler(TMask_field& f, KEY k)
{
if (f.to_check(k, TRUE))
{
char ord = f.get()[0];
if (ord == 'S')//ordino gli effetti nello sheet per data
ord_data();
if (ord == 'F')
ord_fatt();//ordino gli effetti nello sheet per fattura
}
return TRUE;
}
//Metodo che calcola i totali relativi alla distinta (totale in lire e totale in valuta(se presente))
void TVariazione_distinte::calcola_totale() void TVariazione_distinte::calcola_totale()
{ {
TMask* m = app()._msk; TMask* m = app()._msk;
@ -412,25 +797,81 @@ void TVariazione_distinte::calcola_totale()
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
TToken_string& row = sf.row(i); TToken_string& row = sf.row(i);
bool condition = *row.get(0) == 'X';
if (condition)
{
imp = row.get(8);
impdist -= imp;
impval = row.get(9);
impdistval -= impval;
}
imp = row.get(8); imp = row.get(8);
impdist += imp; impdist += imp;
impval = row.get(9); impval = row.get(9);
impdistval += impval; impdistval += impval;
} }
m->set(F_TOTIMP, impdist); m->set(F_TOTIMP, impdist);
m->set(F_TOTIMPVAL, impdistval); m->set(F_TOTIMPVAL, impdistval);
m->set(F_IMP, impdist);
} }
//Notify per il calcolo dei totali relativi alla distinta //Metodo che calcola i totali relativi alla selezione effetti per la distinta
void TVariazione_distinte::calcola()
{
TMask* m2 = app()._m2;
TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m2->field(F_SHEET);
int items = sf.items();
real imp, impsel;
long imp_pres = m->get_long(F_TOTIMP);
long importo = m->get_long(F_IMP);
long impdist = importo - imp_pres;
if (impdist == 0)
m2->set(F_TOTIMPDIST, importo);
for (int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
bool condition = *row.get(0) == 'X';
if (condition)
{
imp = row.get(8);
impsel += imp;
m2->set(F_IMPSEL, impsel);
if (impdist == 0 && imp_pres == 0)
m2->set(F_TOTIMPDIST, impsel);
/*if (impdist != 0 && imp_pres != 0)
m2->set(F_TOTIMPDIST, imp_pres+impsel);*/
}
}
}
//Handler per il calcolo dei totali relativi alla selezione effetti per la distinta
bool TVariazione_distinte::imp_notify(TSheet_field& s, int r, KEY key)
{
if (s.to_check(key, TRUE))
calcola();
return TRUE;
}
//Metodo che permette di aggiungere effetti alla distinta caricandoli tra quelli non ancora assegnati
void TVariazione_distinte::aggiungi()
{
TMask* m2 = app()._m2;
app().begin_wait();
carica_riba();
app().end_wait();
m2->reset(F_TOTIMPDIST);
m2->reset(F_IMPSEL);
m2->run();
}
//Handler per il calcolo dei totali relativi alla distinta
bool TVariazione_distinte::impdist_notify(TSheet_field& s, int r, KEY key) bool TVariazione_distinte::impdist_notify(TSheet_field& s, int r, KEY key)
{ {
if (s.to_check(key, TRUE)) if (s.to_check(key, TRUE))
calcola_totale(); calcola_totale();
if (key == K_DEL && s.items()==1) if (key == K_INS)
{ aggiungi();
error_box("IMPOSSIBILE CANCELLARE: La distinta deve contenere almeno un effetto!");
return FALSE;
}
return TRUE; return TRUE;
} }

View File

@ -11,12 +11,12 @@
#define F_DENBANP 105 #define F_DENBANP 105
#define F_CODABIP 106 #define F_CODABIP 106
#define F_CODCABP 107 #define F_CODCABP 107
#define F_TOTIMP 108 #define F_TOTIMP 108
#define F_TOTIMPVAL 109 #define F_IMP 109
#define F_CODVAL 110 #define F_TOTIMPVAL 110
#define F_SHEET_RIBA 111 #define F_CODVAL 111
#define B_AGGIUNGI 112 #define F_SHEET_RIBA 112
#define B_ELIMINA 113
// Identificatori campi per lo spreadsheet Righe Distinta // Identificatori campi per lo spreadsheet Righe Distinta
@ -37,6 +37,8 @@
#define F_DADATA 101 #define F_DADATA 101
#define F_ADATA 102 #define F_ADATA 102
#define F_TIPORD 103 #define F_TIPORD 103
#define F_SHEET 104 #define F_SHEET 104
#define F_TOTIMPDIST 105
#define F_IMPSEL 106
#endif // __EF0300.H #endif // __EF0300.H

View File

@ -1,21 +1,19 @@
#include "ef0300.h" #include "ef0300.h"
TOOLBAR "" 0 20 0 2 TOOLBAR "" 0 20 0 2
#include <toolbar.h> #include <toolbar.h>
ENDPAGE ENDPAGE
PAGE "Gestione Distinte" 0 -1 0 19 PAGE "Gestione Distinte" 0 -1 0 19
GROUPBOX DLG_NULL 78 9 GROUPBOX DLG_NULL 78 10
BEGIN BEGIN
PROMPT 1 0 "" PROMPT 1 0 ""
END END
LIST F_TIPODIST 19 LIST F_TIPODIST 19
BEGIN BEGIN
PROMPT 2 1 "Tipo Distinta " PROMPT 2 1 "Tipo Distinta "
KEY 4 KEY 4
FIELD LF_EFFETTI->TIPODIST FIELD LF_EFFETTI->TIPODIST
ITEM "I|All'incasso" ITEM "I|All'incasso"
@ -24,8 +22,8 @@ BEGIN
END END
LIST F_NUMBERRIGA 10 LIST F_NUMBERRIGA 10
BEGIN BEGIN
PROMPT 1 60 "Numero Riga Distinta" PROMPT 1 60 "Numero Riga Distinta "
KEY 4 KEY 4
FIELD LF_EFFETTI->NRIGADIST FIELD LF_EFFETTI->NRIGADIST
ITEM "1|PRIMA RIGA" ITEM "1|PRIMA RIGA"
@ -33,51 +31,51 @@ BEGIN
END END
NUMBER F_NUMBER 7 NUMBER F_NUMBER 7
BEGIN BEGIN
PROMPT 48 1 "Numero Distinta " PROMPT 48 1 "Numero Distinta "
FIELD LF_EFFETTI->NDIST FIELD LF_EFFETTI->NDIST
FLAGS "R" FLAGS "R"
KEY 4 KEY 4
USE LF_EFFETTI KEY 4 SELECT NRIGADIST = 1 USE LF_EFFETTI KEY 4 SELECT NRIGADIST = 1
INPUT NDIST F_NUMBER
INPUT TIPODIST F_TIPODIST INPUT TIPODIST F_TIPODIST
INPUT NDIST F_NUMBER
INPUT NRIGADIST F_NUMBERRIGA INPUT NRIGADIST F_NUMBERRIGA
DISPLAY "Tipo distinta" TIPODIST
DISPLAY "Nr. distinta" NDIST DISPLAY "Nr. distinta" NDIST
//DISPLAY "Nr. riga distinta" NRIGADIST DISPLAY "Tipo distinta" TIPODIST
OUTPUT F_NUMBER NDIST
OUTPUT F_TIPODIST TIPODIST OUTPUT F_TIPODIST TIPODIST
OUTPUT F_NUMBER NDIST
OUTPUT F_NUMBERRIGA NRIGADIST OUTPUT F_NUMBERRIGA NRIGADIST
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
DATE F_DATA DATE F_DATA
BEGIN BEGIN
PROMPT 2 2 "Data Distinta " PROMPT 2 2 "Data Distinta "
FIELD LF_EFFETTI->DATADIST FIELD LF_EFFETTI->DATADIST
END END
TEXT DLG_NULL TEXT DLG_NULL
BEGIN BEGIN
PROMPT 2 3 "Banca di Presentazione " PROMPT 2 3 "Banca di Presentazione "
END END
STRING F_DENBANP 50 STRING F_DENBANP 50
BEGIN BEGIN
PROMPT 25 3 "" PROMPT 26 3 ""
FLAGS "U" FLAGS "U"
USE %BAN KEY 2 USE %BAN KEY 2
INPUT S0 F_DENBANP INPUT S0 F_DENBANP
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Denominazione@50" S0 DISPLAY "Denominazione@50" S0
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
OUTPUT F_DENBANP S0 OUTPUT F_DENBANP 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]
END END
NUMBER F_CODABIP 5 0 NUMBER F_CODABIP 5 0
BEGIN BEGIN
PROMPT 14 4 "Codice ABI " PROMPT 15 4 "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 ?= "?????"
@ -85,50 +83,62 @@ BEGIN
DISPLAY "Codice ABI" CODTAB[1,5] DISPLAY "Codice ABI" CODTAB[1,5]
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]
OUTPUT F_DENBANP S0 CHECKTYPE REQUIRED
CHECKTYPE NORMAL
WARNING "Codice ABI assente" WARNING "Codice ABI assente"
END END
NUMBER F_CODCABP 5 0 NUMBER F_CODCABP 5 0
BEGIN BEGIN
PROMPT 14 5 "Codice CAB " PROMPT 15 5 "Codice CAB "
FIELD LF_EFFETTI->CODCABP FIELD LF_EFFETTI->CODCABP
FLAGS "RZ" FLAGS "RZ"
USE %BAN KEY 1 SELECT CODTAB ?= "??????????" 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
DISPLAY "Codice ABI" CODTAB[1,5] DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10] 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]
OUTPUT F_DENBANP S0 OUTPUT F_DENBANP S0
CHECKTYPE NORMAL CHECKTYPE REQUIRED
VALIDATE REQIF_FUNC 1 F_CODCABP VALIDATE REQIF_FUNC 1 F_CODCABP
WARNING "Banca assente" WARNING "Banca assente"
END END
NUMBER F_TOTIMP 18 2 NUMBER F_TOTIMP 18 2
BEGIN BEGIN
PROMPT 2 6 "Valore Distinta " PROMPT 2 6 "Valore di presentazione "
END
NUMBER F_IMP 18 2
BEGIN
PROMPT 2 7 "Importo Distinta "
NUM_EXPR #F_IMP>=#F_TOTIMP
WARNING "Il valore di presentazione non puo' superare l'importo della distinta"
END END
NUMBER F_TOTIMPVAL 18 3 NUMBER F_TOTIMPVAL 18 3
BEGIN BEGIN
PROMPT 2 7 "Valore Distinta Val. " PROMPT 2 8 "Valore di pres. in val. "
END END
STTING F_CODVAL 8 STRING F_CODVAL 3
BEGIN BEGIN
PROMPT 48 7 "Codice Valuta " PROMPT 48 8 "Codice Valuta "
FLAGS "UZ"
USE %VAL
INPUT CODTAB F_CODVAL
DISPLAY "Codice" CODTAB
DISPLAY "Nome@50" S0
OUTPUT F_CODVAL CODTAB
END END
SPREADSHEET F_SHEET_RIBA 78 8 SPREADSHEET F_SHEET_RIBA 78 10
BEGIN BEGIN
PROMPT 1 10 "RIGHE DISTINTA" PROMPT 1 10 "RIGHE DISTINTA"
ITEM " " ITEM ""
ITEM "Nr. Ri.Ba." ITEM "Nr. Ri.Ba."
ITEM "Scadenza" ITEM "Scadenza"
ITEM "Cliente@50" ITEM "Cliente@50"
@ -140,20 +150,6 @@ BEGIN
ITEM "Importo Val." ITEM "Importo Val."
END 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 ENDPAGE
ENDMASK ENDMASK

View File

@ -85,6 +85,7 @@ BUTTON DLG_DELREC 9 2
BEGIN BEGIN
PROMPT -33 -1 "Elimina" PROMPT -33 -1 "Elimina"
MESSAGE EXIT, K_DEL MESSAGE EXIT, K_DEL
FLAGS "H"
END END
ENDPAGE ENDPAGE

View File

@ -1,6 +1,6 @@
#include "ef0300.h" #include "ef0300.h"
PAGE "Aggiungi Effetti alla Distinta" -1 -1 78 18 PAGE "Aggiungi Effetti alla Distinta" -1 -1 78 20
GROUPBOX DLG_NULL 60 3 GROUPBOX DLG_NULL 60 3
BEGIN BEGIN
@ -10,15 +10,11 @@ END
DATE F_DADATA DATE F_DADATA
BEGIN BEGIN
PROMPT 2 2 "Dalla Data " PROMPT 2 2 "Dalla Data "
FIELD LF_EFFETTI->DATASCAD
CHECKTYPE NORMAL
END END
DATE F_ADATA DATE F_ADATA
BEGIN BEGIN
PROMPT 30 2 "Alla Data " PROMPT 30 2 "Alla Data "
FIELD LF_EFFETTI->DATASCAD
CHECKTYPE NORMAL
END END
LIST F_TIPORD 14 LIST F_TIPORD 14
@ -29,10 +25,10 @@ BEGIN
ITEM "F|Fattura " ITEM "F|Fattura "
END END
SPREADSHEET F_SHEET 74 8 SPREADSHEET F_SHEET 74 12
BEGIN BEGIN
PROMPT 2 6 "EFFETTI SELEZIONABILI" PROMPT 2 5 "EFFETTI SELEZIONABILI"
ITEM " " ITEM ""
ITEM "Nr. Ri.Ba." ITEM "Nr. Ri.Ba."
ITEM "Scadenza" ITEM "Scadenza"
ITEM "Cliente@50" ITEM "Cliente@50"
@ -44,6 +40,16 @@ BEGIN
ITEM "Importo Val." ITEM "Importo Val."
END END
NUMBER F_TOTIMPDIST 18 2
BEGIN
PROMPT 2 18 "Importo "
END
NUMBER F_IMPSEL 18 2
BEGIN
PROMPT 37 18 "Importo Selezionato "
END
BUTTON DLG_OK 9 2 BUTTON DLG_OK 9 2
BEGIN BEGIN
PROMPT -12 -1 "" PROMPT -12 -1 ""

View File

@ -16,17 +16,17 @@ TDistinta::TDistinta(const char tipo, const long numero)
int TDistinta::read(const char tipo, const long numero) int TDistinta::read(const char tipo, const long numero)
{ {
int err = NOERR; int err = NOERR;
CHECK(tipo!='\0' && numero>0,"Can't read distinta from NULL elements"); CHECK(tipo!='\0' && numero > 0,"Can't read distinta from NULL elements");
TLocalisamfile f(LF_EFFETTI);
for (int i=0; err == NOERR ; i++) for (int i=0; err == NOERR ; i++)
{ {
TEffetto* effetto = new TEffetto; TEffetto* effetto = new TEffetto;
err = effetto->read(tipo, numero, i+1); err = effetto->read(f, tipo, numero, i+1);
if (err == NOERR) if (err == NOERR)
_righe_dist.add(effetto); _righe_dist.add(effetto);
} }
if ((_righe_dist.items()>0)||(err == _iseof)) if ((_righe_dist.items()>0)||(err == _iseof) )
err = NOERR; err = NOERR;
return err; return err;
} }
@ -42,6 +42,7 @@ int TDistinta::write(bool force, TToken_string* dati_dist)
{ {
int err = NOERR; int err = NOERR;
const int elem = items(); const int elem = items();
TLocalisamfile f(LF_EFFETTI);
for (int i=0; i<elem && err==NOERR; i++) for (int i=0; i<elem && err==NOERR; i++)
{ {
TEffetto& effetto = (TEffetto&)_righe_dist[i]; TEffetto& effetto = (TEffetto&)_righe_dist[i];
@ -53,34 +54,28 @@ int TDistinta::write(bool force, TToken_string* dati_dist)
effetto.put("CODCABP", dati_dist->get_long()); effetto.put("CODCABP", dati_dist->get_long());
effetto.put("NRIGADIST", i+1); effetto.put("NRIGADIST", i+1);
err = effetto.rewrite(); err = effetto.rewrite(f);
} }
return err; return err;
} }
int TDistinta::remove(char tipodist, long ndist) int TDistinta::remove(char tipodist, long ndist)
{ {
int err= NOERR; int err;
err = reset() == NOERR; //elimino dal file
//rimuovo dal file effetti TLocalisamfile file(LF_EFFETTI);
TLocalisamfile eff(LF_EFFETTI); for (int i = 0; i < items(); i++)
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"); TEffetto& effetto = (TEffetto&)_righe_dist[i];
eff.zero("NDIST"); err = effetto.read(file, tipodist,ndist,i+1);
eff.zero("DATADIST"); effetto.zero("TIPODIST");
eff.zero("NRIGADIST"); effetto.zero("NDIST");
eff.zero("CODABIP"); effetto.zero("DATADIST");
eff.zero("CODCABP"); effetto.zero("NRIGADIST");
eff.rewrite(); effetto.zero("CODABIP");
eff.next(); effetto.zero("CODCABP");
t = eff.get_char("TIPODIST"); err = effetto.rewrite(file);
n = eff.get_long("NDIST");
} }
reset();
return err; return err;
} }