[IMP] hr_*: Split the HR access rights by application
PURPOSE ======= For each and every Hr application there should be one user category (One app = one category). SPECIFICATION ============= HR remains as it is : Employee, Officer, Manager Each Application should have 2 access rights: User and Manager. Example for Recruitment: - The user has access to the recruitment process - The manager has access to the job position configuration Each Application should grant the employee user access right (Namely the 'HR Officer')
This commit is contained in:
@@ -20,8 +20,8 @@ class HrEmployee(models.Model):
|
||||
barcode = "".join(choice(digits) for i in range(8))
|
||||
return barcode
|
||||
|
||||
barcode = fields.Char(string="Badge ID", help="ID used for employee identification.", default=_default_random_barcode, copy=False, groups='hr.group_hr_user')
|
||||
pin = fields.Char(string="PIN", default=_default_random_pin, help="PIN used for Check In/Out in Attendance.", copy=False, groups='hr.group_hr_user')
|
||||
barcode = fields.Char(string="Badge ID", help="ID used for employee identification.", default=_default_random_barcode, copy=False, groups='hr_attendance.group_hr_attendance_user')
|
||||
pin = fields.Char(string="PIN", default=_default_random_pin, help="PIN used for Check In/Out in Attendance.", copy=False, groups='hr_attendance.group_hr_attendance_user')
|
||||
|
||||
attendance_ids = fields.One2many('hr.attendance', 'employee_id', help='list of attendances for the employee')
|
||||
last_attendance_id = fields.Many2one('hr.attendance', compute='_compute_last_attendance_id')
|
||||
|
||||
@@ -1,11 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="hr.group_hr_manager" model="res.groups">
|
||||
<record id="group_hr_attendance_user" model="res.groups">
|
||||
<field name="name">Officer</field>
|
||||
<field name="category_id" ref="base.module_category_hr_attendance"/>
|
||||
<field name="implied_ids" eval="[(4, ref('hr.group_hr_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_hr_attendance_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="base.module_category_hr_attendance"/>
|
||||
<field name="implied_ids" eval="[(4, ref('hr_attendance.group_hr_attendance_user'))]"/>
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="base.default_user" model="res.users">
|
||||
<field name="groups_id" eval="[(4,ref('hr_attendance.group_hr_attendance_manager'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_attendance.group_hr_attendance_manager" model="res.groups">
|
||||
<field name="implied_ids" eval="[(4, ref('hr.group_hr_attendance'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="hr.group_hr_user" model="res.groups">
|
||||
<record id="hr_attendance.group_hr_attendance_user" model="res.groups">
|
||||
<field name="implied_ids" eval="[(4, ref('hr.group_hr_attendance'))]"/>
|
||||
</record>
|
||||
|
||||
@@ -26,7 +43,7 @@
|
||||
<field name="name">attendance officer: full access</field>
|
||||
<field name="model_id" ref="model_hr_attendance"/>
|
||||
<field name="domain_force">[(1,'=',1)]</field>
|
||||
<field name="groups" eval="[(4,ref('hr.group_hr_user'))]"/>
|
||||
<field name="groups" eval="[(4,ref('hr_attendance.group_hr_attendance_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_attendance_rule_attendance_employee" model="ir.rule">
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hr_attendance_user,hr.attendance.user,model_hr_attendance,hr.group_hr_user,1,1,1,1
|
||||
access_hr_attendance_user,hr.attendance.user,model_hr_attendance,hr_attendance.group_hr_attendance_user,1,1,1,1
|
||||
access_hr_attendance_system_user,hr.attendance.system.user,model_hr_attendance,base.group_user,1,1,1,0
|
||||
|
@@ -20,7 +20,7 @@ var Message = Widget.extend({
|
||||
var self = this;
|
||||
var default_action = { type: "ir.actions.client", name: 'Attendances', tag: 'hr_attendance_my_main_menu', params: {} };
|
||||
if(!action.attendance){
|
||||
self.session.user_has_group('hr.group_hr_user').then(function(has_group){
|
||||
self.session.user_has_group('hr_attendance.group_hr_attendance_user').then(function(has_group){
|
||||
if(has_group){
|
||||
self.next_action = { type: "ir.actions.client", name: 'Attendances', tag: 'hr_attendance_main_menu', target: 'fullscreen', params: {} };
|
||||
}
|
||||
|
||||
@@ -132,13 +132,13 @@
|
||||
|
||||
<menuitem id="menu_hr_attendance_my_attendances" name="My Attendances" parent="menu_hr_attendance_root" sequence="10" groups="hr.group_hr_attendance" action="hr_attendance_action_my_main_menu"/>
|
||||
|
||||
<menuitem id="menu_hr_attendance_manage_attendances" name="Manage Attendances" parent="menu_hr_attendance_root" sequence="20" groups="hr.group_hr_user"/>
|
||||
<menuitem id="menu_hr_attendance_manage_attendances" name="Manage Attendances" parent="menu_hr_attendance_root" sequence="20" groups="hr_attendance.group_hr_attendance_user"/>
|
||||
|
||||
<menuitem id="menu_hr_attendance_view_attendances" name="Attendances" parent="menu_hr_attendance_manage_attendances" sequence="10" groups="hr.group_hr_user" action="hr_attendance_action"/>
|
||||
<menuitem id="menu_hr_attendance_view_attendances" name="Attendances" parent="menu_hr_attendance_manage_attendances" sequence="10" groups="hr_attendance.group_hr_attendance_user" action="hr_attendance_action"/>
|
||||
|
||||
<menuitem id="menu_hr_attendance_view_employees_kanban" name="Employees" parent="menu_hr_attendance_manage_attendances" sequence="15" groups="hr.group_hr_user" action="hr.open_view_employee_list_my"/>
|
||||
<menuitem id="menu_hr_attendance_view_employees_kanban" name="Employees" parent="menu_hr_attendance_manage_attendances" sequence="15" groups="hr_attendance.group_hr_attendance_user" action="hr.open_view_employee_list_my"/>
|
||||
|
||||
<menuitem id="menu_hr_attendance_Kiosk_mode" name="Kiosk Mode" parent="menu_hr_attendance_manage_attendances" sequence="20" groups="hr.group_hr_user" action="hr_attendance_action_main_menu"/>
|
||||
<menuitem id="menu_hr_attendance_Kiosk_mode" name="Kiosk Mode" parent="menu_hr_attendance_manage_attendances" sequence="20" groups="hr_attendance.group_hr_attendance_user" action="hr_attendance_action_main_menu"/>
|
||||
|
||||
<menuitem id="menu_hr_attendance_report" name="Reports" parent="menu_hr_attendance_root" sequence="30" groups="hr.group_hr_user" action="hr_attendance_action_graph"/>
|
||||
<menuitem id="menu_hr_attendance_report" name="Reports" parent="menu_hr_attendance_root" sequence="30" groups="hr_attendance.group_hr_attendance_user" action="hr_attendance_action_graph"/>
|
||||
</odoo>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<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="groups_id" eval="[(4,ref('hr_attendance.group_hr_attendance_user'))]"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
</div>
|
||||
</field>
|
||||
<field name="user_id" position="after">
|
||||
<field name="barcode" groups="hr.group_hr_user"/>
|
||||
<field name="pin" groups="hr.group_hr_user,hr_attendance.group_hr_attendance_use_pin"/>
|
||||
<field name="manual_attendance" groups="hr.group_hr_user"/>
|
||||
<field name="barcode" groups="hr_attendance.group_hr_attendance_user"/>
|
||||
<field name="pin" groups="hr_attendance.group_hr_attendance_user,hr_attendance.group_hr_attendance_use_pin"/>
|
||||
<field name="manual_attendance" groups="hr_attendance.group_hr_attendance_user"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -26,5 +26,5 @@
|
||||
</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.group_hr_manager"/>
|
||||
sequence="99" action="action_hr_attendance_settings" groups="hr_attendance.group_hr_attendance_manager"/>
|
||||
</odoo>
|
||||
@@ -28,6 +28,7 @@ This module also uses analytic accounting and is compatible with the invoice on
|
||||
'website': 'https://www.odoo.com/page/expenses',
|
||||
'depends': ['hr_contract', 'account_accountant', 'report', 'web_tour'],
|
||||
'data': [
|
||||
'security/hr_expense_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'data/hr_expense_data.xml',
|
||||
'data/hr_expense_sequence.xml',
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="group_hr_expense_user" model="res.groups">
|
||||
<field name="name">Officer</field>
|
||||
<field name="category_id" ref="base.module_category_hr_expense"/>
|
||||
<field name="implied_ids" eval="[(4, ref('hr.group_hr_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_hr_expense_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="base.module_category_hr_expense"/>
|
||||
<field name="implied_ids" eval="[(4, ref('hr_expense.group_hr_expense_user'))]"/>
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="base.default_user" model="res.users">
|
||||
<field name="groups_id" eval="[(4,ref('hr_expense.group_hr_expense_manager'))]"/>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -1,17 +1,17 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
|
||||
access_hr_expense_user,hr.expense.user,model_hr_expense,hr.group_hr_user,1,1,1,1
|
||||
access_hr_expense_user,hr.expense.user,model_hr_expense,hr_expense.group_hr_expense_user,1,1,1,1
|
||||
access_hr_expense_employee,hr.expense.employee,model_hr_expense,base.group_user,1,1,1,1
|
||||
access_hr_expense_sheet_user,hr.expense.sheet.user,model_hr_expense_sheet,hr.group_hr_user,1,1,1,1
|
||||
access_hr_expense_sheet_user,hr.expense.sheet.user,model_hr_expense_sheet,hr_expense.group_hr_expense_user,1,1,1,1
|
||||
access_hr_expense_sheet_employee,hr.expense.sheet.employee,model_hr_expense_sheet,base.group_user,1,1,1,1
|
||||
access_product_product_hr_expense_user,product.product.hr.expense.user,product.model_product_product,hr.group_hr_user,1,1,1,1
|
||||
access_product_template_hr_expense_user,product.template.hr.expense.user,product.model_product_template,hr.group_hr_user,1,1,1,1
|
||||
access_product_uom_hr_expense_user,product.uom.hr.expense.user,product.model_product_uom,hr.group_hr_user,1,1,1,1
|
||||
access_account_journal_user,account.journal.user,account.model_account_journal,hr.group_hr_user,1,1,1,1
|
||||
access_product_product_hr_expense_user,product.product.hr.expense.user,product.model_product_product,hr_expense.group_hr_expense_user,1,1,1,1
|
||||
access_product_template_hr_expense_user,product.template.hr.expense.user,product.model_product_template,hr_expense.group_hr_expense_user,1,1,1,1
|
||||
access_product_uom_hr_expense_user,product.uom.hr.expense.user,product.model_product_uom,hr_expense.group_hr_expense_user,1,1,1,1
|
||||
access_account_journal_user,account.journal.user,account.model_account_journal,hr_expense.group_hr_expense_user,1,1,1,1
|
||||
access_account_journal_employee,account.journal.employee,account.model_account_journal,base.group_user,1,0,0,0
|
||||
access_account_invoice_user,account.invoice.user,account.model_account_invoice,hr.group_hr_user,1,1,1,1
|
||||
access_account_invoice_line_user,account.invoice.line.user,account.model_account_invoice_line,hr.group_hr_user,1,1,1,1
|
||||
access_account_invoice_tax_user,account.invoice.tax.user,account.model_account_invoice_tax,hr.group_hr_user,1,0,0,0
|
||||
access_account_move_user,account.move.user,account.model_account_move,hr.group_hr_user,1,0,0,0
|
||||
access_account_move_line_user,account.move.line.user,account.model_account_move_line,hr.group_hr_user,1,0,0,0
|
||||
access_account_analytic_line_user,account.analytic.line.user,account.model_account_analytic_line,hr.group_hr_user,1,1,1,1
|
||||
access_account_invoice_user,account.invoice.user,account.model_account_invoice,hr_expense.group_hr_expense_user,1,1,1,1
|
||||
access_account_invoice_line_user,account.invoice.line.user,account.model_account_invoice_line,hr_expense.group_hr_expense_user,1,1,1,1
|
||||
access_account_invoice_tax_user,account.invoice.tax.user,account.model_account_invoice_tax,hr_expense.group_hr_expense_user,1,0,0,0
|
||||
access_account_move_user,account.move.user,account.model_account_move,hr_expense.group_hr_expense_user,1,0,0,0
|
||||
access_account_move_line_user,account.move.line.user,account.model_account_move_line,hr_expense.group_hr_expense_user,1,0,0,0
|
||||
access_account_analytic_line_user,account.analytic.line.user,account.model_account_analytic_line,hr_expense.group_hr_expense_user,1,1,1,1
|
||||
|
||||
|
@@ -6,7 +6,7 @@
|
||||
<field name="name">Manager Expense</field>
|
||||
<field name="model_id" ref="model_hr_expense"/>
|
||||
<field name="domain_force">[(1, '=', 1)]</field>
|
||||
<field name="groups" eval="[(4, ref('account.group_account_user')), (4, ref('hr.group_hr_manager')), (4, ref('hr.group_hr_user'))]"/>
|
||||
<field name="groups" eval="[(4, ref('account.group_account_user')), (4, ref('hr_expense.group_hr_expense_manager')), (4, ref('hr_expense.group_hr_expense_user'))]"/>
|
||||
</record>
|
||||
<record id="property_rule_expense_employee" model="ir.rule">
|
||||
<field name="name">Employee Expense</field>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<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="groups_id" eval="[(4,ref('hr_expense.group_hr_expense_user'))]"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//templates" position="before">
|
||||
|
||||
@@ -166,7 +166,7 @@
|
||||
<filter domain="[('state', '=', 'refused')]" string="Refused" name="refused" help="Refused Expenses"/>
|
||||
<filter domain="[('state', '!=', 'cancel')]" string="Not Refused" name="uncancelled" help="Actual expense sheets, not the refused ones"/>
|
||||
<separator />
|
||||
<filter string="My Team Expenses" domain="[('employee_id.parent_id.user_id', '=', uid)]" groups="hr.group_hr_manager" help="Expenses of Your Team Member"/>
|
||||
<filter string="My Team Expenses" domain="[('employee_id.parent_id.user_id', '=', uid)]" groups="hr_expense.group_hr_expense_manager" help="Expenses of Your Team Member"/>
|
||||
<filter string="My Expenses" domain="[('employee_id.user_id', '=', uid)]"/>
|
||||
<separator />
|
||||
<filter string="New Mail" name="message_unread" domain="[('message_unread', '=', True)]"/>
|
||||
@@ -180,7 +180,7 @@
|
||||
<filter string="Status" domain="[]" context="{'group_by': 'state'}"/>
|
||||
</group>
|
||||
<separator />
|
||||
<filter domain="[('employee_id.active', '=', False)]" string="Former Employees" name="inactive" groups="hr.group_hr_user,hr.group_hr_manager"/>
|
||||
<filter domain="[('employee_id.active', '=', False)]" string="Former Employees" name="inactive" groups="hr_expense.group_hr_expense_user,hr_expense.group_hr_expense_manager"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
@@ -406,11 +406,11 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Expense Reports" class="o_expense_sheet">
|
||||
<header>
|
||||
<button name="approve_expense_sheets" states="submit" string="Approve" type="object" groups="hr.group_hr_user" class="oe_highlight o_expense_sheet_approve"/>
|
||||
<button name="approve_expense_sheets" states="submit" string="Approve" type="object" groups="hr_expense.group_hr_expense_user" class="oe_highlight o_expense_sheet_approve"/>
|
||||
<button name="action_sheet_move_create" states="approve" string="Post Journal Entries" type="object" groups="account.group_account_user" class="oe_highlight o_expense_sheet_post"/>
|
||||
<button name="%(hr_expense.hr_expense_register_payment_wizard_action)d" type="action" string="Register Payment" class="oe_highlight o_expense_sheet_pay" attrs="{'invisible': [('state', '!=', 'post')]}" context="{'default_amount': total_amount, 'partner_id': address_id}" groups="account.group_account_user"/>
|
||||
<button name="reset_expense_sheets" states="cancel" string="Resubmit" type="object"/>
|
||||
<button name="%(hr_expense.hr_expense_refuse_wizard_action)d" states="submit" string="Refuse" type="action" groups="hr.group_hr_user" />
|
||||
<button name="%(hr_expense.hr_expense_refuse_wizard_action)d" states="submit" string="Refuse" type="action" groups="hr_expense.group_hr_expense_user" />
|
||||
<button name="%(hr_expense.hr_expense_refuse_wizard_action)d" states="approve" string="Refuse" type="action" groups="account.group_account_user"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,submit,approve,post,done"/>
|
||||
</header>
|
||||
@@ -549,7 +549,7 @@
|
||||
<filter domain="[('state', '=', 'approve')]" string="To Post" name="to_post" help="Approved Expenses"/>
|
||||
<filter domain="['|', ('state', '=', 'approve'), ('state', '=', 'post')]" string="To Pay" name="approved" help="Expenses to Invoice"/>
|
||||
<separator/>
|
||||
<filter string="My Team Reports" domain="[('employee_id.parent_id.user_id', '=', uid)]" groups="hr.group_hr_manager" help="Expenses of Your Team Member"/>
|
||||
<filter string="My Team Reports" domain="[('employee_id.parent_id.user_id', '=', uid)]" groups="hr_expense.group_hr_expense_manager" help="Expenses of Your Team Member"/>
|
||||
<filter string="My Reports" domain="[('employee_id.user_id', '=', uid)]"/>
|
||||
<separator />
|
||||
<filter string="New Mail" name="message_unread" domain="[('message_unread', '=', True)]"/>
|
||||
@@ -561,7 +561,7 @@
|
||||
<filter string="State" domain="[]" context="{'group_by': 'state'}" name="state"/>
|
||||
</group>
|
||||
<separator />
|
||||
<filter domain="[('employee_id.active', '=', False)]" string="Former Employees" name="inactive" groups="hr.group_hr_user,hr.group_hr_manager"/>
|
||||
<filter domain="[('employee_id.active', '=', False)]" string="Former Employees" name="inactive" groups="hr_expense.group_hr_expense_user,hr_expense.group_hr_expense_manager"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
@@ -748,23 +748,23 @@
|
||||
<menuitem id="menu_hr_expense_my_expenses_refused" name="Refused Expenses" sequence="2" parent="menu_hr_expense_my_expenses" action="action_hr_expense_refused_expenses"/>
|
||||
<menuitem id="menu_hr_expense_sheet_my_reports" name="Expense Reports" sequence="3" parent="menu_hr_expense_my_expenses" action="action_hr_expense_sheet_my_all" load_xmlid="True"/>
|
||||
|
||||
<menuitem id="menu_hr_expense_to_approve" name="To Approve" sequence="2" parent="menu_hr_expense_root" groups="hr.group_hr_user"/>
|
||||
<menuitem id="menu_hr_expense_to_approve" name="To Approve" sequence="2" parent="menu_hr_expense_root" groups="hr_expense.group_hr_expense_user"/>
|
||||
<menuitem id="menu_hr_expense_sheet_all_to_approve" name="Expense Reports To Approve" sequence="1" parent="menu_hr_expense_to_approve"
|
||||
action="action_hr_expense_sheet_all_to_approve"/>
|
||||
|
||||
<menuitem id="menu_hr_expense_accountant" name="Accountant" sequence="3" parent="menu_hr_expense_root" groups="hr.group_hr_manager"/>
|
||||
<menuitem id="menu_hr_expense_accountant" name="Accountant" sequence="3" parent="menu_hr_expense_root" groups="hr_expense.group_hr_expense_manager"/>
|
||||
<menuitem id="menu_hr_expense_sheet_all_to_post" name="Expense Reports To Post" sequence="2" parent="menu_hr_expense_accountant"
|
||||
action="action_hr_expense_sheet_all_to_post"/>
|
||||
<menuitem id="menu_hr_expense_sheet_all_to_pay" name="Expense Reports To Pay" sequence="3" parent="menu_hr_expense_accountant"
|
||||
action="action_hr_expense_sheet_all_to_pay"/>
|
||||
|
||||
<menuitem id="menu_hr_expense_reports" name="Reports" sequence="4" parent="menu_hr_expense_root" groups="hr.group_hr_manager"/>
|
||||
<menuitem id="menu_hr_expense_reports" name="Reports" sequence="4" parent="menu_hr_expense_root" groups="hr_expense.group_hr_expense_manager"/>
|
||||
<menuitem id="menu_hr_expense_all_expenses" name="All Expenses" sequence="0" parent="menu_hr_expense_reports" action="hr_expense_actions_all"/>
|
||||
<menuitem id="menu_hr_expense_sheet_all_all" name="All Expense Reports" sequence="4" parent="menu_hr_expense_reports"
|
||||
action="action_hr_expense_sheet_all_all" groups="hr.group_hr_manager"/>
|
||||
action="action_hr_expense_sheet_all_all" groups="hr_expense.group_hr_expense_manager"/>
|
||||
|
||||
<menuitem id="menu_hr_expense_configuration" name="Configuration" parent="menu_hr_expense_root"
|
||||
sequence="100"/>
|
||||
<menuitem id="menu_hr_product" name="Expense Products" parent="menu_hr_expense_configuration"
|
||||
action="hr_expense_product" groups="hr.group_hr_manager" sequence="10"/>
|
||||
action="hr_expense_product" groups="hr_expense.group_hr_expense_manager" sequence="10"/>
|
||||
</odoo>
|
||||
|
||||
@@ -13,8 +13,8 @@ This allow the user to send badges to employees instead of simple users.
|
||||
Badge received are displayed on the user profile.
|
||||
""",
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'security/gamification_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'wizard/gamification_badge_user_wizard_views.xml',
|
||||
'views/gamification_views.xml',
|
||||
'views/hr_employee_views.xml',
|
||||
|
||||
@@ -2,4 +2,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
challenge_officer,"Challenge Officer",gamification.model_gamification_challenge,hr.group_hr_user,1,1,1,1
|
||||
challenge_line_officer,"Challenge Line Officer",gamification.model_gamification_challenge_line,hr.group_hr_user,1,1,1,1
|
||||
badge_officer,"Badge Officer",gamification.model_gamification_badge,hr.group_hr_user,1,1,1,1
|
||||
badge_user_officer,"Badge-user Officer",gamification.model_gamification_badge_user,hr.group_hr_user,1,1,1,1
|
||||
badge_user_officer,"Badge-user Officer",gamification.model_gamification_badge_user,hr.group_hr_user,1,1,1,1
|
||||
|
||||
|
@@ -29,8 +29,8 @@ A synchronization with an internal agenda (Meetings of the CRM module) is also p
|
||||
'data/report_paperformat.xml',
|
||||
'data/hr_holidays_data.xml',
|
||||
|
||||
'security/ir.model.access.csv',
|
||||
'security/hr_holidays_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
|
||||
'views/resource_views.xml',
|
||||
'views/hr_holidays_views.xml',
|
||||
|
||||
@@ -176,7 +176,7 @@ class Employee(models.Model):
|
||||
|
||||
@api.multi
|
||||
def _compute_show_leaves(self):
|
||||
show_leaves = self.env['res.users'].has_group('hr.group_hr_user')
|
||||
show_leaves = self.env['res.users'].has_group('hr_holidays.group_hr_holidays_user')
|
||||
for employee in self:
|
||||
if show_leaves or employee.user_id == self.env.user:
|
||||
employee.show_leaves = True
|
||||
|
||||
@@ -224,7 +224,7 @@ class Holidays(models.Model):
|
||||
or if he is an Hr Manager.
|
||||
"""
|
||||
user = self.env.user
|
||||
group_hr_manager = self.env.ref('hr.group_hr_manager')
|
||||
group_hr_manager = self.env.ref('hr_holidays.group_hr_holidays_manager')
|
||||
for holiday in self:
|
||||
if group_hr_manager in user.groups_id or holiday.employee_id and holiday.employee_id.user_id == user:
|
||||
holiday.can_reset = True
|
||||
@@ -332,7 +332,7 @@ class Holidays(models.Model):
|
||||
return res
|
||||
|
||||
def _check_state_access_right(self, vals):
|
||||
if vals.get('state') and vals['state'] not in ['draft', 'confirm', 'cancel'] and not self.env['res.users'].has_group('hr.group_hr_user'):
|
||||
if vals.get('state') and vals['state'] not in ['draft', 'confirm', 'cancel'] and not self.env['res.users'].has_group('hr_holidays.group_hr_holidays_user'):
|
||||
return False
|
||||
return True
|
||||
|
||||
@@ -436,7 +436,7 @@ class Holidays(models.Model):
|
||||
def action_approve(self):
|
||||
# if double_validation: this method is the first approval approval
|
||||
# if not double_validation: this method calls action_validate() below
|
||||
if not self.env.user.has_group('hr.group_hr_user'):
|
||||
if not self.env.user.has_group('hr_holidays.group_hr_holidays_user'):
|
||||
raise UserError(_('Only an HR Officer or Manager can approve leave requests.'))
|
||||
|
||||
manager = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
@@ -451,14 +451,14 @@ class Holidays(models.Model):
|
||||
|
||||
@api.multi
|
||||
def action_validate(self):
|
||||
if not self.env.user.has_group('hr.group_hr_user'):
|
||||
if not self.env.user.has_group('hr_holidays.group_hr_holidays_user'):
|
||||
raise UserError(_('Only an HR Officer or Manager can approve leave requests.'))
|
||||
|
||||
manager = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
for holiday in self:
|
||||
if holiday.state not in ['confirm', 'validate1']:
|
||||
raise UserError(_('Leave request must be confirmed in order to approve it.'))
|
||||
if holiday.state == 'validate1' and not holiday.env.user.has_group('hr.group_hr_manager'):
|
||||
if holiday.state == 'validate1' and not holiday.env.user.has_group('hr_holidays.group_hr_holidays_manager'):
|
||||
raise UserError(_('Only an HR Manager can apply the second approval on leave requests.'))
|
||||
|
||||
holiday.write({'state': 'validate'})
|
||||
@@ -510,7 +510,7 @@ class Holidays(models.Model):
|
||||
|
||||
@api.multi
|
||||
def action_refuse(self):
|
||||
if not self.env.user.has_group('hr.group_hr_user'):
|
||||
if not self.env.user.has_group('hr_holidays.group_hr_holidays_user'):
|
||||
raise UserError(_('Only an HR Officer or Manager can refuse leave requests.'))
|
||||
|
||||
manager = self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
|
||||
@@ -556,12 +556,12 @@ class Holidays(models.Model):
|
||||
recipients. Indeed those will have specific action in their notification
|
||||
emails.
|
||||
"""
|
||||
group_hr_user = self.env.ref('hr.group_hr_user')
|
||||
group_hr_holidays_user = self.env.ref('hr_holidays.group_hr_holidays_user')
|
||||
for recipient in recipients:
|
||||
if recipient.id in done_ids:
|
||||
continue
|
||||
if recipient.user_ids and group_hr_user in recipient.user_ids[0].groups_id:
|
||||
group_data['group_hr_user'] |= recipient
|
||||
if recipient.user_ids and group_hr_holidays_user in recipient.user_ids[0].groups_id:
|
||||
group_data['group_hr_holidays_user'] |= recipient
|
||||
done_ids.add(recipient.id)
|
||||
return super(Holidays, self)._notification_group_recipients(message, recipients, done_ids, group_data)
|
||||
|
||||
@@ -578,7 +578,7 @@ class Holidays(models.Model):
|
||||
if self.state in ['confirm', 'validate', 'validate1']:
|
||||
actions.append({'url': ref_action, 'title': 'Refuse'})
|
||||
|
||||
result['group_hr_user'] = {
|
||||
result['group_hr_holidays_user'] = {
|
||||
'actions': actions
|
||||
}
|
||||
return result
|
||||
|
||||
@@ -1,5 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="group_hr_holidays_user" model="res.groups">
|
||||
<field name="name">Officer</field>
|
||||
<field name="category_id" ref="base.module_category_hr_holidays"/>
|
||||
<field name="implied_ids" eval="[(4, ref('hr.group_hr_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_hr_holidays_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="base.module_category_hr_holidays"/>
|
||||
<field name="implied_ids" eval="[(4, ref('hr_holidays.group_hr_holidays_user'))]"/>
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="base.default_user" model="res.users">
|
||||
<field name="groups_id" eval="[(4,ref('hr_holidays.group_hr_holidays_manager'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="property_rule_holidays_employee" model="ir.rule">
|
||||
<field name="name">Employee Holidays</field>
|
||||
<field name="model_id" ref="model_hr_holidays"/>
|
||||
@@ -22,14 +39,14 @@
|
||||
<field name="name">Holidays Officer</field>
|
||||
<field name="model_id" ref="model_hr_holidays"/>
|
||||
<field name="domain_force">[(1,'=',1)]</field>
|
||||
<field name="groups" eval="[(4,ref('hr.group_hr_user'))]"/>
|
||||
<field name="groups" eval="[(4,ref('hr_holidays.group_hr_holidays_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="resource_leaves_officer" model="ir.rule">
|
||||
<field name="name">Leaves Officer</field>
|
||||
<field name="model_id" ref="model_resource_calendar_leaves"/>
|
||||
<field name="domain_force">[(1,'=',1)]</field>
|
||||
<field name="groups" eval="[(4,ref('hr.group_hr_user'))]"/>
|
||||
<field name="groups" eval="[(4,ref('hr_holidays.group_hr_holidays_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="hr_holidays_status_rule_multi_company" model="ir.rule">
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hr_holidays_user,hr.holidays.user,model_hr_holidays,hr.group_hr_user,1,1,1,1
|
||||
access_hr_holidays_user,hr.holidays.user,model_hr_holidays,hr_holidays.group_hr_holidays_user,1,1,1,1
|
||||
access_hr_holidays_employee,hr.holidays.employee,model_hr_holidays,base.group_user,1,1,1,1
|
||||
access_hr_holydays_status_employee,hr.holidays.status employee,model_hr_holidays_status,base.group_user,1,0,0,0
|
||||
access_hr_holydays_status_manager,hr.holidays.status manager,model_hr_holidays_status,hr.group_hr_manager,1,1,1,1
|
||||
access_hr_holidays_remain_user,hr.holidays.ramain.user,model_hr_holidays_remaining_leaves_user,hr.group_hr_user,1,1,1,1
|
||||
access_resource_calendar_leaves_user,resource_calendar_leaves_user,resource.model_resource_calendar_leaves,hr.group_hr_user,1,1,1,1
|
||||
access_calendar_event_hr_user,calendar.event.hr.user,calendar.model_calendar_event,hr.group_hr_user,1,1,1,1
|
||||
access_calendar_event_type_manager,calendar.event.type.manager,calendar.model_calendar_event_type,hr.group_hr_manager,1,1,1,1
|
||||
access_calendar_attendee_hr_user,calendar.attendee.hr.user,calendar.model_calendar_attendee,hr.group_hr_user,1,1,1,1
|
||||
access_hr_holydays_status_manager,hr.holidays.status manager,model_hr_holidays_status,hr_holidays.group_hr_holidays_manager,1,1,1,1
|
||||
access_hr_holidays_remain_user,hr.holidays.ramain.user,model_hr_holidays_remaining_leaves_user,hr_holidays.group_hr_holidays_user,1,1,1,1
|
||||
access_resource_calendar_leaves_user,resource_calendar_leaves_user,resource.model_resource_calendar_leaves,hr_holidays.group_hr_holidays_user,1,1,1,1
|
||||
access_calendar_event_hr_user,calendar.event.hr.user,calendar.model_calendar_event,hr_holidays.group_hr_holidays_user,1,1,1,1
|
||||
access_calendar_event_type_manager,calendar.event.type.manager,calendar.model_calendar_event_type,hr_holidays.group_hr_holidays_manager,1,1,1,1
|
||||
access_calendar_attendee_hr_user,calendar.attendee.hr.user,calendar.model_calendar_attendee,hr_holidays.group_hr_holidays_user,1,1,1,1
|
||||
|
||||
|
@@ -19,13 +19,13 @@ class TestHrHolidaysBase(common.TransactionCase):
|
||||
'name': 'Armande HrUser',
|
||||
'login': 'Armande',
|
||||
'email': 'armande.hruser@example.com',
|
||||
'groups_id': [(6, 0, [group_employee_id, self.ref('hr.group_hr_user')])]
|
||||
'groups_id': [(6, 0, [group_employee_id, self.ref('hr_holidays.group_hr_holidays_user')])]
|
||||
}).id
|
||||
self.user_hrmanager_id = Users.create({
|
||||
'name': 'Bastien HrManager',
|
||||
'login': 'bastien',
|
||||
'email': 'bastien.hrmanager@example.com',
|
||||
'groups_id': [(6, 0, [group_employee_id, self.ref('hr.group_hr_manager')])]
|
||||
'groups_id': [(6, 0, [group_employee_id, self.ref('hr_holidays.group_hr_holidays_manager')])]
|
||||
}).id
|
||||
self.user_employee_id = Users.create({
|
||||
'name': 'David Employee',
|
||||
|
||||
@@ -29,9 +29,9 @@
|
||||
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
|
||||
<separator/>
|
||||
<filter string="My Department Leaves" name="department" domain="[('department_id.manager_id.user_id', '=', uid)]" help="My Department Leaves"/>
|
||||
<filter string="My Team Leaves" domain="[('employee_id.parent_id.user_id', '=', uid)]" groups="hr.group_hr_manager" help="Leaves of Your Team Member"/>
|
||||
<filter string="My Team Leaves" domain="[('employee_id.parent_id.user_id', '=', uid)]" groups="hr_holidays.group_hr_holidays_manager" help="Leaves of Your Team Member"/>
|
||||
<separator/>
|
||||
<filter string="To Report in Payslip" name="gray" domain="[('payslip_status', '=', False)]" groups="hr.group_hr_manager"/>
|
||||
<filter string="To Report in Payslip" name="gray" domain="[('payslip_status', '=', False)]" groups="hr_holidays.group_hr_holidays_manager"/>
|
||||
<separator/>
|
||||
<filter string="To Do" name="todo" domain="[('payslip_status', '=', False), ('holiday_status_id.active', '=', True)]"/>
|
||||
<separator/>
|
||||
@@ -83,9 +83,9 @@
|
||||
<field name="type" invisible="1"/>
|
||||
<header>
|
||||
<button string="Confirm" name="action_confirm" states="draft" type="object" class="oe_highlight"/>
|
||||
<button string="Approve" name="action_approve" states="confirm" type="object" groups="hr.group_hr_user" class="oe_highlight"/>
|
||||
<button string="Validate" name="action_validate" states="validate1" type="object" groups="hr.group_hr_manager" class="oe_highlight"/>
|
||||
<button string="Refuse" name="action_refuse" states="confirm,validate,validate1" type="object" groups="hr.group_hr_user"/>
|
||||
<button string="Approve" name="action_approve" states="confirm" type="object" groups="hr_holidays.group_hr_holidays_user" class="oe_highlight"/>
|
||||
<button string="Validate" name="action_validate" states="validate1" type="object" groups="hr_holidays.group_hr_holidays_manager" class="oe_highlight"/>
|
||||
<button string="Refuse" name="action_refuse" states="confirm,validate,validate1" type="object" groups="hr_holidays.group_hr_holidays_user"/>
|
||||
<button string="Reset to Draft" name="action_draft" type="object"
|
||||
attrs="{'invisible': ['|', ('can_reset', '=', False), ('state', 'not in', ['confirm', 'refuse'])]}"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,validate"/>
|
||||
@@ -111,14 +111,14 @@
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<field name="holiday_type" attrs="{'readonly':[('type', '=', 'remove'),('state','!=','draft')]}" string="Mode" groups="hr.group_hr_user" context="{'employee_id':employee_id}" />
|
||||
<field name="employee_id" attrs="{'required':[('holiday_type','=','employee')],'invisible':[('holiday_type','=','category')]}" groups="hr.group_hr_user"/>
|
||||
<field name="holiday_type" attrs="{'readonly':[('type', '=', 'remove'),('state','!=','draft')]}" string="Mode" groups="hr_holidays.group_hr_holidays_user" context="{'employee_id':employee_id}" />
|
||||
<field name="employee_id" attrs="{'required':[('holiday_type','=','employee')],'invisible':[('holiday_type','=','category')]}" groups="hr_holidays.group_hr_holidays_user"/>
|
||||
<field name="category_id" attrs="{'required':[('holiday_type','=','category')], 'readonly': [('type', '=', 'remove'),('state','!=','draft'), ('state','!=','confirm')], 'invisible':[('holiday_type','=','employee')]}"/>
|
||||
<field name="department_id" groups="hr.group_hr_user" attrs="{'readonly':['|','|' ,('type','=','add'),('holiday_type','=','category'),('state','=', 'validate')],'invisible':[('holiday_type','=','category')]}"/>
|
||||
<field name="payslip_status" groups="hr.group_hr_manager" attrs="{'invisible':[('type','=','add')]}" widget="toggle_button"/>
|
||||
<field name="department_id" groups="hr_holidays.group_hr_holidays_user" attrs="{'readonly':['|','|' ,('type','=','add'),('holiday_type','=','category'),('state','=', 'validate')],'invisible':[('holiday_type','=','category')]}"/>
|
||||
<field name="payslip_status" groups="hr_holidays.group_hr_holidays_manager" attrs="{'invisible':[('type','=','add')]}" widget="toggle_button"/>
|
||||
</group>
|
||||
<field name="notes" nolabel="1" colspan="4" placeholder="Add a reason..." attrs="{'invisible': [('type', '=', 'remove')]}"/>
|
||||
<div groups="hr.group_hr_manager" attrs="{'invisible':[('type','=','add')]}">
|
||||
<div groups="hr_holidays.group_hr_holidays_manager" attrs="{'invisible':[('type','=','add')]}">
|
||||
<separator string="Comment by Manager"/>
|
||||
<field name="report_note" placeholder="e.g. Report to the next month..."/>
|
||||
</div>
|
||||
@@ -169,8 +169,8 @@
|
||||
<field name="number_of_days_temp" string="Allocated Days" sum="Remaining Days"/>
|
||||
<field name="state"/>
|
||||
<button name="toggle_payslip_status" field_name="payslip_status" type="object"
|
||||
widget="toggle_button" options='{"active": "Reported in last payslips", "inactive": "To Report in Payslip"}' groups="hr.group_hr_manager"/>
|
||||
<field name="report_note" groups="hr.group_hr_manager"/>
|
||||
widget="toggle_button" options='{"active": "Reported in last payslips", "inactive": "To Report in Payslip"}' groups="hr_holidays.group_hr_holidays_manager"/>
|
||||
<field name="report_note" groups="hr_holidays.group_hr_holidays_manager"/>
|
||||
<field name="payslip_status" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -213,7 +213,7 @@
|
||||
<field name="holiday_status_id"/>
|
||||
<field name="state"/>
|
||||
<button name="toggle_payslip_status" field_name="payslip_status" type="object"
|
||||
widget="toggle_button" options='{"active": "Reported in last payslips", "inactive": "To Report in Payslip"}' groups="hr.group_hr_manager"/>
|
||||
widget="toggle_button" options='{"active": "Reported in last payslips", "inactive": "To Report in Payslip"}' groups="hr_holidays.group_hr_holidays_manager"/>
|
||||
<field name="report_note"/>
|
||||
<field name="payslip_status" invisible="1"/>
|
||||
</tree>
|
||||
@@ -236,7 +236,7 @@
|
||||
<field name="state"/>
|
||||
<field name="payslip_status" invisible="1"/>
|
||||
<button name="toggle_payslip_status" field_name="payslip_status" type="object"
|
||||
widget="toggle_button" options='{"active": "Reported in last payslips", "inactive": "To Report in Payslip"}' groups="hr.group_hr_manager"/>
|
||||
widget="toggle_button" options='{"active": "Reported in last payslips", "inactive": "To Report in Payslip"}' groups="hr_holidays.group_hr_holidays_manager"/>
|
||||
<field name="category_id" invisible="1"/>
|
||||
<field name="department_id" invisible="not context.get('set_visible',False)"/>
|
||||
<field name="manager_id" invisible="1"/>
|
||||
@@ -269,7 +269,7 @@
|
||||
parent="menu_hr_holidays_root"
|
||||
sequence="1"
|
||||
action="action_hr_holidays_dashboard"
|
||||
groups="hr.group_hr_manager"/>
|
||||
groups="hr_holidays.group_hr_holidays_manager"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_holidays_my_leaves"
|
||||
@@ -282,14 +282,14 @@
|
||||
name="Leaves to Approve"
|
||||
parent="menu_hr_holidays_root"
|
||||
sequence="3"
|
||||
groups="hr.group_hr_manager,hr.group_hr_user"/>
|
||||
groups="hr_holidays.group_hr_holidays_manager,hr_holidays.group_hr_holidays_user"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_hr_holidays_report"
|
||||
name="Reports"
|
||||
parent="menu_hr_holidays_root"
|
||||
sequence="99"
|
||||
groups="hr.group_hr_manager,hr.group_hr_user"/>
|
||||
groups="hr_holidays.group_hr_holidays_manager,hr_holidays.group_hr_holidays_user"/>
|
||||
|
||||
<record id="open_ask_holidays" model="ir.actions.act_window">
|
||||
<field name="name">Leaves Request</field>
|
||||
@@ -518,7 +518,7 @@
|
||||
id="menu_open_department_leave_approve"
|
||||
name="Leaves"
|
||||
parent="menu_hr_holidays_approvals"
|
||||
groups="hr.group_hr_manager,hr.group_hr_user"
|
||||
groups="hr_holidays.group_hr_holidays_manager,hr_holidays.group_hr_holidays_user"
|
||||
action="open_department_holidays_approve"
|
||||
sequence="1"/>
|
||||
|
||||
@@ -538,7 +538,7 @@
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="menu_open_department_leave_allocation_approve" groups="hr.group_hr_manager,hr.group_hr_user"
|
||||
id="menu_open_department_leave_allocation_approve" groups="hr_holidays.group_hr_holidays_manager,hr_holidays.group_hr_holidays_user"
|
||||
name="Leaves Allocation"
|
||||
parent="menu_hr_holidays_approvals"
|
||||
action="open_department_holidays_allocation_approve"
|
||||
@@ -548,7 +548,7 @@
|
||||
id="menu_open_employee_leave"
|
||||
name="Leave Details"
|
||||
parent="menu_hr_holidays_report"
|
||||
groups="hr.group_hr_manager,hr.group_hr_user"
|
||||
groups="hr_holidays.group_hr_holidays_manager,hr_holidays.group_hr_holidays_user"
|
||||
action="open_employee_leaves"
|
||||
sequence="4"/>
|
||||
|
||||
@@ -637,7 +637,7 @@
|
||||
name="Configuration"
|
||||
parent="menu_hr_holidays_root"
|
||||
sequence="100"
|
||||
groups="hr.group_hr_manager"
|
||||
groups="hr_holidays.group_hr_holidays_manager"
|
||||
action="open_view_holiday_status"/>
|
||||
|
||||
<!-- Shortcuts -->
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<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="groups_id" eval="[(4,ref('hr_holidays.group_hr_holidays_user'))]"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//templates" position="before">
|
||||
|
||||
@@ -843,7 +843,7 @@ class HrEmployee(models.Model):
|
||||
_description = 'Employee'
|
||||
|
||||
slip_ids = fields.One2many('hr.payslip', 'employee_id', string='Payslips', readonly=True)
|
||||
payslip_count = fields.Integer(compute='_compute_payslip_count', string='Payslips', groups="hr.group_hr_user")
|
||||
payslip_count = fields.Integer(compute='_compute_payslip_count', string='Payslips', groups="hr_payroll.group_hr_payroll_user")
|
||||
|
||||
@api.multi
|
||||
def _compute_payslip_count(self):
|
||||
|
||||
@@ -2,11 +2,28 @@
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="group_hr_payroll_user" model="res.groups">
|
||||
<field name="name">Officer</field>
|
||||
<field name="category_id" ref="base.module_category_hr_payroll"/>
|
||||
<field name="implied_ids" eval="[(4, ref('hr.group_hr_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_hr_payroll_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="base.module_category_hr_payroll"/>
|
||||
<field name="implied_ids" eval="[(4, ref('hr_payroll.group_hr_payroll_user'))]"/>
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="base.default_user" model="res.users">
|
||||
<field name="groups_id" eval="[(4,ref('hr_payroll.group_hr_payroll_manager'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="property_rule_employee_payslip" model="ir.rule">
|
||||
<field name="name">Employee Payslip</field>
|
||||
<field name="model_id" ref="model_hr_payslip"/>
|
||||
<field name="domain_force">['|', ('employee_id.user_id', '=', user.id), ('employee_id.department_id.manager_id.user_id', '=', user.id)]</field>
|
||||
<field name="groups" eval="[(4,ref('hr.group_hr_user'))]"/>
|
||||
<field name="groups" eval="[(4,ref('hr_payroll.group_hr_payroll_user'))]"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hr_payroll_structure,hr.payroll.structure,model_hr_payroll_structure,hr.group_hr_user,1,1,1,1
|
||||
access_hr_contribution_register,hr.contribution.register,model_hr_contribution_register,hr.group_hr_user,1,1,1,1
|
||||
access_hr_salary_rule_category,hr.salary.rule.category,model_hr_salary_rule_category,hr.group_hr_user,1,1,1,1
|
||||
access_hr_payslip,hr.payslip,model_hr_payslip,hr.group_hr_user,1,1,1,1
|
||||
access_hr_payslip_line,hr.payslip.line,model_hr_payslip_line,hr.group_hr_user,1,1,1,1
|
||||
access_hr_payslip_input_user,hr.payslip.input.user,model_hr_payslip_input,hr.group_hr_user,1,1,1,1
|
||||
access_hr_payslip_worked_days ,hr.payslip.worked_days,model_hr_payslip_worked_days,hr.group_hr_manager,1,1,1,1
|
||||
access_hr_payslip_run,hr.payslip.run,model_hr_payslip_run,hr.group_hr_manager,1,1,1,1
|
||||
access_hr_rule_input,hr.rule.input,model_hr_rule_input,hr.group_hr_manager,1,1,1,1
|
||||
access_hr_salary_rule_user,hr.salary.rule.user,model_hr_salary_rule,hr.group_hr_user,1,1,1,1
|
||||
access_hr_payroll_structure,hr.payroll.structure,model_hr_payroll_structure,hr_payroll.group_hr_payroll_user,1,1,1,1
|
||||
access_hr_contribution_register,hr.contribution.register,model_hr_contribution_register,hr_payroll.group_hr_payroll_user,1,1,1,1
|
||||
access_hr_salary_rule_category,hr.salary.rule.category,model_hr_salary_rule_category,hr_payroll.group_hr_payroll_user,1,1,1,1
|
||||
access_hr_payslip,hr.payslip,model_hr_payslip,hr_payroll.group_hr_payroll_user,1,1,1,1
|
||||
access_hr_payslip_line,hr.payslip.line,model_hr_payslip_line,hr_payroll.group_hr_payroll_user,1,1,1,1
|
||||
access_hr_payslip_input_user,hr.payslip.input.user,model_hr_payslip_input,hr_payroll.group_hr_payroll_user,1,1,1,1
|
||||
access_hr_payslip_worked_days ,hr.payslip.worked_days,model_hr_payslip_worked_days,hr_payroll.group_hr_payroll_manager,1,1,1,1
|
||||
access_hr_payslip_run,hr.payslip.run,model_hr_payslip_run,hr_payroll.group_hr_payroll_manager,1,1,1,1
|
||||
access_hr_rule_input,hr.rule.input,model_hr_rule_input,hr_payroll.group_hr_payroll_manager,1,1,1,1
|
||||
access_hr_salary_rule_user,hr.salary.rule.user,model_hr_salary_rule,hr_payroll.group_hr_payroll_user,1,1,1,1
|
||||
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
<menuitem id="menu_hr_payroll_root" name="Payroll" sequence="45" web_icon="hr_payroll,static/description/icon.png"/>
|
||||
<menuitem id="menu_hr_payroll_configuration" name="Configuration" parent="menu_hr_payroll_root"
|
||||
sequence="100" groups="hr.group_hr_manager"/>
|
||||
sequence="100" groups="hr_payroll.group_hr_payroll_manager"/>
|
||||
|
||||
<!-- Contract View -->
|
||||
<record id="hr_contract_form_inherit" model="ir.ui.view">
|
||||
@@ -369,7 +369,7 @@
|
||||
<field name="search_view_id" ref="view_hr_payslip_filter"/>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_view_hr_payslip_form" id="menu_department_tree" parent="menu_hr_payroll_root" groups="hr.group_hr_user"/>
|
||||
<menuitem action="action_view_hr_payslip_form" id="menu_department_tree" parent="menu_hr_payroll_root" groups="hr_payroll.group_hr_payroll_user"/>
|
||||
|
||||
<record id="act_hr_employee_payslip_list" model="ir.actions.act_window">
|
||||
<field name="res_model">hr.payslip</field>
|
||||
|
||||
@@ -9,5 +9,23 @@
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
</record>
|
||||
|
||||
<record id="group_hr_recruitment_user" model="res.groups">
|
||||
<field name="name">Officer</field>
|
||||
<field name="category_id" ref="base.module_category_hr_recruitment"/>
|
||||
<field name="implied_ids" eval="[(4, ref('hr.group_hr_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_hr_recruitment_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="base.module_category_hr_recruitment"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_hr_recruitment_user'))]"/>
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="base.default_user" model="res.users">
|
||||
<field name="groups_id" eval="[(4,ref('hr_recruitment.group_hr_recruitment_manager'))]"/>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hr_applicant_user,hr.applicant.user,model_hr_applicant,hr.group_hr_user,1,1,1,1
|
||||
access_hr_recruitment_report,hr.recruitment.report,model_hr_recruitment_report,hr.group_hr_manager,1,1,1,1
|
||||
access_hr_recruitment_stage_user,hr.recruitment.stage.user,model_hr_recruitment_stage,hr.group_hr_user,1,0,0,0
|
||||
access_hr_recruitment_stage_manager,hr.recruitment.stage.manager,model_hr_recruitment_stage,hr.group_hr_manager,1,1,1,1
|
||||
access_hr_recruitment_degree,hr.recruitment.degree,model_hr_recruitment_degree,hr.group_hr_user,1,1,1,1
|
||||
access_res_partner_hr_user,res.partner.user,base.model_res_partner,hr.group_hr_user,1,1,1,1
|
||||
access_calendar_event_hruser,calendar.event.hruser,calendar.model_calendar_event,hr.group_hr_user,1,1,1,1
|
||||
access_hr_recruitment_source_hr_officer,hr.recruitment.source,model_hr_recruitment_source,hr.group_hr_user,1,1,1,1
|
||||
access_hr_applicant_user,hr.applicant.user,model_hr_applicant,group_hr_recruitment_user,1,1,1,1
|
||||
access_hr_recruitment_report,hr.recruitment.report,model_hr_recruitment_report,group_hr_recruitment_user,1,1,1,1
|
||||
access_hr_recruitment_stage_user,hr.recruitment.stage.user,model_hr_recruitment_stage,group_hr_recruitment_user,1,0,0,0
|
||||
access_hr_recruitment_stage_manager,hr.recruitment.stage.manager,model_hr_recruitment_stage,group_hr_recruitment_user,1,1,1,1
|
||||
access_hr_recruitment_degree,hr.recruitment.degree,model_hr_recruitment_degree,group_hr_recruitment_user,1,1,1,1
|
||||
access_res_partner_hr_user,res.partner.user,base.model_res_partner,group_hr_recruitment_user,1,1,1,1
|
||||
access_calendar_event_hruser,calendar.event.hruser,calendar.model_calendar_event,group_hr_recruitment_user,1,1,1,1
|
||||
access_hr_recruitment_source_hr_officer,hr.recruitment.source,model_hr_recruitment_source,group_hr_recruitment_user,1,1,1,1
|
||||
access_hr_recruitment_source_all,hr.recruitment.source,model_hr_recruitment_source,,1,0,0,0
|
||||
access_hr_applicant_category,hr.applicant_category,model_hr_applicant_category,,1,1,1,0
|
||||
access_hr_applicant_category_manager,hr.applicant_category,model_hr_applicant_category,hr.group_hr_manager,1,1,1,1
|
||||
access_calendar_event_type_hr_officer,calendar.event.type.officer,calendar.model_calendar_event_type,hr.group_hr_user,1,1,1,0
|
||||
access_hr_applicant_category_manager,hr.applicant_category,model_hr_applicant_category,group_hr_recruitment_user,1,1,1,1
|
||||
access_calendar_event_type_hr_officer,calendar.event.type.officer,calendar.model_calendar_event_type,group_hr_recruitment_user,1,1,1,0
|
||||
|
||||
|
@@ -11,7 +11,7 @@
|
||||
-
|
||||
!record {model: res.users, id: res_users_hr_recruitment_officer}:
|
||||
groups_id:
|
||||
- hr.group_hr_user
|
||||
- hr_recruitment.group_hr_recruitment_user
|
||||
-
|
||||
In Order to test process of Recruitment so giving HR officer's rights,
|
||||
-
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<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="groups_id" eval="[(4,ref('hr_recruitment.group_hr_recruitment_user'))]"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//templates" position="before">
|
||||
|
||||
@@ -537,7 +537,7 @@
|
||||
name="Recruitment"
|
||||
id="menu_hr_recruitment_root"
|
||||
web_icon="hr_recruitment,static/description/icon.png"
|
||||
groups="hr.group_hr_user"
|
||||
groups="hr_recruitment.group_hr_recruitment_user"
|
||||
sequence="80"/>
|
||||
|
||||
<menuitem id="menu_hr_recruitment_configuration" name="Configuration" parent="menu_hr_recruitment_root"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record id="hr.group_hr_user" model="res.groups">
|
||||
<record id="hr_recruitment.group_hr_recruitment_user" model="res.groups">
|
||||
<field name="implied_ids" eval="[(4, ref('survey.group_survey_user'))]"/>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_survey_hr_user,survey.hr.user,survey.model_survey_survey,hr.group_hr_user,1,1,1,0
|
||||
access_survey_hr_user,survey.hr.user,survey.model_survey_survey,hr_recruitment.group_hr_recruitment_user,1,1,1,0
|
||||
|
||||
|
@@ -21,6 +21,7 @@ up a management by affair.
|
||||
'website': 'https://www.odoo.com/page/employees',
|
||||
'depends': ['account', 'hr', 'project'],
|
||||
'data': [
|
||||
'security/hr_timesheet_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'hr_timesheet_view.xml',
|
||||
'project_timesheet_view.xml',
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<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="groups_id" eval="[(4,ref('hr_timesheet.group_hr_timesheet_user'))]"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
|
||||
<menuitem id="menu_timesheets_reports" name="Reports"
|
||||
parent="timesheet_menu_root" sequence="99" groups="hr.group_hr_manager"/>
|
||||
parent="timesheet_menu_root" sequence="99" groups="hr_timesheet.group_hr_timesheet_manager"/>
|
||||
<menuitem id="menu_hr_activity_analysis" parent="menu_timesheets_reports" action="act_hr_timesheet_report"
|
||||
name="Activity Analysis"/>
|
||||
</data>
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<record id="group_hr_timesheet_user" model="res.groups">
|
||||
<field name="name">Officer</field>
|
||||
<field name="category_id" ref="base.module_category_hr_timesheet"/>
|
||||
<field name="implied_ids" eval="[(4, ref('hr.group_hr_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="group_hr_timesheet_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="base.module_category_hr_timesheet"/>
|
||||
<field name="implied_ids" eval="[(4, ref('hr_timesheet.group_hr_timesheet_user'))]"/>
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="base.default_user" model="res.users">
|
||||
<field name="groups_id" eval="[(4,ref('hr_timesheet.group_hr_timesheet_manager'))]"/>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -1,7 +1,7 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hr_account_analytic_line,account.account.analytic.line,account.model_account_analytic_line,hr.group_hr_user,1,1,1,1
|
||||
access_hr_account_analytic_line,account.account.analytic.line,account.model_account_analytic_line,hr_timesheet.group_hr_timesheet_user,1,1,1,1
|
||||
access_hr_account_analytic_line_employee,account.account.analytic.line employee,account.model_account_analytic_line,base.group_user,1,1,1,1
|
||||
access_product_product_user,product.product user,product.model_product_product,hr.group_hr_user,1,1,1,1
|
||||
access_product_template_hr_timesheet,product.template.hr.timesheet,product.model_product_template,hr.group_hr_user,1,1,1,1
|
||||
access_product_uom_hr_timesheet,product.uom.hr.timesheet,product.model_product_uom,hr.group_hr_user,1,1,1,1
|
||||
access_product_product_user,product.product user,product.model_product_product,hr_timesheet.group_hr_timesheet_user,1,1,1,1
|
||||
access_product_template_hr_timesheet,product.template.hr.timesheet,product.model_product_template,hr_timesheet.group_hr_timesheet_user,1,1,1,1
|
||||
access_product_uom_hr_timesheet,product.uom.hr.timesheet,product.model_product_uom,hr_timesheet.group_hr_timesheet_user,1,1,1,1
|
||||
access_account_analytic_line_user,account.analytic.line.user,model_account_analytic_line,base.group_user,1,1,1,0
|
||||
|
||||
|
@@ -10,7 +10,7 @@
|
||||
-
|
||||
!record {model: res.users, id: res_hr_timesheet_manager}:
|
||||
groups_id:
|
||||
- hr.group_hr_manager
|
||||
- hr_timesheet.group_hr_timesheet_manager
|
||||
-
|
||||
Create a user as 'HR timesheet Officer'
|
||||
-
|
||||
@@ -23,7 +23,7 @@
|
||||
-
|
||||
!record {model: res.users, id: res_hr_timesheet_officer}:
|
||||
groups_id:
|
||||
- hr.group_hr_user
|
||||
- hr_timesheet.group_hr_timesheet_user
|
||||
-
|
||||
Create a user as 'Timesheet Employee'
|
||||
-
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
name: HR Manager
|
||||
login: hr
|
||||
groups_id:
|
||||
- hr.group_hr_manager
|
||||
- hr_timesheet.group_hr_timesheet_manager
|
||||
-
|
||||
Create a product with type service used to specify employees designation
|
||||
-
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hr_timesheet_sheet_sheet_day,hr_timesheet_sheet.sheet.day,model_hr_timesheet_sheet_sheet_day,hr.group_hr_user,1,1,1,1
|
||||
access_hr_timesheet_sheet_sheet_day,hr_timesheet_sheet.sheet.day,model_hr_timesheet_sheet_sheet_day,hr_timesheet.group_hr_timesheet_user,1,1,1,1
|
||||
access_hr_timesheet_sheet_sheet_day_user,hr.timesheet.sheet.sheet.day.user,model_hr_timesheet_sheet_sheet_day,base.group_user,1,1,1,0
|
||||
access_hr_timesheet_attendance_report,access_hr_timesheet_attendance_report,model_hr_timesheet_attendance_report,hr.group_hr_manager,1,0,0,0
|
||||
access_hr_timesheet_attendance_report,access_hr_timesheet_attendance_report,model_hr_timesheet_attendance_report,hr_timesheet.group_hr_timesheet_manager,1,0,0,0
|
||||
|
||||
|
@@ -119,7 +119,7 @@ class HrTimesheetSheet(models.Model):
|
||||
|
||||
@api.multi
|
||||
def action_timesheet_draft(self):
|
||||
if not self.env.user.has_group('hr.group_hr_user'):
|
||||
if not self.env.user.has_group('hr_timesheet.group_hr_timesheet_user'):
|
||||
raise UserError(_('Only an HR Officer or Manager can refuse timesheets or reset them to draft.'))
|
||||
self.write({'state': 'draft'})
|
||||
return True
|
||||
@@ -134,7 +134,7 @@ class HrTimesheetSheet(models.Model):
|
||||
|
||||
@api.multi
|
||||
def action_timesheet_done(self):
|
||||
if not self.env.user.has_group('hr.group_hr_user'):
|
||||
if not self.env.user.has_group('hr_timesheet.group_hr_timesheet_user'):
|
||||
raise UserError(_('Only an HR Officer or Manager can approve timesheets.'))
|
||||
if self.filtered(lambda sheet: sheet.state != 'confirm'):
|
||||
raise UserError(_("Cannot approve a non-submitted timesheet."))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hr_timesheet_sheet_sheet_user,hr_timesheet_sheet.sheet.user,model_hr_timesheet_sheet_sheet,base.group_user,1,1,1,1
|
||||
access_hr_timesheet_sheet_sheet_system_employee,hr_timesheet_sheet.sheet.system.employee,model_hr_timesheet_sheet_sheet,base.group_user,1,1,1,0
|
||||
access_hr_timesheet_sheet_sheet_account,hr_timesheet_sheet.sheet.account,model_hr_timesheet_sheet_sheet_account,hr.group_hr_user,1,1,1,1
|
||||
access_hr_timesheet_sheet_sheet_account,hr_timesheet_sheet.sheet.account,model_hr_timesheet_sheet_sheet_account,hr_timesheet.group_hr_timesheet_user,1,1,1,1
|
||||
|
||||
|
@@ -5,6 +5,7 @@
|
||||
<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="groups_id" eval="[(4,ref('hr_timesheet.group_hr_timesheet_user'))]"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//templates" position="before">
|
||||
|
||||
@@ -58,9 +58,9 @@
|
||||
<form string="Timesheet">
|
||||
<header>
|
||||
<button name="action_timesheet_confirm" states="draft" string="Submit to Manager" type="object" class="oe_highlight"/>
|
||||
<button name="action_timesheet_done" states="confirm" string="Approve" type="object" groups="hr.group_hr_user" class="oe_highlight"/>
|
||||
<button name="action_timesheet_draft" states="done" string="Set to Draft" type="object" groups="hr.group_hr_user"/>
|
||||
<button name="action_timesheet_draft" states="confirm" string="Refuse" type="object" groups="hr.group_hr_user"/>
|
||||
<button name="action_timesheet_done" states="confirm" string="Approve" type="object" groups="hr_timesheet.group_hr_timesheet_user" class="oe_highlight"/>
|
||||
<button name="action_timesheet_draft" states="done" string="Set to Draft" type="object" groups="hr_timesheet.group_hr_timesheet_user"/>
|
||||
<button name="action_timesheet_draft" states="confirm" string="Refuse" type="object" groups="hr_timesheet.group_hr_timesheet_user"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="new,confirm,done"/>
|
||||
</header>
|
||||
<sheet>
|
||||
@@ -190,7 +190,7 @@
|
||||
<menuitem id="menu_hr_to_approve" name="To Approve" parent="hr_timesheet.timesheet_menu_root" sequence="7"/>
|
||||
|
||||
<menuitem action="act_hr_timesheet_sheet_form" id="menu_act_hr_timesheet_sheet_form" parent="menu_hr_to_approve"
|
||||
sequence="11" groups="hr.group_hr_user"/>
|
||||
sequence="11" groups="hr_timesheet.group_hr_timesheet_user"/>
|
||||
|
||||
<!--
|
||||
account.analytic.line inheritancy
|
||||
@@ -238,7 +238,7 @@
|
||||
type="action"
|
||||
class="oe_stat_button"
|
||||
icon="fa-clock-o"
|
||||
groups="hr.group_hr_manager">
|
||||
groups="hr_timesheet.group_hr_timesheet_manager">
|
||||
<field name="timesheet_count" widget="statinfo" string="Timesheets"/>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -76,6 +76,6 @@
|
||||
<field name="help">This report performs analysis on Payment Advices</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Reports" id="menu_l10n_in_hr_payroll_report" parent="hr_payroll.menu_hr_payroll_root" sequence="99" groups="hr.group_hr_manager"/>
|
||||
<menuitem name="Reports" id="menu_l10n_in_hr_payroll_report" parent="hr_payroll.menu_hr_payroll_root" sequence="99" groups="hr_payroll.group_hr_payroll_manager"/>
|
||||
<menuitem action="action_payment_advice_report_all" id="menu_reporting_payment_advice" parent="menu_l10n_in_hr_payroll_report" sequence="5" />
|
||||
</odoo>
|
||||
|
||||
@@ -74,13 +74,14 @@
|
||||
<field name="help">This report performs analysis on Payslip</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Reports" id="menu_l10n_in_hr_payroll_report" parent="hr_payroll.menu_hr_payroll_root" sequence="99" groups="hr.group_hr_manager"/>
|
||||
<menuitem action="action_payslip_report_all" id="menu_reporting_payslip" parent="menu_l10n_in_hr_payroll_report" sequence="5" groups="hr.group_hr_manager"/>
|
||||
<menuitem name="Reports" id="menu_l10n_in_hr_payroll_report" parent="hr_payroll.menu_hr_payroll_root" sequence="99" groups="hr_payroll.group_hr_payroll_manager"/>
|
||||
<menuitem action="action_payslip_report_all" id="menu_reporting_payslip" parent="menu_l10n_in_hr_payroll_report" sequence="5" groups="hr_payroll.group_hr_payroll_manager"/>
|
||||
<!--Hr Department Inherit Kanban view-->
|
||||
<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="groups_id" eval="[(4,ref('hr_payroll.group_hr_payroll_user'))]"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//div[contains(@class, 'manage_reports')]" position="inside">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_hr_payroll_advice_user","hr.payroll.advice","model_hr_payroll_advice","hr.group_hr_user",1,1,1,1
|
||||
"access_hr_payroll_advice_line_user","hr.payroll.advice.line","model_hr_payroll_advice_line","hr.group_hr_user",1,1,1,1
|
||||
"access_hr_payroll_advice_report_user","payment.advice.report","model_payment_advice_report","hr.group_hr_manager",1,1,1,1
|
||||
"access_hr_payroll_payslip_report_user","payslip.report","model_payslip_report","hr.group_hr_manager",1,1,1,1
|
||||
"access_hr_payroll_advice_user","hr.payroll.advice","model_hr_payroll_advice","hr_payroll.group_hr_payroll_user",1,1,1,1
|
||||
"access_hr_payroll_advice_line_user","hr.payroll.advice.line","model_hr_payroll_advice_line","hr_payroll.group_hr_payroll_user",1,1,1,1
|
||||
"access_hr_payroll_advice_report_user","payment.advice.report","model_payment_advice_report","hr_payroll.group_hr_payroll_manager",1,1,1,1
|
||||
"access_hr_payroll_payslip_report_user","payslip.report","model_payslip_report","hr_payroll.group_hr_payroll_manager",1,1,1,1
|
||||
|
||||
|
@@ -36,6 +36,6 @@
|
||||
sequence="200"
|
||||
action="action_salary_employee_month"
|
||||
id="menu_salary_employee_month"
|
||||
groups="hr.group_hr_manager,hr.group_hr_user"
|
||||
groups="hr_payroll.group_hr_payroll_manager,hr_payroll.group_hr_payroll_user"
|
||||
/>
|
||||
</odoo>
|
||||
|
||||
@@ -35,6 +35,6 @@
|
||||
action="action_yearly_salary_detail"
|
||||
sequence="250"
|
||||
id="menu_yearly_salary_detail"
|
||||
groups="hr.group_hr_manager,hr.group_hr_user"
|
||||
groups="hr_payroll.group_hr_payroll_manager,hr_payroll.group_hr_payroll_user"
|
||||
/>
|
||||
</odoo>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<field name="name">Job Positions: HR Officer</field>
|
||||
<field name="model_id" ref="hr.model_hr_job"/>
|
||||
<field name="domain_force">[(1, '=', 1)]</field>
|
||||
<field name="groups" eval="[(4, ref('hr.group_hr_user'))]"/>
|
||||
<field name="groups" eval="[(4, ref('hr_recruitment.group_hr_recruitment_user'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<div class="text-center text-muted">
|
||||
<h3 class="css_editable_hidden"><a t-attf-href="/page/website.contactus">Contact us</a> for job opportunities.</h3>
|
||||
<t groups="website.group_website_publisher">
|
||||
<h4 groups="hr.group_hr_manager">
|
||||
<h4 groups="hr_recruitment.group_hr_recruitment_manager">
|
||||
Create new job pages from the <strong><i>+New</i></strong> top-right button.
|
||||
</h4>
|
||||
</t>
|
||||
@@ -467,7 +467,7 @@
|
||||
<!-- User Navbar -->
|
||||
<template id="content_new_job_offer" inherit_id="website.user_navbar">
|
||||
<xpath expr="//div[@id='o_website_add_page_modal']//ul" position="inside">
|
||||
<li groups="hr.group_hr_manager"><a href="/jobs/add" class="js_link2post"><i class="fa fa-briefcase"/><p>New Job Offer</p></a></li>
|
||||
<li groups="hr_recruitment.group_hr_recruitment_manager"><a href="/jobs/add" class="js_link2post"><i class="fa fa-briefcase"/><p>New Job Offer</p></a></li>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -67,20 +67,68 @@
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_human_resources">
|
||||
<field name="name">Human Resources</field>
|
||||
<field name="description">Helps you manage your human resources by encoding your employees structure, generating work sheets, tracking attendance and more.</field>
|
||||
<field name="name">Employees</field>
|
||||
<field name="description">Helps you manage your employees.</field>
|
||||
<field name="sequence">9</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_hr_holidays">
|
||||
<field name="name">Holidays</field>
|
||||
<field name="description">Helps you manage your holidays.</field>
|
||||
<field name="sequence">10</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_hr_recruitment">
|
||||
<field name="name">Recruitment</field>
|
||||
<field name="description">Helps you manage your recruitments.</field>
|
||||
<field name="sequence">11</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_hr_expense">
|
||||
<field name="name">Expenses</field>
|
||||
<field name="description">Helps you manage your expenses.</field>
|
||||
<field name="sequence">12</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_hr_timesheet">
|
||||
<field name="name">Timesheets</field>
|
||||
<field name="description">Helps you manage the timesheets.</field>
|
||||
<field name="sequence">13</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_hr_attendance">
|
||||
<field name="name">Attendance</field>
|
||||
<field name="description">Helps you manage the attendances.</field>
|
||||
<field name="sequence">14</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_hr_appraisal">
|
||||
<field name="name">Appraisals</field>
|
||||
<field name="description">Helps you manage your appraisals.</field>
|
||||
<field name="sequence">15</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_hr_payroll">
|
||||
<field name="name">Payroll</field>
|
||||
<field name="description">Helps you manage your payrolls.</field>
|
||||
<field name="sequence">16</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_hr_gamification">
|
||||
<field name="name">Gamification</field>
|
||||
<field name="description">Helps you manage the gamification process.</field>
|
||||
<field name="sequence">17</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_event_management">
|
||||
<field name="name">Events</field>
|
||||
<field name="description">Helps you manage your Events.</field>
|
||||
<field name="sequence">10</field>
|
||||
<field name="sequence">18</field>
|
||||
</record>
|
||||
|
||||
<record id="module_category_mass_mailing" model="ir.module.category">
|
||||
<field name="name">Mass Mailing</field>
|
||||
<field name="sequence">11</field>
|
||||
<field name="sequence">19</field>
|
||||
<field name="description">Helps you manage your mass mailing for design
|
||||
professional emails and reuse templates.</field>
|
||||
</record>
|
||||
@@ -88,28 +136,28 @@
|
||||
<record id="module_category_survey" model="ir.module.category">
|
||||
<field name="name">Survey</field>
|
||||
<field name="description">Helps you manage your survey for review of different-different users.</field>
|
||||
<field name="sequence">12</field>
|
||||
<field name="sequence">20</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_point_of_sale">
|
||||
<field name="name">Point of Sale</field>
|
||||
<field name="description">Helps you get the most out of your points of sales with fast sale encoding, simplified payment mode encoding, automatic picking lists generation and more.</field>
|
||||
<field name="sequence">13</field>
|
||||
<field name="sequence">21</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_specific_industry_applications">
|
||||
<field name="name">Specific Industry Applications</field>
|
||||
<field name="sequence">14</field>
|
||||
<field name="sequence">22</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_website">
|
||||
<field name="name">Website</field>
|
||||
<field name="sequence">15</field>
|
||||
<field name="sequence">23</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_theme">
|
||||
<field name="name">Theme</field>
|
||||
<field name="sequence">16</field>
|
||||
<field name="sequence">50</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_administration">
|
||||
|
||||
Reference in New Issue
Block a user