From 3d2c6a138d5170d8071061943b5e0d3651b6a5c9 Mon Sep 17 00:00:00 2001 From: ivan deng Date: Sat, 24 Oct 2020 22:55:27 +0800 Subject: [PATCH] add super m2o, o2m --- app_base_chinese/__manifest__.py | 2 +- app_base_chinese/hooks.py | 6 +-- app_common/models/__init__.py | 2 + app_common/models/fields.py | 48 +++++++++++++++++++ .../views/product_category_views.xml | 2 +- 5 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 app_common/models/fields.py diff --git a/app_base_chinese/__manifest__.py b/app_base_chinese/__manifest__.py index 57536704..44b9e7ee 100644 --- a/app_base_chinese/__manifest__.py +++ b/app_base_chinese/__manifest__.py @@ -18,7 +18,7 @@ { 'name': "App base chinese,中国化基本模块增强", - 'version': '13.20.09.19', + 'version': '13.20.10.19', 'author': 'Sunpop.cn', 'category': 'Base', 'website': 'https://www.sunpop.cn', diff --git a/app_base_chinese/hooks.py b/app_base_chinese/hooks.py index 519e6004..9db55990 100644 --- a/app_base_chinese/hooks.py +++ b/app_base_chinese/hooks.py @@ -33,13 +33,13 @@ def post_init_hook(cr, registry): env = api.Environment(cr, SUPERUSER_ID, {}) ids = env['product.category'].sudo().with_context(lang='zh_CN').search([ ('parent_id', '!=', False) - ], order='complete_name') + ], order='parent_path') for rec in ids: rec._compute_complete_name() ids = env['stock.location'].sudo().with_context(lang='zh_CN').search([ ('location_id', '!=', False), ('usage', '!=', 'views'), - ], order='complete_name') + ], order='parent_path') for rec in ids: rec._compute_complete_name() # 超级用户改时区为中国 @@ -52,4 +52,4 @@ def uninstall_hook(cr, registry): """ 数据初始化,卸载时执行 """ - pass \ No newline at end of file + pass diff --git a/app_common/models/__init__.py b/app_common/models/__init__.py index 736cc270..d80621c4 100644 --- a/app_common/models/__init__.py +++ b/app_common/models/__init__.py @@ -23,3 +23,5 @@ # description: from . import base +from . import fields + diff --git a/app_common/models/fields.py b/app_common/models/fields.py new file mode 100644 index 00000000..2d34e486 --- /dev/null +++ b/app_common/models/fields.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- + +from odoo.fields import Field, resolve_mro +from odoo.fields import Selection as oldSelection +from odoo.tools import merge_sequences +import logging + +_logger = logging.getLogger(__name__) + +class Selection(Field): + def _setup_attrs_app(self, model, name): + Field._setup_attrs(self, model, name) + + # determine selection (applying 'selection_add' extensions) + values = None + labels = {} + + for field in reversed(resolve_mro(model, name, self._can_setup_from)): + # We cannot use field.selection or field.selection_add here + # because those attributes are overridden by ``_setup_attrs``. + if 'selection' in field.args: + selection = field.args['selection'] + if isinstance(selection, list): + if ( + values is not None + and values != [kv[0] for kv in selection] + ): + _logger.debug("%s: selection=%r overrides existing selection; use selection_add instead", self, selection) + values = [kv[0] for kv in selection] + labels = dict(selection) + else: + self.selection = selection + values = None + labels = {} + + if 'selection_add' in field.args: + selection_add = field.args['selection_add'] + assert isinstance(selection_add, list), \ + "%s: selection_add=%r must be a list" % (self, selection_add) + assert values is not None, \ + "%s: selection_add=%r on non-list selection %r" % (self, selection_add, self.selection) + values = merge_sequences(values, [kv[0] for kv in selection_add]) + labels.update(kv for kv in selection_add if len(kv) == 2) + + if values is not None: + self.selection = [(value, labels[value]) for value in values] + +oldSelection._setup_attrs = Selection._setup_attrs_app \ No newline at end of file diff --git a/app_product_category_zchart/views/product_category_views.xml b/app_product_category_zchart/views/product_category_views.xml index 04e33cb1..7c9c758a 100644 --- a/app_product_category_zchart/views/product_category_views.xml +++ b/app_product_category_zchart/views/product_category_views.xml @@ -5,7 +5,7 @@ product.category - +