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
mod = m_ulc = TRUE;
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:
// permette aggiunta e cancellazione solo se non c'e'
// ricalcolo automatico
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;
default:
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
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);
p.round(2);
@ -194,19 +194,35 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff)
{
if (nr == first + 1)
{
{
// suddividi equamente e riaggiusta la percentuale di conseguenza
real div = tot / real(nact);
real perc = real(100.0)*(div/tot);
real div = tot / real(nact);
if (_inited)
div.round(_round);
real perc = (100.0 * div) / tot;
real rem(tot);
for (i = first; i < n; i++)
{
if (i > first)
add_rata(perc, (sscad == -1 ? scad_rata(0) : sscad), tipo_rata(0));
if (_inited) set_imprata (i, div);
add_rata(perc, (sscad == -1 ? scad_rata(first) : sscad), tipo_rata(0));
if (_inited)
{
set_imprata (i, div);
rem -= tpay_rata(i);
}
set_percrata(i, perc);
}
if (_inited && _tpr > 0 && _tpr < 4)
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)
{
@ -216,19 +232,35 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff)
// suddividere il resto dell'importo tra le altre
real rfirst = _inited ? tpay_rata(0) : perc_rata(0);
if (_inited && _tpr > 0 && _tpr < 4) rfirst -= _secndr;
real rest = tot - _tpr >= 4 ? ZERO : rfirst;
const real div = rest / real(nact);
real perc = real(100.0)*(div/tot);
real rest = tot - (_tpr >= 4 ? ZERO : rfirst);
real div = rest / real(nact - (first > 0 ? 0 : 1));
if (_inited)
div.round(_round);
real perc = (100.0 * div)/tot;
real rem(rest);
for (i = 1; i < n; i++)
{
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));
if (_inited) set_imprata (i, div);
if (_inited)
{
set_imprata (i, div);
rem -= tpay_rata(i);
}
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++)
_rate.destroy(i);
_rate.pack();
adjust_fixed_scad();
_dirty = TRUE;
}
@ -441,10 +474,11 @@ void TPagamento::set_percrata(int i, real r)
real TPagamento::recalc_percrata(int i)
{
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);
set_percrata(i, perc);