Correzzioni ai pagamenti

git-svn-id: svn://10.65.10.50/trunk@2423 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1996-01-09 18:50:34 +00:00
parent 99912abfd9
commit a54755106e
2 changed files with 24 additions and 11 deletions

View File

@ -50,7 +50,8 @@ const char* TPagamento::_rata_sfield(int n, int f) const
}
void TPagamento::set_inizio(const TDate& d)
{
{
_datadoc = d;
_inizio = d;
// aggiusta _inizio secondo INSCAD; vedi mese commerciale etc.
if (_inscad == 'M')
@ -680,7 +681,7 @@ word TPagamento::validate() const
// check errori date scadenze (se istanziate)
TDate d(data_rata(0));
if (d < _inizio)
if (d < _datadoc) // _inizio
res |= P_INIZIO;
for (i = 1; i < n_rate(); i++)
@ -704,7 +705,7 @@ void TPagamento::strerr(word err, TString& s)
if (err & P_SCAD)
s << "Le scadenze non sono consecutive\n";
if (err & P_INIZIO)
s << "La prima rata e' antecedente alla data del documento (" << _inizio << ")\n";
s << "La prima rata e' antecedente alla data del documento (" << _datadoc << ")\n"; // _inizio
if (err & P_NEG)
s << "L'importo dato e' inferiore al minimo possibile\n";
if (err & P_TROP)
@ -723,6 +724,8 @@ void TPagamento::strerr(word err, TString& s)
s << "Scadenze incompatibili con il mese commerciale\n";
if (err & P_ZERO)
s << "Almeno una rata ha importo zero\n";
if (err & P_SCWIDE)
s << "Le scadenze sono troppo distanti\n";
}
const char* TPagamento::desc_tpr() const
@ -863,7 +866,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
oldscad = (int)(lastdate - data_rata(i-1));
if (oldscad <= 0l) return P_SCAD;
}
else if (lastdate < _inizio) return P_INIZIO;
else if (lastdate < _datadoc) return P_INIZIO; // _inizio
tt.add(scad,3);
ss.add(scad,3);
// ricalcola rate successive: se si vuole modificarne solo una
@ -882,10 +885,11 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
else
{
// nulla di speciale visto che si memorizza la derivata
int sc = atoi(scad);
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 || (row > 0 && sc == 0)) return P_SCAD;
if (sc > 10000L) return P_SCWIDE;
if (_mcomm && (sc % 30) != 0)
return P_MCOMM;
TToken_string& tt = rata(row);
@ -1066,7 +1070,7 @@ word TPagamento::change_value_uguali(int row, real user_val, bool is_perc)
if (!delta.is_zero())
{
user_val += delta;
rata(0).add(div.string(), tok_ind);
rata(0).add(user_val.string(), tok_ind);
}
}
}
@ -1588,11 +1592,13 @@ void TPagamento::set_sheet(TSheet_field& sf, int sscad)
}
else
{
sf.reset();
for (int i = 0, scr = 0; i < n_rate(); i++)
// sf.reset();
long scr = 0L;
for (int i = 0; i < n_rate(); i++)
{
TToken_string& s = sf.row(-1);
scr += scad_rata(i);
TToken_string& s = sf.row(i);
scr += scad_rata(i);
s = "";
s.add(scr);
s.add(perc_rata(i).string());
@ -1602,6 +1608,9 @@ void TPagamento::set_sheet(TSheet_field& sf, int sscad)
s.add(uc);
s.add(desc_tipo(tr, uc));
}
for (int d = sf.items()-1; d >= i; d--)
sf.destroy(d);
}
const bool abilita = _tpr <= 3;
@ -1671,6 +1680,7 @@ _def_tpr(1), _def_ulc(""), _round(0), _int_rate(30), _tpr(0), _rdiff(FALSE)
_inizio = data;
else
_inizio = TDate(TODAY);
_datadoc = _inizio;
if (_code.blank() || !read())
_new = TRUE;

View File

@ -24,6 +24,7 @@ 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
const word P_ZERO = 0x0100; // importo di una rata uguale a zero
const word P_SCWIDE = 0x0200; // date di scadenza separate da piu' di 10000 giorni
class TPagamento : public TObject
{
@ -42,6 +43,7 @@ class TPagamento : public TObject
int _tpr; // tipo prima rata: S3
bool _dirty; // modificato (strutturalmente!)
TDate _inizio; // data inizio pagamenti
TDate _datadoc; // data documento
bool _inited; // vero se c'e' un movimento di riferimento
real _firstr; // importo da pagare in prima rata (o distribuire se tpr == 0)
real _secndr; // importo da distribuire
@ -120,6 +122,7 @@ public:
void set_numero_rate(int n, int sscad = -1, int rdiff = 1);
void set_inizio(const TDate& d); // resetta tutto
void set_datadoc(const TDate & d) { _datadoc = d;}
void set_inizio_scadenza(char v) { _inscad = v; }
void set_code(const char* c) { _code = c; }
void set_round(int n) { _round = n; }