[MERGE] hr_recruitment tags
bzr revid: al@openerp.com-20120816233347-pvlcwf0ibt0v4qdg
This commit is contained in:
commit
feb8dc097d
|
@ -19,12 +19,13 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Recruitment Process',
|
'name': 'Recruitment Process',
|
||||||
'version': '1.0',
|
'version': '1.0',
|
||||||
'category': 'Human Resources',
|
'category': 'Human Resources',
|
||||||
"sequence": 24,
|
'sequence': 24,
|
||||||
"summary": "Recruitment Process, Job Descriptions",
|
'summary': 'Recruitment Process, Job Descriptions',
|
||||||
'description': """
|
'description': """
|
||||||
Manages job positions and the recruitment process.
|
Manages job positions and the recruitment process.
|
||||||
==================================================
|
==================================================
|
||||||
|
@ -46,7 +47,7 @@ system to store and search in your CV base.
|
||||||
'base_calendar',
|
'base_calendar',
|
||||||
'fetchmail',
|
'fetchmail',
|
||||||
],
|
],
|
||||||
'update_xml': [
|
'data': [
|
||||||
'wizard/hr_recruitment_employee_hired.xml',
|
'wizard/hr_recruitment_employee_hired.xml',
|
||||||
'wizard/hr_recruitment_create_partner_job_view.xml',
|
'wizard/hr_recruitment_create_partner_job_view.xml',
|
||||||
'hr_recruitment_view.xml',
|
'hr_recruitment_view.xml',
|
||||||
|
@ -57,19 +58,18 @@ system to store and search in your CV base.
|
||||||
'board_hr_recruitment_statistical_view.xml',
|
'board_hr_recruitment_statistical_view.xml',
|
||||||
'hr_recruitment_installer_view.xml',
|
'hr_recruitment_installer_view.xml',
|
||||||
'res_config_view.xml',
|
'res_config_view.xml',
|
||||||
],
|
|
||||||
'init_xml': [
|
|
||||||
'hr_recruitment_data.xml'
|
'hr_recruitment_data.xml'
|
||||||
],
|
],
|
||||||
'demo_xml': [
|
'demo': [
|
||||||
'hr_recruitment_demo.yml',
|
'hr_recruitment_demo.yml',
|
||||||
],
|
],
|
||||||
'test':[
|
'js': ['static/src/js/hr_recruitment.js'],
|
||||||
'test/recruitment_process.yml',
|
'test': [
|
||||||
],
|
'test/recruitment_process.yml',
|
||||||
|
],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
'certificate' : '001073437025460275621',
|
'certificate': '001073437025460275621',
|
||||||
'application': True,
|
'application': True,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -198,6 +198,7 @@ class hr_applicant(base_stage, osv.Model):
|
||||||
When the case is over, the state is set to \'Done\'.\
|
When the case is over, the state is set to \'Done\'.\
|
||||||
If the case needs to be reviewed then the state is \
|
If the case needs to be reviewed then the state is \
|
||||||
set to \'Pending\'.'),
|
set to \'Pending\'.'),
|
||||||
|
'categ_ids': fields.many2many('hr.applicant_category', string='Categories'),
|
||||||
'company_id': fields.many2one('res.company', 'Company'),
|
'company_id': fields.many2one('res.company', 'Company'),
|
||||||
'user_id': fields.many2one('res.users', 'Responsible'),
|
'user_id': fields.many2one('res.users', 'Responsible'),
|
||||||
# Applicant Columns
|
# Applicant Columns
|
||||||
|
@ -350,7 +351,7 @@ class hr_applicant(base_stage, osv.Model):
|
||||||
if isinstance(ids, (str, int, long)):
|
if isinstance(ids, (str, int, long)):
|
||||||
ids = [ids]
|
ids = [ids]
|
||||||
if update_vals is None: vals = {}
|
if update_vals is None: vals = {}
|
||||||
|
|
||||||
update_vals.update({
|
update_vals.update({
|
||||||
'description': msg.get('body'),
|
'description': msg.get('body'),
|
||||||
'email_from': msg.get('from'),
|
'email_from': msg.get('from'),
|
||||||
|
@ -510,7 +511,7 @@ class hr_job(osv.osv):
|
||||||
_inherits = {'mail.alias': 'alias_id'}
|
_inherits = {'mail.alias': 'alias_id'}
|
||||||
_columns = {
|
_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"),
|
'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,
|
'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True,
|
||||||
help="Email alias for this job position. New emails will automatically "
|
help="Email alias for this job position. New emails will automatically "
|
||||||
"create new applicants for this job position."),
|
"create new applicants for this job position."),
|
||||||
}
|
}
|
||||||
|
@ -521,13 +522,13 @@ class hr_job(osv.osv):
|
||||||
|
|
||||||
def _auto_init(self, cr, context=None):
|
def _auto_init(self, cr, context=None):
|
||||||
"""Installation hook to create aliases for all jobs and avoid constraint errors."""
|
"""Installation hook to create aliases for all jobs and avoid constraint errors."""
|
||||||
|
|
||||||
# disable the unique alias_id not null constraint, to avoid spurious warning during
|
# disable the unique alias_id not null constraint, to avoid spurious warning during
|
||||||
# super.auto_init. We'll reinstall it afterwards.
|
# super.auto_init. We'll reinstall it afterwards.
|
||||||
self._columns['alias_id'].required = False
|
self._columns['alias_id'].required = False
|
||||||
|
|
||||||
super(hr_job,self)._auto_init(cr, context=context)
|
super(hr_job,self)._auto_init(cr, context=context)
|
||||||
|
|
||||||
registry = RegistryManager.get(cr.dbname)
|
registry = RegistryManager.get(cr.dbname)
|
||||||
mail_alias = registry.get('mail.alias')
|
mail_alias = registry.get('mail.alias')
|
||||||
hr_jobs = registry.get('hr.job')
|
hr_jobs = registry.get('hr.job')
|
||||||
|
@ -555,7 +556,7 @@ class hr_job(osv.osv):
|
||||||
mail_alias = self.pool.get('mail.alias')
|
mail_alias = self.pool.get('mail.alias')
|
||||||
if not vals.get('alias_id'):
|
if not vals.get('alias_id'):
|
||||||
vals.pop('alias_name', None) # prevent errors during copy()
|
vals.pop('alias_name', None) # prevent errors during copy()
|
||||||
alias_id = mail_alias.create_unique_alias(cr, uid,
|
alias_id = mail_alias.create_unique_alias(cr, uid,
|
||||||
# Using '+' allows using subaddressing for those who don't
|
# Using '+' allows using subaddressing for those who don't
|
||||||
# have a catchall domain setup.
|
# have a catchall domain setup.
|
||||||
{'alias_name': 'jobs+'+vals['name']},
|
{'alias_name': 'jobs+'+vals['name']},
|
||||||
|
@ -573,7 +574,7 @@ class hr_job(osv.osv):
|
||||||
res = super(hr_job, self).unlink(cr, uid, ids, context=context)
|
res = super(hr_job, self).unlink(cr, uid, ids, context=context)
|
||||||
mail_alias.unlink(cr, uid, alias_ids, context=context)
|
mail_alias.unlink(cr, uid, alias_ids, context=context)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def action_print_survey(self, cr, uid, ids, context=None):
|
def action_print_survey(self, cr, uid, ids, context=None):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
|
@ -591,4 +592,12 @@ class hr_job(osv.osv):
|
||||||
'nodestroy':True,
|
'nodestroy':True,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class applicant_category(osv.osv):
|
||||||
|
""" Category of applicant """
|
||||||
|
_name = "hr.applicant_category"
|
||||||
|
_description = "Category of applicant"
|
||||||
|
_columns = {
|
||||||
|
'name': fields.char('Name', size=64, required=True, translate=True),
|
||||||
|
}
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -176,6 +176,9 @@
|
||||||
</div>
|
</div>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="categ_ids" widget="many2many_tags"/>
|
||||||
|
</group>
|
||||||
<separator string="Application Summary"/>
|
<separator string="Application Summary"/>
|
||||||
<field name="description" placeholder="Feedback of interviews..."/>
|
<field name="description" placeholder="Feedback of interviews..."/>
|
||||||
</sheet>
|
</sheet>
|
||||||
|
@ -265,6 +268,7 @@
|
||||||
<field name="job_id"/>
|
<field name="job_id"/>
|
||||||
<field name="title_action"/>
|
<field name="title_action"/>
|
||||||
<field name="department_id"/>
|
<field name="department_id"/>
|
||||||
|
<field name="categ_ids"/>
|
||||||
<templates>
|
<templates>
|
||||||
<t t-name="kanban-tooltip">
|
<t t-name="kanban-tooltip">
|
||||||
<ul class="oe_kanban_tooltip">
|
<ul class="oe_kanban_tooltip">
|
||||||
|
@ -309,6 +313,13 @@
|
||||||
<img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
|
<img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="oe_kanban_footer_left" style="margin-top:5px;">
|
||||||
|
<div class="oe_left oe_tags">
|
||||||
|
<t t-foreach="record.categ_ids.raw_value" t-as="categ_id">
|
||||||
|
<span class="oe_tag" t-att-data-categ_id="categ_id"></span>
|
||||||
|
</t>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="oe_clear"></div>
|
<div class="oe_clear"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -8,3 +8,5 @@ access_survey_hr_user,survey.hr.user,survey.model_survey,base.group_hr_user,1,1,
|
||||||
access_crm_meeting_hruser,crm.meeting.hruser,base_calendar.model_crm_meeting,base.group_hr_user,1,1,1,1
|
access_crm_meeting_hruser,crm.meeting.hruser,base_calendar.model_crm_meeting,base.group_hr_user,1,1,1,1
|
||||||
access_hr_recruitment_source_hr_officer,hr.recruitment.source,model_hr_recruitment_source,base.group_hr_user,1,1,1,1
|
access_hr_recruitment_source_hr_officer,hr.recruitment.source,model_hr_recruitment_source,base.group_hr_user,1,1,1,1
|
||||||
access_hr_recruitment_source_all,hr.recruitment.source,model_hr_recruitment_source,,1,0,0,0
|
access_hr_recruitment_source_all,hr.recruitment.source,model_hr_recruitment_source,,1,0,0,0
|
||||||
|
access_hr_applicant_category,hr.applicant_category,model_hr_applicant_category,,1,0,0,0
|
||||||
|
access_hr_applicant_category_manager,hr.applicant_category,model_hr_applicant_category,base.group_hr_manager,1,1,1,1
|
||||||
|
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
openerp.hr_recruitment = function(openerp) {
|
||||||
|
openerp.web_kanban.KanbanView.include({
|
||||||
|
applicant_display_categ_names: function() {
|
||||||
|
/*
|
||||||
|
* Set proper names to applicant categories.
|
||||||
|
* In kanban views, many2many fields only return a list of ids.
|
||||||
|
* Therefore, we have to fetch the matching data by ourselves.
|
||||||
|
*/
|
||||||
|
var self = this;
|
||||||
|
var categ_ids = [];
|
||||||
|
|
||||||
|
// Collect categories ids
|
||||||
|
self.$element.find('span[data-categ_id]').each(function() {
|
||||||
|
categ_ids.push($(this).data('categ_id'));
|
||||||
|
});
|
||||||
|
|
||||||
|
// Find their matching names
|
||||||
|
var dataset = new openerp.web.DataSetSearch(self, 'hr.applicant_category', self.session.context, [['id', 'in', _.uniq(categ_ids)]]);
|
||||||
|
dataset.read_slice(['id', 'name']).then(function(result) {
|
||||||
|
_.each(result, function(v, k) {
|
||||||
|
// Set the proper value in the DOM and display the element
|
||||||
|
self.$element.find('span[data-categ_id=' + v.id + ']').text(v.name);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
on_groups_started: function() {
|
||||||
|
var self = this;
|
||||||
|
self._super.apply(self, arguments);
|
||||||
|
|
||||||
|
if (self.dataset.model === 'hr.applicant') {
|
||||||
|
self.applicant_display_categ_names();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
|
@ -20,10 +20,14 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
{
|
{
|
||||||
'name' : "Portal",
|
'name' : 'Portal',
|
||||||
'version' : "1.0",
|
'version' : '1.0',
|
||||||
'depends' : ["base", "share", "auth_anonymous"],
|
'depends' : [
|
||||||
'author' : "OpenERP SA",
|
'base',
|
||||||
|
'share',
|
||||||
|
'auth_anonymous'
|
||||||
|
],
|
||||||
|
'author' : 'OpenERP SA',
|
||||||
'category': 'Portal',
|
'category': 'Portal',
|
||||||
'description': """
|
'description': """
|
||||||
Customize access to your OpenERP database to external users by creating portals.
|
Customize access to your OpenERP database to external users by creating portals.
|
||||||
|
|
|
@ -19,18 +19,33 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "Project Management",
|
'name': 'Project Management',
|
||||||
"version": "1.1",
|
'version': '1.1',
|
||||||
"author": "OpenERP SA",
|
'author': 'OpenERP SA',
|
||||||
"website": "http://www.openerp.com",
|
'website': 'http://www.openerp.com',
|
||||||
"category": "Project Management",
|
'category': 'Project Management',
|
||||||
"sequence": 8,
|
'sequence': 8,
|
||||||
"summary": "Projects, Tasks",
|
'summary': 'Projects, Tasks',
|
||||||
"images": ["images/gantt.png", "images/project_dashboard.jpeg","images/project_task_tree.jpeg","images/project_task.jpeg","images/project.jpeg","images/task_analysis.jpeg"],
|
'images': [
|
||||||
"depends": ["base_setup", "base_status", "product", "analytic", "board", "mail", "resource","web_kanban"],
|
'images/gantt.png',
|
||||||
"description": """
|
'images/project_dashboard.jpeg',
|
||||||
|
'images/project_task_tree.jpeg',
|
||||||
|
'images/project_task.jpeg',
|
||||||
|
'images/project.jpeg',
|
||||||
|
'images/task_analysis.jpeg'
|
||||||
|
],
|
||||||
|
'depends': [
|
||||||
|
'base_setup',
|
||||||
|
'base_status',
|
||||||
|
'product',
|
||||||
|
'analytic',
|
||||||
|
'board',
|
||||||
|
'mail',
|
||||||
|
'resource',
|
||||||
|
'web_kanban'
|
||||||
|
],
|
||||||
|
'description': """
|
||||||
Project Management module tracks multi-level projects, tasks, work done on tasks.
|
Project Management module tracks multi-level projects, tasks, work done on tasks.
|
||||||
=================================================================================
|
=================================================================================
|
||||||
|
|
||||||
|
@ -41,22 +56,21 @@ Dashboard for project management that includes:
|
||||||
* List of My Open Tasks
|
* List of My Open Tasks
|
||||||
* Graph of My Remaining Hours by Project
|
* Graph of My Remaining Hours by Project
|
||||||
""",
|
""",
|
||||||
"init_xml": [],
|
'data': [
|
||||||
"update_xml": [
|
'security/project_security.xml',
|
||||||
"security/project_security.xml",
|
'wizard/project_task_delegate_view.xml',
|
||||||
"wizard/project_task_delegate_view.xml",
|
'wizard/project_task_reevaluate_view.xml',
|
||||||
"wizard/project_task_reevaluate_view.xml",
|
'security/ir.model.access.csv',
|
||||||
"security/ir.model.access.csv",
|
'project_data.xml',
|
||||||
"project_data.xml",
|
'project_view.xml',
|
||||||
"project_view.xml",
|
'process/task_process.xml',
|
||||||
"process/task_process.xml",
|
'res_partner_view.xml',
|
||||||
"res_partner_view.xml",
|
'report/project_report_view.xml',
|
||||||
"report/project_report_view.xml",
|
|
||||||
'report/project_cumulative.xml',
|
'report/project_cumulative.xml',
|
||||||
"board_project_view.xml",
|
'board_project_view.xml',
|
||||||
'res_config_view.xml',
|
'res_config_view.xml',
|
||||||
],
|
],
|
||||||
'demo_xml': [
|
'demo': [
|
||||||
'project_demo.xml',
|
'project_demo.xml',
|
||||||
],
|
],
|
||||||
'test':[
|
'test':[
|
||||||
|
|
|
@ -18,3 +18,5 @@ access_account_analytic_line_project,account.analytic.line project,analytic.mode
|
||||||
access_project_task_history,project.task.history project,project.model_project_task_history,project.group_project_user,1,1,1,0
|
access_project_task_history,project.task.history project,project.model_project_task_history,project.group_project_user,1,1,1,0
|
||||||
access_project_task_history_cumulative,project.task.history project,project.model_project_task_history_cumulative,project.group_project_manager,1,0,0,0
|
access_project_task_history_cumulative,project.task.history project,project.model_project_task_history_cumulative,project.group_project_manager,1,0,0,0
|
||||||
access_resource_calendar,project.resource_calendar manager,resource.model_resource_calendar,project.group_project_manager,1,0,0,0
|
access_resource_calendar,project.resource_calendar manager,resource.model_resource_calendar,project.group_project_manager,1,0,0,0
|
||||||
|
access_project_category,project.project_category,model_project_category,,1,0,0,0
|
||||||
|
access_project_category_manager,project.project_category,model_project_category,project.group_project_manager,1,1,1,1
|
||||||
|
|
|
Loading…
Reference in New Issue