Skip to content

Commit 3f53d0d

Browse files
committed
[FIX] account_reconcile_oca: Fix currency and amount when using reconciliation models
1 parent b99346e commit 3f53d0d

File tree

2 files changed

+63
-2
lines changed

2 files changed

+63
-2
lines changed

account_reconcile_oca/models/account_bank_statement_line.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,9 @@ def _inverse_reconcile_data_info(self):
472472
def _reconcile_data_by_model(self, data, reconcile_model, reconcile_auxiliary_id):
473473
new_data = []
474474
liquidity_amount = 0.0
475+
currency = self._get_reconcile_currency()
476+
currency_amount = False
477+
default_name = ""
475478
for line_data in data:
476479
if line_data["kind"] == "suspense":
477480
continue
@@ -487,6 +490,13 @@ def _reconcile_data_by_model(self, data, reconcile_model, reconcile_auxiliary_id
487490
amount = self.foreign_currency_id.compute(
488491
amount, self.journal_id.currency_id or self.company_currency_id
489492
)
493+
if currency != self.company_id.currency_id:
494+
currency_amount = self.company_id.currency_id._convert(
495+
amount,
496+
currency,
497+
self.company_id,
498+
self.date,
499+
)
490500
new_line.update(
491501
{
492502
"reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id,
@@ -502,9 +512,9 @@ def _reconcile_data_by_model(self, data, reconcile_model, reconcile_auxiliary_id
502512
.display_name,
503513
],
504514
"date": fields.Date.to_string(self.date),
505-
"line_currency_id": self.company_id.currency_id.id,
515+
"line_currency_id": currency.id,
506516
"currency_id": self.company_id.currency_id.id,
507-
"currency_amount": amount,
517+
"currency_amount": currency_amount or amount,
508518
"name": line.get("name") or self.payment_ref,
509519
}
510520
)

account_reconcile_oca/tests/test_bank_account_reconcile.py

+51
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,57 @@ def test_reconcile_invoice_keep(self):
594594
self.assertTrue(reconcile_move.reversal_move_id)
595595
self.assertFalse(bank_stmt_line.is_reconciled)
596596

597+
def test_reconcile_model_with_foreign_currency(self):
598+
"""
599+
We want to test what happens when we select a reconcile model to fill a
600+
bank statement with a foreign currency.
601+
"""
602+
bank_stmt = self.acc_bank_stmt_model.create(
603+
{
604+
"journal_id": self.bank_journal_usd.id,
605+
"date": time.strftime("%Y-07-15"),
606+
"name": "test",
607+
}
608+
)
609+
bank_stmt_line = self.acc_bank_stmt_line_model.create(
610+
{
611+
"name": "testLine",
612+
"journal_id": self.bank_journal_usd.id,
613+
"statement_id": bank_stmt.id,
614+
"amount": 100,
615+
"date": time.strftime("%Y-07-15"),
616+
}
617+
)
618+
with Form(
619+
bank_stmt_line,
620+
view="account_reconcile_oca.bank_statement_line_form_reconcile_view",
621+
) as f:
622+
self.assertFalse(f.can_reconcile)
623+
f.manual_model_id = self.rule
624+
self.assertTrue(f.can_reconcile)
625+
number_of_lines = len(bank_stmt_line.reconcile_data_info["data"])
626+
bank_stmt_line.reconcile_bank_line()
627+
self.assertEqual(
628+
number_of_lines, len(bank_stmt_line.reconcile_data_info["data"])
629+
)
630+
self.assertEqual(2, len(bank_stmt_line.move_id.line_ids))
631+
self.assertTrue(
632+
bank_stmt_line.move_id.line_ids.filtered(
633+
lambda r: r.account_id == self.current_assets_account
634+
)
635+
)
636+
expected_amount = bank_stmt_line._get_reconcile_currency()._convert(
637+
bank_stmt_line.amount,
638+
bank_stmt_line.company_id.currency_id,
639+
bank_stmt_line.company_id,
640+
bank_stmt_line.date,
641+
)
642+
self.assertEqual(
643+
bank_stmt_line.move_id.line_ids[0].amount_currency, bank_stmt_line.amount
644+
)
645+
self.assertEqual(bank_stmt_line.move_id.line_ids[0].debit, expected_amount)
646+
self.assertEqual(bank_stmt_line.move_id.line_ids[1].credit, expected_amount)
647+
597648
# Testing to check functionality
598649

599650
def test_reconcile_invoice_to_check_reconciled(self):

0 commit comments

Comments
 (0)