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)
|
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
|
||||||
|
@ -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,10 +1617,22 @@ 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
|
||||||
if (_tpr > 0 && _tpr < 4)
|
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;
|
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),
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user