From a0ff4c8ebfd1f8d5602e063f980122844179ce4f Mon Sep 17 00:00:00 2001 From: Ivan Office Date: Fri, 13 Dec 2024 01:51:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96account=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_account_ztree/__manifest__.py | 17 +--- app_account_ztree/i18n/zh_CN.po | 89 +++++++++++++++++- app_account_ztree/models/__init__.py | 4 + app_account_ztree/models/account_account.py | 71 ++++++++++++++ app_account_ztree/models/res_company.py | 18 ++++ .../static/description/banner.png | Bin 0 -> 44776 bytes .../static/description/index.html | 14 +-- .../views/account_account_views.xml | 22 ++++- app_account_ztree/views/res_company_views.xml | 15 +++ l10n_cn_standard_latest/__manifest__.py | 5 +- .../models/account_account.py | 23 +---- .../views/account_account_views.xml | 43 --------- .../views/account_views.xml | 8 -- 13 files changed, 224 insertions(+), 105 deletions(-) create mode 100644 app_account_ztree/models/account_account.py create mode 100644 app_account_ztree/models/res_company.py create mode 100644 app_account_ztree/static/description/banner.png create mode 100644 app_account_ztree/views/res_company_views.xml delete mode 100644 l10n_cn_standard_latest/views/account_views.xml diff --git a/app_account_ztree/__manifest__.py b/app_account_ztree/__manifest__.py index 1eb4f02e..601fe223 100644 --- a/app_account_ztree/__manifest__.py +++ b/app_account_ztree/__manifest__.py @@ -17,7 +17,7 @@ { 'name': "App Account Multi Level Chart, parent children tree", - 'version': '24.06.13', + 'version': '17.0.24.12.12', 'author': 'odooai.cn', 'category': 'Extra tools', 'website': 'https://www.odooai.cn', @@ -38,22 +38,11 @@ 'currency': 'EUR', 'depends': [ 'account', - 'l10n_cn_standard_latest', ], - 'images': ['static/description/banner.gif'], + 'images': ['static/description/banner.png'], 'data': [ 'views/account_account_views.xml', - ], - 'demo': [ - ], - 'test': [ - ], - 'css': [ - ], - 'qweb': [ - 'static/src/xml/*.xml', - ], - 'js': [ + 'views/res_company_views.xml', ], 'post_load': None, 'post_init_hook': 'post_init_hook', diff --git a/app_account_ztree/i18n/zh_CN.po b/app_account_ztree/i18n/zh_CN.po index f1e36e3e..77fc9d79 100644 --- a/app_account_ztree/i18n/zh_CN.po +++ b/app_account_ztree/i18n/zh_CN.po @@ -1,14 +1,95 @@ # Translation of Odoo Server. +# This file contains the translation of the following modules: +# * app_account_ztree # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 16.0+e-20231112\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-01-08 14:28+0000\n" -"PO-Revision-Date: 2018-01-08 14:28+0000\n" -"Last-Translator: <>\n" +"POT-Creation-Date: 2024-12-12 14:09+0000\n" +"PO-Revision-Date: 2024-12-12 14:09+0000\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" + +#. module: app_account_ztree +#: model:ir.model,name:app_account_ztree.model_account_account +msgid "Account" +msgstr "科目" + +#. module: app_account_ztree +#: model:ir.model,name:app_account_ztree.model_account_chart_template +msgid "Account Chart Template" +msgstr "科目表模版" + +#. module: app_account_ztree +#: model:ir.model.fields,field_description:app_account_ztree.field_res_company__coa_delimiter +msgid "COA Delimiter" +msgstr "会计科目分隔符" + +#. module: app_account_ztree +#. odoo-python +#: code:addons/app_account_ztree/models/account_chart_template.py:0 +#, python-format +msgid "Cannot generate an unused account code." +msgstr "无法生成关联会计科目" + +#. module: app_account_ztree +#: model:ir.model.fields,field_description:app_account_ztree.field_account_account__child_ids +#: model:ir.model.fields,field_description:app_account_ztree.field_account_account_template__child_ids +msgid "Child Chart" +msgstr "下级科目" + +#. module: app_account_ztree +#: model:ir.model.fields,field_description:app_account_ztree.field_account_chart_template__delimiter +msgid "Code Delimiter" +msgstr "分隔符" + +#. module: app_account_ztree +#: model:ir.model,name:app_account_ztree.model_res_company +msgid "Companies" +msgstr "公司" + +#. module: app_account_ztree +#: model:ir.model.fields,help:app_account_ztree.field_account_chart_template__delimiter +msgid "Delimiter after parent account chart" +msgstr "本会计科目与上级科目之前的分隔符" + +#. module: app_account_ztree +#: model:ir.model.fields,help:app_account_ztree.field_res_company__coa_delimiter +msgid "Delimiter after parent account in Chart of Accounts" +msgstr "当前会计科目表中,下级科目与上级科目之前的分隔符" + +#. module: app_account_ztree +#. odoo-python +#: code:addons/app_account_ztree/models/account_chart_template.py:0 +#, python-format +msgid "Liquidity Transfer" +msgstr "流动性转移" + +#. module: app_account_ztree +#: model:ir.model.fields,field_description:app_account_ztree.field_account_account__parent_id +#: model:ir.model.fields,field_description:app_account_ztree.field_account_account_template__parent_id +msgid "Parent Chart" +msgstr "上级科目" + +#. module: app_account_ztree +#: model:ir.model.fields,field_description:app_account_ztree.field_account_account__parent_path +#: model:ir.model.fields,field_description:app_account_ztree.field_account_account_template__parent_path +msgid "Parent Path" +msgstr "树状级别路径" + +#. module: app_account_ztree +#: model:ir.model,name:app_account_ztree.model_account_account_template +msgid "Templates for Accounts" +msgstr "会计科目模板" + +#. module: app_account_ztree +#. odoo-python +#: code:addons/app_account_ztree/models/account_account.py:0 +#, python-format +msgid "Update parent account chart done.
【%s】 records updated." +msgstr "更新会计科目表上下级关系完成。
【%s】 条记录更新完成。" diff --git a/app_account_ztree/models/__init__.py b/app_account_ztree/models/__init__.py index 40a96afc..18174e1d 100644 --- a/app_account_ztree/models/__init__.py +++ b/app_account_ztree/models/__init__.py @@ -1 +1,5 @@ # -*- coding: utf-8 -*- + +from . import account_account +from . import res_company + diff --git a/app_account_ztree/models/account_account.py b/app_account_ztree/models/account_account.py new file mode 100644 index 00000000..a3b38a3c --- /dev/null +++ b/app_account_ztree/models/account_account.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- + +# Created on 2018-11-28 +# author: 欧度智能,https://www.odooai.cn +# email: 300883@qq.com +# resource of odooai +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +# Odoo在线中文用户手册(长期更新) +# https://www.odooai.cn/documentation/user/10.0/zh_CN/index.html + +# Odoo10离线中文用户手册下载 +# https://www.odooai.cn/odoo10_user_manual_document_offline/ +# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) +# https://www.odooai.cn/odoo10_developer_document_offline/ +# description: + +from odoo import api, fields, models, _ +from odoo.exceptions import UserError, ValidationError + +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, cache=None): + # 分隔符,金蝶为 ".",用友为"",注意odoo中一级科目,现金默认定义是4位头,银行是6位头 + delimiter = '.' + for num in range(1, 100): + new_code = str(prefix.ljust(digits - 1, '0')) + delimiter + '%02d' % (num) + if new_code in (cache or []): + continue + rec = self.search([('code', '=', new_code), ('company_id', 'child_of', company.root_id.id)], limit=1) + if not rec: + return new_code + raise UserError(_('Cannot generate an unused account code.')) + + 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.
【%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', + } + } diff --git a/app_account_ztree/models/res_company.py b/app_account_ztree/models/res_company.py new file mode 100644 index 00000000..6d6f173e --- /dev/null +++ b/app_account_ztree/models/res_company.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +from datetime import timedelta, datetime, date +import calendar + +from odoo import fields, models, api, _ +from odoo.exceptions import ValidationError, UserError, RedirectWarning +from odoo.tools.mail import is_html_empty +from odoo.tools.misc import format_date +from odoo.tools.float_utils import float_round, float_is_zero +from odoo.addons.account.models.account_move import MAX_HASH_VERSION + + +class ResCompany(models.Model): + _inherit = ['res.company'] + + coa_delimiter = fields.Char(string='COA Delimiter', readonly=False, default='.', + help='Delimiter after parent account in Chart of Accounts') diff --git a/app_account_ztree/static/description/banner.png b/app_account_ztree/static/description/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..bc8118fab6d7395af1684f56012ffd12f231b567 GIT binary patch literal 44776 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 - + Extend features. superbar advance search navigator @@ -52,19 +52,19 @@ @@ -120,7 +120,7 @@

 

-

(!Need extra module and pay, release soon)Easy to navigator.

+

(!Need extra module and pay)Easy to navigator.

Product, employee in kanban view

@@ -130,7 +130,7 @@
-

(!Need extra module and pay, release soon)List view

+

(!Need extra module and pay)List view

diff --git a/app_account_ztree/views/account_account_views.xml b/app_account_ztree/views/account_account_views.xml index 05be2788..414d8061 100644 --- a/app_account_ztree/views/account_account_views.xml +++ b/app_account_ztree/views/account_account_views.xml @@ -1,14 +1,28 @@ - + + + app.account.account.list.view + account.account + + + + code + + + + + + + app.account.account.form account.account - - ztree_select - + + + diff --git a/app_account_ztree/views/res_company_views.xml b/app_account_ztree/views/res_company_views.xml new file mode 100644 index 00000000..8372257d --- /dev/null +++ b/app_account_ztree/views/res_company_views.xml @@ -0,0 +1,15 @@ + + + + + app.res.company.form + res.company + + + + + + + + + diff --git a/l10n_cn_standard_latest/__manifest__.py b/l10n_cn_standard_latest/__manifest__.py index 2209a417..c906cacd 100644 --- a/l10n_cn_standard_latest/__manifest__.py +++ b/l10n_cn_standard_latest/__manifest__.py @@ -9,7 +9,7 @@ { 'name': '2024最新中国会计科目表.企业标准会计.Latest Chinese Accounting for odoo17', - 'version': '24.11.08', + 'version': '17.0.24.12.13', 'author': 'odooai.cn', 'category': 'Accounting/Localizations/Account Charts', 'website': 'https://www.odooai.cn', @@ -47,13 +47,12 @@ * 税金模板 """, 'depends': [ - 'account', + 'app_account_ztree', 'app_odoo_customize', ], 'images': ['static/description/banner.png'], 'data': [ 'views/account_account_views.xml', - 'views/account_views.xml', 'data/account_account_tag_data.xml', 'report/account_report.xml', 'report/report_voucher.xml', diff --git a/l10n_cn_standard_latest/models/account_account.py b/l10n_cn_standard_latest/models/account_account.py index 47ff2bc5..b7528579 100644 --- a/l10n_cn_standard_latest/models/account_account.py +++ b/l10n_cn_standard_latest/models/account_account.py @@ -16,28 +16,7 @@ # description: from odoo import api, fields, models, _ -from odoo.exceptions import UserError, ValidationError 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, cache=None): - # 分隔符,金蝶为 ".",用友为"",注意odoo中一级科目,现金默认定义是4位头,银行是6位头 - delimiter = '.' - for num in range(1, 100): - new_code = str(prefix.ljust(digits - 1, '0')) + delimiter + '%02d' % (num) - if new_code in (cache or []): - continue - rec = self.search([('code', '=', new_code), ('company_id', 'child_of', company.root_id.id)], limit=1) - if not rec: - return new_code - raise UserError(_('Cannot generate an unused account code.')) + # 相关方法处理移至 app_account_ztree diff --git a/l10n_cn_standard_latest/views/account_account_views.xml b/l10n_cn_standard_latest/views/account_account_views.xml index 1ad3caa8..61063e27 100644 --- a/l10n_cn_standard_latest/views/account_account_views.xml +++ b/l10n_cn_standard_latest/views/account_account_views.xml @@ -2,48 +2,5 @@ - - app.account.list - account.account - - - - code - - - - - - - - app.account.setup.opening.move.line.tree - account.account - - - - - - - - - app.account.account.form - account.account - - - - - - - - - app.account.account.search - account.account - - - - - - - diff --git a/l10n_cn_standard_latest/views/account_views.xml b/l10n_cn_standard_latest/views/account_views.xml deleted file mode 100644 index 3825c261..00000000 --- a/l10n_cn_standard_latest/views/account_views.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - -