[IMP] Add one alias for all jobs in the hr config view and related changes

bzr revid: tpa@tinyerp.com-20130527133237-s1s1ifi8cg3l1a07
This commit is contained in:
Turkesh Patel (Open ERP) 2013-05-27 19:02:37 +05:30
parent da476860dd
commit 0365283243
5 changed files with 50 additions and 59 deletions

View File

@ -112,7 +112,7 @@ class hr_job(osv.osv):
},
multi='no_of_employee'),
'no_of_recruitment': fields.float('Expected New Employee', help='Number of new employees you expect to recruit.'),
'no_of_hired_employee':fields.float('Hired Employee', help='Number of hired employees.'),
'no_of_hired_employee':fields.float('Hired Employee', help='Number of hired employees during this recruitment phase.'),
'employee_ids': fields.one2many('hr.employee', 'job_id', 'Employees', groups='base.group_user'),
'description': fields.text('Job Description'),
'requirements': fields.text('Requirements'),

View File

@ -482,7 +482,6 @@ class hr_applicant(base_stage, osv.Model):
def get_empty_list_help(self, cr, uid, help, context=None):
context['empty_list_help_model'] = 'hr.job'
context['empty_list_help_id'] = context.get('default_job_id', None)
context['empty_list_help_document_name'] = _("job applicants")
return super(hr_applicant, self).get_empty_list_help(cr, uid, help, context=context)
@ -490,7 +489,6 @@ class hr_applicant(base_stage, osv.Model):
class hr_job(osv.osv):
_inherit = "hr.job"
_name = "hr.job"
_inherits = {'mail.alias': 'alias_id'}
def _application_count(self, cr, uid, ids, field_name, arg, context=None):
"""Calculate total Applications per job"""
@ -501,47 +499,22 @@ class hr_job(osv.osv):
res[applicant.job_id.id] += 1
return res
def _job_alias(self, cr, uid, ids, field_name, arg, context=None):
res = dict.fromkeys(ids, False)
mail_alias = self.pool.get('mail.alias')
model_ids = self.pool.get('ir.model').search(cr, uid, [('model', '=', 'hr.applicant')], context=context)
alias_ids = mail_alias.search(cr, uid, [('alias_model_id', '=', model_ids[0])], context=context)
if alias_ids:
for id in ids:
res[id] = alias_ids[0]
return res
_columns = {
'survey_id': fields.many2one('survey', 'Interview Form', help="Choose an interview form for this job position and you will be able to print/answer this interview from all applicants who apply for this job"),
'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True,
help="Email alias for this job position. New emails will automatically "
"create new applicants for this job position."),
'application_count': fields.function(_application_count, type='integer', string="Total Applications"),
'manager_id': fields.related('department_id', 'manager_id', type='many2one', string='Department Manager', relation='hr.employee', readonly=True, store=True),
'alias_prefix': fields.char("Alias Name Prefix For Jobs",help="Default Prefix for Alias name of jobs"),
'job_alias': fields.function(_job_alias, type='many2one', relation='mail.alias', string='Mail Alias'),
}
_defaults = {
'alias_domain': False, # always hide alias during creation
}
def _auto_init(self, cr, context=None):
"""Installation hook to create aliases for all jobs and avoid constraint errors."""
res = 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)
return res
def create(self, cr, uid, vals, context=None):
mail_alias = self.pool.get('mail.alias')
if not vals.get('alias_id'):
vals.pop('alias_name', None) # prevent errors during copy()
alias_id = mail_alias.create_unique_alias(cr, uid,
# Using '+' allows using subaddressing for those who don't
# have a catchall domain setup.
{'alias_name': vals['alias_prefix']+'+'+vals['name']},
model_name="hr.applicant",
context=context)
vals['alias_id'] = alias_id
res = super(hr_job, self).create(cr, uid, vals, context)
mail_alias.write(cr, uid, [vals['alias_id']], {"alias_defaults": {'job_id': res}}, context)
return res
def unlink(self, cr, uid, ids, context=None):
# Cascade-delete mail aliases as well, as they should not exist without the job position.
mail_alias = self.pool.get('mail.alias')
alias_ids = [job.alias_id.id for job in self.browse(cr, uid, ids, context=context) if job.alias_id]
res = super(hr_job, self).unlink(cr, uid, ids, context=context)
mail_alias.unlink(cr, uid, alias_ids, context=context)
return res
def action_print_survey(self, cr, uid, ids, context=None):
if context is None:

