[FIX] mail: mail_alias conditionally made unique on write

Don't try to make the alias unique if writing on the same id (this is
necessary in res_config views)
This commit is contained in:
Julien Legros 2014-10-22 12:47:32 +02:00
parent 0a82397da3
commit 603749ba70
1 changed files with 11 additions and 7 deletions

View File

@ -144,7 +144,7 @@ class mail_alias(osv.Model):
res.append((record['id'], _("Inactive Alias")))
return res
def _find_unique(self, cr, uid, name, context=None):
def _find_unique(self, cr, uid, name, alias_id=False, context=None):
"""Find a unique alias name similar to ``name``. If ``name`` is
already taken, make a variant by adding an integer suffix until
an unused alias is found.
@ -152,16 +152,19 @@ class mail_alias(osv.Model):
sequence = None
while True:
new_name = "%s%s" % (name, sequence) if sequence is not None else name
if not self.search(cr, uid, [('alias_name', '=', new_name)]):
domain = [('alias_name', '=', new_name)]
if alias_id:
domain += [('id', '!=', alias_id)]
if not self.search(cr, uid, domain):
break
sequence = (sequence + 1) if sequence else 2
return new_name
def _clean_and_make_unique(self, cr, uid, name, context=None):
def _clean_and_make_unique(self, cr, uid, name, alias_id=False, context=None):
# when an alias name appears to already be an email, we keep the local part only
name = remove_accents(name).lower().split('@')[0]
name = re.sub(r'[^\w+.]+', '-', name)
return self._find_unique(cr, uid, name, context=context)
return self._find_unique(cr, uid, name, alias_id=alias_id, context=context)
def migrate_to_alias(self, cr, child_model_name, child_table_name, child_model_auto_init_fct,
alias_model_name, alias_id_column, alias_key, alias_prefix='', alias_force_key='', alias_defaults={},
@ -246,9 +249,10 @@ class mail_alias(osv.Model):
return super(mail_alias, self).create(cr, uid, vals, context=context)
def write(self, cr, uid, ids, vals, context=None):
""""give uniqe alias name if given alias name is allready assigned"""
if vals.get('alias_name'):
vals['alias_name'] = self._clean_and_make_unique(cr, uid, vals.get('alias_name'), context=context)
""""give a unique alias name if given alias name is already assigned"""
ids = ids if isinstance(ids, (tuple, list)) else [ids]
if vals.get('alias_name') and ids:
vals['alias_name'] = self._clean_and_make_unique(cr, uid, vals.get('alias_name'), alias_id=ids[0], context=context)
return super(mail_alias, self).write(cr, uid, ids, vals, context=context)
def open_document(self, cr, uid, ids, context=None):