Nuove cacchiate spappolate
git-svn-id: svn://10.65.10.50/trunk@2158 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
36dc951242
commit
f084026c5a
@ -74,8 +74,10 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
|
||||
mod = m_ulc = TRUE;
|
||||
break;
|
||||
case K_DEL:
|
||||
case K_INS:
|
||||
doit = FALSE;
|
||||
case K_INS:
|
||||
// permette aggiunta e cancellazione solo se non c'e'
|
||||
// ricalcolo automatico
|
||||
doit = !recalc;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -123,8 +125,9 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
|
||||
if (ahiahi) // any error? Rimetti le righe com'erano prima
|
||||
{
|
||||
if (recalc)
|
||||
{
|
||||
beep();
|
||||
{
|
||||
TString err(80); pag.strerr(ahiahi,err);
|
||||
warning_box(err);
|
||||
ps.row(r) = rws.row(r);
|
||||
ps.force_update(r);
|
||||
}
|
||||
|
221
cg/pagament.cpp
221
cg/pagament.cpp
@ -307,38 +307,10 @@ void TPagamento::next_scad(TDate& d, int scad, bool mcomm, int rata)
|
||||
if (!last && dy < d.day())
|
||||
d.set_day(dy);
|
||||
}
|
||||
else
|
||||
{
|
||||
d += scad;
|
||||
}
|
||||
else d += scad;
|
||||
|
||||
// riaggiusta se ci sono scadenze fissate
|
||||
if (_fixd[0] != 0 || _fixd[1] != 0 || _fixd[2] != 0)
|
||||
{
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
if (_fixd[i] > d.day())
|
||||
{
|
||||
if (d.last_day(d.month(), d.year()) >= _fixd[i])
|
||||
d.set_day(_fixd[i]);
|
||||
else d.set_end_month();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == 3)
|
||||
{
|
||||
if (_fixd[0] > 0 && _fixd[0] < d.day())
|
||||
{
|
||||
d.set_day(_fixd[0]);
|
||||
d.set_month(d.month() == 12 ? 1 : d.month() + 1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TPagamento::set_default_type(int type, bool change_existing)
|
||||
{
|
||||
_def_tpr = type;
|
||||
@ -544,7 +516,8 @@ word TPagamento::validate() const
|
||||
// check errori date scadenze (se istanziate)
|
||||
TDate d(data_rata(0));
|
||||
if (d < _inizio)
|
||||
res |= P_INIZIO;
|
||||
res |= P_INIZIO;
|
||||
|
||||
for (i = 1; i < n_rate(); i++)
|
||||
{
|
||||
if (data_rata(i) <= d)
|
||||
@ -681,7 +654,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
|
||||
bool exhausted = FALSE;
|
||||
|
||||
for (int i = first; i < srate.items(); i++)
|
||||
for (int i = 0 /* first */; i < srate.items(); i++)
|
||||
{
|
||||
if (i == row)
|
||||
{
|
||||
@ -693,71 +666,71 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
// soltanto per row diversamente
|
||||
if ((rdiff == 2 && row > 0 && k > 0) || k == row)
|
||||
{
|
||||
TToken_string& tt = rata(k);
|
||||
TToken_string& ss = (TToken_string&)srate[k];
|
||||
tt.add(typ,2);
|
||||
ss.add(typ,2);
|
||||
tt.add(ulc,5);
|
||||
ss.add(ulc,5);
|
||||
need_recalc = TRUE;
|
||||
// no error is possible
|
||||
}
|
||||
}
|
||||
}
|
||||
TToken_string& tt = rata(k);
|
||||
TToken_string& ss = (TToken_string&)srate[k];
|
||||
tt.add(typ,2);
|
||||
ss.add(typ,2);
|
||||
tt.add(ulc,5);
|
||||
ss.add(ulc,5);
|
||||
need_recalc = TRUE;
|
||||
// no error is possible
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ulc != NULL)
|
||||
{
|
||||
rata(row).add(ulc, 5);
|
||||
srate.row(row).add(ulc, 5);
|
||||
need_recalc = TRUE;
|
||||
}
|
||||
|
||||
if (scad != NULL)
|
||||
{
|
||||
// if !_inited scad e' il n. giorni, se no e' la rata
|
||||
if (_inited)
|
||||
if (ulc != NULL)
|
||||
{
|
||||
TToken_string& tt = rata(row);
|
||||
TToken_string& ss = (TToken_string&)srate[row];
|
||||
lastdate = scad;
|
||||
// controlla errore sulla data scadenza
|
||||
if (i > 0)
|
||||
{
|
||||
oldscad = (int)(lastdate - data_rata(i-1));
|
||||
if (oldscad <= 0l) return P_SCAD;
|
||||
}
|
||||
else if (lastdate < _inizio) return P_INIZIO;
|
||||
tt.add(scad,3);
|
||||
ss.add(scad,3);
|
||||
// ricalcola rate successive: se si vuole modificarne solo una
|
||||
// ci si fotte e si disabilita il ricalcolo
|
||||
TDate ddd (lastdate);
|
||||
for (int j = row+1; j < srate.items(); j++)
|
||||
{
|
||||
TToken_string& tt = rata(j);
|
||||
TToken_string& ss = (TToken_string&)srate[j];
|
||||
next_scad(ddd,scad_rata(j),mcomm,j);
|
||||
tt.add(ddd.string(),3);
|
||||
ss.add(ddd.string(),3);
|
||||
need_recalc = TRUE;
|
||||
}
|
||||
rata(row).add(ulc, 5);
|
||||
srate.row(row).add(ulc, 5);
|
||||
need_recalc = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
// nulla di speciale visto che si memorizza la derivata
|
||||
int sc = atoi(scad);
|
||||
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)
|
||||
return P_MCOMM;
|
||||
TToken_string& tt = rata(row);
|
||||
TToken_string& ss = (TToken_string&)srate[row];
|
||||
tt.add(sc,0);
|
||||
ss.add(sc,0);
|
||||
need_recalc = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (scad != NULL)
|
||||
{
|
||||
// if !_inited scad e' il n. giorni, se no e' la rata
|
||||
if (_inited)
|
||||
{
|
||||
TToken_string& tt = rata(row);
|
||||
TToken_string& ss = (TToken_string&)srate[row];
|
||||
lastdate = scad;
|
||||
// controlla errore sulla data scadenza
|
||||
if (i > 0)
|
||||
{
|
||||
oldscad = (int)(lastdate - data_rata(i-1));
|
||||
if (oldscad <= 0l) return P_SCAD;
|
||||
}
|
||||
else if (lastdate < _inizio) return P_INIZIO;
|
||||
tt.add(scad,3);
|
||||
ss.add(scad,3);
|
||||
// ricalcola rate successive: se si vuole modificarne solo una
|
||||
// ci si fotte e si disabilita il ricalcolo
|
||||
TDate ddd (lastdate);
|
||||
for (int j = row+1; j < srate.items(); j++)
|
||||
{
|
||||
TToken_string& tt = rata(j);
|
||||
TToken_string& ss = (TToken_string&)srate[j];
|
||||
next_scad(ddd,scad_rata(j),mcomm,j);
|
||||
tt.add(ddd.string(),3);
|
||||
ss.add(ddd.string(),3);
|
||||
need_recalc = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// nulla di speciale visto che si memorizza la derivata
|
||||
int sc = atoi(scad);
|
||||
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)
|
||||
return P_MCOMM;
|
||||
TToken_string& tt = rata(row);
|
||||
TToken_string& ss = (TToken_string&)srate[row];
|
||||
tt.add(sc,0);
|
||||
ss.add(sc,0);
|
||||
need_recalc = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
// here's the bell
|
||||
if (new_value != NULL)
|
||||
@ -1077,7 +1050,10 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
// real tot = tpay_rata(0) + _secndr;
|
||||
// tr.add(tot.string(), 4);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
// sistema scadenze fisse
|
||||
adjust_fixed_scad();
|
||||
|
||||
need_recalc = TRUE;
|
||||
return P_OK;
|
||||
@ -1111,7 +1087,8 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
|
||||
return P_INIZIO;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
adjust_fixed_scad();
|
||||
return P_OK;
|
||||
}
|
||||
|
||||
@ -1301,6 +1278,9 @@ void TPagamento::set_rate_auto()
|
||||
// prima rata
|
||||
if (_tpr > 0 && _tpr < 4)
|
||||
set_imprata(0, tpay_rata(0) + _secndr);
|
||||
|
||||
// risistema rate per scadenze fisse
|
||||
adjust_fixed_scad();
|
||||
|
||||
main_app().end_wait();
|
||||
}
|
||||
@ -1334,16 +1314,16 @@ void TPagamento::set_total(const real& imponibile, const real& imposta, const re
|
||||
_firstr = _imponibile;
|
||||
break;
|
||||
case 4:
|
||||
_firstr = _spese + _imponibile;
|
||||
_secndr = _imposta;
|
||||
_secndr = _spese + _imponibile;
|
||||
_firstr = _imposta;
|
||||
break;
|
||||
case 5:
|
||||
_firstr = _imponibile + _imposta;
|
||||
_secndr = _spese;
|
||||
_secndr = _imponibile + _imposta;
|
||||
_firstr = _spese;
|
||||
break;
|
||||
case 6:
|
||||
_firstr = _imponibile;
|
||||
_secndr = _imposta + _spese;
|
||||
_secndr = _imponibile;
|
||||
_firstr = _imposta + _spese;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1459,7 +1439,44 @@ void TPagamento::set_sheet(TSheet_field& sf, int sscad)
|
||||
sf.force_update();
|
||||
main_app().end_wait();
|
||||
}
|
||||
|
||||
|
||||
void TPagamento::adjust_fixed_scad()
|
||||
{
|
||||
if (!_inited) return;
|
||||
|
||||
for (int i = 0; i < n_rate(); i++)
|
||||
{
|
||||
TDate d = data_rata(i);
|
||||
|
||||
// riaggiusta se ci sono scadenze fissate
|
||||
if (_fixd[0] != 0 || _fixd[1] != 0 || _fixd[2] != 0)
|
||||
{
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
if (_fixd[i] > d.day())
|
||||
{
|
||||
if (d.last_day(d.month(), d.year()) >= _fixd[i])
|
||||
d.set_day(_fixd[i]);
|
||||
else d.set_end_month();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == 3)
|
||||
{
|
||||
if (_fixd[0] > 0 && _fixd[0] < d.day())
|
||||
{
|
||||
d.set_day(_fixd[0]);
|
||||
d.set_month(d.month() == 12 ? 1 : d.month() + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TToken_string& tt = rata(i);
|
||||
tt.add(d.string(), 3);
|
||||
}
|
||||
}
|
||||
|
||||
TPagamento::TPagamento(const char* codtab, const char* data) :
|
||||
_slicer(0.0,0), _new(FALSE), _imponibile(0.0), _imposta(0.0),
|
||||
_spese(0.0), _cambio(1.0), _code(codtab), _dirty(FALSE), _inited(FALSE),
|
||||
|
@ -92,6 +92,8 @@ public:
|
||||
|
||||
// giorni scadenza fissi, aggiunti poi
|
||||
void set_fixed_scad(int a, int ind) { _fixd[ind] = a; }
|
||||
// aggiusta scadenze fisse (tutte in un colpo)
|
||||
void adjust_fixed_scad();
|
||||
|
||||
// queste vengono usate solo per movimenti editabili nella struttura
|
||||
// (da tabella pagamenti) e riaggiustano tutte le rate in accordo
|
||||
|
Loading…
x
Reference in New Issue
Block a user