← Back to team overview

openerp-india team mailing list archive

[Bug 1188538] Re: mail_thread._message_get_auto_subscribe_fields needs a tracking_visibility to track a field

 

** Description changed:

  Concerns the method
  openerp.addons.mail.mail_thread.mail_thread._message_get_auto_subscribe_fields:
  
-     def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
-         """ Returns the list of relational fields linking to res.users that should
-             trigger an auto subscribe. The default list checks for the fields
-             - called 'user_id'
-             - linking to res.users
-             - with track_visibility set
-             In OpenERP V7, this is sufficent for all major addon such as opportunity,
-             project, issue, recruitment, sale.
-             Override this method if a custom behavior is needed about fields
-             that automatically subscribe users.
-         """
-         user_field_lst = []
-         for name, column_info in self._all_columns.items():
-             if name in auto_follow_fields and name in updated_fields and getattr(column_info.column, 'track_visibility', False) and column_info.column._obj == 'res.users':
-                 user_field_lst.append(name)
-         return user_field_lst
+     def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
+         """ Returns the list of relational fields linking to res.users that should
+             trigger an auto subscribe. The default list checks for the fields
+             - called 'user_id'
+             - linking to res.users
+             - with track_visibility set
+             In OpenERP V7, this is sufficent for all major addon such as opportunity,
+             project, issue, recruitment, sale.
+             Override this method if a custom behavior is needed about fields
+             that automatically subscribe users.
+         """
+         user_field_lst = []
+         for name, column_info in self._all_columns.items():
+             if name in auto_follow_fields and name in updated_fields and getattr(column_info.column, 'track_visibility', False) and column_info.column._obj == 'res.users':
+                 user_field_lst.append(name)
+         return user_field_lst
  
  (BTW, unrelated to my issue but the auto_follow_fields arg should
  probably not be a mutable argument.)
  
- 
  Use case:
  
- I create a class, I want to automatically subscribe a 'specialist_user_id' when defined so he will receive message.
+ I create a model, I want to automatically subscribe a 'specialist_user_id' when defined so he will receive message.
  Note: the model does not automatically track and displays the changes.
  
+     class my_model(orm.Model):
+         _name = 'my.model'
+         _inherit = ['mail.thread']
  
-     class my_model(orm.Model):
-         _name = 'my.model'
-         _inherit = ['mail.thread']
+         _columns = {
+             'name': fields.char('Name'),
+             'user_id': fields.many2one('res.users', string='User'),
+             'specialist_user_id': fields.many2one('res.users', string='Specialist'),
+         }
  
-         _columns = {
-             'name': fields.char('Name'),
-             'user_id': fields.many2one('res.users', string='User'),
-             'specialist_user_id': fields.many2one('res.users', string='Specialist'),
-         }
- 
-         def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
-             follow_fields =  ['specialist_user_id']
-             follow_fields += auto_follow_fields
-             return super(my_model, self)._message_get_auto_subscribe_fields(cr, uid, updated_fields, auto_follow_fields=follow_fields, context=context)
+         def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
+             follow_fields =  ['specialist_user_id']
+             follow_fields += auto_follow_fields
+             return super(my_model, self)._message_get_auto_subscribe_fields(cr, uid, updated_fields, auto_follow_fields=follow_fields, context=context)
  
  Result:
  
  user_id and specialist_user_id are not subscribed when changed
-     
+ 
  Expected:
  
  user_id and specialist_user_id are subscribed when changed
  
  Note:
  
  If I put the _columns:
  
-         _columns = {
-             'name': fields.char('Name'),
-             'user_id': fields.many2one('res.users', string='User', track_visibility='onchange'),
-             'specialist_user_id': fields.many2one('res.users', string='Specialist', track_visibility='onchange'),
-         }
+         _columns = {
+             'name': fields.char('Name'),
+             'user_id': fields.many2one('res.users', string='User', track_visibility='onchange'),
+             'specialist_user_id': fields.many2one('res.users', string='Specialist', track_visibility='onchange'),
+         }
  
- It works, but I don't understand what is the relation between the track_visibility and the auto subscription. 
+ It works, but I don't understand what is the relation between the track_visibility and the auto subscription.
  I think that's 2 different things and that I shouldn't need to define a track_visibility to subscribe the users.
  
  Workaround:
  
  Define the columns with a dummy track_visibility as follows:
  
-         _columns = {
-             'name': fields.char('Name'),
-             'user_id': fields.many2one('res.users', string='User', track_visibility='never'),
-             'specialist_user_id': fields.many2one('res.users', string='Specialist', track_visibility='never'),
-         }
+         _columns = {
+             'name': fields.char('Name'),
+             'user_id': fields.many2one('res.users', string='User', track_visibility='never'),
+             'specialist_user_id': fields.many2one('res.users', string='Specialist', track_visibility='never'),
+         }

