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
{
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