Errori da aga009 a aga023

git-svn-id: svn://10.65.10.50/trunk@4327 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1997-05-12 15:31:33 +00:00
parent 7affcbf253
commit 368454c533
9 changed files with 360 additions and 442 deletions

View File

@ -311,7 +311,7 @@ bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
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();
if (f.to_check(k, TRUE)) if (k == K_TAB && f.to_check(k, TRUE))
{ {
const TString & val = f.get(); const TString & val = f.get();
// se non c'e valuta o se è lire disabilito i campi collegati // se non c'e valuta o se è lire disabilito i campi collegati
@ -331,6 +331,7 @@ bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
} }
sf.enable_column(F_IMPFATTVAL, valuta); sf.enable_column(F_IMPFATTVAL, valuta);
sf.enable_column(F_IMPEFFVAL, valuta); sf.enable_column(F_IMPEFFVAL, valuta);
if (f.focusdirty())
sf.force_update(); sf.force_update();
} }
return TRUE; return TRUE;
@ -354,6 +355,7 @@ bool TVariazione_effetti::contab_handler(TMask_field& f, KEY k)
} }
sf.enable_column(F_ANNO, da_contab); sf.enable_column(F_ANNO, da_contab);
sf.enable_column(F_NUMPART, da_contab); sf.enable_column(F_NUMPART, da_contab);
if (f.focusdirty())
sf.force_update(); sf.force_update();
} }
return TRUE; return TRUE;

View File

@ -29,10 +29,6 @@ BEGIN
DISPLAY "Nr. distinta" NDIST DISPLAY "Nr. distinta" NDIST
DISPLAY "Ragione Sociale Cliente@50" LF_CLIFO->RAGSOC DISPLAY "Ragione Sociale Cliente@50" LF_CLIFO->RAGSOC
OUTPUT F_NPROGTR NPROGTR OUTPUT F_NPROGTR NPROGTR
// OUTPUT F_CODCF CODCF
// OUTPUT F_DATASCAD DATASCAD
// OUTPUT F_TIPOPAG TIPOPAG
// OUTPUT F_CFRAGSOC LF_CLIFO->RAGSOC
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
MESSAGE COPY,10@ MESSAGE COPY,10@
END END
@ -337,7 +333,7 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
NUMBER F_NDIST 8 NUMBER F_NDIST 5
BEGIN BEGIN
PROMPT 42 13 "Nr. distinta " PROMPT 42 13 "Nr. distinta "
FIELD NDIST FIELD NDIST
@ -353,7 +349,7 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
NUMBER F_NRIGADIST 6 NUMBER F_NRIGADIST 4
BEGIN BEGIN
PROMPT 42 14 "Nr. di riga " PROMPT 42 14 "Nr. di riga "
FIELD NRIGADIST FIELD NRIGADIST

View File

