Odoo18-Base/addons/account/models/account_root.py
2025-01-06 10:57:38 +07:00

38 lines
1.1 KiB
Python

from itertools import accumulate
from odoo import api, fields, models
from odoo.tools import Query
class AccountRoot(models.Model):
_name = 'account.root'
_description = 'Account codes first 2 digits'
_auto = False
_table_query = '0'
name = fields.Char(compute='_compute_root')
parent_id = fields.Many2one('account.root', compute='_compute_root')
def browse(self, ids=()):
if isinstance(ids, str):
ids = (ids,)
return super().browse(ids)
def _search(self, domain, offset=0, limit=None, order=None) -> Query:
match domain:
case [('id', 'in', ids)]:
return self.browse(sorted(ids))._as_query()
case [('id', 'parent_of', ids)]:
return self.browse(sorted({s for _id in ids for s in accumulate(_id)}))._as_query()
raise NotImplementedError
@api.model
def _from_account_code(self, code):
return self.browse(code and code[:2])
def _compute_root(self):
for root in self:
root.name = root.id
root.parent_id = self.browse(root.id[:-1] if len(root.id) > 1 else False)