Patch level : 12.0 1044

Files correlati     : cg0.exe cg0200a.msk cgtbbnp.msk
Commento        :

Agiunto supporto per IBAN esteri all'anagrafica clienti e alle banche di presentazione
This commit is contained in:
Alessandro Bonazzi 2021-03-22 11:34:27 +01:00
parent 5129e36b37
commit 728cfef2eb
7 changed files with 114 additions and 122 deletions

View File

@ -797,9 +797,8 @@ void TClifo_application::init_modify_mode(TMask& m)
void TClifo_application::set_pnae(TMask& m, TToken_string& nonacc, TToken_string& nonscd)
{
TSheet_field& pnae = m.sfield(F_NONACCEFF);
pnae.reset_sheet();
TSheet_field& pnae = m.sfield(F_NONACCEFF);
pnae.destroy();
TToken_string periodo(12, ',');
int per = 0;
for (bool good = nonacc.get(per, periodo); good; good = nonacc.get(++per, periodo))
@ -815,10 +814,11 @@ void TClifo_application::set_pnae(TMask& m, TToken_string& nonacc, TToken_string
void TClifo_application::add_bank(TSheet_field& ns_sh, const TRectype& rec)
{
TToken_string & row = ns_sh.row(-1);
TString4 iso, cin, bcin;
TString8 abi, cab;
TString80 numcc, iban;
TString8 progr;
switch (rec.num())
{
@ -831,6 +831,8 @@ void TClifo_application::add_bank(TSheet_field& ns_sh, const TRectype& rec)
case LF_CFVEN:
abi = rec.get(CFV_CODABIPR);
cab = rec.get(CFV_CODCABPR);
if (ns_sh.sheet_mask().efield(F_PROGPR).active())
progr = "01"; // verificare
break;
case LF_CFBAN:
abi = rec.get(CFBAN_ABI);
@ -840,85 +842,43 @@ void TClifo_application::add_bank(TSheet_field& ns_sh, const TRectype& rec)
// Copia il progressivo solo nello sheet delle banche di presentazione
if (ns_sh.sheet_mask().efield(F_PROGPR).active())
{
const TString& progr = rec.get(CFBAN_PROGPR);
row.add(progr, ns_sh.cid2index(F_PROGPR));
if (abi.len()+cab.len() == 10)
{
TString16 codtab; codtab << abi << cab << progr;
const TString& ib = cache().get("BNP", codtab, "S3");
TString msg;
if (iban_check(ib, msg) == 0)
iban = ib;
}
progr = rec.get(CFBAN_PROGPR);
TString16 codtab; codtab << abi << cab << progr;
iban = cache().get("BNP", codtab, "S3");
}
break;
default:
break;
}
// Esistono dati erronamente più lunghi
numcc.cut(12); numcc.trim();
if (iban.full())
split_IBAN(iban, iso, cin, bcin, abi, cab, numcc);
if (iso.full() || cin.full() || bcin.full() || abi.full() || cab.full() || numcc.full())
{
TString msg;
if (iban_check(iban, msg) == 0)
{
if (iban.starts_with("IT"))
{
abi = iban.mid(5, 5);
cab = iban.mid(10, 5);
numcc = iban.right(12);
}
}
int nrow = ns_sh.set_row_cell(F_IBAN_STATO, iso);
ns_sh.set_row_cell(F_IBAN_CHECK, cin, nrow);
ns_sh.set_row_cell(F_BBAN_CIN, bcin, nrow);
ns_sh.set_row_cell(F_BBAN_ABI, abi, nrow);
ns_sh.set_row_cell(F_BBAN_CAB, cab, nrow);
if (iso == "IT")
ns_sh.set_row_cell(F_BBAN_CONTO, numcc, nrow);
else
ns_sh.set_row_cell(F_BBAN, numcc, nrow);
ns_sh.set_row_cell(F_IBAN, iban, nrow);
if (ns_sh.sheet_mask().efield(F_PROGPR).active())
ns_sh.set_row_cell(F_PROGPR, progr, nrow);
if (abi.full() && cab.full())
{
if (bban_check(iban, msg) == 0)
{
abi = iban.mid(1, 5);
cab = iban.mid(6, 5);
numcc = iban.mid(11);
row.add("IT", ns_sh.cid2index(F_IBAN_STATO));
row.add(iban.left(1), ns_sh.cid2index(F_BBAN_CIN));
}
else
iban.cut(0);
TString key(abi);
key << cab;
ns_sh.set_row_cell(F_DESBAN, cache().get("%BAN", key,"S0"), nrow);
}
}
row.add(abi, ns_sh.cid2index(F_BBAN_ABI));
row.add(cab, ns_sh.cid2index(F_BBAN_CAB));
row.add(numcc, ns_sh.cid2index(F_BBAN_CONTO));
if (abi.len()+cab.len() == 10)
{
TString16 key; key << abi << cab;
row.add(cache().get("%BAN", key, "S0"), ns_sh.cid2index(F_DESBAN));
}
if (row.starts_with("IT") && row.get_int(ns_sh.cid2index(F_IBAN_CHECK)) == 0)
{
const int i = ns_sh.items()-1;
TMask& msk = ns_sh.sheet_row_mask(i);
ns_sh.update_mask(i); // Copia dalla riga alla maschera
msk.efield(F_IBAN_CHECK).validate(K_TAB); // Calcola checksum
const TString& chk = msk.get(F_IBAN_CHECK);
if (!real::is_null(chk) && iban.len() == 23) // BBAN da completare
{
iban.insert(chk);
iban.insert("IT");
}
}
if (iban.full())
{
row.add(iban.left(2), ns_sh.cid2index(F_IBAN_STATO));
row.add(iban.mid(2,2), ns_sh.cid2index(F_IBAN_CHECK));
if (row.starts_with("IT"))
row.add(iban.mid(4,1), ns_sh.cid2index(F_BBAN_CIN));
else
row.add(iban.mid(4), ns_sh.cid2index(F_BBAN));
row.add(iban, ns_sh.cid2index(F_IBAN));
enable_iban_fields(ns_sh.sheet_row_mask(nrow), F_BBAN, F_BBAN_CIN, F_BBAN_ABI,
F_BBAN_CAB, F_BBAN_CONTO, F_DESBAN, iso == "IT",
ns_sh.sheet_mask().efield(F_PROGPR).active(), nrow);
}
}
@ -936,7 +896,6 @@ int TClifo_application::read(TMask& m)
if (_gesven)
{
TToken_string riga(240);
indsp_sheet().reset();
for (i = 0; i < _rel->indirizzi(); i++)
{
@ -983,8 +942,7 @@ int TClifo_application::read(TMask& m)
}
TSheet_field& s = m.sfield(F_SHEET_CONT);
s.reset_sheet();
s.destroy();
for (int c = 0; c < _rel->contatti(); c++)
{
const TRectype& contact = _rel->contatto(c);
@ -1004,7 +962,7 @@ int TClifo_application::read(TMask& m)
const TRectype& clifo = get_relation()->curr(LF_CLIFO);
TSheet_field & ns_sh = m.sfield(F_BANA);
ns_sh.reset_sheet();
ns_sh.destroy(-1, false);
for (i = 1; i <= ns_ban.rows(); i++)
add_bank(ns_sh, ns_ban.row(i));
if (ns_ban.rows() == 0 && clifo.get_int(CLI_CODABI) != 0)
@ -1018,7 +976,7 @@ int TClifo_application::read(TMask& m)
TRecord_array vs_ban(key, LF_CFBAN);
TSheet_field & vs_sh = m.sfield(F_BANP);
vs_sh.reset_sheet();
vs_sh.destroy(-1, false);
for (i = 1; i <= vs_ban.rows(); i++)
add_bank(vs_sh, vs_ban.row(i));
if (vs_ban.rows() == 0 && cfven.get_int(CFV_CODABIPR) != 0)
@ -1053,7 +1011,7 @@ void TClifo_application::ini2mask(TConfig& ini, TMask& m, bool query)
if (!ini.set_paragraph(para))
break;
if (i == 0)
indsp_sheet().reset_sheet();
indsp_sheet().reset();
riga.cut(0);
riga.add(ini.get(IND_RAGSOC));
@ -1293,6 +1251,7 @@ void TClifo_application::reset_sheet()
{
TToken_string nulla = "|**";
nulla << TR("Nessuno") << "**";
TClifo_application& a = app();
a.field_sheet(F_CODINDDOC).destroy();
@ -1425,19 +1384,18 @@ void TClifo_application::common_f(const TMask& m)
for (int i = 0; i < nsrow; i++)
{
TToken_string & row = ns_sh.row(i);
TRectype & ban = ns_ban.row(i + 1, true);
ban.put(CFBAN_ABI, row.get(ns_sh.cid2index(F_BBAN_ABI)));
ban.put(CFBAN_CAB, row.get(ns_sh.cid2index(F_BBAN_CAB)));
ban.put(CFBAN_NUMCC, row.get(ns_sh.cid2index(F_BBAN_CONTO)));
ban.put(CFBAN_IBAN, row.get(ns_sh.cid2index(F_IBAN)));
ban.put(CFBAN_ABI, ns_sh.get_str_row_cell(i, F_BBAN_ABI));
ban.put(CFBAN_CAB, ns_sh.get_str_row_cell(i, F_BBAN_CAB));
ban.put(CFBAN_NUMCC, ns_sh.get_str_row_cell(i, F_BBAN_CONTO));
ban.put(CFBAN_IBAN, ns_sh.get_str_row_cell(i, F_IBAN));
if (i == 0)
{
clifo.put(CLI_CODABI, row.get(ns_sh.cid2index(F_BBAN_ABI)));
clifo.put(CLI_CODCAB, row.get(ns_sh.cid2index(F_BBAN_CAB)));
clifo.put(CLI_NUMCC, row.get(ns_sh.cid2index(F_BBAN_CONTO)));
clifo.put(CLI_IBAN, row.get(ns_sh.cid2index(F_IBAN)));
clifo.put(CLI_CODABI, ns_sh.get_str_row_cell(i, F_BBAN_ABI));
clifo.put(CLI_CODCAB, ns_sh.get_str_row_cell(i, F_BBAN_CAB));
clifo.put(CLI_NUMCC, ns_sh.get_str_row_cell(i, F_BBAN_CONTO));
clifo.put(CLI_IBAN, ns_sh.get_str_row_cell(i, F_IBAN));
}
}
if (nsrow == 0)
@ -1463,16 +1421,15 @@ void TClifo_application::common_f(const TMask& m)
for (int i = 0; i < vsrow; i++)
{
TToken_string & row = vs_sh.row(i);
TRectype & ban = vs_ban.row(i + 1, true);
ban.put(CFBAN_ABI, row.get(vs_sh.cid2index(F_BBAN_ABI)));
ban.put(CFBAN_CAB, row.get(vs_sh.cid2index(F_BBAN_CAB)));
ban.put(CFBAN_PROGPR, row.get(vs_sh.cid2index(F_PROGPR)));
ban.put(CFBAN_ABI, vs_sh.get_str_row_cell(i, F_BBAN_ABI));
ban.put(CFBAN_CAB, vs_sh.get_str_row_cell(i, F_BBAN_CAB));
ban.put(CFBAN_PROGPR, vs_sh.get_str_row_cell(i, F_PROGPR));
if (i == 0)
{
cfven.put(CFV_CODABIPR, row.get(ns_sh.cid2index(F_BBAN_ABI)));
cfven.put(CFV_CODCABPR, row.get(ns_sh.cid2index(F_BBAN_CAB)));
cfven.put(CFV_CODABIPR, vs_sh.get_str_row_cell(i, F_BBAN_ABI));
cfven.put(CFV_CODCABPR, vs_sh.get_str_row_cell(i, F_BBAN_CAB));
}
}
if (vsrow == 0)

View File

@ -210,11 +210,10 @@
#define F_BBAN_ABI 104
#define F_BBAN_CAB 105
#define F_BBAN_CONTO 106
#define F_PROGPR 107
#define F_DESBAN 108
#define F_IBAN 109
#define F_BBAN 350
#define F_BBAN 107
#define F_PROGPR 108
#define F_DESBAN 109
#define F_IBAN 110
//////////////////////////////////////

View File

@ -838,6 +838,7 @@ BEGIN
ITEM "IBAN\nABI@5"
ITEM "IBAN\nCAB@5"
ITEM "IBAN\nConto@12"
ITEM "BBAN@15"
ITEM "@1"
ITEM "Descrizione@50"
ITEM "IBAN@27"
@ -857,6 +858,7 @@ BEGIN
ITEM "IBAN\nABI@5"
ITEM "IBAN\nCAB@5"
ITEM "IBAN\nConto@12"
ITEM "BBAN@15"
ITEM "Progressivo"
ITEM "Descrizione@50"
ITEM "IBAN@27"
@ -2401,26 +2403,26 @@ ENDPAGE
ENDMASK
PAGE "Banche di appoggio" -1 -1 52 5
PAGE "Banche di appoggio" -1 -1 80 8
STRING F_IBAN_STATO 2
BEGIN
PROMPT 1 1 ""
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
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 F_DESBAN 0
END
NUMBER F_IBAN_CHECK 2
BEGIN
PROMPT 5 1 ""
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
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 F_DESBAN 0
END
STRINGA F_BBAN_CIN 1
BEGIN
PROMPT 9 1 ""
FLAGS "U"
FLAGS "UG"
VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO
END
@ -2434,7 +2436,7 @@ BEGIN
OUTPUT F_BBAN_ABI CODTAB[1,5]
HELP "Codice ABI banca del C/F"
CHECKTYPE NORMAL
FLAGS "Z"
FLAGS "ZG"
END
NUMBER F_BBAN_CAB 5
@ -2451,16 +2453,22 @@ BEGIN
OUTPUT F_DESBAN S0
HELP "Codice CAB banca del C/F"
CHECKTYPE NORMAL
FLAGS "Z"
FLAGS "ZG"
END
STRING F_BBAN_CONTO 12
BEGIN
PROMPT 30 1 ""
FLAGS "UZ"
FLAGS "UZG"
VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO
END
STRING F_BBAN 30
BEGIN
PROMPT 30 2 ""
FLAGS "UG"
END
NUMBER F_PROGPR 2
BEGIN
PROMPT 1 60 "Progressivo IGNORATO"
@ -2469,27 +2477,22 @@ END
STRING F_DESBAN 50 40
BEGIN
PROMPT 1 2 ""
PROMPT 1 3 ""
USE %BAN KEY 2 SELECT CODTAB ?= "??????????"
INPUT S0 F_DESBAN
DISPLAY "Denominazione@50" S0
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
COPY OUTPUT F_BBAN_CAB
FLAGS "G"
END
STRING F_IBAN 27
BEGIN
PROMPT 1 3 "IBAN "
PROMPT 1 4 "IBAN "
FLAGS "D"
END
STRING F_BBAN 23
BEGIN
PROMPT 41 3 "BBAN "
FLAGS "HD"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
@ -2518,6 +2521,7 @@ PAGE "Banche di presentazione" -1 -1 80 8
STRING F_IBAN_STATO 2
BEGIN
PROMPT 2 2 "Codice IBAN "
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 F_DESBAN 1
FLAGS "UDG"
END
@ -2529,7 +2533,7 @@ END
STRINGA F_BBAN_CIN 1
BEGIN
PROMPT 33 42 "BBAN "
PROMPT 33 42 ""
FLAGS "UDG"
END
@ -2555,9 +2559,10 @@ BEGIN
OUTPUT F_IBAN_CHECK S3[3,4]
OUTPUT F_BBAN_CIN S3[5,5]
OUTPUT F_BBAN_CONTO S3[16,27]
OUTPUT F_BBAN S6
HELP "Codice ABI banca del C/F"
CHECKTYPE SEARCH
FLAGS "Z"
FLAGS "ZG"
END
NUMBER F_BBAN_CAB 5
@ -2566,13 +2571,19 @@ BEGIN
COPY ALL F_BBAN_ABI
HELP "Codice CAB banca del C/F"
CHECKTYPE NORMAL
FLAGS "Z"
FLAGS "GZ"
END
STRING F_BBAN_CONTO 12
BEGIN
PROMPT 59 2 ""
FLAGS "UDZ"
FLAGS "UGDZ"
END
STRING F_BBAN 30
BEGIN
PROMPT 59 2 ""
FLAGS "UGD"
END
NUMBER F_PROGPR 2
@ -2592,6 +2603,7 @@ BEGIN
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
COPY OUTPUT F_BBAN_CAB
FLAGS "G"
END
STRING F_IBAN 27

View File

@ -708,7 +708,7 @@ void TCaus_app::load_rcaus(TMask& m)
const TString4 cod(_rel->curr().get(RCA_CODCAUS));
TString d, da(50);
ss().destroy();
ss().reset_sheet();
const int last = _rcaus_rec->last_row();
for (int i = 1; i <= last; i++)

View File

@ -40,6 +40,8 @@ protected:
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
static bool iban_handler(TMask_field& f, KEY k);
public:
// @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
virtual bool check_autorization() const
@ -120,6 +122,17 @@ void CGTTable_application::init_query_mode(TMask& m)
}
}
bool CGTTable_application::iban_handler(TMask_field& f, KEY k)
{
if (f.initial_check(k))
{
const TString & iban = f.get();
set_iban_fields(iban, f.mask(), F_BBAN, F_IBAN_STATO, F_IBAN_CHECK, F_BBAN_CIN, F_BBAN_ABI, F_BBAN_CAB, F_BBAN_CONTO, F_DESBAN, false);
}
return true;
}
bool CGTTable_application::user_create()
{
bool ok = TTable_application::user_create();
@ -132,6 +145,9 @@ bool CGTTable_application::user_create()
}
if (get_tabname() == TAB_NOTECLI)
get_mask()->set_handler(F_NOT_DESC, desnot_handler);
if (get_tabname() == "BNP")
get_mask()->set_handler(F_IBAN, iban_handler);
}
return ok;
}

View File

@ -42,6 +42,7 @@
#define F_BBAN_ABI 145
#define F_BBAN_CAB 146
#define F_BBAN_CONTO 147
#define F_DESBAN 148
#define F_CBI 150
#define F_IBAN_PAG 151

View File

@ -118,7 +118,7 @@ END
STRING F_IBAN 34
BEGIN
PROMPT 2 55 ""
FLAGS "D"
FLAGS "DG"
FIELD S3
END
@ -126,20 +126,21 @@ STRING F_IBAN_STATO 2
BEGIN
PROMPT 2 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
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 F_DESBAN 0
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
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 F_DESBAN 0
END
STRINGA F_BBAN 30
BEGIN
PROMPT 30 6 "BBAN "
FLAGS "UH"
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 F_DESBAN 0
END
STRINGA F_BBAN_CIN 1
@ -170,6 +171,12 @@ BEGIN
VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO
END
STRING F_DESBAN 50
BEGIN
PROMPT 19 7 ""
GROUP "DH"
END
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 8 "@bPortafoglio Effetti all'incasso"