mirror of
https://github.com/bringout/oca-ocb-hr.git
synced 2026-04-27 05:32:01 +02:00
Initial commit: Hr packages
This commit is contained in:
commit
62531cd146
2820 changed files with 1432848 additions and 0 deletions
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="view_attendance_overtime_tree" model="ir.ui.view">
|
||||
<field name="name">hr.attendance.overtime.tree</field>
|
||||
<field name="model">hr.attendance.overtime</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree edit="0" create="0">
|
||||
<field name="date"/>
|
||||
<field name="employee_id"/>
|
||||
<field name="duration" widget="float_time"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_attendance_overtime_search" model="ir.ui.view">
|
||||
<field name="name">hr.attendance.overtime.search</field>
|
||||
<field name="model">hr.attendance.overtime</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="employee_id"/>
|
||||
<field name="duration" filter_domain="[('duration', '>=', self)]"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_attendance_overtime_action" model="ir.actions.act_window">
|
||||
<field name="name">Extra Hours</field>
|
||||
<field name="res_model">hr.attendance.overtime</field>
|
||||
<field name="view_mode">tree</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<!-- views -->
|
||||
|
||||
<record id="view_attendance_tree" model="ir.ui.view">
|
||||
<field name="name">hr.attendance.tree</field>
|
||||
<field name="model">hr.attendance</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Employee attendances" editable="bottom" sample="1">
|
||||
<field name="employee_id"/>
|
||||
<field name="check_in"/>
|
||||
<field name="check_out"/>
|
||||
<field name="worked_hours" string="Work Hours" widget="float_time"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_hr_attendance_kanban" model="ir.ui.view">
|
||||
<field name="name">hr.attendance.kanban</field>
|
||||
<field name="model">hr.attendance</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile" sample="1">
|
||||
<field name="employee_id"/>
|
||||
<field name="check_in"/>
|
||||
<field name="check_out"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_global_click">
|
||||
<div>
|
||||
<img t-att-src="kanban_image('hr.employee', 'avatar_128', record.employee_id.raw_value)" t-att-title="record.employee_id.value" t-att-alt="record.employee_id.value" class="oe_kanban_avatar o_image_24_cover mr4"/>
|
||||
<span class="o_kanban_record_title">
|
||||
<strong><t t-esc="record.employee_id.value"/></strong>
|
||||
</span>
|
||||
</div>
|
||||
<hr class="mt4 mb8"/>
|
||||
<div class="o_kanban_record_subtitle">
|
||||
<i class="fa fa-calendar" aria-label="Period" role="img" title="Period"></i>
|
||||
<t t-esc="record.check_in.value"/>
|
||||
- <t t-esc="record.check_out.value"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_attendance_view_form" model="ir.ui.view">
|
||||
<field name="name">hr.attendance.form</field>
|
||||
<field name="model">hr.attendance</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Employee attendances">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="employee_id"/>
|
||||
<field name="check_in"/>
|
||||
<field name="check_out"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_attendance_view_filter" model="ir.ui.view">
|
||||
<field name="name">hr_attendance_view_filter</field>
|
||||
<field name="model">hr.attendance</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Hr Attendance Search">
|
||||
<field name="employee_id"/>
|
||||
<field name="department_id" operator="child_of"/>
|
||||
<filter string="My Attendances" name="myattendances" domain="[('employee_id.user_id', '=', uid)]" />
|
||||
<separator/>
|
||||
<filter string="Check In" name="check_in_filter" date="check_in" default_period="last_month"/>
|
||||
<filter string="No Check Out" name="nocheckout" domain="[('check_out', '=', False)]" />
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="Employee" name="employee" context="{'group_by': 'employee_id'}"/>
|
||||
<filter string="Check In" name="groupby_name" context="{'group_by': 'check_in'}"/>
|
||||
<filter string="Check Out" name="groupby_check_out" context="{'group_by': 'check_out'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- actions -->
|
||||
|
||||
<record id="hr_attendance_action" model="ir.actions.act_window">
|
||||
<field name="name">Attendances</field>
|
||||
<field name="res_model">hr.attendance</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="context">{"search_default_today":1}</field>
|
||||
<field name="search_view_id" ref="hr_attendance_view_filter" />
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_empty_folder">
|
||||
No attendance records found
|
||||
</p><p>
|
||||
The attendance records of your employees will be displayed here.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_attendance_action_employee" model="ir.actions.act_window">
|
||||
<field name="name">Attendances</field>
|
||||
<field name="res_model">hr.attendance</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{'create': False}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_empty_folder">
|
||||
No attendance records to display
|
||||
</p><p>
|
||||
The attendance records of your employees will be displayed here.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_attendance_action_overview" model="ir.actions.act_window">
|
||||
<field name="name">Attendances</field>
|
||||
<field name="res_model">hr.attendance</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="context">{'create': False}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_empty_folder">
|
||||
No attendance records to display
|
||||
</p><p>
|
||||
Your attendance records will be displayed here.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_attendance_action_kiosk_mode" model="ir.actions.client">
|
||||
<field name="name">Attendances</field>
|
||||
<field name="tag">hr_attendance_kiosk_mode</field>
|
||||
<field name="target">fullscreen</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_attendance_action_my_attendances" model="ir.actions.client">
|
||||
<field name="name">Attendance</field>
|
||||
<field name="tag">hr_attendance_my_attendances</field>
|
||||
<field name="target">main</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_attendance_action_greeting_message" model="ir.actions.client">
|
||||
<field name="name">Message</field>
|
||||
<field name="tag">hr_attendance_greeting_message</field>
|
||||
</record>
|
||||
|
||||
<!-- Menus -->
|
||||
|
||||
<menuitem id="menu_hr_attendance_root" name="Attendances" sequence="205" groups="hr_attendance.group_hr_attendance,hr_attendance.group_hr_attendance_kiosk" web_icon="hr_attendance,static/description/icon.svg"/>
|
||||
|
||||
<menuitem id="menu_hr_attendance_my_attendances" name="Check In / Check Out" parent="menu_hr_attendance_root" sequence="1" groups="hr_attendance.group_hr_attendance" action="hr_attendance_action_my_attendances"/>
|
||||
|
||||
<menuitem id="menu_hr_attendance_attendances_overview" name="Attendances" parent="menu_hr_attendance_root" sequence="1" groups="hr_attendance.group_hr_attendance" action="hr_attendance_action_overview"/>
|
||||
|
||||
<menuitem id="menu_hr_attendance_kiosk_no_user_mode" name="Kiosk Mode" parent="menu_hr_attendance_root" sequence="10" groups="hr_attendance.group_hr_attendance_kiosk" action="hr_attendance_action_kiosk_mode"/>
|
||||
|
||||
<menuitem id="menu_hr_attendance_view_attendances" name="Attendances" parent="menu_hr_attendance_root" sequence="10" groups="hr_attendance.group_hr_attendance_user" action="hr_attendance_action"/>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="hr_department_view_kanban" model="ir.ui.view">
|
||||
<field name="name">hr.department.kanban.inherit</field>
|
||||
<field name="model">hr.department</field>
|
||||
<field name="inherit_id" ref="hr.hr_department_view_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//div[hasclass('o_kanban_manage_reports')]" position="inside">
|
||||
<a role="menuitem" class="dropdown-item" name="%(hr_attendance_report_action_filtered)d" type="action" groups="hr_attendance.group_hr_attendance_user">
|
||||
Attendances
|
||||
</a>
|
||||
</xpath>
|
||||
</data>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<record id="view_employee_form_inherit_hr_attendance" model="ir.ui.view">
|
||||
<field name="name">hr.employee</field>
|
||||
<field name="model">hr.employee</field>
|
||||
<field name="inherit_id" ref="hr.view_employee_form"/>
|
||||
<field name="priority">110</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='button_box']" position="inside">
|
||||
<field name="attendance_state" invisible="1"/>
|
||||
<button name="%(hr_attendance_action)d"
|
||||
class="oe_stat_button"
|
||||
icon="fa-clock-o"
|
||||
type="action"
|
||||
context="{'search_default_employee_id': id, 'search_default_check_in_filter': '1'}"
|
||||
groups="hr_attendance.group_hr_attendance_user"
|
||||
help="Worked hours last month">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_value">
|
||||
<field name="hours_last_month_display" widget="float_time"/> Hours
|
||||
</span>
|
||||
<span class="o_stat_text">
|
||||
Last Month
|
||||
</span>
|
||||
</div>
|
||||
</button>
|
||||
<button name="%(hr_attendance_overtime_action)d"
|
||||
class="oe_stat_button"
|
||||
icon="fa-history"
|
||||
type="action"
|
||||
attrs="{'invisible': [('total_overtime', '=', 0.0)]}"
|
||||
context="{'search_default_employee_id': active_id}"
|
||||
groups="hr_attendance.group_hr_attendance_user">
|
||||
<div class="o_stat_info">
|
||||
<span class="o_stat_value text-success" attrs="{'invisible': [('total_overtime', '<', 0)]}">
|
||||
<field name="total_overtime" widget="float_time"/>
|
||||
</span>
|
||||
<span class="o_stat_value text-danger" attrs="{'invisible': [('total_overtime', '>=', 0)]}">
|
||||
<field name="total_overtime" widget="float_time"/>
|
||||
</span>
|
||||
<span class="o_stat_text">Extra Hours</span>
|
||||
</div>
|
||||
</button>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_user_view_form" model="ir.ui.view">
|
||||
<field name="name">hr.user.preferences.view.form.attendance.inherit</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="hr.res_users_view_form_profile"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='button_box']" position="inside">
|
||||
<field name="employee_ids" invisible="1"/>
|
||||
<button name="%(hr_attendance_action_employee)d"
|
||||
class="oe_stat_button"
|
||||
icon="fa-calendar"
|
||||
type="action"
|
||||
context="{'search_default_employee_id': employee_ids, 'search_default_check_in_filter': '1'}"
|
||||
groups="base.group_user"
|
||||
help="Worked hours last month">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_value">
|
||||
<field name="hours_last_month_display" widget="float_time"/> Hours
|
||||
</span>
|
||||
<span class="o_stat_text">
|
||||
Last Month
|
||||
</span>
|
||||
</div>
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='button_box']" position="inside">
|
||||
<button name="%(hr_attendance_overtime_action)d"
|
||||
class="oe_stat_button"
|
||||
icon="fa-history"
|
||||
type="action"
|
||||
attrs="{'invisible': [('total_overtime', '=', 0.0)]}"
|
||||
context="{'search_default_employee_id': employee_ids}"
|
||||
groups="base.group_user"
|
||||
help="Amount of extra hours">
|
||||
<div class="o_stat_info">
|
||||
<span class="o_stat_value text-success" attrs="{'invisible': [('total_overtime', '<', 0)]}">
|
||||
<field name="total_overtime" widget="float_time"/>
|
||||
</span>
|
||||
<span class="o_stat_value text-danger" attrs="{'invisible': [('total_overtime', '>=', 0)]}">
|
||||
<field name="total_overtime" widget="float_time"/>
|
||||
</span>
|
||||
<span class="o_stat_text">Extra Hours</span>
|
||||
</div>
|
||||
</button>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- employee kanban view specifically for hr_attendance (to check in/out) -->
|
||||
<record id="hr_employees_view_kanban" model="ir.ui.view">
|
||||
<field name="name">hr.employee.kanban</field>
|
||||
<field name="model">hr.employee</field>
|
||||
<field name="priority">99</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_hr_employee_attendance_kanban" create="false" action="action_employee_kiosk_confirm" type="object">
|
||||
<field name="attendance_state"/>
|
||||
<field name="hours_today"/>
|
||||
<field name="total_overtime"/>
|
||||
<field name="id"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_click">
|
||||
<div class="o_kanban_image">
|
||||
<img t-att-src="kanban_image('hr.employee.public', 'avatar_128', record.id.raw_value)" alt="Employee"/>
|
||||
</div>
|
||||
<div class="oe_kanban_details">
|
||||
<div id="textbox">
|
||||
<div class="float-end" t-if="record.attendance_state.raw_value == 'checked_in'">
|
||||
<span id="oe_hr_attendance_status" class="fa fa-circle text-success me-1" role="img" aria-label="Available" title="Available"></span>
|
||||
</div>
|
||||
<div class="float-end" t-if="record.attendance_state.raw_value == 'checked_out'">
|
||||
<span id="oe_hr_attendance_status" class="fa fa-circle text-warning me-1"
|
||||
role="img" aria-label="Not available" title="Not available">
|
||||
</span>
|
||||
</div>
|
||||
<strong>
|
||||
<field name="name"/>
|
||||
</strong>
|
||||
</div>
|
||||
<ul>
|
||||
<li t-if="record.job_id.raw_value"><field name="job_id"/></li>
|
||||
<li t-if="record.work_location_id.raw_value"><field name="work_location_id"/></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_employee_attendance_action_kanban" model="ir.actions.act_window">
|
||||
<field name="name">Employees</field>
|
||||
<field name="res_model">hr.employee.public</field>
|
||||
<field name="view_mode">kanban</field>
|
||||
<field name="view_id" ref="hr_employees_view_kanban"/>
|
||||
<field name="target">fullscreen</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new employee
|
||||
</p><p>
|
||||
Add a few employees to be able to select an employee here and perform his check in / check out.
|
||||
To create employees go to the Employees menu.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,132 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="res_config_settings_view_form" model="ir.ui.view">
|
||||
<field name="name">res.config.settings.view.form.inherit.hr.attendance</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="priority" eval="80"/>
|
||||
<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="Attendances" string="Attendances" data-key="hr_attendance" groups="hr_attendance.group_hr_attendance_manager">
|
||||
<h2>Check-In/Out in Kiosk Mode</h2>
|
||||
<div class="row mt16 o_settings_container" name="kiosk_mode_setting_container">
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="attendance_kiosk_mode"/>
|
||||
<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-10">
|
||||
Define the way the user will be identified by the application.
|
||||
</div>
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div class="mt16">
|
||||
<field name="attendance_kiosk_mode" required="1" class="w-75"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="attendance_kiosk_delay" string="Display Time"/>
|
||||
<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-10">
|
||||
Choose how long the greeting message will be displayed.
|
||||
</div>
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div class="mt16">
|
||||
<field name="attendance_kiosk_delay" required="1" class="text-center" style="width: 10%; min-width: 4rem;"/> seconds
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt16 o_settings_container" name="pincode_setting_container">
|
||||
<div class="col-12 col-lg-6 o_setting_box" attrs="{'invisible': [('attendance_kiosk_mode', '=', 'manual')]}">
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="attendance_barcode_source"/>
|
||||
<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-10">
|
||||
Define the camera used for the barcode scan.
|
||||
</div>
|
||||
</div>
|
||||
<div class="content-group">
|
||||
<div class="mt16">
|
||||
<field name="attendance_barcode_source" required="1"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 o_setting_box" title="Set PIN codes in the employee detail form (in HR Settings tab)." attrs="{'invisible': [('attendance_kiosk_mode', '=', 'barcode')]}">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="group_attendance_use_pin"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="group_attendance_use_pin"/>
|
||||
<div class="text-muted col-lg-10">
|
||||
Use PIN codes (defined on the Employee's profile) to check-in.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>Extra Hours</h2>
|
||||
<div class="row mt16 o_settings_container" name="overtime_settings">
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div class="o_setting_left_pane" title="Activate the count of employees' extra hours.">
|
||||
<field name="hr_attendance_overtime"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="hr_attendance_overtime" class="o_form_label">Count of Extra Hours</label>
|
||||
<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="text-muted">
|
||||
Compare attendance with working hours set on employee.
|
||||
</div>
|
||||
<div class="mt16" attrs="{'invisible': [('hr_attendance_overtime', '=', False)],
|
||||
'required': [('hr_attendance_overtime', '=', True)]}">
|
||||
<div class="mt16 row" title="Count of extra hours is considered from this date. Potential extra hours prior to this date are not considered.">
|
||||
<label for="overtime_start_date" string="Start from" class="col-3 col-lg-3 o_light_label"/>
|
||||
<field name="overtime_start_date" class="col-lg-3 p-0" attrs="{'required': [('hr_attendance_overtime', '=', True)]}" />
|
||||
</div>
|
||||
<br/>
|
||||
<label for="overtime_company_threshold" class="o_form_label">
|
||||
Tolerance Time In Favor Of Company
|
||||
</label>
|
||||
<div class="text-muted">
|
||||
Allow a period of time (around working hours) where extra time will not be counted, in benefit of the company
|
||||
</div>
|
||||
<span>Time Period </span><field name="overtime_company_threshold" class="text-center"
|
||||
attrs="{'required': [('hr_attendance_overtime', '=', True)]}" style="width: 10%; min-width: 4rem;"/><span> Minutes</span>
|
||||
<br/>
|
||||
<br/>
|
||||
<label for="overtime_employee_threshold" class="o_form_label">
|
||||
Tolerance Time In Favor Of Employee
|
||||
</label>
|
||||
<div class="text-muted">
|
||||
Allow a period of time (around working hours) where extra time will not be deducted, in benefit of the employee
|
||||
</div>
|
||||
<span>Time Period </span><field name="overtime_employee_threshold" class="text-center"
|
||||
attrs="{'required': [('hr_attendance_overtime', '=', True)]}" style="width: 10%; min-width: 4rem;"/><span> Minutes</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_attendance_settings" 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_attendance', 'bin_size': False}</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="hr_attendance.menu_hr_attendance_settings" name="Configuration" parent="menu_hr_attendance_root"
|
||||
sequence="99" action="action_hr_attendance_settings" groups="hr_attendance.group_hr_attendance_manager"/>
|
||||
</odoo>
|
||||
Loading…
Add table
Add a link
Reference in a new issue