diff --git a/ve/ve6100.cpp b/ve/ve6100.cpp index b7598c044..04b311c8c 100755 --- a/ve/ve6100.cpp +++ b/ve/ve6100.cpp @@ -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