Patch level : 10.0
Files correlati : cg0200a.msk cg0.exe Ricompilazione Demo : [ ] Commento : Migliorata e corretta gestione IBAN nelle liste ns. e vs. banche git-svn-id: svn://10.65.10.50/branches/R_10_00@21731 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ec08db1f9b
commit
0400c86fa1
163
cg/cg0200.cpp
163
cg/cg0200.cpp
@ -10,6 +10,7 @@
|
||||
#include <recarray.h>
|
||||
#include <relapp.h>
|
||||
#include <utility.h>
|
||||
#include <validate.h>
|
||||
|
||||
#include <anagr.h>
|
||||
#include <anafis.h>
|
||||
@ -53,6 +54,8 @@ protected:
|
||||
|
||||
void set_pnae(TMask& m, TToken_string& nonacc, TToken_string& nonscd);
|
||||
void get_pnae(const TMask& m, TToken_string& nonacceff, TToken_string& nonscadeff);
|
||||
void add_bank(TSheet_field& ns_sh, const TRectype& rec);
|
||||
|
||||
|
||||
virtual int write(const TMask& m);
|
||||
virtual int rewrite(const TMask& m);
|
||||
@ -656,6 +659,112 @@ void TClifo_application::set_pnae(TMask& m, TToken_string& nonacc, TToken_string
|
||||
pnae.force_update();
|
||||
}
|
||||
|
||||
void TClifo_application::add_bank(TSheet_field& ns_sh, const TRectype& rec)
|
||||
{
|
||||
TToken_string & row = ns_sh.row(-1);
|
||||
|
||||
TString8 abi, cab;
|
||||
TString80 numcc, iban;
|
||||
|
||||
switch (rec.num())
|
||||
{
|
||||
case LF_CLIFO:
|
||||
abi = rec.get(CLI_CODABI);
|
||||
cab = rec.get(CLI_CODCAB);
|
||||
numcc = rec.get(CLI_NUMCC);
|
||||
iban = rec.get(CLI_IBAN);
|
||||
break;
|
||||
case LF_CFVEN:
|
||||
abi = rec.get(CFV_CODABIPR);
|
||||
cab = rec.get(CFV_CODCABPR);
|
||||
break;
|
||||
case LF_CFBAN:
|
||||
abi = rec.get(CFBAN_ABI);
|
||||
cab = rec.get(CFBAN_CAB);
|
||||
numcc = rec.get(CFBAN_NUMCC);
|
||||
iban = rec.get(CFBAN_IBAN);
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (iban.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);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
int TClifo_application::read(TMask& m)
|
||||
{
|
||||
TRelation_application::read(m);
|
||||
@ -709,48 +818,23 @@ int TClifo_application::read(TMask& m)
|
||||
field_sheet(F_CODINDEFF).add(riga);
|
||||
}
|
||||
}
|
||||
TToken_string key;
|
||||
|
||||
TToken_string key;
|
||||
key.add(m.get(F_TIPOCF));
|
||||
key.add(m.get(F_CODCF));
|
||||
key.add("V");
|
||||
|
||||
TRecord_array ns_ban(key, LF_CFBAN);
|
||||
|
||||
const TRectype& clifo = get_relation()->curr(LF_CLIFO);
|
||||
TSheet_field & ns_sh = m.sfield(F_BANA);
|
||||
|
||||
ns_sh.destroy(-1, false);
|
||||
for (i = 1; i <= ns_ban.rows(); i++)
|
||||
{
|
||||
TToken_string & row = ns_sh.row(i -1);
|
||||
const TRectype & ban = ns_ban.row(i);
|
||||
|
||||
row.add(ban.get(CFBAN_ABI), ns_sh.cid2index(F_BBAN_ABI));
|
||||
row.add(ban.get(CFBAN_CAB), ns_sh.cid2index(F_BBAN_CAB));
|
||||
row.add(ban.get(CFBAN_NUMCC), ns_sh.cid2index(F_BBAN_CONTO));
|
||||
|
||||
const TString & iban = ban.get(CFBAN_IBAN);
|
||||
|
||||
row.add(iban, ns_sh.cid2index(F_IBAN));
|
||||
ns_sh.update_mask(i - 1);
|
||||
if (iban.full())
|
||||
ns_sh.sheet_row_mask(i - 1).efield(F_IBAN_STATO).validate(K_TAB); // Decodifica IBAN
|
||||
ns_sh.update_row(i - 1);
|
||||
}
|
||||
add_bank(ns_sh, ns_ban.row(i));
|
||||
if (ns_ban.rows() == 0 && clifo.get_int(CLI_CODABI) != 0)
|
||||
{
|
||||
TToken_string & row = ns_sh.row(0);
|
||||
add_bank(ns_sh, clifo);
|
||||
|
||||
row.add(clifo.get(CLI_CODABI), ns_sh.cid2index(F_BBAN_ABI));
|
||||
row.add(clifo.get(CLI_CODCAB), ns_sh.cid2index(F_BBAN_CAB));
|
||||
row.add(clifo.get(CLI_NUMCC), ns_sh.cid2index(F_BBAN_CONTO));
|
||||
|
||||
const TString & iban = clifo.get(CLI_IBAN);
|
||||
|
||||
row.add(iban, ns_sh.cid2index(F_IBAN));
|
||||
ns_sh.update_mask(0);
|
||||
}
|
||||
key.cut(0);
|
||||
key.cut(0);
|
||||
key.add(m.get(F_TIPOCF));
|
||||
key.add(m.get(F_CODCF));
|
||||
key.add("N");
|
||||
@ -760,25 +844,10 @@ int TClifo_application::read(TMask& m)
|
||||
|
||||
vs_sh.destroy(-1, false);
|
||||
for (i = 1; i <= vs_ban.rows(); i++)
|
||||
{
|
||||
TToken_string & row = vs_sh.row(i -1);
|
||||
const TRectype & ban = vs_ban.row(i);
|
||||
|
||||
row.add(ban.get(CFBAN_ABI), vs_sh.cid2index(F_BBAN_ABI));
|
||||
row.add(ban.get(CFBAN_CAB), vs_sh.cid2index(F_BBAN_CAB));
|
||||
row.add(ban.get(CFBAN_PROGPR), vs_sh.cid2index(F_PROGPR));
|
||||
vs_sh.update_mask(i - 1);
|
||||
vs_sh.sheet_row_mask(i - 1).efield(F_IBAN_STATO).validate(K_TAB); // Decodifica IBAN
|
||||
vs_sh.update_row(i - 1);
|
||||
}
|
||||
add_bank(vs_sh, vs_ban.row(i));
|
||||
if (vs_ban.rows() == 0 && cfven.get_int(CFV_CODABIPR) != 0)
|
||||
{
|
||||
TToken_string & row = vs_sh.row(0);
|
||||
add_bank(vs_sh, cfven);
|
||||
|
||||
row.add(cfven.get(CFV_CODABIPR), vs_sh.cid2index(F_BBAN_ABI));
|
||||
row.add(cfven.get(CFV_CODCABPR), vs_sh.cid2index(F_BBAN_CAB));
|
||||
vs_sh.update_mask(0);
|
||||
}
|
||||
return _rel->status();
|
||||
}
|
||||
|
||||
|
@ -668,14 +668,14 @@ BEGIN
|
||||
PROMPT 0 4 "@bBanche di appoggio"
|
||||
END
|
||||
|
||||
SPREADSHEET F_BANA 80 7
|
||||
SPREADSHEET F_BANA 0 8
|
||||
BEGIN
|
||||
PROMPT 0 5 ""
|
||||
ITEM "IBAN\nStato"
|
||||
ITEM "IBAN\nCheck"
|
||||
ITEM "IBAN\nCIN"
|
||||
ITEM "IBAN\nABI"
|
||||
ITEM "IBAN\nCAB"
|
||||
ITEM "IBAN\nNaz.@4"
|
||||
ITEM "IBAN\nChk.@4"
|
||||
ITEM "IBAN\nCIN@4"
|
||||
ITEM "IBAN\nABI@5"
|
||||
ITEM "IBAN\nCAB@5"
|
||||
ITEM "IBAN\nConto@12"
|
||||
ITEM "@1"
|
||||
ITEM "Descrizione@50"
|
||||
@ -687,14 +687,14 @@ BEGIN
|
||||
PROMPT 0 14 "@bBanche di presentazione"
|
||||
END
|
||||
|
||||
SPREADSHEET F_BANP 80 7
|
||||
SPREADSHEET F_BANP 0 0
|
||||
BEGIN
|
||||
PROMPT 0 15 ""
|
||||
ITEM "IBAN\nStato"
|
||||
ITEM "IBAN\nCheck"
|
||||
ITEM "IBAN\nCIN"
|
||||
ITEM "IBAN\nABI"
|
||||
ITEM "IBAN\nCAB"
|
||||
ITEM "IBAN\nNaz.@4"
|
||||
ITEM "IBAN\nChk@4"
|
||||
ITEM "IBAN\nCIN@4"
|
||||
ITEM "IBAN\nABI@5"
|
||||
ITEM "IBAN\nCAB@5"
|
||||
ITEM "IBAN\nConto@12"
|
||||
ITEM "Progressivo"
|
||||
ITEM "Descrizione@50"
|
||||
@ -2059,32 +2059,32 @@ ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Banche di appoggio" -1 -1 80 8
|
||||
PAGE "Banche di appoggio" -1 -1 52 5
|
||||
|
||||
STRING F_IBAN_STATO 2
|
||||
BEGIN
|
||||
PROMPT 2 2 "Codice IBAN "
|
||||
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
|
||||
END
|
||||
|
||||
NUMBER F_IBAN_CHECK 2
|
||||
BEGIN
|
||||
PROMPT 24 2 ""
|
||||
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
|
||||
END
|
||||
|
||||
STRINGA F_BBAN_CIN 1
|
||||
BEGIN
|
||||
PROMPT 33 2 "BBAN "
|
||||
PROMPT 9 1 ""
|
||||
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 41 2 ""
|
||||
PROMPT 12 1 ""
|
||||
USE %BAN SELECT CODTAB ?= "?????"
|
||||
INPUT CODTAB F_BBAN_ABI
|
||||
DISPLAY "Codice ABI" CODTAB[1,5]
|
||||
@ -2097,7 +2097,7 @@ END
|
||||
|
||||
NUMBER F_BBAN_CAB 5
|
||||
BEGIN
|
||||
PROMPT 50 2 ""
|
||||
PROMPT 21 1 ""
|
||||
USE %BAN SELECT CODTAB ?= "??????????"
|
||||
INPUT CODTAB[1,5] F_BBAN_ABI
|
||||
INPUT CODTAB[6,10] F_BBAN_CAB
|
||||
@ -2114,20 +2114,20 @@ END
|
||||
|
||||
STRING F_BBAN_CONTO 12
|
||||
BEGIN
|
||||
PROMPT 59 2 ""
|
||||
PROMPT 30 1 ""
|
||||
FLAGS "UZ"
|
||||
VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO
|
||||
END
|
||||
|
||||
NUMBER F_PROGPR 2
|
||||
BEGIN
|
||||
PROMPT 2 60 ""
|
||||
PROMPT 1 60 "Progressivo IGNORATO"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_DESBAN 50 40
|
||||
BEGIN
|
||||
PROMPT 20 4 "Descrizione "
|
||||
PROMPT 1 2 ""
|
||||
USE %BAN KEY 2 SELECT CODTAB ?= "??????????"
|
||||
INPUT S0 F_DESBAN
|
||||
DISPLAY "Denominazione@50" S0
|
||||
@ -2138,13 +2138,13 @@ END
|
||||
|
||||
STRING F_IBAN 27
|
||||
BEGIN
|
||||
PROMPT 2 6 "IBAN "
|
||||
PROMPT 1 3 "IBAN "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_BBAN 23
|
||||
BEGIN
|
||||
PROMPT 2 60 "BBAN "
|
||||
PROMPT 41 3 "BBAN "
|
||||
FLAGS "HD"
|
||||
END
|
||||
|
||||
@ -2242,7 +2242,7 @@ END
|
||||
|
||||
STRING F_DESBAN 50 40
|
||||
BEGIN
|
||||
PROMPT 20 4 "Descrizione "
|
||||
PROMPT 20 3 "Descrizione "
|
||||
USE %BAN KEY 2 SELECT (CODTAB ?= "??????????"&&100@->CODTAB!="")
|
||||
JOIN BNP ALIAS 100 INTO CODTAB==CODTAB
|
||||
INPUT S0 F_DESBAN
|
||||
|
@ -180,15 +180,7 @@ void TValuta::put(TRectype& rec) const
|
||||
|
||||
void TValuta::set(TMask& m, short v, short d, short c, short e) const
|
||||
{
|
||||
if (in_lire())
|
||||
{
|
||||
m.reset(v);
|
||||
m.reset(d);
|
||||
m.reset(c);
|
||||
if (e && m.id2pos(e) >= 0)
|
||||
m.reset(e);
|
||||
}
|
||||
else
|
||||
if (in_valuta())
|
||||
{
|
||||
m.set(v, _cod);
|
||||
m.set(d, _dat.string());
|
||||
@ -196,6 +188,14 @@ void TValuta::set(TMask& m, short v, short d, short c, short e) const
|
||||
if (e && m.id2pos(e) >= 0)
|
||||
m.set(e, _et == _exchange_contro ? "X" : "");
|
||||
}
|
||||
else
|
||||
{
|
||||
m.reset(v);
|
||||
m.reset(d);
|
||||
m.reset(c);
|
||||
if (e && m.id2pos(e) >= 0)
|
||||
m.reset(e);
|
||||
}
|
||||
}
|
||||
|
||||
void TValuta::get(const TMask& m, short v, short d, short c, short e)
|
||||
@ -620,7 +620,7 @@ bool TRiga_scadenze::modifica_pagamento(const TRectype& new_pag, const TValuta&
|
||||
|
||||
old_diffcam = calcola_differenza_cambio(nrigp, false);
|
||||
|
||||
if (in_val && !valuta.in_lire())
|
||||
if (in_val && valuta.in_valuta())
|
||||
valuta.put(sum);
|
||||
|
||||
row(nrigp) = new_pag;
|
||||
@ -894,8 +894,8 @@ bool TRiga_partite::in_valuta() const
|
||||
TImporto TRiga_partite::importo(bool valuta, int mode) const
|
||||
{
|
||||
CHECKD(mode > 0x0 && mode <= 0xF, "Bad importo mode ", mode);
|
||||
const bool in_lire = !in_valuta(); // Partita in lire
|
||||
if (valuta && in_lire)
|
||||
const bool in_euro = !in_valuta(); // Partita in Euro
|
||||
if (valuta && in_euro)
|
||||
valuta = false;
|
||||
|
||||
TImporto i;
|
||||
@ -918,7 +918,7 @@ TImporto TRiga_partite::importo(bool valuta, int mode) const
|
||||
}
|
||||
else // Desidero gli abbuoni in lire
|
||||
{
|
||||
if (in_lire && (mode & 0x8))
|
||||
if (in_euro && (mode & 0x8))
|
||||
{
|
||||
i.valore() += get_real(PART_RITENUTE);
|
||||
if (sezione() == sezione_ritsoc())
|
||||
@ -930,7 +930,7 @@ TImporto TRiga_partite::importo(bool valuta, int mode) const
|
||||
if (mode & 0x2)
|
||||
{
|
||||
TImporto abbuoni(get_char(PART_SEZABB), get_real(PART_ABBUONI));
|
||||
if (!in_lire) // Converto in lire gli abbuoni che sono memorizzati in valuta
|
||||
if (!in_euro) // Converto in lire gli abbuoni che sono memorizzati in valuta
|
||||
{
|
||||
const real cambio(get(PART_CAMBIO));
|
||||
TCurrency cur(abbuoni.valore(), codice_valuta(), cambio);
|
||||
@ -940,7 +940,7 @@ TImporto TRiga_partite::importo(bool valuta, int mode) const
|
||||
i += abbuoni;
|
||||
}
|
||||
|
||||
if (!in_lire && (mode & 0x4)) // Se ci sono e desidero le differenze cambio
|
||||
if (!in_euro && (mode & 0x4)) // Se ci sono e desidero le differenze cambio
|
||||
{
|
||||
const TImporto diffcam(get_char(PART_SEZDIFCAM), get_real(PART_DIFFCAM));
|
||||
i += diffcam;
|
||||
|
Loading…
x
Reference in New Issue
Block a user