@ -29,7 +29,6 @@ protected:
virtual bool remove(); 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 codval_handler(TMask_field& f, KEY k);
static bool tipodist_handler(TMask_field& f, KEY k); static bool tipodist_handler(TMask_field& f, KEY k);
static bool importo_handler(TMask_field& f, KEY k); static bool importo_handler(TMask_field& f, KEY k);
static bool imp_aut_handler(TMask_field& f, KEY k); static bool imp_aut_handler(TMask_field& f, KEY k);
@ -46,13 +45,15 @@ protected:
static void carica_riba(int tipopag); static void carica_riba(int tipopag);
static void ord_data(); static void ord_data();
static void ord_fatt(); static void ord_fatt();
TSheet_field& righe_sheet() const; // ritorna un riferimento allo sheet degli effetti (righe) nella
TSheet_field& righe_sel_sheet() const; // distinta
TSheet_field& righe_sheet() const { return (TSheet_field&)_msk->field(F_SHEET_RIBA); }
// ritorna un riferimento allo sheet delle righe
TSheet_field& righe_sel_sheet() const { return (TSheet_field&)_m2->field(F_SHEET); }
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();
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;}
@ -70,7 +71,7 @@ void TVariazione_distinte::init_query_mode(TMask&)
_msk->enable(F_NUMBER); _msk->enable(F_NUMBER);
_msk->enable(F_TIPODIST); _msk->enable(F_TIPODIST);
_msk->reset(F_TOTIMP); _msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL); _msk->enable(F_TIPOPAG);
} }
// quando si va in insert mode resetta i campi della maschera relativi // quando si va in insert mode resetta i campi della maschera relativi
@ -79,8 +80,6 @@ void TVariazione_distinte::init_query_mode(TMask&)
void TVariazione_distinte::init_insert_mode(TMask&) void TVariazione_distinte::init_insert_mode(TMask&)
{ {
_msk->reset(F_TOTIMP); _msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL);
_msk->enable(F_TOTIMPVAL);
_msk->enable(F_CODVAL); _msk->enable(F_CODVAL);
_msk->disable(F_NUMBER); _msk->disable(F_NUMBER);
_msk->disable(F_TIPODIST); _msk->disable(F_TIPODIST);
@ -92,70 +91,40 @@ void TVariazione_distinte::init_modify_mode(TMask&)
{ {
_msk->disable(F_NUMBER); _msk->disable(F_NUMBER);
_msk->disable(F_TIPODIST); _msk->disable(F_TIPODIST);
_msk->disable(F_TIPOPAG);
} }
// ritorna il prossimo numero di distanta valido // ritorna il prossimo numero di distinta valido
const char* TVariazione_distinte::get_next_key() const char* TVariazione_distinte::get_next_key()
{ {
long ndist = 1L; long ndist = 99999L;
char tipodist = 'B'; const TString16 tipodist = get_mask(MODE_INS)->get(F_TIPODIST);
TLocalisamfile& effetti = _rel->lfile(); TLocalisamfile& effetti = _rel->lfile();
effetti.first();// mi posiziono all'inizio del file
effetti.put(EFF_TIPODIST,tipodist); effetti.put(EFF_TIPODIST,tipodist);
effetti.put(EFF_NDIST,ndist); effetti.put(EFF_NDIST,ndist);
effetti.setkey(4); effetti.setkey(4);
int err = effetti.read(_isgteq); effetti.read(_isgteq);
if ( (err == _iskeynotfound) || (err == _iseof) ) if (!effetti.empty() && tipodist == effetti.get(EFF_TIPODIST))
{ //se non esiste alcuna distinta: il numero sarà 1 ndist = effetti.get_long(EFF_NDIST) + 1;
err == NOERR; else
ndist = 1;
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 numero
long n = effetti.get_long(EFF_NDIST);
// lo confronto con i numero maggiore che ho letto
if (n > ndist)
ndist = n;
effetti.setkey(4);
err = effetti.next();
}
return format("%d|%ld",F_NUMBER,++ndist);
}
// ritorna un riferimento allo sheet degli effetti (righe) nella
// distinta
TSheet_field& TVariazione_distinte::righe_sheet() const
{
TSheet_field& r_sheet = (TSheet_field&)_msk->field(F_SHEET_RIBA);
return r_sheet;
}
// ritorna un riferimento allo sheet delle righe
TSheet_field& TVariazione_distinte::righe_sel_sheet() const
{
TSheet_field& r_sheet = (TSheet_field&)_m2->field(F_SHEET);
return r_sheet;
}
// ritorna TRUE se trovo nell'array delle righe distinta l'effetto // ritorna TRUE se trovo nell'array delle righe distinta l'effetto
// passato // passato
bool TVariazione_distinte::cerca(long num) bool TVariazione_distinte::cerca(long num)
{ {
bool trovato = FALSE;
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 = _distinta->items() - 1; i >= 0; i--)// ciclo sugli elementi dell'array
{ {
TEffetto& eff = (TEffetto&)righedist[i]; TEffetto& eff = (TEffetto&)righedist[i];
long num_eff = eff.get_long(EFF_NPROGTR);
if (num_eff == num) if (num == eff.get_long(EFF_NPROGTR))
{ return TRUE;
trovato = TRUE;
break;// esco quando ho già trovato l'effetto che cercavo
} }
} return FALSE;
return trovato;
} }
// metodo che permette di scivere sull'array (in memoria) gli // metodo che permette di scivere sull'array (in memoria) gli
@ -168,17 +137,19 @@ void TVariazione_distinte::aggiorna()
{ {
TToken_string& row = shrighe.row(i); TToken_string& row = shrighe.row(i);
row.restart(); row.restart();
long num = row.get_long(1); long num = row.get_long(shrighe.cid2index(F_NRIBA));
if (!cerca(num))// se non è già presente in memoria if (!cerca(num))// se non è già presente in memoria
{ // carico l'effetto nell'array { // carico l'effetto nell'array
TLocalisamfile eff(LF_EFFETTI); TLocalisamfile eff(LF_EFFETTI);
TRectype rec = eff.curr(); TRectype & rec = eff.curr();
eff.setkey(1); eff.setkey(1);
rec.zero(); rec.zero();
rec.put(EFF_NPROGTR, num); rec.put(EFF_NPROGTR, num);
int err = eff.read(); eff.read();
TEffetto* effetto = new TEffetto(rec); TEffetto* effetto = new TEffetto(rec);
TArray& righedist = _distinta->righe(); TArray& righedist = _distinta->righe();
righedist.add(effetto); righedist.add(effetto);
} }
} }
@ -195,7 +166,6 @@ TToken_string* TVariazione_distinte::common_f(const TMask& m)
long codcab = m.get_long(F_CODCABP); long codcab = m.get_long(F_CODCABP);
m.autosave(*_rel); m.autosave(*_rel);
TToken_string * datidist= new TToken_string; // creo la token string TToken_string * datidist= new TToken_string; // creo la token string
datidist->cut(0);
datidist->add(tipodist); // inserisco i dati nella datidist->add(tipodist); // inserisco i dati nella
datidist->add(ndist); // token string datidist->add(ndist); // token string
datidist->add(datadist); datidist->add(datadist);
@ -224,6 +194,12 @@ int TVariazione_distinte::read(TMask& m)
int items = _distinta->items(); int items = _distinta->items();
TArray& righedist = _distinta->righe(); TArray& righedist = _distinta->righe();
// carico tutti gli effetti della distinta nello sheet // carico tutti gli effetti della distinta nello sheet
if (items > 0)
{
TEffetto& e = (TEffetto&)righedist[0];
m.set(F_DATA, e.get("DATADIST"));// distinta
m.set(F_CODABIP, e.get("CODABIP")); // dalla maschera
m.set(F_CODCABP, e.get("CODCABP"));
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
TEffetto& eff = (TEffetto&)righedist[i]; TEffetto& eff = (TEffetto&)righedist[i];
@ -233,35 +209,38 @@ int TVariazione_distinte::read(TMask& m)
riga.add(numero); riga.add(numero);
riga.add(eff.get(EFF_DATASCAD)); riga.add(eff.get(EFF_DATASCAD));
//prendo la ragione sociale del cliente conoscendone il codice //prendo la ragione sociale del cliente conoscendone il codice
long codcf = eff.get_long(EFF_CODCF); const long codcf = eff.get_long(EFF_CODCF);
_clifo->zero(); _clifo->zero();
_clifo->put(CLI_TIPOCF , 'C'); _clifo->put(CLI_TIPOCF , 'C');
_clifo->put(CLI_CODCF, codcf); _clifo->put(CLI_CODCF, codcf);
if (_clifo->read() == NOERR) riga.add(_clifo->get(CLI_RAGSOC)); if (_clifo->read() == NOERR)
riga.add(_clifo->get(CLI_RAGSOC));
else
riga.add("");
if (eff.fatt(numero))// se l'effetto contiene solo una fattura if (eff.fatt(numero))// se l'effetto contiene solo una fattura
{ // metto i riferimenti al documento ed al numero di rata { // metto i riferimenti al documento ed al numero di rata
const TRectype& rec_r = eff.row_r(1); const TRectype& rec_r = eff.row_r(1);
riga.add(rec_r.get(REFF_NFATT)); riga.add(rec_r.get(REFF_NFATT));
riga.add(rec_r.get(REFF_DATAFATT)); riga.add(rec_r.get(REFF_DATAFATT));
if (eff.rows_r() == 1) riga.add(rec_r.get(REFF_NRATA)); if (eff.rows_r() == 1)
else riga.add(("Varie")); riga.add(rec_r.get(REFF_NRATA));
else
riga.add("Varie");
} }
else// se l'effetto contiene più di una fattura else// se l'effetto contiene più di una fattura
{ // non metto i riferimenti al documento ed al numero di rata { // non metto i riferimenti al documento ed al numero di rata
riga.add(("Varie")); riga.add("Varie");
riga.add(("Varie")); riga.add("Varie");
riga.add(("Varie")); riga.add("Varie");
} }
//gestisco il controllo sulla presenza o meno di una valuta //gestisco il controllo sulla presenza o meno di una valuta
TString codval(3); const TString16 codval(eff.get(EFF_CODVAL));
codval = eff.get(EFF_CODVAL);
if (i == 0) if (i == 0)
{ {
const bool condition = (codval.empty() || codval == "LIT"); const bool valuta = (codval.not_empty() && codval != "LIT");
m.enable(F_CODVAL, !condition);
m.enable(F_TOTIMPVAL, !condition);
if (!condition)
m.set(F_CODVAL, codval); m.set(F_CODVAL, codval);
m.enable(F_CODVAL, valuta);
} }
riga.add(codval); riga.add(codval);
riga.add(eff.get(EFF_IMPORTO)); riga.add(eff.get(EFF_IMPORTO));
@ -270,45 +249,50 @@ int TVariazione_distinte::read(TMask& m)
} }
} }
} }
}
return err; return err;
} }
// Si prendono tutte le righe dello sheet e si controlla il primo campo // riscrive distinta
// se e' a true si distrugge la riga e si aggiorna il file. int TVariazione_distinte::rewrite(const TMask& m)
// GLI EFFETTI PRESENTI NELLO SHEET DEVONO GIA ESSERE STATI REGISTRATI
// NEL FILE.
void TVariazione_distinte::elimina()
{ {
// prima di riscrive controllo se ci sono effetti nello sheet
// selezionati per l'eliminazione
TEffetto eff; TEffetto eff;
TLocalisamfile file(LF_EFFETTI); TLocalisamfile file(LF_EFFETTI);
char tipodist = _msk->get(F_TIPODIST)[0]; const char tipodist = _msk->get(F_TIPODIST)[0];
long ndist = _msk->get_long(F_NUMBER); const long ndist = _msk->get_long(F_NUMBER);
TDistinta * distinta = app()._distinta; TDistinta * distinta = app()._distinta;
TSheet_field& sf = (TSheet_field&)_msk->field(F_SHEET_RIBA); TSheet_field& sf = righe_sheet();
bool condition = FALSE, deleted = FALSE; int items = sf.items();
int to_delete = 0;
for (int i = items - 1; i >= 0 ; i--)
{
TToken_string& row = sf.row(i);
if (*row.get(0) == 'X') // to delete
to_delete++;
}
if (items <= to_delete)
{ // non posso cancellare tutti gli effetti di una distinta
error_box("Impossibile escludere tutti gli effetti dalla distinta.\n Utilizzare elimina per cancellarla.");
return NOERR;
}
if (to_delete > 0)
{
TArray& righedist = distinta->righe(); TArray& righedist = distinta->righe();
//ciclo sugli elementi dello sheet //ciclo sugli elementi dello sheet
for (int i = 0, k = i+1; i < sf.items(); i++, k++)
for (int i = items - 1; i >= 0; i--)
{ {
// per posizionarsi correttamente sulla prima riga dello sheet
// se ci sono state già delle cancellazioni
if (deleted) i--;
if (sf.items() == 1)
{ // non posso cancellare l'effetto se è l'unico della distinta
error_box("IMPOSSIBILE CANCELLARE: La distinta deve contenere almeno un effetto!");
break;
}
TToken_string& row = sf.row(i); TToken_string& row = sf.row(i);
condition = *row.get(0) == 'X'; if (*row.get(0) == 'X') // to delete
if (condition)
{ {
long num = row.get_long(1); const long num = row.get_long(1);
//ciclo sugli elementi dell'array //ciclo sugli elementi dell'array
for (int j = 0; j < distinta->items(); j++) for (int j = 0; j < distinta->items(); j++)
{ {
TEffetto& eff = (TEffetto&)righedist[j]; TEffetto& eff = (TEffetto&)righedist[j];
long num_eff = eff.get_long(EFF_NPROGTR); if (num == eff.get_long(EFF_NPROGTR))
if (num_eff == num)
{ {
// tolgo l'effetto dall'array // tolgo l'effetto dall'array
righedist.destroy(j,TRUE); righedist.destroy(j,TRUE);
@ -316,8 +300,8 @@ void TVariazione_distinte::elimina()
} }
} }
// tolgo l'effetto dallo sheet // tolgo l'effetto dallo sheet
sf.destroy(i); deleted = TRUE; sf.destroy(i);
eff.read(file, tipodist, ndist, k); eff.read(file, tipodist, ndist, i + 1);
eff.zero(EFF_TIPODIST); eff.zero(EFF_TIPODIST);
eff.zero(EFF_NDIST); eff.zero(EFF_NDIST);
eff.zero(EFF_DATADIST); eff.zero(EFF_DATADIST);
@ -326,30 +310,10 @@ void TVariazione_distinte::elimina()
eff.zero(EFF_CODCABP); eff.zero(EFF_CODCABP);
eff.rewrite(file); eff.rewrite(file);
} }
else deleted = FALSE;
} }
} }
// riscrive distinta
int TVariazione_distinte::rewrite(const TMask& m)
{
// prima di riscrive controllo se ci sono effetti nello sheet
// selezionati per l'eliminazione
TSheet_field& sf = righe_sheet();
bool condition = FALSE;
for (int i = 0; i < sf.items(); i++)
{
TToken_string& row = sf.row(i);
// se trovo un effetto selezionato esco dal ciclo
if (condition = *row.get(0) == 'X') break;
}
if (condition)
if (yesno_box("Vuoi veramete eliminare gli effetti selezionati"))
elimina();
//resetto l'array che contiene gli effetti nella distinta //resetto l'array che contiene gli effetti nella distinta
int err = _distinta->reset(); int err = _distinta->reset();
char tipodist = m.get(F_TIPODIST)[0];
long ndist = m.get_long(F_NUMBER);
aggiorna(); aggiorna();
err = _distinta->rewrite(common_f(m)); err = _distinta->rewrite(common_f(m));
if (err == NOERR) if (err == NOERR)
@ -408,7 +372,6 @@ bool TVariazione_distinte::user_create()
_clifo = new TLocalisamfile(LF_CLIFO); _clifo = new TLocalisamfile(LF_CLIFO);
_distinta = new TDistinta; _distinta = new TDistinta;
set_search_field(F_NUMBER);//setto il campo di ricerca della distinta set_search_field(F_NUMBER);//setto il campo di ricerca della distinta
_msk->set_handler(F_CODVAL, codval_handler);
_msk->set_handler(F_TIPODIST, tipodist_handler); _msk->set_handler(F_TIPODIST, tipodist_handler);
_msk->set_handler(F_IMP, importo_handler); _msk->set_handler(F_IMP, importo_handler);
_m2->set_handler(F_TOTIMPDIST, imp_aut_handler); _m2->set_handler(F_TOTIMPDIST, imp_aut_handler);
@ -446,7 +409,7 @@ void TVariazione_distinte::carica_riba(int tipopag)
// distinta quindi setta i campi ad essa relativi a zero // distinta quindi setta i campi ad essa relativi a zero
char tipodist = 0; char tipodist = 0;
long ndist = 0; long ndist = 0;
long nrigadist = 0; int nrigadist = 0;
TEffetto eff; TEffetto eff;
TLocalisamfile f(LF_EFFETTI); TLocalisamfile f(LF_EFFETTI);
// per prendere la ragione sociale del cliente di cui ho il codice // per prendere la ragione sociale del cliente di cui ho il codice
@ -461,14 +424,13 @@ void TVariazione_distinte::carica_riba(int tipopag)
int tipop = eff.get_int(EFF_TIPOPAG); int tipop = eff.get_int(EFF_TIPOPAG);
while ( (err == NOERR) && (tipodist == 0)) while ( (err == NOERR) && (tipodist == 0))
{ {
bool condition = (tipopag == tipop);
// se effetti di tipo cambiario (pagherò, tratta, tratta accettata) // se effetti di tipo cambiario (pagherò, tratta, tratta accettata)
if (tipopag == 2 || tipopag ==5 || tipopag == 7)
condition = (tipop == 2 || tipop ==5 || tipop == 7);
// se non indico un tipo di effetto prendo il tipo del primo che // se non indico un tipo di effetto prendo il tipo del primo che
// seleziono // seleziono
if (tipopag == 0) condition =TRUE; const bool to_select = (tipopag == 0) || (tipopag == tipop) ||
if (condition) ((tipopag == 2 || tipopag ==5 || tipopag == 7) &&
(tipop == 2 || tipop ==5 || tipop == 7));
if (to_select)
{ {
riga.cut(0); riga.cut(0);
riga.add(' '); riga.add(' ');
@ -479,14 +441,19 @@ void TVariazione_distinte::carica_riba(int tipopag)
clifo->zero(); clifo->zero();
clifo->put(CLI_TIPOCF, 'C'); clifo->put(CLI_TIPOCF, 'C');
clifo->put(CLI_CODCF, codcf); clifo->put(CLI_CODCF, codcf);
if (clifo->read() == NOERR) riga.add(clifo->get(CLI_RAGSOC)); if (clifo->read() == NOERR)
riga.add(clifo->get(CLI_RAGSOC));
else
riga.add("");
if (eff.fatt(numero))// se l'effetto contiene solo una fattura if (eff.fatt(numero))// se l'effetto contiene solo una fattura
{ // metto i riferimenti al documento ed al numero di rata { // metto i riferimenti al documento ed al numero di rata
const TRectype& rec_r = eff.row_r(1); const TRectype& rec_r = eff.row_r(1);
riga.add(rec_r.get(REFF_NFATT)); riga.add(rec_r.get(REFF_NFATT));
riga.add(rec_r.get(REFF_DATAFATT)); riga.add(rec_r.get(REFF_DATAFATT));
if (eff.rows_r() == 1) riga.add(rec_r.get(REFF_NRATA)); if (eff.rows_r() == 1)
else riga.add(("Varie")); riga.add(rec_r.get(REFF_NRATA));
else
riga.add(("Varie"));
} }
else// se l'effetto contiene più di una fattura else// se l'effetto contiene più di una fattura
{ // non metto i riferimenti al documento ed al numero di rata { // non metto i riferimenti al documento ed al numero di rata
@ -503,37 +470,21 @@ void TVariazione_distinte::carica_riba(int tipopag)
f.setkey(4); f.setkey(4);
err = eff.next(f);//leggo l'effetto successivo err = eff.next(f);//leggo l'effetto successivo
tipodist = eff.get(EFF_TIPODIST)[0];// e ne prendo il tipo distinta tipodist = eff.get(EFF_TIPODIST)[0];// e ne prendo il tipo distinta
if (tipopag == 0)
tipopag = tipop;
tipop = eff.get_int(EFF_TIPOPAG); tipop = eff.get_int(EFF_TIPOPAG);
} }
} }
// Handler che permette il controllo sulla abilitazione dei campi
// collegati al codice valuta
bool TVariazione_distinte::codval_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
TString val(f.get());
if (f.to_check(k, TRUE))
{
const bool condition = (val == "LIT" || val.empty());
m.enable(F_TOTIMPVAL,!condition);
if (condition)
m.reset(F_TOTIMPVAL);
}
return TRUE;
}
// Handler per gestire il fatto che una distinta allo sconto può // Handler per gestire il fatto che una distinta allo sconto può
// contenere solo effetti cambiari // contenere solo effetti cambiari
bool TVariazione_distinte::tipodist_handler(TMask_field& f, KEY k) bool TVariazione_distinte::tipodist_handler(TMask_field& f, KEY k)
{ {
TMask &m = f.mask();
char tipo(f.get()[0]);
if (k == K_SPACE) if (k == K_SPACE)
{ {
if(tipo == 'S') TMask &m = f.mask();
const bool allo_sconto = f.get()[0] == 'S';
m.enable(F_TIPOPAG, !allo_sconto);
if (allo_sconto)
m.set(F_TIPOPAG,2); m.set(F_TIPOPAG,2);
} }
return TRUE; return TRUE;
@ -544,22 +495,22 @@ bool TVariazione_distinte::tipodist_handler(TMask_field& f, KEY k)
// princiapale) // princiapale)
bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k) bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k)
{ {
TMask& m = f.mask(); if (k == K_TAB && f.to_check(k, TRUE))
TSheet_field& sf_riba = (TSheet_field&)m.field(F_SHEET_RIBA);
if (f.to_check(k, TRUE))
{ {
TMask& m = f.mask();
const TString16 codval = m.get(F_CODVAL);
const bool valuta = codval.not_empty() && codval != "LIT";
TSheet_field& sf_riba = (TSheet_field&)m.field(F_SHEET_RIBA);
const int mode = m.mode(); const int mode = m.mode();
if( mode == MODE_INS || mode == MODE_MOD) if( mode == MODE_INS || mode == MODE_MOD)
{ {
TMask* m2 = app()._m2; TMask* m2 = app()._m2;
long imp_pres = m.get_long(F_TOTIMP);// importo presentato real impdist = m.get_real(F_IMP) - m.get_real(F_TOTIMP);
long imp = m.get_long(F_IMP);// importo distinta const int tipopag = m.get_int(F_TIPOPAG);
long impdist = imp - imp_pres;
int tipopag = m.get_int(F_TIPOPAG);
// se importo distinta maggiore importo presentato si devono andare a // se importo distinta maggiore importo presentato si devono andare a
// caricare effetti in automatico per un valore minore uguale alla // caricare effetti in automatico per un valore minore uguale alla
// differenza dei suddetti importi // differenza dei suddetti importi
if (impdist > 0) if (impdist > ZERO)
{ {
app().begin_wait(); app().begin_wait();
carica_riba(tipopag); carica_riba(tipopag);
@ -568,12 +519,15 @@ bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k)
m2->reset(F_IMPSEL); m2->reset(F_IMPSEL);
m2->set(F_TOTIMPDIST, impdist); m2->set(F_TOTIMPDIST, impdist);
m2->run(); m2->run();
calcola_totale();
} }
if (impdist < 0) else
if (impdist < ZERO)
error_box("Il valore di presentazione non può superare l'importo della distinta"); error_box("Il valore di presentazione non può superare l'importo della distinta");
} }
} if (f.focusdirty())
sf_riba.force_update(); sf_riba.force_update();
}
return TRUE; return TRUE;
} }
@ -586,69 +540,55 @@ bool TVariazione_distinte::imp_aut_handler(TMask_field& f, KEY k)
// se quando si entra nell maschera il campo contiene un valore // se quando si entra nell maschera il campo contiene un valore
// significa che si deve procedere con il caricamento automatico // significa che si deve procedere con il caricamento automatico
// di effetti per l'importo iscritto nel campo // di effetti per l'importo iscritto nel campo
if (f.to_check(k, TRUE)) if (k == K_TAB && f.to_check(k, TRUE))
{ {
TMask* m = app()._msk; TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m2.field(F_SHEET); TSheet_field& sf = (TSheet_field&)m2.field(F_SHEET);
TSheet_field& sf_riba = (TSheet_field&)m->field(F_SHEET_RIBA); TSheet_field& sf_riba = (TSheet_field&)m->field(F_SHEET_RIBA);
long impdist = m->get_long(F_IMP) - m->get_long(F_TOTIMP); const real impdist = m->get_real(F_IMP) - m->get_real(F_TOTIMP);
long tot_imp_dist = m2.get_long(F_TOTIMPDIST), real res = m2.get_real(F_TOTIMPDIST);
impsel = 0; if (res > ZERO && impdist > ZERO)
if (tot_imp_dist != 0 && impdist != 0)
{ // se i due importi sono diversi da zero { // se i due importi sono diversi da zero
TString val = m->get(F_CODVAL); TString val = m->get(F_CODVAL);
if (val == "LIT")
val.cut(0);
int items = sf.items(); int items = sf.items();
// cerca se esiste un effetto con importo uguale a quello // cerca se esiste un effetto con importo uguale a quello
// da caricare // da caricare
bool caricato = FALSE; for (int i = 0; i < items; i++)
for(int i = 0; i < items && !caricato; i++)
{ {
TToken_string& row = sf.row(i); TToken_string& row = sf.row(i);
TString codval = row.get(7); TString16 codval = row.get(sf.cid2index(F_VALUTA));
// se la valuta non appare o è lire faccio in modo che vengano // se la valuta non appare o è lire faccio in modo che vengano
// presi gli effetti con valuta inesistente // presi gli effetti con valuta inesistente
if (codval == " " || codval == "LIT") if (codval == " " || codval == "LIT")
codval.trim(); codval.cut(0);
long imp = row.get_long(8); const bool valuta = codval.not_empty();
if (imp == tot_imp_dist && codval == val) const real imp(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO)));
if (imp == res && codval == val)
{ {
row.add('X', 0); row.add('X', 0);
impsel += imp; res = ZERO;
caricato = TRUE;
} }
} }
// se non esiste un effetto con importo uguale a quello // se non esiste un effetto con importo uguale a quello
// da caricare carico l'importo sommando più effetti // da caricare carico l'importo sommando più effetti
if (!caricato) for (i = 0; res > ZERO && i < items; i++)
{
for(int i = 0; i < items; i++)
{ {
TToken_string& row = sf.row(i); TToken_string& row = sf.row(i);
TString codval = row.get(7); TString16 codval = row.get(sf.cid2index(F_VALUTA));
// se la valuta non appare o è lire faccio in modo che
// vengano presi gli effetti con valuta inesistente
if (codval == " " || codval == "LIT") if (codval == " " || codval == "LIT")
codval.trim(); codval.cut(0);
long imp = row.get_long(8); const bool valuta = codval.not_empty();
const real imp = (row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO)));
// se l'importo, della riga corrente dello sheet, è minore // se l'importo, della riga corrente dello sheet, è minore
// dell 'importo che si deve caricare e se lo rimane anche // dell 'importo che si deve caricare e se lo rimane anche
// sommato all'importo già selezionato, si procede a rendere // sommato all'importo già selezionato, si procede a rendere
// la riga selezionata per il caricamento // la riga selezionata per il caricamento
if ((imp <= tot_imp_dist) && ((impsel+imp) <= tot_imp_dist)) if (codval == val && imp <= res)
{
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); row.add('X',0);
impsel += imp; res -= imp;
}
}
if (impsel <= tot_imp_dist) continue;
else break;
} }
} }
sf.force_update(); sf.force_update();
@ -662,30 +602,27 @@ bool TVariazione_distinte::imp_aut_handler(TMask_field& f, KEY k)
// per l'aggiunta delle riba (ef0300c) // per l'aggiunta delle riba (ef0300c)
bool TVariazione_distinte::conferma_handler(TMask_field& f, KEY k) 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) if (k == K_ENTER)
{ {
TMask * msk = app()._msk;
TSheet_field & sf_riba = (TSheet_field&)msk->field(F_SHEET_RIBA);
TMask& m = f.mask(); TMask& m = f.mask();
m.close(); // chiudo la maschera secondaria m.close(); // chiudo la maschera secondaria
// scarico tutte le righe, selezionate, dello sheet della maschera // scarico tutte le righe, selezionate, dello sheet della maschera
// secondaria nello sheet della maschera primaria della relap (ef0300a) // secondaria nello sheet della maschera primaria della relap (ef0300a)
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET); TSheet_field& sf = (TSheet_field&)m.field(F_SHEET);
int items = sf.items(); int items = sf.items();
bool condition = FALSE;
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);
condition = *row.get(0)== 'X'; if (*row.get(0) == 'X') // selected
if (condition)
{ {
row[0] = ' '; row.add(" ", 0);
sf_riba.row(-1) = row; sf_riba.row(-1) = row;
} }
} }
} }
sf_riba.force_update();// obbligo all'aggiornamento dello sheet
calcola_totale(); // obbligo al ricalcolo del totale
return TRUE; return TRUE;
} }
@ -856,30 +793,23 @@ void TVariazione_distinte::calcola_totale()
{ {
TMask* m = app()._msk; TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET_RIBA); TSheet_field& sf = (TSheet_field&)m->field(F_SHEET_RIBA);
int items = sf.items(); const int items = sf.items();
real imp, impval, impdist, impdistval; real impdist;
const TString16 codval = m->get(F_CODVAL);
const bool valuta = codval.not_empty() && codval != "LIT";
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);
// se l'effetto è selezionato per l'eliminazione tolgo il suo importo // se l'effetto è selezionato per l'eliminazione tolgo il suo importo
// dal totale presentazione della distinta // dal totale presentazione della distinta
bool condition = *row.get(0) == 'X';
if (condition) if (*row.get(0) != 'X') // valido (not to delete)
{ {
imp = row.get(8); const real imp = row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO));
impdist -= imp;
impval = row.get(9);
impdistval -= impval;
}
// se l'effetto no è selzionato aggiungo il suo importo al totale
// presentazione della distinta
imp = row.get(8);
impdist += imp; impdist += imp;
impval = row.get(9); }
impdistval += impval;
} }
m->set(F_TOTIMP, impdist); m->set(F_TOTIMP, impdist);
m->set(F_TOTIMPVAL, impdistval);
m->set(F_IMP, impdist); m->set(F_IMP, impdist);
} }
@ -890,29 +820,32 @@ void TVariazione_distinte::calcola()
TMask* m2 = app()._m2; TMask* m2 = app()._m2;
TMask* m = app()._msk; TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m2->field(F_SHEET); TSheet_field& sf = (TSheet_field&)m2->field(F_SHEET);
int items = sf.items(); const int items = sf.items();
real imp, impsel; real impsel;
long imp_pres = m->get_long(F_TOTIMP); const real imp_pres = m->get_long(F_TOTIMP);
long importo = m->get_long(F_IMP); const real importo = m->get_long(F_IMP);
long impdist = importo - imp_pres; const real impdist = importo - imp_pres;
if (impdist == 0) const TString16 codval = m->get(F_CODVAL);
m2->set(F_TOTIMPDIST, importo); const bool valuta = codval.not_empty() && codval != "LIT";
m2->set(F_IMPSEL, impsel);
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);
// se l'effetto è selezionato aggiungo il suo importo al totale importo // se l'effetto è selezionato aggiungo il suo importo al totale importo
// selezionato // selezionato
bool condition = *row.get(0) == 'X'; if (*row.get(0) == 'X')
if (condition)
{ {
imp = row.get(8); const real imp(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO)));
impsel += imp; impsel += imp;
m2->set(F_IMPSEL, impsel);
if (impdist == 0 && imp_pres == 0)
m2->set(F_TOTIMPDIST, impsel);
} }
} }
m2->set(F_IMPSEL, impsel);
if (impdist == ZERO)
{
if (imp_pres == ZERO)
m2->set(F_TOTIMPDIST, impsel);
else
m2->set(F_TOTIMPDIST, importo);
}
} }
// Notify per il calcolo dei totali relativi alla selezione effetti // Notify per il calcolo dei totali relativi alla selezione effetti
@ -938,6 +871,7 @@ void TVariazione_distinte::aggiungi()
m2->reset(F_TOTIMPDIST); m2->reset(F_TOTIMPDIST);
m2->reset(F_IMPSEL); m2->reset(F_IMPSEL);
m2->run(); m2->run();
calcola_totale();
} }
// Notify per il calcolo dei totali relativi alla distinta // Notify per il calcolo dei totali relativi alla distinta
@ -954,6 +888,6 @@ bool TVariazione_distinte::impdist_notify(TSheet_field& s, int r, KEY key)
int ef0300(int argc, char* argv[]) int ef0300(int argc, char* argv[])
{ {
TVariazione_distinte a ; TVariazione_distinte a ;
a.run(argc, argv, "Variazione Distinte"); a.run(argc, argv, "Distinte di presentazione");
return 0; return 0;
} }

