From 93e28ea102f305e8fe28241e67e521b07e5f93a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20Lef=C3=A8vre=20=28lul=29?= Date: Wed, 24 Apr 2024 09:54:10 -0400 Subject: [PATCH] [FIX] spreadsheet_account: fix no account match MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Steps to reproduce: - create an empty spreadsheet - type in a cell '=ODOO.BALANCE("qsdfqsf", "02/2024")' => #ERROR There's no account that match the given code. The account.move.line domain ends up having a clause `('account_id', 'in', [])` The ORM detects the domain won't match anything and early returns an empty list [] Our code expects a query object and not a list => boom opw-3872445 closes odoo/odoo#163444 X-original-commit: 95de1332196fde7bfa5d178c6c0b7995cd892acb Signed-off-by: Vincent Schippefilt (vsc) Signed-off-by: Lucas Lefèvre (lul) --- addons/spreadsheet_account/models/account.py | 2 +- .../tests/test_debit_credit.py | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/addons/spreadsheet_account/models/account.py b/addons/spreadsheet_account/models/account.py index cdbe2757ec1..617594cb8ff 100644 --- a/addons/spreadsheet_account/models/account.py +++ b/addons/spreadsheet_account/models/account.py @@ -113,7 +113,7 @@ class AccountMove(models.Model): company_id = args["company_id"] or self.env.company.id domain = self._build_spreadsheet_formula_domain(args) # remove this when _search always returns a Query object - if domain == expression.FALSE_DOMAIN: + if expression.is_false(self.env["account.move.line"], domain): results.append({"credit": 0, "debit": 0}) continue MoveLines = self.env["account.move.line"].with_company(company_id) diff --git a/addons/spreadsheet_account/tests/test_debit_credit.py b/addons/spreadsheet_account/tests/test_debit_credit.py index b2a2f59e35f..7599dedf8cc 100644 --- a/addons/spreadsheet_account/tests/test_debit_credit.py +++ b/addons/spreadsheet_account/tests/test_debit_credit.py @@ -875,6 +875,27 @@ class SpreadsheetAccountingFunctionsTest(AccountTestInvoicingCommon): ], ) + def test_code_no_account(self): + """code that doesn't match any account""" + self.assertEqual( + self.env["account.account"].spreadsheet_fetch_debit_credit( + [ + { + "date_range": { + "range_type": "year", + "year": 2022, + }, + "codes": ["10000000000"], + "company_id": None, + "include_unposted": False, + } + ] + ), + [ + {"credit": 0, "debit": 0}, + ], + ) + def test_no_code(self): self.assertEqual( self.env["account.account"].spreadsheet_fetch_debit_credit(