View File

@ -312,20 +312,6 @@
attrs="{'invisible':[('survey_id','=',False)]}"/>
</div>
</field>
<xpath expr="//div[@class='oe_title']//h1" position="after">
<div name="group_alias"
attrs="{'invisible': [('alias_domain', '=', False)]}">
<label for="alias_id" string="Email Alias"/>
<field name="alias_id" class="oe_inline oe_read_only" required="0" nolabel="1"/>
<field name="alias_prefix" invisible="1"/>
<span name="edit_alias" class="oe_edit_only">
<field name="alias_name" class="oe_inline"
attrs="{'required': [('alias_id', '!=', False)]}"/>
@
<field name="alias_domain" class="oe_inline" readonly="1"/>
</span>
</div>
</xpath>
</field>
</record>
@ -368,8 +354,8 @@
</div>
<div class = "oe_kanban_content">
<h3 class="oe_kanban_ellipsis"><field name="name"/></h3>
<div class="oe_kanban_alias" t-if=" record.alias_id.value">
<span class="oe_e">%%</span><small><field name="alias_id"/></small>
<div class="oe_kanban_alias" t-if=" record.job_alias.value">
<span class="oe_e">%%</span><small><field name="job_alias"/></small>
</div>
<div class="oe_department">
<div class="oe_job oe_kanban_ellipsis">

View File

@ -33,6 +33,36 @@ class hr_applicant_settings(osv.osv_memory):
fetchmail_model='hr.applicant', fetchmail_name='Incoming HR Applications',
help ="""Allow applicants to send their job application to an email address (jobs@mycompany.com),
and create automatically application documents in the system."""),
'default_alias_prefix': fields.char('Default Alias Prefix for Jobs', default_model='hr.job'),
'alias_prefix': fields.char('Default Alias Name for Jobs'),
'alias_domain' : fields.char('Alias Domain'),
}
def get_default_alias_prefix(self, cr, uid, ids, context=None):
alias_name = ''
mail_alias = self.pool.get('mail.alias')
model_ids = self.pool.get('ir.model').search(cr, uid, [('model', '=', 'hr.applicant')], context=context)
alias_ids = mail_alias.search(cr, uid, [('alias_model_id', '=', model_ids[0])], context=context)
if alias_ids:
alias_name = mail_alias.browse(cr, uid, alias_ids[0], context=context).alias_name
return {'alias_prefix': alias_name}
def set_default_alias_prefix(self, cr, uid, ids, context=None):
mail_alias = self.pool.get('mail.alias')
record = self.browse(cr, uid, ids[0], context=context)
if record.alias_prefix:
model_ids = self.pool.get('ir.model').search(cr, uid, [('model', '=', 'hr.applicant')], context=context)
alias_ids = mail_alias.search(cr, uid, [('alias_model_id', '=', model_ids[0])], context=context)
if alias_ids:
mail_alias.write(cr, uid, alias_ids[0],{'alias_name': record.alias_prefix}, context=context)
else:
mail_alias.create_unique_alias(cr, uid, {'alias_name': record.alias_prefix}, model_name="hr.applicant", context=context)
def get_default_alias_domain(self, cr, uid, ids, context=None):
alias_domain = self.pool.get("ir.config_parameter").get_param(cr, uid, "mail.catchall.domain", context=context)
if not alias_domain:
domain = self.pool.get("ir.config_parameter").get_param(cr, uid, "web.base.url", context=context)
try:
alias_domain = urlparse.urlsplit(domain).netloc.split(':')[0]
except Exception:
pass
return {'alias_domain': alias_domain}

View File

@ -26,9 +26,11 @@
</div>
</div>
<xpath expr="//div/div[@name='hr_recruitment']" position="after">
<div attrs="{'invisible': [('module_hr_recruitment','=',False)]}">
<label for="default_alias_prefix"/>
<field name="default_alias_prefix" class="oe_inline"/>
<div attrs="{'invisible': ['|',('module_hr_recruitment','=',False),('alias_domain', '=', False)]}">
<label string="Alias for Jobs"/>
<field name="alias_prefix" class="oe_inline" attrs="{'required': [('alias_domain', '!=', False)]}"/>
@
<field name="alias_domain" class="oe_inline" readonly="1"/>
</div>
</xpath>
</field>