View File

@ -13,7 +13,6 @@
#define F_CODCABP 107 #define F_CODCABP 107
#define F_TOTIMP 108 #define F_TOTIMP 108
#define F_IMP 109 #define F_IMP 109
#define F_TOTIMPVAL 110
#define F_CODVAL 111 #define F_CODVAL 111
#define F_TIPOPAG 112 #define F_TIPOPAG 112
#define F_SHEET_RIBA 113 #define F_SHEET_RIBA 113

View File

@ -31,7 +31,7 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
NUMBER F_NUMBER 7 NUMBER F_NUMBER 5
BEGIN BEGIN
PROMPT 48 1 "Numero Distinta " PROMPT 48 1 "Numero Distinta "
FIELD LF_EFFETTI->NDIST FIELD LF_EFFETTI->NDIST
@ -55,28 +55,9 @@ BEGIN
FIELD LF_EFFETTI->DATADIST FIELD LF_EFFETTI->DATADIST
END END
TEXT DLG_NULL
BEGIN
PROMPT 2 3 "Banca di Presentazione "
END
STRING F_DENBANP 50
BEGIN
PROMPT 26 3 ""
FLAGS "U"
USE %BAN KEY 2
INPUT S0 F_DENBANP
DISPLAY "Denominazione@50" S0
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
OUTPUT F_DENBANP S0
OUTPUT F_CODABIP CODTAB[1,5]
OUTPUT F_CODCABP CODTAB[6,10]
END
NUMBER F_CODABIP 5 0 NUMBER F_CODABIP 5 0
BEGIN BEGIN
PROMPT 15 4 "Codice ABI " PROMPT 15 3 "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 ?= "?????"
@ -92,7 +73,7 @@ END
NUMBER F_CODCABP 5 0 NUMBER F_CODCABP 5 0
BEGIN BEGIN
PROMPT 15 5 "Codice CAB " PROMPT 15 4 "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 ?= "??????????"
@ -108,29 +89,37 @@ BEGIN
WARNING "Banca assente" WARNING "Banca assente"
END END
NUMBER F_TOTIMP 18 2 STRING F_DENBANP 50
BEGIN BEGIN
PROMPT 2 6 "Valore di presentazione " PROMPT 2 5 "Banca di Presentazione "
PICTURE "###.###.###.###,@@" FLAGS "U"
USE %BAN KEY 2
INPUT S0 F_DENBANP
DISPLAY "Denominazione@50" S0
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
OUTPUT F_DENBANP S0
OUTPUT F_CODABIP CODTAB[1,5]
OUTPUT F_CODCABP CODTAB[6,10]
END END
NUMBER F_IMP 18 2 LIST F_TIPOPAG 24
BEGIN BEGIN
PROMPT 2 7 "Importo Distinta " PROMPT 2 6 "Tipo Effetti "
PICTURE "###.###.###.###,@@" FIELD LF_EFFETTI->TIPOPAG
NUM_EXPR #F_IMP>=#F_TOTIMP ITEM "2|Tratta"
WARNING "Il valore di presentazione non puo' superare l'importo della distinta" ITEM "3|Ricevuta Bancaria"
END ITEM "4|Cessione"
ITEM "5|Paghero'"
NUMBER F_TOTIMPVAL 18 3 ITEM "6|Lettera di credito"
BEGIN ITEM "7|Tratta accettata"
PROMPT 2 8 "Valore di pres. in val. " ITEM "8|Rapporti interb. diretti"
PICTURE "###.###.###.###,@@@" ITEM "9|Bonifico"
END END
STRING F_CODVAL 3 STRING F_CODVAL 3
BEGIN BEGIN
PROMPT 48 8 "Codice Valuta " PROMPT 2 7 "Codice Valuta "
FLAGS "UZ" FLAGS "UZ"
USE %VAL USE %VAL
INPUT CODTAB F_CODVAL INPUT CODTAB F_CODVAL
@ -139,25 +128,25 @@ BEGIN
OUTPUT F_CODVAL CODTAB OUTPUT F_CODVAL CODTAB
END END
LIST F_TIPOPAG 24 NUMBER F_IMP 18 2
BEGIN BEGIN
PROMPT 2 9 "Tipo Effetto " PROMPT 2 8 "Importo Distinta "
FIELD LF_EFFETTI->TIPOPAG PICTURE "###.###.###.###,@@"
ITEM "0| " NUM_EXPR #F_IMP>=#F_TOTIMP
ITEM "2|Effetto cambiario" WARNING "Il valore di presentazione non puo' superare l'importo della distinta"
ITEM "3|Ricevuta Bancaria" END
ITEM "4|Cessione"
ITEM "5|Effetto cambiario" NUMBER F_TOTIMP 18 2
ITEM "6|Lettera di credito" BEGIN
ITEM "7|Effetto cambiario" PROMPT 2 9 "Valore di presentazione "
ITEM "8|Rapporti interb.diretti" FLAGS "D"
ITEM "9|Bonifici" PICTURE "###.###.###.###,@@"
END END
SPREADSHEET F_SHEET_RIBA 78 6 SPREADSHEET F_SHEET_RIBA 78 6
BEGIN BEGIN
PROMPT 1 12 "RIGHE DISTINTA" PROMPT 1 12 "RIGHE DISTINTA"
ITEM "" ITEM "Da elim."
ITEM "Nr. Ri.Ba." ITEM "Nr. Ri.Ba."
ITEM "Scadenza" ITEM "Scadenza"
ITEM "Cliente@50" ITEM "Cliente@50"

