Correzioni miste e conclusioni ristrutturazione

git-svn-id: svn://10.65.10.50/trunk@2411 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1996-01-09 11:13:41 +00:00
parent 291112d8ba
commit 95e5651d04

View File

@ -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')
{