From 13190787a0a65eb0d3c7b29b8a5e7bcdb6a64bdc Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Sat, 27 Mar 2021 00:44:17 +0100 Subject: [PATCH] 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 --- src/ef/ef0a00.cpp | 149 ++++++++++++++++++++++++--------------------- src/ef/ef0a00a.uml | 36 +++++------ 2 files changed, 97 insertions(+), 88 deletions(-) diff --git a/src/ef/ef0a00.cpp b/src/ef/ef0a00.cpp index cb56638c7..2e1fab907 100755 --- a/src/ef/ef0a00.cpp +++ b/src/ef/ef0a00.cpp @@ -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,46 +661,44 @@ bool TPE_mask::check_bank(TEffetto& effetto, TLog_report& log) const TString8 cab = effetto.get(EFF_CODCAB); TString80 iban = effetto.get(EFF_IBAN); - TToken_string key(8); - key = effetto.get(EFF_TIPOCF); - key.add(effetto.get(EFF_CODCF)); - const TRectype& clifo = cache().get(LF_CLIFO, 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); - } + TToken_string key(8); - effetto.put(EFF_CODABI, abi); - effetto.put(EFF_CODCAB, cab); - effetto.put(EFF_IBAN, iban); + key = effetto.get(EFF_TIPOCF); + key.add(effetto.get(EFF_CODCF)); + key.add("V"); + key.add(1); + const TRectype& clifo = cache().get(LF_CFBAN, key); - if (tipocf == 'C' && tipopag == 3) - if (real::is_null(abi) || real::is_null(cab)) + 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)) + { + TString msg; + msg.format(FR("Impossibile determinare ABI/CAB del %s sull'effetto %ld"), + (const char*)key, effetto.get_long(EFF_NPROGTR)); + log.log(2, msg); + return false; + } + + if ((tipocf == 'F' && tipopag == 9) && iban.blank()) { TString msg; - msg.format(FR("Impossibile determinare ABI/CAB del %s sull'effetto %ld"), - (const char*)key, effetto.get_long(EFF_NPROGTR)); + msg.format(FR("Impossibile determinare IBAN del %s sull'effetto %ld"), + (const char*)key, effetto.get_long(EFF_NPROGTR)); log.log(2, msg); return false; } - - if ((tipocf == 'F' && tipopag == 9) && iban.blank()) - { - TString msg; - msg.format(FR("Impossibile determinare IBAN del %s sull'effetto %ld"), - (const char*)key, effetto.get_long(EFF_NPROGTR)); - 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,68 +750,74 @@ 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)); + datapag = attivo ? scad.get(SCAD_DATASCAD) : get(F_DATADIST); + + 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]; - - eff.put(EFF_DATASCAD, datapag); + 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); eff.put(EFF_CONTSEP, contsep); 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); @@ -842,7 +852,8 @@ void TPE_mask::save_rate() } if (eff.rows_r() == 0) { - int err = eff.read(f, eff, _lock); + 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()) diff --git a/src/ef/ef0a00a.uml b/src/ef/ef0a00a.uml index e01048265..e5710c59d 100755 --- a/src/ef/ef0a00a.uml +++ b/src/ef/ef0a00a.uml @@ -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