← Back to team overview

openerp-expert-accounting team mailing list archive

[Bug 452854] Re: Cannot validate invoices with foreign currency

 

Hi,


I finally spend half a day on this, and I give you what I got. The attached patch combine the last one of Anup and add a check/correction on debit and credit value according to the amount total of the invoice.

The point is the following (for me at least) :

- The Anup Patch seems to fix the sum debit != sum credit => Good !

- But the amount total of the invoice (in foreign currency) converted
into company currency is still not = to credit or debit value on the
receivable/payable account => Not good.

This issue let an invoice with an inconsistence when making the
reconciliation.

My patch suggest the following:

- Once everything is ready to create the move line, it check that the
condition is true (amount_total in company currency == credit or debit
on the receivable/payable account).

- If there is a difference, then I add that difference on one credit and
one debit line (the receivable and the biggest amount).

In another word, it correct the credit / debit total amount according to
the rounding of the foreign currency. This avoid to have 0,01 cents to
write-off when making the reconciliation.

For the future version 6.0, I'll strongly suggest to provide an account
per currency / per company to deal with that, as it is in other
software...

Please, review my patch cause we need something good for everyone.. I'm
not that proud of my python coding on this one, advices welcome !


Regards,




** Attachment added: "rounding_issue"
   http://launchpadlibrarian.net/43249646/rounding_issue

-- 
Cannot validate invoices with foreign currency
https://bugs.launchpad.net/bugs/452854
You received this bug notification because you are a member of OpenERP's
Accounting Experts, which is a direct subscriber.

Status in OpenObject Addons Modules: In Progress

Bug description:
Hello,
have stumbled upon interesting problem. Latvian Lats (LVL) is the base currency for Accounting. Try to issue (or encode received from supplier) invoice in Euros(EUR). The same would happen between any other currencies too.

Invoice totals:
Total w/o VAT (Untaxed): 1158,00 EUR
Tax VAT 21% : 243,18 EUR
Total: 1401,18 EUR

Try to Confirm invoice and you will get "You can not validate a non balanced entry !"

Made some investigation what is wrong, and have found that the problem is.

Obviously the totals are calculated perfectly right, but as the base currency for accounting is different from the currency we are issuing invoice the accounting moves are done in the base currency, in this case LVL.

So goes the currency exchange

Total w/o VAT (Untaxed): 1158,00 EUR ->(813,8470320 ~813,85 LVL)
Tax VAT 21% : 243,18 EUR ->(170,9078767 ~170,91 LVL)
Total: 1401,18 EUR ->(984,7549087 ~984,75 LVL)

Which again are technically right, with one difference, that the totals for posting are now not dependent on each other anymore. They are being rounded before posting.

If you would issue invoice in a base currency the difference is in 0.01LVL, which is lost during rounding process. Notice the Total sum.
Example:
Total w/o VAT (Untaxed): 813,85 LVL
Tax VAT 21% : 170,91 LVL (VO_VAT * 21% = 170,9085000)
Total: 984,76 LVL (VO_VAT + VAT_21)

To deal around floating point storage in Python (as well as other programming languages), allowed difference between sums are allowed 0.0001. This is the place where postings do not pass validate(...) function in "account.py".

This is right as balance between credit and debit should be equal. What should be done - accountant would probably create write-off entry for the missing sum to make the balance right. This functionality is missing in OpenERP, and is fundamental for foreign trade.

Any ideas?

P.S. version 5.0.6.

Kaspars