Finiti errore PR116 PR117

git-svn-id: svn://10.65.10.50/trunk@2340 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1995-12-22 15:33:27 +00:00
parent 2aa34190c3
commit 4f4ac200cd
2 changed files with 69 additions and 16 deletions

View File

@ -73,11 +73,30 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
if (newu != ts.get(5)) // modificata ulteriore classificazione if (newu != ts.get(5)) // modificata ulteriore classificazione
mod = m_ulc = TRUE; mod = m_ulc = TRUE;
break; break;
case K_DEL: case K_DEL:
doit = !recalc;
if (doit)
{
pag.remove_rata(r);
const int nrate = msk->get_int(FS_NRATE) - 1;
msk->set(FS_NRATE, nrate);
}
break;
case K_INS: case K_INS:
// permette aggiunta e cancellazione solo se non c'e' // permette aggiunta e cancellazione solo se non c'e'
// ricalcolo automatico // ricalcolo automatico
doit = !recalc; doit = !recalc;
if (doit)
{
const int prev = r - 1;
const int nrate = msk->get_int(FS_NRATE) + 1;
msk->set(FS_NRATE, nrate);
pag.add_rata(ZERO, 0, pag.tipo_rata(prev), pag.ulc_rata(prev));
pag.adjust_fixed_scad();
pag.set_sheet(ps);
rws = ps.rows_array();
}
break; break;
default: default:
break; break;

View File

@ -174,7 +174,7 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff)
// diciamo che gli diciamo il numero giusto // diciamo che gli diciamo il numero giusto
if (first == 1 && n < 2) return; if (first == 1 && n < 2) return;
const int nact = first == 1 ? n - 1 : n; int nact = first == 1 ? n - 1 : n;
real p = real(100) / real(nact); real p = real(100) / real(nact);
p.round(2); p.round(2);
@ -194,19 +194,35 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff)
{ {
if (nr == first + 1) if (nr == first + 1)
{ {
// suddividi equamente e riaggiusta la percentuale di conseguenza // suddividi equamente e riaggiusta la percentuale di conseguenza
real div = tot / real(nact); real div = tot / real(nact);
real perc = real(100.0)*(div/tot); if (_inited)
div.round(_round);
real perc = (100.0 * div) / tot;
real rem(tot);
for (i = first; i < n; i++) for (i = first; i < n; i++)
{ {
if (i > first) if (i > first)
add_rata(perc, (sscad == -1 ? scad_rata(0) : sscad), tipo_rata(0)); add_rata(perc, (sscad == -1 ? scad_rata(first) : sscad), tipo_rata(0));
if (_inited) set_imprata (i, div); if (_inited)
{
set_imprata (i, div);
rem -= tpay_rata(i);
}
set_percrata(i, perc); set_percrata(i, perc);
} }
if (_inited && _tpr > 0 && _tpr < 4) if (_inited && _tpr > 0 && _tpr < 4)
set_imprata(0, tpay_rata(0) + _secndr); set_imprata(0, tpay_rata(0) + _secndr);
if (_inited && rem != ZERO)
{
real r(tpay_rata(first) + rem);
set_imprata(first, r);
if (_inited && _tpr > 0 && _tpr < 4)
r -= _secndr;
set_percrata(first, 100 * r / tot);
}
} }
else if (nr > first + 1) else if (nr > first + 1)
{ {
@ -216,19 +232,35 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff)
// suddividere il resto dell'importo tra le altre // suddividere il resto dell'importo tra le altre
real rfirst = _inited ? tpay_rata(0) : perc_rata(0); real rfirst = _inited ? tpay_rata(0) : perc_rata(0);
if (_inited && _tpr > 0 && _tpr < 4) rfirst -= _secndr; if (_inited && _tpr > 0 && _tpr < 4) rfirst -= _secndr;
real rest = tot - _tpr >= 4 ? ZERO : rfirst; real rest = tot - (_tpr >= 4 ? ZERO : rfirst);
const real div = rest / real(nact); real div = rest / real(nact - (first > 0 ? 0 : 1));
real perc = real(100.0)*(div/tot); if (_inited)
div.round(_round);
real perc = (100.0 * div)/tot;
real rem(rest);
for (i = 1; i < n; i++) for (i = 1; i < n; i++)
{ {
if (i >= nr) if (i >= nr)
add_rata(perc, (sscad == -1 ? (i < nr ? scad_rata(i) : scad_rata(nr-1)) : sscad), add_rata(perc, (sscad == -1 ? scad_rata(nr-1) : sscad),
tipo_rata(nr-1), ulc_rata(nr-1)); tipo_rata(nr-1), ulc_rata(nr-1));
if (_inited) set_imprata (i, div); if (_inited)
{
set_imprata (i, div);
rem -= tpay_rata(i);
}
set_percrata(i, perc); set_percrata(i, perc);
} }
if (_inited && rem != ZERO)
{
real r(tpay_rata(first) + rem);
set_imprata(first, r);
if (_inited && _tpr > 0 && _tpr < 4)
r -= _secndr;
set_percrata(first, 100 * r / tot);
}
} }
} }
} }
@ -261,6 +293,7 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff)
for (; i < nr; i++) for (; i < nr; i++)
_rate.destroy(i); _rate.destroy(i);
_rate.pack(); _rate.pack();
adjust_fixed_scad();
_dirty = TRUE; _dirty = TRUE;
} }
@ -441,10 +474,11 @@ void TPagamento::set_percrata(int i, real r)
real TPagamento::recalc_percrata(int i) real TPagamento::recalc_percrata(int i)
{ {
real hm(_tpr < 4 ? _firstr : _secndr); real hm(_tpr < 4 ? _firstr : _secndr);
if (i == 0 && _tpr > 0 && _tpr < 4)
hm -= _secndr;
real perc = tpay_rata(i) * 100.0 / hm; real tpay(tpay_rata(i));
if (i == 0 && _tpr > 0 && _tpr < 4)
tpay -= _secndr;
real perc = tpay * 100.0 / hm;
perc.round(2); perc.round(2);
set_percrata(i, perc); set_percrata(i, perc);