Corrette alcune rimanenti caciarole
git-svn-id: svn://10.65.10.50/trunk@2102 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
09381b469a
commit
e5e953f263
311
cg/pagament.cpp
311
cg/pagament.cpp
@ -7,6 +7,8 @@
|
||||
#include <scadenze.h>
|
||||
#include <pagsca.h>
|
||||
|
||||
inline void swap(int& x, int& y) {int tmp = x; x = y; y = tmp; }
|
||||
|
||||
int TPagamento::_rata_ifield(int n, int f) const
|
||||
{
|
||||
TToken_string& t = (TToken_string&)_rate[n];
|
||||
@ -52,15 +54,20 @@ void TPagamento::set_inizio(const TDate& d)
|
||||
|
||||
void TPagamento::set_intervallo_rate(int in)
|
||||
{
|
||||
_dirty = TRUE;
|
||||
_int_rate = in;
|
||||
if (_mcomm && (in % 30) != 0)
|
||||
_mcomm = FALSE;
|
||||
for (int i = 0; i < n_rate(); i++)
|
||||
{
|
||||
if (yesno_box("E' specificato \"mese commerciale\". Si desidera annullarlo?"))
|
||||
_mcomm = FALSE;
|
||||
else
|
||||
return;
|
||||
}
|
||||
for (int i = 1; i < n_rate(); i++)
|
||||
{
|
||||
TToken_string& ts = rata(i);
|
||||
ts.add(i == 0 ? (scad_rata(0) == 0 ? 0 : in) : in, 0);
|
||||
}
|
||||
ts.add(in, 0);
|
||||
}
|
||||
_int_rate = in;
|
||||
_dirty = TRUE;
|
||||
}
|
||||
|
||||
void TPagamento::set_mese_commerciale(bool v, int& sscad)
|
||||
@ -498,8 +505,6 @@ TToken_string& TPagamento::set_rata(int index, const real& howmuch, const real&
|
||||
}
|
||||
return *tt;
|
||||
}
|
||||
|
||||
|
||||
|
||||
word TPagamento::validate() const
|
||||
{
|
||||
@ -559,6 +564,8 @@ void TPagamento::strerr(word err, TString& s)
|
||||
s << "\n L'importo dato e' superiore al massimo possibile";
|
||||
if (err & P_TOTNC)
|
||||
s << "\n La somma degli importi e' diversa dal totale del pagamento";
|
||||
if (err & P_MCOMM)
|
||||
s << "\n Scadenze incompatibili con il mese commerciale";
|
||||
}
|
||||
|
||||
const char* TPagamento::desc_tpr() const
|
||||
@ -690,7 +697,8 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
if (ulc != NULL)
|
||||
{
|
||||
rata(row).add(ulc, 5);
|
||||
srate.row(row).add(ulc, 5);
|
||||
srate.row(row).add(ulc, 5);
|
||||
need_recalc = TRUE;
|
||||
}
|
||||
|
||||
if (scad != NULL)
|
||||
@ -730,7 +738,8 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
for (int i = 0; i < row; i ++)
|
||||
sc -= scad_rata(i);
|
||||
if (sc < 0 || (row > 0 && sc == 0)) return P_SCAD;
|
||||
if (_mcomm && (sc % 30) != 0) _mcomm = FALSE;
|
||||
if (_mcomm && (sc % 30) != 0)
|
||||
return P_MCOMM;
|
||||
TToken_string& tt = rata(row);
|
||||
TToken_string& ss = (TToken_string&)srate[row];
|
||||
tt.add(sc,0);
|
||||
@ -814,6 +823,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
int type = oldtype;
|
||||
TString nulc = oldulc;
|
||||
int nscd = oldscad;
|
||||
int frstd = scad_rata(0);
|
||||
|
||||
const int frs = (rdiff == 3 || rdiff == 4) ? row+1 : first;
|
||||
const real mx = (rdiff == 3 || rdiff == 4) ? remainder : rmax;
|
||||
@ -847,7 +857,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
TToken_string& trt = (TToken_string&)srate[k];
|
||||
if (_inited) dd = trt.get(3);
|
||||
type = atoi(trt.get(2));
|
||||
nscd = k == 0 ? 0 : atoi(trt.get(0));
|
||||
nscd = k == 0 ? frstd : atoi(trt.get(0));
|
||||
if (type == 0) type = 1;
|
||||
if (k > 0 && nscd == 0) nscd = oldscad;
|
||||
if (_inited && dd == lastdate && k > 0)
|
||||
@ -861,13 +871,13 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
}
|
||||
else
|
||||
{
|
||||
// se ho modificato la seconda o oltre, faccio tutte uguali dalla
|
||||
// seconda in poi; la prima resta com'e' se possibile, mentre se
|
||||
// c'e' un resto glielo sommo.
|
||||
// Dunque: prendo la prima, calcolo il resto, divido per quella nuova,
|
||||
// se resto lo sommo alla prima, e faccio quante rate servono
|
||||
// se ho modificato la seconda o oltre, faccio tutte uguali dalla
|
||||
// seconda in poi; la prima resta com'e' se possibile, mentre se
|
||||
// c'e' un resto glielo sommo.
|
||||
// Dunque: prendo la prima, calcolo il resto, divido per quella nuova,
|
||||
// se resto lo sommo alla prima, e faccio quante rate servono
|
||||
|
||||
TToken_string& trt = (TToken_string&)srate[first];
|
||||
TToken_string& trt = (TToken_string&)srate[first];
|
||||
real rfirst(is_perc_modified ? trt.get(1) : trt.get(4));
|
||||
if (!delta.is_zero()) rfirst -= delta;
|
||||
real rest = tot - rfirst;
|
||||
@ -877,136 +887,135 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
int nr = (int)div.integer() + (_tpr > 4 ? 2 : 1);
|
||||
real reminder = rest - (nimp * real(nr -1));
|
||||
rfirst += reminder;
|
||||
for (int k = first; k < nr; k++)
|
||||
{
|
||||
nscd = oldscad;
|
||||
type = _def_tpr;
|
||||
TString16 ulc(_def_ulc);
|
||||
for (int k = first; k < nr; k++)
|
||||
{
|
||||
nscd = oldscad;
|
||||
type = _def_tpr;
|
||||
TString16 ulc(_def_ulc);
|
||||
|
||||
if (srate.items() > k)
|
||||
{
|
||||
TToken_string& trt = (TToken_string&)srate[k];
|
||||
if (_inited) dd = trt.get(3);
|
||||
type = atoi(trt.get(2));
|
||||
nscd = atoi(trt.get(0));
|
||||
ulc = trt.get(5);
|
||||
}
|
||||
if (srate.items() > k)
|
||||
{
|
||||
TToken_string& trt = (TToken_string&)srate[k];
|
||||
if (_inited) dd = trt.get(3);
|
||||
type = atoi(trt.get(2));
|
||||
nscd = atoi(trt.get(0));
|
||||
ulc = trt.get(5);
|
||||
}
|
||||
|
||||
if (type == 0) type = 1;
|
||||
if (type == 0) type = 1;
|
||||
|
||||
if (_inited && dd == lastdate && k > 0)
|
||||
next_scad(dd,nscd,mcomm,k);
|
||||
if (_inited && dd == lastdate && k > 0)
|
||||
next_scad(dd,nscd,mcomm,k);
|
||||
|
||||
set_rata(k, is_perc_modified ? (k == first ? rfirst : nimp) : ZERO,
|
||||
nscd, type, ulc, NULL, dd.string());
|
||||
if (!is_perc_modified)
|
||||
set_imprata (k, k == first ? (rfirst + delta) : nimp);
|
||||
}
|
||||
set_rata(k, is_perc_modified ? (k == first ? rfirst : nimp) : ZERO,
|
||||
nscd, type, ulc, NULL, dd.string());
|
||||
if (!is_perc_modified)
|
||||
set_imprata (k, k == first ? (rfirst + delta) : nimp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (rdiff != 4)
|
||||
for (j = frs; sum < mx; j++)
|
||||
{
|
||||
// se c'e' la vecchia rata si tengono i parametri
|
||||
// altrimenti si calcolano
|
||||
if (j < srate.items())
|
||||
for (j = frs; sum < mx; j++)
|
||||
{
|
||||
// se c'e' la vecchia rata si tengono i parametri
|
||||
// altrimenti si calcolano
|
||||
if (j < srate.items())
|
||||
{
|
||||
TToken_string& trt = (TToken_string&)srate[j];
|
||||
if (_inited) dd = trt.get(3);
|
||||
type = atoi(trt.get(2));
|
||||
nscd = j == 0 ? 0 : atoi(trt.get(0));
|
||||
if (type == 0) type = 1;
|
||||
if (j > 0 && nscd == 0) nscd = oldscad;
|
||||
if (_inited && dd == lastdate && j > 0)
|
||||
next_scad(dd,nscd,mcomm,j);
|
||||
TToken_string& trt = (TToken_string&)srate[j];
|
||||
if (_inited) dd = trt.get(3);
|
||||
type = atoi(trt.get(2));
|
||||
nscd = atoi(trt.get(0));
|
||||
if (type == 0) type = 1;
|
||||
if (j > 0 && nscd == 0) nscd = oldscad;
|
||||
if (_inited && dd == lastdate && j > 0)
|
||||
next_scad(dd,nscd,mcomm,j);
|
||||
}
|
||||
else if (_inited)
|
||||
{
|
||||
if (dd <= botime) dd = lastdate;
|
||||
next_scad(dd,nscd,mcomm,j);
|
||||
if (dd <= botime) dd = lastdate;
|
||||
next_scad(dd,nscd,mcomm,j);
|
||||
}
|
||||
else nscd = _int_rate;
|
||||
|
||||
TToken_string& ttr = set_rata(j, is_perc_modified ? newv : ZERO,
|
||||
nscd, type);
|
||||
TToken_string& ttr = set_rata(j, is_perc_modified ? newv : ZERO,
|
||||
nscd, type);
|
||||
if (_inited)
|
||||
ttr.add(dd.string(), 3);
|
||||
if (!is_perc_modified)
|
||||
{
|
||||
ttr.add(newv.string(),4);
|
||||
}
|
||||
if ((mx - sum) < newv)
|
||||
{
|
||||
// add remainder on first rate
|
||||
newv += (mx - sum);
|
||||
if (!is_perc_modified)
|
||||
set_imprata(frs, newv);
|
||||
else {
|
||||
TToken_string& t = rata(frs);
|
||||
t.add(newv.string(), 1);
|
||||
}
|
||||
remove_rata(j);
|
||||
break;
|
||||
}
|
||||
// }
|
||||
sum += newv;
|
||||
}
|
||||
}
|
||||
if ((mx - sum) < newv)
|
||||
{
|
||||
// add remainder on first rate
|
||||
newv += (mx - sum);
|
||||
if (!is_perc_modified)
|
||||
set_imprata(frs, newv);
|
||||
else {
|
||||
TToken_string& t = rata(frs);
|
||||
t.add(newv.string(), 1);
|
||||
}
|
||||
remove_rata(j);
|
||||
break;
|
||||
}
|
||||
sum += newv;
|
||||
}
|
||||
else // rdiff == 4; uguali finche' possibile
|
||||
{
|
||||
bool basta = FALSE;
|
||||
for (j = frs; ; j++)
|
||||
{
|
||||
// ultima rata puo' differire dalle precedenti
|
||||
if (mx - sum <= newv)
|
||||
{
|
||||
newv = mx - sum;
|
||||
basta = TRUE;
|
||||
}
|
||||
// se c'e' la vecchia rata si tengono i parametri
|
||||
// altrimenti si calcolano
|
||||
if (j < srate.items())
|
||||
{
|
||||
TToken_string& trt = (TToken_string&)srate[j];
|
||||
if (_inited) dd = trt.get(3);
|
||||
type = atoi(trt.get(2));
|
||||
nscd = j == 0 ? 0 : atoi(trt.get(0));
|
||||
if (type == 0) type = 1;
|
||||
if (j > 0 && nscd == 0) nscd = oldscad;
|
||||
if (_inited && dd == lastdate && j > 0)
|
||||
next_scad(dd,nscd,mcomm,j);
|
||||
}
|
||||
else if (_inited) next_scad(dd,nscd,mcomm,j);
|
||||
{
|
||||
bool basta = FALSE;
|
||||
for (j = frs; ; j++)
|
||||
{
|
||||
// ultima rata puo' differire dalle precedenti
|
||||
if (mx - sum <= newv)
|
||||
{
|
||||
newv = mx - sum;
|
||||
basta = TRUE;
|
||||
}
|
||||
// se c'e' la vecchia rata si tengono i parametri
|
||||
// altrimenti si calcolano
|
||||
if (j < srate.items())
|
||||
{
|
||||
TToken_string& trt = (TToken_string&)srate[j];
|
||||
if (_inited) dd = trt.get(3);
|
||||
type = atoi(trt.get(2));
|
||||
nscd = atoi(trt.get(0));
|
||||
if (type == 0) type = 1;
|
||||
if (j > 0 && nscd == 0) nscd = oldscad;
|
||||
if (_inited && dd == lastdate && j > 0)
|
||||
next_scad(dd,nscd,mcomm,j);
|
||||
}
|
||||
else if (_inited)
|
||||
next_scad(dd,nscd,mcomm,j);
|
||||
|
||||
TToken_string& ttr = set_rata(j, is_perc_modified ? newv : ZERO,
|
||||
nscd, type);
|
||||
if (_inited)
|
||||
ttr.add(dd.string(), 3);
|
||||
if (!is_perc_modified)
|
||||
ttr.add(newv.string(),4);
|
||||
if (basta) break;
|
||||
sum += newv;
|
||||
}
|
||||
}
|
||||
TToken_string& ttr = set_rata(j, is_perc_modified ? newv : ZERO,
|
||||
nscd, type);
|
||||
if (_inited)
|
||||
ttr.add(dd.string(), 3);
|
||||
if (!is_perc_modified)
|
||||
ttr.add(newv.string(),4);
|
||||
if (basta) break;
|
||||
sum += newv;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else // exhausted
|
||||
}
|
||||
else // exhausted
|
||||
{
|
||||
for(int j = row+1; j < srate.items(); j++)
|
||||
_rate.destroy(j);
|
||||
}
|
||||
|
||||
|
||||
if (_inited)
|
||||
{
|
||||
// ricalcola il valore secondario (non modificato)
|
||||
real toshare(100.0);
|
||||
if (is_perc_modified)
|
||||
toshare = (_tpr < 4 ? _firstr : _secndr);
|
||||
TDistrib dt(toshare, is_perc_modified ? _round : 3);
|
||||
if (_inited)
|
||||
{
|
||||
// ricalcola il valore secondario (non modificato)
|
||||
real toshare(100.0);
|
||||
if (is_perc_modified)
|
||||
toshare = (_tpr < 4 ? _firstr : _secndr);
|
||||
TDistrib dt(toshare, is_perc_modified ? _round : 3);
|
||||
|
||||
for (int j = first; j < _rate.items(); j++)
|
||||
for (int j = first; j < _rate.items(); j++)
|
||||
{
|
||||
real rvl = is_perc_modified ? perc_rata(j) : tpay_rata(j);
|
||||
// togli pezxo di troppo
|
||||
@ -1015,7 +1024,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
real zpx = rvl/rmax; // percentuale
|
||||
dt.add(zpx);
|
||||
}
|
||||
for (j = first; j < _rate.items(); j++)
|
||||
for (j = first; j < _rate.items(); j++)
|
||||
{
|
||||
real rfirst(0.0);
|
||||
TToken_string& tr = rata(j);
|
||||
@ -1057,40 +1066,39 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
// real tot = tpay_rata(0) + _secndr;
|
||||
// tr.add(tot.string(), 4);
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
need_recalc = TRUE;
|
||||
return P_OK;
|
||||
} // new_value != NULL
|
||||
need_recalc = TRUE;
|
||||
return P_OK;
|
||||
} // new_value != NULL
|
||||
}
|
||||
else // i != row modified
|
||||
{
|
||||
if (rdiff == 2)
|
||||
continue;
|
||||
{
|
||||
if (rdiff == 2)
|
||||
continue;
|
||||
|
||||
if (i > 0 && !((perc_rata(i-1) == perc_rata(i))))
|
||||
{
|
||||
if (rdiff == 2)
|
||||
rdiff = 1;
|
||||
_rdiff = FALSE;
|
||||
}
|
||||
if (is_perc_modified)
|
||||
rsum += perc_rata(i);
|
||||
else
|
||||
rsum += tpay_rata(i);
|
||||
if (i > 0 && !((perc_rata(i-1) == perc_rata(i))))
|
||||
{
|
||||
if (rdiff == 2)
|
||||
rdiff = 1;
|
||||
_rdiff = FALSE;
|
||||
}
|
||||
if (is_perc_modified)
|
||||
rsum += perc_rata(i);
|
||||
else
|
||||
rsum += tpay_rata(i);
|
||||
|
||||
lastdate = data_rata(i);
|
||||
oldtype = tipo_rata(i);
|
||||
oldscad = scad_rata(i);
|
||||
if (_inited && i > 0)
|
||||
{
|
||||
if (data_rata(i) <= data_rata(i-1))
|
||||
return P_SCAD;
|
||||
}
|
||||
else if (lastdate < _inizio)
|
||||
return P_INIZIO;
|
||||
}
|
||||
lastdate = data_rata(i);
|
||||
oldtype = tipo_rata(i);
|
||||
oldscad = scad_rata(i);
|
||||
if (_inited && i > 0)
|
||||
{
|
||||
if (data_rata(i) <= data_rata(i-1))
|
||||
return P_SCAD;
|
||||
}
|
||||
else if (_inited && lastdate < _inizio)
|
||||
return P_INIZIO;
|
||||
}
|
||||
}
|
||||
|
||||
return P_OK;
|
||||
@ -1122,8 +1130,8 @@ bool TPagamento::read(TTable* t, TTable* r)
|
||||
_fixd[0] = t->get_int("I0");
|
||||
_fixd[1] = t->get_int("I1");
|
||||
_fixd[2] = t->get_int("I2");
|
||||
|
||||
// TBI aggiusta _inizio secondo INSCAD; vedi mese commerciale etc.
|
||||
|
||||
// aggiusta _inizio secondo INSCAD; vedi mese commerciale etc.
|
||||
if (_inscad == 'M')
|
||||
{
|
||||
if (_mcomm) _inizio.set_day(_inizio.month() == 2 ? 28 : 30);
|
||||
@ -1385,10 +1393,15 @@ void TPagamento::set_sheet(TSheet_field& sf, int sscad)
|
||||
}
|
||||
else
|
||||
if (_rate.items() > 0) // not inited: set edit sheet
|
||||
<<<<<<< pagament.cpp
|
||||
{
|
||||
if (sf.items() > 0) sf.destroy();
|
||||
=======
|
||||
{
|
||||
TString_array& arr = sf.rows_array();
|
||||
arr.destroy(); // Avoid screen update by now
|
||||
|
||||
>>>>>>> 1.44
|
||||
for (int i = 0, scr = 0; i < n_rate(); i++)
|
||||
{
|
||||
TToken_string& s = sf.row(-1);
|
||||
|
@ -22,6 +22,7 @@ const word P_INIZIO = 0x0008; // data 1a rata < data inizio pagamenti
|
||||
const word P_NEG = 0x0010; // importo specificato < minimo possibile
|
||||
const word P_TROP = 0x0020; // importo specificato > massimo possibile
|
||||
const word P_TOTNC = 0x0040; // totale importi != totale pagamento
|
||||
const word P_MCOMM = 0x0080; // inconsistenza mese commerciale/scadenze
|
||||
|
||||
class TPagamento : public TObject
|
||||
{
|
||||
@ -81,6 +82,7 @@ public:
|
||||
bool mese_commerciale() const { return _mcomm; }
|
||||
bool rate_differenziate() const { return _rdiff; }
|
||||
int tipo_prima_rata() const { return _tpr; }
|
||||
int intervallo_rate() const { return _int_rate; }
|
||||
int decs() const { return _round; }
|
||||
|
||||
const TString& name() const { return _name; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user