diff --git a/app_common/__manifest__.py b/app_common/__manifest__.py index 01778359..f6f25b2a 100644 --- a/app_common/__manifest__.py +++ b/app_common/__manifest__.py @@ -43,6 +43,7 @@ 'currency': 'EUR', 'images': ['static/description/banner.png'], 'depends': [ + 'base', 'web', ], 'summary': ''' @@ -67,7 +68,7 @@ # 'security/*.xml', # 'security/ir.model.access.csv', # 'data/.xml', - # 'views/.xml', + # 'views/ir_module_module_views.xml', # 'report/.xml', ], 'qweb': [ diff --git a/app_common/models/__init__.py b/app_common/models/__init__.py index d80621c4..dd546b43 100644 --- a/app_common/models/__init__.py +++ b/app_common/models/__init__.py @@ -24,4 +24,6 @@ from . import base from . import fields +# from . import validator +from . import ir_ui_view diff --git a/app_common/models/ir_ui_view.py b/app_common/models/ir_ui_view.py new file mode 100644 index 00000000..3b40c0d2 --- /dev/null +++ b/app_common/models/ir_ui_view.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- + +from odoo import api, models, tools, SUPERUSER_ID +from odoo.modules.module import get_resource_path +from odoo.tools import view_validation +from odoo.tools.view_validation import _relaxng_cache, validate, _validators +from odoo.tools.safe_eval import safe_eval + +from lxml import etree +import logging +_logger = logging.getLogger(__name__) + +@validate('tree') +def app_valid_field_in_tree(arch, **kwargs): + # 增加 header + return all( + child.tag in ('field', 'button', 'control', 'groupby', 'header') + for child in arch.xpath('/tree/*') + ) + +def app_relaxng(view_type): + """ Return a validator for the given view type, or None. """ + if view_type not in _relaxng_cache: + # tree 特殊 + if view_type == 'tree': + _file = get_resource_path('app_common', 'rng', 'tree_view.rng') + else: + _file = get_resource_path('base', 'rng', '%s_view.rng' % view_type) + with tools.file_open(_file) as frng: + try: + relaxng_doc = etree.parse(frng) + _relaxng_cache[view_type] = etree.RelaxNG(relaxng_doc) + except Exception: + _logger.exception('Failed to load RelaxNG XML schema for views validation') + _relaxng_cache[view_type] = None + _logger.error('==================new rng: %s' % _file) + return _relaxng_cache[view_type] + +def app_reset_valid_view(view_type): + _relaxng_cache = view_validation._relaxng_cache + for pred in _validators[view_type]: + # 要pop掉函数 valid_field_in_tree + if pred.__name__ == 'valid_field_in_tree': + _validators[view_type].remove(pred) + try: + _relaxng_cache.pop(view_type, None) + _relaxng_cache[view_type] = None + except Exception: + pass + _relaxng_cache[view_type] = app_relaxng(view_type) + +app_reset_valid_view('tree') +view_validation.valid_field_in_tree = app_valid_field_in_tree +view_validation.relaxng = app_relaxng + +class View(models.Model): + _inherit = 'ir.ui.view' + + def __init__(self, *args, **kwargs): + super(View, self).__init__(*args, **kwargs) + view_validation.relaxng = app_relaxng + # 重置 tree + app_reset_valid_view('tree') + + # todo: 有可能需要处理增加的 header等标签 + # 直接重写原生方法 + # def transfer_node_to_modifiers(node, modifiers, context=None, in_tree_view=False): diff --git a/app_common/models/validator_old.py b/app_common/models/validator_old.py new file mode 100644 index 00000000..ed6ae118 --- /dev/null +++ b/app_common/models/validator_old.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- + +from odoo import tools, _ +from odoo.modules.module import get_resource_path +from odoo.tools import view_validation +from odoo.tools.view_validation import validate, _validators +from lxml import etree +import logging + + +_logger = logging.getLogger(__name__) + +_relaxng_cache = view_validation._relaxng_cache +_relaxng_cache['tree'] = None +with tools.file_open(get_resource_path('app_common', 'rng', 'tree_view.rng')) as frng: + try: + text = frng.read() + # with tools.file_open('addons/base/rng/common.rng') as common_rng: + # common_txt = common_rng.read() + # start_pos = common_txt.find('', start_pos) + # end_pos = common_txt.find('') + # common_content = common_txt[start_pos + 1: end_pos] + # + # # 从14中学习,最新 common + # # + # old_content = ''' + # + # ''' + # new_content = ''' + # + # + # + # + # + # + # + # + # + # + # + # + # + # ''' + # common_content = common_content.replace(old_content, new_content) + # # common 替代 + # text = text.replace('', common_content) + # # tree 替代 + # old_content = '''''' + # new_content = ''' + # + # + # + # + # ''' + # text = text.replace(old_content, new_content) + # # 增加 fx_tree_table 支持 + # text = text.replace('', + # '') + + tmp_doc = etree.fromstring(text.encode('utf-8')) + _relaxng_cache['tree'] = etree.RelaxNG(tmp_doc) + _logger.warning('=========new tree done: %s' % _relaxng_cache['tree']) + except Exception as error: + _logger.exception('Failed to load RelaxNG XML schema for views validation, {error}'.format( + error=error)) + _relaxng_cache['tree'] = None + + +@validate('tree') +def app_valid_field_in_tree(arch, **kwargs): + # 增加 header + return all( + child.tag in ('field', 'button', 'control', 'groupby', 'header') + for child in arch.xpath('/tree/*') + ) + +view_validation.valid_field_in_tree = app_valid_field_in_tree diff --git a/app_common/rng/activity_view.rng b/app_common/rng/activity_view.rng new file mode 100644 index 00000000..4560d035 --- /dev/null +++ b/app_common/rng/activity_view.rng @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_common/rng/calendar_view.rng b/app_common/rng/calendar_view.rng new file mode 100644 index 00000000..ee51acbd --- /dev/null +++ b/app_common/rng/calendar_view.rng @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + year + month + week + day + + + + + + + + + + + + + + diff --git a/app_common/rng/common.rng b/app_common/rng/common.rng new file mode 100644 index 00000000..af13e03c --- /dev/null +++ b/app_common/rng/common.rng @@ -0,0 +1,433 @@ + + + + + + + + + + + + before + + after + + inside + + replace + + + + + + attributes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_common/rng/graph_view.rng b/app_common/rng/graph_view.rng new file mode 100644 index 00000000..47f547f0 --- /dev/null +++ b/app_common/rng/graph_view.rng @@ -0,0 +1,39 @@ + + + + + + + + + + + bar + pie + line + pivot + + + + + + + + + + + + + + + + + + + + + diff --git a/app_common/rng/pivot_view.rng b/app_common/rng/pivot_view.rng new file mode 100644 index 00000000..23a77407 --- /dev/null +++ b/app_common/rng/pivot_view.rng @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_common/rng/search_view.rng b/app_common/rng/search_view.rng new file mode 100644 index 00000000..dfa6059d --- /dev/null +++ b/app_common/rng/search_view.rng @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_common/rng/search_view_new.rng b/app_common/rng/search_view_new.rng new file mode 100644 index 00000000..cb8ff88d --- /dev/null +++ b/app_common/rng/search_view_new.rng @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_common/rng/tree_view.rng b/app_common/rng/tree_view.rng new file mode 100644 index 00000000..a04eb2b3 --- /dev/null +++ b/app_common/rng/tree_view.rng @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + top + bottom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_common/security/app_security.xml b/app_common/security/app_security.xml deleted file mode 100644 index a4b85605..00000000 --- a/app_common/security/app_security.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - acc_module_user - - - - - - - - - - App... - Helps you manage your ... - 8 - - - - - App User - - - The user will be able to ... - - - - - App Admin - - - The user will be able to config ... - - - - - - - - - - Users are allowed to access their own m/// - - ['|', ('partner_id', 'in', [user.partner_id.id]), ('user_id.id', '=', user.id)] - - - - - diff --git a/app_common/security/ir.model.access.csv b/app_common/security/ir.model.access.csv deleted file mode 100644 index 64f91fa5..00000000 --- a/app_common/security/ir.model.access.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_product_attribute_value_group_user,product_attribute_value_group.user,app_product_variant_pro.model_product_attribute_value_group,base.group_user,1,0,0,0 -access_product_attribute_value_group_manager,product_attribute_value_group.manager,app_product_variant_pro.model_product_attribute_value_group,base.group_erp_manager,1,1,1,1 \ No newline at end of file diff --git a/app_common/views/product_product_views.xml b/app_common/views/product_product_views.xml deleted file mode 100644 index e25deae4..00000000 --- a/app_common/views/product_product_views.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - app.product.product.tree - product.product - - - - - - - - - - Product Manager - ir.actions.act_window - product.product - tree,form - - - diff --git a/app_odoo_customize/i18n/zh_CN.po b/app_odoo_customize/i18n/zh_CN.po index e5f5e426..611caf08 100644 --- a/app_odoo_customize/i18n/zh_CN.po +++ b/app_odoo_customize/i18n/zh_CN.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 13.0+e\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-08-21 06:23+0000\n" -"PO-Revision-Date: 2020-08-21 06:23+0000\n" +"POT-Creation-Date: 2020-10-30 22:13+0000\n" +"PO-Revision-Date: 2020-10-30 22:13+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -17,7 +17,6 @@ msgstr "" #. module: app_odoo_customize #. openerp-web -#: code:addons/app_common13/app_odoo_customize/static/src/xml/res_config_edition.xml:0 #: code:addons/app_odoo_customize/static/src/xml/res_config_edition.xml:0 #, python-format msgid "(Sunpop.cn Professional Edition)" @@ -90,7 +89,6 @@ msgstr "设置为 False 则不显示" #. module: app_odoo_customize #. openerp-web -#: code:addons/app_common13/app_odoo_customize/static/src/xml/customize_user_menu.xml:0 #: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:0 #, python-format msgid "Activate the developer mode" @@ -98,7 +96,6 @@ msgstr "激活开发者模式" #. module: app_odoo_customize #. openerp-web -#: code:addons/app_common13/app_odoo_customize/static/src/xml/customize_user_menu.xml:0 #: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:0 #, python-format msgid "Activate the developer mode (with assets)" @@ -147,7 +144,6 @@ msgstr "数据清理(请谨慎操作!)" #. module: app_odoo_customize #. openerp-web -#: code:addons/app_common13/app_odoo_customize/static/src/xml/customize_user_menu.xml:0 #: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:0 #, python-format msgid "Deactivate the developer mode" @@ -213,7 +209,12 @@ msgstr "删除所有询价单、采购单,采购招标" #. module: app_odoo_customize #: model_terms:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings msgid "Delete All Quality" -msgstr "" +msgstr "删除所有质检单据" + +#. module: app_odoo_customize +#: model_terms:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings +msgid "Delete All Quality Setting" +msgstr "删除所有质检设置" #. module: app_odoo_customize #: model_terms:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings @@ -242,7 +243,6 @@ msgstr "开发者手册链接" #. module: app_odoo_customize #. openerp-web -#: code:addons/app_common13/app_odoo_customize/static/src/xml/customize_user_menu.xml:0 #: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:0 #, python-format msgid "Developer Manual" @@ -305,6 +305,11 @@ msgstr "我的帐户显示标题" msgid "My Odoo.com Account Url" msgstr "我的帐户链接" +#. module: app_odoo_customize +#: model_terms:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings +msgid "Odoo Customize Setting" +msgstr "个性化odoo设置" + #. module: app_odoo_customize #: model_terms:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings msgid "Please confirm to delete the select data?" @@ -316,9 +321,9 @@ msgid "Powered by odooApp" msgstr "技术支持 Sunpop.cn" #. module: app_odoo_customize -#: model:ir.actions.act_window,name:app_odoo_customize.action_server_module_multi_refresh_po -msgid "Refresh Module Translation" -msgstr "更新模块翻译" +#: model:ir.actions.server,name:app_odoo_customize.action_server_module_multi_refresh_po +msgid "Refresh Translation" +msgstr "刷新翻译" #. module: app_odoo_customize #: model_terms:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings @@ -507,14 +512,8 @@ msgstr "启用后,会显示在线支持链接" msgid "When enable,everyone login can see the debug menu" msgstr "启用后,会显示快速调试菜单" -#. module: app_odoo_customize -#: model_terms:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Odoo Customize Setting" -msgstr "个性化odoo设置" - #. module: app_odoo_customize #. openerp-web -#: code:addons/app_common13/app_odoo_customize/static/src/xml/res_config_edition.xml:0 #: code:addons/app_odoo_customize/static/src/xml/res_config_edition.xml:0 #: model:ir.ui.menu,name:app_odoo_customize.menu_app_group #, python-format diff --git a/app_odoo_customize/models/res_config_settings.py b/app_odoo_customize/models/res_config_settings.py index 18619df4..5c447f9f 100644 --- a/app_odoo_customize/models/res_config_settings.py +++ b/app_odoo_customize/models/res_config_settings.py @@ -127,9 +127,9 @@ class ResConfigSettings(models.TransientModel): sql = "delete from %s" % t_name try: self._cr.execute(sql) + self._cr.commit() except Exception as e: _logger.error('remove data error: %s,%s', line, e) - self._cr.commit() # 更新序号 for line in s: domain = [('code', '=ilike', line + '%')] diff --git a/app_odoo_customize/views/ir_module_module_views.xml b/app_odoo_customize/views/ir_module_module_views.xml index 8198f231..f5e4072f 100644 --- a/app_odoo_customize/views/ir_module_module_views.xml +++ b/app_odoo_customize/views/ir_module_module_views.xml @@ -10,8 +10,11 @@ - - + + + + + hide diff --git a/app_odoo_customize/views/ir_views.xml b/app_odoo_customize/views/ir_views.xml index 8c918341..5021a8bc 100644 --- a/app_odoo_customize/views/ir_views.xml +++ b/app_odoo_customize/views/ir_views.xml @@ -14,7 +14,7 @@ - Refresh Module Translation + Refresh Translation ir.actions.server diff --git a/l10n_cn_standard_latest/__manifest__.py b/l10n_cn_standard_latest/__manifest__.py index 2041f6b8..ae13d8ea 100644 --- a/l10n_cn_standard_latest/__manifest__.py +++ b/l10n_cn_standard_latest/__manifest__.py @@ -9,7 +9,7 @@ { 'name': '2020最新中国企业会计表.Latest Chinese Accounting.', - 'version': '13.20.04.11', + 'version': '13.20.10.30', 'author': 'Sunpop.cn', 'category': 'Localization', 'website': 'https://www.sunpop.cn', @@ -50,7 +50,7 @@ """, 'depends': [ 'account', - 'l10n_cn', + 'app_odoo_customize', ], 'images': ['static/description/banner.png'], 'data': [ diff --git a/l10n_cn_standard_latest/data/account_tax_group_data.xml b/l10n_cn_standard_latest/data/account_tax_group_data.xml index a7656736..ccb0dc48 100644 --- a/l10n_cn_standard_latest/data/account_tax_group_data.xml +++ b/l10n_cn_standard_latest/data/account_tax_group_data.xml @@ -3,6 +3,12 @@ VAT 0% + + VAT 3% + + + VAT 6% + VAT 9% diff --git a/l10n_cn_standard_latest/data/account_tax_template_data.xml b/l10n_cn_standard_latest/data/account_tax_template_data.xml index d124f22d..f2d23209 100644 --- a/l10n_cn_standard_latest/data/account_tax_template_data.xml +++ b/l10n_cn_standard_latest/data/account_tax_template_data.xml @@ -72,7 +72,7 @@ 13%销项税(含) - 增值税销项税13%,单价含税 + 增值税销项税13%(价内税) 13 percent sale @@ -106,7 +106,7 @@ 10%销项税(含) - 增值税销项税10%,单价含税 + 增值税销项税10%(价内税) 10 percent sale @@ -140,7 +140,7 @@ 9%销项税(含) - 增值税销项税9%,单价含税 + 增值税销项税9%(价内税) 9 percent sale @@ -174,13 +174,13 @@ 6%销项税(含) - 增值税销项税6%,单价含税 + 增值税销项税6%(价内税) 6 percent sale 6 - + 3%销项税(含) - 增值税销项税3%,单价含税 + 增值税销项税3%(价内税) 3 percent sale 3 - + 13%销项税 - 增值税销项税13%,单价不含税 + 增值税销项税13%(价外税) 13 percent sale @@ -276,7 +276,7 @@ 10%销项税 - 增值税销项税10%,单价不含税 + 增值税销项税10%(价外税) 10 percent sale @@ -310,7 +310,7 @@ 9%销项税 - 增值税销项税9%,单价不含税 + 增值税销项税9%(价外税) 9 percent sale @@ -344,13 +344,13 @@ 6%销项税 - 增值税销项税6%,单价不含税 + 增值税销项税6%(价外税) 6 percent sale 6 - + 3%销项税 - 增值税销项税3%,单价不含税 + 增值税销项税3%(价外税) 3 percent sale 3 - + 13%进项税 - 增值税进项税13%,单价不含税 + 增值税进项税13%(价外税) 13 percent purchase @@ -447,7 +447,7 @@ 10%进项税 - 增值税进项税10%,单价不含税 + 增值税进项税10%(价外税) 10 percent purchase @@ -481,7 +481,7 @@ 9%进项税 - 增值税进项税9%,单价不含税 + 增值税进项税9%(价外税) 9 percent purchase @@ -515,13 +515,13 @@ 6%进项税 - 增值税进项税6%,单价不含税 + 增值税进项税6%(价外税) 6 percent purchase 6 - + 3%进项税 - 增值税进项税3%,单价不含税 + 增值税进项税3%(价外税) 3 percent purchase 3 - +