Files
app-odoo/app_account_ztree/models/account_account.py
2024-12-13 01:25:41 +08:00

59 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
import logging
from odoo import fields, models, api, _
from odoo.exceptions import UserError, ValidationError
_logger = logging.getLogger(__name__)
class AccountAccount(models.Model):
_inherit = ['account.account']
_parent_name = "parent_id"
_parent_store = True
_parent_order = 'code'
# _rec_name = 'complete_name'
parent_id = fields.Many2one('account.account', 'Parent Chart', index=True, ondelete='cascade')
child_ids = fields.One2many('account.account', 'parent_id', 'Child Chart')
parent_path = fields.Char(index=True, unaccent=False)
@api.model
def _search_new_account_code(self, company, digits, prefix):
# 分隔符,金蝶为 ".",用友为""注意odoo中一级科目现金默认定义是4位头银行是6位头
delimiter = company.coa_delimiter or ''
for num in range(1, 100):
new_code = str(prefix.ljust(digits - 1, '0')) + delimiter + '%02d' % (num)
rec = self.search([('code', '=', new_code), ('company_id', '=', company.id)], limit=1)
if not rec:
return new_code
return super(AccountAccount, self)._search_new_account_code(company, digits, prefix)
def refresh_account_parent(self, company=None):
if not company:
company = self.env.user.company_id
self = self.filtered(lambda r: len(r.code) > 2).sorted(key=lambda r: r.code)
done = 0
# 分隔符 delimiter用友为"",金蝶为 "."注意odoo中一级科目现金默认定义是4位头银行是6位头
# 我们使用 用友的多级科目方式,自动生成下级,此处直接覆盖原生
delimiter = company.coa_delimiter or ''
for rec in self:
if len(rec.code) > 2:
p_code = rec.code[:len(rec.code) - 2]
if delimiter and delimiter != '':
p_code = rec.code[:len(rec.code) - 2 - len(delimiter)]
p_acc = self.search([('company_id', '=', company.id), ('code', '=', p_code)])
if p_acc and rec.parent_id != p_acc:
rec.write({'parent_id': p_acc.id})
done += 1
return {
'effect': {
'fadeout': 'fast',
'message': _('Update parent account chart done.<br/>【%s】 records updated.' % done),
'img_url': '/web/image/%s/%s/image_1024' % (self.env.user._name,
self.env.user.id) if self.env.user.image_1024 else '/web/static/src/img/smile.svg',
'type': 'rainbow_man',
}
}