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
-
+