diff --git a/ef/ef0a00.cpp b/ef/ef0a00.cpp index 868d5e7ee..899bd88bc 100755 --- a/ef/ef0a00.cpp +++ b/ef/ef0a00.cpp @@ -120,9 +120,9 @@ bool TPE_mask::calc_residual(const TRiga_scadenze& scad, const long codcf = scad.get_long(SCAD_SOTTOCONTO); TString80 expr; - expr << '(' << LF_EFFETTI << "->EFFCONT!=\"X\")&&"; - expr << '(' << LF_EFFETTI << "->TIPOCF==\"" << tipocf << "\")&&"; - expr << '(' << LF_EFFETTI << "->CODCF==\"" << codcf << "\")"; + expr << '(' << LF_EFFETTI << "->" << EFF_EFFCONT << "!=\"X\")&&"; + expr << '(' << LF_EFFETTI << "->" << EFF_TIPOCF << "==\"" << tipocf << "\")&&"; + expr << '(' << LF_EFFETTI << "->" << EFF_CODCF << "==\"" << codcf << "\")"; cur.setfilter(expr, TRUE); const long items = cur.items(); if (items > 0L) @@ -162,35 +162,32 @@ bool TPE_mask::calc_residual(const TRiga_scadenze& scad, void TPE_mask::update_total() { - real tot; TSheet_field& s = sfield(F_SHEET); const int postot = s.cid2index(F_IMPORTO); + real tot; FOR_EACH_SHEET_ROW_BACK(s, r, row) tot += real(row->get(postot)); set(F_TOTAL, tot); - if (tot==ZERO) - disable(DLG_SAVEREC); - else - enable(DLG_SAVEREC); + enable(DLG_SAVEREC, !tot.is_zero()); } bool TPE_mask::fill_row(const TRiga_scadenze& rs, TToken_string& row, bool& partially_unassigned, bool force, bool is_old) { const int tipopageff = get_int(F_TIPOPAGEFF); - int tipopag; + int tipopag = 0; real impres, imppag; char accsal; int rigadist, rigaeff; row.cut(0); bool ok = calc_residual(rs, impres, imppag, accsal, rigadist, rigaeff, partially_unassigned, tipopag, is_old) || force; if (ok) - ok = tipopag == tipopageff || tipopageff == 0; + ok = tipopageff == 0 || tipopag == tipopageff; // Eventuale filtro sul tipo pagamento if (ok) { row.add(imppag.string()); row.add(accsal); row.add(impres.string()); row.add(rs.get_long(SCAD_SOTTOCONTO)); - TString16 cod; cod << rs.get_char(SCAD_TIPOCF) << '|' << rs.get_long(SCAD_SOTTOCONTO); + TString8 cod; cod << rs.get_char(SCAD_TIPOCF) << '|' << rs.get_long(SCAD_SOTTOCONTO); row.add(cache().get(LF_CLIFO, cod, CLI_RAGSOC)); row.add(rs.get(SCAD_ANNO)); row.add(rs.get(SCAD_NUMPART)); @@ -505,54 +502,64 @@ TRectype& TPE_mask::new_row_effetto(TDistinta& dist, char tipocf, long codcf, bool TPE_mask::check_bank(TEffetto& effetto, TLog_report& log) const { const int tipopag = effetto.get_int(EFF_TIPOPAG); - if (tipopag != 3 && tipopag != 9) // Controllo solo ri.ba. e bonifici - return true; + const int tipocf = effetto.get_char(EFF_TIPOCF); - TString8 abi = effetto.get(EFF_CODABI); - TString8 cab = effetto.get(EFF_CODCAB); - TString80 iban = effetto.get(EFF_IBAN); - - TToken_string key; - key = effetto.get(EFF_TIPOCF); - key.add(effetto.get(EFF_CODCF)); - const TRectype& clifo = cache().get(LF_CLIFO, key); - - if (atol(abi) == 0 || atol(cab) == 0L) + // Controllo solo ri.ba. clienti e bonifici fornitori + if ((tipocf=='F') ? (tipopag==9) : (tipopag==3)) { - abi = clifo.get(CLI_CODABI); - cab = clifo.get(CLI_CODCAB); - } - if (iban.blank()) - iban = clifo.get(CLI_IBAN); - if (iban.starts_with("IT") && atol(abi)> 0 && atol(cab)>0) - { - TString16 abicab; abicab << abi << cab; - if (iban.mid(5, 10) != abicab) - iban.cut(0); - } + TString8 abi = effetto.get(EFF_CODABI); + TString8 cab = effetto.get(EFF_CODCAB); + TString80 iban = effetto.get(EFF_IBAN); - effetto.put(EFF_CODABI, abi); - effetto.put(EFF_CODCAB, cab); - effetto.put(EFF_IBAN, 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 (tipopag == 3 && (atol(abi)==0 || atol(cab)==0)) - { - 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 (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")) + { + if (real::is_null(abi) || real::is_null(cab)) + { + abi = iban.mid( 5, 5); + cab = iban.mid(10, 5); + } + else + { + TString16 abicab; abicab << abi << cab; + if (iban.mid(5, 10) != abicab) + iban.cut(0); + } + } + + effetto.put(EFF_CODABI, abi); + effetto.put(EFF_CODCAB, cab); + effetto.put(EFF_IBAN, iban); + + if (tipopag == 3 && (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 (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; + } } - - if (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; } @@ -587,14 +594,14 @@ void TPE_mask::save_rate() const bool eurocambio = get_bool(F_EURO); const int tipopag = get_int(F_TIPOPAG); - bool zeroes = FALSE; // Esistono righe effetto da cancellare + bool zeroes = false; // Esistono righe effetto da cancellare TSheet_field& sheet = sfield(F_SHEET); FOR_EACH_SHEET_ROW(sheet, r, row) { real imp = row->get(sheet.cid2index(F_IMPORTO)); real impval; - if (codval.not_empty() && !imp.is_zero()) + if (codval.full() && !imp.is_zero()) { impval = imp; TCurrency c(impval, codval, cambio, eurocambio ? _exchange_contro : _exchange_base); @@ -648,6 +655,7 @@ void TPE_mask::save_rate() TEffetto& eff = distinta[rigadist-1]; eff.put(EFF_DATASCAD, scad.get(SCAD_DATASCAD)); + eff.put(EFF_TIPOPAG, tipopag); eff.put(EFF_CODABI, abi); eff.put(EFF_CODCAB, cab); eff.put(EFF_IBAN, iban); @@ -657,16 +665,15 @@ void TPE_mask::save_rate() check_bank(eff, log); // Cerca di sistemare ABI/CAB/IBAN TRectype& reff = eff.row_r(rigaeff); - real oldimp = reff.get(REFF_IMPORTO); - real oldimpval = reff.get(REFF_IMPORTOVAL); + 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); - - if (imp.is_zero() && accsal != 'S') + if (accsal != 'S' && imp.is_zero()) { reff.put(REFF_ACCSAL, 'Z'); // Segna la riga come NULLA - zeroes = TRUE; + zeroes = true; } } } @@ -723,7 +730,7 @@ void TPE_mask::save_rate() dati_dist.add(get(F_DATADIST)); dati_dist.add(get(F_ABI)); dati_dist.add(get(F_CAB)); - distinta.write(FALSE, &dati_dist); + distinta.write(false, &dati_dist); if (log.recordset()->items() > 0) log.preview(); @@ -784,7 +791,7 @@ bool TPE_mask::on_sheet_event(TOperable_field& o, TField_event e, long jolly) } return false; case se_notify_modify: - _spork = TRUE; + _spork = true; update_total(); break; default: