diff --git a/cg/cg2104.cpp b/cg/cg2104.cpp index 6d4625083..7d530e5e2 100755 --- a/cg/cg2104.cpp +++ b/cg/cg2104.cpp @@ -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 diff --git a/cg/pagament.cpp b/cg/pagament.cpp index b9ab8556d..d767ad6c7 100755 --- a/cg/pagament.cpp +++ b/cg/pagament.cpp @@ -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), diff --git a/cg/pagament.h b/cg/pagament.h index 73473accd..66ead0095 100755 --- a/cg/pagament.h +++ b/cg/pagament.h @@ -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