View File

@ -3,11 +3,9 @@
PAGE "Righe Distinta" -1 -1 63 13 PAGE "Righe Distinta" -1 -1 63 13
LISTBOX F_CHECK 5 BOOLEAN F_CHECK
BEGIN BEGIN
PROMPT 2 1 "Selezionato " PROMPT 2 1 "Da eliminare "
ITEM " |FALSE"
ITEM "X|TRUE"
END END
NUMBER F_NRIBA 7 NUMBER F_NRIBA 7

View File

@ -21,7 +21,7 @@ END
LIST F_TIPORD 14 LIST F_TIPORD 14
BEGIN BEGIN
PROMPT 2 4 "Tipo Ordinamento " PROMPT 2 4 "Tipo Ordinamento "
ITEM " |** Nessuno **" ITEM " | "
ITEM "S|Scadenza " ITEM "S|Scadenza "
ITEM "F|Fattura " ITEM "F|Fattura "
END END
@ -29,7 +29,7 @@ END
SPREADSHEET F_SHEET 74 9 SPREADSHEET F_SHEET 74 9
BEGIN BEGIN
PROMPT 2 6 "EFFETTI SELEZIONABILI" PROMPT 2 6 "EFFETTI SELEZIONABILI"
ITEM "" ITEM "Sel."
ITEM "Nr. Ri.Ba." ITEM "Nr. Ri.Ba."
ITEM "Scadenza" ITEM "Scadenza"
ITEM "Cliente@50" ITEM "Cliente@50"
@ -65,4 +65,4 @@ END
ENDPAGE ENDPAGE
ENDMASK ENDMASK
#include "EF0300B.UML" #include "ef0300d.uml"

