Patch level : 12.0 1044

Files correlati     : ef0.exe ef0100a.msk eftbman.msk
Commento            :

Supporto per gli IBAN esteri negli effetti
This commit is contained in:
Alessandro Bonazzi 2021-03-25 11:55:50 +01:00
parent f171ee3170
commit e01757f2d0
7 changed files with 376 additions and 336 deletions

View File

@ -12,6 +12,18 @@
#include "tabutil.h" #include "tabutil.h"
#include "utility.h" #include "utility.h"
class TEffetti_mask : public TIBAN_mask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
bool on_sheet_event(TOperable_field& o, TField_event e, long jolly);
void calcola_totali();
public:
TEffetti_mask() : TIBAN_mask("ef0100a", F_IBAN_STATO, F_IBAN_CHECK, F_BBAN_CIN, F_CODABI, F_CODCAB, F_BBAN_CONTO, F_IBAN, F_BBAN) {}
};
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
// Classe per la gestione di effetti con metodi standard di: // // Classe per la gestione di effetti con metodi standard di: //
// inserimento, modifica, cancellazione. // // inserimento, modifica, cancellazione. //
@ -29,20 +41,9 @@ protected:
virtual bool get_next_key(TToken_string& key); virtual bool get_next_key(TToken_string& key);
virtual void init_modify_mode(TMask&); virtual void init_modify_mode(TMask&);
static bool clifo_handler(TMask_field& f, KEY k);
static bool datascad_handler(TMask_field& f, KEY k);
static bool mandato_handler(TMask_field& f, KEY k);
static bool handle_sheet(TMask_field& f, KEY);
static bool cambio_handler(TMask_field& f, KEY k);
static bool codval_handler(TMask_field& f, KEY k);
static bool contab_handler(TMask_field& f, KEY k);
static bool fatt_handler(TMask_field& f, KEY k);
static bool impeff_notify(TSheet_field& s, int r, KEY key);
TSheet_field& cess_sheet() const; TSheet_field& cess_sheet() const;
TSheet_field& righe_sheet() const; TSheet_field& righe_sheet() const;
void common_f(const TMask& m); void common_f(const TMask& m);
static void calcola_totali();
virtual int read(TMask& m); virtual int read(TMask& m);
virtual int rewrite(const TMask& m); virtual int rewrite(const TMask& m);
virtual int write(const TMask& m); virtual int write(const TMask& m);
@ -53,19 +54,15 @@ protected:
virtual bool changing_mask(int mode) {return false;} virtual bool changing_mask(int mode) {return false;}
virtual void ini2mask(TConfig& ini, TMask& m, bool query); virtual void ini2mask(TConfig& ini, TMask& m, bool query);
public: public:
virtual bool protected_record(TRectype&); virtual bool protected_record(TRectype&);
virtual TRelation* get_relation() const {return _rel;} virtual TRelation* get_relation() const {return _rel;}
TVariazione_effetti(): _msk(nullptr), _effetto(nullptr), _rel(nullptr) TVariazione_effetti(): _msk(nullptr), _effetto(nullptr), _rel(nullptr) {}
{
}
virtual ~TVariazione_effetti() = default; virtual ~TVariazione_effetti() = default;
}; };
// restituisce un riferimento all' applicazione // 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 // quando si va in query mode resetta i due campi della maschera
// relativi ai totali // relativi ai totali
@ -213,18 +210,21 @@ int TVariazione_effetti::read(TMask& m)
TLocalisamfile& f = _rel->lfile(LF_EFFETTI); TLocalisamfile& f = _rel->lfile(LF_EFFETTI);
// legge l'effetto dal record corrente della relazione // legge l'effetto dal record corrente della relazione
err = _effetto->read(f, _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();
int i;
// m.set(F_IBAN, _rel->curr().get(EFF_IBAN), 0x3);
// carica tutti i cessionari nello sheet dal file // carica tutti i cessionari nello sheet dal file
for (i = 1; i <= items; i++) for (int i = 1; i <= items; i++)
{ {
const TRectype& rec = _effetto->row_c(i); const TRectype& rec = _effetto->row_c(i);
riga.cut(0); riga.cut(0);
@ -242,12 +242,7 @@ int TVariazione_effetti::read(TMask& m)
shcess.row(i-1)=riga; shcess.row(i-1)=riga;
} }
items = _effetto->rows_r(); items = _effetto->rows_r();
// carica tutte le righe dell'effetto nello sheet dal file for (int i = 1; i <= items; i++)
// TEdit_field & e = (TEdit_field &) shrighe.sheet_mask().field(F_NUMFATT);
// CheckType c = e.check_type();
// e.check_type(CHECK_REQUIRED);
for (i = 1; i <= items; i++)
{ {
const TRectype& rec = _effetto->row_r(i); const TRectype& rec = _effetto->row_r(i);
riga.cut(0); riga.cut(0);
@ -268,7 +263,6 @@ int TVariazione_effetti::read(TMask& m)
shrighe.row(i - 1) = riga; shrighe.row(i - 1) = riga;
shrighe.check_row(i - 1); shrighe.check_row(i - 1);
} }
// e.check_type(c);
} }
} }
return err; return err;
@ -309,19 +303,8 @@ bool TVariazione_effetti::user_create()
LF_CLIFO, LF_CFVEN, LF_OCCAS, 0); LF_CLIFO, LF_CFVEN, LF_OCCAS, 0);
_rel = new TRelation(LF_EFFETTI); _rel = new TRelation(LF_EFFETTI);
_effetto = new TEffetto; _effetto = new TEffetto;
_msk = new TMask("ef0100a") ; _msk = new TEffetti_mask ;
_msk->set_handler(F_CODCF, clifo_handler);
_msk->set_handler(F_DATASCAD, datascad_handler);
_msk->set_handler(F_MANDATO, mandato_handler);
_msk->set_handler(F_CODVAL, codval_handler);
_msk->set_handler(F_CAMBIO, cambio_handler);
_msk->set_handler(F_EFFCONT, contab_handler);
_msk->set_handler(F_SHEET_RIGHE, handle_sheet);
righe_sheet().set_append(true); righe_sheet().set_append(true);
righe_sheet().set_notify(impeff_notify);
_msk->sfield(F_SHEET_RIGHE).sheet_mask().set_handler(F_NUMFATT, fatt_handler);
return true; return true;
} }
@ -334,187 +317,55 @@ bool TVariazione_effetti::user_destroy()
return true; return true;
} }
// handler che permette di effettuare il controllo sul fatto void TEffetti_mask::calcola_totali()
// che venga inserita almeno una riga per un effetto
bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
{ {
TMask& m = f.mask(); TSheet_field& sf = sfield(F_SHEET_RIGHE);
const int mode = m.mode();
// se si vuole salvare e si è in uno dei due modi di funzionamento
if ( k == K_ENTER && (mode == MODE_INS || mode == MODE_MOD) )
{ // si controllano le righe del effetto nello sheet
TSheet_field& sf = m.sfield(F_SHEET_RIGHE);
int items = sf.items(); int items = sf.items();
bool found = false; real impeff, impeffval;
for (int i = 0; i < items && !found; i++)// scandisco tutte le righe dello sheet
{
TToken_string& row = sf.row(i);
real imp_eff(row.get(sf.cid2index(F_IMPEFF)));
// controlla che le righe abbiano un importo
if (imp_eff != ZERO) found = true;
}
// se non ha trovato righe nello sheet oppure se quelle che ci sono non
// hanno importo
if (!found)
{ // non permetto di salvare l'effetto
error_box(TR("L'effetto non può contenere righe con importo nullo!"));
return false;
}
}
return true;
}
bool TVariazione_effetti::clifo_handler(TMask_field& f, KEY k) // scandisco tutte le righe dello sheet e ne prendo gli importi
{ // (in lire ed in valuta) e li sommo al totale
if (k == K_TAB && f.to_check(k))
{
TMask& m = f.mask();
const char tipocf = m.get(F_TIPOCF)[0];
const long codcf = m.get_long(F_CODCF);
TCli_for & cf = (TCli_for &)cached_clifor(tipocf, codcf);
const TString & iban = cf.get_iban();
if (iban.full())
{
m.set(F_IBAN, iban);
m.set(F_IBAN_STATO, iban.left(2));
m.set(F_IBAN_CHECK, iban.mid(2,2));
m.set(F_BBAN, iban.mid(4));
m.set(F_BBAN_CIN, iban.mid(4,1));
m.set(F_BBAN_ABI, iban.mid(5,5));
m.set(F_BBAN_CAB, iban.mid(10,5));
m.set(F_BBAN_CONTO, iban.mid(15));
m.efield(F_IBAN_STATO).validate(K_TAB);
}
TToken_string& banp = cf.get_ban_pres();
if (banp.full())
{
m.set(F_CODABIP, banp.get());
m.set(F_CODCABP, banp.get());
m.set(F_PROG, banp.get());
m.efield(F_PROG).validate(K_TAB);
}
}
return true;
}
bool TVariazione_effetti::datascad_handler(TMask_field& f, KEY k)
{
if (k == K_ENTER)
{
const TDate datascad = f.get();
TSheet_field& sf = f.mask().sfield(F_SHEET_RIGHE);
FOR_EACH_SHEET_ROW(sf, r, row)
{
TDate datafat = row->get(F_DATAFATT-FIRST_FIELD);
if (datascad < datafat)
return f.error_box(FR("La data fattura della riga %d è successiva alla data di scadenza"), r+1);
}
}
return true;
}
bool TVariazione_effetti::mandato_handler(TMask_field& f, KEY k)
{
if (k == K_TAB && !f.empty())
{
TMask& m = f.mask();
TEdit_field& i = m.efield(F_IBAN_STATO);
i.validate(K_TAB);
m.set(F_CODABI, m.get(F_BBAN_ABI));
m.set(F_CODCAB, m.get(F_BBAN_CAB));
}
return true;
}
// handler che permette il controllo sulla abilitazione dei campi collegati
// al codice valuta
bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
{
if (f.to_check(k, true))
{
TMask& m = f.mask();
const TString& val = f.get();
// se non c'e valuta o se è lire disabilitato i campi collegati
const bool valuta = (val.not_empty() && val != TCurrency::get_firm_val());
m.enable(-1,valuta);
TSheet_field& sf = m.sfield(F_SHEET_RIGHE);
if (!valuta)
{
m.reset(-1);
m.reset(F_TOTIMPVAL);
for (int i = sf.items() - 1; i >= 0; i--)
{
TToken_string& row = sf.row(i);
row.add(" ", sf.cid2index(F_IMPEFFVAL));
row.add(" ", sf.cid2index(F_IMPFATTVAL));
}
}
sf.enable_column(F_IMPEFFVAL, valuta);
if (f.focusdirty())
sf.force_update();
}
return true;
}
// handler che gestisce la modifica del cambio
bool TVariazione_effetti::cambio_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
//if (k == K_TAB && f.to_check(k, true))
if (k == K_TAB && f.focusdirty())
{
const real cambio = f.get();
const TString& valuta = m.get(F_CODVAL);
TSheet_field& sf = m.sfield(F_SHEET_RIGHE);
int items = sf.items();
real imp, impval;
// scandisco tutte le righe dello sheet e modifico gli importi in lire
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
TToken_string& row = sf.row(i); impeff += sf.get_real_row_cell(i, F_IMPEFF);
impval = row.get(sf.cid2index(F_IMPEFFVAL)); impeffval += sf.get_real_row_cell(i, F_IMPEFFVAL);
TCurrency val(impval, valuta, cambio);
val.change_to_firm_val();
imp = val.get_num();
row.add(imp.string(), sf.cid2index(F_IMPEFF));
} }
if (f.focusdirty()) set(F_TOTIMP, impeff);
sf.force_update(); set(F_TOTIMPVAL, impeffval);
}
return true;
} }
// handler che permette il controllo sulla abilitazione dei campi collegati bool TEffetti_mask::on_sheet_event(TOperable_field& o, TField_event e, long jolly)
// al codice valuta
bool TVariazione_effetti::fatt_handler(TMask_field& f, KEY k)
{ {
TMask &m = f.mask(); TMask& m = o.mask();
if (k == K_TAB && f.focusdirty() || !app().get_mask(MODE_MOD)->is_running()) short id = o.dlg();
{
TEdit_field & e = (TEdit_field &) f;
CheckType c = e.check_type();
e.check_type(CHECK_REQUIRED); switch (id)
const bool ok = e.check(); {
e.check_type(c); case F_NUMFATT:
if (e == fe_modify || !is_running())
{
TEdit_field & ef = (TEdit_field &)o;
CheckType c = ef.check_type();
ef.check_type(CHECK_REQUIRED);
const bool ok = ef.check();
ef.check_type(c);
m.enable(F_DATAFATT, !ok); m.enable(F_DATAFATT, !ok);
m.enable(F_IMPFATT, !ok); m.enable(F_IMPFATT, !ok);
m.enable(F_IMPFATTVAL, !ok && app().get_mask(MODE_MOD)->get(F_CODVAL).not_empty()); m.enable(F_IMPFATTVAL, !ok && is_true_value(get(F_CODVAL)));
if (app().get_mask(MODE_MOD)->is_running() && ok && k == K_TAB && f.focusdirty()) if (is_running() && ok && e == fe_modify)
{ {
const TDocumento d(e.browse()->cursor()->curr()); const TDocumento d(ef.browse()->cursor()->curr());
m.set(F_DATAFATT, d.get("DATADOC"));
const real imp = d.totale_doc(); const real imp = d.totale_doc();
m.set(F_DATAFATT, d.get(DOC_DATADOC));
if (d.in_valuta()) if (d.in_valuta())
{ {
const TString16 codval = d.get(DOC_CODVAL); const TString16 codval = d.get(DOC_CODVAL);
TCurrency val(imp, codval, d.get_real(DOC_CAMBIO)); TCurrency val(imp, codval, d.get_real(DOC_CAMBIO));
val.change_to_firm_val(); val.change_to_firm_val();
const real& lit = val.get_num(); const real& lit = val.get_num();
m.set(F_IMPFATT, lit); m.set(F_IMPFATT, lit);
@ -527,59 +378,208 @@ bool TVariazione_effetti::fatt_handler(TMask_field& f, KEY k)
} }
} }
} }
break;
case F_SHEET_RIGHE:
switch (e)
{
case se_leave:
if (sfield(F_SHEET_RIGHE).focusdirty())
calcola_totali();
return true;
case se_query_del:
if (sfield(F_SHEET_RIGHE).items() == 1)
return error_box(TR("IMPOSSIBILE CANCELLARE: L'effetto deve contenere almeno una riga!"));
return true;
break;
default:
break;
}
default:
break;
}
return true; return true;
} }
bool TVariazione_effetti::contab_handler(TMask_field& f, KEY k) bool TEffetti_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
if (k == K_SPACE) const short id = o.dlg();
switch (id)
{ {
TMask &m = f.mask(); case F_CODCF:
const bool da_contab = f.get().empty(); if (e == fe_modify)
TSheet_field& sf = m.sfield(F_SHEET_RIGHE); {
sf.enable_column(F_ANNO, da_contab); const char tipocf = get(F_TIPOCF)[0];
sf.enable_column(F_NUMPART, da_contab); const long codcf = get_long(F_CODCF);
TCli_for & cf = (TCli_for &)cached_clifor(tipocf, codcf);
const TString & iban = cf.get_iban();
if (iban.full())
set(F_IBAN, iban, 0x3);
TToken_string& banp = cf.get_ban_pres();
if (banp.full())
{
set(F_CODABIP, banp.get());
set(F_CODCABP, banp.get());
set(F_PROG, banp.get());
efield(F_PROG).validate(K_TAB);
}
}
return true;
break;
case F_CODVAL:
if (e == fe_init || e == fe_modify)
{
// se non c'e valuta o se è lire disabilitato i campi collegati
const bool valuta = is_true_value(o.get());
TSheet_field& sf = sfield(F_SHEET_RIGHE);
enable(-1, valuta);
if (!valuta)
{
reset(-1);
reset(F_TOTIMPVAL);
for (int i = sf.items() - 1; i >= 0; i--)
{
TToken_string& row = sf.row(i);
sf.set_row_cell(F_IMPEFFVAL, ZERO, i);
sf.set_row_cell(F_IMPFATTVAL, ZERO, i);
}
}
sf.enable_column(F_IMPEFFVAL, valuta);
sf.enable_column(F_IMPFATTVAL, valuta);
if (o.focusdirty())
sf.force_update(); sf.force_update();
} }
return true; return true;
} break;
case F_DATASCAD:
if (e == fe_close)
{
const TDate datascad = get_date(F_DATASCAD);
TSheet_field& sf = sfield(F_SHEET_RIGHE);
// funzione chiamata dal notify dello sheet per effettuare il calcolo degli FOR_EACH_SHEET_ROW(sf, r, row)
// importi totali (in lire ed in valuta) dell'effetto {
void TVariazione_effetti::calcola_totali() TDate datafat = row->get(F_DATAFATT - FIRST_FIELD);
{
TMask* m = app()._msk; if (datascad < datafat)
TSheet_field& sf = m->sfield(F_SHEET_RIGHE); return error_box(FR("La data fattura della riga %d è successiva alla data di scadenza"), r + 1);
}
}
return true;
break;
case F_MANDATO:
if (e == fe_modify && !o.empty())
efield(F_IBAN).on_hit();
return true;
break;
case F_CAMBIO:
if (e == fe_modify)
{
const TString& valuta = get(F_CODVAL);
if (is_true_value(valuta))
{
const real cambio = get_real(F_CAMBIO);
TSheet_field& sf = sfield(F_SHEET_RIGHE);
int items = sf.items(); int items = sf.items();
real imp, impval, impeff, impeffval;
// scandisco tutte le righe dello sheet e ne prendo gli importi // scandisco tutte le righe dello sheet e modifico gli importi in lire
// (in lire ed in valuta) e li sommo al totale
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
TToken_string& row = sf.row(i); TCurrency val(sf.get_real_row_cell(i, F_IMPEFFVAL), valuta, cambio);
imp = row.get(sf.cid2index(F_IMPEFF));
impeff += imp; val.change_to_firm_val();
impval = row.get(sf.cid2index(F_IMPEFFVAL)); sf.set_row_cell(F_IMPEFF, val.get_num(), i);
impeffval += impval;
} }
m->set(F_TOTIMP, impeff); if (o.focusdirty())
m->set(F_TOTIMPVAL, impeffval); sf.force_update();
}
}
return true;
break;
case F_EFFCONT:
if (e == fe_init || e == fe_modify)
{
const bool da_contab = !get_bool(F_EFFCONT);
TSheet_field& sf = sfield(F_SHEET_RIGHE);
sf.enable_column(F_ANNO, da_contab);
sf.enable_column(F_NUMPART, da_contab);
sf.enable_column(F_NUMRIGA, da_contab);
sf.enable_column(F_NUMRATA, da_contab);
sf.enable_column(F_ACCSAL, da_contab);
sf.force_update();
}
return true;
break;
case F_IMPEFFVAL:
case F_IMPEFF:
if (e == fe_modify)
sfield(F_SHEET_RIGHE).set_focusdirty();
break;
case F_SHEET_RIGHE:
return on_sheet_event(o, e, jolly);
default:
if (jolly > 0)
return on_sheet_event(o, e, jolly);
break;
}
return TIBAN_mask::on_field_event(o, e, jolly);
} }
// 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::iban_handler(TMask_field& f, KEY k)
bool TVariazione_effetti::impeff_notify(TSheet_field& s, int r, KEY key)
{ {
if (s.to_check(key, true)) if (f.to_check(k, true))
{ {
calcola_totali(); TMask& m = f.mask();
const TString & iban = f.get();
m.set(F_IBAN_STATO, iban.left(2), 0x3);
set_iban_fields(iban, m, F_BBAN, F_IBAN_STATO, F_IBAN_CHECK, F_BBAN_CIN, F_CODABI, F_CODCAB, F_BBAN_CONTO, -1, 0);
} }
//se rimane una sola riga nello sheet non la si può cancellare
if (key == K_DEL && s.items() == 1)
return s.error_box(TR("IMPOSSIBILE CANCELLARE: L'effetto deve contenere almeno una riga!"));
return true; return true;
} }
bool TVariazione_effetti::iso_handler(TMask_field& f, KEY k)
{
if (f.initial_check(k) || f.running_check(k))
{
static TString __last_iso;
TMask &m = f.mask();
const TString & iso = f.get();
const bool italy = iso.blank() || iso == "IT";
m.show(F_BBAN, !italy);
m.show(F_BBAN_CONTO, italy);
if (f.running_check(k))
{
if (iso != __last_iso)
{
const TString iban = m.get(F_IBAN);
set_iban_fields(iban.blank() || iban.left(2) != iso ? iso : iban, m, F_BBAN, F_IBAN_STATO, F_IBAN_CHECK, F_BBAN_CIN, F_CODABI, F_CODCAB, F_BBAN_CONTO, -1, 0);
}
__last_iso = iso;
}
else
{
enable_iban_fields(m, F_BBAN, F_BBAN_CIN, F_CODABI, F_CODCAB, F_BBAN_CONTO, -1, italy, 0);
__last_iso = "INV";
}
}
return true;
}
per documenti
*/
int ef0100(int argc, char* argv[]) int ef0100(int argc, char* argv[])
{ {
TVariazione_effetti a ; TVariazione_effetti a ;

View File

@ -49,8 +49,6 @@
#define F_IBAN_CHECK 252 #define F_IBAN_CHECK 252
#define F_BBAN 253 #define F_BBAN 253
#define F_BBAN_CIN 254 #define F_BBAN_CIN 254
#define F_BBAN_ABI 255
#define F_BBAN_CAB 256
#define F_BBAN_CONTO 257 #define F_BBAN_CONTO 257

View File

@ -294,9 +294,29 @@ BEGIN
PROMPT 0 4 "@bBanca d'appoggio" PROMPT 0 4 "@bBanca d'appoggio"
END END
STRING F_IBAN_STATO 2
BEGIN
PROMPT 1 5 "Stato "
FLAGS "U"
END
NUMBER F_IBAN_CHECK 2
BEGIN
PROMPT 11 5 ""
FLAGS "UZ"
VALIDATE CHECK_IBAN_FUNC F_IBAN F_IBAN_STATO F_IBAN_CHECK F_BBAN F_BBAN_CIN F_CODABI F_CODCAB F_BBAN_CONTO -1 0
END
STRINGA F_BBAN_CIN 1
BEGIN
PROMPT 17 5 ""
FLAGS "U"
VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_CODABI F_CODCAB F_BBAN_CONTO
END
NUMBER F_CODABI 5 NUMBER F_CODABI 5
BEGIN BEGIN
PROMPT 1 5 "Codice ABI " PROMPT 20 5 "ABI "
FIELD CODABI FIELD CODABI
FLAGS "Z" FLAGS "Z"
USE %BAN SELECT CODTAB ?= "?????" USE %BAN SELECT CODTAB ?= "?????"
@ -306,12 +326,11 @@ BEGIN
OUTPUT F_CODABI CODTAB[1,5] OUTPUT F_CODABI CODTAB[1,5]
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "Codice ABI assente" WARNING "Codice ABI assente"
MESSAGE COPY,F_BBAN_ABI
END END
NUMBER F_CODCAB 5 NUMBER F_CODCAB 5
BEGIN BEGIN
PROMPT 41 5 "Codice CAB " PROMPT 35 5 "CAB "
FIELD CODCAB FIELD CODCAB
FLAGS "Z" FLAGS "Z"
USE %BAN KEY 1 SELECT CODTAB ?= "??????????" USE %BAN KEY 1 SELECT CODTAB ?= "??????????"
@ -323,62 +342,27 @@ BEGIN
OUTPUT F_CODABI CODTAB[1,5] OUTPUT F_CODABI CODTAB[1,5]
OUTPUT F_CODCAB CODTAB[6,10] OUTPUT F_CODCAB CODTAB[6,10]
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
VALIDATE REQIF_FUNC 1 F_CODCABP
WARNING "Banca assente" WARNING "Banca assente"
MESSAGE COPY,F_BBAN_CAB
END END
STRING F_IBAN 34 STRING F_IBAN 34
BEGIN BEGIN
PROMPT 2 60 "" PROMPT 2 60 ""
FLAGS "D" FLAGS "DG"
FIELD IBAN FIELD IBAN
END END
STRING F_IBAN_STATO 2
BEGIN
PROMPT 1 6 "Codice IBAN "
FLAGS "U"
VALIDATE CHECK_IBAN_FUNC F_IBAN F_IBAN_STATO F_IBAN_CHECK F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO
END
NUMBER F_IBAN_CHECK 2
BEGIN
PROMPT 19 6 ""
FLAGS "UZ"
VALIDATE CHECK_IBAN_FUNC F_IBAN F_IBAN_STATO F_IBAN_CHECK F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO
END
STRINGA F_BBAN 30 STRINGA F_BBAN 30
BEGIN BEGIN
PROMPT 30 6 "BBAN " PROMPT 1 6 "BBAN "
FLAGS "UH" FLAGS "UH"
END END
STRINGA F_BBAN_CIN 1
BEGIN
PROMPT 30 6 "BBAN "
FLAGS "U"
VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO
END
NUMBER F_BBAN_ABI 5
BEGIN
PROMPT 38 6 ""
FLAGS "DGZ"
END
NUMBER F_BBAN_CAB 5
BEGIN
PROMPT 45 6 ""
FLAGS "DGZ"
END
STRING F_BBAN_CONTO 12 STRING F_BBAN_CONTO 12
BEGIN BEGIN
PROMPT 52 6 "" PROMPT 1 6 "Conto "
FLAGS "UZ" FLAGS "UZ"
VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_CODABI F_CODCAB F_BBAN_CONTO
END END

View File

@ -1,8 +1,18 @@
#include <modtbapp.h> #include <modtbapp.h>
#include "eftbman.h"
class TMandati_mask : public TIBAN_mask
{
public:
TMandati_mask() : TIBAN_mask("eftbman", F_STATO, F_CHECK, F_CIN, F_ABI, F_CAB, F_CONTO, F_IBAN, F_BBAN) {}
};
class TMandati_app : public TTable_module_application class TMandati_app : public TTable_module_application
{ {
TMask* user_create_mask() { return new TMandati_mask(); }
public: public:
}; };
int ef0200(int argc, char* argv[]) int ef0200(int argc, char* argv[])

View File

@ -62,7 +62,7 @@ BEGIN
OUTPUT F_CAB CODTAB[6,10] OUTPUT F_CAB CODTAB[6,10]
OUTPUT F_PRO CODTAB[11,12] OUTPUT F_PRO CODTAB[11,12]
OUTPUT F_BANCA 4->S0 OUTPUT F_BANCA 4->S0
CHECTYPE NORMAL CHECTYPE SEARCH
END END
STRING F_BANCA 50 47 STRING F_BANCA 50 47

View File

@ -12,8 +12,13 @@
#define F_DESCR 111 #define F_DESCR 111
#define F_DATA 112 #define F_DATA 112
#define F_SEQUENZA 113 #define F_SEQUENZA 113
#define F_ABI 114 #define F_STATO 114
#define F_CAB 115 #define F_CHECK 115
#define F_IBAN 116 #define F_CIN 116
#define F_ABI 117
#define F_CAB 118
#define F_IBAN 119
#define F_BBAN 120
#define F_CONTO 121
#endif // __EF0200_H #endif // __EF0200_H

View File

@ -115,39 +115,82 @@ BEGIN
FIELD S6 FIELD S6
END END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 12 "@bBanca d'appoggio"
END
STRING F_STATO 2
BEGIN
PROMPT 2 13 "Stato "
FLAGS "U"
END
NUMBER F_CHECK 2
BEGIN
PROMPT 12 13 ""
FLAGS "UZ"
VALIDATE CHECK_IBAN_FUNC F_IBAN F_STATO F_CHECK F_BBAN F_CIN F_ABI F_CAB F_CONTO -1 0
END
STRINGA F_CIN 1
BEGIN
PROMPT 18 13 ""
FLAGS "U"
VALIDATE CHECK_BBAN_FUNC F_BBAN F_CIN F_ABI F_CAB F_CONTO
END
NUMBER F_ABI 5 NUMBER F_ABI 5
BEGIN BEGIN
PROMPT 2 10 "Banca d'appoggio " PROMPT 21 13 "ABI "
FIELD CODABI
FLAGS "Z" FLAGS "Z"
FIELD S4[1,5] USE %BAN SELECT CODTAB ?= "?????"
INPUT CODTAB F_ABI
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Denominazione@50" S0
OUTPUT F_ABI CODTAB[1,5]
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "Codice ABI assente"
FIELD S4[1,5]
END END
NUMBER F_CAB 5 NUMBER F_CAB 5
BEGIN BEGIN
PROMPT 28 10 "" PROMPT 36 13 "CAB "
FLAGS "Z" FLAGS "Z"
USE LF_CFBAN USE %BAN KEY 1 SELECT CODTAB ?= "??????????"
INPUT TIPOCF "C" INPUT CODTAB[1,5] F_ABI
INPUT CODCF F_CODCF SELECT INPUT CODTAB[6,10] F_CAB
INPUT TIPOBAN "V" DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "ABI@5" ABI DISPLAY "Codice CAB" CODTAB[6,10]
DISPLAY "CAB@5" CAB DISPLAY "Denominazione@50" S0
DISPLAY "IBAN@50" IBAN OUTPUT F_ABI CODTAB[1,5]
OUTPUT F_ABI ABI OUTPUT F_CAB CODTAB[6,10]
OUTPUT F_CAB CAB CHECKTYPE REQUIRED
OUTPUT F_IBAN IBAN WARNING "Banca assente"
CHECKTYPE SEARCH
FIELD S4[6,10] FIELD S4[6,10]
END END
STRING F_IBAN 34 STRING F_IBAN 34
BEGIN BEGIN
PROMPT 38 10 "IBAN " PROMPT 2 60 ""
FLAGS "D" FLAGS "DG"
FIELD S1 FIELD S1
END END
STRINGA F_BBAN 30
BEGIN
PROMPT 2 14 "BBAN "
FLAGS "UH"
END
STRING F_CONTO 12
BEGIN
PROMPT 2 14 "Conto "
VALIDATE CHECK_BBAN_FUNC F_BBAN F_CIN F_ABI F_CAB F_CONTO
FLAGS "UZ"
END
ENDPAGE ENDPAGE