Ultime gabriellate

git-svn-id: svn://10.65.10.50/trunk@2187 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1995-11-22 10:56:09 +00:00
parent 063622cd6c
commit 7cd89ab971
3 changed files with 45 additions and 19 deletions

View File

@ -212,8 +212,6 @@ bool BA3700_application::tipo_prima_rata(TMask_field& f, KEY k)
{
// aggiunge o toglie se necessario rata 0, lasciando
// le altre e shiftando le scadenze
// pag->set_tipo_prima_rata()
// if (k != K_TAB) return TRUE;
if (f.mask().query_mode())
return TRUE;
sht* s = (sht*)get_app_data();
@ -232,6 +230,7 @@ bool BA3700_application::tipo_prima_rata(TMask_field& f, KEY k)
{
pag->set_sheet(*shf);
(*rws) = shf->rows_array();
msk->field(F_NUM_RATE).set(format("%d",pag->n_rate()));
}
return TRUE;
}
@ -247,11 +246,12 @@ bool BA3700_application::numero_rate(TMask_field& f, KEY k)
TMask* msk = s->_msk;
TArray* rws = s->_rws;
int nr = msk->get_int(F_NUM_RATE);
if (!pag || nr == pag->n_rate() || msk->get(F_NUM_RATE).empty()) return TRUE;
if (!pag || nr == pag->n_rate() || msk->get(F_NUM_RATE).empty())
return TRUE;
int ir = msk->get_int(F_INT_RATE);
if (ir == 0) ir = -1;
pag->set_numero_rate(msk->get_int(F_NUM_RATE),ir);
pag->set_numero_rate(nr,ir);
if (pag->dirty())
{
pag->set_sheet(*shf);

View File

@ -261,7 +261,6 @@ BEGIN
INPUT 103
OUTPUT 103
OUTPUT 105
ITEM " |Altro pagamento"
ITEM "1|Rimessa diretta o contanti"
ITEM "2|Tratta"
ITEM "3|Ricevuta Bancaria"

View File

@ -144,6 +144,12 @@ void TPagamento::set_tipo_prima_rata(int v, int sscad)
tt.add(tipo_rata(i+1),2);
tt.add(ulc_rata(i+1), 5);
}
if (n_rate() == 2 && scad_rata(1) == 0)
{
// l'unica rata aveva scadenza 0; ci mettiamo n.giorni default
TToken_string& tt = rata(1);
tt.add(_int_rate, 0);
}
}
_tpr = v;
_dirty = TRUE;
@ -680,9 +686,20 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
if (ulc != NULL)
{
rata(row).add(ulc, 5);
srate.row(row).add(ulc, 5);
need_recalc = TRUE;
for (int k = 0; k < srate.items(); k++)
{
// deve farlo per tutte dalla 1 in poi se rdiff == 2,
// 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(ulc,5);
ss.add(ulc,5);
need_recalc = TRUE;
// no error is possible
}
}
}
if (scad != NULL)
@ -751,8 +768,13 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
// aggiungere il resto sulla 1a rata
// controlla se rdiff e' compatibile con
// i dati e se e' il caso riaggiusta
if (rdiff == 3 && (remainder % newv) != 0.0)
rdiff = 2;
// -------------------------------- vedi se rimettere -----------------------------------
// if (rdiff == 3 && (remainder % newv) != 0.0)
// {
// warning_box("Il resto non e' divisibile - uso 'Uguali finche' possibile'");
// rdiff = 4;
// }
// ---------------------------------------------------------------------------------------
// *** 10/8/95: se uguali e non e' multiplo intero lo teniamo cosi' e poi
// *** aggiungiamo alla prima rata utile
// if (rdiff == 2 && !((rmax % newv.integer()) == ZERO))
@ -816,7 +838,7 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
for (int j = srate.items()-1; j >= frs; j--) _rate.destroy(j);
const int n = srate.items(); // questo rimane per forza costante
if (rdiff == 2 && n > 1)
if (rdiff == 2 && n > 1+first)
{
// HERE
real tot = is_perc_modified ? real(100.0) : (_tpr < 4 ? _firstr : _secndr);
@ -832,9 +854,9 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
// inferiore al minimo
if (nimp.sign() < 0) { _rate = srate; return P_NEG; }
real remainder = tot - nimp;
real div = remainder / real(n - 1);
real div = remainder / real(n - 1 - first);
div.round(is_perc_modified ? 2 : _round);
nimp = tot - (div * real(n-1));
nimp = tot - (div * real(n-1-first));
for (int k = first; k < n; k++)
{
@ -868,8 +890,8 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
real div = rest / nimp;
if (div < real(1.0)) { _rate = srate; return P_TROP; }
int nr = (int)div.integer() + (_tpr > 4 ? 2 : 1);
real reminder = rest - (nimp * real(nr -1));
int nr = (int)div.integer() + (_tpr > 3 ? 2 : 1);
real reminder = rest - (nimp * real(nr - 1 - first));
rfirst += reminder;
for (int k = first; k < nr; k++)
{
@ -934,10 +956,15 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
{
// add remainder on first rate
newv += (mx - sum);
if (rdiff == 3)
{
newv = is_perc_modified ? perc_rata(first) : tpay_rata(first);
newv += (mx - sum);
}
if (!is_perc_modified)
set_imprata(frs, newv);
set_imprata(first, newv);
else {
TToken_string& t = rata(frs);
TToken_string& t = rata(first);
t.add(newv.string(), 1);
}
remove_rata(j);