[FIX] account_financial_report: fix for "group_id" is not searchable

It happens because on 18.0 the group_id is not stored so the one2many account_ids
is not working
This commit is contained in:
micheledic
2025-06-03 10:43:11 +02:00
parent 2b279ca0a1
commit 8535b91884
2 changed files with 44 additions and 9 deletions

View File

@@ -2,6 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models from odoo import api, fields, models
from odoo.tools import SQL
class AccountGroup(models.Model): class AccountGroup(models.Model):
@@ -12,14 +13,17 @@ class AccountGroup(models.Model):
) )
level = fields.Integer(compute="_compute_level", recursive=True) level = fields.Integer(compute="_compute_level", recursive=True)
account_ids = fields.One2many( account_ids = fields.One2many(
comodel_name="account.account", inverse_name="group_id", string="Accounts" comodel_name="account.account",
compute="_compute_account_ids",
string="Accounts",
store=False,
) )
compute_account_ids = fields.Many2many( compute_account_ids = fields.Many2many(
"account.account", "account.account",
recursive=True, recursive=True,
compute="_compute_group_accounts", compute="_compute_group_accounts",
string="Compute accounts", string="Compute accounts",
store=True, store=False,
) )
complete_name = fields.Char( complete_name = fields.Char(
"Full Name", compute="_compute_complete_name", recursive=True "Full Name", compute="_compute_complete_name", recursive=True
@@ -37,6 +41,44 @@ class AccountGroup(models.Model):
else: else:
group.complete_name = group.name group.complete_name = group.name
@api.depends("code_prefix_start", "code_prefix_end")
def _compute_account_ids(self):
"""Retrieves every account from `self`.
In Odoo 18 the group_id on account is not stored so it raises
an error the one2many account_ids with inverse name group_id."""
group_ids = self.ids
self.account_ids = self.env["account.account"]
if not group_ids:
return
group_ids = SQL(",".join(map(str, group_ids)))
results = self.env.execute_query(
SQL(
"""
SELECT
agroup.id AS group_id,
STRING_AGG(DISTINCT account.id::text, ', ') as account_ids
FROM account_group agroup
inner join account_account account
ON agroup.code_prefix_start <= LEFT(%(code_store)s->>agroup.company_id::text,
char_length(agroup.code_prefix_start))
AND agroup.code_prefix_end >= LEFT(%(code_store)s->>agroup.company_id::text,
char_length(agroup.code_prefix_end))
WHERE agroup.id IN (%(group_ids)s)
GROUP BY agroup.id
""",
code_store=SQL.identifier("account", "code_store"),
group_ids=group_ids,
)
)
group_by_code = dict(results)
if not group_by_code:
return
for record in self:
if group_by_code.get(record.id, ""):
record.account_ids = list(
map(int, group_by_code.get(record.id, "").split(", "))
)
@api.depends("code_prefix_start", "parent_id.complete_code") @api.depends("code_prefix_start", "parent_id.complete_code")
def _compute_complete_code(self): def _compute_complete_code(self):
"""Forms complete code of location from parent location to child location.""" """Forms complete code of location from parent location to child location."""
@@ -57,7 +99,6 @@ class AccountGroup(models.Model):
group.level = group.parent_id.level + 1 group.level = group.parent_id.level + 1
@api.depends( @api.depends(
"account_ids",
"group_child_ids.compute_account_ids", "group_child_ids.compute_account_ids",
) )
def _compute_group_accounts(self): def _compute_group_accounts(self):

View File

@@ -38,12 +38,10 @@ class TestTrialBalanceReport(AccountTestInvoicingCommon):
{ {
"code": "001", "code": "001",
"name": "Account 001", "name": "Account 001",
"group_id": cls.group2.id,
"account_type": "income_other", "account_type": "income_other",
}, },
) )
cls.account100 = cls.company_data["default_account_receivable"] cls.account100 = cls.company_data["default_account_receivable"]
cls.account100.group_id = cls.group1.id
cls.account110 = cls.env["account.account"].search( cls.account110 = cls.env["account.account"].search(
[ [
( (
@@ -59,7 +57,6 @@ class TestTrialBalanceReport(AccountTestInvoicingCommon):
{ {
"code": "200", "code": "200",
"name": "Account 200", "name": "Account 200",
"group_id": cls.group2.id,
"account_type": "income_other", "account_type": "income_other",
}, },
) )
@@ -76,7 +73,6 @@ class TestTrialBalanceReport(AccountTestInvoicingCommon):
{ {
"code": "201", "code": "201",
"name": "Account 201", "name": "Account 201",
"group_id": cls.group2.id,
"account_type": "income_other", "account_type": "income_other",
}, },
) )
@@ -100,8 +96,6 @@ class TestTrialBalanceReport(AccountTestInvoicingCommon):
def _create_account_account(self, vals): def _create_account_account(self, vals):
item = self.env["account.account"].create(vals) item = self.env["account.account"].create(vals)
if "group_id" in vals:
item.group_id = vals["group_id"]
return item return item
def _add_move( def _add_move(