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:
angelo 1997-08-04 08:10:58 +00:00
parent 5f80dd5869
commit 771a826749

View File

@ -80,6 +80,7 @@ enum error_type {
class TMovimentoPN_VE : public TMovimentoPN class TMovimentoPN_VE : public TMovimentoPN
{ {
TCausale * _caus; TCausale * _caus;
bool _valuta;
protected: protected:
// simula il K_SPACE di iva_notify // simula il K_SPACE di iva_notify
@ -109,7 +110,7 @@ public:
// ricalcola le righe di contabilita' dalle righe iva presenti // ricalcola le righe di contabilita' dalle righe iva presenti
// e verifica la quadratura del movimento. Ritorna TRUE se il movimento e' scrivibile // e verifica la quadratura del movimento. Ritorna TRUE se il movimento e' scrivibile
bool recalc_cg_rows(TCausale* caus = NULL); bool recalc_cg_rows(TCausale* caus = NULL);
TMovimentoPN_VE() {}; TMovimentoPN_VE(bool valuta) : _valuta(valuta) {};
virtual ~TMovimentoPN_VE() {} virtual ~TMovimentoPN_VE() {}
}; };
@ -388,9 +389,13 @@ bool TMovimentoPN_VE::movement_ok()
TImporto tot_imp; TImporto tot_imp;
TImporto 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(); const int max = cg_items();
for (int i = 0; i < max; i++) for (int i = 0; i < max; i++)
{ {
if (i == 0 && _valuta)
continue;
TRectype& r = cg(i); TRectype& r = cg(i);
const char sez = r.get_char(RMV_SEZIONE); const char sez = r.get_char(RMV_SEZIONE);
const real val(r.get_real(RMV_IMPORTO)); const real val(r.get_real(RMV_IMPORTO));
@ -398,6 +403,17 @@ bool TMovimentoPN_VE::movement_ok()
tot_imp+=imp; 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()) if (!tot_imp.is_zero())
return FALSE; return FALSE;
return TRUE; return TRUE;
@ -1358,13 +1374,14 @@ error_type TContabilizzazione_app::create_iva_rows()
if (in_valuta) if (in_valuta)
{ {
imponibile = cur.imp() * cambio; // imponibile in lire 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 else
imposta = cur.iva(); imposta = cur.iva();
// In contabilita' abbiamo 2 decimali...
imponibile.ceil(2);
imposta.ceil(2);
TRectype& rec_iva = _movimento->iva(i); TRectype& rec_iva = _movimento->iva(i);
rec_iva.put(RMI_ANNOES,annoes); rec_iva.put(RMI_ANNOES,annoes);
rec_iva.put(RMI_NUMREG,numreg); rec_iva.put(RMI_NUMREG,numreg);
@ -1509,9 +1526,10 @@ void TContabilizzazione_app::calc_pagament()
if (valuta) if (valuta)
{ {
const real change(head.get_real(MOV_CAMBIO)); const real change(head.get_real(MOV_CAMBIO));
real val1 = totimponibili * change; //real val1 = totimponibili * change;
real val2 = totimposte * change; real val2 = totimposte * change;
real val3 = totspese * 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); _pagamento->set_total_valuta( totimponibili, totimposte, totspese, change, val1, val2 ,val3);
} }
else else
@ -1763,7 +1781,7 @@ void TContabilizzazione_app::display_error()
void TContabilizzazione_app::contabilize_document() void TContabilizzazione_app::contabilize_document()
{ {
_movimento = new TMovimentoPN_VE; _movimento = new TMovimentoPN_VE(_doc->in_valuta());
//_doc->compile_summary(); // ricalcola il documento //_doc->compile_summary(); // ricalcola il documento