Skip to content

Commit

Permalink
[IMP] account_reconcile_oca : improve tests around multi-currency
Browse files Browse the repository at this point in the history
  • Loading branch information
florian-dacosta authored and etobella committed Oct 1, 2024
1 parent abad48c commit cc242ac
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1048,7 +1048,7 @@ def _get_exchange_rate_amount(self, amount, currency_amount, currency, line):
self.company_id,
self.date,
)
return to_amount - amount
return self.company_id.currency_id.round(to_amount - amount)

def _compute_exchange_rate(
self,
Expand Down
122 changes: 75 additions & 47 deletions account_reconcile_oca/tests/test_bank_account_reconcile.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ def test_reconcile_invoice_currency(self):
inv1 = self.create_invoice(currency_id=self.currency_usd_id, invoice_amount=100)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -102,6 +101,42 @@ def test_reconcile_invoice_currency(self):
self.assertFalse(f.add_account_move_line_id)
self.assertTrue(f.can_reconcile)

def test_manual_line_with_currency(self):
bank_stmt = self.acc_bank_stmt_model.create(
{
"journal_id": self.bank_journal_euro.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_euro.id,
"statement_id": bank_stmt.id,
"amount": 50,
"amount_currency": 100,
"foreign_currency_id": self.currency_usd_id,
"date": time.strftime("%Y-07-15"),
}
)
receivable_acc = self.company_data["default_account_receivable"]
with Form(
bank_stmt_line,
view="account_reconcile_oca.bank_statement_line_form_reconcile_view",
) as f:
self.assertFalse(f.can_reconcile)
f.manual_reference = "reconcile_auxiliary;1"
f.manual_account_id = receivable_acc
self.assertTrue(f.can_reconcile)
bank_stmt_line.reconcile_bank_line()
receivable_line = bank_stmt_line.line_ids.filtered(
lambda line: line.account_id == receivable_acc
)
self.assertEqual(receivable_line.currency_id.id, self.currency_usd_id)
self.assertEqual(receivable_line.amount_currency, -100)
self.assertEqual(receivable_line.balance, -50)

def test_reconcile_invoice_reconcile_full(self):
"""
We want to test the reconcile widget for bank statements on invoices.
Expand All @@ -113,7 +148,6 @@ def test_reconcile_invoice_reconcile_full(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -162,7 +196,6 @@ def test_reconcile_invoice_unreconcile(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -225,7 +258,6 @@ def test_reconcile_invoice_partial(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -289,7 +321,6 @@ def test_reconcile_invoice_partial_supplier(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -343,7 +374,6 @@ def test_reconcile_model(self):
"""
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -387,7 +417,6 @@ def test_reconcile_model_tax_included(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -442,7 +471,6 @@ def test_reconcile_invoice_model(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -502,7 +530,6 @@ def test_reconcile_rule_on_create(self):

bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -532,7 +559,6 @@ def test_reconcile_invoice_keep(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -590,7 +616,6 @@ def test_reconcile_invoice_to_check_reconciled(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -632,7 +657,6 @@ def test_reconcile_invoice_to_check_not_reconciled(self):
"""
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -667,7 +691,6 @@ def test_widget_invoice_clean(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -705,7 +728,6 @@ def test_widget_invoice_delete(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -746,7 +768,6 @@ def test_widget_invoice_unselect(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -787,7 +808,6 @@ def test_widget_invoice_change_partner(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -823,7 +843,6 @@ def test_widget_model_clean(self):
"""
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -874,7 +893,6 @@ def test_bank_statement_line_actions(self):
"""
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -917,7 +935,6 @@ def test_filter_partner(self):

bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -981,7 +998,6 @@ def test_partner_name_with_parent(self):

bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_euro.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -1013,7 +1029,6 @@ def test_journal_foreign_currency(self):
inv1 = self.create_invoice(currency_id=self.currency_usd_id, invoice_amount=100)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_usd.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down Expand Up @@ -1052,45 +1067,50 @@ def test_journal_foreign_currency(self):
)

def test_journal_foreign_currency_change(self):
cny = self.env.ref("base.CNY")
cny.write({"active": True})
cny_journal = self.env["account.journal"].create(
{
"name": "Bank CNY",
"type": "bank",
"currency_id": cny.id,
}
)
self.env["res.currency.rate"].create(
{
"currency_id": self.env.ref("base.EUR").id,
"name": time.strftime("%Y-07-14"),
"rate": 1.15,
"name": time.strftime("%Y-09-10"),
"currency_id": cny.id,
"inverse_company_rate": 0.125989013758,
}
)
self.env["res.currency.rate"].create(
{
"name": time.strftime("%Y-09-09"),
"currency_id": cny.id,
"inverse_company_rate": 0.126225969731,
}
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_usd.id,
"date": time.strftime("%Y-07-15"),
"journal_id": cny_journal.id,
"date": time.strftime("%Y-09-10"),
"name": "test",
}
)
bank_stmt_line = self.acc_bank_stmt_line_model.create(
{
"name": "testLine",
"journal_id": self.bank_journal_usd.id,
"journal_id": cny_journal.id,
"statement_id": bank_stmt.id,
"amount": 100,
"date": time.strftime("%Y-07-15"),
"amount": 259200,
"date": time.strftime("%Y-09-10"),
}
)
with Form(
bank_stmt_line,
view="account_reconcile_oca.bank_statement_line_form_reconcile_view",
) as f:
line = f.reconcile_data_info["data"][0]
self.assertEqual(
line["currency_amount"],
100,
)
self.env["res.currency.rate"].create(
{
"currency_id": self.env.ref("base.EUR").id,
"name": time.strftime("%Y-07-15"),
"rate": 1.2,
}
inv1 = self._create_invoice(
currency_id=cny.id,
invoice_amount=259200,
date_invoice=time.strftime("%Y-09-09"),
auto_validate=True,
)
with Form(
bank_stmt_line,
Expand All @@ -1099,8 +1119,17 @@ def test_journal_foreign_currency_change(self):
line = f.reconcile_data_info["data"][0]
self.assertEqual(
line["currency_amount"],
100,
259200,
)
f.add_account_move_line_id = inv1.line_ids.filtered(
lambda l: l.account_id.account_type == "asset_receivable"
)
self.assertTrue(f.can_reconcile)
self.assertEqual(len(bank_stmt_line.reconcile_data_info["data"]), 3)
exchange_line = bank_stmt_line.reconcile_data_info["data"][-1]
self.assertEqual(exchange_line["amount"], 61.42)
bank_stmt_line.reconcile_bank_line()
self.assertEqual(inv1.payment_state, "paid")

def test_invoice_foreign_currency_change(self):
self.env["res.currency.rate"].create(
Expand All @@ -1125,7 +1154,6 @@ def test_invoice_foreign_currency_change(self):
)
bank_stmt = self.acc_bank_stmt_model.create(
{
"company_id": self.env.ref("base.main_company").id,
"journal_id": self.bank_journal_usd.id,
"date": time.strftime("%Y-07-15"),
"name": "test",
Expand Down

0 comments on commit cc242ac

Please sign in to comment.