From b805979e924692d975ce7da4d92c3b5b20ef2dc3 Mon Sep 17 00:00:00 2001 From: "DBR (OpenERP)" Date: Mon, 28 May 2012 12:31:57 +0530 Subject: [PATCH 1/5] [IMP]project: set one selection field and and some methods for followers or members bzr revid: dbr@tinyerp.com-20120528070157-8lo7c1d3owzbmhaq --- addons/project/project.py | 40 +++++++++++++++++++- addons/project/project_view.xml | 1 + addons/project/security/project_security.xml | 5 +++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/addons/project/project.py b/addons/project/project.py index 0b23196a67f..cc5da2c15dc 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -67,6 +67,35 @@ 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 = {} + list = [] + project_ids = self.browse(cr, uid, ids) + groups = self.pool.get('res.groups') + group_id = groups.search(cr, uid, [('name', '=', 'Followers')], context=context) + groups_users = groups.browse(cr, uid, group_id)[0].users + for project_id in project_ids: + select = vals.get('privacy_visility') or project_id.privacy_visility or False + members = vals.get('members') or project_id.members or False + if select=='follower': + if members: + for member in members: + list.append(member.id) + followers = self.find_followers(cr, uid, ids, context) + for member_id in 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 find_followers(self, cr, uid, ids, context=None): + user=[] + sub_obj = self.pool.get('mail.subscription') + sub_id = sub_obj.search(cr, uid, [('res_model','=','project.project'),('res_id','in',ids)], context=context) + for follower_id in sub_obj.browse(cr, uid, sub_id): + user.append(follower_id.user_id.id) + return user + def _complete_name(self, cr, uid, ids, name, args, context=None): res = {} for m in self.browse(cr, uid, ids, context=context): @@ -202,11 +231,20 @@ class project(osv.osv): 'task_count': fields.function(_task_count, type='integer', string="Open Tasks"), 'color': fields.integer('Color Index'), 'company_uom_id': fields.related('company_id', 'project_time_mode_id', type='many2one', relation='product.uom'), + '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 70cdac1efa0..5d2d29fb5d5 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -41,6 +41,7 @@ + diff --git a/addons/project/security/project_security.xml b/addons/project/security/project_security.xml index 2bfe967e675..fb9041681f2 100644 --- a/addons/project/security/project_security.xml +++ b/addons/project/security/project_security.xml @@ -14,6 +14,11 @@ + + Followers + + + From 707ece42609d2d10252f0f686f52e629e7bcea1e Mon Sep 17 00:00:00 2001 From: "DBR (OpenERP)" Date: Mon, 28 May 2012 15:14:10 +0530 Subject: [PATCH 2/5] [IMP]project: codr improvements bzr revid: dbr@tinyerp.com-20120528094410-2ohyzscyqh51gxt9 --- addons/project/project.py | 33 ++++++++++++--------------------- addons/project/project_view.xml | 2 +- 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/addons/project/project.py b/addons/project/project.py index cc5da2c15dc..aab101d62a3 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -70,32 +70,23 @@ class project(osv.osv): def write(self, cr, uid, ids, vals, context=None): if context is None: context = {} - list = [] - project_ids = self.browse(cr, uid, ids) - groups = self.pool.get('res.groups') - group_id = groups.search(cr, uid, [('name', '=', 'Followers')], context=context) - groups_users = groups.browse(cr, uid, group_id)[0].users - for project_id in project_ids: + groups_pool = self.pool.get('res.groups') + group_id = groups_pool.search(cr, uid, [('name', '=', 'Followers')], context=context) + groups_users = groups_pool.browse(cr, uid, group_id, context)[0].users + 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 - members = vals.get('members') or project_id.members or False - if select=='follower': - if members: - for member in members: - list.append(member.id) - followers = self.find_followers(cr, uid, ids, context) - for member_id in list: + 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 find_followers(self, cr, uid, ids, context=None): - user=[] - sub_obj = self.pool.get('mail.subscription') - sub_id = sub_obj.search(cr, uid, [('res_model','=','project.project'),('res_id','in',ids)], context=context) - for follower_id in sub_obj.browse(cr, uid, sub_id): - user.append(follower_id.user_id.id) - return user - def _complete_name(self, cr, uid, ids, name, args, context=None): res = {} for m in self.browse(cr, uid, ids, context=context): diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 5d2d29fb5d5..57c45c18856 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -33,7 +33,7 @@
- + From c81dcd768aba95c6f478df8f6344bd1aee773897 Mon Sep 17 00:00:00 2001 From: "DBR (OpenERP)" Date: Mon, 28 May 2012 15:40:35 +0530 Subject: [PATCH 3/5] [IMP]project:Remove extra code bzr revid: dbr@tinyerp.com-20120528101035-itsr2upflvx71n2e --- addons/project/project.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/addons/project/project.py b/addons/project/project.py index aab101d62a3..47dc840e3c7 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -70,9 +70,6 @@ class project(osv.osv): def write(self, cr, uid, ids, vals, context=None): if context is None: context = {} - groups_pool = self.pool.get('res.groups') - group_id = groups_pool.search(cr, uid, [('name', '=', 'Followers')], context=context) - groups_users = groups_pool.browse(cr, uid, group_id, context)[0].users 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) From ecbf5fadf06980d18cf5229cb4bdb10a2fa39a8b Mon Sep 17 00:00:00 2001 From: "DBR (OpenERP)" Date: Mon, 28 May 2012 16:21:10 +0530 Subject: [PATCH 4/5] [REM]project: No need followers group so removed it bzr revid: dbr@tinyerp.com-20120528105110-ap0nzv1hjv5ylzfj --- addons/project/security/project_security.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/addons/project/security/project_security.xml b/addons/project/security/project_security.xml index fb9041681f2..2bfe967e675 100644 --- a/addons/project/security/project_security.xml +++ b/addons/project/security/project_security.xml @@ -14,11 +14,6 @@ - - Followers - - - From 29835b5e078d0abd328306fee2781d9bef2f7863 Mon Sep 17 00:00:00 2001 From: "DBR (OpenERP)" Date: Mon, 28 May 2012 18:58:38 +0530 Subject: [PATCH 5/5] [IMP]project: Set record rules bzr revid: dbr@tinyerp.com-20120528132838-wyzz7r9dwmfgv36t --- addons/project/security/project_security.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/addons/project/security/project_security.xml b/addons/project/security/project_security.xml index 2bfe967e675..2b4c87671b1 100644 --- a/addons/project/security/project_security.xml +++ b/addons/project/security/project_security.xml @@ -36,6 +36,20 @@ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + Public_projects + + + ['|',('privacy_visility','=','public'),('privacy_visility','=', False)] + + + + private Members + + + [('privacy_visility','=','follower'),('members','in',[user.id])] + + Task multi-company