[ADD] hr(_recruitement): onboarding tour

Also some tweaks in views (mainly wording)
This commit is contained in:
Fabien Pinckaers
2016-06-16 14:59:41 +02:00
committed by Aaron Bohy
parent 025dcfcd68
commit 3f4c062023
9 changed files with 111 additions and 23 deletions
+2 -2
View File
@@ -32,7 +32,7 @@ class Job(models.Model):
_description = "Job Position"
_inherit = ['mail.thread']
name = fields.Char(string='Job Name', required=True, index=True, translate=True)
name = fields.Char(string='Job Title', required=True, index=True, translate=True)
expected_employees = fields.Integer(compute='_compute_employees', string='Total Forecasted Employees', store=True,
help='Expected number of employees for this job position after new recruitment.')
no_of_employee = fields.Integer(compute='_compute_employees', string="Current Number of Employees", store=True,
@@ -48,7 +48,7 @@ class Job(models.Model):
company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.user.company_id)
state = fields.Selection([
('recruit', 'Recruitment in Progress'),
('open', 'Recruitment Closed')
('open', 'Not Recruiting')
], string='Status', readonly=True, required=True, track_visibility='always', copy=False, default='recruit', help="Set whether the recruitment process is open or closed for this job position.")
_sql_constraints = [
+4 -5
View File
@@ -336,19 +336,19 @@
<form string="Job">
<header>
<button name="set_recruit" string="Launch Recruitment" states="open" type="object" class="oe_highlight" groups="base.group_user"/>
<button name="set_open" string="Stop Recruitment" states="recruit" type="object" class="oe_highlight" groups="base.group_user"/>
<button name="set_open" string="Stop Recruitment" states="recruit" type="object" groups="base.group_user"/>
<field name="state" widget="statusbar" statusbar_visible="recruit,open"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box"/>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1><field name="name" placeholder="Job Position Name"/></h1>
<h1><field name="name" placeholder="e.g. Sales Manager"/></h1>
</div>
<group name="employee_data">
<group>
<field name="department_id" class="oe_inline"/>
<field name="no_of_recruitment" class="oe_inline"/>
<field name="department_id"/>
<field name="no_of_recruitment"/>
</group>
</group>
<div attrs="{'invisible': [('state', '!=', 'recruit')]}">
@@ -358,7 +358,6 @@
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</form>
</field>
+2
View File
@@ -26,6 +26,7 @@ You can define the different phases of interviews and easily rate the applicant
'web_kanban_gauge',
'utm',
'document',
'web_tour',
],
'data': [
'security/hr_recruitment_security.xml',
@@ -38,6 +39,7 @@ You can define the different phases of interviews and easily rate the applicant
'views/hr_recruitment_templates.xml',
'views/hr_department_views.xml',
'views/hr_job_views.xml',
'views/tour_views.xml',
],
'demo': ['data/hr_recruitment_demo.xml'],
'test': ['test/recruitment_process.yml'],
+4
View File
@@ -91,3 +91,7 @@ class Job(models.Model):
@api.multi
def action_set_no_of_recruitment(self, value):
return self.write({'no_of_recruitment': value})
@api.multi
def close_dialog(self):
return {'type': 'ir.actions.act_window_close'}
@@ -0,0 +1,36 @@
odoo.define('hr_recruitment.tour', function(require) {
"use strict";
var core = require('web.core');
var tour = require('web_tour.tour');
var _t = core._t;
tour.register('hr_recruitment_tour', {
'skip_enabled': true,
}, [{
trigger: '.o_app[data-menu-xmlid="hr_recruitment.menu_hr_recruitment_root"], .oe_menu_toggler[data-menu-xmlid="hr_recruitment.menu_hr_recruitment_root"]',
content: _t('Want to <b>start recruiting</b> like a pro? <i>Start here.</i>'),
position: 'bottom',
}, {
trigger: ".oe_kanban_action_button",
extra_trigger: '.o_hr_recruitment_kanban',
content: _t("Let\'s have a look at the <b>applications pipeline</b> for this job position."),
position: "bottom"
}, {
trigger: ".o_kanban_applicant .o_column_quick_create",
content: _t("Add columns to define the <b>interview stages</b>.<br/><i>e.g. New &gt; Qualified &gt; First Interview &gt; Recruited</i>"),
position: "right"
}, {
trigger: ".breadcrumb li:not(.active):last",
extra_trigger: '.o_kanban_applicant',
content: _t("Use the breadcrumbs to <b>go back to the dashboard</b>."),
position: "bottom"
}, {
trigger: ".o_job_alias",
extra_trigger: '.o_hr_recruitment_kanban',
content: _t("Try to send an email to this address, it will create an application automatically."),
position: "bottom"
}]);
});
+3 -5
View File
@@ -12,7 +12,7 @@
<field name="name">hr.job.kanban</field>
<field name="model">hr.job</field>
<field name="arch" type="xml">
<kanban class="oe_background_grey o_kanban_dashboard o_hr_recruitment_kanban">
<kanban class="oe_background_grey o_kanban_dashboard o_hr_recruitment_kanban" on_create="hr_recruitment.create_job_simple">
<field name="name"/>
<field name="alias_name"/>
<field name="alias_domain"/>
@@ -31,10 +31,8 @@
<div class="o_kanban_card_header">
<div class="o_kanban_card_header_title">
<div class="o_primary"><t t-esc="record.name.value"/></div>
<div class="o_secondary">
<span><t t-esc="record.department_id.value"/></span>
<span t-if="record.manager_id.value">(<t t-esc="record.manager_id.value"/>)</span>
<small t-if="record.alias_name.value and record.alias_domain.value and record.state.raw_value == 'recruit'"><i class="fa fa-envelope-o"></i> <field name="alias_id"/></small>
<div t-if="record.alias_name.value and record.alias_domain.value and record.state.raw_value == 'recruit'" class="o_secondary o_job_alias">
<small> <i class="fa fa-envelope-o"></i> <field name="alias_id"/> </small>
</div>
</div>
<div class="o_kanban_manage_button_section">
@@ -6,6 +6,7 @@
<link rel="stylesheet" href="/hr_recruitment/static/src/css/job_position.css"/>
<script type="text/javascript" src="/hr_recruitment/static/src/js/job_position.js"></script>
<script type="text/javascript" src="/hr_recruitment/static/src/js/tour.js"></script>
</xpath>
</template>
</data>
@@ -259,7 +259,7 @@
<field name="name">Hr Applicants kanban</field>
<field name="model">hr.applicant</field>
<field name="arch" type="xml">
<kanban default_group_by="stage_id">
<kanban default_group_by="stage_id" class="o_kanban_applicant">
<field name="stage_id" options='{"group_by_tooltip": {"requirements": "Requirements"}}'/>
<field name="color"/>
<field name="priority"/>
@@ -390,6 +390,41 @@
</field>
</record>
<record id="hr_job_simple_form" model="ir.ui.view">
<field name="name">hr.job.simple.form</field>
<field name="model">hr.job</field>
<field name="priority">200</field>
<field name="arch" type="xml">
<form string="Create a Job Position">
<sheet>
<group>
<field name="name" class="oe_inline" placeholder="e.g. Sales Manager"/>
<label for="alias_name" string="Job Email" attrs="{'invisible': [('alias_domain', '=', False)]}" help="Define a specific contact address for this job position. If you keep it empty, the default email address will be used which is in human resources settings"/>
<div name="alias_def" attrs="{'invisible': [('alias_domain', '=', False)]}">
<field name="alias_id" class="oe_read_only" string="Email Alias" required="0"/>
<div class="oe_edit_only" name="edit_alias">
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
</div>
</div>
</group>
<footer>
<button string="Create" name="close_dialog" type="object" class="btn-primary"/>
<button string="Discard" class="btn-default" special="cancel"/>
</footer>
</sheet>
</form>
</field>
</record>
<record id="create_job_simple" model="ir.actions.act_window">
<field name="name">Create a Job Position</field>
<field name="res_model">hr.job</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="hr_job_simple_form"/>
<field name="target">new</field>
</record>
<record id="hr_job_survey" model="ir.ui.view">
<field name="name">hr.job.form1</field>
<field name="model">hr.job</field>
@@ -454,13 +489,13 @@
<field name="res_model">hr.job</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,form</field>
<field name="context">{'search_default_in_recruitment': 1}</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click here to create a new job. You can remove the "In Recruitment" filter to display all the job positions.
</p>
<p>
Define job position profile and manage recruitment in a context of a particular job: print interview survey, define number of expected new employees, and manage its recruitment pipe
Click here to create a new job position.
</p><p>
Once a job position is created, you can track related applications
and manage the recruitment process.
</p>
</field>
</record>
@@ -474,10 +509,11 @@
<field name="context">{'search_default_in_recruitment': 1}</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click here to create a new job. You can remove the "In Recruitment" filter to display all the job positions.
</p>
<p>
Define job position profile and manage recruitment in a context of a particular job: print interview survey, define number of expected new employees, and manage its recruitment pipe
Click here to create a new job position.
</p><p>
Once a job position is created, you can track the applicants
and manage the recruitment process related to the job
position.
</p>
</field>
</record>
@@ -580,7 +616,12 @@
<field name="context">{'create': False}</field>
<field name="help" type="html">
<p>
Search through resumes and motivation letters.
No document yet.
</p><p>
This menu helps you search through resumes and motivation
letters. Odoo automatically indexes .PDF, .DOC, DOCX, .TXT
files so that you can search keywords from the content of these
files.
</p>
</field>
</record>
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Make the xmlid of menus required by the HR Recruitment tour available in webclient -->
<record id="menu_hr_recruitment_root" model="ir.ui.menu">
<field name="load_xmlid" eval="True"/>
</record>
</odoo>