Nuova gestione pagamenti in valuta
git-svn-id: svn://10.65.10.50/trunk@2548 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
c2179c9034
commit
7d041654d5
@ -1315,8 +1315,9 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
|
|||||||
if (a.is_fattura() && m.insert_mode())
|
if (a.is_fattura() && m.insert_mode())
|
||||||
{
|
{
|
||||||
TPagamento& pag = a.pagamento();
|
TPagamento& pag = a.pagamento();
|
||||||
real imposta, imponibile;
|
real imposta, imponibile;
|
||||||
if (pag.in_valuta())
|
bool inv = pag.in_valuta();
|
||||||
|
if (inv)
|
||||||
{
|
{
|
||||||
imposta = m.get_real(F_IMPOSTE) / pag.cambio(); imposta.round(3);
|
imposta = m.get_real(F_IMPOSTE) / pag.cambio(); imposta.round(3);
|
||||||
imponibile = m.get_real(SK_TOTDOCVAL) - imposta;
|
imponibile = m.get_real(SK_TOTDOCVAL) - imposta;
|
||||||
@ -1326,9 +1327,9 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
|
|||||||
imposta = m.get_real(F_IMPOSTE);
|
imposta = m.get_real(F_IMPOSTE);
|
||||||
imponibile = m.get_real(F_TOTALE) - imposta;
|
imponibile = m.get_real(F_TOTALE) - imposta;
|
||||||
}
|
}
|
||||||
imposta.round(pag.round()); imponibile.round(pag.round());
|
imposta.round(pag.round(inv)); imponibile.round(pag.round(inv));
|
||||||
real pimposta(pag.imposta()); real pimponibile(pag.imponibile());
|
real pimposta(pag.imposta(inv)); real pimponibile(pag.imponibile(inv));
|
||||||
pimposta.round(pag.round()); pimponibile.round(pag.round());
|
pimposta.round(pag.round(inv)); pimponibile.round(pag.round(inv));
|
||||||
|
|
||||||
if (pimposta != imposta || pimponibile != imponibile)
|
if (pimposta != imposta || pimponibile != imponibile)
|
||||||
a.set_scadenze(m); // Ricalcola rate
|
a.set_scadenze(m); // Ricalcola rate
|
||||||
|
120
cg/cg2104.cpp
120
cg/cg2104.cpp
@ -38,11 +38,11 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
|
|||||||
TToken_string ts(128), ns(128);
|
TToken_string ts(128), ns(128);
|
||||||
TString16 banca;
|
TString16 banca;
|
||||||
|
|
||||||
bool doit = TRUE, m_imp = FALSE, m_perc = FALSE, m_pag = FALSE;
|
bool doit = TRUE, m_impl = FALSE, m_impv = FALSE, m_perc = FALSE, m_pag = FALSE;
|
||||||
bool m_scad = FALSE, m_tipo = FALSE, m_ulc = FALSE, mod = FALSE, m_implit = FALSE;
|
bool m_scad = FALSE, m_tipo = FALSE, m_ulc = FALSE, mod = FALSE, m_implit = FALSE;
|
||||||
word ahiahi = P_OK;
|
word ahiahi = P_OK;
|
||||||
|
|
||||||
TString news(10), newi(15), newp(15), newil(15), newt(1), newu(1);
|
TString news(10), newl(15), newv(15), newp(15), newt(1), newu(1);
|
||||||
|
|
||||||
bool recalc = msk->get_bool(FS_RECALC);
|
bool recalc = msk->get_bool(FS_RECALC);
|
||||||
bool mcomm = msk->get_bool(FS_MCOMM);
|
bool mcomm = msk->get_bool(FS_MCOMM);
|
||||||
@ -60,26 +60,29 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
|
|||||||
ts = rws.row(r);
|
ts = rws.row(r);
|
||||||
|
|
||||||
news = ns.get(0); // Data scadenza
|
news = ns.get(0); // Data scadenza
|
||||||
newi = ns.get(impos); // Imponibile (lire o valuta)
|
newl = ns.get(1); // Imponibile (lire)
|
||||||
|
newv = ns.get(2); // Imponibile (valuta)
|
||||||
newp = ns.get(3); // Percentuale
|
newp = ns.get(3); // Percentuale
|
||||||
newt = ns.get(4); // Tipo pagamento
|
newt = ns.get(4); // Tipo pagamento
|
||||||
newu = ns.get(5); // Ulteriore classificazione
|
newu = ns.get(5); // Ulteriore classificazione
|
||||||
if (in_valuta)
|
|
||||||
{
|
|
||||||
newil = ns.get(1);
|
|
||||||
m_implit = real(newil) != real(ts.get(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
// qui viene il bello, si fa per dire
|
// 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 (real(newp) != real(ts.get(3))) // modificata percentuale
|
if (real(newp) != real(ts.get(3))) // modificata percentuale
|
||||||
mod = m_perc = TRUE;
|
mod = m_perc = TRUE;
|
||||||
if (real(newi) != real(ts.get(impos))) // modificato importo
|
if (real(newl) != real(ts.get(1))) // modificato importo lire
|
||||||
{
|
{
|
||||||
// se si modifica la percentuale l'importo non viene cagato
|
// se si modifica la percentuale nessun importo viene cagato
|
||||||
if ((recalc && !m_perc) || (!recalc))
|
if ((recalc && !m_perc) || (!recalc))
|
||||||
mod = m_imp = TRUE;
|
mod = m_impl = TRUE;
|
||||||
|
}
|
||||||
|
if (in_valuta && real(newv) != real(ts.get(2)))
|
||||||
|
{
|
||||||
|
// se si modifica la percentuale nessun importo viene cagato
|
||||||
|
if ((recalc && !m_perc) || (!recalc))
|
||||||
|
mod = m_impv = TRUE;
|
||||||
}
|
}
|
||||||
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;
|
||||||
@ -133,13 +136,14 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
|
|||||||
{
|
{
|
||||||
// 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_impv) ?
|
||||||
(m_perc ? (const char*)newp : (const char*)newi) :
|
(m_perc ? (const char*)newp : (const char*)newv) : NULL),
|
||||||
NULL),
|
(m_impl ? (const char*)newl : NULL),
|
||||||
(m_scad ? (const char*)news : NULL),
|
(m_scad ? (const char*)news : NULL),
|
||||||
(m_tipo ? (const char*)newt : NULL),
|
(m_tipo ? (const char*)newt : NULL),
|
||||||
(m_ulc ? (const char*)newu : NULL),
|
(m_ulc ? (const char*)newu : NULL),
|
||||||
rdiff, mcomm, need_recalc);
|
rdiff, mcomm, need_recalc);
|
||||||
|
|
||||||
// see if rdiff changed
|
// see if rdiff changed
|
||||||
msk->set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
|
msk->set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
|
||||||
msk->set(FS_NRATE, pag.n_rate());
|
msk->set(FS_NRATE, pag.n_rate());
|
||||||
@ -165,10 +169,19 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
|
|||||||
trw.add(scd, 0);
|
trw.add(scd, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (m_imp)
|
if (m_impl)
|
||||||
{
|
{
|
||||||
trw.add(newi,4);
|
trw.add(newl,7);
|
||||||
const real p = pag.recalc_percrata(r);
|
// *** TBC la percentuale viene ricalcolata solo se si modifica in valuta
|
||||||
|
// const real p = pag.recalc_percrata(r, FALSE);
|
||||||
|
// ps.row(r).add(p.string(), 3);
|
||||||
|
// **********************************************************************
|
||||||
|
ps.force_update(r);
|
||||||
|
}
|
||||||
|
if (m_impv)
|
||||||
|
{
|
||||||
|
trw.add(newv,4);
|
||||||
|
const real p = pag.recalc_percrata(r, TRUE);
|
||||||
ps.row(r).add(p.string(), 3);
|
ps.row(r).add(p.string(), 3);
|
||||||
ps.force_update(r);
|
ps.force_update(r);
|
||||||
}
|
}
|
||||||
@ -178,11 +191,6 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
|
|||||||
if (mod)
|
if (mod)
|
||||||
rws.row(r) = ps.row(r);
|
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
|
||||||
{
|
{
|
||||||
@ -218,7 +226,7 @@ bool TPrimanota_application::pag_sheet_handler(TMask_field& f, KEY key)
|
|||||||
pag.set_datadoc(dt);
|
pag.set_datadoc(dt);
|
||||||
word err = pag.validate();
|
word err = pag.validate();
|
||||||
if (m.edit_mode())
|
if (m.edit_mode())
|
||||||
err &= ~(P_RSUM | P_TOTNC); // Ignora totale importi e rate
|
err &= ~(P_RSUM | P_TOTNCLIT | P_TOTNCVAL ); // Ignora totale importi e rate
|
||||||
if (err != P_OK)
|
if (err != P_OK)
|
||||||
{
|
{
|
||||||
TString s(256);
|
TString s(256);
|
||||||
@ -233,7 +241,7 @@ bool TPrimanota_application::pag_sheet_handler(TMask_field& f, KEY key)
|
|||||||
{
|
{
|
||||||
const real tot = m.get(in_valuta ? SK_TOTDOCVAL : F_TOTALE);
|
const real tot = m.get(in_valuta ? SK_TOTDOCVAL : F_TOTALE);
|
||||||
for (int r = pag.n_rate()-1; r >= 0; r--)
|
for (int r = pag.n_rate()-1; r >= 0; r--)
|
||||||
imp += pag.tpay_rata(r);
|
imp += pag.tval_rata(r);
|
||||||
if (imp != tot)
|
if (imp != tot)
|
||||||
{
|
{
|
||||||
const char* const pic = in_valuta ? ".3" : ".";
|
const char* const pic = in_valuta ? ".3" : ".";
|
||||||
@ -524,17 +532,14 @@ bool TPrimanota_application::recalc_handler(TMask_field& f, KEY key)
|
|||||||
{
|
{
|
||||||
// SE CAMBIANO I SIGNIFICATI DEL TIPO PRIMA RATA BISOGNA RIFARE TUTTO
|
// SE CAMBIANO I SIGNIFICATI DEL TIPO PRIMA RATA BISOGNA RIFARE TUTTO
|
||||||
pag.set_tpr4(FALSE);
|
pag.set_tpr4(FALSE);
|
||||||
bool yak = pag.tpay_rata(0) != pag.importo_da_non_dividere();
|
bool yak = pag.tlit_rata(0) != pag.importo_da_non_dividere(FALSE);
|
||||||
|
if (pag.in_valuta()) yak |= (pag.tval_rata(0) != pag.importo_da_non_dividere(TRUE));
|
||||||
if (yak)
|
if (yak)
|
||||||
{
|
{
|
||||||
if (yesno_box("L'importo della prima rata e' stato modificato. "
|
if (yesno_box("L'importo della prima rata e' stato modificato. "
|
||||||
"Con il ricalcolo automatico esso non sara' piu'"
|
"Con il ricalcolo automatico esso non sara' piu'"
|
||||||
" modificabile. Si desidera "
|
" modificabile. Si desidera "
|
||||||
#ifdef DBG
|
|
||||||
"un sapiente pompino?"))
|
|
||||||
#else
|
|
||||||
"riportare le rate alle condizioni iniziali?"))
|
"riportare le rate alle condizioni iniziali?"))
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
pag.set_tipo_prima_rata(pag.tipo_prima_rata() + 3);
|
pag.set_tipo_prima_rata(pag.tipo_prima_rata() + 3);
|
||||||
m.set(FS_TIPOPR, pag.desc_tpr());
|
m.set(FS_TIPOPR, pag.desc_tpr());
|
||||||
@ -672,22 +677,22 @@ void TPrimanota_application::set_totale_pagamento()
|
|||||||
|
|
||||||
const TMask& m = curr_mask();
|
const TMask& m = curr_mask();
|
||||||
TPagamento& pag = pagamento();
|
TPagamento& pag = pagamento();
|
||||||
pag.set_cambio(m.get_real(SK_CAMBIO), FALSE);
|
real cambio = m.get_real(SK_CAMBIO);
|
||||||
|
|
||||||
if (pag.in_valuta())
|
if (!cambio.is_zero())
|
||||||
{
|
{
|
||||||
imposta = m.get_real(F_IMPOSTE) / pag.cambio(); imposta.round(3);
|
imposta = m.get_real(F_IMPOSTE);
|
||||||
imponibile = m.get_real(SK_TOTDOCVAL) - imposta;
|
real imposval = imposta/cambio; imposval.round(3);
|
||||||
const real totlit = m.get_real(F_TOTALE);
|
real imponval = m.get_real(SK_TOTDOCVAL) - imposval;
|
||||||
pag.set_totlit(totlit);
|
imponibile = m.get_real(F_TOTALE) - imposta;
|
||||||
|
pag.set_total_valuta(imponval, imposval, spese, cambio, imponibile, imposta, spese);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
imposta = m.get_real(F_IMPOSTE);
|
imposta = m.get_real(F_IMPOSTE);
|
||||||
imponibile = m.get_real(F_TOTALE) - imposta;
|
imponibile = m.get_real(F_TOTALE) - imposta;
|
||||||
|
pag.set_total(imponibile, imposta, spese);
|
||||||
}
|
}
|
||||||
|
|
||||||
pag.set_total(imponibile, imposta, spese);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::set_scadenze(TMask& m)
|
void TPrimanota_application::set_scadenze(TMask& m)
|
||||||
@ -777,7 +782,7 @@ bool TPrimanota_application::read_scadenze(TMask& m)
|
|||||||
pag.set_rata(i-1, impval, importo, scad, tipop, ulc, prot);
|
pag.set_rata(i-1, impval, importo, scad, tipop, ulc, prot);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
pag.set_rata(i-1, importo, ZERO, scad, tipop, ulc, prot);
|
pag.set_rata(i-1, ZERO, importo, scad, tipop, ulc, prot);
|
||||||
|
|
||||||
TToken_string& str = ps.row(i-1);
|
TToken_string& str = ps.row(i-1);
|
||||||
str.add(scadenza.get(SCAD_CODABIPR), 7);
|
str.add(scadenza.get(SCAD_CODABIPR), 7);
|
||||||
@ -878,12 +883,8 @@ void TPrimanota_application::write_scadenze(const TMask& m)
|
|||||||
for (int i = pag.n_rate()-1; i >= 0; i--)
|
for (int i = pag.n_rate()-1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (in_valuta)
|
if (in_valuta)
|
||||||
{
|
imponibile_val += pag.tval_rata(i);
|
||||||
imponibile_val += pag.tpay_rata(i);
|
imponibile += pag.tlit_rata(i);
|
||||||
imponibile += pag.tlit_rata(i);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
imponibile += pag.tpay_rata(i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
partita.put(PART_IMPORTO, imponibile);
|
partita.put(PART_IMPORTO, imponibile);
|
||||||
@ -899,21 +900,20 @@ void TPrimanota_application::write_scadenze(const TMask& m)
|
|||||||
TToken_string& row = ps.row(i);
|
TToken_string& row = ps.row(i);
|
||||||
|
|
||||||
TRiga_scadenze& scadenza = partita.new_row();
|
TRiga_scadenze& scadenza = partita.new_row();
|
||||||
scadenza.put(SCAD_CODPAG, codpag); // Codice pagamento
|
scadenza.put(SCAD_CODPAG, codpag);
|
||||||
scadenza.put(SCAD_CODAG, agente); // Codice agente
|
scadenza.put(SCAD_TIPOPAG, pag.tipo_rata(i));
|
||||||
|
scadenza.put(SCAD_ULTCLASS, pag.ulc_rata(i));
|
||||||
scadenza.put(SCAD_DATASCAD, row.get(0)); // 0 = Data scadenza
|
scadenza.put(SCAD_IMPORTO, pag.tlit_rata(i));
|
||||||
scadenza.put(SCAD_IMPORTO, row.get()); // 1 = Importo
|
scadenza.put(SCAD_IMPORTO, row.get(1)); // 1 = Importo
|
||||||
scadenza.put(SCAD_IMPORTOVAL, row.get()); // 2 = Importo in valuta
|
scadenza.put(SCAD_IMPORTOVAL, row.get(2)); // 2 = Importo in valuta
|
||||||
row.get(); // 4 = Percentuale
|
scadenza.put(SCAD_DATASCAD, pag.data_rata(i));
|
||||||
scadenza.put(SCAD_TIPOPAG, row.get()); // 5 = Tipo pagamento
|
scadenza.put(SCAD_CODABIPR, row.get(7));
|
||||||
scadenza.put(SCAD_ULTCLASS, row.get()); // 6 = Ulteriore classificazione
|
scadenza.put(SCAD_CODCABPR, row.get(8));
|
||||||
scadenza.put(SCAD_CODABIPR, row.get()); // 7 = Ns ABI
|
scadenza.put(SCAD_CODABI, row.get(9));
|
||||||
scadenza.put(SCAD_CODCABPR, row.get()); // 8 = Ns CAB
|
scadenza.put(SCAD_CODCAB, row.get(10));
|
||||||
scadenza.put(SCAD_CODABI, row.get()); // 9 = Vs ABI
|
scadenza.put(SCAD_DESCR, row.get(11)); //11 = Note
|
||||||
scadenza.put(SCAD_CODCAB, row.get()); //10 = Vs CAB
|
scadenza.put(SCAD_BLOCCATA, row.get(12)); //12 = Non pagabile
|
||||||
scadenza.put(SCAD_DESCR, row.get()); //11 = Note
|
scadenza.put(SCAD_CODAG, agente);
|
||||||
scadenza.put(SCAD_BLOCCATA, row.get()); //12 = Non pagabile
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
743
cg/pagament.cpp
743
cg/pagament.cpp
File diff suppressed because it is too large
Load Diff
130
cg/pagament.h
130
cg/pagament.h
@ -21,22 +21,28 @@ const word P_SCAD = 0x0004; // scadenze non consecutive
|
|||||||
const word P_INIZIO = 0x0008; // data 1a rata < data inizio pagamenti
|
const word P_INIZIO = 0x0008; // data 1a rata < data inizio pagamenti
|
||||||
const word P_NEG = 0x0010; // importo specificato < minimo possibile
|
const word P_NEG = 0x0010; // importo specificato < minimo possibile
|
||||||
const word P_TROP = 0x0020; // importo specificato > massimo possibile
|
const word P_TROP = 0x0020; // importo specificato > massimo possibile
|
||||||
const word P_TOTNC = 0x0040; // totale importi != totale pagamento
|
const word P_TOTNCLIT= 0x0040; // totale importi in lire != 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_ZEROLIT = 0x0100; // importo di una rata in lire uguale a zero
|
||||||
const word P_SCWIDE = 0x0200; // date di scadenza separate da piu' di 10000 giorni
|
const word P_SCWIDE = 0x0200; // date di scadenza separate da piu' di 10000 giorni
|
||||||
const word P_TOOMANY = 0x0400; // troppe rate (piu' di 999)
|
const word P_TOOMANY = 0x0400; // troppe rate (piu' di 999)
|
||||||
|
const word P_TOTNCVAL= 0x0800; // totale importi in valuta != totale pagamento
|
||||||
|
const word P_ZEROVAL = 0x1000; // importo di una rata in valuta uguale a zero
|
||||||
|
|
||||||
class TPagamento : public TObject
|
class TPagamento : public TObject
|
||||||
{
|
{
|
||||||
TString _code; // codice
|
TString _code; // codice
|
||||||
TString _name; // descrizione
|
TString _name; // descrizione
|
||||||
real _imponibile; // imponibile da affettare
|
real _imponval; // imponibile da affettare
|
||||||
real _imposta; // imposta da affettare
|
real _imposval; // imposta da affettare
|
||||||
real _spese; // spese da affettare
|
real _speseval; // spese da affettare
|
||||||
real _cambio; // cambio valuta
|
real _imponlit; // imponibile da affettare in lire (se imp. in valuta)
|
||||||
real _totlit; // imponibile in lire
|
real _imposlit; // imposta da affettare in lire
|
||||||
TDistrib _slicer; // affettatrice
|
real _speselit; // spese da affettare in lire
|
||||||
|
real _cambio; // cambio valuta (TBZ?)
|
||||||
|
|
||||||
|
TDistrib _slicerlit; // affettatrice lire
|
||||||
|
TDistrib _slicerval; // affettatrice valuta
|
||||||
bool _new; // non letto da database
|
bool _new; // non letto da database
|
||||||
TString_array _rate; // rate medesime
|
TString_array _rate; // rate medesime
|
||||||
char _inscad; // inizio scadenze: S1
|
char _inscad; // inizio scadenze: S1
|
||||||
@ -47,11 +53,14 @@ class TPagamento : public TObject
|
|||||||
TDate _inizio; // data inizio pagamenti
|
TDate _inizio; // data inizio pagamenti
|
||||||
TDate _datadoc; // data documento
|
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/distribuire in prima rata
|
||||||
real _secndr; // importo da distribuire
|
real _secndr; // importo da distribuire/pagare
|
||||||
|
real _firstl; // importo da pagare/distribuire in lire (se valuta)
|
||||||
|
real _secndl; // importo da distribuire/pagare in lire
|
||||||
|
|
||||||
int _fixd[3]; // giorni scadenza fissa, se desiderati
|
int _fixd[3]; // giorni scadenza fissa, se desiderati
|
||||||
int _round; // decimali arrotondamento importo
|
int _roundlit; // decimali arrotondamento importo in lire (sempre 0 per ora)
|
||||||
|
int _roundval; // decimali arrotondamento importo in valuta
|
||||||
int _int_rate;
|
int _int_rate;
|
||||||
|
|
||||||
int _rata_ifield(int n, int f) const;
|
int _rata_ifield(int n, int f) const;
|
||||||
@ -64,57 +73,66 @@ class TPagamento : public TObject
|
|||||||
TString16 _def_ulc; // ulteriore classificazione default
|
TString16 _def_ulc; // ulteriore classificazione default
|
||||||
|
|
||||||
bool _was_tpr4; // chiederne ragione ai responsabili morali (bonazzi, gabriella)
|
bool _was_tpr4; // chiederne ragione ai responsabili morali (bonazzi, gabriella)
|
||||||
|
|
||||||
|
bool _in_valuta; // in valuta o non
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
protected:
|
|
||||||
// gestione casino se si modificano importi o percentuali rate
|
// gestione casino se si modificano importi o percentuali rate
|
||||||
word change_value(int rata, real new_val, int rdiff, bool is_perc, bool mcomm);
|
word change_value(int rata, real new_val, int rdiff, bool is_perc, bool mcomm, bool v);
|
||||||
word change_value_differenziate(int rata, real value, bool is_perc);
|
word change_value_differenziate(int rata, real value, bool is_perc, bool v);
|
||||||
word change_value_uguali(int rata, real value, bool is_perc);
|
word change_value_uguali(int rata, real value, bool is_perc, bool v);
|
||||||
word change_value_uguali_prossima(int rata, real value, bool is_perc);
|
word change_value_uguali_prossima(int rata, real value, bool is_perc, bool v);
|
||||||
word change_value_uguali_possible(int rata, real value, bool is_perc);
|
word change_value_uguali_possible(int rata, real value, bool is_perc, bool v);
|
||||||
|
|
||||||
// aggiusta parametri diversi da importo se si sono aggiunte rate
|
// aggiusta parametri diversi da importo se si sono aggiunte rate
|
||||||
void adjust_parameters(bool mcomm);
|
void adjust_parameters(bool mcomm);
|
||||||
// riaggiusta le percentuali o gli importi rispetto al dato modificato
|
// riaggiusta le percentuali o gli importi rispetto al dato modificato
|
||||||
void adjust_perc_imp(bool is_perc, int rdiff);
|
void adjust_perc_imp(bool is_perc, int rdiff, bool v);
|
||||||
// riaggiusta le percentuali rispetto al dato modificato
|
// riaggiusta le percentuali rispetto al dato modificato
|
||||||
void adjust_perc(int rdiff);
|
void adjust_perc(int rdiff, bool v);
|
||||||
// riaggiusta l'importo in lire per consistenza con il totale documento in lire
|
|
||||||
void adjust_importo_lire();
|
|
||||||
// controlla il segno di un valore in base a _tpr e row
|
// controlla il segno di un valore in base a _tpr e row
|
||||||
bool sign_ok(const real& val, int row) const;
|
bool sign_ok(const real& val, int row) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// pregasi notare la straordinaria dovizia di const
|
// pregasi notare la straordinaria dovizia di const
|
||||||
const int n_rate() const { return _rate.items(); }
|
const int n_rate() const { return _rate.items(); }
|
||||||
bool is_new() const { return _new; }
|
bool is_new() const { return _new; }
|
||||||
bool dirty() const { return _dirty; }
|
bool dirty() const { return _dirty; }
|
||||||
|
|
||||||
const real& imponibile() const { return _imponibile; }
|
const real& imponibile(bool v = FALSE) { return v ? _imponval : _imponlit; }
|
||||||
const real& imposta() const { return _imposta; }
|
const real& imposta(bool v = FALSE) { return v ? _imposval : _imposlit; }
|
||||||
const real& spese() const { return _spese; }
|
const real& spese(bool v = FALSE) { return v ? _speseval : _speselit; }
|
||||||
|
|
||||||
|
const real& imponlit() const { return _imponlit; }
|
||||||
|
const real& imposlit() const { return _imposlit; }
|
||||||
|
const real& speselit() const { return _speselit; }
|
||||||
|
const real& imponval() const { return _imponval; }
|
||||||
|
const real& imposval() const { return _imposval; }
|
||||||
|
const real& speseval() const { return _speseval; }
|
||||||
|
|
||||||
const real& importo_da_dividere() const;
|
const real& importo_da_dividere(bool v = FALSE) const;
|
||||||
const real& importo_da_non_dividere() const;
|
const real& importo_da_non_dividere(bool v = FALSE) const;
|
||||||
|
|
||||||
const int round() const { return _round; }
|
real tval_rata(int n) const { return _rata_rfield(n,4);}
|
||||||
|
real tlit_rata(int n) const { return _rata_rfield(n,7);}
|
||||||
|
|
||||||
int scad_rata(int n) const { return _rata_ifield(n,0);}
|
int scad_rata(int n) const { return _rata_ifield(n,0);}
|
||||||
real perc_rata(int n) const { return _rata_rfield(n,1);}
|
real perc_rata(int n) const { return _rata_rfield(n,1);}
|
||||||
int tipo_rata(int n) const { return _rata_ifield(n,2);}
|
int tipo_rata(int n) const { return _rata_ifield(n,2);}
|
||||||
TDate data_rata(int n) const { return _rata_dfield(n,3);}
|
TDate data_rata(int n) const { return _rata_dfield(n,3);}
|
||||||
real tpay_rata(int n) const { return _rata_rfield(n,4);}
|
real importo_rata(int n, bool v = FALSE) const
|
||||||
|
{ return v ? tval_rata(n) : tlit_rata(n); }
|
||||||
const char* ulc_rata(int n) const { return _rata_sfield(n,5);}
|
const char* ulc_rata(int n) const { return _rata_sfield(n,5);}
|
||||||
bool ratapagata(int n) const { return _rata_sfield(n,6)[0] > ' ';}
|
bool ratapagata(int n) const { return _rata_sfield(n,6)[0] > ' ';}
|
||||||
real tlit_rata(int n) const { return _rata_rfield(n,7);}
|
|
||||||
|
|
||||||
char inizio_scadenza() const { return _inscad; }
|
char inizio_scadenza() const { return _inscad; }
|
||||||
bool mese_commerciale() const { return _mcomm; }
|
bool mese_commerciale() const { return _mcomm; }
|
||||||
bool rate_differenziate() const { return _rdiff; }
|
bool rate_differenziate() const { return _rdiff; }
|
||||||
int tipo_prima_rata() const { return _tpr; }
|
int tipo_prima_rata() const { return _tpr; }
|
||||||
int intervallo_rate() const { return _int_rate; }
|
int intervallo_rate() const { return _int_rate; }
|
||||||
int decs() const { return _round; }
|
int round(bool v) const { return v ? _roundval : _roundlit; }
|
||||||
|
|
||||||
const TString& name() const { return _name; }
|
const TString& name() const { return _name; }
|
||||||
const TString& code() const { return _code; }
|
const TString& code() const { return _code; }
|
||||||
@ -133,20 +151,23 @@ public:
|
|||||||
void set_tipo_prima_rata(int v, int sscad = -1);
|
void set_tipo_prima_rata(int v, int sscad = -1);
|
||||||
void set_percrata(int n, real r);
|
void set_percrata(int n, real r);
|
||||||
void set_datarata(int n, const TDate & d);
|
void set_datarata(int n, const TDate & d);
|
||||||
real recalc_percrata(int i);
|
real recalc_percrata(int i, bool valuta);
|
||||||
|
// gestisce da se' casi con e senza valuta
|
||||||
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_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_roundval(int n) { _roundval = n; }
|
||||||
void set_cambio(const real& ex, bool recalc_lit);
|
void set_cambio(const real& ex, bool recalc_lit);
|
||||||
bool in_valuta() const { return _cambio != 1.0; }
|
|
||||||
const real& cambio() const { return _cambio; }
|
bool in_valuta() const;
|
||||||
|
const real& cambio() const { return _cambio; }
|
||||||
|
|
||||||
// check consistency: returns word with errors flagged, 0 if ok
|
// check consistency: returns word with errors flagged, 0 if ok
|
||||||
word validate() const;
|
word validate() const;
|
||||||
|
// writes description of errors err in s
|
||||||
void strerr(word err, TString& s);
|
void strerr(word err, TString& s);
|
||||||
|
|
||||||
// read/write from database
|
// read/write from database
|
||||||
@ -154,20 +175,21 @@ public:
|
|||||||
bool read(TTable* cpg = NULL, TTable* rpg = NULL);
|
bool read(TTable* cpg = NULL, TTable* rpg = NULL);
|
||||||
|
|
||||||
// chiamabili solo da relapp, agiscono solo su %RPG
|
// chiamabili solo da relapp, agiscono solo su %RPG
|
||||||
int write(TTable& rpg);
|
int write (TTable& rpg);
|
||||||
int rewrite(TTable& rpg);
|
int rewrite(TTable& rpg);
|
||||||
int remove(TTable& rpg);
|
int remove (TTable& rpg);
|
||||||
|
|
||||||
// modifica rate manualmente o non
|
// modifica rate manualmente o non
|
||||||
TToken_string& rata(int r) { return (TToken_string&)_rate[r]; }
|
TToken_string& rata(int r) { return (TToken_string&)_rate[r]; }
|
||||||
TToken_string& add_rata (real perc, int day, int type, const char* ulc = "");
|
TToken_string& add_rata (real perc, int day, int type, const char* ulc = "");
|
||||||
TToken_string& add_rata ();
|
TToken_string& add_rata ();
|
||||||
TToken_string& set_rata (int index, real perc, int day, int type,
|
// setta rata senza automatismi, un importo solo (valuta o no)
|
||||||
|
TToken_string& set_rata (int index, real perc, int day, int type, bool valuta,
|
||||||
const char* ulc = NULL, const char* imp = NULL,
|
const char* ulc = NULL, const char* imp = NULL,
|
||||||
const char* data = NULL);
|
const char* data = NULL);
|
||||||
|
|
||||||
// questa calcola percentuali e scadenze a partire dagli importi
|
// calcola percentuali e scadenze a partire dagli importi
|
||||||
TToken_string& set_rata(int index, const real& howmuch, const real& quanto,
|
TToken_string& set_rata(int index, const real& impval, const real& implit,
|
||||||
const TDate& date, int type, const char* ulc, bool pagata);
|
const TDate& date, int type, const char* ulc, bool pagata);
|
||||||
|
|
||||||
// settano tipo rata e ult. class default per le rate; se bool = TRUE
|
// settano tipo rata e ult. class default per le rate; se bool = TRUE
|
||||||
@ -182,24 +204,22 @@ public:
|
|||||||
void set_rate_auto();
|
void set_rate_auto();
|
||||||
// data una rata esistente, riaggiusta gli importi usando lo slicer e
|
// data una rata esistente, riaggiusta gli importi usando lo slicer e
|
||||||
// le scadenze usando la data di inizio
|
// le scadenze usando la data di inizio
|
||||||
void set_imprata(int i, const real& r);
|
void set_imprata(int i, const real& r, bool val);
|
||||||
// setta l'importo in lire di una rata
|
|
||||||
void set_implit(int i, const real & r);
|
|
||||||
// setta l'imponibile in lire totale
|
|
||||||
void set_totlit(const real & r);
|
|
||||||
|
|
||||||
// slicer interface
|
// only one of these must be called
|
||||||
void set_total(const real& ib, const real& im, const real& sp);
|
void set_total(const real& ib, const real& im, const real& sp, bool valuta = FALSE);
|
||||||
|
void set_total_valuta(const real& ib, const real& im, const real& sp, const real& cambio,
|
||||||
|
const real& ibl, const real& iml, const real& spl);
|
||||||
|
|
||||||
// istanzia uno sheet field come diobue comanda
|
// istanzia uno sheet field come diobue comanda
|
||||||
void set_sheet(TSheet_field& sf, int sscad = -1);
|
void set_sheet(TSheet_field& sf, int sscad = -1);
|
||||||
|
|
||||||
// ricalcola automaticamente tutto il ricalcolabile
|
// ricalcola automaticamente tutto il ricalcolabile
|
||||||
// alla modifica di una percentuale (o di un importo)
|
// alla modifica di una percentuale (o di un importo)
|
||||||
// ritorna TRUE se non si poteva; non occorre che sia inizializzato
|
// ritorna TRUE (con errori OR-ati) se non si poteva;
|
||||||
// con un importo
|
word recalc_rate(int row, bool is_perc_modified, const char* new_value,
|
||||||
word recalc_rate(int row, bool is_perc_modified, const char* new_value,
|
const char* new_lire, const char* scad, const char* typ,
|
||||||
const char* scad, const char* typ, const char* ulc, int rdiff,
|
const char* ulc, int rdiff, bool mcomm, bool& need_recalc);
|
||||||
bool mcomm, bool& need_recalc);
|
|
||||||
|
|
||||||
// aggiusta scadenze fisse (tutte in un colpo)
|
// aggiusta scadenze fisse (tutte in un colpo)
|
||||||
void adjust_fixed_scad();
|
void adjust_fixed_scad();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user