From 7cd89ab9716261c9fef6e9f53e02a11d25b935cc Mon Sep 17 00:00:00 2001 From: villa Date: Wed, 22 Nov 1995 10:56:09 +0000 Subject: [PATCH] Ultime gabriellate git-svn-id: svn://10.65.10.50/trunk@2187 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ba/ba3700.cpp | 8 +++---- ba/ba3700a.uml | 1 - cg/pagament.cpp | 55 ++++++++++++++++++++++++++++++++++++------------- 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/ba/ba3700.cpp b/ba/ba3700.cpp index 4f4808edb..e11745d89 100755 --- a/ba/ba3700.cpp +++ b/ba/ba3700.cpp @@ -212,8 +212,6 @@ bool BA3700_application::tipo_prima_rata(TMask_field& f, KEY k) { // aggiunge o toglie se necessario rata 0, lasciando // le altre e shiftando le scadenze - // pag->set_tipo_prima_rata() - // if (k != K_TAB) return TRUE; if (f.mask().query_mode()) return TRUE; sht* s = (sht*)get_app_data(); @@ -232,6 +230,7 @@ bool BA3700_application::tipo_prima_rata(TMask_field& f, KEY k) { pag->set_sheet(*shf); (*rws) = shf->rows_array(); + msk->field(F_NUM_RATE).set(format("%d",pag->n_rate())); } return TRUE; } @@ -247,11 +246,12 @@ bool BA3700_application::numero_rate(TMask_field& f, KEY k) TMask* msk = s->_msk; TArray* rws = s->_rws; int nr = msk->get_int(F_NUM_RATE); - if (!pag || nr == pag->n_rate() || msk->get(F_NUM_RATE).empty()) return TRUE; + if (!pag || nr == pag->n_rate() || msk->get(F_NUM_RATE).empty()) + return TRUE; int ir = msk->get_int(F_INT_RATE); if (ir == 0) ir = -1; - pag->set_numero_rate(msk->get_int(F_NUM_RATE),ir); + pag->set_numero_rate(nr,ir); if (pag->dirty()) { pag->set_sheet(*shf); diff --git a/ba/ba3700a.uml b/ba/ba3700a.uml index 67bc7b07a..db70e794f 100755 --- a/ba/ba3700a.uml +++ b/ba/ba3700a.uml @@ -261,7 +261,6 @@ BEGIN INPUT 103 OUTPUT 103 OUTPUT 105 - ITEM " |Altro pagamento" ITEM "1|Rimessa diretta o contanti" ITEM "2|Tratta" ITEM "3|Ricevuta Bancaria" diff --git a/cg/pagament.cpp b/cg/pagament.cpp index 66548964b..1c9fcca78 100755 --- a/cg/pagament.cpp +++ b/cg/pagament.cpp @@ -112,7 +112,7 @@ void TPagamento::set_rate_differenziate(int v) void TPagamento::set_tipo_prima_rata(int v, int sscad) { _dirty = FALSE; - if (_tpr == v) return; + if (_tpr == v) return; if (v < 4 && _tpr > 3) { @@ -143,6 +143,12 @@ void TPagamento::set_tipo_prima_rata(int v, int sscad) tt.add(scad_rata(i+1),0); tt.add(tipo_rata(i+1),2); tt.add(ulc_rata(i+1), 5); + } + if (n_rate() == 2 && scad_rata(1) == 0) + { + // l'unica rata aveva scadenza 0; ci mettiamo n.giorni default + TToken_string& tt = rata(1); + tt.add(_int_rate, 0); } } _tpr = v; @@ -680,9 +686,20 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified, if (ulc != NULL) { - rata(row).add(ulc, 5); - srate.row(row).add(ulc, 5); - need_recalc = TRUE; + for (int k = 0; k < srate.items(); k++) + { + // deve farlo per tutte dalla 1 in poi se rdiff == 2, + // soltanto per row diversamente + if ((rdiff == 2 && row > 0 && k > 0) || k == row) + { + TToken_string& tt = rata(k); + TToken_string& ss = (TToken_string&)srate[k]; + tt.add(ulc,5); + ss.add(ulc,5); + need_recalc = TRUE; + // no error is possible + } + } } if (scad != NULL) @@ -751,8 +768,13 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified, // aggiungere il resto sulla 1a rata // controlla se rdiff e' compatibile con // i dati e se e' il caso riaggiusta - if (rdiff == 3 && (remainder % newv) != 0.0) - rdiff = 2; +// -------------------------------- vedi se rimettere ----------------------------------- +// if (rdiff == 3 && (remainder % newv) != 0.0) +// { +// warning_box("Il resto non e' divisibile - uso 'Uguali finche' possibile'"); +// rdiff = 4; +// } +// --------------------------------------------------------------------------------------- // *** 10/8/95: se uguali e non e' multiplo intero lo teniamo cosi' e poi // *** aggiungiamo alla prima rata utile // if (rdiff == 2 && !((rmax % newv.integer()) == ZERO)) @@ -816,7 +838,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified, for (int j = srate.items()-1; j >= frs; j--) _rate.destroy(j); const int n = srate.items(); // questo rimane per forza costante - if (rdiff == 2 && n > 1) + if (rdiff == 2 && n > 1+first) { // HERE real tot = is_perc_modified ? real(100.0) : (_tpr < 4 ? _firstr : _secndr); @@ -832,9 +854,9 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified, // inferiore al minimo if (nimp.sign() < 0) { _rate = srate; return P_NEG; } real remainder = tot - nimp; - real div = remainder / real(n - 1); + real div = remainder / real(n - 1 - first); div.round(is_perc_modified ? 2 : _round); - nimp = tot - (div * real(n-1)); + nimp = tot - (div * real(n-1-first)); for (int k = first; k < n; k++) { @@ -868,8 +890,8 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified, real div = rest / nimp; if (div < real(1.0)) { _rate = srate; return P_TROP; } - int nr = (int)div.integer() + (_tpr > 4 ? 2 : 1); - real reminder = rest - (nimp * real(nr -1)); + int nr = (int)div.integer() + (_tpr > 3 ? 2 : 1); + real reminder = rest - (nimp * real(nr - 1 - first)); rfirst += reminder; for (int k = first; k < nr; k++) { @@ -933,11 +955,16 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified, if ((mx - sum) < newv) { // add remainder on first rate - newv += (mx - sum); + newv += (mx - sum); + if (rdiff == 3) + { + newv = is_perc_modified ? perc_rata(first) : tpay_rata(first); + newv += (mx - sum); + } if (!is_perc_modified) - set_imprata(frs, newv); + set_imprata(first, newv); else { - TToken_string& t = rata(frs); + TToken_string& t = rata(first); t.add(newv.string(), 1); } remove_rata(j);