From 356115167dca36c4bbbab356d8f6f8f278e69202 Mon Sep 17 00:00:00 2001 From: Jigar Amin Date: Thu, 11 Apr 2013 15:13:36 +0530 Subject: [PATCH 1/4] [FIX] User Partner Company has to same as User Compnay not as usder company bzr revid: jam@tinyerp.com-20130411094336-03i3475ydat8d5jj --- openerp/addons/base/res/res_users.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index ac6ba52bf38..9ccfee29a38 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -279,6 +279,14 @@ class res_users(osv.osv): return result + def create(self, cr, uid, vals, context=None): + user_id = super(res_users, self).create(cr, uid, vals, context=context) + #User->Partner Company has to be Same as User Company, instaed logged in users. + user = self.read(cr, uid, user_id, ['partner_id', 'company_id'], context=context) + company_id = self._get_company( cr, uid, context=context, uid2=user['id']) + self.pool.get('res.partner').write(cr,uid, user['partner_id'][0], {'company_id':company_id}) + return user_id + def write(self, cr, uid, ids, values, context=None): if not hasattr(ids, '__iter__'): ids = [ids] @@ -293,6 +301,12 @@ class res_users(osv.osv): uid = 1 # safe fields only, so we write as super-user to bypass access rights res = super(res_users, self).write(cr, uid, ids, values, context=context) + #User->Partner Company has to be Same as User Company, instaed logged in users. + if 'company_id' in values: + partner_pool = self.pool.get('res.partner') + for user in self.read(cr, uid, ids, ['partner_id', 'company_id'], context=context): + company_id = self._get_company( cr, uid, context=context, uid2=user['id']) + partner_pool.write(cr,uid, user['partner_id'][0], {'company_id':company_id}) # clear caches linked to the users self.pool.get('ir.model.access').call_cache_clearing_methods(cr) From 6d4215c9bf52b635fecab5c18baffa210f9694be Mon Sep 17 00:00:00 2001 From: "Jigar Amin (OpenERP)" Date: Mon, 13 May 2013 11:37:34 +0530 Subject: [PATCH 2/4] - Allow setting the company_id of the partner to False in order to make the partner shared between all companies. bzr revid: jam@tinyerp.com-20130513060734-niodo4rzs0m1v073 --- openerp/addons/base/res/res_partner.py | 11 +++++++++++ openerp/addons/base/res/res_users.py | 17 +++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index fb4387fb3ae..658770d43ea 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -488,6 +488,17 @@ class res_partner(osv.osv, format_address): def write(self, cr, uid, ids, vals, context=None): if isinstance(ids, (int, long)): ids = [ids] + #res.partner must only allow to set the company_id of a partner if it + #is the same as the company of all users that inherit from this partner + #(this is to allow the code from res_users to write to the partner!) or + #if setting the company_id to False (this is compatible with any user company) + if 'company_id' in vals and vals.get('company_id'): + user_pool = self.pool.get('res.users') + for partner in ids: + uspa = user_pool.search(cr, uid, [('partner_id', '=', partner)], context=context) + usco = set([user.company_id.id for user in user_pool.browse(cr, uid, uspa, context=context)]) + if usco and len(usco) > 1: + raise osv.except_osv(_("Warning"),_("You can not chnage the partner company as the partner has mutiple user linked with different companies.")) result = super(res_partner,self).write(cr, uid, ids, vals, context=context) for partner in self.browse(cr, uid, ids, context=context): self._fields_sync(cr, uid, partner, vals, context) diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 9ccfee29a38..bd7e7997871 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -281,10 +281,9 @@ class res_users(osv.osv): def create(self, cr, uid, vals, context=None): user_id = super(res_users, self).create(cr, uid, vals, context=context) - #User->Partner Company has to be Same as User Company, instaed logged in users. - user = self.read(cr, uid, user_id, ['partner_id', 'company_id'], context=context) - company_id = self._get_company( cr, uid, context=context, uid2=user['id']) - self.pool.get('res.partner').write(cr,uid, user['partner_id'][0], {'company_id':company_id}) + user = self.browse(cr, uid, user_id, context=context) + if user.partner_id.company_id: + user.partner_id.write({'company_id': user.company_id.id}) return user_id def write(self, cr, uid, ids, values, context=None): @@ -301,13 +300,11 @@ class res_users(osv.osv): uid = 1 # safe fields only, so we write as super-user to bypass access rights res = super(res_users, self).write(cr, uid, ids, values, context=context) - #User->Partner Company has to be Same as User Company, instaed logged in users. if 'company_id' in values: - partner_pool = self.pool.get('res.partner') - for user in self.read(cr, uid, ids, ['partner_id', 'company_id'], context=context): - company_id = self._get_company( cr, uid, context=context, uid2=user['id']) - partner_pool.write(cr,uid, user['partner_id'][0], {'company_id':company_id}) - + for user in self.browse(cr, uid, ids, context=context): + # if partner is global we keep it that way + if user.partner_id.company_id and user.partner_id.company_id.id != values.get('company_id'): + user.partner_id.write({'company_id': user.company_id.id}) # clear caches linked to the users self.pool.get('ir.model.access').call_cache_clearing_methods(cr) clear = partial(self.pool.get('ir.rule').clear_cache, cr) From 7dafd9d58edcbd5777198833fc7a3df28bf4073b Mon Sep 17 00:00:00 2001 From: "Jigar Amin (OpenERP)" Date: Tue, 11 Jun 2013 11:28:03 +0530 Subject: [PATCH 3/4] [IMP] res.partner must only allow to set the company_id of a partner if it is the same as the company of all users that inherit from this partner bzr revid: jam@tinyerp.com-20130611055803-or29rx40278bqttt --- openerp/addons/base/res/res_partner.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 97725313c4c..f28e54d6f15 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -493,13 +493,12 @@ class res_partner(osv.osv, format_address): #is the same as the company of all users that inherit from this partner #(this is to allow the code from res_users to write to the partner!) or #if setting the company_id to False (this is compatible with any user company) - if 'company_id' in vals and vals.get('company_id'): + if vals.get('company_id'): user_pool = self.pool.get('res.users') - for partner in ids: - uspa = user_pool.search(cr, uid, [('partner_id', '=', partner)], context=context) - usco = set([user.company_id.id for user in user_pool.browse(cr, uid, uspa, context=context)]) - if usco and len(usco) > 1: - raise osv.except_osv(_("Warning"),_("You can not chnage the partner company as the partner has mutiple user linked with different companies.")) + for partner in self.browse(cr, uid, ids, context=context): + user_companies = set([users.company_id.id for users in partner.user_ids]) + if len(user_companies) > 1 or vals.get('company_id') not in user_companies: + raise osv.except_osv(_("Warning"),_("You can not change the company as the partner/user has mutiple user linked with different companies.")) result = super(res_partner,self).write(cr, uid, ids, vals, context=context) for partner in self.browse(cr, uid, ids, context=context): self._fields_sync(cr, uid, partner, vals, context) From 3ba9415e80eda7bab3f521da714fe9afa2fc4f30 Mon Sep 17 00:00:00 2001 From: Rifakat Date: Thu, 1 Aug 2013 12:05:02 +0530 Subject: [PATCH 4/4] [IMP] removed unused user pool bzr revid: rha@tinyerp.com-20130801063502-g2u9l8ave9sd7kim --- openerp/addons/base/res/res_partner.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index ef22d935ffc..bcc77fe3804 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -494,11 +494,10 @@ class res_partner(osv.osv, format_address): #(this is to allow the code from res_users to write to the partner!) or #if setting the company_id to False (this is compatible with any user company) if vals.get('company_id'): - user_pool = self.pool.get('res.users') for partner in self.browse(cr, uid, ids, context=context): if partner.user_ids: user_companies = set([user.company_id.id for user in partner.user_ids]) - if len(user_companies) > 1 or vals.get('company_id') not in user_companies: + if len(user_companies) > 1 or vals['company_id'] not in user_companies: raise osv.except_osv(_("Warning"),_("You can not change the company as the partner/user has multiple user linked with different companies.")) result = super(res_partner,self).write(cr, uid, ids, vals, context=context) for partner in self.browse(cr, uid, ids, context=context):