mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-24 10:52:07 +02:00
19.0 vanilla
This commit is contained in:
parent
a1137a1456
commit
e1d89e11e3
2789 changed files with 1093187 additions and 605897 deletions
|
|
@ -1,13 +1,13 @@
|
|||
<?xml version="1.0" ?>
|
||||
<odoo><data>
|
||||
<record id="mail_channel_view_form_" model="ir.ui.view">
|
||||
<field name="name">mail.channel.view.form.inherit.hr</field>
|
||||
<field name="model">mail.channel</field>
|
||||
<field name="inherit_id" ref="mail.mail_channel_view_form"/>
|
||||
<record id="discuss_channel_view_form" model="ir.ui.view">
|
||||
<field name="name">discuss.channel.view.form.inherit.hr</field>
|
||||
<field name="model">discuss.channel</field>
|
||||
<field name="inherit_id" ref="mail.discuss_channel_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='group_ids']" position="after">
|
||||
<field name="subscription_department_ids" widget="many2many_tags"
|
||||
attrs="{'invisible': [('channel_type', '!=', 'channel')]}"
|
||||
invisible="channel_type != 'channel'"
|
||||
string="Auto Subscribe Departments"/>
|
||||
</xpath>
|
||||
</field>
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<record id="hr_contract_template_form_view" model="ir.ui.view">
|
||||
<field name="name">hr.contract.template.form</field>
|
||||
<field name="model">hr.version</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Contract Template">
|
||||
<sheet>
|
||||
<div class="oe_title pe-0 w-100 mw-100" name="title">
|
||||
<h1 class="d-flex flex-row justify-content-between">
|
||||
<field name="name" class="text-truncate" placeholder="Template Name" required="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group name="top_info">
|
||||
<group name="top_info_left">
|
||||
<field name="job_id" groups="hr.group_hr_manager"/>
|
||||
<field name="department_id" groups="hr.group_hr_manager"/>
|
||||
</group>
|
||||
<group name="top_info_right">
|
||||
<field name="hr_responsible_id" widget="many2one_avatar_user" groups="hr.group_hr_user"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Salary Information" name="information" class="o_hr_contract_salary_information" groups="hr.group_hr_manager">
|
||||
<field name="currency_id" invisible="1"/> <!-- for monetary fields -->
|
||||
<group name="salary_info">
|
||||
<group name="contract" string="Contract Overview" groups="hr.group_hr_user">
|
||||
<label for="wage"/>
|
||||
<div class="o_row" name="wage">
|
||||
<field name="wage" class="o_hr_narrow_field"/>
|
||||
<div name="wage_period_label">/ month</div>
|
||||
</div>
|
||||
<field name="contract_type_id" string="Contract Type" placeholder="Contract Type"/>
|
||||
<field name="structure_type_id" string="Pay Category" placeholder="Employee will be excluded from Pay Runs"
|
||||
domain="['|', ('country_id', '=', False), ('country_id', '=', company_country_id)]"/>
|
||||
|
||||
<separator name="schedule" string="Schedule"/>
|
||||
<field name="resource_calendar_id" help="The default working hours are set in configuration."/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<chatter groups="hr.group_hr_manager"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_contract_template_list_view" model="ir.ui.view">
|
||||
<field name="name">hr.contract.template.list</field>
|
||||
<field name="model">hr.version</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Contract Templates" default_order='name'>
|
||||
<field name="name"/>
|
||||
<field name="job_id"/>
|
||||
<field name="department_id" optional="show"/>
|
||||
<field name="currency_id" column_invisible="1"/>
|
||||
<field name="wage" widget="monetary" optional="show"/>
|
||||
<field name="contract_type_id" optional="show"/>
|
||||
<field name="structure_type_id" optional="show"/>
|
||||
<field name="resource_calendar_id" optional="show"/>
|
||||
<field name="company_id" groups="base.group_multi_company" readonly="1" optional="hidden"/>
|
||||
<field name="create_uid" optional="hidden"/>
|
||||
<field name="create_date" optional="hidden"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_contract_templates" model="ir.actions.act_window">
|
||||
<field name="name">Contract Templates</field>
|
||||
<field name="res_model">hr.version</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="domain">[('employee_id', '=', False)]</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'list', 'sequence': 1, 'view_id': ref('hr_contract_template_list_view')}),
|
||||
(0, 0, {'view_mode': 'form', 'sequence': 2, 'view_id': ref('hr_contract_template_form_view')})]"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No Template found</p><p>
|
||||
Let's create one
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -4,10 +4,12 @@
|
|||
<record id="hr_contract_type_view_tree" model="ir.ui.view">
|
||||
<field name="model">hr.contract.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Contract Types" editable="bottom">
|
||||
<list string="Contract Types" editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
<field name="code" column_invisible="1"/>
|
||||
<field name="country_id" optional="hide"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -17,7 +19,9 @@
|
|||
<form>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name" />
|
||||
<field name="name"/>
|
||||
<field name="code" invisible="1"/>
|
||||
<field name="country_id"/>
|
||||
</group>
|
||||
</group>
|
||||
</form>
|
||||
|
|
@ -27,7 +31,7 @@
|
|||
<record id="hr_contract_type_action" model="ir.actions.act_window">
|
||||
<field name="name">Employment Types</field>
|
||||
<field name="res_model">hr.contract.type</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_mode">list</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new employment type
|
||||
|
|
|
|||
|
|
@ -8,43 +8,53 @@
|
|||
<form string="department">
|
||||
<field name="company_id" invisible="1"/>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button class="oe_stat_button" type="action" name="%(hr.act_employee_from_department)d" icon="fa-users">
|
||||
<div class="oe_button_box" name="button_box" invisible="not id">
|
||||
<button class="oe_stat_button" name="action_employee_from_department" type="object" icon="fa-users">
|
||||
<field string="Employees" name="total_employee" widget="statinfo"/>
|
||||
</button>
|
||||
<button class="oe_stat_button" type="object" name="action_plan_from_department" icon="fa-list-ul">
|
||||
<field string="Plans" name="plans_count" widget="statinfo"/>
|
||||
</button>
|
||||
</div>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<field name="active" invisible="1"/>
|
||||
<group col="4">
|
||||
<field name="name"/>
|
||||
<field name="manager_id"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group col="12">
|
||||
<group colspan="7">
|
||||
<field name="name" invisible="1"/> <!-- Remove in master -->
|
||||
<field name="manager_id" widget="many2one_avatar_employee"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="child_ids" invisible="1"/>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company" placeholder="Visible to all"/>
|
||||
<field name="color" widget="color_picker" string="Color"/>
|
||||
</group>
|
||||
<group colspan="5" invisible="not id or id and not child_ids and not parent_id">
|
||||
<widget name="hr_department_chart" class="mb-3"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" groups="base.group_user"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_department_tree" model="ir.ui.view">
|
||||
<field name="name">hr.department.tree</field>
|
||||
<field name="name">hr.department.list</field>
|
||||
<field name="model">hr.department</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Companies" sample="1">
|
||||
<field name="display_name"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="manager_id"/>
|
||||
<list string="Companies" multi_edit="1">
|
||||
<field name="company_id" column_invisible="True"/>
|
||||
<field name="name"/>
|
||||
<field name="company_id" groups="base.group_multi_company" readonly="1"/>
|
||||
<field name="manager_id" widget="many2one_avatar_employee"/>
|
||||
<field name="total_employee" string="Employees"/>
|
||||
<field name="parent_id"/>
|
||||
</tree>
|
||||
<field name="color" widget="color_picker" string="Color"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -55,7 +65,7 @@
|
|||
<search string="Departments">
|
||||
<field name="name" string="Department"/>
|
||||
<field name="manager_id" />
|
||||
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
|
||||
<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)]"/>
|
||||
</search>
|
||||
|
|
@ -66,54 +76,59 @@
|
|||
<field name="name">hr.department.kanban</field>
|
||||
<field name="model">hr.department</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="oe_background_grey o_kanban_dashboard o_hr_department_kanban o_kanban_small_column" sample="1">
|
||||
<field name="name"/>
|
||||
<field name="company_id"/>
|
||||
<field name="manager_id"/>
|
||||
<field name="color"/>
|
||||
<field name="total_employee"/>
|
||||
<kanban highlight_color="color" class="o_hr_department_kanban o_kanban_small_column" can_open="0" sample="1">
|
||||
<field name="active"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''}">
|
||||
<div t-attf-class="o_kanban_card_header">
|
||||
<div class="o_kanban_card_header_title">
|
||||
<div class="o_primary"><a type="edit"><field name="name"/></a></div>
|
||||
<div class="o_secondary" groups="base.group_multi_company">
|
||||
<small>
|
||||
<i class="fa fa-building-o" role="img" aria-label="Company" title="Company"/> <field name="company_id"/>
|
||||
</small>
|
||||
<t t-name="menu" t-if="!selection_mode">
|
||||
<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">
|
||||
<a name="action_employee_from_department" type="object">Employees</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="action_open_view_child_departments" type="object">Child departments</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section" t-if="!selection_mode">
|
||||
<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 o_kanban_manage_reports">
|
||||
<h5 role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content" t-if="!selection_mode">
|
||||
<div class="row o_kanban_card_upper_content">
|
||||
<div class="col-6 o_kanban_primary_left">
|
||||
<button class="btn btn-primary" name="%(act_employee_from_department)d" type="action">
|
||||
<t t-out="record.total_employee.raw_value"/> Employees
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_primary_right">
|
||||
</div>
|
||||
<div class="o_kanban_card_manage_settings row" groups="hr.group_hr_user">
|
||||
<div t-if="widget.editable" role="menuitem" aria-haspopup="true" class="col-6">
|
||||
<field name="color" widget="kanban_color_picker"/>
|
||||
</div>
|
||||
<div class="o_kanban_card_lower_content"
|
||||
style="justify-content: end">
|
||||
<!-- placeholder for bottom content -->
|
||||
<div class="col-6">
|
||||
<a t-if="widget.editable" role="menuitem" class="dropdown-item" type="open">Configuration</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>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<div class="o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_manage_reports">
|
||||
<div class="o_kanban_card_manage_title ps-4 pb-1">
|
||||
<span class="fw-bolder">Reporting</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a t-if="widget.editable" role="menuitem" class="dropdown-item" type="edit">Configuration</a>
|
||||
<ul t-if="widget.editable" class="oe_kanban_colorpicker" data-field="color" role="menu"/>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="card">
|
||||
<a type="open"><field name="name" class="fw-bold fs-4 d-bolck ms-2"/></a>
|
||||
<field name="manager_id" widget="many2one_avatar_employee" options="{'display_avatar_name': True}" readonly="1" class="text-muted ms-2"/>
|
||||
<div class="small mt-1 ms-2" groups="base.group_multi_company">
|
||||
<i class="fa fa-building-o" role="img" aria-label="Company" title="Company"/> <field name="company_id"/>
|
||||
</div>
|
||||
<div class="row g-0 mt-3 mb-2 ms-2" t-if="!selection_mode">
|
||||
<div class="col-6">
|
||||
<button class="btn btn-primary" name="action_employee_from_department" type="object">
|
||||
<field name="total_employee"/> Employees
|
||||
</button>
|
||||
</div>
|
||||
<div name="kanban_primary_right" class="col-6">
|
||||
<!-- placeholder for xpaths -->
|
||||
</div>
|
||||
</div>
|
||||
<div name="kanban_card_lower_content" class="mt-auto" t-if="!selection_mode">
|
||||
<!-- placeholder for bottom content -->
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
|
|
@ -121,35 +136,73 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_department_kanban_action" model="ir.actions.act_window">
|
||||
<field name="name">Departments</field>
|
||||
<field name="res_model">hr.department</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="search_view_id" ref="view_department_filter"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new department
|
||||
</p><p>
|
||||
Odoo's department structure is used to manage all documents
|
||||
related to employees by departments: expenses, timesheets,
|
||||
time off, recruitments, etc.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
<record id="hr_department_tree_action" model="ir.actions.act_window">
|
||||
<field name="name">Departments</field>
|
||||
<field name="res_model">hr.department</field>
|
||||
<field name="view_mode">tree,form,kanban</field>
|
||||
<field name="view_mode">list,form,kanban</field>
|
||||
<field name="search_view_id" ref="view_department_filter"/>
|
||||
<field name="domain">[("has_read_access", "=", True)]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new department
|
||||
</p><p>
|
||||
Structure Employees per department and have an overview of e.g.
|
||||
expenses, timesheets, time off, recruitment, etc.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_department_tree_view_tree_action" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view_mode">list</field>
|
||||
<field name="act_window_id" ref="hr.hr_department_tree_action"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_department_form_view_tree_action" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="15"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="act_window_id" ref="hr.hr_department_tree_action"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_department_kanban_view_tree_action" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view_mode">kanban</field>
|
||||
<field name="act_window_id" ref="hr.hr_department_tree_action"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_department_kanban_action" model="ir.actions.act_window">
|
||||
<field name="name">Departments</field>
|
||||
<field name="res_model">hr.department</field>
|
||||
<field name="view_mode">kanban,list,form</field>
|
||||
<field name="path">departments</field>
|
||||
<field name="domain">[("has_read_access", "=", True)]</field>
|
||||
<field name="search_view_id" ref="view_department_filter"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new department
|
||||
</p><p>
|
||||
Odoo's department structure is used to manage all documents
|
||||
related to employees by departments: expenses, timesheets,
|
||||
leaves, recruitments, etc.
|
||||
Structure Employees per department and have an overview of e.g.
|
||||
expenses, timesheets, time off, recruitment, etc.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_department_kanban_view_kanban_action" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view_mode">kanban</field>
|
||||
<field name="act_window_id" ref="hr.hr_department_kanban_action"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_department_tree_view_kanban_action" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="15"/>
|
||||
<field name="view_mode">list</field>
|
||||
<field name="act_window_id" ref="hr.hr_department_kanban_action"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_department_form_view_kanban_action" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="act_window_id" ref="hr.hr_department_kanban_action"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -4,10 +4,11 @@
|
|||
<record id="hr_departure_reason_view_list" model="ir.ui.view">
|
||||
<field name="model">hr.departure.reason</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="bottom">
|
||||
<list editable="bottom">
|
||||
<field name="sequence" widget="handle" />
|
||||
<field name="name" />
|
||||
</tree>
|
||||
<field name="country_code" optional="hide"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -17,8 +18,9 @@
|
|||
<form>
|
||||
<group>
|
||||
<group>
|
||||
<field name="sequence" />
|
||||
<field name="name" />
|
||||
<field name="sequence"/>
|
||||
<field name="name"/>
|
||||
<field name="country_code"/>
|
||||
</group>
|
||||
</group>
|
||||
</form>
|
||||
|
|
@ -28,7 +30,7 @@
|
|||
<record id="hr_departure_reason_action" model="ir.actions.act_window">
|
||||
<field name="name">Departure Reasons</field>
|
||||
<field name="res_model">hr.departure.reason</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_mode">list</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -1,37 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="view_employee_category_form" model="ir.ui.view">
|
||||
<field name="name">hr.employee.category.form</field>
|
||||
<field name="model">hr.employee.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Employee Tags">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_employee_category_form" model="ir.ui.view">
|
||||
<field name="name">hr.employee.category.form</field>
|
||||
<field name="model">hr.employee.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Employee Tags">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_employee_category_list" model="ir.ui.view">
|
||||
<field name="name">hr.employee.category.list</field>
|
||||
<field name="model">hr.employee.category</field>
|
||||
<field eval="8" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Employees Tags" editable="bottom">
|
||||
<field name="name"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_employee_category_list" model="ir.ui.view">
|
||||
<field name="name">hr.employee.category.list</field>
|
||||
<field name="model">hr.employee.category</field>
|
||||
<field eval="8" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Employees Tags" editable="bottom">
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="open_view_categ_form" model="ir.actions.act_window">
|
||||
<field name="name">Employee Tags</field>
|
||||
<field name="res_model">hr.employee.category</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
<record id="open_view_categ_form" model="ir.actions.act_window">
|
||||
<field name="name">Employee Tags</field>
|
||||
<field name="res_model">hr.employee.category</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No Tags found ! Let's create one
|
||||
</p>
|
||||
<p>
|
||||
Use tags to categorize your Employees.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -8,24 +8,26 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Employees">
|
||||
<field name="name" string="Employees" filter_domain="['|',('work_email','ilike',self),('name','ilike',self)]"/>
|
||||
<field name="job_title" string="Job Title"/>
|
||||
<field name="department_id" string="Department"/>
|
||||
<field name="parent_id" string="Manager"/>
|
||||
<field name="company_id" string="Company"/>
|
||||
<searchpanel view_types="kanban,list,graph,pivot,hierarchy">
|
||||
<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>
|
||||
<field name="parent_id" string="Manager" domain="[('company_id', 'in', allowed_company_ids)]"/>
|
||||
<field name="job_title"/>
|
||||
<field name="job_id" invisible="1"/>
|
||||
<separator/>
|
||||
<filter name="my_team" string="My Team" domain="[('parent_id.user_id', '=', uid)]"/>
|
||||
<filter name="my_department" string="My Department" domain="[('member_of_department', '=', True)]"/>
|
||||
<separator/>
|
||||
<filter name="newly_hired" string="Newly Hired" domain="[('newly_hired', '=', True)]"/>
|
||||
<separator/>
|
||||
<filter name="archived" string="Archived" domain="[('active', '=', False)]"/>
|
||||
<group expand="0" string="Group By">
|
||||
<group>
|
||||
<filter name="group_manager" string="Manager" domain="[]" context="{'group_by':'parent_id'}"/>
|
||||
<filter name="group_department" string="Department" domain="[]" context="{'group_by':'department_id'}"/>
|
||||
<filter name="group_job" string="Job" domain="[]" context="{'group_by':'job_id'}"/>
|
||||
<filter name="group_company" string="Company" domain="[]" context="{'group_by':'company_id'}"/>
|
||||
</group>
|
||||
<searchpanel>
|
||||
<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>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -34,65 +36,69 @@
|
|||
<field name="name">hr.employee.public.form</field>
|
||||
<field name="model">hr.employee.public</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Employee" create="0" write="0" js_class="hr_employee_form" class="o_employee_form">
|
||||
<field name="image_128" invisible="1" />
|
||||
<form string="Employee" create="0" write="0" js_class="hr_employee_form">
|
||||
<header/>
|
||||
<sheet>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="user_partner_id" invisible="1"/>
|
||||
<field name="active" invisible="1"/>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<!-- Used by other modules-->
|
||||
</div>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<field name="avatar_1920" widget='image' class="oe_avatar" options='{"zoom": true, "preview_image":"avatar_128"}'/>
|
||||
<div class="oe_title">
|
||||
<label for="name" string="Employee Name"/>
|
||||
<h1 class="d-flex flex-row">
|
||||
<span class="me-2">
|
||||
<widget name="hr_employee_chat" invisible="not context.get('chat_icon')"/>
|
||||
</span>
|
||||
<field name="name" placeholder="e.g. John Doe" required="True"
|
||||
style="font-size: min(4vw, 2.6rem);"/>
|
||||
</h1>
|
||||
<h2>
|
||||
<field name="job_title" placeholder="Job Title" />
|
||||
</h2>
|
||||
<div class="d-flex flex-column flex-sm-row align-items-center">
|
||||
<div class="o_employee_avatar ms-2 p-0 h-100">
|
||||
<field name="image_1920" widget='image' class="m-0" options='{"size": [128,158], "zoom": true, "preview_image":"avatar_128"}'/>
|
||||
<field name="show_hr_icon_display" invisible="1" />
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="mobile_phone" widget="phone"/>
|
||||
<field name="work_phone" widget="phone"/>
|
||||
<field name="work_email" widget="email"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="department_id" context="{'open_employees_kanban': 1}"/>
|
||||
<field name="job_id"/>
|
||||
<field name="employee_type"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="coach_id"/>
|
||||
</group>
|
||||
</group>
|
||||
<div class="col-12 col-sm-6 col-md-7 col-lg-8 px-4 o_employee_form_header_info">
|
||||
<div class="oe_title mw-100 ps-0 pe-sm-2">
|
||||
<h1 class="d-flex flex-row align-items-center">
|
||||
<field name="name" placeholder="Employee's Name"
|
||||
required="True" style="font-size: min(4vw, 2.6rem);"/>
|
||||
</h1>
|
||||
<p class="d-flex align-items-baseline mb-0">
|
||||
<i class="fa fa-envelope fa-fw me-1 text-primary" title="Work Email"/>
|
||||
<field name="work_email" widget="email" placeholder="e.g. johndoe@example.com" string="Work Email"/>
|
||||
</p>
|
||||
<p class="d-flex align-items-baseline mb-0">
|
||||
<i class="fa fa-phone fa-fw me-1 text-primary" title="Work Phone"/>
|
||||
<field name="work_phone" widget="phone" placeholder="Work Phone" string="Work Phone"/>
|
||||
</p>
|
||||
<p class="d-flex align-items-baseline mb-0">
|
||||
<i class="fa fa-mobile fa-fw me-1 text-primary" title="Work Mobile"/>
|
||||
<field name="mobile_phone" widget="phone" placeholder="Work Mobile" string="Work Mobile"/>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="align-self-start w-auto end-0 mt-2 d-flex align-items-center justify-content-end gap-2 o_presence_status_pill_wrapper">
|
||||
<div invisible="not user_id">
|
||||
<widget name="hr_employee_chat" invisible="not context.get('chat_icon')"/>
|
||||
</div>
|
||||
<field name="hr_icon_display" invisible="not show_hr_icon_display or not id or not active" widget="hr_presence_status"/>
|
||||
</div>
|
||||
</div>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<notebook>
|
||||
<page name="public" string="Work Information">
|
||||
<div id="o_work_employee_container" class="d-lg-flex"> <!-- These two div are used to position org_chart -->
|
||||
<div id="o_work_employee_main" class="flex-grow-1">
|
||||
<page name="work_information" string="Work">
|
||||
<div id="o_work_employee_container" class="row"> <!-- These two div are used to position org_chart -->
|
||||
<div id="o_work_employee_main" class="col-lg-7 d-flex flex-column">
|
||||
<group string="work">
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="department_id"/>
|
||||
<field name="job_title" string="Job Title"/>
|
||||
<field name="job_id" string="Job Position" context="{'default_no_of_recruitment': 0, 'default_is_favorite': False}" placeholder="e.g. Sales Manager" invisible="1"/>
|
||||
<field name="parent_id" widget="many2one_avatar_employee"/>
|
||||
</group>
|
||||
<group string="Location" name="location">
|
||||
<field name="address_id"
|
||||
context="{'show_address': 1}"
|
||||
options='{"always_reload": True, "highlight_first_line": True}'/>
|
||||
options='{"highlight_first_line": True}'/>
|
||||
<field name="work_location_id"/>
|
||||
</group>
|
||||
<group name="managers" string="Approvers" invisible="1">
|
||||
<!-- overridden in other modules -->
|
||||
</group>
|
||||
<group string="Schedule" groups="base.group_no_one">
|
||||
<field name="resource_calendar_id"/>
|
||||
</group>
|
||||
</div>
|
||||
<div id="o_employee_org_chart" class="col-lg-5"></div>
|
||||
</div>
|
||||
</page>
|
||||
<page name="resume" string="Resume">
|
||||
<!-- overridden in other modules -->
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
|
|
@ -100,19 +106,19 @@
|
|||
</record>
|
||||
|
||||
<record id="hr_employee_public_view_tree" model="ir.ui.view">
|
||||
<field name="name">hr.employee.tree</field>
|
||||
<field name="name">hr.employee.list</field>
|
||||
<field name="model">hr.employee.public</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Employees" sample="1">
|
||||
<list string="Employees" sample="1" expand="context.get('expand', False)">
|
||||
<field name="name"/>
|
||||
<field name="work_phone" class="o_force_ltr"/>
|
||||
<field name="work_email"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="department_id"/>
|
||||
<field name="job_title"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="coach_id" invisible="1"/>
|
||||
</tree>
|
||||
<field name="job_id" options="{'no_open': True}"/>
|
||||
<field name="parent_id" widget="many2one_avatar_employee"/>
|
||||
<field name="coach_id" widget="many2one_avatar_employee" optional="show"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -121,77 +127,46 @@
|
|||
<field name="model">hr.employee.public</field>
|
||||
<field name="priority">10</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_hr_employee_kanban" js_class="hr_employee_kanban" sample="1">
|
||||
<field name="id"/>
|
||||
<field name="hr_presence_state"/>
|
||||
<field name="user_id"/>
|
||||
<field name="user_partner_id"/>
|
||||
<field name="last_activity"/>
|
||||
<field name="hr_icon_display"/>
|
||||
<kanban class="o_hr_employee_kanban" sample="1">
|
||||
<field name="show_hr_icon_display"/>
|
||||
<field name="image_128" />
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_click o_kanban_record_has_image_fill o_hr_kanban_record">
|
||||
<field name="image_1024" class="o_kanban_image_fill_left d-block" preview_image="image_128"
|
||||
widget="background_image" options="{'zoom': true, 'zoom_delay': 1000}"/>
|
||||
|
||||
<div class="oe_kanban_details">
|
||||
<div class="o_kanban_record_top">
|
||||
<div class="o_kanban_record_headings">
|
||||
<strong class="o_kanban_record_title">
|
||||
<t t-if="record.show_hr_icon_display.raw_value">
|
||||
<div class="float-end"
|
||||
t-if="record.hr_icon_display.raw_value == 'presence_present'">
|
||||
<!-- Employee is present/connected and it is normal according to his work schedule -->
|
||||
<span class="fa fa-circle text-success" role="img" aria-label="Present"
|
||||
title="Present" name="presence_present">
|
||||
</span>
|
||||
</div>
|
||||
<div class="float-end"
|
||||
t-if="record.hr_icon_display.raw_value == 'presence_absent'">
|
||||
<!-- Employee is absent and it is normal according to his work schedule -->
|
||||
<span class="fa fa-circle-o text-muted" role="img" aria-label="Absent"
|
||||
title="Absent" name="presence_absent">
|
||||
</span>
|
||||
</div>
|
||||
<div class="float-end"
|
||||
t-if="record.hr_icon_display.raw_value == 'presence_absent_active'">
|
||||
<!-- Employee is connected but according to his work schedule, he should not work for now -->
|
||||
<span class="fa fa-circle-o text-success" role="img"
|
||||
aria-label="Present but not active"
|
||||
title="Present but not active" name="presence_absent_active">
|
||||
</span>
|
||||
</div>
|
||||
<!-- Employee is not here but according to his work schedule, he should be connected -->
|
||||
<div class="float-end"
|
||||
t-if="record.hr_icon_display.raw_value == 'presence_to_define'">
|
||||
<span class="fa fa-circle text-warning" role="img"
|
||||
aria-label="To define" title="To define"
|
||||
name="presence_to_define">
|
||||
</span>
|
||||
</div>
|
||||
</t>
|
||||
<field name="name"/>
|
||||
</strong>
|
||||
<span t-if="record.job_title.raw_value" class="o_kanban_record_subtitle"><field name="job_title"/></span>
|
||||
<t t-name="card" class="flex-row">
|
||||
<aside class="o_kanban_aside_full">
|
||||
<t t-if="!record.image_1024.raw_value">
|
||||
<field name="avatar_128" class="d-block position-relative"
|
||||
widget="background_image" options="{'zoom': true, 'zoom_delay': 1000}"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<field name="image_1024" class="d-block position-relative" preview_image="image_128"
|
||||
widget="background_image" options="{'zoom': true, 'zoom_delay': 1000}"/>
|
||||
</t>
|
||||
</aside>
|
||||
<main class="ms-2">
|
||||
<div>
|
||||
<div t-if="record.show_hr_icon_display.raw_value" class="float-end">
|
||||
<field name="hr_icon_display" class=" align-items-center" widget="hr_presence_status" />
|
||||
</div>
|
||||
<field class="fw-bolder" name="name" placeholder="Employee's Name"/>
|
||||
</div>
|
||||
<ul>
|
||||
<li id="last_login"/>
|
||||
<li t-if="record.work_email.raw_value"><field name="work_email" /></li>
|
||||
<li t-if="record.work_phone.raw_value" class="o_force_ltr"><field name="work_phone" /></li>
|
||||
</ul>
|
||||
<div class="oe_kanban_content position-absolute start-0 bottom-0 end-0 me-2">
|
||||
<div class="o_kanban_record_bottom">
|
||||
<div class="oe_kanban_bottom_left"/>
|
||||
<div class="oe_kanban_bottom_right">
|
||||
<widget name="hr_employee_chat"/>
|
||||
</div>
|
||||
<field t-if="record.job_title.raw_value" name="job_title"/>
|
||||
<field t-elif="record.job_id.raw_value" name="job_id"/>
|
||||
<div t-if="record.work_email.raw_value" class="text-truncate">
|
||||
<i class="fa fa-fw me-2 fa-envelope text-primary" title="Email"/>
|
||||
<field name="work_email"/>
|
||||
</div>
|
||||
<div t-if="record.work_phone.raw_value">
|
||||
<i class="fa fa-fw me-2 fa-phone text-primary" title="Phone"/>
|
||||
<field name="work_phone"/>
|
||||
</div>
|
||||
<div class="d-flex">
|
||||
<div invisible="birthday_public_display_string == 'hidden'">
|
||||
<i class="fa fa-fw me-2 fa-birthday-cake text-primary" title="Birthday"/>
|
||||
<field name="birthday_public_display_string"/>
|
||||
</div>
|
||||
<field name="user_id" widget="many2one_avatar_user" readonly="1" class="ms-auto"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
|
|
@ -201,21 +176,128 @@
|
|||
<record id="hr_employee_public_action" model="ir.actions.act_window">
|
||||
<field name="name">Employees</field>
|
||||
<field name="res_model">hr.employee.public</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="domain">[]</field>
|
||||
<field name="view_mode">kanban,list,form</field>
|
||||
<field name="domain">[('company_id', 'in', allowed_company_ids)]</field>
|
||||
<field name="context">{'chat_icon': True}</field>
|
||||
<field name="view_id" eval="False"/>
|
||||
<field name="search_view_id" ref="hr_employee_public_view_search"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Add a new employee
|
||||
</p><p>
|
||||
With just a quick glance on the Odoo employee screen, you
|
||||
can easily find all the information you need for each person;
|
||||
contact data, job position, availability, etc.
|
||||
</p>
|
||||
<div>
|
||||
<div class="o_nocontent_help">
|
||||
<div>
|
||||
<p class="text-center fs-1">
|
||||
Ready to start your experience?
|
||||
</p>
|
||||
<hr class="my-4"/>
|
||||
</div>
|
||||
<div>
|
||||
<div class="container">
|
||||
<div class="row text-center">
|
||||
<div class="col-12 col-sm-4">
|
||||
<p class="fs-2 mb-0">Hiring</p>
|
||||
</div>
|
||||
<div class="col-12 col-sm-4">
|
||||
<p class="fs-2 mb-0">Experience</p>
|
||||
</div>
|
||||
<div class="col-12 col-sm-4">
|
||||
<p class="fs-2 mb-0">Development</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container mt-4 d-none d-md-block">
|
||||
<div class="row text-center">
|
||||
<div class="col-md-4 d-flex flex-column align-items-center gap-4 mb-4">
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/hr_recruitment/static/description/icon.png" width="60"/>
|
||||
<small>Hiring</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/sign/static/description/icon.png" width="60"/>
|
||||
<small>Sign</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/hr_referral/static/description/icon.png" width="60"/>
|
||||
<small>Referral</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 d-flex flex-wrap justify-content-center gap-4 mb-4">
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/ai/static/description/icon.png" width="60"/>
|
||||
<small>AI</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/hr_payroll/static/description/icon.png" width="60"/>
|
||||
<small>Payroll</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/planning/static/description/icon.png" width="60"/>
|
||||
<small>Planning</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/hr_holidays/static/description/icon.png" width="60"/>
|
||||
<small>Leaves</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/fleet/static/description/icon.png" width="60"/>
|
||||
<small>Fleet</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/lunch/static/description/icon.png" width="60"/>
|
||||
<small>Lunch</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 d-flex flex-wrap justify-content-center gap-4 mb-4">
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/hr_appraisal/static/description/icon.png" width="60"/>
|
||||
<small>Performance</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/hr_skills/static/description/icon.png" width="60"/>
|
||||
<small>Talent</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/website_slides/static/description/icon.png" width="60"/>
|
||||
<small>eLearning</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/event/static/description/icon.png" width="60"/>
|
||||
<small>Trainings</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/documents/static/description/icon.png" width="60"/>
|
||||
<small>Documents</small>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<img src="/board/static/description/icon.png" width="60"/>
|
||||
<small>Dashboard</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="act_hr_employee_public_kanban_view" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view_mode">kanban</field>
|
||||
<field name="act_window_id" ref="hr.hr_employee_public_action"/>
|
||||
</record>
|
||||
|
||||
<record id="act_hr_employee_public_tree_view" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="15"/>
|
||||
<field name="view_mode">list</field>
|
||||
<field name="act_window_id" ref="hr.hr_employee_public_action"/>
|
||||
</record>
|
||||
|
||||
<record id="act_hr_employee_public_form_view" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="act_window_id" ref="hr.hr_employee_public_action"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -7,60 +7,57 @@
|
|||
<field name="model">hr.job</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Job">
|
||||
<header/> <!-- inherited in other module -->
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1><field name="name" placeholder="e.g. Sales Manager"/></h1>
|
||||
<h1>
|
||||
<field name="name" options="{'line_breaks': False}" widget="text" placeholder="e.g. Sales Manager"/>
|
||||
</h1>
|
||||
</div>
|
||||
<notebook>
|
||||
<page string="Recruitment" name="recruitment_page">
|
||||
<page string="Details" name="recruitment_page" invisible="1" groups="hr.group_hr_user">
|
||||
<group>
|
||||
<group name="recruitment">
|
||||
<field name="company_id" options="{'no_create': True}" invisible="1" groups="base.group_multi_company"/>
|
||||
<field name="department_id"/>
|
||||
<field name="contract_type_id"/>
|
||||
<group name="hiring_process" string="Hiring Process">
|
||||
<field name="user_id" widget="many2one_avatar_user"/>
|
||||
</group>
|
||||
<group name="recruitment2">
|
||||
<label for="no_of_recruitment"/>
|
||||
<group name="job_posting" string="Job Posting">
|
||||
<label name="no_of_recruitment_label" for="no_of_recruitment"/>
|
||||
<div class="o_row" name="recruitment_target">
|
||||
<field name="no_of_recruitment" class="o_hr_narrow_field"/>
|
||||
<span>new Employees</span>
|
||||
<span>new employees</span>
|
||||
</div>
|
||||
</group>
|
||||
<group name="job" string="Job">
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company" placeholder="Visible to all"/>
|
||||
<field name="department_id"/>
|
||||
</group>
|
||||
<group name="contract" string="Contract">
|
||||
<field name="contract_type_id"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Job Summary" name="job_description_page">
|
||||
<field name="description" options="{'collaborative': true}"/>
|
||||
<page string="Summary" name="job_description_page" invisible="1" groups="hr.group_hr_user">
|
||||
<field name="description" options="{'collaborative': true}" placeholder="e.g. Summarize the position in one or two lines..."/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" options="{'open_attachments': True}"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_hr_job_tree" model="ir.ui.view">
|
||||
<field name="name">hr.job.tree</field>
|
||||
<field name="name">hr.job.list</field>
|
||||
<field name="model">hr.job</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Job" sample="1">
|
||||
<list string="Job" sample="1">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="department_id"/>
|
||||
<field name="no_of_recruitment"/>
|
||||
<field name="no_of_employee" optional="hide"/>
|
||||
<field name="expected_employees" optional="hide"/>
|
||||
<field name="no_of_hired_employee" optional="hide"/>
|
||||
<field name="message_needaction" invisible="1"/>
|
||||
<field name="company_id" groups="base.group_multi_company" optional="hide"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
</tree>
|
||||
<field name="no_of_employee" optional="hide" string="Number of Employees"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -70,18 +67,12 @@
|
|||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile" sample="1">
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_click">
|
||||
<div>
|
||||
<strong><field name="name"/></strong>
|
||||
</div>
|
||||
<div>
|
||||
<span><field name="department_id"/>&nbsp;</span>
|
||||
</div>
|
||||
<div t-if="!selection_mode">
|
||||
<span>Vacancies : <field name="expected_employees"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<t t-name="card">
|
||||
<field class="fw-bold" name="name"/>
|
||||
<field name="department_id"/>
|
||||
<span t-if="!selection_mode" groups="hr.group_hr_user">
|
||||
Vacancies: <field name="expected_employees"/>
|
||||
</span>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
|
|
@ -96,10 +87,10 @@
|
|||
<field name="name" string="Job Position"/>
|
||||
<field name="department_id" operator="child_of"/>
|
||||
<separator/>
|
||||
<filter name="message_needaction" string="Unread Messages" domain="[('message_needaction', '=', True)]"/>
|
||||
<filter name="message_needaction" string="Unread Messages" domain="[('message_needaction', '=', True)]" groups="mail.group_mail_notification_type_inbox"/>
|
||||
<separator/>
|
||||
<filter name="archived" string="Archived" domain="[('active', '=', False)]"/>
|
||||
<group expand="0" string="Group By">
|
||||
<group>
|
||||
<filter string="Department" name="department" domain="[]" context="{'group_by': 'department_id'}"/>
|
||||
<filter string="Company" name="company" domain="[]" context="{'group_by': 'company_id'}" groups="base.group_multi_company"/>
|
||||
<filter string="Employment Type" name="employment_type" domain="[]" context="{'group_by': 'contract_type_id'}"/>
|
||||
|
|
@ -108,18 +99,27 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_create_job_position" 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.view_hr_job_form"/>
|
||||
<field name="target">current</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_job" model="ir.actions.act_window">
|
||||
<field name="name">Job Positions</field>
|
||||
<field name="res_model">hr.job</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="search_view_id" ref="view_job_filter"/>
|
||||
<field name="context">{"search_default_Current":1}</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>
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Ready to recruit more efficiently?
|
||||
</p>
|
||||
<a name="%(hr.action_create_job_position)d" class="btn btn-link" type="action">
|
||||
Let's create a job position
|
||||
</a>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,127 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="hr_plan_view_search" model="ir.ui.view">
|
||||
<field name="name">hr.plan.view.search</field>
|
||||
<field name="model">hr.plan</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Plan">
|
||||
<field name="name"/>
|
||||
<field name="department_id"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_plan_view_tree" model="ir.ui.view">
|
||||
<field name="name">hr.plan.view.tree</field>
|
||||
<field name="model">hr.plan</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Planning">
|
||||
<field name="name"/>
|
||||
<field name="steps_count"/>
|
||||
<field name="department_id" optional="show"/>
|
||||
<field name="company_id" groups="base.group_multi_company" optional="hide"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_plan_view_form" model="ir.ui.view">
|
||||
<field name="name">hr.plan.view.form</field>
|
||||
<field name="model">hr.plan</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Planning">
|
||||
<field name="company_id" invisible="1"/>
|
||||
<sheet>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<div class="oe_title">
|
||||
<label for="name" string="Plan Name"/>
|
||||
<h1>
|
||||
<field name="name" placeholder="e.g. Onboarding"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<field name="department_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="active" invisible="1"/>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Activities To Generate">
|
||||
<field name="plan_activity_type_ids" nolabel="1">
|
||||
<tree>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="activity_type_id"/>
|
||||
<field name="summary"/>
|
||||
<field name="responsible"/>
|
||||
<field name="responsible_id" attrs="{'readonly': [('responsible', '!=', 'other')]}" optional="hide"/>
|
||||
<field name="company_id" groups="base.group_multi_company" optional="hide"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_plan_activity_type_view_tree" model="ir.ui.view">
|
||||
<field name="name">hr.plan.activity.type.view.tree</field>
|
||||
<field name="model">hr.plan.activity.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Activities">
|
||||
<field name="activity_type_id"/>
|
||||
<field name="summary"/>
|
||||
<field name="responsible"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_plan_activity_type_view_form" model="ir.ui.view">
|
||||
<field name="name">hr.plan.activity.type.view.form</field>
|
||||
<field name="model">hr.plan.activity.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Activity">
|
||||
<field name="company_id" invisible="1"/>
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="activity_type_id"/>
|
||||
<field name="summary"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="responsible"/>
|
||||
<field name="responsible_id" attrs="{'invisible': [('responsible', '!=', 'other')]}"/>
|
||||
<field name="note"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_plan_action" model="ir.actions.act_window">
|
||||
<field name="name">Plans</field>
|
||||
<field name="res_model">hr.plan</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="search_view_id" ref="hr_plan_view_search"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Add a new plan
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_plan_activity_type_action" model="ir.actions.act_window">
|
||||
<field name="name">Plan Activities</field>
|
||||
<field name="res_model">hr.plan.activity.type</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Add a new plan activity
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
11
odoo-bringout-oca-ocb-hr/hr/views/hr_templates.xml
Normal file
11
odoo-bringout-oca-ocb-hr/hr/views/hr_templates.xml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<template id="hr_employee_plan_activity_summary">
|
||||
<div class="d-flex flex-column flex-grow">
|
||||
<t t-foreach="activity_ids" t-as="activity">
|
||||
<span><i t-attf-class="fa #{activity.icon}"/> <t t-esc="activity.summary"/> (<t t-if="activity.user_id" t-esc="activity.user_id.name"/>)</span>
|
||||
<span><i class="fa fa-clock-o"/> <span t-field="activity.date_deadline"/></span>
|
||||
</t>
|
||||
</div>
|
||||
</template>
|
||||
</odoo>
|
||||
119
odoo-bringout-oca-ocb-hr/hr/views/hr_version_views.xml
Normal file
119
odoo-bringout-oca-ocb-hr/hr/views/hr_version_views.xml
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<record id="hr_version_list_view" model="ir.ui.view">
|
||||
<field name="name">hr.version.list</field>
|
||||
<field name="model">hr.version</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Records" multi_edit="1" default_order='date_version DESC' create="0" action="action_open_version" type="object" class="o_hr_version_list_view">
|
||||
<field name="date_version" readonly="False" string="Effective Date"/>
|
||||
<field name="contract_date_start" string="Start"/>
|
||||
<field name="contract_date_end" string="End"/>
|
||||
<field name="employee_id" optional="show"/>
|
||||
<field name="additional_note" string="Note" optional="show"/>
|
||||
<field name="currency_id" column_invisible="1"/>
|
||||
<field name="wage" widget="monetary" optional="hide"/>
|
||||
<field name="contract_type_id" optional="show"/>
|
||||
<field name="structure_type_id" optional="hide"/>
|
||||
<field name="job_id" optional="show"/>
|
||||
<field name="department_id" optional="show"/>
|
||||
<field name="hr_responsible_id" optional="hide"/>
|
||||
<field name="resource_calendar_id" optional="show"/>
|
||||
<field name="company_id" groups="base.group_multi_company" readonly="1" optional="hide"/>
|
||||
<field name="create_uid" optional="hide"/>
|
||||
<field name="create_date" optional="hide"/>
|
||||
<field name="last_modified_uid" optional="hide" readonly="1"/>
|
||||
<field name="last_modified_date" optional="hide" readonly="1"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_version_graph_view" model="ir.ui.view">
|
||||
<field name="name">hr.version.graph</field>
|
||||
<field name="model">hr.version</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Employee Records" type="bar" sample="1">
|
||||
<field name="date_version" type="row"/>
|
||||
<field name="wage" widget="monetary" type="measure"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_version_pivot_view" model="ir.ui.view">
|
||||
<field name="name">hr.version.pivot</field>
|
||||
<field name="model">hr.version</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Employee Records" sample="1">
|
||||
<field name="date_version" type="row"/>
|
||||
<field name="wage" widget="monetary"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_version_search_view" model="ir.ui.view">
|
||||
<field name="name">hr.version.search</field>
|
||||
<field name="model">hr.version</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="employee_id"/>
|
||||
<field name="job_id"/>
|
||||
<field name="department_id" operator="child_of"/>
|
||||
<field name="resource_calendar_id"/>
|
||||
|
||||
<filter string="Running Contract" name="running_contract"
|
||||
domain="[
|
||||
'&',
|
||||
'|',
|
||||
('contract_date_start', '=', False),
|
||||
('contract_date_start', '<', 'today'),
|
||||
'|',
|
||||
('contract_date_end', '=', False),
|
||||
('contract_date_end', '>=', 'today')
|
||||
]"/>
|
||||
<filter string="Expired Contracts" name="expired_contracts"
|
||||
domain="[
|
||||
('contract_date_end', '!=', False),
|
||||
('contract_date_end', '<', 'today')
|
||||
]"/>
|
||||
<filter string="Future Contracts" name="future_contracts"
|
||||
domain="[
|
||||
('contract_date_start', '!=', False),
|
||||
('contract_date_start', '>', 'today'),
|
||||
]"/>
|
||||
<separator />
|
||||
<filter string="Contract Start Date" name="contract_date_start" date="contract_date_start" groups="hr.group_hr_manager"/>
|
||||
<filter string="Contract End Date" name="contract_date_end" date="contract_date_end" groups="hr.group_hr_manager"/>
|
||||
<separator />
|
||||
<filter string="Archived" name="archived" domain="[('active', '=', False)]"/>
|
||||
<filter invisible="1" string="Late Activities" name="activities_overdue"
|
||||
domain="[('my_activity_date_deadline', '<', context_today().strftime('%Y-%m-%d'))]"
|
||||
help="Show all records whose next activity date is past"/>
|
||||
<filter invisible="1" string="Today Activities" name="activities_today"
|
||||
domain="[('my_activity_date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
|
||||
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
|
||||
domain="[('my_activity_date_deadline', '>', context_today().strftime('%Y-%m-%d'))]"/>
|
||||
|
||||
<filter string="Employee" name="group_by_employee" domain="[]" context="{'group_by': 'employee_id'}"/>
|
||||
<separator />
|
||||
<filter string="Job Position" name="group_by_job" domain="[]" context="{'group_by': 'job_id'}"/>
|
||||
<filter string="Department" name="group_by_department" domain="[]" context="{'group_by': 'department_id'}"/>
|
||||
<separator />
|
||||
<filter string="Working Schedule" name="group_by_resource_calendar_id" domain="[]" context="{'group_by': 'resource_calendar_id'}"/>
|
||||
<filter string="Salary Structure Type" name="group_by_structure_type_id" domain="[]" context="{'group_by': 'structure_type_id'}"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_version" model="ir.actions.act_window">
|
||||
<field name="name">Employee Records</field>
|
||||
<field name="path">versions</field>
|
||||
<field name="res_model">hr.version</field>
|
||||
<field name="view_mode">list,graph,pivot</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'list', 'view_id': ref('hr.hr_version_list_view')}),
|
||||
(0, 0, {'view_mode': 'kanban'}),
|
||||
(0, 0, {'view_mode': 'pivot'})
|
||||
]"/>
|
||||
<field name="domain">[('employee_id', '!=', False)]</field>
|
||||
<field name="search_view_id" ref="hr.hr_version_search_view"/>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -1,12 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_root"
|
||||
name="Employees"
|
||||
groups="group_hr_manager,group_hr_user,base.group_user"
|
||||
web_icon="hr,static/description/icon.svg"
|
||||
web_icon="hr,static/description/icon.png"
|
||||
sequence="185"/>
|
||||
|
||||
<menuitem
|
||||
|
|
@ -18,17 +17,11 @@
|
|||
<menuitem
|
||||
id="menu_hr_employee_payroll"
|
||||
name="Employees"
|
||||
action="open_view_employee_list_my"
|
||||
parent="menu_hr_root"
|
||||
groups="group_hr_user"
|
||||
sequence="3"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_employee_user"
|
||||
name="Employees"
|
||||
action="open_view_employee_list_my"
|
||||
parent="menu_hr_employee_payroll"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_employee"
|
||||
name="Directory"
|
||||
|
|
@ -40,55 +33,53 @@
|
|||
id="hr_menu_hr_reports"
|
||||
name="Reporting"
|
||||
parent="menu_hr_root"
|
||||
groups="group_hr_user"
|
||||
sequence="95"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_reporting_timesheet"
|
||||
name="Reporting"
|
||||
parent="menu_hr_root"
|
||||
groups="group_hr_manager,group_hr_user"
|
||||
sequence="99"/>
|
||||
id="menu_hr_department_kanban"
|
||||
action="hr_department_kanban_action"
|
||||
parent="menu_hr_root"
|
||||
groups="base.group_user"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_human_resources_configuration"
|
||||
name="Configuration"
|
||||
parent="menu_hr_root"
|
||||
groups="hr.group_hr_user"
|
||||
groups="group_hr_manager"
|
||||
sequence="100"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_config_employee"
|
||||
name="Employee"
|
||||
parent="menu_human_resources_configuration"
|
||||
groups="group_hr_user"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_department_tree"
|
||||
action="hr_department_tree_action"
|
||||
id="menu_config_plan_plan"
|
||||
name="Onboarding / Offboarding"
|
||||
action="mail_activity_plan_action"
|
||||
parent="menu_config_employee"
|
||||
sequence="4"
|
||||
groups="group_hr_user"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_department_kanban"
|
||||
action="hr_department_kanban_action"
|
||||
parent="menu_hr_root"
|
||||
groups="group_hr_user"/>
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_work_location_tree"
|
||||
action="hr_work_location_action"
|
||||
parent="menu_config_employee"
|
||||
sequence="5"
|
||||
groups="group_hr_user"/>
|
||||
sequence="5"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_resource_calendar_view"
|
||||
action="resource.action_resource_calendar_form"
|
||||
parent="menu_config_employee"
|
||||
name="Working Schedules"
|
||||
sequence="6"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_departure_reason_tree"
|
||||
action="hr_departure_reason_action"
|
||||
parent="menu_config_employee"
|
||||
sequence="5"
|
||||
groups="group_hr_user"/>
|
||||
sequence="7"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_view_employee_category_form"
|
||||
|
|
@ -102,7 +93,6 @@
|
|||
id="menu_config_recruitment"
|
||||
name="Recruitment"
|
||||
parent="menu_human_resources_configuration"
|
||||
groups="group_hr_user"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem
|
||||
|
|
@ -111,27 +101,21 @@
|
|||
parent="menu_config_recruitment"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_employee_contract_templates"
|
||||
name="Contract Templates"
|
||||
action="action_hr_contract_templates"
|
||||
parent="menu_config_recruitment"
|
||||
sequence="2"
|
||||
groups="hr.group_hr_manager"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_view_hr_contract_type"
|
||||
action="hr_contract_type_action"
|
||||
parent="menu_config_recruitment"
|
||||
sequence="2"
|
||||
groups="group_hr_user"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_config_plan"
|
||||
name="Activity Planning"
|
||||
parent="menu_human_resources_configuration"
|
||||
groups="group_hr_user"
|
||||
sequence="100"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_config_plan_plan"
|
||||
name="On/Offboarding Plans"
|
||||
action="hr_plan_action"
|
||||
parent="menu_config_plan"
|
||||
sequence="3"
|
||||
groups="group_hr_user"
|
||||
sequence="100"/>
|
||||
active="0"/>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -2,46 +2,45 @@
|
|||
<odoo>
|
||||
<data>
|
||||
<record id="hr_work_location_tree_view" model="ir.ui.view">
|
||||
<field name="name">hr.work.location.view.tree</field>
|
||||
<field name="name">hr.work.location.view.list</field>
|
||||
<field name="model">hr.work.location</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Work Location">
|
||||
<field name="active" invisible="1" />
|
||||
<list string="Work Location">
|
||||
<field name="active" column_invisible="True" />
|
||||
<field name="name" />
|
||||
<field name="address_id" />
|
||||
<field class="o_homework_icon_types d-flex flex-wrap" name="location_type"
|
||||
widget="hr_homeworking_radio_image" options="{'horizontal': true}"/>
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field name="company_id" invisible="1"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_work_location_form_view" model="ir.ui.view">
|
||||
<field name="name">hr.work.location.view.form</field>
|
||||
<field name="model">hr.work.location</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Work Location">
|
||||
<field name="company_id" invisible="1"/>
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="active" invisible="1" />
|
||||
<field name="name" />
|
||||
<field name="address_id" />
|
||||
<field name="location_number"/>
|
||||
<field class="o_homework_icon_types d-flex flex-wrap" name="location_type"
|
||||
widget="hr_homeworking_radio_image" options="{'horizontal': true}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field name="company_id" groups="!base.group_multi_company" invisible="1" />
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_work_location_action" model="ir.actions.act_window">
|
||||
<field name="name">Work Locations</field>
|
||||
<field name="res_model">hr.work.location</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new work location
|
||||
|
|
|
|||
107
odoo-bringout-oca-ocb-hr/hr/views/mail_activity_plan_views.xml
Normal file
107
odoo-bringout-oca-ocb-hr/hr/views/mail_activity_plan_views.xml
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="mail_activity_plan_template_view_form" model="ir.ui.view">
|
||||
<field name="name">mail.activity.plan.template.view.form.inherit.hr</field>
|
||||
<field name="model">mail.activity.plan.template</field>
|
||||
<field name="inherit_id" ref="mail.mail_activity_plan_template_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='responsible_type']" position="replace">
|
||||
<field name="responsible_type"
|
||||
invisible="res_model != 'hr.employee'"/>
|
||||
<field name="responsible_type" widget="filterable_selection"
|
||||
options="{'whitelisted_values': ['on_demand', 'other']}"
|
||||
invisible="res_model == 'hr.employee'"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mail_activity_plan_view_form" model="ir.ui.view">
|
||||
<field name="name">mail.activity.plan.view.form.inherit.hr</field>
|
||||
<field name="model">mail.activity.plan</field>
|
||||
<field name="inherit_id" ref="mail.mail_activity_plan_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='template_ids']/list/field[@name='responsible_type']" position="replace">
|
||||
<!-- We can hide selection options specific to employee because employee plan templates are never
|
||||
edited in the list view, so that there are not present for other model that are edited in the
|
||||
list view. -->
|
||||
<field name="responsible_type" widget="filterable_selection"
|
||||
options="{'whitelisted_values': ['on_demand', 'other']}"/>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='group_plan_fields']/group[@name='company_id']" position="before">
|
||||
<field name="department_assignable" invisible="1"/>
|
||||
<group invisible="not department_assignable">
|
||||
<field name="department_id" placeholder="Available for all Departments"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mail_activity_plan_view_form_hr_employee" model="ir.ui.view">
|
||||
<field name="name">mail.activity.plan.view.form.hr.employee</field>
|
||||
<field name="mode">primary</field>
|
||||
<field name="model">mail.activity.plan</field>
|
||||
<field name="priority">32</field>
|
||||
<field name="inherit_id" ref="mail.mail_activity_plan_view_form_fixed_model"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//list" position="attributes">
|
||||
<attribute name="editable"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mail_activity_plan_view_tree" model="ir.ui.view">
|
||||
<field name="name">mail.activity.plan.view.list.inherit.hr</field>
|
||||
<field name="model">mail.activity.plan</field>
|
||||
<field name="inherit_id" ref="mail.mail_activity_plan_view_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='steps_count']" position="before">
|
||||
<field name="department_id" optional="show"
|
||||
column_invisible="context.get('default_res_model') != 'hr.employee'"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mail_activity_plan_action" model="ir.actions.act_window">
|
||||
<field name="name">Employee 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.employee'}</field>
|
||||
<field name="domain">[('res_model', '=', 'hr.employee'), '|', ('company_id', 'in', allowed_company_ids), ('company_id', '=', False)]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create an Activity Plan
|
||||
</p>
|
||||
<p>
|
||||
Activity plans are used to assign a list of activities in just a few clicks
|
||||
(e.g. "Onboarding", "Offboarding", ...)
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mail_activity_plan_action_employee_view_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence">1</field>
|
||||
<field name="view_mode">list</field>
|
||||
<field name="view_id" ref="mail.mail_activity_plan_view_tree"/>
|
||||
<field name="act_window_id" ref="hr.mail_activity_plan_action"/>
|
||||
</record>
|
||||
|
||||
<!-- Force the hr view which do the activity template edition in a popup. -->
|
||||
<record id="mail_activity_plan_action_employee_view_form" model="ir.actions.act_window.view">
|
||||
<field name="sequence">2</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="hr.mail_activity_plan_view_form_hr_employee"/>
|
||||
<field name="act_window_id" ref="hr.mail_activity_plan_action"/>
|
||||
</record>
|
||||
|
||||
<!-- This id is referenced in chatter message as a link to launch the plan -->
|
||||
<record id="plan_wizard_action" model="ir.actions.act_window">
|
||||
<field name="name">Launch Plan</field>
|
||||
<field name="res_model">mail.activity.schedule</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="context">{'plan_mode': True}</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -6,113 +6,82 @@
|
|||
<field name="priority" eval="70"/>
|
||||
<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="Employees" string="Employees" data-key="hr" groups="hr.group_hr_manager">
|
||||
<h2>Employees</h2>
|
||||
<div class="row mt16 o_settings_container" name="employees_setting_container">
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="presence_control_setting" title="Presence of employees">
|
||||
<div class="o_setting_right_pane">
|
||||
<span class="o_form_label">Presence Control</span>
|
||||
<div class="content-group" name="hr_presence_options">
|
||||
<div class="d-flex">
|
||||
<field name="module_hr_attendance" class="ml16"/>
|
||||
<label for="module_hr_attendance" class="o_light_label"/>
|
||||
</div>
|
||||
<div class="d-flex">
|
||||
<field name="hr_presence_control_login" class="ml16"/>
|
||||
<label for="hr_presence_control_login" class="o_light_label"/>
|
||||
</div>
|
||||
<xpath expr="//form" position="inside">
|
||||
<app data-string="Employees" string="Employees" name="hr" groups="hr.group_hr_manager">
|
||||
<block title="Employees" name="employees_setting_container">
|
||||
<setting id="presence_control_setting" title="Presence of employees" string="Presence Display">
|
||||
<div class="content-group" name="hr_presence_options">
|
||||
<div class="d-flex">
|
||||
<field name="module_hr_attendance" class="ml16"/>
|
||||
<label for="module_hr_attendance" class="o_light_label"/>
|
||||
</div>
|
||||
<div class="d-flex">
|
||||
<field name="hr_presence_control_login" class="ml16"/>
|
||||
<label for="hr_presence_control_login" class="o_light_label"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box"
|
||||
id="presence_reporting_setting"
|
||||
title="Advanced presence of employees">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_hr_presence"/>
|
||||
</setting>
|
||||
<setting id="presence_reporting_setting" help="Presence reporting screen, email and IP address control." title="Advanced presence of employees">
|
||||
<field name="module_hr_presence"/>
|
||||
<div class="d-flex mt-1" invisible="not module_hr_presence">
|
||||
<field name="hr_presence_control_email" class="ml16"/>
|
||||
<label for="hr_presence_control_email" class="o_light_label"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_hr_presence"/>
|
||||
<div class="text-muted" name="hr_presence_options_advanced">
|
||||
Presence reporting screen, email and IP address control.
|
||||
</div>
|
||||
<div class="d-flex mt-1" attrs="{'invisible': [('module_hr_presence', '=', False)]}">
|
||||
<field name="hr_presence_control_email" class="ml16"/>
|
||||
<label for="hr_presence_control_email" class="o_light_label"/>
|
||||
</div>
|
||||
<div class="d-flex ml32" attrs="{'invisible': ['|', ('module_hr_presence', '=', False), ('hr_presence_control_email', '=', False)]}">
|
||||
<span class="flex-shrink-0 ml8 me-2">Minimum number of emails to send</span>
|
||||
<field name="hr_presence_control_email_amount" class="ms-2 oe_inline"/>
|
||||
</div>
|
||||
<div class="d-flex" attrs="{'invisible': [('module_hr_presence', '=', False)]}">
|
||||
<field name="hr_presence_control_ip" class="ml16"/>
|
||||
<label for="hr_presence_control_ip" class="o_light_label"/>
|
||||
</div>
|
||||
<div class="d-flex ml32" attrs="{'invisible': ['|', ('module_hr_presence', '=', False), ('hr_presence_control_ip', '=', False)]}">
|
||||
<span class="flex-shrink-0 ml8 me-2">IP Addresses (comma-separated)</span>
|
||||
<field name="hr_presence_control_ip_list" class="ms-2 oe_inline"/>
|
||||
</div>
|
||||
<div class="d-flex" invisible="not module_hr_presence">
|
||||
<field name="hr_presence_control_ip" class="ml16"/>
|
||||
<label for="hr_presence_control_ip" class="o_light_label"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="enrich_employee_setting">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_hr_skills"/>
|
||||
</setting>
|
||||
<setting id="presence_reporting_setting"
|
||||
help="Define the minimum number of sent emails to be displayed as Present."
|
||||
title="Advanced presence of employees" string="Presence Condition"
|
||||
invisible="not module_hr_presence or not hr_presence_control_email">
|
||||
<div class="d-flex">
|
||||
<span class="flex-shrink-0 ml8 me-2">Sent Emails</span>
|
||||
<field name="hr_presence_control_email_amount" class="ms-2 oe_inline"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_hr_skills"/>
|
||||
<div class="text-muted">
|
||||
Enrich employee profiles with skills and resumes
|
||||
</div>
|
||||
</setting>
|
||||
<setting id="presence_reporting_setting"
|
||||
help="Define the allowed IP to be displayed as Present. In case of multiple addresses, separate them by a coma."
|
||||
title="Advanced presence of employees" string="Presence Condition"
|
||||
invisible="not module_hr_presence or not hr_presence_control_ip">
|
||||
<div class="d-flex">
|
||||
<span class="flex-shrink-0 ml8 me-2">IP Addresses</span>
|
||||
<field name="hr_presence_control_ip_list" class="ms-2 oe_inline"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>Work Organization</h2>
|
||||
<div class="row mt16 o_settings_container" name="work_organization_setting_container">
|
||||
<div class="col-12 col-lg-6 o_setting_box" id="default_company_schedule_setting">
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="resource_calendar_id"/>
|
||||
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." role="img" aria-label="Values set here are company-specific." groups="base.group_multi_company"/>
|
||||
<div class="row">
|
||||
<div class="text-muted col-lg-8">
|
||||
Set default company schedule to manage your employees working time
|
||||
</div>
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div class="mt16">
|
||||
<field name="resource_calendar_id" required="1"
|
||||
class="o_light_label"
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
|
||||
context="{'default_company_id': company_id}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>Employee Update Rights</h2>
|
||||
<div class="row mt16 o_settings_container" name="employee_rights_setting_container">
|
||||
<div class="col-12 col-lg-6 o_setting_box" title="Allow employees to update their own data.">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="hr_employee_self_edit"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="hr_employee_self_edit"/>
|
||||
<div class="text-muted">
|
||||
Allow employees to update their own data
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</setting>
|
||||
<setting invisible="not module_hr_presence or not (hr_presence_control_ip or hr_presence_control_email) or (hr_presence_control_ip and hr_presence_control_email)"
|
||||
help="This setting block is utilized to manage the frontend design."/>
|
||||
<setting help="Enrich employee profiles with skills and resumes" id="enrich_employee_setting">
|
||||
<field name="module_hr_skills"/>
|
||||
</setting>
|
||||
</block>
|
||||
<block title="Work Organization" name="work_organization_setting_container">
|
||||
<setting company_dependent="1" help="Set default company schedule to manage your employees working time" id="default_company_schedule_setting">
|
||||
<field name="resource_calendar_id" required="1" class="o_light_label"
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
|
||||
context="{'default_company_id': company_id}"/>
|
||||
</setting>
|
||||
</block>
|
||||
<block title="Contract" id="contract_work_permit_expiration_notify">
|
||||
<setting string="Contract Expiration Notice Period" id="contract_notice_period"
|
||||
title="Number of days prior to the contract end date that a contract expiration warning is triggered.">
|
||||
<field name="contract_expiration_notice_period" class="w-25"/><span>Days</span>
|
||||
</setting>
|
||||
<setting string="Work Permit Expiration Notice Period" id="work_permit_notice_period"
|
||||
title="Number of days prior to the work permit expiration date that a warning is triggered.">
|
||||
<field name="work_permit_expiration_notice_period" class="w-25"/><span>Days</span>
|
||||
</setting>
|
||||
</block>
|
||||
</app>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_config_settings_action" 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', 'bin_size': False}</field>
|
||||
</record>
|
||||
|
||||
|
|
|
|||
50
odoo-bringout-oca-ocb-hr/hr/views/res_partner_bank_views.xml
Normal file
50
odoo-bringout-oca-ocb-hr/hr/views/res_partner_bank_views.xml
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="view_partner_bank_form_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">res.partner.bank.form.inherit.hr</field>
|
||||
<field name="model">res.partner.bank</field>
|
||||
<field name="inherit_id" ref="base.view_partner_bank_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='allow_out_payment']" position="after">
|
||||
<field name="employee_has_multiple_bank_accounts" invisible="1"/>
|
||||
<label string="Salary Allocation" for="employee_salary_amount"
|
||||
invisible="not employee_has_multiple_bank_accounts" groups="hr.group_hr_user"/>
|
||||
<div class="d-flex" invisible="not employee_has_multiple_bank_accounts" groups="hr.group_hr_user">
|
||||
<span><field name="employee_salary_amount" style="max-width: 200px;"/></span>
|
||||
<span invisible="not employee_salary_amount_is_percentage">%</span>
|
||||
<field name="currency_id" invisible="employee_salary_amount_is_percentage" readonly="True"/>
|
||||
</div>
|
||||
<field name="employee_id" invisible="not employee_id" groups="hr.group_hr_user" widget="many2many_avatar_employee"/>
|
||||
</xpath>
|
||||
<xpath expr="//page" position="before">
|
||||
<page string="Bank Information" invisible="not bank_id">
|
||||
<group>
|
||||
<field name="bank_name" string="Bank Name"/>
|
||||
<field name="bank_bic"/>
|
||||
</group>
|
||||
<group>
|
||||
<group name="address_details">
|
||||
<label for="bank_street" string="Bank Address"/>
|
||||
<div class="o_address_format">
|
||||
<field name="bank_street" placeholder="Street..." class="o_address_street"/>
|
||||
<field name="bank_street2" placeholder="Street 2..." class="o_address_street"/>
|
||||
<field name="bank_city" placeholder="City" class="o_address_city"/>
|
||||
<field name="bank_state" placeholder="State" class="o_address_state"
|
||||
options='{"no_open": True}'
|
||||
/>
|
||||
<field name="bank_zip" placeholder="ZIP" class="o_address_zip"/>
|
||||
<field name="bank_country" placeholder="Country" class="o_address_country"
|
||||
options='{"no_open": True, "no_create": True}'
|
||||
/>
|
||||
</div>
|
||||
</group>
|
||||
<group name="communication_details">
|
||||
<field name="bank_phone" class="o_force_ltr"/>
|
||||
<field name="bank_email" widget="email"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -6,13 +6,25 @@
|
|||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<div name="button_box" position="inside">
|
||||
<button name="action_open_employees" type="object" class="oe_stat_button" icon="fa-id-card-o" groups="hr.group_hr_user" attrs="{'invisible': [('employees_count', '=', 0)]}">
|
||||
<button name="action_open_employees" type="object" class="oe_stat_button" icon="fa-id-card-o" groups="hr.group_hr_user" invisible="employees_count == 0">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_value"><field name="employees_count"/></span>
|
||||
<span class="o_stat_text">Employee(s)</span>
|
||||
<span class="o_stat_text">Employee</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_view_search" model="ir.ui.view">
|
||||
<field name="name">res.partner.search.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_res_partner_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//filter[@name='inactive']" position="before">
|
||||
<filter name="employees" string="Employees" domain="[('employee', '=', True)]"/>
|
||||
<separator/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -3,23 +3,18 @@
|
|||
<data>
|
||||
|
||||
<!-- Inherit the preference view to remove title, image and footer -->
|
||||
<!-- This view is meant to be included in the employee profile view -->
|
||||
<!-- This view is meant to be included in the employee preferences view -->
|
||||
<!-- It ensures that if the 'normal' Preferences view is changed, it's
|
||||
also reflected in the employee's profile -->
|
||||
also reflected in the employee's preferences -->
|
||||
<record id="res_users_view_form_simple_modif" model="ir.ui.view">
|
||||
<field name="name">res.users.preferences.form.simplified.inherit</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="base.view_users_form_simple_modif"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<footer position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</footer>
|
||||
<h1 position="replace"/>
|
||||
<xpath expr="//field[@name='image_1920']" position="replace"/>
|
||||
<xpath expr="//field[@name='company_id']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
<form position="attributes">
|
||||
<attribute name="string">Preferences</attribute>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -35,12 +30,12 @@
|
|||
<field name="is_system" invisible="1"/>
|
||||
</field>
|
||||
<xpath expr="//button[@name='%(base.action_view_base_language_install)d']" position="attributes">
|
||||
<attribute name="attrs">{'invisible': [('is_system', '=', False)]}</attribute>
|
||||
<attribute name="invisible">not is_system</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_users_view_form_profile" model="ir.ui.view">
|
||||
<record id="res_users_view_form_preferences" model="ir.ui.view">
|
||||
<field name="name">res.users.preferences.form.inherit</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="res_users_view_form_simple_modif"/>
|
||||
|
|
@ -48,154 +43,64 @@
|
|||
<form position="attributes">
|
||||
<attribute name="create">false</attribute>
|
||||
<attribute name="delete">false</attribute>
|
||||
<attribute name="js_class">hr_employee_profile_form</attribute>
|
||||
<attribute name="js_class">hr_user_preferences_form</attribute>
|
||||
</form>
|
||||
<notebook position="replace">
|
||||
<field name="hr_presence_state" invisible="1"/>
|
||||
<header>
|
||||
</header>
|
||||
<sheet>$0</sheet>
|
||||
</notebook>
|
||||
<notebook position="before">
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button
|
||||
id="hr_presence_button"
|
||||
class="oe_stat_button"
|
||||
disabled="1"
|
||||
invisible="context.get('from_my_profile', False)"
|
||||
attrs="{'invisible': [('hr_presence_state', '=', 'absent')]}">
|
||||
<div role="img" class="fa fa-fw fa-circle text-success o_button_icon" attrs="{'invisible': [('hr_presence_state', '!=', 'present')]}" aria-label="Available" title="Available"/>
|
||||
<div role="img" class="fa fa-fw fa-circle text-warning o_button_icon" attrs="{'invisible': [('hr_presence_state', '!=', 'to_define')]}" aria-label="Away" title="Away"/>
|
||||
<div role="img" class="fa fa-fw fa-circle text-danger o_button_icon" attrs="{'invisible': [('hr_presence_state', '!=', 'absent')]}" aria-label="Not available" title="Not available"/>
|
||||
|
||||
<div class="o_stat_info" attrs="{'invisible': [('hr_presence_state', '=', 'present')]}">
|
||||
<span class="o_stat_text">
|
||||
Not Connected
|
||||
</span>
|
||||
</div>
|
||||
<div class="o_stat_info" attrs="{'invisible': [('hr_presence_state', '!=', 'present')]}">
|
||||
<span class="o_stat_value" attrs="{'invisible': [('last_activity_time', '=', False)]}">
|
||||
<field name="last_activity_time"/>
|
||||
</span>
|
||||
<span class="o_stat_value" attrs="{'invisible': [('last_activity_time', '!=', False)]}">
|
||||
<field name="last_activity"/>
|
||||
</span>
|
||||
<span class="o_stat_text">Connected Since</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<field name="avatar_128" invisible="1"/>
|
||||
<field name="image_1920" widget='image' class="oe_avatar" options='{"zoom": true, "preview_image":"avatar_128"}'/>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name" placeholder="Employee's Name" required="True" readonly="context.get('from_my_profile', False)"/>
|
||||
</h1>
|
||||
</div>
|
||||
<div class="row">
|
||||
<h2 class="col-lg-6 ps-lg-0">
|
||||
<field name="job_title" class="w-100" placeholder="Job Position" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
</h2>
|
||||
</div>
|
||||
<group>
|
||||
<xpath expr="//field[@name='name']" position="attributes">
|
||||
<attribute name="placeholder">Employee's Name</attribute>
|
||||
<attribute name="required">1</attribute>
|
||||
</xpath>
|
||||
<!-- Must be replaced by work_email when the user has an employee_id. -->
|
||||
<xpath expr="//h5[@name='h5_email']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
<!-- Must be replaced by work_phone when the user has an employee_id. -->
|
||||
<xpath expr="//h5[@name='h5_phone']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[hasclass('oe_title')]" position="inside">
|
||||
<h5 class="d-flex align-items-baseline mb-0">
|
||||
<i class="fa fa-envelope fa-fw me-1 text-primary" title="Work Email"/>
|
||||
<field name="work_email" widget="email" placeholder="Work Email" string="Work Email" class="w-75"/>
|
||||
</h5>
|
||||
<h5 class="d-flex align-items-baseline mb-0">
|
||||
<i class="fa fa-phone fa-fw me-1 text-primary" title="Work Phone"/>
|
||||
<field name="work_phone" widget="phone" placeholder="Work Phone" string="Work Phone" class="w-75"/>
|
||||
</h5>
|
||||
<h5 class="d-flex align-items-baseline mb-0">
|
||||
<i class="fa fa-mobile fa-fw me-1 text-primary" title="Work Mobile"/>
|
||||
<field name="mobile_phone" widget="phone" placeholder="Work Mobile" string="Work Mobile" class="w-75"/>
|
||||
</h5>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='other_preferences']" position="inside">
|
||||
<field name="pin" string="Attendance PIN"/>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='other_calendar_preferences']" position="inside">
|
||||
<field name="work_location_id" string="Main Work Location" options="{'no_create': True}"/>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='calendar']" position="after">
|
||||
<page name="private_information" string="Private">
|
||||
<group>
|
||||
<field name="can_edit" invisible="1"/>
|
||||
<field name="mobile_phone" widget="phone" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="work_phone" widget="phone" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="work_email" widget="email" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="work_location_id" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="employee_parent_id" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="coach_id" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
</group>
|
||||
</group>
|
||||
</notebook>
|
||||
<notebook position="inside">
|
||||
<page name="public" string="Work Information">
|
||||
<div id="o_work_employee_container" class="d-lg-flex"> <!-- These two div are used to position org_chart -->
|
||||
<div id="o_work_employee_main" class="flex-grow-1">
|
||||
<group string="Location">
|
||||
<field name="department_id" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="address_id"
|
||||
context="{'show_address': 1}"
|
||||
options='{"always_reload": True, "highlight_first_line": True}'
|
||||
attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
</group>
|
||||
<group name="managers" string="Approvers" class="hide-group-if-empty">
|
||||
<!-- overridden in other modules -->
|
||||
</group>
|
||||
</div>
|
||||
</div>
|
||||
</page>
|
||||
<page name="personal_information" string="Private Information">
|
||||
<group>
|
||||
<group string="Contact Information">
|
||||
<group string="Private Information">
|
||||
<field name="employee_ids" invisible="1"/>
|
||||
<field name="address_home_id" invisible="1"/>
|
||||
<label for="private_street" string="Private Address"/>
|
||||
<div class="o_address_format">
|
||||
<field name="private_street" placeholder="Street..." class="o_address_street"/>
|
||||
<field name="private_street2" placeholder="Street 2..." class="o_address_street"/>
|
||||
<field name="private_city" placeholder="City" class="o_address_city"/>
|
||||
<field name="private_state_id" class="o_address_state" placeholder="State" options="{'no_open': True, 'no_quick_create': True}" context="{'default_country_id': private_country_id}"/>
|
||||
<field name="private_state_id" class="o_address_state" placeholder="State" options="{'no_open': True, 'no_create': True}" context="{'default_country_id': private_country_id}"/>
|
||||
<field name="private_zip" placeholder="ZIP" class="o_address_zip"/>
|
||||
<field name="private_country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/>
|
||||
</div>
|
||||
|
||||
<field name="private_email" string="Email" attrs="{'readonly': [('can_edit', '=', False)], 'invisible': [('address_home_id', '=', False)]}"/>
|
||||
<field name="employee_phone" string="Phone" class="o_force_ltr" attrs="{'readonly': [('can_edit', '=', False)], 'invisible': [('address_home_id', '=', False)]}"/>
|
||||
<field name="private_lang" string="Language" attrs="{'readonly': [('can_edit', '=', False)], 'invisible': [('address_home_id', '=', False)]}"/>
|
||||
<field name="employee_bank_account_id" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="km_home_work" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="private_email" string="Private Email"/>
|
||||
<field name="private_phone" string="Private Phone" class="o_force_ltr"/>
|
||||
</group>
|
||||
<group string="Citizenship">
|
||||
<field name="employee_country_id" options='{"no_open": True, "no_create": True}' attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="identification_id" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="passport_id" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="gender" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="birthday" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="place_of_birth" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="country_of_birth" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
</group>
|
||||
<group string="Marital Status">
|
||||
<field name="marital" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="spouse_complete_name" attrs="{'invisible': [('marital', 'not in', ['married', 'cohabitant'])], 'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="spouse_birthdate" attrs="{'invisible': [('marital', 'not in', ['married', 'cohabitant'])], 'readonly': [('can_edit', '=', False)]}"/>
|
||||
</group>
|
||||
<group string="Education">
|
||||
<field name="certificate" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="study_field" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="study_school" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
</group>
|
||||
<group string="Dependant">
|
||||
<field name="children" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
</group>
|
||||
<group string="Emergency">
|
||||
<field name="emergency_contact" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="emergency_phone" widget="phone" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
</group>
|
||||
<group string="Work Permit" name="has_work_permit">
|
||||
<field name="visa_no" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="permit_no" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="visa_expire" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<group string="Emergency Contact">
|
||||
<field name="emergency_contact" string="Contact Name" placeholder="e.g. John Doe"/>
|
||||
<field name="emergency_phone" string="Contact Phone" widget="phone"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page name="hr_settings" string="HR Settings">
|
||||
<group>
|
||||
<group string='Status' name="active_group">
|
||||
<field name="employee_type" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
</group>
|
||||
<group string="Attendance" name="identification_group">
|
||||
<field name="pin" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
<field name="barcode" attrs="{'readonly': [('can_edit', '=', False)]}"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -204,9 +109,22 @@
|
|||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="base.view_users_simple_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='mobile']" position="after">
|
||||
<xpath expr="//sheet" position="inside">
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="action_open_employees"
|
||||
class="oe_stat_button"
|
||||
icon="fa-users"
|
||||
invisible="employee_count == 0"
|
||||
context="{'active_test': False}"
|
||||
type="object">
|
||||
<field name="employee_count" widget="statinfo" string="Employee"/>
|
||||
</button>
|
||||
</div>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='access_groups']" position="inside">
|
||||
<field name="create_employee_id" force_save="1" invisible="1"/>
|
||||
<field name="create_employee" force_save="1" string="Create Employee" invisible="not context.get('allow_create_employee', True)" attrs="{'invisible': [('create_employee_id', '>', 0)]}"/>
|
||||
<field name="create_employee" force_save="1" string="Create Employee" invisible="1" groups="hr.group_hr_user"/>
|
||||
<!-- It is required to stay create_employee field defined here to make it true because store value is false -->
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -230,15 +148,8 @@
|
|||
<field name="name">Change my Preferences</field>
|
||||
<field name="res_model">res.users</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="context">{'from_my_profile': True}</field>
|
||||
<field name="view_id" ref="hr.res_users_view_form_profile"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_employee_action_from_user" model="ir.actions.act_window">
|
||||
<field name="name">Employees</field>
|
||||
<field name="res_model">hr.employee</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="domain">[('user_id', '=', active_id)]</field>
|
||||
<field name="target">new</field>
|
||||
<field name="view_id" ref="hr.res_users_view_form_preferences"/>
|
||||
</record>
|
||||
|
||||
<record id="res_users_view_form" model="ir.ui.view">
|
||||
|
|
@ -253,18 +164,74 @@
|
|||
<field name="employee_id" invisible="1"/>
|
||||
<button string="Create employee"
|
||||
type="object" name="action_create_employee"
|
||||
attrs="{'invisible': ['|', '|', ('id', '=', False), ('share', '=', True), ('employee_id', '!=', False)]}"/>
|
||||
invisible="not id or share or employee_id"
|
||||
groups="hr.group_hr_user"/>
|
||||
<!-- share is not correctly recomputed because it depends on fields of reified view => invisible before saving (id=False) -->
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='button_box']" position="inside">
|
||||
<button name="%(hr_employee_action_from_user)d"
|
||||
<button name="action_open_employees"
|
||||
class="oe_stat_button"
|
||||
icon="fa-users"
|
||||
attrs="{'invisible': [('employee_count', '=', 0)]}"
|
||||
invisible="employee_count == 0"
|
||||
context="{'active_test': False}"
|
||||
type="action">
|
||||
<field name="employee_count" widget="statinfo" string="Employee(s)"/>
|
||||
type="object">
|
||||
<field name="employee_count" widget="statinfo" string="Employee"/>
|
||||
</button>
|
||||
<button name="action_related_contact"
|
||||
class="oe_stat_button"
|
||||
icon="fa-address-card-o"
|
||||
type="object"
|
||||
help="Related Contact">
|
||||
<div class="o_stat_info">
|
||||
<span class="o_stat_text">Contact</span>
|
||||
</div>
|
||||
</button>
|
||||
</xpath>
|
||||
<!--increase image size to accommodate the additional login field-->
|
||||
<field name="image_1920" widget="contact_image" position="attributes">
|
||||
<attribute name="invisible">employee_id and work_email != login</attribute>
|
||||
</field>
|
||||
<field name="image_1920" widget="contact_image" position="after">
|
||||
<field name="image_1920" class="o_contact_image_large" invisible="not employee_id or work_email == login"
|
||||
widget="contact_image" options="{'preview_image': 'avatar_128', 'img_class': 'rounded-4'}"/>
|
||||
</field>
|
||||
<!-- Must be replaced by work_email when the user has an employee_id. -->
|
||||
<xpath expr="//h5[@name='h5_email']" position="attributes">
|
||||
<attribute name="invisible">employee_id</attribute>
|
||||
</xpath>
|
||||
<!-- Must be replaced by work_phone when the user has an employee_id. -->
|
||||
<xpath expr="//h5[@name='h5_phone']" position="attributes">
|
||||
<attribute name="invisible">employee_id</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[hasclass('oe_title')]" position="inside">
|
||||
<h5 class="d-flex flex-wrap align-items-baseline mb-0" invisible="not employee_id">
|
||||
<div class="w-100">
|
||||
<i class="fa fa-fw fa-envelope me-1 text-primary" title="Login / Email" invisible="login != work_email"/>
|
||||
<i class="fa fa-fw fa-key me-1 text-primary" title="Login" invisible="login == work_email"/>
|
||||
<field name="login" placeholder="Login" class="w-75"/><br/>
|
||||
</div>
|
||||
|
||||
<i class="fa fa-envelope fa-fw me-1 text-primary" title="Work Email" invisible="login == work_email"/>
|
||||
<field name="email_domain_placeholder" invisible="1" />
|
||||
<field name="work_email" widget="email" string="Work Email" class="w-75" options="{'placeholder_field': 'email_domain_placeholder'}" invisible="login == work_email"/>
|
||||
</h5>
|
||||
<h5 class="d-flex align-items-baseline mb-0" invisible="not employee_id">
|
||||
<i class="fa fa-phone fa-fw me-1 text-primary" title="Work Phone"/>
|
||||
<field name="work_phone" widget="phone" placeholder="Work Phone" string="Work Phone" class="w-75"/>
|
||||
</h5>
|
||||
<h5 class="d-flex align-items-baseline mb-0" invisible="not employee_id">
|
||||
<i class="fa fa-mobile fa-fw me-1 text-primary" title="Work Mobile"/>
|
||||
<field name="mobile_phone" widget="phone" placeholder="Work Mobile" string="Work Mobile" class="w-75"/>
|
||||
</h5>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='other_preferences']" position="inside">
|
||||
<field name="pin" string="Attendance PIN" invisible="not employee_id"/>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='other_calendar_preferences']" position="inside">
|
||||
<field name="work_location_id" string="Main Work Location" invisible="not employee_id or share"/>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='calendar']" position="attributes">
|
||||
<attribute name="groups">hr.group_hr_user</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue