[FIX] mail_alias, hr_job: when migrating to aliases, allow to have aliases creating records from a different model than the parent model; for example hr_job create hr_applicant records.
bzr revid: tde@openerp.com-20130516120227-z819lxy30mghc1hv
This commit is contained in:
parent
b6a4e2fc5f
commit
54ef169ce3
|
@ -503,8 +503,11 @@ class hr_job(osv.osv):
|
|||
|
||||
def _auto_init(self, cr, context=None):
|
||||
"""Installation hook to create aliases for all jobs and avoid constraint errors."""
|
||||
self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(hr_job,self)._auto_init,
|
||||
self._columns['alias_id'], 'name', alias_prefix='job+', alias_defaults={'job_id': 'id'}, context=context)
|
||||
if context is None:
|
||||
context = {}
|
||||
alias_context = dict(context, alias_model_name='hr.applicant')
|
||||
self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(hr_job, self)._auto_init,
|
||||
self._columns['alias_id'], 'name', alias_prefix='job+', alias_defaults={'job_id': 'id'}, context=alias_context)
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
mail_alias = self.pool.get('mail.alias')
|
||||
|
|
|
@ -134,7 +134,7 @@ class mail_alias(osv.Model):
|
|||
return new_name
|
||||
|
||||
def migrate_to_alias(self, cr, child_model_name, child_table_name, child_model_auto_init_fct,
|
||||
alias_id_column, alias_key, alias_prefix = '', alias_force_key = '', alias_defaults = {}, context=None):
|
||||
alias_id_column, alias_key, alias_prefix='', alias_force_key='', alias_defaults={}, context=None):
|
||||
""" Installation hook to create aliases for all users and avoid constraint errors.
|
||||
|
||||
:param child_model_name: model name of the child class (i.e. res.users)
|
||||
|
@ -149,6 +149,8 @@ class mail_alias(osv.Model):
|
|||
:param alias_defaults: dict, keys = mail.alias columns, values = child
|
||||
model column name used for default values (i.e. {'job_id': 'id'})
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
# disable the unique alias_id not null constraint, to avoid spurious warning during
|
||||
# super.auto_init. We'll reinstall it afterwards.
|
||||
|
@ -160,14 +162,14 @@ class mail_alias(osv.Model):
|
|||
registry = RegistryManager.get(cr.dbname)
|
||||
mail_alias = registry.get('mail.alias')
|
||||
child_class_model = registry.get(child_model_name)
|
||||
no_alias_ids = child_class_model.search(cr, SUPERUSER_ID, [('alias_id', '=', False)], context={'active_test':False})
|
||||
no_alias_ids = child_class_model.search(cr, SUPERUSER_ID, [('alias_id', '=', False)], context={'active_test': False})
|
||||
# Use read() not browse(), to avoid prefetching uninitialized inherited fields
|
||||
for obj_data in child_class_model.read(cr, SUPERUSER_ID, no_alias_ids, [alias_key]):
|
||||
alias_vals = {'alias_name': '%s%s' % (alias_prefix, obj_data[alias_key]) }
|
||||
alias_vals = {'alias_name': '%s%s' % (alias_prefix, obj_data[alias_key])}
|
||||
if alias_force_key:
|
||||
alias_vals['alias_force_thread_id'] = obj_data[alias_force_key]
|
||||
alias_vals['alias_defaults'] = dict( (k, obj_data[v]) for k, v in alias_defaults.iteritems())
|
||||
alias_id = mail_alias.create_unique_alias(cr, SUPERUSER_ID, alias_vals, model_name=child_model_name)
|
||||
alias_vals['alias_defaults'] = dict((k, obj_data[v]) for k, v in alias_defaults.iteritems())
|
||||
alias_id = mail_alias.create_unique_alias(cr, SUPERUSER_ID, alias_vals, model_name=context.get('alias_model_name', child_model_name))
|
||||
child_class_model.write(cr, SUPERUSER_ID, obj_data['id'], {'alias_id': alias_id})
|
||||
_logger.info('Mail alias created for %s %s (uid %s)', child_model_name, obj_data[alias_key], obj_data['id'])
|
||||
|
||||
|
|
Loading…
Reference in New Issue