diff --git a/addons/project/project.py b/addons/project/project.py index 3bda5ad128e..dc80897f8c8 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -67,6 +67,23 @@ class project(osv.osv): return super(project, self).search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count) + def write(self, cr, uid, ids, vals, context=None): + if context is None: + context = {} + for project_id in self.browse(cr, uid, ids, context): + if vals.get('members'): + members = self.pool.get('res.users').browse(cr, uid, vals.get('members')[0][-1], context) + else: + members = project_id.members or False + select = vals.get('privacy_visility') or project_id.privacy_visility or False + if select=='follower' and members: + member_list = [member.id for member in members] + followers = self.message_get_subscribers_ids(cr, uid, ids, context=context) + for member_id in member_list: + if not member_id in followers: + self.message_subscribe(cr, uid, ids, [member_id], context=context) + return super(project, self).write(cr, uid, ids, vals, context=context) + def _complete_name(self, cr, uid, ids, name, args, context=None): res = {} for m in self.browse(cr, uid, ids, context=context): @@ -200,11 +217,20 @@ class project(osv.osv): 'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), 'task_count': fields.function(_task_count, type='integer', string="Open Tasks"), 'color': fields.integer('Color Index'), + 'privacy_visility': fields.selection([('public','Public'), ('follower','Followers Only')], 'Privacy / Visility', select=True), } def dummy(self, cr, uid, ids, context): return True - + + def message_thread_followers(self, cr, uid, ids, context=None): + followers = super(project,self).message_thread_followers(cr, uid, ids, context=context) + for project in self.browse(cr, uid, followers.keys(), context=context): + project_followers = set(followers[project.id]) + project_followers.add(project.user_id.user_email) + followers[project.id] = filter(None, project_followers) + return followers + def _get_type_common(self, cr, uid, context): ids = self.pool.get('project.task.type').search(cr, uid, [('project_default','=',1)], context=context) return ids diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 5f0a1ea5944..53fdee777a1 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -49,6 +49,7 @@ +