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) if (m_impl)
{ {
trw.add(newl,7); trw.add(newl,7);
// *** TBC la percentuale viene ricalcolata solo se si modifica in valuta if (!in_valuta)
// const real p = pag.recalc_percrata(r, FALSE); {
// ps.row(r).add(p.string(), 3); // 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); ps.force_update(r);
} }
if (m_impv) if (m_impv)
{ {
@ -553,7 +557,9 @@ bool TPrimanota_application::recalc_handler(TMask_field& f, KEY key)
app().reset_pagamento(); app().reset_pagamento();
app().set_scadenze(m); 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()); pag.desc_tpr());
} }
else 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) void TPagamento::next_scad(TDate& d, int scad, bool mcomm, int rata)
{ {
if (mcomm /* && rata > 0 */) 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(imp == NULL ? "" : imp, val ? 4 : 7);
tt->add(ulc == NULL ? "" : ulc, 5); 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 (!nwr)
{ {
if (index > _rate.items()) 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)); oldscad = lastscad = (int)(lastdate - data_rata(i-1));
if (oldscad < 0l) return P_SCAD; if (oldscad < 0l) return P_SCAD;
// if (oldscad == 0l) warnscad++;
} }
else else
{ {
@ -976,7 +947,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
long sc = atol(scad); long sc = atol(scad);
for (int i = 0; i < row; i ++) for (int i = 0; i < row; i ++)
sc -= scad_rata(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 && if (row > 0 && sc == 0 &&
!yesno_box("Due o piu' rate cadranno nello stesso giorno. Si conferma l'immissione?")) !yesno_box("Due o piu' rate cadranno nello stesso giorno. Si conferma l'immissione?"))
return P_SCAD; 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)) if (data_rata(i) < data_rata(i-1))
return P_SCAD; return P_SCAD;
// else if (data_rata(i) == data_rata(i-1))
// warnscad ++;
} }
else if (_inited && lastdate < _inizio) else if (_inited && lastdate < _inizio)
return P_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(); adjust_fixed_scad();
return P_OK; return P_OK;
} }
@ -1486,9 +1452,6 @@ bool TPagamento::read(TTable* t, TTable* r)
t->zero(); t->put("CODTAB", _code); t->zero(); t->put("CODTAB", _code);
if (t->read() != NOERR) return FALSE; if (t->read() != NOERR) return FALSE;
_slicerval.init(real(0.0), TRUE);
_slicerlit.init(real(0.0), TRUE);
_rate.destroy(); _rate.destroy();
// set everything // set everything
@ -1541,8 +1504,6 @@ bool TPagamento::read(TTable* t, TTable* r)
tt->add((const char*)d); tt->add((const char*)d);
tt->add(""); tt->add("");
tt->add(r->get("S1")); // ulteriore classificazione tt->add(r->get("S1")); // ulteriore classificazione
_slicerval.add((real)r->get("R0"));
_slicerlit.add((real)r->get("R0"));
_rate.add(tt); _rate.add(tt);
} }
@ -1633,8 +1594,6 @@ void TPagamento::set_rate_auto()
for (int v = 0; v < (in_valuta() ? 2 : 1); v++) for (int v = 0; v < (in_valuta() ? 2 : 1); v++)
{ {
real toslice = importo_da_dividere(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); if (_tpr > 3) set_imprata(0, importo_da_non_dividere(v), v);
real r1(0.0), ro(0.0); real r1(0.0), ro(0.0);
@ -1658,9 +1617,21 @@ void TPagamento::set_rate_auto()
r1.round(round(v)); r1.round(round(v));
} }
real rdi, rdsum;
for (int i = first; i < n_rate(); i++) for (int i = first; i < n_rate(); i++)
// setta le fette e le date di scadenza // 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 // se e' nei primi tre casi, si somma l'importo da non dividere alla
// prima rata // prima rata
@ -1759,19 +1730,6 @@ void TPagamento::init_total(const real& ib, const real& im, const real& sp, bool
frs = imp + spp; frs = imp + spp;
break; 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), TPagamento::TPagamento(const char* codtab, const char* data) :
_slicerval(0.0,0), _new(FALSE), _mcomm(FALSE), _imponlit(0.0), _imposlit(0.0), _new(FALSE), _mcomm(FALSE), _imponlit(0.0), _imposlit(0.0),
_speselit(0.0), _cambio(1.0), _in_valuta(FALSE), _speselit(0.0), _cambio(1.0), _in_valuta(FALSE),
_code(codtab), _dirty(FALSE), _inited(FALSE), _code(codtab), _dirty(FALSE), _inited(FALSE),
_def_tpr(1), _def_ulc(""), _roundval(3), _int_rate(30), _tpr(0), _rdiff(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 _speselit; // spese da affettare in lire
real _cambio; // cambio valuta (TBZ?) real _cambio; // cambio valuta (TBZ?)
TDistrib _slicerlit; // affettatrice lire
TDistrib _slicerval; // affettatrice valuta
bool _new; // non letto da database bool _new; // non letto da database
TString_array _rate; // rate medesime TString_array _rate; // rate medesime
char _inscad; // inizio scadenze: S1 char _inscad; // inizio scadenze: S1