View File

@ -28,7 +28,7 @@ BEGIN
ITEM "S| Allo sconto" ITEM "S| Allo sconto"
END END
NUMBER F_NUMBER 7 NUMBER F_NUMBER 5
BEGIN BEGIN
PROMPT 43 5 "Numero Distinta " PROMPT 43 5 "Numero Distinta "
FLAGS "R" FLAGS "R"

View File

@ -115,13 +115,13 @@ BEGIN
PROMPT 4 9 " " PROMPT 4 9 " "
KEY 4 KEY 4
GROUP 3 GROUP 3
ITEM " |** Nessuno **" ITEM " | "
ITEM "I|All'incasso" ITEM "I|All'incasso"
ITEM "B|Salvo buon fine" ITEM "B|Salvo buon fine"
ITEM "S|Allo sconto" ITEM "S|Allo sconto"
END END
NUMBER F_DADIST 7 NUMBER F_DADIST 5
BEGIN BEGIN
PROMPT 4 10 " " PROMPT 4 10 " "
FLAGS "R" FLAGS "R"
@ -150,13 +150,13 @@ BEGIN
PROMPT 31 9 " " PROMPT 31 9 " "
GROUP 3 GROUP 3
KEY 4 KEY 4
ITEM " |** Nessuno **" ITEM " | "
ITEM "I|All'incasso" ITEM "I|All'incasso"
ITEM "B|Salvo buon fine" ITEM "B|Salvo buon fine"
ITEM "S|Allo sconto" ITEM "S|Allo sconto"
END END
NUMBER F_ADIST 7 NUMBER F_ADIST 5
BEGIN BEGIN
PROMPT 31 10 " " PROMPT 31 10 " "
FLAGS "R" FLAGS "R"