** Description changed:

  Concerns the method
  openerp.addons.mail.mail_thread.mail_thread._message_get_auto_subscribe_fields:
  
      def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
          """ Returns the list of relational fields linking to res.users that should
              trigger an auto subscribe. The default list checks for the fields
              - called 'user_id'
              - linking to res.users
              - with track_visibility set
              In OpenERP V7, this is sufficent for all major addon such as opportunity,
              project, issue, recruitment, sale.
              Override this method if a custom behavior is needed about fields
              that automatically subscribe users.
          """
          user_field_lst = []
          for name, column_info in self._all_columns.items():
              if name in auto_follow_fields and name in updated_fields and getattr(column_info.column, 'track_visibility', False) and column_info.column._obj == 'res.users':
                  user_field_lst.append(name)
          return user_field_lst
  
  (BTW, unrelated to my issue but the auto_follow_fields arg should
  probably not be a mutable argument.)
  
  Use case:
  
- I create a model, I want to automatically subscribe a 'specialist_user_id' when defined so he will receive message.
+ I create a model, I want to automatically subscribe a 'specialist_user_id' when defined so he will receive messages.
  Note: the model does not automatically track and displays the changes.
  
      class my_model(orm.Model):
          _name = 'my.model'
          _inherit = ['mail.thread']
  
          _columns = {
              'name': fields.char('Name'),
              'user_id': fields.many2one('res.users', string='User'),
              'specialist_user_id': fields.many2one('res.users', string='Specialist'),
          }
  
          def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
              follow_fields =  ['specialist_user_id']
              follow_fields += auto_follow_fields
              return super(my_model, self)._message_get_auto_subscribe_fields(cr, uid, updated_fields, auto_follow_fields=follow_fields, context=context)
  
  Result:
  
  user_id and specialist_user_id are not subscribed when changed
  
  Expected:
  
  user_id and specialist_user_id are subscribed when changed
  
  Note:
  
  If I put the _columns:
  
          _columns = {
              'name': fields.char('Name'),
              'user_id': fields.many2one('res.users', string='User', track_visibility='onchange'),
              'specialist_user_id': fields.many2one('res.users', string='Specialist', track_visibility='onchange'),
          }
  
  It works, but I don't understand what is the relation between the track_visibility and the auto subscription.
  I think that's 2 different things and that I shouldn't need to define a track_visibility to subscribe the users.
  
  Workaround:
  
  Define the columns with a dummy track_visibility as follows:
  
          _columns = {
              'name': fields.char('Name'),
              'user_id': fields.many2one('res.users', string='User', track_visibility='never'),
              'specialist_user_id': fields.many2one('res.users', string='Specialist', track_visibility='never'),
          }

-- 
You received this bug notification because you are a member of OpenERP
Indian Team, which is subscribed to OpenERP Addons.
https://bugs.launchpad.net/bugs/1188538

Title:
  mail_thread._message_get_auto_subscribe_fields needs a
  tracking_visibility to track a field

Status in OpenERP Addons (modules):
  New

Bug description:
  Concerns the method
  openerp.addons.mail.mail_thread.mail_thread._message_get_auto_subscribe_fields:

      def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
          """ Returns the list of relational fields linking to res.users that should
              trigger an auto subscribe. The default list checks for the fields
              - called 'user_id'
              - linking to res.users
              - with track_visibility set
              In OpenERP V7, this is sufficent for all major addon such as opportunity,
              project, issue, recruitment, sale.
              Override this method if a custom behavior is needed about fields
              that automatically subscribe users.
          """
          user_field_lst = []
          for name, column_info in self._all_columns.items():
              if name in auto_follow_fields and name in updated_fields and getattr(column_info.column, 'track_visibility', False) and column_info.column._obj == 'res.users':
                  user_field_lst.append(name)
          return user_field_lst

  (BTW, unrelated to my issue but the auto_follow_fields arg should
  probably not be a mutable argument.)

  Use case:

  I create a model, I want to automatically subscribe a 'specialist_user_id' when defined so he will receive messages.
  Note: the model does not automatically track and displays the changes.

      class my_model(orm.Model):
          _name = 'my.model'
          _inherit = ['mail.thread']

          _columns = {
              'name': fields.char('Name'),
              'user_id': fields.many2one('res.users', string='User'),
              'specialist_user_id': fields.many2one('res.users', string='Specialist'),
          }

          def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
              follow_fields =  ['specialist_user_id']
              follow_fields += auto_follow_fields
              return super(my_model, self)._message_get_auto_subscribe_fields(cr, uid, updated_fields, auto_follow_fields=follow_fields, context=context)

  Result:

  user_id and specialist_user_id are not subscribed when changed

  Expected:

  user_id and specialist_user_id are subscribed when changed

  Note:

  If I put the _columns:

          _columns = {
              'name': fields.char('Name'),
              'user_id': fields.many2one('res.users', string='User', track_visibility='onchange'),
              'specialist_user_id': fields.many2one('res.users', string='Specialist', track_visibility='onchange'),
          }

  It works, but I don't understand what is the relation between the track_visibility and the auto subscription.
  I think that's 2 different things and that I shouldn't need to define a track_visibility to subscribe the users.

  Workaround:

  Define the columns with a dummy track_visibility as follows:

          _columns = {
              'name': fields.char('Name'),
              'user_id': fields.many2one('res.users', string='User', track_visibility='never'),
              'specialist_user_id': fields.many2one('res.users', string='Specialist', track_visibility='never'),
          }

To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-addons/+bug/1188538/+subscriptions