Multiple currency bank accounts

Registered by Pieter J. Kersten (EduSense BV)

Nowadays banks allow the co-existence of multiple currencies in one single bank account. Banks differ in approach how to report the total amounts in the various currencies. Virtual single currency reporting, mixed currency reporting and 'statement wise' single currency reporting are all signaled.

The account banking framework should be extended to handle reports like this. This will affect account_bank_statement and account_bank_statement_line from the account module.

Blueprint information

Status:
Started
Approver:
None
Priority:
Undefined
Drafter:
None
Direction:
Needs approval
Assignee:
None
Definition:
Approved
Series goal:
None
Implementation:
Slow progress
Milestone target:
None
Started by
Pieter J. Kersten (EduSense BV)

Whiteboard

Sraps has some preliminary work offered which has to be evaluated and incorporated.

Here is the patch which solves the problem:

diff -urNp account_banking/wizard/bank_import.py account_banking_nw/wizard/bank_import.py
--- account_banking/wizard/bank_import.py 2010-02-16 17:37:18.000000000 +0200
+++ account_banking_nw/wizard/bank_import.py 2010-02-16 17:55:25.000000000 +0200
@@ -32,6 +32,7 @@ from tools.translate import _
 from account_banking.parsers import models
 from account_banking.parsers.convert import *
 from banktools import *
+from account_banking.struct import struct

 def _get_move_info(pool, cursor, uid, move_line):
     reconcile_obj = pool.get('account.bank.statement.reconcile')
@@ -286,9 +287,10 @@ def _banking_import_statements_file(self
             no_trans_skipped += len(statement.transactions)
             continue

- if not statement.local_account in info:
+ info_key = statement.local_account+'.'+statement.local_currency
+ if not info_key in info:
             account_info = get_company_bank_account(
- pool, cursor, uid, statement.local_account, company, log
+ pool, cursor, uid, statement.local_account, statement.local_currency, company, log
             )
             if not account_info:
                 log.append(
@@ -307,9 +309,9 @@ def _banking_import_statements_file(self
                 error_accounts[statement.local_account] = True
                 no_errors += 1
                 continue
- info[statement.local_account] = account_info
+ info[info_key] = account_info
         else:
- account_info = info[statement.local_account]
+ account_info = info[info_key]

         if statement.local_currency \
            and account_info.journal_id.code != statement.local_currency:
diff -urNp account_banking/wizard/banktools.py account_banking_nw/wizard/banktools.py
--- account_banking/wizard/banktools.py 2010-02-16 17:37:18.000000000 +0200
+++ account_banking_nw/wizard/banktools.py 2010-02-16 17:55:25.000000000 +0200
@@ -135,7 +135,7 @@ def get_or_create_partner(pool, cursor,
         partner_id = partner_ids[0]
     return partner_obj.browse(cursor, uid, partner_id)[0]

-def get_company_bank_account(pool, cursor, uid, account_number,
+def get_company_bank_account(pool, cursor, uid, account_number, currency,
                              company, log):
     '''
     Get the matching bank account for this company.
@@ -154,9 +154,19 @@ def get_company_bank_account(pool, curso
         return False
     results.account = bank_account
     bank_settings_obj = pool.get('account.banking.account.settings')
+ journal_obj = pool.get('account.journal')
+ default_currency = pool.get('res.users').browse(cursor, uid, uid).company_id.currency_id.code
+ journal_ids = journal_obj.search(cursor, uid, [
+ ('type', '=', 'cash'),('currency', '=', currency)
+ ])
+ if not journal_ids and currency == default_currency:
+ journal_ids = journal_obj.search(cursor, uid, [
+ ('type', '=', 'cash'),('currency', '=', False)
+ ])
     bank_settings_ids = bank_settings_obj.search(cursor, uid, [
- ('partner_bank_id', '=', bank_account.id)
+ ('partner_bank_id', '=', bank_account.id),('journal_id','in',journal_ids)
     ])
+
     if bank_settings_ids:
         settings = bank_settings_obj.browse(cursor, uid, bank_settings_ids)[0]
         results.journal_id = settings.journal_id

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.