Aggiornata pag_notify (non mi passa piu!)
git-svn-id: svn://10.65.10.50/trunk@2545 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d6a1c66f1d
commit
a17eaa542a
197
sc/sc0101.cpp
197
sc/sc0101.cpp
@ -26,12 +26,14 @@ class TFattura_mask : public TMask
|
|||||||
protected:
|
protected:
|
||||||
static bool totdoc_handler(TMask_field& f, KEY k);
|
static bool totdoc_handler(TMask_field& f, KEY k);
|
||||||
static bool totval_handler(TMask_field& f, KEY k);
|
static bool totval_handler(TMask_field& f, KEY k);
|
||||||
|
static bool valuta_handler(TMask_field& f, KEY key);
|
||||||
static bool cambio_handler(TMask_field& f, KEY k);
|
static bool cambio_handler(TMask_field& f, KEY k);
|
||||||
static bool pag_notify(TSheet_field& ps, int r, KEY k);
|
static bool pag_notify(TSheet_field& ps, int r, KEY k);
|
||||||
static bool pag_handler(TMask_field& f, KEY key);
|
static bool pag_handler(TMask_field& f, KEY key);
|
||||||
static bool reset_handler(TMask_field& f, KEY key);
|
static bool reset_handler(TMask_field& f, KEY key);
|
||||||
static bool recalc_handler(TMask_field& f, KEY key);
|
static bool recalc_handler(TMask_field& f, KEY key);
|
||||||
static bool nrate_handler(TMask_field& f, KEY key);
|
static bool nrate_handler(TMask_field& f, KEY key);
|
||||||
|
static bool tipopag_handler(TMask_field& f, KEY key);
|
||||||
static bool codcab_handler(TMask_field& f, KEY key);
|
static bool codcab_handler(TMask_field& f, KEY key);
|
||||||
|
|
||||||
TPagamento& pagamento() const { return *_pag; }
|
TPagamento& pagamento() const { return *_pag; }
|
||||||
@ -70,8 +72,13 @@ TFattura_mask::TFattura_mask(TRiga_partite& fattura, const TString& codpag)
|
|||||||
set_handler(FS_NSCAB, codcab_handler);
|
set_handler(FS_NSCAB, codcab_handler);
|
||||||
set_handler(FS_VSCAB, codcab_handler);
|
set_handler(FS_VSCAB, codcab_handler);
|
||||||
|
|
||||||
pag_sheet().set_notify(pag_notify);
|
TSheet_field& sf = pag_sheet();
|
||||||
pag_sheet().set_handler(pag_handler);
|
sf.set_notify(pag_notify);
|
||||||
|
sf.set_handler(pag_handler);
|
||||||
|
|
||||||
|
TMask& sm = sf.sheet_mask();
|
||||||
|
sm.set_handler(105, tipopag_handler);
|
||||||
|
sm.set_handler(106, tipopag_handler);
|
||||||
|
|
||||||
const TRiga_partite& partita = _fattura;
|
const TRiga_partite& partita = _fattura;
|
||||||
const TString datadoc = partita.get(PART_DATADOC);
|
const TString datadoc = partita.get(PART_DATADOC);
|
||||||
@ -95,41 +102,51 @@ void TFattura_mask::pag2sheet()
|
|||||||
|
|
||||||
bool TFattura_mask::pag_notify(TSheet_field& ps, int r, KEY k)
|
bool TFattura_mask::pag_notify(TSheet_field& ps, int r, KEY k)
|
||||||
{
|
{
|
||||||
if (k == K_INS || k == K_DEL)
|
|
||||||
return FALSE;
|
|
||||||
if (k != K_ENTER)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
TFattura_mask& fm = (TFattura_mask&)ps.mask();
|
TFattura_mask& fm = (TFattura_mask&)ps.mask();
|
||||||
TPagamento& pag = *fm._pag;
|
TPagamento& pag = *fm._pag;
|
||||||
TString_array& rws = fm._pag_rows;
|
TString_array& rws = fm._pag_rows;
|
||||||
|
|
||||||
const int rdiff = fm.get_int(FS_RDIFFER);
|
bool recalc = fm.get_bool(FS_RECALC); // Ricalcolo automatico attivo
|
||||||
|
|
||||||
|
bool doit = TRUE;
|
||||||
|
|
||||||
|
TToken_string& ns = ps.row(r); // Nuova riga
|
||||||
|
switch (k)
|
||||||
|
{
|
||||||
|
case K_SPACE:
|
||||||
|
{
|
||||||
|
// Le rate possono essere cancellate solo quando non c'e' ricalcolo automatico,
|
||||||
|
// ce ne sono almeno due e non sono protette dalla presenza di abbuoni.
|
||||||
|
const bool can_delete = !recalc && pag.n_rate() > 1 && ns.get_char(13) != 'X';
|
||||||
|
ps.sheet_mask().enable(DLG_DELREC, can_delete);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case K_ENTER:
|
||||||
|
{
|
||||||
const bool in_valuta = pag.in_valuta();
|
const bool in_valuta = pag.in_valuta();
|
||||||
const int impos = in_valuta ? 2 : 1;
|
const int impos = in_valuta ? 2 : 1;
|
||||||
|
|
||||||
bool doit = TRUE, m_imp = FALSE, m_perc = FALSE, m_pag = FALSE;
|
bool mod = FALSE, m_imp = FALSE, m_perc = FALSE, m_pag = FALSE;
|
||||||
bool m_scad = FALSE, m_tipo = FALSE, m_ulc = FALSE, mod = FALSE;
|
bool m_scad = FALSE, m_tipo = FALSE, m_ulc = FALSE, m_implit = FALSE;
|
||||||
word ahiahi = P_OK;
|
word ahiahi = P_OK;
|
||||||
|
|
||||||
const bool recalc = fm.get_bool(FS_RECALC);
|
TToken_string& ts = rws.row(r); // Vecchia riga
|
||||||
const bool mcomm = fm.get_bool(FS_MCOMM);
|
TString news = ns.get(0); // Data scadenza
|
||||||
|
TString newp = ns.get(3); // Percentuale
|
||||||
TToken_string ns = ps.row(r);
|
TString newt = ns.get(4); // Tipo pagamento
|
||||||
TToken_string ts = rws.row(r);
|
TString newu = ns.get(5); // Ulteriore classificazione
|
||||||
|
TString newi = ns.get(impos); // Importo (lire o valuta)
|
||||||
const TString news = ns.get(0); // Data scadenza
|
TString newil; // Importo in lire
|
||||||
const TString newi = ns.get(impos); // Imponibile (lire o valuta)
|
if (in_valuta)
|
||||||
const TString newp = ns.get(3); // Percentuale
|
{
|
||||||
const TString newt = ns.get(4); // Tipo pagamento
|
newil = ns.get(1);
|
||||||
const TString newu = ns.get(5); // Ulteriore classificazione
|
m_implit = real(newil) != real(ts.get(1));
|
||||||
|
}
|
||||||
// qui viene il bello, si fa per dire
|
|
||||||
if (news != ts.get(0)) // modificata data scadenza
|
if (news != ts.get(0)) // modificata data scadenza
|
||||||
mod = m_scad = TRUE;
|
mod = m_scad = TRUE;
|
||||||
if (newp != ts.get(3)) // modificata percentuale
|
if (real(newp) != real(ts.get(3))) // modificata percentuale
|
||||||
mod = m_perc = TRUE;
|
mod = m_perc = TRUE;
|
||||||
if (newi != ts.get(impos)) // modificato importo
|
if (real(newi) != real(ts.get(impos))) // modificato importo
|
||||||
{
|
{
|
||||||
// se si modifica la percentuale l'importo non viene cagato
|
// se si modifica la percentuale l'importo non viene cagato
|
||||||
if ((recalc && !m_perc) || (!recalc))
|
if ((recalc && !m_perc) || (!recalc))
|
||||||
@ -137,8 +154,15 @@ bool TFattura_mask::pag_notify(TSheet_field& ps, int r, KEY k)
|
|||||||
}
|
}
|
||||||
if (newt != ts.get(4)) // modificato tipo pagamento
|
if (newt != ts.get(4)) // modificato tipo pagamento
|
||||||
mod = m_tipo = m_ulc = TRUE;
|
mod = m_tipo = m_ulc = TRUE;
|
||||||
if (newu != ts.get(5)) // modificato tipo pagamento
|
|
||||||
|
if (newu != ts.get(5)) // modificata ulteriore classificazione
|
||||||
mod = m_ulc = TRUE;
|
mod = m_ulc = TRUE;
|
||||||
|
else if (m_tipo)
|
||||||
|
{
|
||||||
|
// forza reset di ulc se si e' modificato il tipo rata
|
||||||
|
m_ulc = TRUE;
|
||||||
|
newu = "";
|
||||||
|
}
|
||||||
|
|
||||||
// settato da recalc_rate se occorre ridefinire lo sheet
|
// settato da recalc_rate se occorre ridefinire lo sheet
|
||||||
// aggiungendo o togliendo righe
|
// aggiungendo o togliendo righe
|
||||||
@ -146,6 +170,9 @@ bool TFattura_mask::pag_notify(TSheet_field& ps, int r, KEY k)
|
|||||||
|
|
||||||
if (mod && recalc)
|
if (mod && recalc)
|
||||||
{
|
{
|
||||||
|
const bool rdiff = fm.get_bool(FS_RDIFFER);
|
||||||
|
const bool mcomm = fm.get_bool(FS_MCOMM);
|
||||||
|
|
||||||
// ricalcola sheet come sai fare tu
|
// ricalcola sheet come sai fare tu
|
||||||
ahiahi = pag.recalc_rate(r, m_perc,
|
ahiahi = pag.recalc_rate(r, m_perc,
|
||||||
((m_perc || m_imp) ?
|
((m_perc || m_imp) ?
|
||||||
@ -166,21 +193,40 @@ bool TFattura_mask::pag_notify(TSheet_field& ps, int r, KEY k)
|
|||||||
TToken_string& trw = pag.rata(r);
|
TToken_string& trw = pag.rata(r);
|
||||||
TToken_string srw = trw;
|
TToken_string srw = trw;
|
||||||
if (m_tipo) trw.add(newt,2);
|
if (m_tipo) trw.add(newt,2);
|
||||||
if (m_scad) trw.add(news,3);
|
if (m_scad)
|
||||||
|
{
|
||||||
|
trw.add(news,3);
|
||||||
|
if (r > 0)
|
||||||
|
{
|
||||||
|
TDate d(news);
|
||||||
|
int scd = (int)(d - pag.data_rata(r-1));
|
||||||
|
if (pag.mese_commerciale() && (scd % 30) != 0)
|
||||||
|
scd = 30 * ((scd/30)+1);
|
||||||
|
trw.add(scd, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (m_imp)
|
if (m_imp)
|
||||||
{
|
{
|
||||||
trw.add(newi,4);
|
trw.add(newi,4);
|
||||||
const real p = pag.recalc_percrata(r);
|
const real p = pag.recalc_percrata(r);
|
||||||
ps.row(r).add(p.string(), 3);
|
ps.row(r).add(p.string(), 3);
|
||||||
rws.row(r) = ps.row(r);
|
|
||||||
ps.force_update(r);
|
ps.force_update(r);
|
||||||
}
|
}
|
||||||
|
if (mod)
|
||||||
|
rws.row(r) = ps.row(r);
|
||||||
}
|
}
|
||||||
|
if (in_valuta && m_implit)
|
||||||
|
{
|
||||||
|
pag.set_implit(r, real(newil));
|
||||||
|
rws.row(r) = ps.row(r);
|
||||||
|
}
|
||||||
|
|
||||||
if (ahiahi) // any error? Rimetti le righe com'erano prima
|
if (ahiahi) // any error? Rimetti le righe com'erano prima
|
||||||
{
|
{
|
||||||
if (recalc)
|
if (recalc)
|
||||||
{
|
{
|
||||||
beep();
|
TString err(80); pag.strerr(ahiahi,err);
|
||||||
|
warning_box(err);
|
||||||
ps.row(r) = rws.row(r);
|
ps.row(r) = rws.row(r);
|
||||||
ps.force_update(r);
|
ps.force_update(r);
|
||||||
}
|
}
|
||||||
@ -190,6 +236,38 @@ bool TFattura_mask::pag_notify(TSheet_field& ps, int r, KEY k)
|
|||||||
// ridefinisci lo sheet sulla base delle nuove rate
|
// ridefinisci lo sheet sulla base delle nuove rate
|
||||||
fm.pag2sheet();
|
fm.pag2sheet();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case K_DEL:
|
||||||
|
doit = !recalc && pag.n_rate() > 1 && ps.row(r).get_char(13) != 'X';
|
||||||
|
if (doit)
|
||||||
|
{
|
||||||
|
pag.remove_rata(r);
|
||||||
|
fm.set(FS_NRATE, pag.n_rate());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case K_INS:
|
||||||
|
// permette aggiunta e cancellazione solo se non c'e' ricalcolo automatico
|
||||||
|
doit = !recalc;
|
||||||
|
break;
|
||||||
|
case K_CTRL+K_INS: // Post inserimento
|
||||||
|
{
|
||||||
|
const int prev = r - 1;
|
||||||
|
const int gio_scad = pag.scad_rata(prev);
|
||||||
|
TDate data_scad(pag.data_rata(prev));
|
||||||
|
|
||||||
|
pag.add_rata(ZERO, gio_scad, pag.tipo_rata(prev), pag.ulc_rata(prev));
|
||||||
|
pag.next_scad(data_scad, gio_scad, pag.mese_commerciale(), r);
|
||||||
|
pag.set_datarata(r, data_scad);
|
||||||
|
pag.adjust_fixed_scad();
|
||||||
|
fm.pag2sheet();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return doit;
|
return doit;
|
||||||
}
|
}
|
||||||
@ -258,6 +336,40 @@ bool TFattura_mask::totval_handler(TMask_field& f, KEY key)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TFattura_mask::valuta_handler(TMask_field& f, KEY key)
|
||||||
|
{
|
||||||
|
if (key == K_TAB && f.to_check(key, TRUE))
|
||||||
|
{
|
||||||
|
TMask& m = f.mask();
|
||||||
|
const TString val = f.get();
|
||||||
|
const bool full = val.not_empty();
|
||||||
|
|
||||||
|
if (full)
|
||||||
|
{
|
||||||
|
TMask_field& dc = m.field(FS_DATACAMBIO);
|
||||||
|
/*
|
||||||
|
if (dc.get().empty()) // Inizializza data cambio se assente
|
||||||
|
m.set(FS_DATACAMBIO, m.get(F_DATADOC), TRUE);
|
||||||
|
else
|
||||||
|
*/
|
||||||
|
if (f.focusdirty())
|
||||||
|
{
|
||||||
|
dc.set_dirty();
|
||||||
|
dc.check(RUNNING_CHECK); // Forza ricerca cambio
|
||||||
|
dc.on_hit(); // Forza messaggi (eventuale copia a pag. 3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m.set(FS_CAMBIO, "", TRUE);
|
||||||
|
m.set(FS_TOTVAL, "", TRUE);
|
||||||
|
}
|
||||||
|
m.enable(FS_CAMBIO, full);
|
||||||
|
m.enable(FS_TOTVAL, full);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
bool TFattura_mask::cambio_handler(TMask_field& f, KEY key)
|
bool TFattura_mask::cambio_handler(TMask_field& f, KEY key)
|
||||||
{
|
{
|
||||||
if (key == K_TAB && f.focusdirty())
|
if (key == K_TAB && f.focusdirty())
|
||||||
@ -265,7 +377,7 @@ bool TFattura_mask::cambio_handler(TMask_field& f, KEY key)
|
|||||||
TFattura_mask& fm = (TFattura_mask&)f.mask();
|
TFattura_mask& fm = (TFattura_mask&)f.mask();
|
||||||
TPagamento& pag = fm.pagamento();
|
TPagamento& pag = fm.pagamento();
|
||||||
const real cambio(f.get());
|
const real cambio(f.get());
|
||||||
pag.set_cambio(cambio);
|
pag.set_cambio(cambio, fm.get_bool(FS_RECALC));
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -373,7 +485,7 @@ void TFattura_mask::read_scadenze()
|
|||||||
}
|
}
|
||||||
|
|
||||||
pag.set_total(imponibile, imposte, spese);
|
pag.set_total(imponibile, imposte, spese);
|
||||||
pag.set_cambio(cambio);
|
pag.set_cambio(cambio, FALSE);
|
||||||
|
|
||||||
if (partita.rate() > 0)
|
if (partita.rate() > 0)
|
||||||
{
|
{
|
||||||
@ -428,6 +540,29 @@ void TFattura_mask::read_scadenze()
|
|||||||
pag2sheet();
|
pag2sheet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TFattura_mask::tipopag_handler(TMask_field& f, KEY key)
|
||||||
|
{
|
||||||
|
if ((key == K_TAB || key == K_ENTER) && f.dirty())
|
||||||
|
{
|
||||||
|
TFattura_mask& m = (TFattura_mask&)f.mask();
|
||||||
|
int t = m.get_int(105);
|
||||||
|
if (t <= 0)
|
||||||
|
{
|
||||||
|
t = 1;
|
||||||
|
f.set("1");
|
||||||
|
}
|
||||||
|
const char u = m.get(106)[0];
|
||||||
|
const TPagamento& pag = m.pagamento();
|
||||||
|
bool ok;
|
||||||
|
const char* s = pag.desc_tipo(t, u, &ok);
|
||||||
|
if (!ok) m.reset(106);
|
||||||
|
m.set(107, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TFattura_mask::write_scadenze() const
|
void TFattura_mask::write_scadenze() const
|
||||||
{
|
{
|
||||||
CHECK(_pag, "Null pagament");
|
CHECK(_pag, "Null pagament");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user