diff --git a/app_common/__manifest__.py b/app_common/__manifest__.py
index 376bf4da..e5e118cf 100644
--- a/app_common/__manifest__.py
+++ b/app_common/__manifest__.py
@@ -33,7 +33,7 @@
{
'name': "Sunpop Odooapp Common Func",
- 'version': '13.21.08.03',
+ 'version': '13.21.06.13',
'author': 'Sunpop.cn',
'category': 'Base',
'website': 'https://www.sunpop.cn',
diff --git a/app_common/models/ir_ui_view.py b/app_common/models/ir_ui_view.py
index bed01195..a864de21 100644
--- a/app_common/models/ir_ui_view.py
+++ b/app_common/models/ir_ui_view.py
@@ -22,7 +22,7 @@ def app_relaxng(view_type):
""" Return a validator for the given view type, or None. """
if view_type not in _relaxng_cache:
# tree, search 特殊
- if view_type in ['tree', 'search']:
+ if view_type in ['tree', 'search', 'pivot']:
_file = get_resource_path('app_common', 'rng', '%s_view.rng' % view_type)
else:
_file = get_resource_path('base', 'rng', '%s_view.rng' % view_type)
diff --git a/app_common/models/view_validation.py b/app_common/models/view_validation.py
index 7bfa746e..e6bac36e 100644
--- a/app_common/models/view_validation.py
+++ b/app_common/models/view_validation.py
@@ -3,6 +3,7 @@
import ast
from odoo.tools import view_validation
from odoo.tools.view_validation import get_attrs_field_names as old_gafn
+from odoo.tools.view_validation import _get_attrs_symbols
import logging
_logger = logging.getLogger(__name__)
@@ -18,25 +19,42 @@ ATTRS_WITH_FIELD_NAMES2 = {
'decoration-primary',
'decoration-success',
'decoration-warning',
+ 'decoration-black',
+ 'decoration-white',
'bg-danger',
'bg-info',
'bg-muted',
'bg-primary',
'bg-success',
'bg-warning',
+ 'bg-black',
+ 'bg-white',
}
def app_get_attrs_field_names(env, arch, model, editable):
+ symbols = _get_attrs_symbols() | {None}
result = []
- def add_bg(node, model, editable, get=old_gafn.get_name):
+ def get_name(node):
+ """ return the name from an AST node, or None """
+ if isinstance(node, ast.Name):
+ return node.id
+
+ def process_expr(expr, get, key, val):
+ """ parse `expr` and collect triples """
+ for node in ast.walk(ast.parse(expr.strip(), mode='eval')):
+ name = get(node)
+ if name not in symbols:
+ result.append((name, key, val))
+
+ def add_bg(node, model, editable, get=get_name):
for key, val in node.items():
if not val:
continue
if key in ATTRS_WITH_FIELD_NAMES2:
- old_gafn.process_expr(val, get, key, val)
+ process_expr(val, get, key, val)
- res = old_gafn(arch, model, editable)
+ res = old_gafn(env, arch, model, editable)
add_bg(arch, model, editable)
res += result
return res
diff --git a/app_common/rng/common.rng b/app_common/rng/common.rng
index 75914955..5aff83fc 100644
--- a/app_common/rng/common.rng
+++ b/app_common/rng/common.rng
@@ -277,12 +277,16 @@
+
+
+
+
diff --git a/app_common/rng/tree_view.rng b/app_common/rng/tree_view.rng
index 5a6ab2fb..fd800c55 100644
--- a/app_common/rng/tree_view.rng
+++ b/app_common/rng/tree_view.rng
@@ -46,12 +46,16 @@
+
+
+
+