Corretta contabilizzazione in caso di documento in valuta.
git-svn-id: svn://10.65.10.50/trunk@5027 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
5f80dd5869
commit
771a826749
@ -80,6 +80,7 @@ enum error_type {
|
||||
class TMovimentoPN_VE : public TMovimentoPN
|
||||
{
|
||||
TCausale * _caus;
|
||||
bool _valuta;
|
||||
|
||||
protected:
|
||||
// simula il K_SPACE di iva_notify
|
||||
@ -109,7 +110,7 @@ public:
|
||||
// ricalcola le righe di contabilita' dalle righe iva presenti
|
||||
// e verifica la quadratura del movimento. Ritorna TRUE se il movimento e' scrivibile
|
||||
bool recalc_cg_rows(TCausale* caus = NULL);
|
||||
TMovimentoPN_VE() {};
|
||||
TMovimentoPN_VE(bool valuta) : _valuta(valuta) {};
|
||||
virtual ~TMovimentoPN_VE() {}
|
||||
};
|
||||
|
||||
@ -388,9 +389,13 @@ bool TMovimentoPN_VE::movement_ok()
|
||||
TImporto tot_imp;
|
||||
TImporto imp;
|
||||
|
||||
// Se siamo in valuta, forzera' la riga totale documento a cio' che si ottiene dalla somma
|
||||
// delle singole righe per evitare sbilanci nel movimento di 2,3,4,5 lire dovuti agli arrotondamenti
|
||||
const int max = cg_items();
|
||||
for (int i = 0; i < max; i++)
|
||||
{
|
||||
if (i == 0 && _valuta)
|
||||
continue;
|
||||
TRectype& r = cg(i);
|
||||
const char sez = r.get_char(RMV_SEZIONE);
|
||||
const real val(r.get_real(RMV_IMPORTO));
|
||||
@ -398,6 +403,17 @@ bool TMovimentoPN_VE::movement_ok()
|
||||
tot_imp+=imp;
|
||||
}
|
||||
|
||||
if (_valuta)
|
||||
{
|
||||
TRectype& r = cg(0);
|
||||
// Setta la riga di totale documento...
|
||||
r.put(RMV_IMPORTO,tot_imp.valore());
|
||||
r.put(RMV_SEZIONE,tot_imp.sezione() == 'D' ? 'A' : 'D'); // Sezione contraria
|
||||
// ...ed anche il totale documento sulla testata
|
||||
lfile().curr().put(MOV_TOTDOC,tot_imp.valore());
|
||||
tot_imp.valore() = 0.0;
|
||||
}
|
||||
|
||||
if (!tot_imp.is_zero())
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
@ -1358,13 +1374,14 @@ error_type TContabilizzazione_app::create_iva_rows()
|
||||
if (in_valuta)
|
||||
{
|
||||
imponibile = cur.imp() * cambio; // imponibile in lire
|
||||
imposta = (imponibile * cur.ali()) / 100.0; // questa e' l'imposta ricalcolata
|
||||
imponibile.round();
|
||||
imposta = abs(imponibile) * cur.ali() / 100.0; // questa e' l'imposta ricalcolata
|
||||
imposta.ceil();
|
||||
if (imponibile < 0.0)
|
||||
imposta = -imposta;
|
||||
}
|
||||
else
|
||||
imposta = cur.iva();
|
||||
// In contabilita' abbiamo 2 decimali...
|
||||
imponibile.ceil(2);
|
||||
imposta.ceil(2);
|
||||
TRectype& rec_iva = _movimento->iva(i);
|
||||
rec_iva.put(RMI_ANNOES,annoes);
|
||||
rec_iva.put(RMI_NUMREG,numreg);
|
||||
@ -1509,9 +1526,10 @@ void TContabilizzazione_app::calc_pagament()
|
||||
if (valuta)
|
||||
{
|
||||
const real change(head.get_real(MOV_CAMBIO));
|
||||
real val1 = totimponibili * change;
|
||||
//real val1 = totimponibili * change;
|
||||
real val2 = totimposte * change;
|
||||
real val3 = totspese * change;
|
||||
real val1 = head.get_real(MOV_TOTDOC) - val2 - val3; // Cosi' corregge eventuali scompensi di poche lirette
|
||||
_pagamento->set_total_valuta( totimponibili, totimposte, totspese, change, val1, val2 ,val3);
|
||||
}
|
||||
else
|
||||
@ -1763,7 +1781,7 @@ void TContabilizzazione_app::display_error()
|
||||
|
||||
void TContabilizzazione_app::contabilize_document()
|
||||
{
|
||||
_movimento = new TMovimentoPN_VE;
|
||||
_movimento = new TMovimentoPN_VE(_doc->in_valuta());
|
||||
|
||||
//_doc->compile_summary(); // ricalcola il documento
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user