From ef4bc9b9c67ee750107a28350aed8a3008d5e8a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 17 Dec 2012 20:10:59 +0100 Subject: [PATCH] [IMP] tracked: models now have a _track attribute, telling the subtype to use for logging tracked fields. tracked attribute on columns become _track_visibility, telling if a field must always be logged or only when changed (to keep context value in logging message). bzr revid: tde@openerp.com-20121217191059-g5jdm0yjee1gttta --- openerp/osv/fields.py | 13 +++++++------ openerp/osv/orm.py | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index 95b0ef67199..b7dff94b3f1 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -80,11 +80,12 @@ class _column(object): _symbol_f = _symbol_set _symbol_set = (_symbol_c, _symbol_f) _symbol_get = None - # used to hide a certain field type in the list of field types _deprecated = False + # used for automatic logging system if mail installed (should be 'on_change' or 'always') + _track_visibility = False - def __init__(self, string='unknown', required=False, readonly=False, domain=None, context=None, states=None, priority=0, change_default=False, size=None, ondelete=None, translate=False, select=False, manual=False, tracked=False, **args): + def __init__(self, string='unknown', required=False, readonly=False, domain=None, context=None, states=None, priority=0, change_default=False, size=None, ondelete=None, translate=False, select=False, manual=False, track_visibility=False, **args): """ The 'manual' keyword argument specifies if the field is a custom one. @@ -103,7 +104,7 @@ class _column(object): self.help = args.get('help', '') self.priority = priority self.change_default = change_default - self.ondelete = ondelete.lower() if ondelete else None # defaults to 'set null' in ORM + self.ondelete = ondelete.lower() if ondelete else None # defaults to 'set null' in ORM self.translate = translate self._domain = domain self._context = context @@ -113,14 +114,14 @@ class _column(object): self.select = select self.manual = manual self.selectable = True - self.tracked = tracked # Automatic logging system if mail installed + self._track_visibility = track_visibility self.group_operator = args.get('group_operator', False) self.groups = False # CSV list of ext IDs of groups that can access this field - self.deprecated = False # Optional deprecation warning + self.deprecated = False # Optional deprecation warning for a in args: if args[a]: setattr(self, a, args[a]) - + def restart(self): pass diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index eb5b9f29955..f5e46f71d1b 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -677,6 +677,23 @@ class BaseModel(object): _description = None _needaction = False + # Automatic logging system if mail installed + # _track = { + # 'field': { + # 'module.subtype_xml': lambda self, cr, uid, obj, context=None: obj.state == done, + # 'module.subtype_xml2': lambda self, cr, uid, obj, context=None: obj.state != done, + # }, + # 'field2': { + # ... + # }, + # } + # where + # :param string field: field name + # :param module.subtype_xml: xml_id of a mail.message.subtype (i.e. mail.mt_comment) + # :param obj: is a browse_record + # :param function lambda: returns whether the tracking should record using this subtype + _track = {} + # dict of {field:method}, with method returning the (name_get of records, {id: fold}) # to include in the _read_group, if grouped on this field _group_by_full = {}