diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index d6e554b598d..773f64f2366 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -193,6 +193,12 @@ class res_partner(osv.osv, format_address): result[obj.id] = obj.image != False return result + def _has_user_ids(self, cr, uid, ids, name, args, context=None): + result = {} + for obj in self.browse(cr, uid, ids, context=context): + result[obj.id] = bool(obj.user_ids) + return result + _order = "name" _columns = { 'name': fields.char('Name', size=128, required=True, select=True), @@ -263,6 +269,7 @@ class res_partner(osv.osv, format_address): 'company_id': fields.many2one('res.company', 'Company', select=1), 'color': fields.integer('Color Index'), 'user_ids': fields.one2many('res.users', 'partner_id', 'Users'), + 'has_user_ids': fields.function(_has_user_ids, type='boolean', string='Is a user'), 'contact_address': fields.function(_address_display, type='char', string='Complete Address'), } @@ -359,10 +366,14 @@ class res_partner(osv.osv, format_address): # _constraints = [(_check_ean_key, 'Error: Invalid ean code', ['ean13'])] def write(self, cr, uid, ids, vals, context=None): + if context is None: + context={} # Update parent and siblings or children records if isinstance(ids, (int, long)): ids = [ids] + user_ids = [] for partner in self.browse(cr, uid, ids, context=context): + user_ids += [user.id for user in partner.user_ids] update_ids = [] if partner.is_company: domain_children = [('parent_id', 'child_of', partner.id), ('use_parent_address', '=', True)] @@ -371,6 +382,9 @@ class res_partner(osv.osv, format_address): domain_siblings = [('parent_id', '=', partner.parent_id.id), ('use_parent_address', '=', True)] update_ids = [partner.parent_id.id] + self.search(cr, uid, domain_siblings, context=context) self.update_address(cr, uid, update_ids, vals, context) + if vals.get('email') and user_ids and not context.get('change_email_and_login'): + context.update({'change_email_and_login': True}) + self.pool.get('res.users').write(cr, uid, user_ids, {'login': vals.get('email')}, context=context) return super(res_partner,self).write(cr, uid, ids, vals, context=context) def create(self, cr, uid, vals, context=None): diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml index c920aba23ae..18187f96d5f 100644 --- a/openerp/addons/base/res/res_partner_view.xml +++ b/openerp/addons/base/res/res_partner_view.xml @@ -111,7 +111,8 @@ - + + @@ -175,7 +176,8 @@ - + + @@ -420,7 +422,7 @@ - + Customers diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index 4c1d1317e07..27adab904dc 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -278,6 +278,10 @@ class res_users(osv.osv): def write(self, cr, uid, ids, values, context=None): if not hasattr(ids, '__iter__'): ids = [ids] + if values.get('email'): + values['login'] = values.get('email') + if values.get('login'): + values['email'] = values.get('login') if ids == [uid]: for key in values.keys(): if not (key in self.SELF_WRITEABLE_FIELDS or key.startswith('context_')): diff --git a/openerp/addons/base/res/res_users_view.xml b/openerp/addons/base/res/res_users_view.xml index daa25806349..0623269a2a9 100644 --- a/openerp/addons/base/res/res_users_view.xml +++ b/openerp/addons/base/res/res_users_view.xml @@ -135,7 +135,7 @@