Skip to content

Commit

Permalink
[FIX] account_reconcile_oca: Fix currency and amount when using recon…
Browse files Browse the repository at this point in the history
…ciliation models
  • Loading branch information
sergiobstoj committed Feb 4, 2025
1 parent b99346e commit 8c6f764
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 2 deletions.
14 changes: 12 additions & 2 deletions account_reconcile_oca/models/account_bank_statement_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,9 @@ def _inverse_reconcile_data_info(self):
def _reconcile_data_by_model(self, data, reconcile_model, reconcile_auxiliary_id):
new_data = []
liquidity_amount = 0.0
currency = self._get_reconcile_currency()
currency_amount = False
default_name = ""
for line_data in data:
if line_data["kind"] == "suspense":
continue
Expand All @@ -487,6 +490,13 @@ def _reconcile_data_by_model(self, data, reconcile_model, reconcile_auxiliary_id
amount = self.foreign_currency_id.compute(
amount, self.journal_id.currency_id or self.company_currency_id
)
if currency != self.company_id.currency_id:
currency_amount = self.company_id.currency_id._convert(
amount,
currency,
self.company_id,
self.date,
)
new_line.update(
{
"reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id,
Expand All @@ -502,9 +512,9 @@ def _reconcile_data_by_model(self, data, reconcile_model, reconcile_auxiliary_id
.display_name,
],
"date": fields.Date.to_string(self.date),
"line_currency_id": self.company_id.currency_id.id,
"line_currency_id": currency.id,
"currency_id": self.company_id.currency_id.id,
"currency_amount": amount,
"currency_amount": currency_amount or amount,
"name": line.get("name") or self.payment_ref,
}
)
Expand Down
51 changes: 51 additions & 0 deletions account_reconcile_oca/tests/test_bank_account_reconcile.py
Original file line number Diff line number Diff line change
Expand Up @@ -594,6 +594,57 @@ def test_reconcile_invoice_keep(self):
self.assertTrue(reconcile_move.reversal_move_id)
self.assertFalse(bank_stmt_line.is_reconciled)

def test_reconcile_model_with_foreign_currency(self):
"""
We want to test what happens when we select a reconcile model to fill a
bank statement with a foreign currency.
"""
bank_stmt = self.acc_bank_stmt_model.create(
{
"journal_id": self.bank_journal_usd.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
}
)
bank_stmt_line = self.acc_bank_stmt_line_model.create(
{
"name": "testLine",
"journal_id": self.bank_journal_usd.id,
"statement_id": bank_stmt.id,
"amount": 100,
"date": time.strftime("%Y-07-15"),
}
)
with Form(
bank_stmt_line,
view="account_reconcile_oca.bank_statement_line_form_reconcile_view",
) as f:
self.assertFalse(f.can_reconcile)
f.manual_model_id = self.rule
self.assertTrue(f.can_reconcile)
number_of_lines = len(bank_stmt_line.reconcile_data_info["data"])
bank_stmt_line.reconcile_bank_line()
self.assertEqual(
number_of_lines, len(bank_stmt_line.reconcile_data_info["data"])
)
self.assertEqual(2, len(bank_stmt_line.move_id.line_ids))
self.assertTrue(
bank_stmt_line.move_id.line_ids.filtered(
lambda r: r.account_id == self.current_assets_account
)
)
expected_amount = bank_stmt_line._get_reconcile_currency()._convert(
bank_stmt_line.amount,
bank_stmt_line.company_id.currency_id,
bank_stmt_line.company_id,
bank_stmt_line.date,
)
self.assertEqual(
bank_stmt_line.move_id.line_ids[0].amount_currency, bank_stmt_line.amount
)
self.assertEqual(bank_stmt_line.move_id.line_ids[0].debit, expected_amount)
self.assertEqual(bank_stmt_line.move_id.line_ids[1].credit, expected_amount)

# Testing to check functionality

def test_reconcile_invoice_to_check_reconciled(self):
Expand Down

0 comments on commit 8c6f764

Please sign in to comment.