From 95e5651d04871ba45b4405cfdb52301a369cbf4f Mon Sep 17 00:00:00 2001 From: villa Date: Tue, 9 Jan 1996 11:13:41 +0000 Subject: [PATCH] Correzioni miste e conclusioni ristrutturazione git-svn-id: svn://10.65.10.50/trunk@2411 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/pagament.cpp | 63 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/cg/pagament.cpp b/cg/pagament.cpp index bf02ae1c5..fba2a6a6e 100755 --- a/cg/pagament.cpp +++ b/cg/pagament.cpp @@ -210,8 +210,15 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff) p.round(2); for (i = first; i < n; i++) { - if (i > first) - add_rata(perc, (sscad == -1 ? scad_rata(first) : sscad), tipo_rata(0)); + if (i > first) + { + int scd = sscad == -1 ? scad_rata(first) : sscad; +#ifdef USE_DEFAULT_INT_RATE + if (scd == 0) + scd = _int_rate; +#endif + add_rata(perc, scd, tipo_rata(0)); + } if (_inited) { set_imprata (i, div); @@ -263,9 +270,16 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff) p.round(2); for (i = 1; i < n; i++) { - if (i >= nr) + if (i >= nr) + { + int scd = sscad == -1 ? scad_rata(first) : sscad; +#ifdef USE_DEFAULT_INT_RATE + if (scd == 0) + scd = _int_rate; +#endif add_rata(perc, (sscad == -1 ? scad_rata(nr-1) : sscad), tipo_rata(nr-1), ulc_rata(nr-1)); + } if (_inited) { set_imprata (i, div); @@ -314,16 +328,18 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff) sum = 100; } - set_rata(i, real(p), - i == 0 ? (i < nr ? scad_rata(0) : 0): - (sscad == -1 ? (i < nr ? scad_rata(i) : scad_rata(nr-1)) : sscad), + int scd = i == 0 ? (i < nr ? scad_rata(0) : 0) : + (sscad == -1 ? (i < nr ? scad_rata(i) : scad_rata(nr-1)) : sscad); +#ifdef USE_DEFAULT_INT_RATE + if (i != 0 && scd == 0) + scd = _int_rate; +#endif + set_rata(i, real(p), scd, (i < nr ? tipo_rata(i) : tipo_rata(nr-1))); } } // erase remaining - for (; i < nr; i++) - _rate.destroy(i); - _rate.pack(); + remove_rate_from(i); adjust_fixed_scad(); _dirty = TRUE; @@ -939,7 +955,8 @@ word TPagamento::change_value(int rata, real user_val, int rdiff, bool is_perc) // risistema scadenze fisse se necessario adjust_fixed_scad(); // riaggiusta le percentuali o gli importi rispetto al dato modificato - if (_inited) adjust_perc_imp(is_perc, rdiff); + if (_inited) adjust_perc_imp(is_perc, rdiff); + _dirty = TRUE; } return err; @@ -960,6 +977,8 @@ word TPagamento::change_value_differenziate(int row, real user_val, bool is_perc const int first = _tpr > 3 ? 1 : 0; _rdiff = TRUE; + if (user_div.sign() <= 0) return P_NEG; + // togli rate gia' presenti for (int i = first; i < row; i++) { @@ -967,8 +986,8 @@ word TPagamento::change_value_differenziate(int row, real user_val, bool is_perc if (i == 0 && !is_perc && _tpr > 0 && _tpr < 4) to_share += _secndr; } - real remainder = to_share - user_div; + if (remainder.sign() < 0) return P_TROP; const int tok_ind = is_perc ? 1 : 4; rata(row).add(user_val.string(), tok_ind); @@ -980,7 +999,7 @@ word TPagamento::change_value_differenziate(int row, real user_val, bool is_perc } // elimina rate successive - remove_rate_from(row+2); + remove_rate_from(remainder.is_zero() ? row +1 : row+2); return 0; } @@ -998,7 +1017,7 @@ word TPagamento::change_value_uguali(int row, real user_val, bool is_perc) const int first = _tpr > 3 ? 1 : 0; _rdiff = FALSE; - if (user_div.is_zero() || user_div.sign() == -1) + if (user_div.sign() <= 0) return P_NEG; // la prima viene mantenuta uguale (vale solo per la 0 anche se _tpr > 4) @@ -1097,6 +1116,9 @@ word TPagamento::change_value_uguali_prossima(int row, real user_val, bool is_pe real user_div = user_val - to_subtract; const int tok_ind = is_perc ? 1 : 4; const int first = _tpr > 3 ? 1 : 0; + + if (user_div.sign() <= 0) + return P_NEG; // togli rate gia' presenti for (int i = first; i < row; i++) @@ -1137,6 +1159,9 @@ word TPagamento::change_value_uguali_possible(int row, real user_val, bool is_pe const int tok_ind = is_perc ? 1 : 4; const int first = _tpr > 3 ? 1 : 0; + if (user_div.sign() <= 0) + return P_NEG; + // togli rate gia' presenti for (int i = first; i < row; i++) { @@ -1157,7 +1182,7 @@ word TPagamento::change_value_uguali_possible(int row, real user_val, bool is_pe if (!delta.is_zero()) { if (n_rate() <= i) add_rata(); - rata(i).add(delta.string(), tok_ind); + rata(i++).add(delta.string(), tok_ind); } remove_rate_from(i); return 0; @@ -1182,7 +1207,11 @@ void TPagamento::adjust_parameters() else { TToken_string& r = rata(i); +#ifdef USE_DEFAULT_INT_RATE + r.add(last_scad == 0 ? _int_rate : last_scad, 0); +#else r.add(last_scad, 0); +#endif r.add(last_type, 2); r.add(last_ulc, 5); if (_inited) @@ -1281,7 +1310,11 @@ bool TPagamento::read(TTable* t, TTable* r) _fixd[1] = t->get_int("I1"); _fixd[2] = t->get_int("I2"); _int_rate = t->get_int("I3"); - + +#ifdef USE_DEFAULT_INT_RATE + if (_int_rate == 0) _int_rate = 30; +#endif + // aggiusta _inizio secondo INSCAD; vedi mese commerciale etc. if (_inscad == 'M') {