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:
parent
ee4a6d9353
commit
7386a5d4e6
@ -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
|
||||
|
@ -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),
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user