[MOVE] hr_recruitment_survey: Make a bridge module with survey related code

==============
Specifications
==============

Add an option in the settings to use the surveys or not
By default : do not use interview forms.
If the option is false : on the job application, hide the Interview form field
This commit is contained in:
Kinjal Mehta
2016-08-22 12:48:56 +02:00
committed by Yannick Tivisse
parent 3df8c253e3
commit 3912beff31
27 changed files with 472 additions and 343 deletions
-7
View File
@@ -37,10 +37,3 @@ time by automating some communications with email templates.
Documents like resumes and motivation letters are indexed automatically,
allowing you to easily find for specific skills and build up a database of
profiles.
Integrated Surveys
------------------
Create your own interview canvas based on our best practices. Use the survey
designer to adapt questions to your own process. Ask the applicant to fill in
the survey online, or the interviewer to use it during real interviews.
+2 -4
View File
@@ -6,21 +6,20 @@
'version': '1.0',
'category': 'Human Resources',
'sequence': 90,
'summary': 'Jobs, Recruitment, Applications, Job Interviews, Surveys',
'summary': 'Jobs, Recruitment, Applications, Job Interviews',
'description': """
Manage job positions and the recruitment process
================================================
This application allows you to easily keep track of jobs, vacancies, applications, interviews...
It is integrated with the mail gateway to automatically fetch email sent to <jobs@yourcompany.com> in the list of applications. It's also integrated with the document management system to store and search in the CV base and find the candidate that you are looking for. Similarly, it is integrated with the survey module to allow you to define interviews for different jobs.
It is integrated with the mail gateway to automatically fetch email sent to <jobs@yourcompany.com> in the list of applications. It's also integrated with the document management system to store and search in the CV base and find the candidate that you are looking for. Similarly, it may integrated with the survey module to allow you to define interviews for different jobs.
You can define the different phases of interviews and easily rate the applicant from the kanban view.
""",
'website': 'https://www.odoo.com/page/recruitment',
'depends': [
'decimal_precision',
'hr',
'survey',
'calendar',
'fetchmail',
'web_kanban_gauge',
@@ -31,7 +30,6 @@ You can define the different phases of interviews and easily rate the applicant
'data': [
'security/hr_recruitment_security.xml',
'security/ir.model.access.csv',
'data/survey_survey_data.xml',
'data/hr_recruitment_data.xml',
'views/hr_recruitment_views.xml',
'report/hr_recruitment_report_views.xml',
@@ -7,9 +7,9 @@
<field name="res_id" ref="mail.channel_all_employees"/>
<field name="message_type">notification</field>
<field name="subtype_id" ref="mail.mt_comment"/>
<field name="subject">Recruitment application installed!</field>
<field name="body"><![CDATA[<p>Manage job positions and your company's recruitment process. This application is integrated with the Survey application to help you define interviews for different jobs.</p>
<p>Job applications sent by email are automatically integrate in Odoo.</p>]]></field>
<field name="subject">Recruitment Process application installed!</field>
<field name="body"><![CDATA[<p>Manage job positions and your company's recruitment process. This application may be integrated with the Survey application to help you define interviews for different jobs.</p>
<p>Job applications sent by email will automatically be integrated in Odoo.</p>]]></field>
</record>
<!-- Meeting Types (for interview meetings) -->
@@ -25,37 +25,26 @@
<field name="fold" eval="True"/>
</record>
<!--Manage the job_id to get in hr.applicant-->
<!--Manage the job_id to get in hr.applicant-->
<record id="hr.job_developer" model="hr.job">
<field name="state">recruit</field>
<field name="no_of_recruitment">4</field>
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_ceo" model="hr.job">
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_cto" model="hr.job">
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_consultant" model="hr.job">
<field name="state">recruit</field>
<field name="no_of_recruitment">1</field>
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_hrm" model="hr.job">
<field name="no_of_recruitment">1</field>
<field name="state">recruit</field>
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_marketing" model="hr.job">
<field name="state">recruit</field>
<field name="no_of_recruitment">3</field>
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_trainee" model="hr.job">
<field name="state">recruit</field>
<field name="no_of_recruitment">6</field>
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr_case_salesman0" model="hr.applicant">
@@ -1,229 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Recruitment Form -->
<record model="survey.survey" id="recruitment_form">
<field name="title">Recruitment Form</field>
<field name="stage_id" ref="survey.stage_permanent" />
<field name="auth_required" eval="True" />
<field name="users_can_go_back" eval="True" />
<field name="description">&lt;p&gt;This form is intended to help the responsible of a recruitment interview.&lt;/p&gt;</field>
<field name="thank_you_message">&lt;p&gt;&lt;/p&gt;</field>
</record>
<!-- Page 1 -->
<record model="survey.page" id="recruitment_1">
<field name="title">Basic information</field>
<field name="survey_id" ref="recruitment_form" />
<field name="sequence">1</field>
<field name="description">&lt;p&gt;&lt;/p&gt;</field>
</record>
<record model="survey.question" id="recruitment_1_1">
<field name="page_id" ref="recruitment_1" />
<field name="sequence">1</field>
<field name="question">From which university will you graduate?</field>
<field name="type">textbox</field>
</record>
<record model="survey.question" id="recruitment_1_2">
<field name="page_id" ref="recruitment_1" />
<field name="sequence">2</field>
<field name="question">What is your gender?</field>
<field name="type">simple_choice</field>
<field name="display_mode">dropdown</field>
</record>
<record model="survey.label" id="recruitment_1_2_1">
<field name="question_id" ref="recruitment_1_2"/>
<field name="sequence">1</field>
<field name="value">Male</field>
</record>
<record model="survey.label" id="recruitment_1_2_2">
<field name="question_id" ref="recruitment_1_2"/>
<field name="sequence">2</field>
<field name="value">Female</field>
</record>
<record model="survey.question" id="recruitment_1_3">
<field name="page_id" ref="recruitment_1" />
<field name="sequence">3</field>
<field name="question">What age group do you belong to?</field>
<field name="type">simple_choice</field>
<field name="display_mode">columns</field>
<field name="column_nb">4</field>
</record>
<record model="survey.label" id="recruitment_1_3_1">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">1</field>
<field name="value">0-15</field>
</record>
<record model="survey.label" id="recruitment_1_3_2">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">2</field>
<field name="value">16-20</field>
</record>
<record model="survey.label" id="recruitment_1_3_3">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">3</field>
<field name="value">21-30</field>
</record>
<record model="survey.label" id="recruitment_1_3_4">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">4</field>
<field name="value">31-40</field>
</record>
<record model="survey.label" id="recruitment_1_3_5">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">5</field>
<field name="value">41-50</field>
</record>
<record model="survey.label" id="recruitment_1_3_6">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">6</field>
<field name="value">51-60</field>
</record>
<record model="survey.label" id="recruitment_1_3_7">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">7</field>
<field name="value">61-70</field>
</record>
<record model="survey.label" id="recruitment_1_3_8">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">8</field>
<field name="value">71+</field>
</record>
<!-- Page 2 -->
<record model="survey.page" id="recruitment_2">
<field name="title">Education and Activities</field>
<field name="survey_id" ref="recruitment_form" />
<field name="sequence">2</field>
<field name="description">&lt;p&gt;&lt;/p&gt;</field>
</record>
<record model="survey.question" id="recruitment_2_1">
<field name="page_id" ref="recruitment_2" />
<field name="sequence">1</field>
<field name="question">Knowledge</field>
<field name="type">free_text</field>
</record>
<record model="survey.question" id="recruitment_2_2">
<field name="page_id" ref="recruitment_2" />
<field name="sequence">2</field>
<field name="question">Education</field>
<field name="type">free_text</field>
</record>
<record model="survey.question" id="recruitment_2_3">
<field name="page_id" ref="recruitment_2" />
<field name="sequence">3</field>
<field name="question">Experience</field>
<field name="type">free_text</field>
</record>
<record model="survey.question" id="recruitment_2_4">
<field name="page_id" ref="recruitment_2" />
<field name="sequence">4</field>
<field name="question">Activities</field>
<field name="type">free_text</field>
</record>
<!-- Page 3 -->
<record model="survey.page" id="recruitment_3">
<field name="title">Importance</field>
<field name="survey_id" ref="recruitment_form" />
<field name="sequence">3</field>
<field name="description">&lt;p&gt;&lt;/p&gt;</field>
</record>
<record model="survey.question" id="recruitment_3_1">
<field name="page_id" ref="recruitment_3" />
<field name="sequence">1</field>
<field name="question">Rate the Importance</field>
<field name="type">matrix</field>
<field name="matrix_subtype">simple</field>
</record>
<record model="survey.label" id="rcol_3_1_1">
<field name="question_id" ref="recruitment_3_1"/>
<field name="sequence">1</field>
<field name="value">Not important</field>
</record>
<record model="survey.label" id="rcol_3_1_2">
<field name="question_id" ref="recruitment_3_1"/>
<field name="sequence">2</field>
<field name="value">Somewhat important</field>
</record>
<record model="survey.label" id="rcol_3_1_3">
<field name="question_id" ref="recruitment_3_1"/>
<field name="sequence">3</field>
<field name="value">Important</field>
</record>
<record model="survey.label" id="rcol_3_1_4">
<field name="question_id" ref="recruitment_3_1"/>
<field name="sequence">4</field>
<field name="value">Very important</field>
</record>
<record model="survey.label" id="rcol_3_1_5">
<field name="question_id" ref="recruitment_3_1"/>
<field name="sequence">5</field>
<field name="value">Most important</field>
</record>
<record model="survey.label" id="rrow_2_1_1">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">1</field>
<field name="value">Good pay</field>
</record>
<record model="survey.label" id="rrow_2_1_2">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">2</field>
<field name="value">Getting on with colleagues</field>
</record>
<record model="survey.label" id="rrow_2_1_3">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">3</field>
<field name="value">Office environment</field>
</record>
<record model="survey.label" id="rrow_2_1_4">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">4</field>
<field name="value">Desk space</field>
</record>
<record model="survey.label" id="rrow_2_1_5">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">5</field>
<field name="value">State of the art technology</field>
</record>
<record model="survey.label" id="rrow_2_1_6">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">6</field>
<field name="value">Office location</field>
</record>
<record model="survey.label" id="rrow_2_1_7">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">7</field>
<field name="value">Good management</field>
</record>
<record model="survey.label" id="rrow_2_1_8">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">8</field>
<field name="value">Freebies such as tea, coffee and stationery</field>
</record>
<record model="survey.label" id="rrow_2_1_9">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">9</field>
<field name="value">Perks such as free parking, gym passes</field>
</record>
<record model="survey.label" id="rrow_2_1_10">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">10</field>
<field name="value">No out of hours working</field>
</record>
<record model="survey.label" id="rrow_2_1_11">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">11</field>
<field name="value">Dress code</field>
</record>
<record model="survey.label" id="rrow_2_1_12">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">12</field>
<field name="value">Regular meetings</field>
</record>
<record model="survey.label" id="rrow_2_1_13">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">13</field>
<field name="value">Good social life</field>
</record>
</data>
</odoo>
-7
View File
@@ -22,9 +22,6 @@ class Job(models.Model):
user_id = fields.Many2one('res.users', "Recruitment Responsible", track_visibility='onchange')
document_ids = fields.One2many('ir.attachment', compute='_compute_document_ids', string="Applications")
documents_count = fields.Integer(compute='_compute_document_ids', string="Documents")
survey_id = fields.Many2one(
'survey.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="restrict", required=True,
help="Email alias for this job position. New emails will automatically create new applicants for this job position.")
@@ -73,10 +70,6 @@ class Job(models.Model):
return 'hr_recruitment.mt_job_new'
return super(Job, self)._track_subtype(init_values)
@api.multi
def action_print_survey(self):
return self.survey_id.action_print_survey()
@api.multi
def action_get_attachment_tree_view(self):
action = self.env.ref('base.action_attachment').read()[0]
@@ -148,8 +148,6 @@ class Applicant(models.Model):
partner_mobile = fields.Char("Mobile", size=32)
type_id = fields.Many2one('hr.recruitment.degree', "Degree")
department_id = fields.Many2one('hr.department', "Department")
survey = fields.Many2one('survey.survey', related='job_id.survey_id', string="Survey") # TDE FIXME: rename to survey_id
response_id = fields.Many2one('survey.user_input', "Response", ondelete="set null", oldname="response")
reference = fields.Char("Referred By")
day_open = fields.Float(compute='_compute_day', string="Days to Open")
day_close = fields.Float(compute='_compute_day', string="Days to Close")
@@ -323,27 +321,6 @@ class Applicant(models.Model):
}
return res
@api.multi
def action_start_survey(self):
self.ensure_one()
# create a response and link it to this applicant
if not self.response_id:
response = self.env['survey.user_input'].create({'survey_id': self.survey.id, 'partner_id': self.partner_id.id})
self.response_id = response.id
else:
response = self.response_id
# grab the token of the response and start surveying
return self.survey.with_context(survey_token=response.token).action_start_survey()
@api.multi
def action_print_survey(self):
""" If response is available then print this response otherwise print survey form (print template of the survey) """
self.ensure_one()
if not self.response_id:
return self.survey.action_print_survey()
else:
response = self.response_id
return self.survey.with_context(survey_token=response.token).action_print_survey()
@api.multi
def action_get_attachment_tree_view(self):
@@ -12,3 +12,8 @@ class RecruitmentSettings(models.TransientModel):
(0, "Do not manage CVs and motivation letter"),
(1, 'Allow the automatic indexation of resumes')
], string='Resumes')
module_hr_recruitment_survey = fields.Selection(selection=[
(0, "Do not use interview forms"),
(1, "Use interview forms during the recruitment process")
], string='Interview Form')
@@ -9,9 +9,5 @@
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
<record id="base.group_hr_user" model="res.groups">
<field name="implied_ids" eval="[(4, ref('base.group_survey_user'))]"/>
</record>
</data>
</odoo>
@@ -5,7 +5,6 @@ access_hr_recruitment_stage_user,hr.recruitment.stage.user,model_hr_recruitment_
access_hr_recruitment_stage_manager,hr.recruitment.stage.manager,model_hr_recruitment_stage,base.group_hr_manager,1,1,1,1
access_hr_recruitment_degree,hr.recruitment.degree,model_hr_recruitment_degree,base.group_hr_user,1,1,1,1
access_res_partner_hr_user,res.partner.user,base.model_res_partner,base.group_hr_user,1,1,1,1
access_survey_hr_user,survey.hr.user,survey.model_survey_survey,base.group_hr_user,1,1,1,0
access_calendar_event_hruser,calendar.event.hruser,calendar.model_calendar_event,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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
5 access_hr_recruitment_stage_manager hr.recruitment.stage.manager model_hr_recruitment_stage base.group_hr_manager 1 1 1 1
6 access_hr_recruitment_degree hr.recruitment.degree model_hr_recruitment_degree base.group_hr_user 1 1 1 1
7 access_res_partner_hr_user res.partner.user base.model_res_partner base.group_hr_user 1 1 1 1
access_survey_hr_user survey.hr.user survey.model_survey_survey base.group_hr_user 1 1 1 0
8 access_calendar_event_hruser calendar.event.hruser calendar.model_calendar_event base.group_hr_user 1 1 1 1
9 access_hr_recruitment_source_hr_officer hr.recruitment.source model_hr_recruitment_source base.group_hr_user 1 1 1 1
10 access_hr_recruitment_source_all hr.recruitment.source model_hr_recruitment_source 1 0 0 0
@@ -47,10 +47,3 @@
-
!python {model: hr.applicant, id: hr_case_programmer}: |
self.action_makeMeeting()
-
I print Applicant fill up the interview quetion
-
!python {model: hr.applicant, id: False}: |
context = self.env.context.copy()
context.update({'active_model': 'hr.applicant', 'active_ids': [ref("hr_recruitment.hr_case_programmer")], 'active_id': ref("hr_recruitment.hr_case_programmer")})
self.browse(ref('hr_case_programmer')).with_context(context).action_print_survey()
+2 -13
View File
@@ -22,7 +22,6 @@
<field name="document_ids"/>
<field name="no_of_hired_employee"/>
<field name="manager_id"/>
<field name="survey_id"/>
<field name="state"/>
<field name="user_id"/>
<templates>
@@ -57,13 +56,7 @@
</div>
</div>
<div class="row">
<div class="col-xs-12">
<a t-if="record.survey_id.raw_value" name="action_print_survey" type="object" title="Display Interview Form">Interview Form</a>
</div>
</div>
<div class="row">
<div class="row" name="recruitment">
<div class="col-xs-12">
<a t-if="record.state.raw_value == 'recruit'" name="set_open" type="object">Recruitment Done</a>
</div>
@@ -93,13 +86,9 @@
<div>
<a name="%(action_hr_job_applications)d" type="action">Applications</a>
</div>
<div>
<div name="documents">
<a name="action_get_attachment_tree_view" type="object">Documents</a>
</div>
<div>
<a t-if="record.survey_id.raw_value" name="action_print_survey" type="object" title="Display Interview Form">Interview Form</a>
<span t-if="!record.survey_id.raw_value">No Interview Form</span>
</div>
</div>
<div class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_new">
<div class="o_kanban_card_manage_title">
@@ -12,6 +12,7 @@
</header>
<group string="Recruitment">
<field name="module_document" widget="radio"/>
<field name="module_hr_recruitment_survey" widget="radio"/>
</group>
</form>
</field>
@@ -40,8 +40,6 @@
<field name="date_action" invisible="context.get('invisible_next_date', True)"/>
<field name="medium_id"/>
<field name="source_id"/>
<field name="survey" invisible="1"/>
<field name="response_id" invisible="1"/>
<field name="priority"/>
<field name="type_id" invisible="1"/>
<field name="availability" invisible="1"/>
@@ -71,29 +69,6 @@
<span class="o_stat_text">Meetings</span>
</div>
</button>
<button name="action_start_survey"
class="oe_stat_button"
icon="fa-user"
type="object"
help="Answer related job question"
context="{'survey_id': survey}"
attrs="{'invisible':[('survey','=',False)]}">
<div class="o_form_field o_stat_info">
<span class="o_stat_text">Start</span>
<span class="o_stat_text">Interview</span>
</div>
</button>
<button name="action_print_survey"
class="oe_stat_button"
icon="fa-print"
type="object"
help="Print interview report"
attrs="{'invisible':[('survey','=',False)]}">
<div class="o_form_field o_stat_info">
<span class="o_stat_text">Print</span>
<span class="o_stat_text">Interview</span>
</div>
</button>
<button name="action_get_attachment_tree_view"
class="oe_stat_button"
icon="fa-book"
@@ -149,8 +124,6 @@
<field name="reference"/>
</group>
<group string="Job">
<field name="survey" invisible="1"/>
<field name="response_id" invisible="1"/>
<field name="job_id"/>
<field name="department_id"/>
<field name="company_id" groups="base.group_multi_company" options='{"no_open":True}' />
@@ -263,7 +236,6 @@
<field name="stage_id" options='{"group_by_tooltip": {"requirements": "Requirements"}}'/>
<field name="color"/>
<field name="priority"/>
<field name="survey"/>
<field name="user_id"/>
<field name="user_email"/>
<field name="partner_name"/>
@@ -433,11 +405,6 @@
<field name="arch" type="xml">
<group name="employee_data" position="inside">
<group>
<label for="survey_id" groups="base.group_user"/>
<div groups="base.group_user" class="o_row">
<field name="survey_id"/>
<button string="Display Interview Form" name="action_print_survey" type="object" attrs="{'invisible':[('survey_id','=',False)]}" class="oe_link"/>
</div>
<field name="address_id" context="{'show_address': 1}" domain= "[('is_company', '=', True )]" options="{'always_reload': True}"/>
</group>
</group>
+6
View File
@@ -0,0 +1,6 @@
Integrated Surveys
-------------------
Create your own interview canvas based on our best practices. Use the survey
designer to adapt questions to your own process. Ask the applicant to fill in
the survey online, or the interviewer to use it during real interviews.
+3
View File
@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
import models
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
{
'name': "Hr Recruitment Interview Forms",
'version': '1.0',
'category': 'Human Resources Survey',
'summary': 'Surveys',
'description': """
Use interview forms during recruitment process.
This module is integrated with the survey module
to allow you to define interviews for different jobs.
""",
'depends': ['survey', 'hr_recruitment'],
'data': [
'security/hr_recruitment_survey_security.xml',
'security/ir.model.access.csv',
'data/survey_survey_data.xml',
'views/hr_job_views.xml',
'views/hr_applicant_views.xml',
],
'demo': [
'data/hr_job_demo.xml',
],
'test': ['test/recruitment_process.yml'],
'auto_install': False,
}
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!--Manage the job_id to get in hr.applicant-->
<record id="hr.job_developer" model="hr.job">
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_ceo" model="hr.job">
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_cto" model="hr.job">
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_consultant" model="hr.job">
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_hrm" model="hr.job">
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_marketing" model="hr.job">
<field name="survey_id" ref="recruitment_form"/>
</record>
<record id="hr.job_trainee" model="hr.job">
<field name="survey_id" ref="recruitment_form"/>
</record>
</data>
</odoo>
@@ -0,0 +1,227 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Recruitment Form -->
<record id="recruitment_form" model="survey.survey">
<field name="title">Recruitment Form</field>
<field name="stage_id" ref="survey.stage_permanent" />
<field name="auth_required" eval="True" />
<field name="users_can_go_back" eval="True" />
<field name="description">&lt;p&gt;This form is intended to help the responsible of a recruitment interview.&lt;/p&gt;</field>
<field name="thank_you_message">&lt;p&gt;&lt;/p&gt;</field>
</record>
<!-- Page 1 -->
<record id="recruitment_1" model="survey.page">
<field name="title">Basic information</field>
<field name="survey_id" ref="recruitment_form" />
<field name="sequence">1</field>
<field name="description">&lt;p&gt;&lt;/p&gt;</field>
</record>
<record id="recruitment_1_1" model="survey.question">
<field name="page_id" ref="recruitment_1" />
<field name="sequence">1</field>
<field name="question">From which university will you graduate?</field>
<field name="type">textbox</field>
</record>
<record id="recruitment_1_2" model="survey.question">
<field name="page_id" ref="recruitment_1" />
<field name="sequence">2</field>
<field name="question">What is your gender?</field>
<field name="type">simple_choice</field>
<field name="display_mode">dropdown</field>
</record>
<record id="recruitment_1_2_1" model="survey.label">
<field name="question_id" ref="recruitment_1_2"/>
<field name="sequence">1</field>
<field name="value">Male</field>
</record>
<record id="recruitment_1_2_2" model="survey.label">
<field name="question_id" ref="recruitment_1_2"/>
<field name="sequence">2</field>
<field name="value">Female</field>
</record>
<record id="recruitment_1_3" model="survey.question">
<field name="page_id" ref="recruitment_1" />
<field name="sequence">3</field>
<field name="question">What age group do you belong to?</field>
<field name="type">simple_choice</field>
<field name="display_mode">columns</field>
<field name="column_nb">4</field>
</record>
<record id="recruitment_1_3_1" model="survey.label">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">1</field>
<field name="value">0-15</field>
</record>
<record id="recruitment_1_3_2" model="survey.label">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">2</field>
<field name="value">16-20</field>
</record>
<record id="recruitment_1_3_3" model="survey.label">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">3</field>
<field name="value">21-30</field>
</record>
<record id="recruitment_1_3_4" model="survey.label">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">4</field>
<field name="value">31-40</field>
</record>
<record id="recruitment_1_3_5" model="survey.label">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">5</field>
<field name="value">41-50</field>
</record>
<record id="recruitment_1_3_6" model="survey.label">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">6</field>
<field name="value">51-60</field>
</record>
<record id="recruitment_1_3_7" model="survey.label">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">7</field>
<field name="value">61-70</field>
</record>
<record id="recruitment_1_3_8" model="survey.label">
<field name="question_id" ref="recruitment_1_3"/>
<field name="sequence">8</field>
<field name="value">71+</field>
</record>
<!-- Page 2 -->
<record id="recruitment_2" model="survey.page">
<field name="title">Education and Activities</field>
<field name="survey_id" ref="recruitment_form" />
<field name="sequence">2</field>
<field name="description">&lt;p&gt;&lt;/p&gt;</field>
</record>
<record id="recruitment_2_1" model="survey.question">
<field name="page_id" ref="recruitment_2" />
<field name="sequence">1</field>
<field name="question">Knowledge</field>
<field name="type">free_text</field>
</record>
<record id="recruitment_2_2" model="survey.question">
<field name="page_id" ref="recruitment_2" />
<field name="sequence">2</field>
<field name="question">Education</field>
<field name="type">free_text</field>
</record>
<record id="recruitment_2_3" model="survey.question">
<field name="page_id" ref="recruitment_2" />
<field name="sequence">3</field>
<field name="question">Experience</field>
<field name="type">free_text</field>
</record>
<record id="recruitment_2_4" model="survey.question">
<field name="page_id" ref="recruitment_2" />
<field name="sequence">4</field>
<field name="question">Activities</field>
<field name="type">free_text</field>
</record>
<!-- Page 3 -->
<record id="recruitment_3" model="survey.page">
<field name="title">Importance</field>
<field name="survey_id" ref="recruitment_form" />
<field name="sequence">3</field>
<field name="description">&lt;p&gt;&lt;/p&gt;</field>
</record>
<record id="recruitment_3_1" model="survey.question">
<field name="page_id" ref="recruitment_3" />
<field name="sequence">1</field>
<field name="question">Rate the Importance</field>
<field name="type">matrix</field>
<field name="matrix_subtype">simple</field>
</record>
<record id="rcol_3_1_1" model="survey.label">
<field name="question_id" ref="recruitment_3_1"/>
<field name="sequence">1</field>
<field name="value">Not important</field>
</record>
<record id="rcol_3_1_2" model="survey.label">
<field name="question_id" ref="recruitment_3_1"/>
<field name="sequence">2</field>
<field name="value">Somewhat important</field>
</record>
<record id="rcol_3_1_3" model="survey.label">
<field name="question_id" ref="recruitment_3_1"/>
<field name="sequence">3</field>
<field name="value">Important</field>
</record>
<record id="rcol_3_1_4" model="survey.label">
<field name="question_id" ref="recruitment_3_1"/>
<field name="sequence">4</field>
<field name="value">Very important</field>
</record>
<record id="rcol_3_1_5" model="survey.label">
<field name="question_id" ref="recruitment_3_1"/>
<field name="sequence">5</field>
<field name="value">Most important</field>
</record>
<record id="rrow_2_1_1" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">1</field>
<field name="value">Good pay</field>
</record>
<record id="rrow_2_1_2" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">2</field>
<field name="value">Getting on with colleagues</field>
</record>
<record id="rrow_2_1_3" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">3</field>
<field name="value">Office environment</field>
</record>
<record id="rrow_2_1_4" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">4</field>
<field name="value">Desk space</field>
</record>
<record id="rrow_2_1_5" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">5</field>
<field name="value">State of the art technology</field>
</record>
<record id="rrow_2_1_6" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">6</field>
<field name="value">Office location</field>
</record>
<record id="rrow_2_1_7" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">7</field>
<field name="value">Good management</field>
</record>
<record id="rrow_2_1_8" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">8</field>
<field name="value">Freebies such as tea, coffee and stationery</field>
</record>
<record id="rrow_2_1_9" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">9</field>
<field name="value">Perks such as free parking, gym passes</field>
</record>
<record id="rrow_2_1_10" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">10</field>
<field name="value">No out of hours working</field>
</record>
<record id="rrow_2_1_11" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">11</field>
<field name="value">Dress code</field>
</record>
<record id="rrow_2_1_12" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">12</field>
<field name="value">Regular meetings</field>
</record>
<record id="rrow_2_1_13" model="survey.label">
<field name="question_id_2" ref="recruitment_3_1"/>
<field name="sequence">13</field>
<field name="value">Good social life</field>
</record>
</odoo>
@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
import hr_job
import hr_applicant
@@ -0,0 +1,32 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class Applicant(models.Model):
_inherit = "hr.applicant"
survey_id = fields.Many2one('survey.survey', related='job_id.survey_id', string="Survey")
response_id = fields.Many2one('survey.user_input', "Response", ondelete="set null", oldname="response")
@api.multi
def action_start_survey(self):
self.ensure_one()
# create a response and link it to this applicant
if not self.response_id:
response = self.env['survey.user_input'].create({'survey_id': self.survey_id.id, 'partner_id': self.partner_id.id})
self.response_id = response.id
else:
response = self.response_id
# grab the token of the response and start surveying
return self.survey_id.with_context(survey_token=response.token).action_start_survey()
@api.multi
def action_print_survey(self):
""" If response is available then print this response otherwise print survey form (print template of the survey) """
self.ensure_one()
if not self.response_id:
return self.survey_id.action_print_survey()
else:
response = self.response_id
return self.survey_id.with_context(survey_token=response.token).action_print_survey()
@@ -0,0 +1,15 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
class Job(models.Model):
_inherit = "hr.job"
survey_id = fields.Many2one(
'survey.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")
@api.multi
def action_print_survey(self):
return self.survey_id.action_print_survey()
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="base.group_hr_user" model="res.groups">
<field name="implied_ids" eval="[(4, ref('base.group_survey_user'))]"/>
</record>
</data>
</odoo>
@@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_survey_hr_user,survey.hr.user,survey.model_survey_survey,base.group_hr_user,1,1,1,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_survey_hr_user survey.hr.user survey.model_survey_survey base.group_hr_user 1 1 1 0
@@ -0,0 +1,5 @@
-
I print Applicant fill up the interview question
-
!python {model: hr.applicant, id: hr_recruitment.hr_case_programmer}: |
self.action_print_survey()
@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="crm_case_tree_view_job_inherit" model="ir.ui.view">
<field name="name">hr.applicant.tree.inherit</field>
<field name="model">hr.applicant</field>
<field name="inherit_id" ref="hr_recruitment.crm_case_tree_view_job"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='source_id']" position="after">
<field name="survey_id" invisible="1"/>
<field name="response_id" invisible="1"/>
</xpath>
</field>
</record>
<record id="crm_case_form_view_job_inherit" model="ir.ui.view">
<field name="name">hr.applicant.form.inherit</field>
<field name="model">hr.applicant</field>
<field name="inherit_id" ref="hr_recruitment.crm_case_form_view_job"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_makeMeeting']" position="after">
<button name="action_start_survey"
class="oe_stat_button"
icon="fa-user"
type="object"
help="Answer related job question"
context="{'survey_id': survey_id}"
attrs="{'invisible':[('survey_id','=',False)]}">
<div class="o_form_field o_stat_info">
<span class="o_stat_text">Start</span>
<span class="o_stat_text">Interview</span>
</div>
</button>
<button name="action_print_survey"
class="oe_stat_button"
icon="fa-print"
type="object"
help="Print interview report"
attrs="{'invisible':[('survey_id','=',False)]}">
<div class="o_form_field o_stat_info">
<span class="o_stat_text">Print</span>
<span class="o_stat_text">Interview</span>
</div>
</button>
</xpath>
<xpath expr="//field[@name='job_id']" position="before">
<field name="survey_id" invisible="1"/>
<field name="response_id" invisible="1"/>
</xpath>
</field>
</record>
<record id="hr_kanban_view_applicant_inherit" model="ir.ui.view">
<field name="name">hr.applicants.kanban.inherit</field>
<field name="model">hr.applicant</field>
<field name="inherit_id" ref="hr_recruitment.hr_kanban_view_applicant"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='user_id']" position="before">
<field name="survey_id"/>
</xpath>
</field>
</record>
</odoo>
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="hr_job_survey_inherit" model="ir.ui.view">
<field name="name">hr.job.form.inherit</field>
<field name="model">hr.job</field>
<field name="inherit_id" ref="hr_recruitment.hr_job_survey"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='address_id']" position="before">
<label for="survey_id" groups="base.group_user"/>
<div groups="base.group_user" class="o_row">
<field name="survey_id"/>
<button string="Display Interview Form" name="action_print_survey" type="object" attrs="{'invisible':[('survey_id','=',False)]}" class="oe_link"/>
</div>
</xpath>
</field>
</record>
<record id="view_hr_job_kanban_inherit" model="ir.ui.view">
<field name="name">hr.job.kanban.inherit</field>
<field name="model">hr.job</field>
<field name="inherit_id" ref="hr_recruitment.view_hr_job_kanban"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='manager_id']" position="after">
<field name="survey_id"/>
</xpath>
<xpath expr='//div[@name="recruitment"]' position="before">
<div class="row">
<div class="col-xs-12">
<a t-if="record.survey_id.raw_value" name="action_print_survey" type="object" title="Display Interview Form">Interview Form</a>
</div>
</div>
</xpath>
<xpath expr='//div[@name="documents"]' position="after">
<div>
<a t-if="record.survey_id.raw_value" name="action_print_survey" type="object" title="Display Interview Form">Interview Form</a>
<span t-if="!record.survey_id.raw_value">No Interview Form</span>
</div>
</xpath>
</field>
</record>
</odoo>