5 <menuitem name="Recruitment"
6 id="menu_hr_recruitment_recruitment"
7 parent="hr.menu_hr_configuration"
8 groups="base.group_hr_manager"
12 id="act_hr_applicant_to_meeting"
14 res_model="calendar.event"
15 src_model="hr.applicant"
16 view_mode="calendar,tree,form,graph"
20 <record id="hr_job_stage_act" model="ir.actions.act_window">
21 <field name="name">Recruitment / Applicants Stages</field>
22 <field name="res_model">hr.recruitment.stage</field>
23 <field name="view_type">form</field>
24 <field name="domain">[]</field>
25 <field name="context">{}</field>
26 <field name="help" type="html">
27 <p class="oe_view_nocontent_create">
28 Click to add a new stage in the recruitment process.
30 Define here your stages of the recruitment process, for example:
31 qualification call, first interview, second interview, refused,
39 <record model="ir.ui.view" id="crm_case_tree_view_job">
40 <field name="name">Applicants</field>
41 <field name="model">hr.applicant</field>
42 <field name="arch" type="xml">
43 <tree string="Applicants" fonts="bold:message_unread==True">
44 <field name="message_unread" invisible="1"/>
45 <field name="last_stage_id" invisible="1"/>
46 <field name="create_date"/>
47 <field name="date_last_stage_update" invisible="1"/>
49 <field name="partner_name"/>
50 <field name="email_from"/>
51 <field name="partner_phone"/>
52 <field name="job_id"/>
53 <field name="stage_id"/>
54 <field name="title_action" invisible="context.get('invisible_next_action', True)"/>
55 <field name="date_action" invisible="context.get('invisible_next_date', True)"/>
56 <field name="source_id" invisible="1"/>
57 <field name="survey" invisible="1"/>
58 <field name="response_id" invisible="1"/>
59 <field name="priority"/>
60 <field name="type_id" invisible="1"/>
61 <field name="availability" invisible="1"/>
62 <field name="department_id" invisible="context.get('invisible_department', True)"/>
63 <field name="user_id"/>
68 <record model="ir.ui.view" id="crm_case_form_view_job">
69 <field name="name">Jobs - Recruitment Form</field>
70 <field name="model">hr.applicant</field>
71 <field name="arch" type="xml">
72 <form string="Jobs - Recruitment Form">
74 <field name="stage_id" widget="statusbar" clickable="True"/>
77 <div class="oe_right oe_button_box">
78 <button name="action_makeMeeting" class="oe_stat_button" icon="fa-calendar" type="object"
79 help="Schedule interview with this applicant">
80 <div>Schedule<br/>Meeting</div>
82 <button name="action_start_survey"
83 class="oe_stat_button"
86 help="Answer related job question"
87 context="{'survey_id': survey}"
88 attrs="{'invisible':[('survey','=',False)]}">
89 <div>Start<br/>Interview</div>
91 <button name="action_print_survey"
92 class="oe_stat_button"
95 help="Print interview report"
96 attrs="{'invisible':[('survey','=',False)]}">
97 <div>Print<br/>Interview</div>
99 <button name="action_get_attachment_tree_view"
100 class="oe_stat_button"
103 <field name="attachment_number" widget="statinfo" string="Documents"/>
106 <div class="oe_title">
107 <label for="name" class="oe_edit_only"/>
108 <h1><field name="name"/></h1>
109 <label for="partner_name" class="oe_edit_only"/>
110 <h2 style="display: inline-block;">
111 <field name="partner_name" class="oe_inline"/>
112 <button string="Create Employee" name="create_employee_from_applicant" type="object"
113 class="oe_link oe_inline" style="margin-left: 8px;"
114 attrs="{'invisible': [('emp_id', '!=', False)]}"/>
119 <field name="partner_id"
120 on_change="onchange_partner_id(partner_id)"/>
121 <field name="email_from" widget="email"/>
122 <field name="partner_phone"/>
123 <field name="partner_mobile"/>
124 <field name="type_id" placeholder="Degree"/>
127 <field name="user_id"
128 context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'base.group_hr_manager']}"/>
129 <label for="title_action"/>
131 <field name="date_action"/>
132 <field name="title_action" class="oe_inline" placeholder="e.g. Call for interview"/>
134 <field name="priority" widget="priority"/>
135 <field name="source_id"/>
136 <field name="reference"/>
139 <field name="survey" invisible="1"/>
140 <field name="response_id" invisible="1"/>
141 <field name="job_id" on_change="onchange_job(job_id)"/>
142 <field name="department_id" on_change="onchange_department_id(department_id, stage_id)"/>
143 <field name="company_id" />
144 <label for="availability"/>
146 <field name="availability" class="oe_inline"/> <label string="Day(s)" class="oe_inline"/>
149 <group string="Contract">
150 <label for="salary_expected"/>
152 <field name="salary_expected" class="oe_inline"/>
153 <span class="oe_inline" attrs="{'invisible':[('salary_expected_extra','=',False)]}"> + </span>
154 <field name="salary_expected_extra" class="oe_inline" placeholder="Extra advantages..."/>
156 <label for="salary_proposed"/>
158 <field name="salary_proposed" class="oe_inline"/>
159 <span class="oe_inline" attrs="{'invisible':[('salary_proposed_extra','=',False)]}"> + </span>
160 <field name="salary_proposed_extra" class="oe_inline" placeholder="Extra advantages..."/>
162 <field name="emp_id" readonly="1"/>
166 <field name="categ_ids" widget="many2many_tags"/>
168 <separator string="Application Summary"/>
169 <field name="description" placeholder="Feedback of interviews..."/>
171 <div class="oe_chatter">
172 <field name="message_follower_ids" widget="mail_followers"/>
173 <field name="message_ids" widget="mail_thread"/>
179 <record model="ir.ui.view" id="crm_case_graph_view_job">
180 <field name="name">Jobs - Recruitment Graph</field>
181 <field name="model">hr.applicant</field>
182 <field name="arch" type="xml">
183 <graph string="Cases By Stage and Estimates" type="bar" orientation="vertical" stacked="True">
184 <field name="job_id" type="row"/>
185 <field name="stage_id" type="col"/>
186 <field name="salary_expected" type="measure"/>
191 <record id="view_crm_case_jobs_filter" model="ir.ui.view">
192 <field name="name">Jobs - Recruitment Search</field>
193 <field name="model">hr.applicant</field>
194 <field name="arch" type="xml">
195 <search string="Search Applicants">
196 <field name="partner_name" filter_domain="['|','|',('name','ilike',self),('partner_name','ilike',self),('email_from','ilike',self)]" string="Subject / Applicant"/>
197 <filter string="My" domain="[('user_id', '=', uid)]"/>
198 <filter string="Unassigned" domain="[('user_id', '=', False)]"/>
200 <filter string="Next Actions" context="{'invisible_next_action':False, 'invisible_next_date':False}"
201 domain="[('date_action','<>',False)]" help="Filter and view on next actions and date"/>
203 <filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/>
204 <field name="job_id"/>
205 <field name="department_id"/>
206 <field name="user_id"/>
207 <field name="stage_id" domain="[]"/>
209 <field name="categ_ids"/>
211 <group expand="0" string="Group By">
212 <filter string="Responsible" domain="[]" context="{'group_by':'user_id'}"/>
213 <filter string="Job" domain="[]" context="{'group_by':'job_id'}"/>
214 <filter string="Degree" domain="[]" context="{'group_by':'type_id'}"/>
215 <filter string="Stage" domain="[]" context="{'group_by':'stage_id'}"/>
216 <filter string="Creation Date" context="{'group_by':'create_date'}"/>
217 <filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}"/>
223 <!-- CRM Lead Calendar View -->
224 <record model="ir.ui.view" id="hr_applicant_calendar_view">
225 <field name="name">Hr Applicants Calendar</field>
226 <field name="model">hr.applicant</field>
227 <field name="priority" eval="2"/>
228 <field name="arch" type="xml">
229 <calendar string="Applicants"
230 date_start="date_action" color="user_id">
232 <field name="partner_name"/>
233 <field name="title_action"/>
238 <!-- Hr Applicant Kanban View -->
239 <record model="ir.ui.view" id="hr_kanban_view_applicant">
240 <field name="name">Hr Applicants kanban</field>
241 <field name="model">hr.applicant</field>
242 <field name="arch" type="xml">
243 <kanban default_group_by="stage_id">
244 <field name="stage_id" options='{"group_by_tooltip": {"description": "Description", "legend_priority": "Use of stars"}}'/>
245 <field name="color"/>
246 <field name="priority"/>
247 <field name="survey"/>
248 <field name="user_id"/>
249 <field name="user_email"/>
250 <field name="partner_name"/>
251 <field name="type_id"/>
252 <field name="job_id"/>
253 <field name="title_action"/>
254 <field name="department_id"/>
255 <field name="categ_ids"/>
256 <field name="message_summary"/>
257 <field name="attachment_number"/>
259 <t t-name="kanban-tooltip">
260 <ul class="oe_kanban_tooltip">
261 <li t-if="record.type_id.raw_value"><b>Degree:</b> <field name="type_id"/></li>
262 <li t-if="record.partner_id.raw_value"><b>Contact:</b> <field name="partner_id"/></li>
263 <li t-if="record.department_id.raw_value"><b>Departement:</b> <field name="department_id"/></li>
266 <t t-name="kanban-box">
267 <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click oe_applicant_kanaban oe_semantic_html_override">
268 <div class="oe_dropdown_toggle oe_dropdown_kanban">
269 <span class="oe_e">i</span>
270 <ul class="oe_dropdown_menu">
271 <t t-if="widget.view.is_action_enabled('delete')"><li><a type="delete">Delete</a></li></t>
272 <li><a name="action_makeMeeting" type="object">Schedule Interview</a></li>
273 <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
276 <div class="oe_kanban_content" tooltip="kanban-tooltip">
277 <t t-if="record.partner_name.raw_value"><b><field name="partner_name"/></b><br/></t>
278 <i><field name="name"/></i><br/>
279 <field name="job_id"/><br/>
280 <t t-if="record.partner_mobile.raw_value">Mobile: <field name="partner_mobile"/><br/></t>
281 <t t-if="record.date_action.raw_value and record.date_action.raw_value lt (new Date())" t-set="red">oe_kanban_text_red</t>
282 <span t-attf-class="#{red || ''}"><field name="date_action"/></span>
283 <t t-if="record.date_action.raw_value"> : </t>
284 <field name="title_action"/>
285 <field name="categ_ids" class="oe_margin_top_4"/>
286 <div class="oe_kanban_bottom_right">
287 <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 pull-right"/>
288 <div class="pull-left" groups="base.group_user">
289 <field name="priority" widget="priority"/>
292 <div class="oe_kanban_footer_left oe_margin_top_4">
293 <t t-raw="record.message_summary.raw_value"/>
294 <a t-if="record.attachment_number" name="action_get_attachment_tree_view" type="object"> <field name="attachment_number"/> Documents</a>
297 <div class="oe_clear"></div>
305 <record model="ir.actions.act_window" id="action_hr_job_applications">
306 <field name="name">Applications</field>
307 <field name="res_model">hr.applicant</field>
308 <field name="view_mode">kanban,tree,form,graph,calendar</field>
309 <field name="context">{'search_default_job_id': [active_id], 'default_job_id': active_id, 'empty_list_help_model': 'hr.job'}</field>
310 <field name="help" type="html">
312 Odoo helps you track applicants in the recruitment
313 process and follow up all operations: meetings, interviews, etc.
315 Applicants and their attached CV are created automatically when an email is sent.
316 If you install the document management modules, all resumes are indexed automatically,
317 so that you can easily search through their content.
323 <record id="view_job_filter_recruitment" model="ir.ui.view">
324 <field name="name">Job</field>
325 <field name="model">hr.job</field>
326 <field name="inherit_id" ref="hr.view_job_filter"/>
327 <field name="arch" type="xml">
328 <field name="department_id" positon="after">
330 <filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/>
335 <!-- Action for the stat button of the no_employee -->
336 <record model="ir.actions.act_window" id="action_hr_job_no_employee">
337 <field name="name">Employees</field>
338 <field name="res_model">hr.employee</field>
339 <field name="view_mode">kanban,tree,form</field>
340 <field name="context">{'search_default_job_id': active_id}</field>
341 <field name="help" type="html">
342 <p class="oe_view_nocontent_create">
343 Click to add a new employee.
345 With just a quick glance on the Odoo employee screen, you
346 can easily find all the information you need for each person;
347 contact data, job position, availability, etc.
352 <record id="hr_job_survey" model="ir.ui.view">
353 <field name="name">hr.job.form1</field>
354 <field name="model">hr.job</field>
355 <field name="inherit_id" ref="hr.view_hr_job_form"/>
356 <field name="arch" type="xml">
357 <group name="employee_data" position="inside">
358 <label for="survey_id" groups="base.group_user"/>
359 <div groups="base.group_user">
360 <field name="survey_id" class="oe_inline" domain="[('res_model','=','hr_recruitment')]"/>
361 <button string="Print Interview" name="action_print_survey" type="object" attrs="{'invisible':[('survey_id','=',False)]}" class="oe_inline oe_link"/>
363 <label for="address_id"/>
365 <field name="address_id" context="{'show_address': 1}"/>
366 <span class="oe_grey">(empty = remote work)</span>
369 <xpath expr="//field[@name='department_id']" position="after">
370 <label for="alias_name" string="Specific Email Address" 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"/>
371 <div name="alias_def" attrs="{'invisible': [('alias_domain', '=', False)]}">
372 <field name="alias_id" class="oe_read_only oe_inline"
373 string="Email Alias" required="0"/>
374 <div class="oe_edit_only oe_inline" name="edit_alias" style="display: inline;" >
375 <field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
379 <xpath expr="//field[@name='department_id']" position="after">
380 <field name="user_id" class="oe_inline"/>
382 <xpath expr="//div[@name='buttons']" position="inside">
383 <div class="oe_button_box" >
384 <button class="oe_stat_button"
386 name="%(action_hr_job_applications)d"
387 context="{'default_user_id': user_id}"
389 <field name="application_count" widget="statinfo" string="Applications"/>
391 <button class="oe_stat_button"
393 name="%(action_hr_job_no_employee)d"
395 <field name="no_of_employee" widget="statinfo" string="Employees"/>
397 <button class="oe_stat_button"
399 name="action_get_attachment_tree_view"
401 <field name="documents_count" widget="statinfo" string="Documents"/>
408 <record id="view_hr_job_kanban" model="ir.ui.view">
409 <field name="name">hr.job.kanban</field>
410 <field name="model">hr.job</field>
411 <field name="arch" type="xml">
412 <kanban class="oe_background_grey">
414 <field name="alias_name"/>
415 <field name="alias_domain"/>
416 <field name="department_id"/>
417 <field name="no_of_recruitment"/>
418 <field name="color"/>
419 <field name="application_ids"/>
420 <field name="document_ids"/>
421 <field name="no_of_hired_employee"/>
422 <field name="manager_id"/>
423 <field name="survey_id"/>
424 <field name="state"/>
425 <field name="user_id"/>
427 <t t-name="kanban-box">
428 <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_job oe_kanban_card oe_kanban_global_click">
429 <div class="oe_dropdown_toggle oe_dropdown_kanban oe_custom">
430 <span class="oe_e">Ã</span>
431 <ul class="oe_dropdown_menu">
432 <t t-if="widget.view.is_action_enabled('edit')">
433 <li><a type="edit">Edit...</a></li>
435 <t t-if="widget.view.is_action_enabled('delete')">
436 <li><a type="delete">Delete</a></li>
438 <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
441 <div class="oe_kanban_content">
442 <t t-if="record.user_id.raw_value">
443 <img t-att-src="kanban_image('res.users', 'image_medium', record.user_id.raw_value[0])" t-att-title="record.user_id.value" class="oe_kanban_avatar oe_job_avatar pull-right"/>
445 <t t-if="record.user_id.raw_value === false">
446 <img t-att-src='_s + "/base/static/src/img/avatar.png"' class="oe_kanban_avatar oe_job_avatar pull-right"/>
448 <div class="oe_job_detail">
449 <div class="text-center oe_job_font oe_kanban_ellipsis">
450 <strong><field name="name"/></strong>
452 <div class="text-center oe_job_font oe_kanban_ellipsis">
453 <strong><field name="department_id"/>
454 <span t-if="record.manager_id.value" class="oe_manager_name">
455 (<t t-esc="record.manager_id.value"/>)
458 <div class="text-center oe_job_alias oe_kanban_ellipsis" t-if="record.alias_name.value and record.alias_domain.value and record.state.raw_value == 'recruit'">
459 <small><i class="fa fa-envelope-o"></i> <field name="alias_id"/></small>
463 <t t-if="record.state.raw_value == 'recruit'">
464 <div class="col-md-6 oe_applications">
465 <div class="oe_applications oe_job_font">
466 <a name="%(action_hr_job_applications)d" type="action">
467 <span><t t-esc="record.application_ids.raw_value.length"/> Applications</span>
470 <a t-if="record.document_ids.raw_value.length gt 0" name="action_get_attachment_tree_view" type="object">
471 <span t-if="record.document_ids.raw_value.length gt 1"><t t-esc="record.document_ids.raw_value.length"/> Documents</span>
472 <span t-if="record.document_ids.raw_value.length lt 2"><t t-esc="record.document_ids.raw_value.length"/> Document</span>
476 <div class="col-md-5">
477 <div class="oe_job_justgage">
478 <field state="recruit" name="no_of_hired_employee" widget="gauge"
479 style="margin-top:7px; width:160px; height: 120px;"
481 'max_field': 'no_of_recruitment',
482 'label': 'Hired Employees',
483 'on_change': 'action_set_no_of_recruitment',
484 'on_click_label': 'employee(s) to recruit',
486 'gauge_value_field': 'no_of_recruitment',
493 <t t-if="record.state.raw_value == 'open'">
494 <div class="oe_start_recruitment">
495 <p><b>click here</b>, To start the recruitment</p>
496 <img src="/hr_recruitment/static/src/img/down1.png"/>
499 <div class="oe_launch_recruitment">
500 <a t-if="record.state.raw_value == 'open'" data-name="job_recruitment" data-type="object" class="oe_kanban_action">Launch Recruitment</a>
501 <a t-if="record.state.raw_value == 'recruit'" data-name="job_open" data-type="object" class="oe_kanban_action">Recruitment Done</a>
502 <a t-if="record.survey_id.raw_value"> | </a>
503 <a t-if="record.survey_id.raw_value" data-name="action_print_survey" data-type="object" class="oe_kanban_action">Print Interview</a>
513 <!-- hr related job position menu action -->
514 <record model="ir.actions.act_window" id="action_hr_job">
515 <field name="name">Job Positions</field>
516 <field name="res_model">hr.job</field>
517 <field name="view_type">form</field>
518 <field name="view_mode">kanban,tree,form</field>
519 <field name="context">{'search_default_in_recruitment': 1}</field>
520 <field name="help" type="html">
521 <p class="oe_view_nocontent_create">
522 Click here to create a new job. You can remove the "In Recruitment" filter to display all the job positions.
525 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
530 <!-- Stage Tree View -->
531 <record model="ir.ui.view" id="hr_recruitment_stage_tree">
532 <field name="name">hr.recruitment.stage.tree</field>
533 <field name="model">hr.recruitment.stage</field>
534 <field name="arch" type="xml">
535 <tree string="Stages">
536 <field name="sequence" invisible="1"/>
538 <field name="department_id"/>
544 <!-- Stage Form View -->
545 <record model="ir.ui.view" id="hr_recruitment_stage_form">
546 <field name="name">hr.recruitment.stage.form</field>
547 <field name="model">hr.recruitment.stage</field>
548 <field name="arch" type="xml">
549 <form string="Stage">
550 <group string="Stage Definition">
553 <field name="department_id"/>
554 <field name="sequence"/>
555 <field name="template_id" domain= "[('model_id.model', '=', 'hr.applicant')]"/>
559 <field name="legend_priority"/>
562 <separator string="Requirements"/>
563 <field name="requirements"/>
568 <!-- Stage Action -->
569 <record id="hr_recruitment_stage_act" model="ir.actions.act_window">
570 <field name="name">Stages</field>
571 <field name="res_model">hr.recruitment.stage</field>
572 <field name="view_type">form</field>
573 <field name="view_id" ref="hr_recruitment_stage_tree"/>
574 <field name="help" type="html">
575 <p class="oe_view_nocontent_create">
576 Click to add a new stage in the recruitment process.
578 Don't forget to specify the department if your recruitment process
579 is different according to the job position.
585 id="menu_hr_recruitment_stage"
587 parent="menu_hr_recruitment_recruitment"
588 action="hr_recruitment_stage_act"
589 sequence="1" groups="base.group_no_one"/>
591 <!-- Degree Tree View -->
592 <record model="ir.ui.view" id="hr_recruitment_degree_tree">
593 <field name="name">hr.recruitment.degree.tree</field>
594 <field name="model">hr.recruitment.degree</field>
595 <field name="arch" type="xml">
596 <tree string="Degree">
597 <field name="sequence" invisible="1"/>
603 <!-- Degree Form View -->
604 <record model="ir.ui.view" id="hr_recruitment_degree_form">
605 <field name="name">hr.recruitment.degree.form</field>
606 <field name="model">hr.recruitment.degree</field>
607 <field name="arch" type="xml">
608 <form string="Degree">
611 <field name="sequence" groups="base.group_no_one"/>
617 <!-- Degree Action -->
618 <record id="hr_recruitment_degree_action" model="ir.actions.act_window">
619 <field name="name">Degree</field>
620 <field name="res_model">hr.recruitment.degree</field>
621 <field name="view_type">form</field>
622 <field name="view_id" ref="hr_recruitment_degree_tree"/>
626 id="menu_hr_recruitment_degree"
628 parent="menu_hr_recruitment_recruitment"
629 action="hr_recruitment_degree_action"
630 sequence="5" groups="base.group_no_one"/>
632 <!-- Source Tree View -->
633 <record model="ir.ui.view" id="hr_recruitment_source_tree">
634 <field name="name">hr.recruitment.source.tree</field>
635 <field name="model">hr.recruitment.source</field>
636 <field name="arch" type="xml">
637 <tree string="Sources of Applicants">
642 <record model="ir.ui.view" id="hr_recruitment_source_form">
643 <field name="name">hr.recruitment.source.form</field>
644 <field name="model">hr.recruitment.source</field>
645 <field name="arch" type="xml">
646 <form string="Sources of Applicants">
653 <record id="hr_recruitment_source_action" model="ir.actions.act_window">
654 <field name="name">Sources of Applicants</field>
655 <field name="res_model">hr.recruitment.source</field>
656 <field name="view_type">form</field>
660 id="menu_hr_recruitment_source"
661 parent="menu_hr_recruitment_recruitment"
662 action="hr_recruitment_source_action"
663 groups="base.group_no_one"