Calcolo differenziate senza distrib

Aggiustamento percentuali senza ricalcolo auto se importo non valuta
Cambiati messaggi per ripristino ricalcolo automatico se modificata prima
rata


git-svn-id: svn://10.65.10.50/trunk@2595 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1996-02-14 10:41:16 +00:00
parent ee4a6d9353
commit 7386a5d4e6
3 changed files with 28 additions and 66 deletions

View File

@ -172,11 +172,15 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
if (m_impl)
{
trw.add(newl,7);
// *** TBC la percentuale viene ricalcolata solo se si modifica in valuta
// const real p = pag.recalc_percrata(r, FALSE);
// ps.row(r).add(p.string(), 3);
// **********************************************************************
if (!in_valuta)
{
// si ricalcola la percentuale a modifica importo in lire solo
// se non c'e' l'importo in valuta
const real p = pag.recalc_percrata(r, FALSE);
ps.row(r).add(p.string(), 3);
}
ps.force_update(r);
}
if (m_impv)
{
@ -553,7 +557,9 @@ bool TPrimanota_application::recalc_handler(TMask_field& f, KEY key)
app().reset_pagamento();
app().set_scadenze(m);
}
else warning_box("Il tipo prima rata rimane modificato in %s",
else warning_box("Il tipo prima rata e' stato modificato in \"%s\" per "
"poter mantenere la rateazione scelta e la possibilita' di "
"ricalcolo automatico",
pag.desc_tpr());
}
else

View File

@ -431,26 +431,6 @@ void TPagamento::set_numero_rate(int n, int sscad, int rdiff)
}
/*
void TPagamento::adjust_importo_lire(int start)
{
if (!in_valuta()) return;
const int first = _tpr < 4 ? 0 : 1;
if (start == 0) start = first;
real totlit;
real implit = importo_da_dividere(FALSE) + importo_da_non_dividere(FALSE);
for (int i = 0; i < n_rate(); i++)
totlit += tlit_rata(i);
real residuo = implit - totlit;
if (!residuo.is_zero())
{
real rs = tlit_rata(start) + residuo;
rata(start).add(rs.string(), 7);
}
}
*/
void TPagamento::next_scad(TDate& d, int scad, bool mcomm, int rata)
{
if (mcomm /* && rata > 0 */)
@ -569,14 +549,6 @@ TToken_string& TPagamento::set_rata (int index, real perc, int day, int type,
tt->add(imp == NULL ? "" : imp, val ? 4 : 7);
tt->add(ulc == NULL ? "" : ulc, 5);
// if (imp && *imp > ' ' && _cambio != 1.0)
// {
// real implit(imp);
// implit *= _cambio;
// implit.round();
// tt->add(implit.string(), 7);
// }
if (!nwr)
{
if (index > _rate.items())
@ -947,7 +919,6 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
{
oldscad = lastscad = (int)(lastdate - data_rata(i-1));
if (oldscad < 0l) return P_SCAD;
// if (oldscad == 0l) warnscad++;
}
else
{
@ -976,7 +947,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
long sc = atol(scad);
for (int i = 0; i < row; i ++)
sc -= scad_rata(i);
if (sc < 0 /*|| (row > 0 && sc == 0)*/) return P_SCAD;
if (sc < 0) return P_SCAD;
if (row > 0 && sc == 0 &&
!yesno_box("Due o piu' rate cadranno nello stesso giorno. Si conferma l'immissione?"))
return P_SCAD;
@ -1019,8 +990,6 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
{
if (data_rata(i) < data_rata(i-1))
return P_SCAD;
// else if (data_rata(i) == data_rata(i-1))
// warnscad ++;
}
else if (_inited && lastdate < _inizio)
return P_INIZIO;
@ -1028,9 +997,6 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
}
}
// if (warnscad && !yesno_box("N. %d rate cadono nello stesso giorno. Si conferma l'immissione?", warnscad))
// return P_SCAD;
adjust_fixed_scad();
return P_OK;
}
@ -1486,9 +1452,6 @@ bool TPagamento::read(TTable* t, TTable* r)
t->zero(); t->put("CODTAB", _code);
if (t->read() != NOERR) return FALSE;
_slicerval.init(real(0.0), TRUE);
_slicerlit.init(real(0.0), TRUE);
_rate.destroy();
// set everything
@ -1541,8 +1504,6 @@ bool TPagamento::read(TTable* t, TTable* r)
tt->add((const char*)d);
tt->add("");
tt->add(r->get("S1")); // ulteriore classificazione
_slicerval.add((real)r->get("R0"));
_slicerlit.add((real)r->get("R0"));
_rate.add(tt);
}
@ -1633,8 +1594,6 @@ void TPagamento::set_rate_auto()
for (int v = 0; v < (in_valuta() ? 2 : 1); v++)
{
real toslice = importo_da_dividere(v);
TDistrib& sl = v ? _slicerval : _slicerlit;
sl.init(toslice); sl.set_dec(round(v));
if (_tpr > 3) set_imprata(0, importo_da_non_dividere(v), v);
real r1(0.0), ro(0.0);
@ -1658,10 +1617,22 @@ void TPagamento::set_rate_auto()
r1.round(round(v));
}
real rdi, rdsum;
for (int i = first; i < n_rate(); i++)
// setta le fette e le date di scadenza
set_imprata(i, _rdiff ? sl.get() : (i == first ? r1 : ro), v);
{
if (_rdiff)
{
rdi = toslice*(perc_rata(i)/real(100.0));
rdi.round(round(v));
if (i > first) rdsum += rdi;
}
set_imprata(i, _rdiff ? rdi : (i == first ? r1 : ro), v);
}
if (_rdiff)
set_imprata(first, toslice - rdsum, v);
// se e' nei primi tre casi, si somma l'importo da non dividere alla
// prima rata
if (_tpr > 0 && _tpr < 4)
@ -1759,19 +1730,6 @@ void TPagamento::init_total(const real& ib, const real& im, const real& sp, bool
frs = imp + spp;
break;
}
TDistrib& slicer = valuta ? _slicerval : _slicerlit;
const real toslice = _tpr > 1 ? scn : frs;
slicer.init(toslice, TRUE);
slicer.set_dec(round);
const int first = _tpr > 3 ? 1 : 0;
for (int i = first; i < _rate.items(); i++)
{
TToken_string& t = (TToken_string&)_rate[i];
const real rr(t.get(1));
slicer.add(rr);
}
}
@ -1898,8 +1856,8 @@ void TPagamento::adjust_fixed_scad()
}
}
TPagamento::TPagamento(const char* codtab, const char* data) : _slicerlit(0.0,0),
_slicerval(0.0,0), _new(FALSE), _mcomm(FALSE), _imponlit(0.0), _imposlit(0.0),
TPagamento::TPagamento(const char* codtab, const char* data) :
_new(FALSE), _mcomm(FALSE), _imponlit(0.0), _imposlit(0.0),
_speselit(0.0), _cambio(1.0), _in_valuta(FALSE),
_code(codtab), _dirty(FALSE), _inited(FALSE),
_def_tpr(1), _def_ulc(""), _roundval(3), _int_rate(30), _tpr(0), _rdiff(FALSE),

View File

@ -41,8 +41,6 @@ class TPagamento : public TObject
real _speselit; // spese da affettare in lire
real _cambio; // cambio valuta (TBZ?)
TDistrib _slicerlit; // affettatrice lire
TDistrib _slicerval; // affettatrice valuta
bool _new; // non letto da database
TString_array _rate; // rate medesime
char _inscad; // inizio scadenze: S1