Patch level : 12.0 1044

Files correlati     : ef0.exe ef0100a.msk eftbman.msk f98.trr ef0a00a.msk
Commento            :

Supporto per gli IBAN esteri negli effetti
This commit is contained in:
Alessandro Bonazzi 2021-03-27 00:44:17 +01:00
parent c351af1642
commit 13190787a0
2 changed files with 97 additions and 88 deletions

View File

@ -543,13 +543,15 @@ bool TPE_mask::fill_distinta(bool clear_all)
bool partially_unassigned;
TSheet_field& sheet = sfield(F_SHEET);
TToken_string& row = sheet.row(rows++);
if (fill_row(rs, row, partially_unassigned, dist_cont, clear_all))
{
row.add(eff.get(EFF_CUP), sheet.cid2index(F_CUP));
row.add(eff.get(EFF_CIG), sheet.cid2index(F_CIG));
row.add(eff.get(EFF_CODABI), sheet.cid2index(F_ABIAPP));
row.add(eff.get(EFF_CODCAB), sheet.cid2index(F_CABAPP));
row.add(eff.get(EFF_IBAN), sheet.cid2index(F_IBANAPP));
row.add(eff.get(EFF_CUP), cid2index(F_CUP));
row.add(eff.get(EFF_CIG), cid2index(F_CIG));
row.add(eff.get(EFF_CODABI), cid2index(F_ABIAPP));
row.add(eff.get(EFF_CODCAB), cid2index(F_CABAPP));
row.add(eff.get(EFF_IBAN), cid2index(F_IBANAPP));
sheet.enable_cell(r - 1, cid2index(F_IBANAPP), row.get_int(cid2index(F_RIGAEFF)) < 2);
sheet.check_row(r - 1);
if (partially_unassigned)
sheet.disable_cell(r - 1, 1); // Non e' possibile mettere saldo
@ -659,29 +661,26 @@ bool TPE_mask::check_bank(TEffetto& effetto, TLog_report& log) const
TString8 cab = effetto.get(EFF_CODCAB);
TString80 iban = effetto.get(EFF_IBAN);
if (iban.blank())
{
TToken_string key(8);
key = effetto.get(EFF_TIPOCF);
key.add(effetto.get(EFF_CODCF));
const TRectype& clifo = cache().get(LF_CLIFO, key);
key.add("V");
key.add(1);
const TRectype& clifo = cache().get(LF_CFBAN, key);
if (real::is_null(abi) || real::is_null(cab))
{
abi = clifo.get(CLI_CODABI);
cab = clifo.get(CLI_CODCAB);
}
if (iban.blank())
iban = clifo.get(CLI_IBAN);
if (iban.starts_with("IT") && iban.len() > 15)
{
abi = iban.mid(5, 5);
cab = iban.mid(10, 5);
}
effetto.put(EFF_CODABI, abi);
effetto.put(EFF_CODCAB, cab);
effetto.put(EFF_IBAN, iban);
if (tipocf == 'C' && tipopag == 3)
if (real::is_null(abi) || real::is_null(cab))
{
@ -700,6 +699,7 @@ bool TPE_mask::check_bank(TEffetto& effetto, TLog_report& log) const
log.log(2, msg);
return false;
}
}
return true;
}
@ -709,6 +709,7 @@ void TPE_mask::save_rate()
const char tipodist = get(F_TIPODIST)[0];
long numdist = get_long(F_DIST);
if (_is_new)
{
TLocalisamfile f(LF_EFFETTI); f.setkey(4);
@ -719,7 +720,9 @@ void TPE_mask::save_rate()
f.put(EFF_NRIGADIST, 1);
if (f.read(_isgteq) != NOERR || f.get_char(EFF_TIPODIST) != tipodist || f.get_long(EFF_NDIST) != numdist)
break;
const long nd = get_free_num();
TString msg; msg.format(FR("La distinta %ld è già presente: verrà rinumerata in %ld"), numdist, nd);
log.log(1, msg);
numdist = nd;
@ -728,19 +731,18 @@ void TPE_mask::save_rate()
}
TDistinta distinta(tipodist, numdist, _lock);
const TString& codval = get(F_CODVAL);
const real cambio = get(F_CAMBIO);
const int tipopag = get_int(F_TIPOPAG);
bool zeroes = false; // Esistono righe effetto da cancellare
const bool attivo = get(F_TIPOCF) == "C";
TSheet_field& sheet = sfield(F_SHEET);
FOR_EACH_SHEET_ROW(sheet, r, row)
{
real imp = row->get(sheet.cid2index(F_IMPORTO));
real imp = row->get(cid2index(F_IMPORTO));
real impval;
if (codval.full() && !imp.is_zero())
{
impval = imp;
@ -748,58 +750,64 @@ void TPE_mask::save_rate()
c.change_to_firm_val();
imp = c.get_num();
}
char accsal = row->get_char(sheet.cid2index(F_ACCSAL));
int rigadist = row->get_int(sheet.cid2index(F_RIGADIST));
int rigaeff = row->get_int(sheet.cid2index(F_RIGAEFF));
char accsal = row->get_char(cid2index(F_ACCSAL));
int rigadist = row->get_int(cid2index(F_RIGADIST));
int rigaeff = row->get_int(cid2index(F_RIGAEFF));
if (rigaeff > 0 || accsal == 'S' || imp > ZERO)
{
TToken_string key;
key.add(get(F_TIPOCF));
key.add("0|0");
key.add(row->get(sheet.cid2index(F_CODCF)));
key.add(row->get(sheet.cid2index(F_ANNO)));
key.add(row->get(sheet.cid2index(F_PARTITA)));
key.add(row->get(sheet.cid2index(F_RIGA)));
key.add(row->get(cid2index(F_CODCF)));
key.add(row->get(cid2index(F_ANNO)));
key.add(row->get(cid2index(F_PARTITA)));
key.add(row->get(cid2index(F_RIGA)));
// Trova partita
const TRectype& part = cache().get(LF_PARTITE, key);
// Trova rata
key.add(row->get(sheet.cid2index(F_RATA)));
key.add(row->get(cid2index(F_RATA)));
const TRectype& scad = cache().get(LF_SCADENZE, key);
// eff.put(EFF_DATASCAD, scad.get(SCAD_DATASCAD));
TDate datapag(row->get(sheet.cid2index(F_DATAPAG)));
TDate datapag(row->get(cid2index(F_DATAPAG)));
if (!datapag.ok())
datapag = attivo ? scad.get(SCAD_DATASCAD) : get(F_DATADIST);
const TString cup = row->get(sheet.cid2index(F_CUP));
const TString cup = row->get(cid2index(F_CUP));
const TRectype& mov = cache().get(LF_MOV, part.get(PART_NREG));
const TString cig = row->get(sheet.cid2index(F_CIG));
const TString cig = row->get(cid2index(F_CIG));
const TString16 contsep = mov.get(MOV_CONTSEP);
TEffetto& eff = distinta[rigadist - 1];
if (rigaeff <= 0)
{
const char tipocf = get(F_TIPOCF)[0];
const long codcf = row->get_long(sheet.cid2index(F_CODCF));
const long codcf = row->get_long(cid2index(F_CODCF));
TRectype& reff = new_row_effetto(distinta, tipocf, codcf, cup, cig, contsep, datapag, rigadist, rigaeff);
reff.put(REFF_ANNO, row->get(sheet.cid2index(F_ANNO)));
reff.put(REFF_NUMPART, row->get(sheet.cid2index(F_PARTITA)));
reff.put(REFF_NRIGA, row->get(sheet.cid2index(F_RIGA)));
reff.put(REFF_NRATA, row->get(sheet.cid2index(F_RATA)));
reff.put(REFF_ANNO, row->get(cid2index(F_ANNO)));
reff.put(REFF_NUMPART, row->get(cid2index(F_PARTITA)));
reff.put(REFF_NRIGA, row->get(cid2index(F_RIGA)));
reff.put(REFF_NRATA, row->get(cid2index(F_RATA)));
reff.put(REFF_NFATT, part.get(PART_NUMDOC));
reff.put(REFF_DATAFATT, part.get(PART_DATADOC));
reff.put(REFF_IMPFATT, part.get(PART_IMPORTO));
TEffetto& eff = distinta[rigadist-1];
eff.put(EFF_DSCVAL, row->get(sheet.cid2index(F_VALBEN)));
eff.put(EFF_TIPOPAG, tipopag);
eff.put(EFF_CODABI, row->get(sheet.cid2index(F_ABIAPP)));
eff.put(EFF_CODCAB, row->get(sheet.cid2index(F_ABIAPP)));
eff.put(EFF_IBAN, row->get(sheet.cid2index(F_IBANAPP)));
}
TEffetto& eff = distinta[rigadist-1];
if (sheet.cell_enabled(r, cid2index(F_IBANAPP)))
{
eff.put(EFF_CODABI, row->get(cid2index(F_ABIAPP)));
eff.put(EFF_CODCAB, row->get(cid2index(F_ABIAPP)));
eff.put(EFF_IBAN, row->get(cid2index(F_IBANAPP)));
}
eff.put(EFF_DATASCAD, datapag);
eff.put(EFF_CUP, cup);
eff.put(EFF_CIG, cig);
@ -807,9 +815,9 @@ void TPE_mask::save_rate()
check_bank(eff, log); // Cerca di sistemare ABI/CAB/IBAN
TRectype& reff = eff.row_r(rigaeff);
const real oldimp = reff.get(REFF_IMPORTO);
const real oldimpval = reff.get(REFF_IMPORTOVAL);
reff.put(REFF_IMPORTO, imp);
reff.put(REFF_IMPORTOVAL, impval);
reff.put(REFF_ACCSAL, accsal);
@ -823,10 +831,12 @@ void TPE_mask::save_rate()
// Ricalcola totali righe ed elimina le righe NULLE
TLocalisamfile f(LF_EFFETTI); f.setkey(1);
for (int rd = distinta.items()-1; rd >= 0; rd--)
{
TEffetto& eff = distinta[rd];
real totimp, totimpval;
for (int i = eff.rows_r(); i > 0; i--)
{
const TRectype& reff = eff.row_r(i);
@ -843,6 +853,7 @@ void TPE_mask::save_rate()
if (eff.rows_r() == 0)
{
int err = eff.read(f, eff, _lock);
if (err == NOERR)
err = eff.remove(f);
if (err == NOERR)
@ -867,6 +878,7 @@ void TPE_mask::save_rate()
}
TToken_string dati_dist;
dati_dist.add(tipodist);
dati_dist.add(numdist);
dati_dist.add(get(F_DATADIST));
@ -1157,6 +1169,7 @@ bool TPE_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
if (e == fe_button)
{
TEdit_field& cab = efield(F_CAB);
if (!cab.empty())
{
if (check_fields())

View File

@ -377,13 +377,13 @@ END
NUMBER F_CODCF 6
BEGIN
PROMPT 1 1 ""
PROMPT 1 2 ""
FLAGS "D"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 9 1 ""
PROMPT 9 2 ""
FLAGS "D"
END
@ -504,13 +504,24 @@ END
STRING F_ABIAPP 5
BEGIN
PROMPT 1 10 "Banca di appoggio"
USE LF_CFBAN KEY 2
FLAGS "DZ"
ENDPAGE
STRING F_CABAPP 5
BEGIN
PROMPT 18 11 ""
FLAGS "DZ"
END
STRING F_IBANAPP 27
BEGIN
PROMPT 13 12 "IBAN "
USE LF_CFBAN KEY 3
JOIN %BAN INTO CODTAB[1,5]==ABI CODTAB[6,10]==CAB
INPUT TIPOCF -F_TIPOCF SE
INPUT CODCF F_CODCF SE
INPUT TIPOBAN "V"
INPUT ABI F_ABIAPP
INPUT CAB F_CABAPP
INPUT IBAN F_IBANAPP
DISPLAY "Cod. Istit." ABI
DISPLAY "Cod. Fil." CAB
DISPLAY "IBAN@27" IBAN
@ -519,21 +530,6 @@ BEGIN
OUTPUT F_CABAPP CAB
OUTPUT F_IBANAPP IBAN
CHECTYPE NORMAL
FLAGS "Z"
ENDPAGE
STRING F_CABAPP 5
BEGIN
PROMPT 18 11 ""
COPY ALL F_ABIAPP
CHECTYPE NORMAL
FLAGS "Z"
END
STRING F_IBANAPP 27
BEGIN
PROMPT 13 12 "IBAN "
FLAGS "D"
END
ENDPAGE