diff --git a/app_base_chinese/models/res_currency.py b/app_base_chinese/models/res_currency.py index 3f55e337..e78aec28 100644 --- a/app_base_chinese/models/res_currency.py +++ b/app_base_chinese/models/res_currency.py @@ -26,7 +26,7 @@ class ResCurrency(models.Model): xflag = value value = abs(value) # 先把value 数字进行格式化保留两位小数,转成字符串然后去除小数点 - nums = map(int, list(str('%0.2f' % value).replace('.', ''))) + nums = list(map(int, list(str('%0.2f' % value).replace('.', '')))) words = [] zflag = 0 # 标记连续0次数,以删除万字,或适时插入零字 start = len(nums) - 3 diff --git a/app_common/__manifest__.py b/app_common/__manifest__.py index 449ab23f..a8a8fc14 100644 --- a/app_common/__manifest__.py +++ b/app_common/__manifest__.py @@ -33,7 +33,7 @@ { 'name': "Sunpop Odooapp Common Func", - 'version': '13.21.08.26', + 'version': '13.21.09.03', 'author': 'Sunpop.cn', 'category': 'Base', 'website': 'https://www.sunpop.cn', @@ -68,7 +68,7 @@ # 'security/*.xml', # 'security/ir.model.access.csv', # 'data/.xml', - # 'views/ir_module_module_views.xml', + 'views/ir_cron_views.xml', # 'report/.xml', ], 'qweb': [ diff --git a/app_common/i18n/zh_CN.po b/app_common/i18n/zh_CN.po index f1e36e3e..9552e39e 100644 --- a/app_common/i18n/zh_CN.po +++ b/app_common/i18n/zh_CN.po @@ -12,3 +12,18 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" + +#. module: app_common +#: model:ir.model.fields,field_description:app_common.field_ir_cron__trigger_user_id +msgid "Last Trigger User" +msgstr "手动运行用户" + +#. module: app_common +#: model:ir.model,name:app_common.model_ir_cron +msgid "Scheduled Actions" +msgstr "安排的动作" + +#. module: app_common +#: model:ir.model,name:app_common.model_ir_ui_view +msgid "View" +msgstr "查看" diff --git a/app_common/models/__init__.py b/app_common/models/__init__.py index e64a9280..cbd3a54e 100644 --- a/app_common/models/__init__.py +++ b/app_common/models/__init__.py @@ -24,8 +24,9 @@ from . import base from . import fields -# from . import validator +from . import view_validation from . import ir_ui_view +from . import ir_cron from . import res_users diff --git a/app_common/models/base.py b/app_common/models/base.py index a621ed65..26d72f9a 100644 --- a/app_common/models/base.py +++ b/app_common/models/base.py @@ -9,9 +9,56 @@ from io import BytesIO from datetime import date, datetime, time import pytz +import logging + +_logger = logging.getLogger(__name__) + +# 常规的排除的fields +EXCLU_FIELDS = [ + '__last_update', + 'access_token', + 'access_url', + 'access_warning', + 'activity_date_deadline', + 'activity_exception_decoration', + 'activity_exception_icon', + 'activity_ids', + 'activity_state', + 'activity_summary', + 'activity_type_id', + 'activity_user_id', + 'display_name', + 'message_attachment_count', + 'message_channel_ids', + 'message_follower_ids', + 'message_has_error', + 'message_has_error_counter', + 'message_has_sms_error', + 'message_ids', + 'message_is_follower', + 'message_main_attachment_id', + 'message_needaction', + 'message_needaction_counter', + 'message_partner_ids', + 'message_unread', + 'message_unread_counter', + 'website_message_ids', + 'write_date', + 'write_uid', +] + + class Base(models.AbstractModel): _inherit = 'base' + @api.model + def _get_normal_fields(self): + f_list = [] + for k, v in self._fields.items(): + if k not in EXCLU_FIELDS: + f_list.append(k) + return f_list + @api.model def _app_get_m2o_default(self, fieldname, domain=[]): if hasattr(self, fieldname) and self._fields[fieldname].type == 'many2one': @@ -24,16 +71,17 @@ class Base(models.AbstractModel): def _app_dt2local(self, value, return_format=DEFAULT_SERVER_DATETIME_FORMAT): """ - 将value中时间,按格式转为用户本地时间 + 将value中时间,按格式转为用户本地时间.注意只处理in str为字符串类型,如果是时间类型直接用 datetime.now(tz) """ if not value: return value if isinstance(value, datetime): value = value.strftime(return_format) dt = datetime.strptime(value, return_format) - pytz_timezone = pytz.timezone(self.env.user.tz or 'Etc/GMT-8') + user_tz = pytz.timezone(self.env.user.tz or 'Etc/GMT-8') + _logger.warning('============= user2 tz: %s' % user_tz) dt = dt.replace(tzinfo=pytz.timezone('UTC')) - return dt.astimezone(pytz_timezone).strftime(return_format) + return dt.astimezone(user_tz).strftime(return_format) def _app_dt2utc(self, value, return_format=DEFAULT_SERVER_DATETIME_FORMAT): """ @@ -44,9 +92,9 @@ class Base(models.AbstractModel): if isinstance(value, datetime): value = value.strftime(return_format) dt = datetime.strptime(value, return_format) - user_tz = pytz.timezone(self.env.user.tz or 'Etc/GMT+8') + pytz_timezone = pytz.timezone('Etc/GMT+8') dt = dt.replace(tzinfo=pytz.timezone('UTC')) - return dt.astimezone(user_tz).strftime(return_format) + return dt.astimezone(pytz_timezone).strftime(return_format) @api.model def get_image_from_url(self, url): 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/rng/common.rng b/app_common/rng/common.rng index a62f159a..5aff83fc 100644 --- a/app_common/rng/common.rng +++ b/app_common/rng/common.rng @@ -268,6 +268,7 @@ + @@ -276,7 +277,16 @@ - + + + + + + + + + + diff --git a/app_common/rng/tree_view.rng b/app_common/rng/tree_view.rng index f295cdf7..fd800c55 100644 --- a/app_common/rng/tree_view.rng +++ b/app_common/rng/tree_view.rng @@ -46,6 +46,16 @@ + + + + + + + + + +