mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-26 09:32:07 +02:00
19.0 vanilla
This commit is contained in:
parent
a1137a1456
commit
e1d89e11e3
2789 changed files with 1093187 additions and 605897 deletions
|
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="hr_applicant_category_view_form" model="ir.ui.view">
|
||||
<field name="name">hr.applicant.category.form</field>
|
||||
<field name="model">hr.applicant.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Tags">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="color"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_category_view_tree" model="ir.ui.view">
|
||||
<field name="name">hr.applicant.category.list</field>
|
||||
<field name="model">hr.applicant.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Tags" editable="bottom">
|
||||
<field name="name"/>
|
||||
<field name="color" widget="color_picker" />
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_category_action" model="ir.actions.act_window">
|
||||
<field name="name">Tags</field>
|
||||
<field name="res_model">hr.applicant.category</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Add a new tag
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="hr_applicant_refuse_reason_view_form" model="ir.ui.view">
|
||||
<field name="name">Applicant refuse reason form</field>
|
||||
<field name="model">hr.applicant.refuse.reason</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Refuse Reason">
|
||||
<sheet>
|
||||
<widget name="web_ribbon" text="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<div class="oe_title">
|
||||
<div class="oe_edit_only">
|
||||
<label for="name"/>
|
||||
</div>
|
||||
<h1>
|
||||
<field name="name"/>
|
||||
</h1>
|
||||
<field name="active" invisible="1"/>
|
||||
</div>
|
||||
<group>
|
||||
<field name="template_id" context="{'default_model': 'hr.applicant'}"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_refuse_reason_view_tree" model="ir.ui.view">
|
||||
<field name="name">Applicant refuse reason list</field>
|
||||
<field name="model">hr.applicant.refuse.reason</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Refuse Reason" editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="template_id" context="{'default_model': 'hr.applicant'}"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_refuse_reason_action" model="ir.actions.act_window">
|
||||
<field name="name">Refuse Reasons</field>
|
||||
<field name="res_model">hr.applicant.refuse.reason</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,743 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<record model="ir.ui.view" id="crm_case_tree_view_job">
|
||||
<field name="name">Applicants</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Applicants" class="o_search_matching_applicant" multi_edit="1" sample="1" decoration-danger="application_status == 'refused'" default_order="stage_id">
|
||||
<header>
|
||||
<button
|
||||
name="action_job_add_applicants"
|
||||
string="Create Applications"
|
||||
invisible="context.get('default_job_id') or context.get('no_create_application_button')"
|
||||
type="object"
|
||||
/>
|
||||
<button
|
||||
name="action_talent_pool_add_applicants"
|
||||
type="object"
|
||||
class="btn-primary"
|
||||
string="Add Applicants "
|
||||
display="always"
|
||||
invisible="not context.get('default_talent_pool_ids')"
|
||||
groups="hr_recruitment.group_hr_recruitment_user"
|
||||
/>
|
||||
<button type="object"
|
||||
name="archive_applicant"
|
||||
string="Refuse" class="btn btn-secondary"
|
||||
/>
|
||||
</header>
|
||||
<field name="message_needaction" column_invisible="True"/>
|
||||
<field name="last_stage_id" column_invisible="True"/>
|
||||
<field name="date_last_stage_update" column_invisible="True"/>
|
||||
<field name="partner_name" string="Name" readonly="1" optional="show"/>
|
||||
<field name="create_date" readonly="1" optional="show" options="{'show_time': False}"/>
|
||||
<field name="email_from" readonly="1" optional="hide"/>
|
||||
<field name="partner_phone" widget="phone" readonly="1" optional="hide"/>
|
||||
<field name="job_id" optional="show" column_invisible="context.get('default_talent_pool_ids')"/>
|
||||
<field name="stage_id" widget="badge_rotting" optional="show" column_invisible="context.get('default_talent_pool_ids')" options="{'no_open': True}"/>
|
||||
<field name="priority" widget="priority" nolabel="1" optional="show"/>
|
||||
<field name="categ_ids" widget="many2many_tags" options="{'color_field': 'color'}" optional="show"/>
|
||||
<field name="user_id" widget="many2one_avatar_user" optional="show"/>
|
||||
<field name="is_rotting" column_invisible="True"/>
|
||||
<field name="rotting_days" column_invisible="True"/>
|
||||
<field name="type_id" column_invisible="True"/>
|
||||
<field name="application_status" optional="hide" invisible="application_status == 'ongoing'"/>
|
||||
<field name="refuse_reason_id" optional='hide'/>
|
||||
<field name="activity_ids" widget="list_activity" optional="hide"/>
|
||||
<field name="activity_date_deadline" optional="hide"/>
|
||||
<field name="interviewer_ids" widget="many2many_avatar_user" optional="hide"/>
|
||||
<field name="medium_id" optional="hide"/>
|
||||
<field name="source_id" readonly="1" optional="hide"/>
|
||||
<field name="salary_expected" optional="hide"/>
|
||||
<field name="salary_proposed" optional="hide"/>
|
||||
<field name="availability" optional="hide"/>
|
||||
<field name="department_id" readonly="1" column_invisible="context.get('invisible_department', True)" optional="hide"/>
|
||||
<field name="company_id" column_invisible="True"/>
|
||||
<field name="company_id" groups="base.group_multi_company" readonly="1" optional="hide"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_view_tree_activity" model="ir.ui.view">
|
||||
<field name="name">hr.applicant.view.list.activity</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Next Activities" decoration-danger="activity_date_deadline < current_date" default_order="activity_date_deadline">
|
||||
<field name="partner_id"/>
|
||||
<field name="activity_date_deadline"/>
|
||||
<field name="activity_type_id"/>
|
||||
<field name="activity_summary"/>
|
||||
<field name="stage_id"/>
|
||||
<field name="activity_exception_decoration" widget="activity_exception"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="hr_applicant_view_form">
|
||||
<field name="name">Jobs - Recruitment Form</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Jobs - Recruitment Form" class="o_applicant_form">
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="application_status" invisible="1"/>
|
||||
<field name="employee_id" invisible="1"/>
|
||||
<field name="meeting_ids" invisible="1"/>
|
||||
<field name="refuse_reason_id" invisible="1"/>
|
||||
<field name="email_normalized" invisible="1"/>
|
||||
<field name="partner_phone_sanitized" invisible="1"/>
|
||||
<field name="emp_is_active" invisible="1"/>
|
||||
<field name="is_rotting" invisible="1"/>
|
||||
<field name="rotting_days" invisible="1"/>
|
||||
<header>
|
||||
<button string="Create Employee" name="create_employee_from_applicant" type="object" data-hotkey="q" groups="hr.group_hr_user"
|
||||
class="o_create_employee" invisible="employee_id or not active or not date_closed"/>
|
||||
<button string="Refuse" name="archive_applicant" type="object" invisible="not active or is_pool_applicant" data-hotkey="d"/>
|
||||
<button string="Restore" name="action_unarchive" type="object" invisible="active" data-hotkey="x"/>
|
||||
<field name="stage_id" widget="rotting_statusbar_duration" options="{'clickable': '1'}" invisible="(not active and not employee_id) or is_pool_applicant"/>
|
||||
<button string="Create Applications" name="action_job_add_applicants" type="object" invisible="not is_pool_applicant"/>
|
||||
<button string="Add to Pool" name="action_talent_pool_add_applicants" type="object" invisible="is_pool_applicant or is_applicant_in_pool"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="action_open_employee"
|
||||
type="object"
|
||||
class="oe_stat_button"
|
||||
icon="fa-id-card-o"
|
||||
groups="hr.group_hr_user"
|
||||
invisible="not (employee_id or emp_is_active)">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_value"><field name="employee_name" readonly="1"/></span>
|
||||
<span class="o_stat_text">Employee</span>
|
||||
</div>
|
||||
</button>
|
||||
<button name="action_open_applications"
|
||||
class="oe_stat_button"
|
||||
icon="fa-pencil"
|
||||
type="object"
|
||||
context="{'active_test': False}"
|
||||
invisible="not application_count or (application_count <= 1 and not is_pool_applicant)">
|
||||
<field name="application_count" widget="statinfo" string="Applications"/>
|
||||
</button>
|
||||
<button name="action_create_meeting" class="oe_stat_button" icon="fa-calendar" type="object" invisible="not id">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_text"><field name="meeting_display_text" /></span>
|
||||
<span class="o_stat_value"><field name="meeting_display_date" readonly="1"/></span>
|
||||
</div>
|
||||
</button>
|
||||
<button
|
||||
name="action_talent_pool_stat_button"
|
||||
class="oe_stat_button"
|
||||
icon="fa-users"
|
||||
type="object"
|
||||
invisible="not id or is_pool_applicant or not is_applicant_in_pool"
|
||||
groups="hr_recruitment.group_hr_recruitment_user">
|
||||
<field name="talent_pool_count" widget="statinfo" string="Talent Pools"/>
|
||||
</button>
|
||||
</div>
|
||||
<!-- Job pipe ribbons -->
|
||||
<widget name="web_ribbon" title="Refused" bg_color="text-bg-danger" invisible="application_status != 'refused'"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-secondary" invisible="application_status != 'archived'"/>
|
||||
<widget name="web_ribbon" title="Hired" invisible="application_status != 'hired'" />
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="legend_normal" invisible="1"/>
|
||||
<field name="legend_blocked" invisible="1"/>
|
||||
<field name="legend_waiting" invisible="1"/>
|
||||
<field name="legend_done" invisible="1"/>
|
||||
<field name="kanban_state" widget="hr_applicant_state_selection" invisible="application_status == 'refused' or application_status == 'archived' or is_pool_applicant" class="o_field_state_selection"/>
|
||||
<div class="oe_title pe-0">
|
||||
<label for="partner_name" class="oe_edit_only" string="Applicant" invisible="is_pool_applicant"/>
|
||||
<label for="partner_name" class="oe_edit_only" string="Talent" invisible="not is_pool_applicant"/>
|
||||
<h1 class="d-flex justify-content-between align-items-center me-4">
|
||||
<field name="partner_name" options="{'line_breaks': False}" context="{'default_company_id': company_id}" required="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="partner_name" invisible="1"/>
|
||||
<field name="partner_id" invisible="1" />
|
||||
<field name="refuse_reason_id" invisible="active"/>
|
||||
<field name="email_from" placeholder="e.g. john.doe@example.com" widget="email"/>
|
||||
<field name="partner_phone" widget="phone"/>
|
||||
<field name="linkedin_profile" placeholder="e.g. https://www.linkedin.com/in/..." widget="url"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="priority" widget="priority"/>
|
||||
<field name="job_id" invisible="is_pool_applicant" placeholder="Spontaneous application"/>
|
||||
<field name="talent_pool_ids" widget="many2many_tags" options="{'color_field': 'color'}" invisible="not is_pool_applicant"/>
|
||||
<field name="user_id" widget="many2one_avatar_user" placeholder="Unassigned"/>
|
||||
<field name="interviewer_ids" options="{'no_create': True}" widget="many2many_avatar_user" invisible="is_pool_applicant" placeholder="Who can access applicants" />
|
||||
<field name="date_closed" invisible="not date_closed" />
|
||||
<field name="categ_ids" placeholder="e.g. Trainee" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"/>
|
||||
</group>
|
||||
</group>
|
||||
<field name="applicant_properties" columns="2"/>
|
||||
<notebook>
|
||||
<page string="Note" name="application_note">
|
||||
<field name="applicant_notes" type="html" options="{'collaborative': true, 'resizable': false}" placeholder="Add private notes about this applicant..."/>
|
||||
</page>
|
||||
<page string="Details" name="application_details">
|
||||
<group>
|
||||
<group string="Applicant">
|
||||
<field name="type_id" placeholder="e.g. Masters"/>
|
||||
<field name="availability" placeholder="Directly"/>
|
||||
</group>
|
||||
<group string="Job">
|
||||
<field name="department_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company" options='{"no_open":True}' placeholder="Visible to all"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<group string="Salary Package" name="recruitment_contract" groups="hr_recruitment.group_hr_recruitment_user">
|
||||
<label for="salary_expected"/>
|
||||
<div class="o_row">
|
||||
<field name="salary_expected" placeholder="Expected"/>
|
||||
<span invisible="not salary_expected_extra"> + </span>
|
||||
<field name="salary_expected_extra" placeholder="Other benefits"/>
|
||||
</div>
|
||||
<label for="salary_proposed"/>
|
||||
<div class="o_row">
|
||||
<field name="salary_proposed"/>
|
||||
<span invisible="not salary_proposed_extra"> + </span>
|
||||
<field name="salary_proposed_extra" placeholder="Other benefits"/>
|
||||
</div>
|
||||
</group>
|
||||
<group string="Sourcing">
|
||||
<field name="source_id" placeholder="Select where the applicant comes from"/>
|
||||
<field name="medium_id" placeholder="Select the way applicant found the offer"/>
|
||||
<field name="campaign_id" placeholder="Select the campaign the applicant was part of"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="o_attachment_preview" groups="hr_recruitment.group_applicant_cv_display"/>
|
||||
<chatter open_attachments="True" reload_on_attachment="True"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_view_form_interviewer" model="ir.ui.view">
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="inherit_id" ref="hr_applicant_view_form"/>
|
||||
<field name="priority">50</field>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form" position="attributes">
|
||||
<attribute name="js_class">hr_recruitment_interviewer</attribute>
|
||||
<attribute name="class">o_applicant_form</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='recruitment_contract']" position="replace"/>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="crm_case_pivot_view_job">
|
||||
<field name="name">Jobs - Recruitment</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Job Applications" sample="1">
|
||||
<field name="job_id" type="row"/>
|
||||
<field name="stage_id" type="col"/>
|
||||
<field name="color" invisible="1"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="crm_case_graph_view_job">
|
||||
<field name="name">Jobs - Recruitment Graph</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Cases By Stage and Estimates" sample="1">
|
||||
<field name="stage_id"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_view_search_bis" model="ir.ui.view">
|
||||
<field name="name">hr.applicant.view.search</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Applicants">
|
||||
<field string="Applicant" name="partner_name"
|
||||
filter_domain="['|', ('partner_name', 'ilike', self), ('email_from', 'ilike', self)]"/>
|
||||
<field string="Email" name="email_from" filter_domain="[('email_from', 'ilike', self)]"/>
|
||||
<field name="job_id"/>
|
||||
<field name="department_id" operator="child_of"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="user_id"/>
|
||||
<field name="stage_id" domain="[]"/>
|
||||
<field name="categ_ids"/>
|
||||
<field name="refuse_reason_id"/>
|
||||
<field name="application_status"/>
|
||||
<field name="date_closed"/>
|
||||
<field name="activity_user_id" string="Activities of"/>
|
||||
<field name="activity_type_id" string="Activity type"/>
|
||||
<field name="attachment_ids" filter_domain="[('attachment_ids', 'any', [('index_content', 'ilike', self), ('res_model', '=', 'hr.applicant')])]" string="Resume's content"/>
|
||||
<filter string="My Applications" name="my_applications" domain="[('user_id', '=', uid)]"/>
|
||||
<filter string="Unassigned" name="unassigned" domain="[('user_id', '=', False)]"/>
|
||||
<separator/>
|
||||
<filter string="Applicants" name="applicants" domain="[('talent_pool_ids', '=', False)]"/>
|
||||
<filter string="Talents" name="talents" domain="[('talent_pool_ids', '!=', False)]"/>
|
||||
<separator/>
|
||||
<filter string="In Progress" name="ongoing" domain="[('date_closed', '=', False), ('active', '=', True), ('refuse_reason_id', '=', False)]"/>
|
||||
<filter string="Hired" name="hired" domain="[('date_closed', '!=', False)]"/>
|
||||
<separator/>
|
||||
<filter string="Ready for Next Stage" name="done" domain="[('kanban_state', '=', 'done')]"/>
|
||||
<filter string="Waiting" name="waiting" domain="[('kanban_state', '=', 'waiting')]"/>
|
||||
<filter string="Blocked" name="blocked" domain="[('kanban_state', '=', 'blocked')]"/>
|
||||
<filter string="Rotting" name="filter_rotting" domain="[('is_rotting', '=', True)]"/>
|
||||
<separator/>
|
||||
<filter string="Directly Available" name="applicant_availability" domain="['|',('availability', '<=', 'today'),('availability','=', False)]"/>
|
||||
<separator/>
|
||||
<filter string="Creation Date" name="filter_create" date="create_date"/>
|
||||
<filter string="Last Stage Update" name="filter_date_last_stage_update" date="date_last_stage_update"/>
|
||||
<separator/>
|
||||
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction', '=', True)]" groups="mail.group_mail_notification_type_inbox"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="inactive" domain="[('active', '=', False), ('refuse_reason_id', '=', False)]"/>
|
||||
<filter string="Refused" name="refused" domain="[('active', '=', False), ('refuse_reason_id', '!=', False)]"/>
|
||||
<separator/>
|
||||
<filter invisible="1" string="My Activities" name="filter_activities_my"
|
||||
domain="[('activity_user_id', '=', uid)]"/>
|
||||
<separator invisible="1"/>
|
||||
<filter invisible="1" string="Late Activities" name="activities_overdue"
|
||||
domain="[('my_activity_date_deadline', '<', 'today')]"
|
||||
help="Show all records whose next activity date is past"/>
|
||||
<filter invisible="1" string="Today Activities" name="activities_today"
|
||||
domain="[('my_activity_date_deadline', '=', 'today')]"/>
|
||||
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
|
||||
domain="[('my_activity_date_deadline', '>', 'today')]"/>
|
||||
<separator/>
|
||||
<filter invisible="1" string="Running Applicants" name="running_applicant_activities"
|
||||
domain="[('stage_id.hired_stage', '=', False)]"/>
|
||||
<separator/>
|
||||
<group>
|
||||
<filter string="Job" name="job" domain="[]" context="{'group_by': 'job_id'}"/>
|
||||
<filter string="Stage" name="stage" domain="[]" context="{'group_by': 'stage_id'}"/>
|
||||
<filter string="Responsible" name="responsible" domain="[]" context="{'group_by': 'user_id'}"/>
|
||||
<filter string="Talent Pool" name="talent_pool" domain="[]" context="{'group_by': 'talent_pool_ids'}"/>
|
||||
<filter string="Creation Date" name="creation_date" context="{'group_by': 'create_date'}"/>
|
||||
<filter string="Hiring Date" name="hired_date" context="{'group_by': 'date_closed'}"/>
|
||||
<filter string="Last Stage Update" name="last_stage_update" context="{'group_by': 'date_last_stage_update'}"/>
|
||||
<filter string="Refuse Reason" name="refuse_reason_id" domain="[]" context="{'group_by': 'refuse_reason_id'}"/>
|
||||
<filter string="Company" name="company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<filter string="Properties" name="group_by_applicant_properties" context="{'group_by': 'applicant_properties'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="hr_applicant_calendar_view">
|
||||
<field name="name">Hr Applicants Calendar</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="priority" eval="2"/>
|
||||
<field name="arch" type="xml">
|
||||
<calendar
|
||||
string="Applicants"
|
||||
mode="month"
|
||||
date_start="activity_date_deadline"
|
||||
color="user_id"
|
||||
event_limit="5"
|
||||
hide_time="true"
|
||||
quick_create="0"
|
||||
>
|
||||
<field name="partner_name"/>
|
||||
<field name="job_id"/>
|
||||
<field name="priority" widget="priority"/>
|
||||
<field name="user_id" filters="1" invisible="1"/>
|
||||
<field name="activity_summary"/>
|
||||
</calendar>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="quick_create_applicant_form" model="ir.ui.view">
|
||||
<field name="name">hr.applicant.form.quick_create</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="priority">1000</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<group>
|
||||
<field name="partner_name" options="{'no_create_edit': True}" placeholder="e.g. John Doe"/>
|
||||
<field name="job_id" options="{'no_open': True}"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Hr Applicant Kanban View -->
|
||||
<record model="ir.ui.view" id="hr_kanban_view_applicant">
|
||||
<field name="name">Hr Applicants kanban</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban highlight_color="color" default_group_by="stage_id" class="o_kanban_applicant o_search_matching_applicant" quick_create_view="hr_recruitment.quick_create_applicant_form" sample="1"
|
||||
js_class="rotting_kanban">
|
||||
<header>
|
||||
<button
|
||||
name="action_talent_pool_add_applicants"
|
||||
type="object"
|
||||
class="btn-primary"
|
||||
string="Add Applicants "
|
||||
display="always"
|
||||
invisible="not context.get('default_talent_pool_ids')"
|
||||
groups="hr_recruitment.group_hr_recruitment_user"
|
||||
/>
|
||||
</header>
|
||||
<field name="stage_id" options='{"group_by_tooltip": {"requirements": "Requirements"}}'/>
|
||||
<field name="legend_normal"/>
|
||||
<field name="legend_blocked"/>
|
||||
<field name="legend_waiting"/>
|
||||
<field name="legend_done"/>
|
||||
<field name="date_closed"/>
|
||||
<field name="color"/>
|
||||
<field name="user_id"/>
|
||||
<field name="active"/>
|
||||
<field name="application_status" />
|
||||
<field name="company_id" invisible="1"/> <!-- We need to keep this field as it is used in the domain of user_id in the model -->
|
||||
<progressbar field="kanban_state" colors='{"done": "success", "waiting": "warning", "blocked": "danger"}'/>
|
||||
<templates>
|
||||
<t t-name="menu">
|
||||
<a role="menuitem" name="action_create_meeting" type="object" class="dropdown-item">Schedule Interview</a>
|
||||
<a role="menuitem" name="archive_applicant" type="object" class="dropdown-item">Refuse</a>
|
||||
<a t-if="record.active.raw_value" role="menuitem" type="archive" class="dropdown-item">Archive</a>
|
||||
<a t-if="!record.active.raw_value" role="menuitem" type="unarchive" class="dropdown-item">Unarchive</a>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<a role="menuitem" name="action_talent_pool_add_applicants" type="object" class="dropdown-item"
|
||||
invisible="is_pool_applicant or is_applicant_in_pool">Add to Pool</a>
|
||||
</t>
|
||||
<t t-name="card">
|
||||
<widget name="web_ribbon" title="Hired" bg_color="text-bg-success" invisible="not date_closed"/>
|
||||
<widget name="web_ribbon" title="Refused" bg_color="text-bg-danger" invisible="application_status != 'refused'"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-secondary" invisible="application_status != 'archived'"/>
|
||||
<field t-if="record.partner_name.raw_value" class="fw-bold fs-5" name="partner_name"/>
|
||||
<field name="job_id" invisible="context.get('search_default_job_id', False) or is_pool_applicant"/>
|
||||
<field name="categ_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
<field name="applicant_properties" widget="properties"/>
|
||||
<footer>
|
||||
<field name="priority" widget="priority"/>
|
||||
<field class="ms-1 align-items-center" name="activity_ids" widget="kanban_activity"/>
|
||||
<field name="is_rotting" invisible="1"/>
|
||||
<field name="rotting_days" class="d-flex" widget="rotting"/>
|
||||
<div class="d-flex ms-auto align-items-center">
|
||||
<a name="action_open_attachments" type="object">
|
||||
<i class='fa fa-paperclip' role="img" aria-label="Documents"/>
|
||||
<field name="attachment_number"/>
|
||||
</a>
|
||||
<field name="kanban_state" class="mx-1" widget="hr_applicant_state_selection"/>
|
||||
<field name="user_id" widget="many2one_avatar_user"/>
|
||||
</div>
|
||||
</footer>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_view_activity" model="ir.ui.view">
|
||||
<field name="name">hr.applicant.activity</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<activity string="Applicants">
|
||||
<templates>
|
||||
<div t-name="activity-box" class="o_hr_applicant_view_activity">
|
||||
<field name="user_id" widget="many2one_avatar_user"/>
|
||||
<div class="flex-grow-1 ms-1">
|
||||
<field name="partner_name" muted="1" display="full" class="o_text_block"/>
|
||||
</div>
|
||||
</div>
|
||||
</templates>
|
||||
</activity>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_hr_job_applications">
|
||||
<field name="name">Applications</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="view_mode">kanban,list,form,graph,calendar,pivot,activity</field>
|
||||
<field name="search_view_id" ref="hr_applicant_view_search_bis"/>
|
||||
<field name="context">{
|
||||
'search_default_job_id': [active_id],
|
||||
'search_default_applicants': 1,
|
||||
'default_job_id': active_id,
|
||||
'dialog_size':'medium',
|
||||
'allow_search_matching_applicants': 1
|
||||
}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_empty_folder">
|
||||
No applications yet
|
||||
</p><p>
|
||||
Odoo helps you track applicants in the recruitment
|
||||
process and follow up all operations: meetings, interviews, etc.
|
||||
</p><p>
|
||||
Applicants and their attached résumé are created automatically when an email is sent.
|
||||
If you install the document management modules, all resumes are indexed automatically,
|
||||
so that you can easily search through their content.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_kanban_view_applicant_talent_pool" model="ir.ui.view">
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="inherit_id" ref="hr_recruitment.hr_kanban_view_applicant"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//kanban" position="attributes">
|
||||
<attribute name="default_group_by"></attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_talent_pool_applications" model="ir.actions.act_window">
|
||||
<field name="name">Talents</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="domain">[
|
||||
('talent_pool_ids', '=', active_ids),
|
||||
]</field>
|
||||
<field name="view_mode">list,kanban,form,graph,calendar,pivot,activity</field>
|
||||
<field name="view_ids" eval="[
|
||||
(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'list'}),
|
||||
(0, 0, {'view_mode': 'kanban', 'view_id': ref('hr_kanban_view_applicant_talent_pool')})]"/>
|
||||
<field name="context">{'default_talent_pool_ids': active_ids}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_empty_folder">
|
||||
No Talents in the pool yet
|
||||
</p>
|
||||
<p>
|
||||
Try adding some to the pool
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_hr_applicant_new">
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="context">{'default_job_id': active_id}</field>
|
||||
</record>
|
||||
|
||||
<!-- Job Opportunities (menu) -->
|
||||
<record model="ir.actions.act_window" id="crm_case_categ0_act_job">
|
||||
<field name="name">Applications</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="path">recruitment-applications</field>
|
||||
<field name="view_mode">kanban,list,form,pivot,graph,calendar,activity</field>
|
||||
<field name="view_id" eval="False"/>
|
||||
<field name="search_view_id" ref="hr_applicant_view_search_bis"/>
|
||||
<field name="context">{'search_default_applicants': 1}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_empty_folder">
|
||||
No applications yet
|
||||
</p><p>
|
||||
Odoo helps you track applicants in the recruitment
|
||||
process and follow up all operations: meetings, interviews, etc.
|
||||
</p><p>
|
||||
Applicants and their attached résumé are created automatically when an email is sent.
|
||||
If you install the document management modules, all resumes are indexed automatically,
|
||||
so that you can easily search through their content.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_action_from_department" model="ir.actions.act_window">
|
||||
<field name="name">New Applications</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="view_mode">list,kanban,form,graph,calendar,pivot</field>
|
||||
<field name="context">{
|
||||
'search_default_department_id': active_id,
|
||||
'default_department_id': active_id,
|
||||
'invisible_department': False}
|
||||
</field>
|
||||
<field name="domain">[('stage_id.sequence','<=','1')]</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_hr_sec_kanban_view_act_job">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">kanban</field>
|
||||
<field name="view_id" ref="hr_kanban_view_applicant"/>
|
||||
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_hr_sec_tree_view_act_job">
|
||||
<field name="sequence" eval="0"/>
|
||||
<field name="view_mode">list</field>
|
||||
<field name="view_id" ref="crm_case_tree_view_job"/>
|
||||
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_hr_sec_form_view_act_job">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="hr_applicant_view_form"/>
|
||||
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_action_view_pivot" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="3"/>
|
||||
<field name="view_mode">pivot</field>
|
||||
<field name="view_id" ref="crm_case_pivot_view_job"/>
|
||||
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_sec_graph_view_act_job" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="4"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="crm_case_graph_view_job"/>
|
||||
<field name="act_window_id" ref="crm_case_categ0_act_job"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_view_pivot" model="ir.ui.view">
|
||||
<field name="name">hr.applicant.pivot</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Recruitment Analysis" sample="1">
|
||||
<field name="stage_id" type="row"/>
|
||||
<field name="job_id" type="col"/>
|
||||
<field name="partner_name"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_view_graph" model="ir.ui.view">
|
||||
<field name="name">hr.applicant.graph</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Recruitment Analysis" sample="1">
|
||||
<field name="stage_id"/>
|
||||
<field name="job_id"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_view_search" model="ir.ui.view">
|
||||
<field name="name">hr.applicant.search</field>
|
||||
<field name="model">hr.applicant</field>
|
||||
<field name="priority">32</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Recruitment Analysis">
|
||||
<field name="job_id"/>
|
||||
<field name="department_id" operator="child_of"/>
|
||||
<field name="user_id"/>
|
||||
<filter string="Creation Date" name="year" date="create_date" default_period="year"/>
|
||||
<separator/>
|
||||
<filter string="Unassigned" name="unassigned" domain="[('user_id', '=', False)]"/>
|
||||
<separator/>
|
||||
<filter string="New" name="new" domain="[('stage_id.sequence', '=', 1)]"/>
|
||||
<separator/>
|
||||
<filter string="Ongoing" name="ongoing" domain="[('active', '=', True)]"/>
|
||||
<filter string="Refused" name="refused" domain="[('active', '=', False)]"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="archived" domain="[('active', '=', False)]"/>
|
||||
<separator/>
|
||||
<group>
|
||||
<field name="priority"/>
|
||||
<field name="stage_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="create_date"/>
|
||||
<field name="date_closed"/>
|
||||
</group>
|
||||
<group>
|
||||
<filter string="Responsible" name='User' context="{'group_by':'user_id'}"/>
|
||||
<filter string="Company" name="company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<filter string="Jobs" name="job" context="{'group_by':'job_id'}"/>
|
||||
<filter string="Department" name="department" context="{'group_by':'department_id'}"/>
|
||||
<filter string="Tags" name="group_by_categ_ids" context="{'group_by':'categ_ids'}"/>
|
||||
<filter string="Stage" name="stage" context="{'group_by':'stage_id'}" />
|
||||
<separator/>
|
||||
<filter string="Creation Date" name="creation_month" context="{'group_by':'create_date:month'}" help="Creation Date"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_applicant_action_analysis" model="ir.actions.act_window">
|
||||
<field name="name">Recruitment Analysis</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="view_mode">graph,pivot</field>
|
||||
<field name="search_view_id" ref="hr_applicant_view_search"/>
|
||||
<field name="view_ids" eval="[
|
||||
(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'graph', 'view_id': ref('hr_applicant_view_graph')}),
|
||||
(0, 0, {'view_mode': 'pivot', 'view_id': ref('hr_applicant_view_pivot')})]"/>
|
||||
<field name="context">{'search_default_creation_month': 1, 'search_default_job': 2}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No data yet!
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_recruitment_report_filtered_department" model="ir.actions.act_window">
|
||||
<field name="name">Recruitment Analysis</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="view_mode">graph,pivot</field>
|
||||
<field name="search_view_id" ref="hr_applicant_view_search"/>
|
||||
<field name="context">{
|
||||
'search_default_department_id': [active_id],
|
||||
'default_department_id': active_id}
|
||||
</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No data yet!
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_recruitment_report_filtered_job" model="ir.actions.act_window">
|
||||
<field name="name">Recruitment Analysis</field>
|
||||
<field name="res_model">hr.applicant</field>
|
||||
<field name="view_mode">graph,pivot</field>
|
||||
<field name="search_view_id" ref="hr_applicant_view_search"/>
|
||||
<field name="context">{
|
||||
'search_default_creation_month': 1,
|
||||
'search_default_job_id': [active_id],
|
||||
'default_job_id': active_id}
|
||||
</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No data yet!
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_applicant_send_mail" model="ir.actions.server">
|
||||
<field name="name">Send Email</field>
|
||||
<field name="model_id" ref="hr_recruitment.model_hr_applicant"/>
|
||||
<field name="sequence">1</field>
|
||||
<field name="binding_model_id" ref="hr_recruitment.model_hr_applicant"/>
|
||||
<field name="binding_view_types">list,kanban</field>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = records.action_send_email()</field>
|
||||
</record>
|
||||
|
||||
<!-- Custom reports (aka filters) -->
|
||||
<record id="hr_applicant_filter_recruiter" model="ir.filters">
|
||||
<field name="name">By Recruiter</field>
|
||||
<field name="model_id">hr.applicant</field>
|
||||
<field name="user_ids" eval="False"/>
|
||||
<field name="action_id" ref="hr_applicant_action_analysis"/>
|
||||
<field name="context">{'group_by': ['create_date:month', 'user_id']}</field>
|
||||
</record>
|
||||
<record id="hr_applicant_filter_job" model="ir.filters">
|
||||
<field name="name">By Job</field>
|
||||
<field name="model_id">hr.applicant</field>
|
||||
<field name="user_ids" eval="False"/>
|
||||
<field name="action_id" ref="hr_applicant_action_analysis"/>
|
||||
<field name="context">{'group_by': ['create_date:month', 'job_id']}</field>
|
||||
</record>
|
||||
<record id="hr_applicant_filter_department" model="ir.filters">
|
||||
<field name="name">By Department</field>
|
||||
<field name="model_id">hr.applicant</field>
|
||||
<field name="user_ids" eval="False"/>
|
||||
<field name="action_id" ref="hr_applicant_action_analysis"/>
|
||||
<field name="context">{'group_by': ['create_date:month', 'department_id']}</field>
|
||||
</record>
|
||||
|
||||
<record id="mail_followers_edit_action_from_hr_recruitment" model="ir.actions.act_window">
|
||||
<field name="name">Add/Remove Followers</field>
|
||||
<field name="res_model">mail.followers.edit</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
<field name="context">{'default_res_model': 'hr.applicant', 'default_res_ids': active_ids}</field>
|
||||
<field name="binding_model_id" ref="hr_recruitment.model_hr_applicant"/>
|
||||
<field name="binding_view_types">list,kanban</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -6,31 +6,21 @@
|
|||
<field name="inherit_id" ref="hr.hr_department_view_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//templates" position="before">
|
||||
<t groups="hr_recruitment.group_hr_recruitment_user">
|
||||
<field name="new_applicant_count"/>
|
||||
<field name="new_hired_employee"/>
|
||||
<field name="expected_employee"/>
|
||||
</t>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//div[hasclass('o_kanban_primary_right')]" position="inside">
|
||||
<t groups="hr_recruitment.group_hr_recruitment_user">
|
||||
<div t-if="record.new_applicant_count.raw_value > 0" class="row ml16">
|
||||
<div class="col">
|
||||
<a name="%(hr_applicant_action_from_department)d" type="action">
|
||||
<field name="new_applicant_count"/> New Applicants
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<xpath expr="//div[@name='kanban_primary_right']" position="inside">
|
||||
<div t-if="record.new_applicant_count.raw_value > 0" class="row g-0 ml32" groups="hr_recruitment.group_hr_recruitment_user">
|
||||
<a name="%(hr_applicant_action_from_department)d" class="col" type="action">
|
||||
<field name="new_applicant_count"/> New Applicants
|
||||
</a>
|
||||
</div>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//div[hasclass('o_kanban_manage_reports')]" position="inside">
|
||||
<a role="menuitem" class="dropdown-item" name="%(action_hr_recruitment_report_filtered_department)d"
|
||||
type="action" groups="hr_recruitment.group_hr_recruitment_user">
|
||||
Recruitments
|
||||
</a>
|
||||
<div role="menuitem">
|
||||
<a class="dropdown-item" name="%(action_hr_recruitment_report_filtered_department)d"
|
||||
type="action" groups="hr_recruitment.group_hr_recruitment_interviewer">
|
||||
Recruitment
|
||||
</a>
|
||||
</div>
|
||||
</xpath>
|
||||
</data>
|
||||
</field>
|
||||
|
|
@ -39,9 +29,6 @@
|
|||
<record id="action_hr_department" model="ir.actions.act_window">
|
||||
<field name="name">Departments</field>
|
||||
<field name="res_model">hr.department</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_hr_department" name="Departments"
|
||||
parent="menu_hr_recruitment_config_employees" action="action_hr_department"/>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -11,116 +11,207 @@
|
|||
<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" on_create="hr_recruitment.create_job_simple" sample="1" limit="40" action="%(action_hr_job_applications)d" type="action">
|
||||
<kanban highlight_color="color"
|
||||
class="o_hr_recruitment_kanban"
|
||||
on_create="hr_recruitment.create_job_simple"
|
||||
sample="1"
|
||||
limit="40"
|
||||
action="%(action_hr_job_applications)d"
|
||||
type="action"
|
||||
js_class="recruitment_kanban_view"
|
||||
>
|
||||
<field name="active"/>
|
||||
<field name="name"/>
|
||||
<field name="alias_name"/>
|
||||
<field name="alias_domain"/>
|
||||
<field name="is_favorite"/>
|
||||
<field name="department_id"/>
|
||||
<field name="no_of_recruitment"/>
|
||||
<field name="color"/>
|
||||
<field name="new_application_count"/>
|
||||
<field name="no_of_hired_employee"/>
|
||||
<field name="manager_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="application_count"/>
|
||||
<field name="alias_email"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''}">
|
||||
<div class="o_kanban_card_header">
|
||||
<div class="o_kanban_card_header_title">
|
||||
<field name="is_favorite" widget="boolean_favorite" nolabel="1"/>
|
||||
<div class="o_primary ps-3">
|
||||
<span class="o_text_overflow"><t t-esc="record.name.value"/></span>
|
||||
<t t-name="menu" groups="hr_recruitment.group_hr_recruitment_user">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</h5>
|
||||
<div role="menuitem" name="menu_view_applications">
|
||||
<a name="%(action_hr_job_applications)d" type="action">Applications</a>
|
||||
</div>
|
||||
<div class="ps-3 text-muted">
|
||||
<field name="user_id" />
|
||||
<div role="menuitem">
|
||||
<a name="action_open_activities" type="object">Activities</a>
|
||||
</div>
|
||||
<div class="ps-3 o_secondary" groups="base.group_multi_company">
|
||||
<small><i class="fa fa-building-o" role="img" aria-label="Company" title="Company"></i> <field name="company_id"/></small>
|
||||
</div>
|
||||
<div t-if="record.alias_name.value and record.alias_domain.value" class="ps-3 o_secondary o_job_alias">
|
||||
<small><i class="fa fa-envelope-o" role="img" aria-label="Alias" title="Alias"></i> <field name="alias_id"/></small>
|
||||
<div role="menuitem" name="menu_view_job_posts">
|
||||
<a name="%(action_hr_job_sources)d" type="action" context="{'default_job_id': id}">Trackers</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section" groups="hr_recruitment.group_hr_recruitment_user">
|
||||
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
|
||||
<div class="col-6">
|
||||
<h5 role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</h5>
|
||||
<div role="menuitem" name="menu_new_applications">
|
||||
<a name="%(hr_recruitment.action_hr_applicant_new)d" type="action">Application</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</h5>
|
||||
<div role="menuitem" name="kanban_job_reporting">
|
||||
<a name="%(hr_recruitment.action_hr_recruitment_report_filtered_job)d" type="action">Analysis</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_recruitment_job_container o_kanban_card_content mt-0 mt-sm-3">
|
||||
<div class="row">
|
||||
<div class="col-7">
|
||||
<button class="btn btn-primary" name="%(action_hr_job_applications)d" type="action">
|
||||
<field name="new_application_count"/> New Applications
|
||||
</button>
|
||||
<div class="o_kanban_card_manage_settings row">
|
||||
<div class="col-6" role="menuitem" aria-haspopup="true">
|
||||
<field name="color" widget="kanban_color_picker"/>
|
||||
</div>
|
||||
<div class="col-6" role="menuitem">
|
||||
<a class="dropdown-item" t-if="widget.editable" name="edit_job" type="open">Configuration</a>
|
||||
<a class="dropdown-item" t-if="record.active.raw_value" type="archive" >Archive</a>
|
||||
<a class="dropdown-item" t-if="!record.active.raw_value" name="action_unarchive" type="object">Unarchive</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="card">
|
||||
<div class="o_hr_recruitment_kanban_card_large_screen">
|
||||
<main>
|
||||
<div class="d-flex flex-row align-content-center ms-2">
|
||||
<div class="col-3 d-flex flex-column align-self-center o_kanban_card_header">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<div class="d-flex fw-bold fs-3 o_kanban_card_header_title">
|
||||
<field name="is_favorite" widget="boolean_favorite" nolabel="1"/>
|
||||
<field class="fs-3" name="name"/>
|
||||
</div>
|
||||
<div t-if="record.alias_email.value" class="d-flex flex-wrap">
|
||||
<field name="alias_id"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-row"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer,hr.group_hr_user">
|
||||
<div class="col">
|
||||
<div groups="!base.group_multi_company">
|
||||
<field name="user_id" widget="many2one_avatar_user"
|
||||
options="{'display_avatar_name': True}"/>
|
||||
</div>
|
||||
<div groups="base.group_multi_company">
|
||||
<t t-if="record.company_id.raw_value != 0">
|
||||
<div class="d-flex flex-row align-items-center">
|
||||
<field name="user_id" widget="many2one_avatar_user"
|
||||
options="{'display_avatar_name': False}"/>
|
||||
<field class="ms-1" name="company_id"/>
|
||||
</div>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<field name="user_id" widget="many2one_avatar_user"
|
||||
options="{'display_avatar_name': True}"/>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="col-5 o_job_activities">
|
||||
<li>
|
||||
<a name="edit_job" type="edit" t-attf-class="{{ record.no_of_recruitment.raw_value > 0 ? 'to-recruit' : 'text-secondary' }}" groups="!hr_recruitment.group_hr_recruitment_interviewer">
|
||||
<field name="no_of_recruitment"/> To Recruit
|
||||
</a>
|
||||
<span t-attf-class="{{ record.no_of_recruitment.raw_value > 0 ? 'to-recruit' : 'text-secondary' }}" groups="hr_recruitment.group_hr_recruitment_interviewer">
|
||||
<field name="no_of_recruitment"/> To Recruit
|
||||
<div class="col align-content-center">
|
||||
<div class="d-flex justify-content-center">
|
||||
<field name="no_of_recruitment" class="number"/>
|
||||
<div class="number_description fs-4 lh-1">
|
||||
to<br/>recruit
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col align-content-center"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer">
|
||||
<div class="d-flex justify-content-center">
|
||||
<field name="new_application_count" class="number"/>
|
||||
<div class="number_description text-body-secondary fs-4 lh-1">
|
||||
new<br/>applications
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col align-content-center"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer">
|
||||
<div class="d-flex justify-content-center">
|
||||
<field name="open_application_count" class="number"/>
|
||||
<div class=" number_description text-body-secondary fs-4 lh-1">
|
||||
in<br/>progress
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col align-content-center"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer">
|
||||
<div class="d-flex flex-row justify-content-center mt-1">
|
||||
<div class="position-relative">
|
||||
<button name="action_open_activities" type="object" class="ps-1 pe-1 pt-0 pb-0">
|
||||
<i class="fa fa-2x fa-clock-o" role="img" aria-label="Activities"></i>
|
||||
<span class="activity_badge position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger text-light">
|
||||
<field name="activity_count"/>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col align-content-center me-5">
|
||||
<div class="d-flex justify-content-center">
|
||||
<div name="large_screen_job_page_div" class="me-2" invisible="1">
|
||||
<button class="btn btn-primary" name="%(action_hr_job_applications)d" type="action">
|
||||
Job Page
|
||||
</button>
|
||||
</div>
|
||||
<button class="btn btn-secondary" type="open">
|
||||
Configure
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
<div class="o_hr_recruitment_kanban_card_mobile_screen">
|
||||
<main>
|
||||
<div class="d-flex flex-column gap-1 mb-1">
|
||||
<div class="mb-2">
|
||||
<div class="d-flex fw-bold fs-3">
|
||||
<field name="is_favorite" widget="boolean_favorite" nolabel="1"/>
|
||||
<field name="name"/>
|
||||
</div>
|
||||
<div t-if="record.alias_email.value" class="d-flex flex-wrap">
|
||||
<field name="alias_id"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-row"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer">
|
||||
<div class="col-1 align-content-end me-1">
|
||||
<div class="d-flex flex-row justify-content-center">
|
||||
<field name="user_id" widget="many2one_avatar_user"
|
||||
options="{'display_avatar_name': False}"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col align-content-end">
|
||||
<div groups="base.group_multi_company">
|
||||
<t t-if="record.company_id.raw_value != 0">
|
||||
<field name="company_id"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<field name="user_id"/>
|
||||
</t>
|
||||
</div>
|
||||
<div groups="!base.group_multi_company">
|
||||
<field name="user_id"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-row"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer">
|
||||
<div class="col-1 align-content-end me-1">
|
||||
<div class="d-flex flex-row justify-content-center">
|
||||
<i class="fa fa-user fa-2x" title="new_applications_icon"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col align-content-end">
|
||||
<span>
|
||||
<field name="application_count"/>
|
||||
<span > new applications</span>
|
||||
</span>
|
||||
</li>
|
||||
<li t-if="record.application_count.raw_value > 0">
|
||||
<field name="application_count"/> Applications
|
||||
</li>
|
||||
<li class="text-warning" t-if="record.activities_today.raw_value > 0">
|
||||
<a name="action_open_today_activities" type="object" class="text-warning"><field name="activities_today"/> Activities Today</a>
|
||||
</li>
|
||||
<li t-if="record.activities_overdue.raw_value > 0">
|
||||
<a name="action_open_late_activities" type="object" class="text-danger"><field name="activities_overdue"/> Late Activities</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div name="kanban_boxes" class="row flex-nowrap" groups="hr_recruitment.group_hr_recruitment_user"></div>
|
||||
</div>
|
||||
<div class="container o_recruitment_job_container o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div role="menuitem" name="menu_view_applications">
|
||||
<a name="%(action_hr_job_applications)d" type="action">Applications</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="action_open_activities" type="object">Activities</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_hr_job_sources)d" type="action" context="{'default_job_id': active_id}">Trackers</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div role="menuitem" name="menu_new_applications">
|
||||
<a name="%(hr_recruitment.action_hr_applicant_new)d" type="action">Application</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div role="menuitem" name="o_kanban_job_reporting">
|
||||
<a name="%(hr_recruitment.action_hr_recruitment_report_filtered_job)d" type="action">Analysis</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_card_manage_settings row">
|
||||
<div class="col-6" role="menuitem" aria-haspopup="true">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color" role="popup"/>
|
||||
</div>
|
||||
<div class="col-6" role="menuitem">
|
||||
<a class="dropdown-item" t-if="widget.editable" name="edit_job" type="edit">Configuration</a>
|
||||
<a class="dropdown-item" t-if="record.active.raw_value" name="toggle_active" type="object">Archive</a>
|
||||
<a class="dropdown-item" t-if="!record.active.raw_value" name="toggle_active" type="object">Unarchive</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
|
|
@ -128,14 +219,176 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_job_filter_recruitment" model="ir.ui.view">
|
||||
<field name="name">Job</field>
|
||||
<field name="model">hr.job</field>
|
||||
<field name="inherit_id" ref="hr.view_job_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='department_id']" position="after">
|
||||
<filter string="My Favorites" name="my_favorite_jobs" domain="[('favorite_user_ids', 'in', uid)]"/>
|
||||
<separator/>
|
||||
</xpath>
|
||||
</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" class="o_hr_job_simple_form" >
|
||||
<group>
|
||||
<field name="name" class="o_job_name oe_inline" placeholder="e.g. Sales Manager"/>
|
||||
<label for="alias_name" string="Application email"
|
||||
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">
|
||||
<field name="alias_id" class="oe_read_only" string="Email Alias" required="0"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer"/>
|
||||
<div class="oe_edit_only" name="edit_alias">
|
||||
<field name="alias_name" class="oe_inline o_job_alias" placeholder="e.g. sales-manager"/>@
|
||||
<field name="alias_domain_id" class="oe_inline" placeholder="e.g. mycompany.com"
|
||||
options="{'no_create': True, 'no_open': True}"/>
|
||||
</div>
|
||||
<div class="text-muted">Incoming emails create applications automatically. Use it for direct applications or when posting job offers on LinkedIn, Monster, etc.</div>
|
||||
</div>
|
||||
</group>
|
||||
<footer>
|
||||
<button string="Create" name="%(action_hr_job_applications)d" type="action" class="btn-primary o_create_job" data-hotkey="q"/>
|
||||
<button string="Discard" class="btn-secondary" special="cancel" data-hotkey="x"/>
|
||||
</footer>
|
||||
</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_mode">form</field>
|
||||
<field name="view_id" ref="hr_job_simple_form"/>
|
||||
<field name="target">new</field>
|
||||
<field name="context">{'dialog_size' : 'medium'}</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_job_survey" model="ir.ui.view">
|
||||
<field name="name">hr.job.form1</field>
|
||||
<field name="model">hr.job</field>
|
||||
<field name="inherit_id" ref="hr.view_hr_job_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//h1" position="attributes">
|
||||
<attribute name="class" add="d-flex align-items-center" separator=" "/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='name']" position="before">
|
||||
<field name="is_favorite" widget="boolean_favorite" class="hr_recruitment_is_favorite_job" nolabel="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//form" position="attributes">
|
||||
<attribute name="js_class">recruitment_form_view</attribute>
|
||||
</xpath>
|
||||
<page name="recruitment_page" position="attributes">
|
||||
<attribute name="invisible">0</attribute>
|
||||
<attribute name="groups">hr_recruitment.group_hr_recruitment_interviewer,hr.group_hr_user</attribute>
|
||||
</page>
|
||||
<page name="job_description_page" position="attributes">
|
||||
<attribute name="invisible">0</attribute>
|
||||
<attribute name="groups">hr_recruitment.group_hr_recruitment_interviewer,hr.group_hr_user</attribute>
|
||||
</page>
|
||||
<group name="hiring_process" position="inside">
|
||||
<field name="interviewer_ids" widget="many2many_tags_avatar"
|
||||
options="{'no_create': True, 'no_create_edit': True}"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer"/>
|
||||
<label for="alias_name"
|
||||
string="Email Alias"
|
||||
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 class="o_wrap_label d-flex flex-row gap-1 align-items-baseline">
|
||||
<field name="alias_name" placeholder="e.g. jobs"/>
|
||||
<span>@</span>
|
||||
<field name="alias_domain_id" placeholder="e.g. domain.com" options="{'no_create': True, 'no_open': True}"/>
|
||||
</div>
|
||||
</group>
|
||||
|
||||
<group name="job_posting" position="inside">
|
||||
<field name="expected_degree" groups="hr_recruitment.group_hr_recruitment_interviewer"/>
|
||||
</group>
|
||||
|
||||
<group name="job" position="inside">
|
||||
<label for="address_id"/>
|
||||
<div class="o_row">
|
||||
<span invisible="address_id" class="oe_read_only">Remote</span>
|
||||
<field name="address_id" context="{'show_address': 1}" placeholder="Remote"/>
|
||||
</div>
|
||||
</group>
|
||||
|
||||
<xpath expr="//group" position="after">
|
||||
<field name="job_properties" columns="2" groups="hr_recruitment.group_hr_recruitment_interviewer"/>
|
||||
</xpath>
|
||||
<div name="button_box" position="inside">
|
||||
<button class="oe_stat_button"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer"
|
||||
icon="fa-pencil"
|
||||
name="%(action_hr_job_applications)d"
|
||||
context="{'default_user_id': user_id, 'active_test': False}"
|
||||
type="action">
|
||||
<field name="all_application_count" widget="statinfo" string="Applications"/>
|
||||
</button>
|
||||
<button class="oe_stat_button"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer"
|
||||
icon="fa-file-text-o"
|
||||
name="action_open_attachments"
|
||||
type="object"
|
||||
invisible="documents_count == 0">
|
||||
<field name="documents_count" widget="statinfo" string="Documents"/>
|
||||
</button>
|
||||
<button name="action_open_employees"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer"
|
||||
class="oe_stat_button"
|
||||
icon="fa-users"
|
||||
invisible="not employee_count"
|
||||
type="object">
|
||||
<field name="employee_count" widget="statinfo" string="Employees"/>
|
||||
</button>
|
||||
</div>
|
||||
<xpath expr="//page[@name='job_description_page']" position="after">
|
||||
<page string="Trackers" name="trackers_page" groups="hr.group_hr_user">
|
||||
<field name="job_source_ids" groups="hr_recruitment.group_hr_recruitment_interviewer"/>
|
||||
</page>
|
||||
</xpath>
|
||||
<xpath expr="//sheet" position="after">
|
||||
<chatter open_attachments="True"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer,hr.group_hr_user"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- hr related job position menu action -->
|
||||
<record model="ir.actions.act_window" id="action_hr_job_config">
|
||||
<field name="name">Job Positions</field>
|
||||
<field name="res_model">hr.job</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'list', 'view_id': ref('hr.view_hr_job_tree')}),
|
||||
(0, 0, {'view_mode': 'kanban', 'view_id': ref('hr.hr_job_view_kanban')}),
|
||||
(0, 0, {'view_mode': 'form', 'view_id': ref('hr.view_hr_job_form')})]"/>
|
||||
<field name="context">{'search_default_in_recruitment': 1}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Ready to recruit more efficiently?
|
||||
</p>
|
||||
<p>
|
||||
<a name="%(hr.action_create_job_position)d" class="btn btn-link" type="action">
|
||||
Let's create a job position
|
||||
</a>
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_job_search_view" model="ir.ui.view">
|
||||
<field name="name">hr.job.search</field>
|
||||
<field name="model">hr.job</field>
|
||||
<field name="inherit_id" ref="hr.view_job_filter" />
|
||||
<field name="inherit_id" ref="hr_recruitment.view_job_filter_recruitment" />
|
||||
<field name="priority">20</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//filter[@name='my_favorite_jobs']" position="after">
|
||||
<searchpanel>
|
||||
<searchpanel class="w-auto">
|
||||
<field name="company_id" groups="base.group_multi_company" icon="fa-building" enable_counters="1"/>
|
||||
<field name="department_id" icon="fa-users" enable_counters="1"/>
|
||||
</searchpanel>
|
||||
|
|
@ -148,39 +401,51 @@
|
|||
<field name="model">hr.job</field>
|
||||
<field name="inherit_id" ref="hr.view_hr_job_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="department_id" position="after">
|
||||
<field name="application_count" string="Applications"/>
|
||||
<field name="name" position="after">
|
||||
<field name="department_id"/>
|
||||
<field name="open_application_count" string="Open Applications" groups="hr_recruitment.group_hr_recruitment_interviewer"/>
|
||||
<field name="no_of_recruitment"/>
|
||||
</field>
|
||||
<field name="no_of_recruitment" position="after">
|
||||
<field name="alias_name" invisible="1"/>
|
||||
<field name="alias_id" attrs="{'invisible': [('alias_name', '=', False)]}" optional="hide"/>
|
||||
<field name="user_id" widget="many2one_avatar_user" optional="hide"/>
|
||||
<field name="no_of_employee" position="after">
|
||||
<field name="expected_employees" optional="hide"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer,hr.group_hr_user"/>
|
||||
<field name="no_of_hired_employee" optional="hide"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer"/>
|
||||
<field name="message_needaction" column_invisible="True"/>
|
||||
<field name="company_id" groups="base.group_multi_company" optional="hide"/>
|
||||
<field name="company_id" column_invisible="True"/>
|
||||
<field name="alias_name" column_invisible="True"/>
|
||||
<field name="alias_id" invisible="not alias_name" optional="hide"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer"/>
|
||||
<field name="user_id" widget="many2one_avatar_user" optional="hide"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer,hr.group_hr_user"/>
|
||||
</field>
|
||||
<list position="attributes">
|
||||
<attribute name="js_class">recruitment_list_view</attribute>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- hr related job position menu action -->
|
||||
<record id="action_load_demo_data" model="ir.actions.server">
|
||||
<field name="name">Load demo data</field>
|
||||
<field name="model_id" ref="hr_recruitment.model_hr_job"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = model._action_load_recruitment_scenario()</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_hr_job">
|
||||
<field name="name">Job Positions</field>
|
||||
<field name="path">recruitment</field>
|
||||
<field name="res_model">hr.job</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="view_mode">kanban,list,form</field>
|
||||
<field name="view_id" ref="hr_recruitment.view_hr_job_kanban"/>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'kanban', 'view_id': ref('hr_recruitment.view_hr_job_kanban')}),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('hr_recruitment.hr_job_view_tree_inherit')}),
|
||||
(0, 0, {'view_mode': 'list', 'view_id': ref('hr_recruitment.hr_job_view_tree_inherit')}),
|
||||
(0, 0, {'view_mode': 'form', 'view_id': ref('hr.view_hr_job_form')})]"/>
|
||||
<field name="context">{}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Ready to recruit more efficiently?
|
||||
</p><p>
|
||||
Let's create a job position.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
<menuitem name="By Job Positions" parent="menu_crm_case_categ0_act_job"
|
||||
id="menu_hr_job_position" action="action_hr_job"
|
||||
sequence="1" groups="hr_recruitment.group_hr_recruitment_user" />
|
||||
|
||||
<!-- Job Positions filtered for interviewers -->
|
||||
<record model="ir.actions.act_window" id="action_hr_job_interviewer">
|
||||
|
|
@ -195,7 +460,56 @@
|
|||
('extended_interviewer_ids', 'in', uid),
|
||||
]</field>
|
||||
</record>
|
||||
<menuitem name="By Job Positions" parent="menu_crm_case_categ0_act_job"
|
||||
id="menu_hr_job_position_interviewer" action="action_hr_job_interviewer"
|
||||
sequence="1" groups="hr_recruitment.group_hr_recruitment_interviewer" />
|
||||
|
||||
<record id="hr_job_platform_form" model="ir.ui.view">
|
||||
<field name="name">hr.job.platform.form</field>
|
||||
<field name="model">hr.job.platform</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<group col="2">
|
||||
<group>
|
||||
<field name="name" placeholder="e.g. Linkedin"/>
|
||||
<field name="regex" placeholder="e.g. ^New application:.*from (.*)"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="email" placeholder="e.g. jobs-listings@linkedin.com"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_job_platform_tree" model="ir.ui.view">
|
||||
<field name="name">hr.job.platform.list</field>
|
||||
<field name="model">hr.job.platform</field>
|
||||
<field name="arch" type="xml">
|
||||
<list>
|
||||
<field name="name"/>
|
||||
<field name="email"/>
|
||||
<field name="regex"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_hr_job_platforms">
|
||||
<field name="name">Emails</field>
|
||||
<field name="res_model">hr.job.platform</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_empty_folder">
|
||||
No rules have been defined.
|
||||
</p>
|
||||
<p>
|
||||
Create a new rule to process emails from specific job boards.
|
||||
</p>
|
||||
<p>
|
||||
Define a regex: Extract the applicant's name from the email's subject or body.
|
||||
</p>
|
||||
<p>
|
||||
Without a regex: The applicant's name will be the email's subject.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="hr_recruitment_degree_tree">
|
||||
<field name="name">hr.recruitment.degree.list</field>
|
||||
<field name="model">hr.recruitment.degree</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Degree" editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="score" widget="percentage"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="hr_recruitment_degree_form">
|
||||
<field name="name">hr.recruitment.degree.form</field>
|
||||
<field name="model">hr.recruitment.degree</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Degree">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="score"/>
|
||||
<field name="sequence" groups="base.group_no_one"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_recruitment_degree_action" model="ir.actions.act_window">
|
||||
<field name="name">Degrees</field>
|
||||
<field name="res_model">hr.recruitment.degree</field>
|
||||
<field name="view_id" ref="hr_recruitment_degree_tree"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="hr_recruitment_source_tree">
|
||||
<field name="name">hr.recruitment.source.list</field>
|
||||
<field name="model">hr.recruitment.source</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Sources of Applicants" editable="top" sample="1">
|
||||
<field name="has_domain" column_invisible="True"/>
|
||||
<field name="campaign_id" optional="show"/>
|
||||
<field name="source_id" placeholder="e.g. LinkedIn" decoration-bf="1" readonly="id" optional="show"/>
|
||||
<field name="medium_id" optional="show"/>
|
||||
<field name="email" widget="RecruitmentCopyClipboardChar" invisible="not has_domain" options="{'content_generation_function_name': 'create_and_get_alias', 'displayed_value': 'Email'}"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_recruitment_source_view_search" model="ir.ui.view">
|
||||
<field name="name">hr.recruitment.source.view.search</field>
|
||||
<field name="model">hr.recruitment.source</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Source">
|
||||
<field name="source_id"/>
|
||||
<field name="job_id"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_hr_job_sources">
|
||||
<field name="name">Trackers</field>
|
||||
<field name="res_model">hr.recruitment.source</field>
|
||||
<field name="view_mode">list</field>
|
||||
<field name="search_view_id" ref="hr_recruitment_source_view_search"/>
|
||||
<field name="context">{'search_default_job_id': [active_id], 'default_job_id': active_id}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Want to analyse where applications come from ?
|
||||
</p><p>
|
||||
Use emails and links trackers
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="hr_job_stage_act" model="ir.actions.act_window">
|
||||
<field name="name">Recruitment / Applicants Stages</field>
|
||||
<field name="res_model">hr.recruitment.stage</field>
|
||||
<field name="domain">[]</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Add a new stage in the recruitment process
|
||||
</p><p>
|
||||
Define here your stages of the recruitment process, for example:
|
||||
qualification call, first interview, second interview, refused,
|
||||
hired.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="hr_recruitment_stage_tree">
|
||||
<field name="name">hr.recruitment.stage.list</field>
|
||||
<field name="model">hr.recruitment.stage</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Stages">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="rotting_threshold_days" optional="hide"/>
|
||||
<field name="fold"/>
|
||||
<field name="hired_stage"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_hr_recruitment_stage_kanban" model="ir.ui.view">
|
||||
<field name="name">hr.recruitment.stage.kanban</field>
|
||||
<field name="model">hr.recruitment.stage</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban>
|
||||
<templates>
|
||||
<t t-name="card">
|
||||
<field class="fw-bolder" name="name"/>
|
||||
<div class="d-flex">
|
||||
Folded in Recruitment Pipe:
|
||||
<field name="fold" class="ms-1" widget="boolean"/>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="hr_recruitment_stage_form">
|
||||
<field name="name">hr.recruitment.stage.form</field>
|
||||
<field name="model">hr.recruitment.stage</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Stage">
|
||||
<sheet>
|
||||
<group name="stage_definition" string="Stage Definition">
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="sequence" groups="base.group_no_one"/>
|
||||
<field name="template_id" domain= "[('model_id.model', '=', 'hr.applicant')]" options="{'no_quick_create': True}"/>
|
||||
</group>
|
||||
<group name="stage_details">
|
||||
<field name="fold"/>
|
||||
<field name="hired_stage"/>
|
||||
<field name="is_warning_visible" invisible="1"/>
|
||||
<span invisible="not is_warning_visible">
|
||||
<span
|
||||
class="fa fa-exclamation-triangle text-danger ps-3">
|
||||
</span>
|
||||
<span class="text-danger">
|
||||
All applications will lose their hired date and hired status.
|
||||
</span>
|
||||
</span>
|
||||
<field name="job_ids" widget="many2many_tags"/>
|
||||
<field name="rotting_threshold_days" invisible="hired_stage"/>
|
||||
</group>
|
||||
</group>
|
||||
<group name="tooltips" string="Tooltips">
|
||||
<p class="text-muted" colspan="2">
|
||||
You can define here the labels that will be displayed for the kanban state instead
|
||||
of the default labels.
|
||||
</p>
|
||||
<label for="legend_normal" string=" " class="o_status"/>
|
||||
<field name="legend_normal" nolabel="1"/>
|
||||
<label for="legend_blocked" string=" " class="o_status o_status_red"/>
|
||||
<field name="legend_blocked" nolabel="1"/>
|
||||
<label for="legend_waiting" string=" " class="o_status o_status_orange"/>
|
||||
<field name="legend_waiting" nolabel="1"/>
|
||||
<label for="legend_done" string=" " class="o_status o_status_green"/>
|
||||
<field name="legend_done" nolabel="1"/>
|
||||
</group>
|
||||
<separator string="Requirements"/>
|
||||
<field name="requirements" placeholder="You can define the requirements here. They will be displayed when you hover over the stage title."/>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_recruitment_stage_act" model="ir.actions.act_window">
|
||||
<field name="name">Stages</field>
|
||||
<field name="res_model">hr.recruitment.stage</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="view_id" ref="hr_recruitment_stage_tree"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Add a new stage in the recruitment process
|
||||
</p><p>
|
||||
Don't forget to specify the department if your recruitment process
|
||||
is different according to the job position.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,103 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<record id="hr_talent_pool_view_form" model="ir.ui.view">
|
||||
<field name="name">hr.talent.pool.view.form</field>
|
||||
<field name="model">hr.talent.pool</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="talent pool">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name" placeholder="e.g Reserve, Developers, Sales"/>
|
||||
<field name="pool_manager"/>
|
||||
<field name="categ_ids" widget="many2many_tags" placeholder="e.g French-speaking, Immediately Available, Own a car"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="color" widget="color_picker"/>
|
||||
<field name="company_id"/>
|
||||
</group>
|
||||
<label for="description" class="opacity-100 fw-bold text-900"/>
|
||||
<field name="description" string="Description" placeholder="Describe the talent pool and common traits among talent pool applicants"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_talent_pool_view_list" model="ir.ui.view">
|
||||
<field name="name">hr.talent.pool.view.list</field>
|
||||
<field name="model">hr.talent.pool</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="talent pool" multi_edit="1" sample="1">
|
||||
<field name="name"/>
|
||||
<field name="pool_manager"/>
|
||||
<field name="no_of_talents"/>
|
||||
<field name="categ_ids" widget="many2many_tags"/>
|
||||
<field name="company_id"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_talent_pool_view_kanban" model="ir.ui.view">
|
||||
<field name="name">hr.talent.pool.view.kanban</field>
|
||||
<field name="model">hr.talent.pool</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban
|
||||
highlight_color="color"
|
||||
action="%(action_hr_talent_pool_applications)d"
|
||||
type="action"
|
||||
limit="40"
|
||||
multi_edit="1"
|
||||
sample="1"
|
||||
>
|
||||
<field name="name"/>
|
||||
<field name="pool_manager"/>
|
||||
<field name="company_id"/>
|
||||
<templates>
|
||||
<t t-name="menu">
|
||||
<a role="menuitem" type="action" name="%(action_hr_talent_pool_applications)d"
|
||||
class="dropdown-item">
|
||||
Talents</a>
|
||||
<field name="color" widget="kanban_color_picker"/>
|
||||
<a class="dropdown-item" t-if="widget.editable" name="edit_talent_pool"
|
||||
type="open">Configuration</a>
|
||||
<a role="menuitem" type="archive" class="dropdown-item">
|
||||
Archive</a>
|
||||
</t>
|
||||
<t t-name="card">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="d-flex flex-column">
|
||||
<field name="name" class="fw-bold"/>
|
||||
<field name="pool_manager"/>
|
||||
<field name="company_id"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-flex justify-content-end align-items-end mb-1">
|
||||
<button class="btn btn-primary" name="action_talent_pool_add_talents" type="object">
|
||||
New Talent
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="justify-content-end">
|
||||
<field name="no_of_talents"/>
|
||||
<span>Talents</span>
|
||||
</footer>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_talent_pool" model="ir.actions.act_window">
|
||||
<field name="name">Talent Pool</field>
|
||||
<field name="path">talent-pool</field>
|
||||
<field name="res_model">hr.talent.pool</field>
|
||||
<field name="view_mode">kanban,list,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_empty_folder">
|
||||
No talent pools yet
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<!-- Resume and Letters -->
|
||||
<record id="ir_attachment_view_search_inherit_hr_recruitment" model="ir.ui.view">
|
||||
<field name="name">ir.attachment.search.inherit.recruitment</field>
|
||||
<field name="model">ir.attachment</field>
|
||||
<field name="mode">primary</field>
|
||||
<field name="inherit_id" ref="base.view_attachment_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='create_date']" position="after">
|
||||
<field name="index_content" string="Content"/>
|
||||
</xpath>
|
||||
<xpath expr="//filter[@name='my_documents_filter']" position="attributes">
|
||||
<attribute name='invisible'>1</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//filter[@name='url_filter']" position="attributes">
|
||||
<attribute name='invisible'>1</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//filter[@name='binary_filter']" position="attributes">
|
||||
<attribute name='invisible'>1</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="ir_attachment_hr_recruitment_list_view" model="ir.ui.view">
|
||||
<field name="model">ir.attachment</field>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<list>
|
||||
<field name="name" column_invisible="True"/>
|
||||
<field name="res_id" column_invisible="True"/>
|
||||
<field name="res_model" column_invisible="True"/>
|
||||
<field name="datas" widget="binary" filename="name" string="File"/>
|
||||
<field name="res_name" widget="applicant_char" string="Applicant" invisible="res_model != 'hr.applicant'"/>
|
||||
<field name="create_date"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="mail_activity_plan_action_config_hr_applicant" model="ir.actions.act_window">
|
||||
<field name="name">Recruitment Plans</field>
|
||||
<field name="res_model">mail.activity.plan</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="search_view_id" ref="mail.mail_activity_plan_view_search"/>
|
||||
<field name="context">{'default_res_model': 'hr.applicant'}</field>
|
||||
<field name="domain">[('res_model', '=', 'hr.applicant')]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a Recruitment Activity Plan
|
||||
</p>
|
||||
<p>
|
||||
Activity plans are used to assign a list of activities in just a few clicks
|
||||
(e.g. "Language Test", "Prepare Offer", ...)
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
<record id="mail_activity_type_action_config_hr_applicant" model="ir.actions.act_window">
|
||||
<field name="name">Activity Types</field>
|
||||
<field name="res_model">mail.activity.type</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="domain">['|', ('res_model', '=', False), ('res_model', '=', 'hr.applicant')]</field>
|
||||
<field name="context">{'default_res_model': 'hr.applicant'}</field>
|
||||
<field name="help" type="html">
|
||||
|
|
@ -16,7 +16,4 @@
|
|||
</p>
|
||||
</field>
|
||||
</record>
|
||||
<menuitem id="hr_recruitment_menu_config_activity_type"
|
||||
action="mail_activity_type_action_config_hr_applicant"
|
||||
parent="menu_hr_recruitment_config_activities"/>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,196 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<menuitem
|
||||
name="Recruitment"
|
||||
id="menu_hr_recruitment_root"
|
||||
web_icon="hr_recruitment,static/description/icon.png"
|
||||
groups="hr_recruitment.group_hr_recruitment_user,hr_recruitment.group_hr_recruitment_interviewer"
|
||||
sequence="210"/>
|
||||
|
||||
<menuitem
|
||||
name="Applications"
|
||||
parent="menu_hr_recruitment_root"
|
||||
id="menu_crm_case_categ0_act_job"
|
||||
sequence="2"/>
|
||||
|
||||
<menuitem
|
||||
name="By Job Positions"
|
||||
id="menu_hr_job_position"
|
||||
parent="menu_crm_case_categ0_act_job"
|
||||
action="action_hr_job"
|
||||
sequence="1"
|
||||
groups="hr_recruitment.group_hr_recruitment_user"/>
|
||||
|
||||
<menuitem
|
||||
name="By Job Positions"
|
||||
id="menu_hr_job_position_interviewer"
|
||||
parent="menu_crm_case_categ0_act_job"
|
||||
action="action_hr_job_interviewer"
|
||||
sequence="1"
|
||||
groups="hr_recruitment.group_hr_recruitment_interviewer"/>
|
||||
|
||||
<menuitem
|
||||
name="By Talent Pools"
|
||||
parent="menu_crm_case_categ0_act_job"
|
||||
id="menu_hr_talent_pools"
|
||||
action="action_hr_talent_pool"
|
||||
sequence="2"/>
|
||||
|
||||
<menuitem
|
||||
name="All Applications"
|
||||
parent="menu_crm_case_categ0_act_job"
|
||||
id="menu_crm_case_categ_all_app"
|
||||
action="crm_case_categ0_act_job"
|
||||
sequence="3"/>
|
||||
|
||||
|
||||
<menuitem
|
||||
name="Reporting"
|
||||
id="report_hr_recruitment"
|
||||
parent="menu_hr_recruitment_root"
|
||||
groups="group_hr_recruitment_user"
|
||||
sequence="99"/>
|
||||
|
||||
<menuitem
|
||||
name="Recruitment Analysis"
|
||||
id="hr_applicant_report_menu"
|
||||
parent="report_hr_recruitment"
|
||||
sequence="50"
|
||||
action="hr_applicant_action_analysis"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_configuration"
|
||||
name="Configuration"
|
||||
parent="menu_hr_recruitment_root"
|
||||
groups="group_hr_recruitment_user"
|
||||
sequence="100"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_global_settings"
|
||||
name="Settings"
|
||||
parent="menu_hr_recruitment_configuration"
|
||||
sequence="0"
|
||||
action="action_hr_recruitment_configuration"
|
||||
groups="base.group_system"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_config_jobs"
|
||||
name="Job Positions"
|
||||
parent="menu_hr_recruitment_configuration"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_stage"
|
||||
name="Stages"
|
||||
parent="menu_hr_recruitment_config_jobs"
|
||||
action="hr_recruitment_stage_act"
|
||||
groups="base.group_no_one"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_contract_type"
|
||||
action="hr.hr_contract_type_action"
|
||||
parent="menu_hr_recruitment_config_jobs"
|
||||
sequence="2"
|
||||
groups="hr.group_hr_user"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_utm"
|
||||
parent="menu_hr_recruitment_configuration"
|
||||
name="UTMs"
|
||||
groups="base.group_no_one"
|
||||
sequence="15"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_utm_sources"
|
||||
parent="menu_hr_recruitment_utm"
|
||||
name="Sources"
|
||||
action="utm.utm_source_action"
|
||||
groups="base.group_no_one"
|
||||
sequence="15"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_utm_mediums"
|
||||
parent="menu_hr_recruitment_utm"
|
||||
name="Mediums"
|
||||
action="utm.utm_medium_action"
|
||||
groups="base.group_no_one"
|
||||
sequence="15"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_config_applications"
|
||||
name="Applications"
|
||||
parent="menu_hr_recruitment_configuration"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_degree"
|
||||
name="Degrees"
|
||||
parent="menu_hr_recruitment_config_applications"
|
||||
action="hr_recruitment_degree_action"
|
||||
sequence="1"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_applicant_refuse_reason"
|
||||
action="hr_applicant_refuse_reason_action"
|
||||
parent="menu_hr_recruitment_config_applications"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem
|
||||
id="hr_applicant_category_menu"
|
||||
parent="menu_hr_recruitment_config_applications"
|
||||
action="hr_applicant_category_action"
|
||||
sequence="20"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_config_employees"
|
||||
name="Employees"
|
||||
parent="menu_hr_recruitment_configuration"
|
||||
sequence="30"/>
|
||||
|
||||
<menuitem
|
||||
name="Departments"
|
||||
id="menu_hr_department"
|
||||
parent="menu_hr_recruitment_config_employees"
|
||||
action="action_hr_department"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_recruitment_config_activities"
|
||||
name="Activities"
|
||||
parent="menu_hr_recruitment_configuration"
|
||||
sequence="40"/>
|
||||
|
||||
<menuitem
|
||||
id="hr_recruitment_menu_config_activity_type"
|
||||
action="mail_activity_type_action_config_hr_applicant"
|
||||
parent="menu_hr_recruitment_config_activities"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem
|
||||
name="Activity Plans"
|
||||
id="hr_recruitment_menu_config_activity_plan"
|
||||
parent="menu_hr_recruitment_config_activities"
|
||||
action="mail_activity_plan_action_config_hr_applicant"
|
||||
groups="hr_recruitment.group_hr_recruitment_manager"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem
|
||||
name="Job Boards"
|
||||
id="menu_hr_job_boards"
|
||||
parent="menu_hr_recruitment_configuration"
|
||||
sequence="50"/>
|
||||
|
||||
<menuitem
|
||||
name="Emails"
|
||||
id="menu_hr_recruitment_emails"
|
||||
parent="menu_hr_job_boards"
|
||||
action="action_hr_job_platforms"
|
||||
sequence="50"/>
|
||||
|
||||
<record id="hr.menu_view_hr_contract_type" model="ir.ui.menu">
|
||||
<field name="active" eval="True"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -7,90 +7,35 @@
|
|||
<field name="priority" eval="75"/>
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[hasclass('settings')]" position="inside">
|
||||
<div class="app_settings_block" data-string="Recruitment" string="Recruitment" data-key="hr_recruitment" groups="hr_recruitment.group_hr_recruitment_manager">
|
||||
<h2>Job Posting</h2>
|
||||
<div class="row mt16 o_settings_container" name="online_posting_setting_container">
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="publish_available_jobs_setting">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_website_hr_recruitment"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_website_hr_recruitment" string="Online Posting"/>
|
||||
<div class="text-muted">
|
||||
Publish available jobs on your website
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>Recruitment Process</h2>
|
||||
<div class="row mt16 o_settings_container" name="recruitment_process_div">
|
||||
<div class="col-12 col-lg-6 o_setting_box"
|
||||
id="interview_forms_setting"
|
||||
title="Use interview forms tailored to each job position during the recruitment process. Select the form to use in the job position detail form. This relies on the Survey app.">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_hr_recruitment_survey"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_hr_recruitment_survey" string="Send Interview Survey"/>
|
||||
<div class="text-muted">
|
||||
Send an Interview Survey to the applicant during
|
||||
the recruitment process
|
||||
</div>
|
||||
<div class="content-group" id="interview_forms"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-6 o_setting_box" id="sms">
|
||||
<div class="o_setting_right_pane" id="sms_settings">
|
||||
<div class="o_form_label">
|
||||
Send SMS
|
||||
<a href="https://www.odoo.com/documentation/16.0/applications/marketing/sms_marketing/pricing/pricing_and_faq.html" title="Documentation" class="ms-1 o_doc_link" target="_blank"></a>
|
||||
</div>
|
||||
<div class="text-muted">
|
||||
Send texts to your contacts
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-6 o_setting_box" id="display_cv">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="group_applicant_cv_display"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="group_applicant_cv_display" string="CV Display"/>
|
||||
<div class="text-muted">
|
||||
Display CV on application form
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-6 o_setting_box" title="Use OCR to fill data from a picture of the CV or the file itself">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_hr_recruitment_extract" widget="upgrade_boolean"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane" id="recruitment_extract_settings">
|
||||
<label string="CV Digitization (OCR)" for="module_hr_recruitment_extract"/>
|
||||
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific."/>
|
||||
<div class="text-muted">
|
||||
Digitize your CV to extract name and email automatically.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<xpath expr="//form" position="inside">
|
||||
<app data-string="Recruitment" string="Recruitment" name="hr_recruitment" groups="hr_recruitment.group_hr_recruitment_manager">
|
||||
<block title="Job Posting" name="online_posting_setting_container">
|
||||
<setting id="publish_available_jobs_setting" string="Online Posting" help="Publish job offers on your website">
|
||||
<field name="module_website_hr_recruitment"/>
|
||||
</setting>
|
||||
</block>
|
||||
<block title="Process" name="recruitment_process_div">
|
||||
<setting id="interview_forms_setting" string="Send Interview Survey" help="Send an Interview Survey to the applicant during the recruitment process" title="Use interview forms tailored to each job position during the recruitment process. Select the form to use in the job position detail form. This relies on the Survey app.">
|
||||
<field name="module_hr_recruitment_survey"/>
|
||||
</setting>
|
||||
</block>
|
||||
<block title="In-App Purchases" name="recruitment_in_app_purchases">
|
||||
<setting id="sms" string="Send SMS" documentation="/applications/marketing/sms_marketing/pricing/pricing_and_faq.html" help="Send texts to your contacts">
|
||||
</setting>
|
||||
<setting id="recruitment_extract_settings" string="Résumé Digitization (OCR)" company_dependent="1" help="Digitize your résumé to extract name and email automatically." title="Use OCR to fill data from a picture of the Résumr or the file itself">
|
||||
<field name="module_hr_recruitment_extract" widget="upgrade_boolean"/>
|
||||
</setting>
|
||||
</block>
|
||||
</app>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_recruitment_configuration" model="ir.actions.act_window">
|
||||
<field name="name">Settings</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.config.settings</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
<field name="context">{'module' : 'hr_recruitment', 'bin_size': False}</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_hr_recruitment_global_settings" name="Settings"
|
||||
parent="menu_hr_recruitment_configuration" sequence="0" action="action_hr_recruitment_configuration"
|
||||
groups="base.group_system"/>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue