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) void TPagamento::set_inizio(const TDate& d)
{ {
_datadoc = d;
_inizio = d; _inizio = d;
// aggiusta _inizio secondo INSCAD; vedi mese commerciale etc. // aggiusta _inizio secondo INSCAD; vedi mese commerciale etc.
if (_inscad == 'M') if (_inscad == 'M')
@ -680,7 +681,7 @@ word TPagamento::validate() const
// check errori date scadenze (se istanziate) // check errori date scadenze (se istanziate)
TDate d(data_rata(0)); TDate d(data_rata(0));
if (d < _inizio) if (d < _datadoc) // _inizio
res |= P_INIZIO; res |= P_INIZIO;
for (i = 1; i < n_rate(); i++) for (i = 1; i < n_rate(); i++)
@ -704,7 +705,7 @@ void TPagamento::strerr(word err, TString& s)
if (err & P_SCAD) if (err & P_SCAD)
s << "Le scadenze non sono consecutive\n"; s << "Le scadenze non sono consecutive\n";
if (err & P_INIZIO) 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) if (err & P_NEG)
s << "L'importo dato e' inferiore al minimo possibile\n"; s << "L'importo dato e' inferiore al minimo possibile\n";
if (err & P_TROP) if (err & P_TROP)
@ -723,6 +724,8 @@ void TPagamento::strerr(word err, TString& s)
s << "Scadenze incompatibili con il mese commerciale\n"; s << "Scadenze incompatibili con il mese commerciale\n";
if (err & P_ZERO) if (err & P_ZERO)
s << "Almeno una rata ha importo zero\n"; 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 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)); oldscad = (int)(lastdate - data_rata(i-1));
if (oldscad <= 0l) return P_SCAD; 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); tt.add(scad,3);
ss.add(scad,3); ss.add(scad,3);
// ricalcola rate successive: se si vuole modificarne solo una // ricalcola rate successive: se si vuole modificarne solo una
@ -882,10 +885,11 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
else else
{ {
// nulla di speciale visto che si memorizza la derivata // nulla di speciale visto che si memorizza la derivata
int sc = atoi(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 || (row > 0 && sc == 0)) return P_SCAD;
if (sc > 10000L) return P_SCWIDE;
if (_mcomm && (sc % 30) != 0) if (_mcomm && (sc % 30) != 0)
return P_MCOMM; return P_MCOMM;
TToken_string& tt = rata(row); 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()) if (!delta.is_zero())
{ {
user_val += delta; 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 else
{ {
sf.reset(); // sf.reset();
for (int i = 0, scr = 0; i < n_rate(); i++) long scr = 0L;
for (int i = 0; i < n_rate(); i++)
{ {
TToken_string& s = sf.row(-1); TToken_string& s = sf.row(i);
scr += scad_rata(i); scr += scad_rata(i);
s = "";
s.add(scr); s.add(scr);
s.add(perc_rata(i).string()); s.add(perc_rata(i).string());
@ -1602,6 +1608,9 @@ void TPagamento::set_sheet(TSheet_field& sf, int sscad)
s.add(uc); s.add(uc);
s.add(desc_tipo(tr, uc)); s.add(desc_tipo(tr, uc));
} }
for (int d = sf.items()-1; d >= i; d--)
sf.destroy(d);
} }
const bool abilita = _tpr <= 3; 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; _inizio = data;
else else
_inizio = TDate(TODAY); _inizio = TDate(TODAY);
_datadoc = _inizio;
if (_code.blank() || !read()) if (_code.blank() || !read())
_new = TRUE; _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_TOTNC = 0x0040; // totale importi != totale pagamento
const word P_MCOMM = 0x0080; // inconsistenza mese commerciale/scadenze const word P_MCOMM = 0x0080; // inconsistenza mese commerciale/scadenze
const word P_ZERO = 0x0100; // importo di una rata uguale a zero 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 class TPagamento : public TObject
{ {
@ -42,6 +43,7 @@ class TPagamento : public TObject
int _tpr; // tipo prima rata: S3 int _tpr; // tipo prima rata: S3
bool _dirty; // modificato (strutturalmente!) bool _dirty; // modificato (strutturalmente!)
TDate _inizio; // data inizio pagamenti TDate _inizio; // data inizio pagamenti
TDate _datadoc; // data documento
bool _inited; // vero se c'e' un movimento di riferimento bool _inited; // vero se c'e' un movimento di riferimento
real _firstr; // importo da pagare in prima rata (o distribuire se tpr == 0) real _firstr; // importo da pagare in prima rata (o distribuire se tpr == 0)
real _secndr; // importo da distribuire real _secndr; // importo da distribuire
@ -120,6 +122,7 @@ public:
void set_numero_rate(int n, int sscad = -1, int rdiff = 1); void set_numero_rate(int n, int sscad = -1, int rdiff = 1);
void set_inizio(const TDate& d); // resetta tutto 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_inizio_scadenza(char v) { _inscad = v; }
void set_code(const char* c) { _code = c; } void set_code(const char* c) { _code = c; }
void set_round(int n) { _round = n; } void set_round(int n) { _round = n; }