diff options
64 files changed, 323 insertions, 361 deletions
diff --git a/addons/account/__manifest__.py b/addons/account/__manifest__.py index 89b3fdbc8be..4514659c9d9 100644 --- a/addons/account/__manifest__.py +++ b/addons/account/__manifest__.py @@ -12,7 +12,7 @@ The specific and easy-to-use Invoicing system in Odoo allows you to keep track o You could use this simplified accounting in case you work with an (external) account to keep your books, and you still want to keep track of payments. This module also offers you an easy method of registering payments, without having to encode complete abstracts of account. """, - 'category': 'Invoicing', + 'category': 'Accounting/Invoicing', 'website': 'https://www.odoo.com/page/billing', 'images' : ['images/accounts.jpeg','images/bank_statement.jpeg','images/cash_register.jpeg','images/chart_of_accounts.jpeg','images/customer_invoice.jpeg','images/journal_entries.jpeg'], 'depends' : ['base_setup', 'product', 'analytic', 'portal', 'digest'], diff --git a/addons/account/security/account_security.xml b/addons/account/security/account_security.xml index 69f3fca8bc8..df21d0861d1 100644 --- a/addons/account/security/account_security.xml +++ b/addons/account/security/account_security.xml @@ -2,9 +2,14 @@ <odoo> <data noupdate="0"> + <record model="ir.module.category" id="base.module_category_accounting_invoicing"> + <field name="description">Helps you handle your accounting needs, if you are not an accountant, we suggest you to install only the Invoicing.</field> + <field name="sequence">7</field> + </record> + <record id="group_account_invoice" model="res.groups"> <field name="name">Billing</field> - <field name="category_id" ref="base.module_category_accounting_and_finance"/> + <field name="category_id" ref="base.module_category_accounting_invoicing"/> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> </record> @@ -38,8 +43,8 @@ </record> <record id="group_account_manager" model="res.groups"> - <field name="name">Billing Manager</field> - <field name="category_id" ref="base.module_category_accounting_and_finance"/> + <field name="name">Billing Administrator</field> + <field name="category_id" ref="base.module_category_accounting_invoicing"/> <field name="implied_ids" eval="[(4, ref('group_account_invoice'))]"/> </record> diff --git a/addons/crm/__manifest__.py b/addons/crm/__manifest__.py index 61b2e19d0a0..4b25fb7538e 100644 --- a/addons/crm/__manifest__.py +++ b/addons/crm/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'CRM', 'version': '1.0', - 'category': 'Sales', + 'category': 'Sales/CRM', 'sequence': 5, 'summary': 'Track leads and close opportunities', 'description': "", diff --git a/addons/event/__manifest__.py b/addons/event/__manifest__.py index a726ca2558b..ad7ff430dcc 100644 --- a/addons/event/__manifest__.py +++ b/addons/event/__manifest__.py @@ -3,7 +3,7 @@ 'name': 'Events Organization', 'version': '1.0', 'website': 'https://www.odoo.com/page/events', - 'category': 'Marketing', + 'category': 'Marketing/Events', 'summary': 'Trainings, Conferences, Meetings, Exhibitions, Registrations', 'description': """ Organization and management of Events. diff --git a/addons/event/security/event_security.xml b/addons/event/security/event_security.xml index 6694b0ff6b7..cf87135ddbe 100644 --- a/addons/event/security/event_security.xml +++ b/addons/event/security/event_security.xml @@ -1,15 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> <data noupdate="0"> + <record model="ir.module.category" id="base.module_category_marketing_events"> + <field name="description">Helps you manage your Events.</field> + <field name="sequence">18</field> + </record> + <record id="group_event_user" model="res.groups"> <field name="name">User</field> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> - <field name="category_id" ref="base.module_category_event_management"/> + <field name="category_id" ref="base.module_category_marketing_events"/> </record> <record id="group_event_manager" model="res.groups"> - <field name="name">Manager</field> - <field name="category_id" ref="base.module_category_event_management"/> + <field name="name">Administrator</field> + <field name="category_id" ref="base.module_category_marketing_events"/> <field name="implied_ids" eval="[(4, ref('group_event_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/fleet/__manifest__.py b/addons/fleet/__manifest__.py index 0a874e3bda9..a61d2508b9d 100644 --- a/addons/fleet/__manifest__.py +++ b/addons/fleet/__manifest__.py @@ -4,7 +4,7 @@ 'name' : 'Fleet', 'version' : '0.1', 'sequence': 165, - 'category': 'Human Resources', + 'category': 'Human Resources/Fleet', 'website' : 'https://www.odoo.com/page/fleet', 'summary' : 'Manage your fleet and track car costs', 'description' : """ diff --git a/addons/fleet/security/fleet_security.xml b/addons/fleet/security/fleet_security.xml index 29777a1ab47..60580ef46ee 100644 --- a/addons/fleet/security/fleet_security.xml +++ b/addons/fleet/security/fleet_security.xml @@ -6,13 +6,13 @@ </record> <record id="fleet_group_user" model="res.groups"> <field name="name">User</field> - <field name="category_id" ref="module_fleet_category"/> + <field name="category_id" ref="base.module_category_human_resources_fleet"/> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> </record> <record id="fleet_group_manager" model="res.groups"> - <field name="name">Manager</field> + <field name="name">Administrator</field> <field name="implied_ids" eval="[(4, ref('fleet_group_user'))]"/> - <field name="category_id" ref="module_fleet_category"/> + <field name="category_id" ref="base.module_category_human_resources_fleet"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> @@ -81,32 +81,32 @@ <field name="domain_force">[('driver_id','=',user.partner_id.id)]</field> </record> <record id="fleet_rule_contract_visibility_manager" model="ir.rule"> - <field name="name">Manager has all rights on vehicle's contracts</field> + <field name="name">Administrator has all rights on vehicle's contracts</field> <field name="model_id" ref="model_fleet_vehicle_log_contract"/> <field name="groups" eval="[(4, ref('fleet_group_manager'))]"/> </record> <record id="fleet_rule_cost_visibility_manager" model="ir.rule"> - <field name="name">Manager has all rights on vehicle's costs</field> + <field name="name">Administrator has all rights on vehicle's costs</field> <field name="model_id" ref="model_fleet_vehicle_cost"/> <field name="groups" eval="[(4, ref('fleet_group_manager'))]"/> </record> <record id="fleet_rule_service_visibility_manager" model="ir.rule"> - <field name="name">Manager has all rights on vehicle's services</field> + <field name="name">Administrator has all rights on vehicle's services</field> <field name="model_id" ref="model_fleet_vehicle_log_services"/> <field name="groups" eval="[(4, ref('fleet_group_manager'))]"/> </record> <record id="fleet_rule_odometer_visibility_manager" model="ir.rule"> - <field name="name">Manager has all rights on vehicle's vehicle's odometer</field> + <field name="name">Administrator has all rights on vehicle's vehicle's odometer</field> <field name="model_id" ref="model_fleet_vehicle_odometer"/> <field name="groups" eval="[(4, ref('fleet_group_manager'))]"/> </record> <record id="fleet_rule_fuel_log_visibility_manager" model="ir.rule"> - <field name="name">Manager has all rights on vehicle's fuel log</field> + <field name="name">Administrator has all rights on vehicle's fuel log</field> <field name="model_id" ref="model_fleet_vehicle_log_fuel"/> <field name="groups" eval="[(4, ref('fleet_group_manager'))]"/> </record> <record id="fleet_rule_vehicle_visibility_manager" model="ir.rule"> - <field name="name">Manager has all rights on vehicle</field> + <field name="name">Administrator has all rights on vehicle</field> <field name="model_id" ref="model_fleet_vehicle"/> <field name="groups" eval="[(4, ref('fleet_group_manager'))]"/> </record> diff --git a/addons/hr/__manifest__.py b/addons/hr/__manifest__.py index edac09aa6f5..7e8c5c61126 100644 --- a/addons/hr/__manifest__.py +++ b/addons/hr/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Employees', 'version': '1.1', - 'category': 'Human Resources', + 'category': 'Human Resources/Employees', 'sequence': 75, 'summary': 'Centralize employee information', 'description': "", diff --git a/addons/hr/security/hr_security.xml b/addons/hr/security/hr_security.xml index aa08e5f0762..8d435e67463 100644 --- a/addons/hr/security/hr_security.xml +++ b/addons/hr/security/hr_security.xml @@ -1,17 +1,22 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> + <record id="base.module_category_human_resources_employees" model="ir.module.category"> + <field name="description">Helps you manage your employees.</field> + <field name="sequence">9</field> + </record> + <record id="group_hr_user" model="res.groups"> <field name="name">Officer</field> - <field name="category_id" ref="base.module_category_human_resources"/> + <field name="category_id" ref="base.module_category_human_resources_employees"/> <field name="implied_ids" eval="[(6, 0, [ref('base.group_private_addresses'), ref('base.group_user')])]"/> <field name="comment">The user will be able to approve document created by employees.</field> </record> <record id="group_hr_manager" model="res.groups"> - <field name="name">Manager</field> + <field name="name">Administrator</field> <field name="comment">The user will have access to the human resources configuration as well as statistic reports.</field> - <field name="category_id" ref="base.module_category_human_resources"/> + <field name="category_id" ref="base.module_category_human_resources_employees"/> <field name="implied_ids" eval="[(4, ref('group_hr_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/hr_attendance/__manifest__.py b/addons/hr_attendance/__manifest__.py index c9f67beadd8..e66f320371f 100644 --- a/addons/hr_attendance/__manifest__.py +++ b/addons/hr_attendance/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Attendances', 'version': '2.0', - 'category': 'Human Resources', + 'category': 'Human Resources/Attendances', 'sequence': 81, 'summary': 'Track employee attendance', 'description': """ diff --git a/addons/hr_attendance/security/hr_attendance_security.xml b/addons/hr_attendance/security/hr_attendance_security.xml index e5b99ce9928..ade106bb139 100644 --- a/addons/hr_attendance/security/hr_attendance_security.xml +++ b/addons/hr_attendance/security/hr_attendance_security.xml @@ -1,22 +1,26 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> + <record model="ir.module.category" id="base.module_category_human_resources_attendances"> + <field name="description">Helps you manage the attendances.</field> + <field name="sequence">14</field> + </record> <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="category_id" ref="base.module_category_human_resources_attendances"/> <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="name">Administrator</field> + <field name="category_id" ref="base.module_category_human_resources_attendances"/> <field name="implied_ids" eval="[(4, ref('hr_attendance.group_hr_attendance_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> <record id="group_hr_attendance" model="res.groups"> <field name="name">Manual Attendance</field> - <field name="category_id" ref="base.module_category_hr_attendance"/> + <field name="category_id" ref="base.module_category_human_resources_attendances"/> <field name="comment">The user will gain access to the human resources attendance menu, enabling him to manage his own attendance.</field> </record> diff --git a/addons/hr_contract/__manifest__.py b/addons/hr_contract/__manifest__.py index 1e29b42238a..1d51ac0b9ca 100644 --- a/addons/hr_contract/__manifest__.py +++ b/addons/hr_contract/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Employee Contracts', 'version': '1.0', - 'category': 'Human Resources', + 'category': 'Human Resources/Contracts', 'description': """ Add all information on the employee form to manage contracts. ============================================================= diff --git a/addons/hr_contract/security/security.xml b/addons/hr_contract/security/security.xml index 1e4cd3a829f..f189e67f0f3 100644 --- a/addons/hr_contract/security/security.xml +++ b/addons/hr_contract/security/security.xml @@ -1,9 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> <data noupdate="1"> + <record model="ir.module.category" id="base.module_category_human_resources_contracts"> + <field name="description">Helps you manage your contracts.</field> + <field name="sequence">10</field> + </record> + <record id="hr_contract.group_hr_contract_manager" model="res.groups"> - <field name="name">Manager</field> - <field name="category_id" ref="base.module_category_hr_contract"/> + <field name="name">Administrator</field> + <field name="category_id" ref="base.module_category_human_resources_contracts"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/hr_expense/__manifest__.py b/addons/hr_expense/__manifest__.py index 1bbd090d7a8..fc59b584152 100644 --- a/addons/hr_expense/__manifest__.py +++ b/addons/hr_expense/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Expenses', 'version': '2.0', - 'category': 'Human Resources', + 'category': 'Accounting/Expenses', 'sequence': 95, 'summary': 'Submit, validate and reinvoice employee expenses', 'description': """ diff --git a/addons/hr_expense/models/hr_employee.py b/addons/hr_expense/models/hr_employee.py index 085e50fc555..0e760a6cca4 100644 --- a/addons/hr_expense/models/hr_employee.py +++ b/addons/hr_expense/models/hr_employee.py @@ -14,13 +14,13 @@ class Employee(models.Model): # reads the related field `expense_manager_id` of `res.users` and retrieve its domain. # This is a problem because the `group_hr_expense_user` record has already been created but # not its associated `ir.model.data` which makes `self.env.ref(...)` fail. - group = self.env.ref('hr_expense.group_hr_expense_user', raise_if_not_found=False) + group = self.env.ref('hr_expense.group_hr_expense_team_approver', raise_if_not_found=False) return [('groups_id', 'in', group.ids)] if group else [] expense_manager_id = fields.Many2one( 'res.users', string='Expense Responsible', domain=_group_hr_expense_user_domain, - help="User responsible of expense approval. Should be Expense Manager.") + help="User responsible of expense approval. Should be Expense approver.") @api.onchange('parent_id') def _onchange_parent_id(self): diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py index 2666a9d01ad..b0a8c584c67 100644 --- a/addons/hr_expense/models/hr_expense.py +++ b/addons/hr_expense/models/hr_expense.py @@ -33,12 +33,12 @@ class HrExpense(models.Model): def _get_employee_id_domain(self): res= [('id', '=', 0)] # Nothing accepted by domain, by default - if self.user_has_groups('hr_expense.group_hr_expense_manager') or self.user_has_groups('account.group_account_user'): + if self.user_has_groups('hr_expense.group_hr_expense_user') or self.user_has_groups('account.group_account_user'): res = [] # Then, domain accepts everything - elif self.user_has_groups('hr_expense.group_hr_expense_user') and self.env.user.employee_ids: + elif self.user_has_groups('hr_expense.group_hr_expense_team_approver') and self.env.user.employee_ids: employee = self.env.user.employee_ids[0] - res = ['|', '|', ('department_id.manager_id.id', '=', employee.id), - ('parent_id.id', '=', employee.id), ('expense_manager_id.id', '=', employee.id)] + res = ['|', '|', '|', ('department_id.manager_id.id', '=', employee.id), + ('parent_id.id', '=', employee.id), ('expense_manager_id.id', '=', employee.user_id.id), ('id', '=', employee.id)] elif self.env.user.employee_ids: employee = self.env.user.employee_ids[0] res = [('id', '=', employee.id)] @@ -623,7 +623,7 @@ class HrExpenseSheet(models.Model): @api.multi def _compute_can_reset(self): - is_expense_user = self.user_has_groups('hr_expense.group_hr_expense_user') + is_expense_user = self.user_has_groups('hr_expense.group_hr_expense_team_approver') for sheet in self: sheet.can_reset = is_expense_user if is_expense_user else sheet.employee_id.user_id == self.env.user @@ -737,15 +737,15 @@ class HrExpenseSheet(models.Model): @api.multi def approve_expense_sheets(self): - if not self.user_has_groups('hr_expense.group_hr_expense_user'): + if not self.user_has_groups('hr_expense.group_hr_expense_team_approver'): raise UserError(_("Only Managers and HR Officers can approve expenses")) elif not self.user_has_groups('hr_expense.group_hr_expense_manager'): - current_managers = self.employee_id.parent_id.user_id | self.employee_id.department_id.manager_id.user_id + current_managers = self.employee_id.expense_manager_id | self.employee_id.parent_id.user_id | self.employee_id.department_id.manager_id.user_id if self.employee_id.user_id == self.env.user: raise UserError(_("You cannot approve your own expenses")) - if not self.env.user in current_managers: + if not self.env.user in current_managers and not self.user_has_groups('hr_expense.group_hr_expense_user') and self.employee_id.expense_manager_id != self.env.user: raise UserError(_("You can only approve your department expenses")) responsible_id = self.user_id.id or self.env.user.id @@ -758,15 +758,15 @@ class HrExpenseSheet(models.Model): @api.multi def refuse_sheet(self, reason): - if not self.user_has_groups('hr_expense.group_hr_expense_user'): + if not self.user_has_groups('hr_expense.group_hr_expense_team_approver'): raise UserError(_("Only Managers and HR Officers can approve expenses")) elif not self.user_has_groups('hr_expense.group_hr_expense_manager'): - current_managers = self.employee_id.parent_id.user_id | self.employee_id.department_id.manager_id.user_id + current_managers = self.employee_id.expense_manager_id | self.employee_id.parent_id.user_id | self.employee_id.department_id.manager_id.user_id if self.employee_id.user_id == self.env.user: raise UserError(_("You cannot refuse your own expenses")) - if not self.env.user in current_managers: + if not self.env.user in current_managers and not self.user_has_groups('hr_expense.group_hr_expense_user') and self.employee_id.expense_manager_id != self.env.user: raise UserError(_("You can only refuse your department expenses")) self.write({'state': 'cancel'}) diff --git a/addons/hr_expense/security/hr_expense_security.xml b/addons/hr_expense/security/hr_expense_security.xml index 31809dbf201..a36c60a048f 100644 --- a/addons/hr_expense/security/hr_expense_security.xml +++ b/addons/hr_expense/security/hr_expense_security.xml @@ -1,14 +1,25 @@ <?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"/> + <record model="ir.module.category" id="base.module_category_accounting_expenses"> + <field name="description">Helps you manage your expenses.</field> + <field name="sequence">12</field> + </record> + + <record id="group_hr_expense_team_approver" model="res.groups"> + <field name="name">Team Approver</field> + <field name="category_id" ref="base.module_category_accounting_expenses"/> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> </record> + <record id="group_hr_expense_user" model="res.groups"> + <field name="name">All Approver</field> + <field name="category_id" ref="base.module_category_accounting_expenses"/> + <field name="implied_ids" eval="[(4, ref('hr_expense.group_hr_expense_team_approver'))]"/> + </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="name">Administrator</field> + <field name="category_id" ref="base.module_category_accounting_expenses"/> <field name="implied_ids" eval="[(4, ref('hr_expense.group_hr_expense_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> @@ -16,4 +27,4 @@ <record id="base.default_user" model="res.users"> <field name="groups_id" eval="[(4,ref('hr_expense.group_hr_expense_manager'))]"/> </record> -</odoo>
\ No newline at end of file +</odoo> diff --git a/addons/hr_expense/security/ir.model.access.csv b/addons/hr_expense/security/ir.model.access.csv index f2d58d25114..238dd2e4845 100644 --- a/addons/hr_expense/security/ir.model.access.csv +++ b/addons/hr_expense/security/ir.model.access.csv @@ -1,19 +1,19 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_hr_expense_employee,hr.expense.employee,model_hr_expense,base.group_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_hr_expense_user,hr.expense.user,model_hr_expense,hr_expense.group_hr_expense_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_user,hr.expense.user,model_hr_expense,hr_expense.group_hr_expense_team_approver,1,1,1,1
+access_hr_expense_sheet_user,hr.expense.sheet.user,model_hr_expense_sheet,hr_expense.group_hr_expense_team_approver,1,1,1,1
access_hr_expense_manager,hr.expense.manager,model_hr_expense,hr_expense.group_hr_expense_manager,1,1,1,1
access_hr_expense_sheet_manager,hr.expense.sheet.manager,model_hr_expense_sheet,hr_expense.group_hr_expense_manager,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_uom_uom_hr_expense_user,uom.uom.hr.expense.user,uom.model_uom_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_product_product_hr_expense_user,product.product.hr.expense.user,product.model_product_product,hr_expense.group_hr_expense_team_approver,1,1,1,1
+access_product_template_hr_expense_user,product.template.hr.expense.user,product.model_product_template,hr_expense.group_hr_expense_team_approver,1,1,1,1
+access_uom_uom_hr_expense_user,uom.uom.hr.expense.user,uom.model_uom_uom,hr_expense.group_hr_expense_team_approver,1,1,1,1
+access_account_journal_user,account.journal.user,account.model_account_journal,hr_expense.group_hr_expense_team_approver,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_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
+access_account_invoice_user,account.invoice.user,account.model_account_invoice,hr_expense.group_hr_expense_team_approver,1,1,1,1
+access_account_invoice_line_user,account.invoice.line.user,account.model_account_invoice_line,hr_expense.group_hr_expense_team_approver,1,1,1,1
+access_account_invoice_tax_user,account.invoice.tax.user,account.model_account_invoice_tax,hr_expense.group_hr_expense_team_approver,1,0,0,0
+access_account_move_user,account.move.user,account.model_account_move,hr_expense.group_hr_expense_team_approver,1,0,0,0
+access_account_move_line_user,account.move.line.user,account.model_account_move_line,hr_expense.group_hr_expense_team_approver,1,0,0,0
+access_account_analytic_line_user,account.analytic.line.user,account.model_account_analytic_line,hr_expense.group_hr_expense_team_approver,1,1,1,1
access_mail_activity_type_expense_user,mail.activity.type.expense.user,mail.model_mail_activity_type,hr_expense.group_hr_expense_manager,1,1,1,1
diff --git a/addons/hr_expense/security/ir_rule.xml b/addons/hr_expense/security/ir_rule.xml index 5836c97b83a..51a3a8d641d 100644 --- a/addons/hr_expense/security/ir_rule.xml +++ b/addons/hr_expense/security/ir_rule.xml @@ -1,24 +1,23 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> <data noupdate="1"> - <record id="ir_rule_hr_expense_manager" model="ir.rule"> <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_expense.group_hr_expense_manager'))]"/> + (4, ref('hr_expense.group_hr_expense_user'))]"/> </record> - <record id="ir_rule_hr_expense_user" model="ir.rule"> - <field name="name">Officer Expense</field> + <record id="ir_rule_hr_expense_approver" model="ir.rule"> + <field name="name">Team Approver Expense</field> <field name="model_id" ref="model_hr_expense"/> <field name="domain_force">['|', '|', '|', - ('employee_id.user_id.id', '=', user.id), - ('employee_id.department_id.manager_id.user_id.id', '=', user.id), - ('employee_id.parent_id.user_id.id', '=', user.id), - ('employee_id.expense_manager_id.id', '=', user.id)]</field> - <field name="groups" eval="[(4, ref('hr_expense.group_hr_expense_user'))]"/> + ('employee_id.user_id', '=', user.id), + ('employee_id.department_id.manager_id.user_id', '=', user.id), + ('employee_id.parent_id.user_id', '=', user.id), + ('employee_id.expense_manager_id', '=', user.id)]</field> + <field name="groups" eval="[(4, ref('hr_expense.group_hr_expense_team_approver'))]"/> </record> <record id="ir_rule_hr_expense_employee" model="ir.rule"> <field name="name">Employee Expense</field> @@ -33,17 +32,17 @@ <field name="domain_force">[(1, '=', 1)]</field> <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="ir_rule_hr_expense_sheet_user" model="ir.rule"> - <field name="name">Officer Expense Sheet</field> + <record id="ir_rule_hr_expense_sheet_approver" model="ir.rule"> + <field name="name">Approver Expense Sheet</field> <field name="model_id" ref="model_hr_expense_sheet"/> <field name="domain_force">['|', '|', '|', - ('employee_id.user_id.id', '=', user.id), - ('employee_id.department_id.manager_id.user_id.id', '=', user.id), - ('employee_id.parent_id.user_id.id', '=', user.id), - ('employee_id.expense_manager_id.id', '=', user.id)]</field> - <field name="groups" eval="[(4, ref('hr_expense.group_hr_expense_user'))]"/> + ('employee_id.user_id', '=', user.id), + ('employee_id.department_id.manager_id.user_id', '=', user.id), + ('employee_id.parent_id.user_id', '=', user.id), + ('employee_id.expense_manager_id', '=', user.id)]</field> + <field name="groups" eval="[(4, ref('hr_expense.group_hr_expense_team_approver'))]"/> </record> <record id="ir_rule_hr_expense_sheet_employee" model="ir.rule"> <field name="name">Employee Expense Sheet</field> diff --git a/addons/hr_expense/tests/common.py b/addons/hr_expense/tests/common.py index 0a6a6cb838d..7c40688db48 100644 --- a/addons/hr_expense/tests/common.py +++ b/addons/hr_expense/tests/common.py @@ -74,7 +74,7 @@ class TestExpenseCommon(TestAccountNoChartCommon): 'name': 'Batman Officer', 'login': 'batman', 'email': 'batman.hero@example.com', - 'groups_id': [(6, 0, [group_employee_id, cls.env.ref('hr_expense.group_hr_expense_user').id])] + 'groups_id': [(6, 0, [group_employee_id, cls.env.ref('hr_expense.group_hr_expense_team_approver').id])] }) cls.emp_emp2 = cls.env['hr.employee'].create({ diff --git a/addons/hr_expense/views/hr_department_views.xml b/addons/hr_expense/views/hr_department_views.xml index d8d007668f1..b603ee9b776 100644 --- a/addons/hr_expense/views/hr_department_views.xml +++ b/addons/hr_expense/views/hr_department_views.xml @@ -4,7 +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="groups_id" eval="[(4,ref('hr_expense.group_hr_expense_team_approver'))]"/> <field name="arch" type="xml"> <data> <xpath expr="//templates" position="before"> diff --git a/addons/hr_expense/views/hr_expense_views.xml b/addons/hr_expense/views/hr_expense_views.xml index 784bec11e23..5f5dd91bb66 100644 --- a/addons/hr_expense/views/hr_expense_views.xml +++ b/addons/hr_expense/views/hr_expense_views.xml @@ -90,7 +90,7 @@ <field name="reference"/> <field name="date"/> <field name="account_id" domain="[('internal_type', '=', 'other')]" groups="account.group_account_user"/> - <field name="employee_id" groups="hr_expense.group_hr_expense_user"/> + <field name="employee_id" groups="hr_expense.group_hr_expense_team_approver"/> <field name="sheet_id" invisible="1"/> <field name="currency_id" groups="base.group_multi_currency"/> <field name="analytic_account_id" groups="analytic.group_analytic_accounting"/> @@ -208,7 +208,7 @@ <field name="employee_id"/> <field name="product_id"/> <field name="analytic_account_id" groups="analytic.group_analytic_accounting"/> - <filter string="My Team Expenses" name="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 Team Expenses" name="my_team_expenses" domain="[('employee_id.parent_id.user_id', '=', uid)]" groups="hr_expense.group_hr_expense_team_approver" help="Expenses of Your Team Member"/> <filter string="My Expenses" name="my_expenses" domain="[('employee_id.user_id', '=', uid)]"/> <separator /> <filter domain="[('sheet_id', '=', False)]" string="To report" name="no_report"/> @@ -451,11 +451,11 @@ <field name="can_reset" invisible="1"/> <header> <button name="action_submit_sheet" states="draft" string="Submit to Manager" type="object" class="oe_highlight o_expense_sheet_submit"/> - <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="approve_expense_sheets" states="submit" string="Approve" type="object" groups="hr_expense.group_hr_expense_team_approver" 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_manager" class="oe_highlight o_expense_sheet_post"/> <button name="%(hr_expense.hr_expense_sheet_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_manager"/> <button name="reset_expense_sheets" string="Reset to Draft" type="object" attrs="{'invisible': ['|', ('can_reset', '=', False), ('state', 'not in', ['submit', 'cancel'])]}"/> - <button name="%(hr_expense.hr_expense_refuse_wizard_action)d" states="submit,approve" context="{'hr_expense_refuse_model':'hr.expense.sheet'}" string="Refuse" type="action" groups="hr_expense.group_hr_expense_user" /> + <button name="%(hr_expense.hr_expense_refuse_wizard_action)d" states="submit,approve" context="{'hr_expense_refuse_model':'hr.expense.sheet'}" string="Refuse" type="action" groups="hr_expense.group_hr_expense_team_approver" /> <field name="state" widget="statusbar" statusbar_visible="draft,submit,approve,post,done"/> </header> <sheet> @@ -811,7 +811,7 @@ if records: <menuitem id="menu_hr_expense_my_expenses_to_submit" sequence="1" parent="menu_hr_expense_my_expenses" action="hr_expense_actions_my_unsubmitted"/> <menuitem id="menu_hr_expense_sheet_my_reports" sequence="3" parent="menu_hr_expense_my_expenses" action="action_hr_expense_sheet_my_all"/> - <menuitem id="menu_hr_expense_report" name="Expense Reports" sequence="2" parent="menu_hr_expense_root" groups="hr_expense.group_hr_expense_user"/> + <menuitem id="menu_hr_expense_report" name="Expense Reports" sequence="2" parent="menu_hr_expense_root" groups="hr_expense.group_hr_expense_team_approver"/> <menuitem id="menu_hr_expense_sheet_all_to_approve" name="To Approve" sequence="1" parent="menu_hr_expense_report" action="action_hr_expense_sheet_all_to_approve"/> <menuitem id="menu_hr_expense_sheet_all_to_post" name="To Post" sequence="2" parent="menu_hr_expense_report" diff --git a/addons/hr_holidays/__manifest__.py b/addons/hr_holidays/__manifest__.py index 50f3d79f826..cc325726348 100644 --- a/addons/hr_holidays/__manifest__.py +++ b/addons/hr_holidays/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Time Off', 'version': '1.5', - 'category': 'Human Resources', + 'category': 'Human Resources/Time Off', 'summary': 'Allocate time off and follow time off requests', 'website': 'https://www.odoo.com/page/leaves', 'description': """ diff --git a/addons/hr_holidays/models/hr_leave.py b/addons/hr_holidays/models/hr_leave.py index be18aaa71d6..dc5932a1145 100644 --- a/addons/hr_holidays/models/hr_leave.py +++ b/addons/hr_holidays/models/hr_leave.py @@ -530,7 +530,7 @@ class HolidaysRequest(models.Model): return current_employee = self.env['hr.employee'].sudo().search([('user_id', '=', self.env.uid)], limit=1) for record in self: - emp_id = (record._cache.get('employee_id', [False]) or [False])[0] + emp_id = record._cache.get('employee_id', [False])[0] if emp_id != current_employee.id: try: record._cache['name'] diff --git a/addons/hr_holidays/security/hr_holidays_security.xml b/addons/hr_holidays/security/hr_holidays_security.xml index df7317fa5d2..6e893f62d85 100644 --- a/addons/hr_holidays/security/hr_holidays_security.xml +++ b/addons/hr_holidays/security/hr_holidays_security.xml @@ -1,20 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> + <record model="ir.module.category" id="base.module_category_human_resources_time_off"> + <field name="description">Helps you manage your time off.</field> + <field name="sequence">10</field> + </record> <record id="group_hr_holidays_team_leader" model="res.groups"> - <field name="name">Team Leader</field> - <field name="category_id" ref="base.module_category_hr_holidays"/> + <field name="name">Team Approver</field> + <field name="category_id" ref="base.module_category_human_resources_time_off"/> </record> <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="name">All Approver</field> + <field name="category_id" ref="base.module_category_human_resources_time_off"/> <field name="implied_ids" eval="[(4, ref('hr.group_hr_user')), (4, ref('group_hr_holidays_team_leader'))]"/> </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="name">Administrator</field> + <field name="category_id" ref="base.module_category_human_resources_time_off"/> <field name="implied_ids" eval="[(4, ref('hr_holidays.group_hr_holidays_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> @@ -42,7 +46,7 @@ </record> <record id="hr_leave_rule_team_leader_update" model="ir.rule"> - <field name="name">Time Off: Team Leader: write on employee's time off in his team</field> + <field name="name">Time Off: approver: write on employee's time off in his team</field> <field name="model_id" ref="model_hr_leave"/> <field name="domain_force">[('employee_id.leave_manager_id', '=' , user.id)]</field> <field name="perm_read" eval="False"/> @@ -52,7 +56,7 @@ </record> <record id="hr_leave_rule_officer_read" model="ir.rule"> - <field name="name">Time Off: officer: read all</field> + <field name="name">Time Off: see all time off: read all</field> <field name="model_id" ref="model_hr_leave"/> <field name="domain_force">[(1, '=', 1)]</field> <field name="perm_create" eval="False"/> @@ -62,7 +66,7 @@ </record> <record id="hr_leave_rule_officer_update" model="ir.rule"> - <field name="name">Time Off: officer: create/write/unlink own + managed employee + without department + same or managed department</field> + <field name="name">Time Off: see all time off: create/write/unlink own + managed employee + without department + same or managed department</field> <field name="model_id" ref="model_hr_leave"/> <field name="domain_force">['|', '|', ('employee_id.user_id', '=', user.id), ('employee_id.parent_id.user_id', '=', user.id), @@ -72,7 +76,7 @@ </record> <record id="hr_leave_rule_manager" model="ir.rule"> - <field name="name">Time Off: manager: no limit</field> + <field name="name">Time Off: administrator: no limit</field> <field name="model_id" ref="model_hr_leave"/> <field name="domain_force">[(1, '=', 1)]</field> <field name="groups" eval="[(4, ref('group_hr_holidays_manager'))]"/> @@ -104,7 +108,7 @@ </record> <record id="hr_leave_allocation_rule_officer_read" model="ir.rule"> - <field name="name">Allocations: officer: read all</field> + <field name="name">Allocations: see all time off: read all</field> <field name="model_id" ref="model_hr_leave_allocation"/> <field name="domain_force">[(1, '=', 1)]</field> <field name="perm_create" eval="False"/> @@ -114,7 +118,7 @@ </record> <record id="hr_leave_allocation_rule_officer_update" model="ir.rule"> - <field name="name">Allocations: officer: create/write/unlink own + managed employee + without department + same or managed department</field> + <field name="name">Allocations: see all time off: create/write/unlink own + managed employee + without department + same or managed department</field> <field name="model_id" ref="model_hr_leave_allocation"/> <field name="domain_force">['|', '|', ('employee_id.user_id', '=', user.id), ('employee_id.parent_id.user_id', '=', user.id), @@ -123,14 +127,14 @@ </record> <record id="hr_leave_allocation_rule_manager" model="ir.rule"> - <field name="name">Allocations: manager: no limit</field> + <field name="name">Allocations: administrator: no limit</field> <field name="model_id" ref="model_hr_leave_allocation"/> <field name="domain_force">[(1, '=', 1)]</field> <field name="groups" eval="[(4, ref('group_hr_holidays_manager'))]"/> </record> <record id="resource_leaves_team_leader" model="ir.rule"> - <field name="name">Time Off Resources: Team Leader</field> + <field name="name">Time Off Resources: Approver</field> <field name="model_id" ref="model_resource_calendar_leaves"/> <field name="domain_force">[(1,'=',1)]</field> <field name="groups" eval="[(4, ref('hr_holidays.group_hr_holidays_team_leader'))]"/> diff --git a/addons/hr_holidays/views/hr_leave_views.xml b/addons/hr_holidays/views/hr_leave_views.xml index f1e2865fd66..29165d1c53e 100644 --- a/addons/hr_holidays/views/hr_leave_views.xml +++ b/addons/hr_holidays/views/hr_leave_views.xml @@ -521,8 +521,8 @@ <field name="view_type">form</field> <field name="view_mode">tree,kanban,form,calendar,activity</field> <field name="context">{ - 'search_default_managed_people': 1, - 'search_default_my_team_leaves': 1 + 'search_default_managed_people':1, + 'search_default_my_team_leaves':1, 'search_default_approve':1} </field> <field name="domain">[]</field> diff --git a/addons/hr_payroll/__manifest__.py b/addons/hr_payroll/__manifest__.py index 0ea4b76f672..7db1abaaa1e 100644 --- a/addons/hr_payroll/__manifest__.py +++ b/addons/hr_payroll/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Payroll', - 'category': 'Human Resources', + 'category': 'Human Resources/Payroll', 'sequence': 38, 'summary': 'Manage your employee payroll records', 'description': "", diff --git a/addons/hr_payroll/security/hr_payroll_security.xml b/addons/hr_payroll/security/hr_payroll_security.xml index baba9e4f4b9..f8e2ab7bd7e 100644 --- a/addons/hr_payroll/security/hr_payroll_security.xml +++ b/addons/hr_payroll/security/hr_payroll_security.xml @@ -2,15 +2,20 @@ <odoo> <data noupdate="1"> + <record model="ir.module.category" id="base.module_category_human_resources_payroll"> + <field name="description">Helps you manage your payrolls.</field> + <field name="sequence">16</field> + </record> + <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="category_id" ref="base.module_category_human_resources_payroll"/> <field name="implied_ids" eval="[(4, ref('hr.group_hr_user')), (4, ref('hr_contract.group_hr_contract_manager'))]"/> </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="name">Administrator</field> + <field name="category_id" ref="base.module_category_human_resources_payroll"/> <field name="implied_ids" eval="[(4, ref('hr_payroll.group_hr_payroll_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/hr_recruitment/__manifest__.py b/addons/hr_recruitment/__manifest__.py index 1c95180e444..638dce1a1d1 100644 --- a/addons/hr_recruitment/__manifest__.py +++ b/addons/hr_recruitment/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Recruitment', 'version': '1.0', - 'category': 'Human Resources', + 'category': 'Human Resources/Recruitment', 'sequence': 90, 'summary': 'Track your recruitment pipeline', 'description': "", diff --git a/addons/hr_recruitment/security/hr_recruitment_security.xml b/addons/hr_recruitment/security/hr_recruitment_security.xml index 5544210128e..85949b967dd 100644 --- a/addons/hr_recruitment/security/hr_recruitment_security.xml +++ b/addons/hr_recruitment/security/hr_recruitment_security.xml @@ -1,6 +1,10 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> <data noupdate="1"> + <record model="ir.module.category" id="base.module_category_human_resources_recruitment"> + <field name="description">Helps you manage your recruitments.</field> + <field name="sequence">11</field> + </record> <record id="hr_applicant_comp_rule" model="ir.rule"> <field name="name">Applicant multi company rule</field> @@ -11,13 +15,13 @@ <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="category_id" ref="base.module_category_human_resources_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="name">Administrator</field> + <field name="category_id" ref="base.module_category_human_resources_recruitment"/> <field name="implied_ids" eval="[(4, ref('group_hr_recruitment_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/hr_timesheet/__manifest__.py b/addons/hr_timesheet/__manifest__.py index 71f3721ab44..22af4117533 100644 --- a/addons/hr_timesheet/__manifest__.py +++ b/addons/hr_timesheet/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Task Logs', 'version': '1.0', - 'category': 'Human Resources', + 'category': 'Operations/Timesheets', 'sequence': 23, 'summary': 'Track employee time on tasks', 'description': """ diff --git a/addons/hr_timesheet/security/hr_timesheet_security.xml b/addons/hr_timesheet/security/hr_timesheet_security.xml index b4d089c54a4..ac2d422a43e 100644 --- a/addons/hr_timesheet/security/hr_timesheet_security.xml +++ b/addons/hr_timesheet/security/hr_timesheet_security.xml @@ -1,26 +1,21 @@ <?xml version="1.0" encoding="UTF-8"?> <odoo> - <data noupdate="1"> + <record model="ir.module.category" id="base.module_category_operations_timesheets"> + <field name="description">Helps you manage the timesheets.</field> + <field name="sequence">13</field> + </record> <record id="group_hr_timesheet_user" model="res.groups"> - <field name="name">User</field> - <field name="category_id" ref="base.module_category_hr_timesheet"/> + <field name="name">See all Timesheets</field> + <field name="category_id" ref="base.module_category_operations_timesheets"/> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> - <record id="group_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('group_hr_timesheet_user')), (4, ref('hr.group_hr_user'))]"/> - <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> - </record> - <record id="base.default_user" model="res.users"> <field name="groups_id" eval="[(4,ref('group_hr_timesheet_user'))]"/> </record> - </data> <data noupdate="0"> @@ -36,6 +31,18 @@ <field name="perm_read" eval="0"/> </record> + <record id="hr_timesheet.group_hr_timesheet_approver" model="res.groups"> + <field name="name">Team Approver</field> + <field name="category_id" ref="base.module_category_operations_timesheets"/> + <field name="implied_ids" eval="[(4, ref('hr_timesheet.group_hr_timesheet_user'))]"/> + </record> + + <record id="group_timesheet_manager" model="res.groups"> + <field name="name">Administrator</field> + <field name="category_id" ref="base.module_category_operations_timesheets"/> + <field name="implied_ids" eval="[(4, ref('group_hr_timesheet_approver')), (4, ref('hr.group_hr_user'))]"/> + <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> + </record> </data> <data noupdate="1"> @@ -48,7 +55,7 @@ <field name="perm_create" eval="1"/> <field name="perm_write" eval="1"/> <field name="perm_unlink" eval="1"/> - <field name="perm_read" eval="0"/> + <field name="perm_read" eval="1"/> </record> <record id="timesheet_rule_portal" model="ir.rule"> diff --git a/addons/hr_timesheet/views/hr_views.xml b/addons/hr_timesheet/views/hr_views.xml index b18a86eb7f2..739c126bdf0 100644 --- a/addons/hr_timesheet/views/hr_views.xml +++ b/addons/hr_timesheet/views/hr_views.xml @@ -42,7 +42,7 @@ </group> </xpath> <xpath expr="//div[@name='button_box']" position="inside"> - <button class="oe_stat_button" type="action" name="%(timesheet_action_from_employee)d" icon="fa-calendar"> + <button class="oe_stat_button" type="action" name="%(timesheet_action_from_employee)d" icon="fa-calendar" groups="hr_timesheet.group_timesheet_manager"> <div class="o_stat_info"> <span class="o_stat_text">Timesheets</span> </div> diff --git a/addons/im_livechat/__manifest__.py b/addons/im_livechat/__manifest__.py index 598e45dc37c..fd5fda2126b 100644 --- a/addons/im_livechat/__manifest__.py +++ b/addons/im_livechat/__manifest__.py @@ -4,7 +4,7 @@ 'version': '1.0', 'sequence': 170, 'summary': 'Chat with your website visitors', - 'category': 'Website', + 'category': 'Website/Live Chat', 'complexity': 'easy', 'website': 'https://www.odoo.com/page/live-chat', 'description': diff --git a/addons/im_livechat/security/im_livechat_channel_security.xml b/addons/im_livechat/security/im_livechat_channel_security.xml index adc33ab9181..8a2b78ce614 100644 --- a/addons/im_livechat/security/im_livechat_channel_security.xml +++ b/addons/im_livechat/security/im_livechat_channel_security.xml @@ -8,14 +8,14 @@ <record id="im_livechat_group_user" model="res.groups"> <field name="name">User</field> - <field name="category_id" ref="module_category_im_livechat"/> + <field name="category_id" ref="base.module_category_website_live_chat"/> <field name="comment">The user will be able to join support channels.</field> </record> <record id="im_livechat_group_manager" model="res.groups"> - <field name="name">Manager</field> + <field name="name">Administrator</field> <field name="comment">The user will be able to delete support channels.</field> - <field name="category_id" ref="module_category_im_livechat"/> + <field name="category_id" ref="base.module_category_website_live_chat"/> <field name="implied_ids" eval="[(4, ref('im_livechat.im_livechat_group_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/lunch/__manifest__.py b/addons/lunch/__manifest__.py index 9e5c647c04c..76acec2abdc 100644 --- a/addons/lunch/__manifest__.py +++ b/addons/lunch/__manifest__.py @@ -5,7 +5,7 @@ 'sequence': 120, 'version': '1.0', 'depends': ['decimal_precision', 'mail'], - 'category': 'Human Resources', + 'category': 'Human Resources/Lunch', 'summary': 'Handle lunch orders of your employees', 'description': """ The base module to manage lunch. diff --git a/addons/lunch/security/lunch_security.xml b/addons/lunch/security/lunch_security.xml index bd7835a4a36..1da0445b001 100644 --- a/addons/lunch/security/lunch_security.xml +++ b/addons/lunch/security/lunch_security.xml @@ -7,12 +7,12 @@ </record> <record id="group_lunch_user" model="res.groups"> <field name="name">User</field> - <field name="category_id" ref="module_lunch_category"/> + <field name="category_id" ref="base.module_category_human_resources_lunch"/> </record> <record id="group_lunch_manager" model="res.groups"> - <field name="name">Manager</field> + <field name="name">Administrator</field> <field name="implied_ids" eval="[(4, ref('group_lunch_user'))]"/> - <field name="category_id" ref="module_lunch_category"/> + <field name="category_id" ref="base.module_category_human_resources_lunch"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/maintenance/__manifest__.py b/addons/maintenance/__manifest__.py index 72f729da096..03e937f0885 100644 --- a/addons/maintenance/__manifest__.py +++ b/addons/maintenance/__manifest__.py @@ -4,7 +4,7 @@ 'name': 'Maintenance', 'version': '1.0', 'sequence': 125, - 'category': 'Human Resources', + 'category': 'Human Resources/Maintenance', 'description': """ Track equipments and maintenance requests""", 'depends': ['mail'], diff --git a/addons/maintenance/security/maintenance.xml b/addons/maintenance/security/maintenance.xml index 0fefbc07f78..75a53c685d3 100644 --- a/addons/maintenance/security/maintenance.xml +++ b/addons/maintenance/security/maintenance.xml @@ -3,7 +3,7 @@ <!-- This group is only allowed to deal with equipment registration and maintenance --> <record id="group_equipment_manager" model="res.groups"> <field name="name">Equipment Manager</field> - <field name="category_id" ref="base.module_category_human_resources"/> + <field name="category_id" ref="base.module_category_human_resources_maintenance"/> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> <field name="comment">The user will be able to manage equipments.</field> </record> diff --git a/addons/mass_mailing/__manifest__.py b/addons/mass_mailing/__manifest__.py index 70c83a5bb64..1e1986cc211 100644 --- a/addons/mass_mailing/__manifest__.py +++ b/addons/mass_mailing/__manifest__.py @@ -8,7 +8,7 @@ 'version': '2.0', 'sequence': 110, 'website': 'https://www.odoo.com/page/mailing', - 'category': 'Marketing', + 'category': 'Marketing/Email Marketing', 'depends': [ 'contacts', 'mail', diff --git a/addons/mass_mailing/security/mass_mailing_security.xml b/addons/mass_mailing/security/mass_mailing_security.xml index 7026ea17834..de7ed6f398f 100644 --- a/addons/mass_mailing/security/mass_mailing_security.xml +++ b/addons/mass_mailing/security/mass_mailing_security.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> + <record model="ir.module.category" id="base.module_category_marketing_email_marketing"> + <field name="sequence">19</field> + <field name="description">Helps you manage your mass mailing for design + professional emails and reuse templates.</field> + </record> + <record id="group_mass_mailing_user" model="res.groups"> <field name="name">User</field> - <field name="category_id" ref="base.module_category_mass_mailing"/> + <field name="category_id" ref="base.module_category_marketing_email_marketing"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> </record> diff --git a/addons/mrp/__manifest__.py b/addons/mrp/__manifest__.py index 9fa6524618f..09f62e9d37c 100644 --- a/addons/mrp/__manifest__.py +++ b/addons/mrp/__manifest__.py @@ -6,7 +6,7 @@ 'name': 'Manufacturing', 'version': '2.0', 'website': 'https://www.odoo.com/page/manufacturing', - 'category': 'Manufacturing', + 'category': 'Manufacturing/Manufacturing', 'sequence': 16, 'summary': 'Manufacturing Orders & BOMs', 'depends': ['product', 'stock', 'resource'], diff --git a/addons/mrp/security/mrp_security.xml b/addons/mrp/security/mrp_security.xml index 97e13ac67cb..cc5a3562435 100644 --- a/addons/mrp/security/mrp_security.xml +++ b/addons/mrp/security/mrp_security.xml @@ -2,14 +2,19 @@ <odoo> <data noupdate="0"> + <record id="base.module_category_manufacturing_manufacturing" model="ir.module.category"> + <field name="description">Helps you manage your manufacturing processes and generate reports on those processes.</field> + <field name="sequence">5</field> + </record> + <record id="group_mrp_user" model="res.groups"> <field name="name">User</field> <field name="implied_ids" eval="[(4, ref('stock.group_stock_user'))]"/> - <field name="category_id" ref="base.module_category_manufacturing"/> + <field name="category_id" ref="base.module_category_manufacturing_manufacturing"/> </record> <record id="group_mrp_manager" model="res.groups"> - <field name="name">Manager</field> - <field name="category_id" ref="base.module_category_manufacturing"/> + <field name="name">Administrator</field> + <field name="category_id" ref="base.module_category_manufacturing_manufacturing"/> <field name="implied_ids" eval="[(4, ref('group_mrp_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/point_of_sale/__manifest__.py b/addons/point_of_sale/__manifest__.py index 5428fcaa521..6b5353e17df 100644 --- a/addons/point_of_sale/__manifest__.py +++ b/addons/point_of_sale/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Point of Sale', 'version': '1.0.1', - 'category': 'Point Of Sale', + 'category': 'Sales/Point Of Sale', 'sequence': 20, 'summary': 'Tablet POS: shops and restaurants', 'description': "", diff --git a/addons/point_of_sale/security/point_of_sale_security.xml b/addons/point_of_sale/security/point_of_sale_security.xml index 308a885c3a9..db70f713fbb 100644 --- a/addons/point_of_sale/security/point_of_sale_security.xml +++ b/addons/point_of_sale/security/point_of_sale_security.xml @@ -1,12 +1,17 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> + <record model="ir.module.category" id="base.module_category_sales_point_of_sale"> + <field name="description">Helps you get the most out of your points of sale with fast sale encoding, simplified payment mode encoding, automatic picking lists generation and more.</field> + <field name="sequence">21</field> + </record> + <record id="group_pos_user" model="res.groups"> <field name="name">User</field> - <field name="category_id" ref="base.module_category_point_of_sale"/> + <field name="category_id" ref="base.module_category_sales_point_of_sale"/> </record> <record id="group_pos_manager" model="res.groups"> - <field name="name">Manager</field> - <field name="category_id" ref="base.module_category_point_of_sale"/> + <field name="name">Administrator</field> + <field name="category_id" ref="base.module_category_sales_point_of_sale"/> <field name="implied_ids" eval="[(4, ref('group_pos_user')), (4, ref('stock.group_stock_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/project/__manifest__.py b/addons/project/__manifest__.py index 530cb4fb8b8..27495bf7771 100644 --- a/addons/project/__manifest__.py +++ b/addons/project/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Project', 'version': '1.1', 'website': 'https://www.odoo.com/page/project-management', - 'category': 'Project', + 'category': 'Operations/Project', 'sequence': 10, 'summary': 'Organize and schedule your projects ', 'depends': [ diff --git a/addons/project/security/project_security.xml b/addons/project/security/project_security.xml index ca80bbbd615..4e7cdccc93b 100644 --- a/addons/project/security/project_security.xml +++ b/addons/project/security/project_security.xml @@ -1,15 +1,20 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> + <record id="base.module_category_operations_project" model="ir.module.category"> + <field name="description">Helps you manage your projects and tasks by tracking them, generating plannings, etc...</field> + <field name="sequence">3</field> + </record> + <record id="group_project_user" model="res.groups"> <field name="name">User</field> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> - <field name="category_id" ref="base.module_category_project_management"/> + <field name="category_id" ref="base.module_category_operations_project"/> </record> <record id="group_project_manager" model="res.groups"> - <field name="name">Manager</field> - <field name="category_id" ref="base.module_category_project_management"/> + <field name="name">Administrator</field> + <field name="category_id" ref="base.module_category_operations_project"/> <field name="implied_ids" eval="[(4, ref('group_project_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/purchase/__manifest__.py b/addons/purchase/__manifest__.py index baacd3695ac..1565066cc8e 100644 --- a/addons/purchase/__manifest__.py +++ b/addons/purchase/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Purchase', 'version': '1.2', - 'category': 'Purchase', + 'category': 'Operations/Purchase', 'sequence': 60, 'summary': 'Purchase orders, tenders and agreements', 'description': "", diff --git a/addons/purchase/security/purchase_security.xml b/addons/purchase/security/purchase_security.xml index 85860353f21..0d64458d47c 100644 --- a/addons/purchase/security/purchase_security.xml +++ b/addons/purchase/security/purchase_security.xml @@ -2,15 +2,20 @@ <odoo> <data noupdate="0"> + <record model="ir.module.category" id="base.module_category_operations_purchase"> + <field name="description">Helps you manage your purchase-related processes such as requests for quotations, supplier bills, etc...</field> + <field name="sequence">8</field> + </record> + <record id="group_purchase_user" model="res.groups"> <field name="name">User</field> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> - <field name="category_id" ref="base.module_category_purchase_management"/> + <field name="category_id" ref="base.module_category_operations_purchase"/> </record> <record id="group_purchase_manager" model="res.groups"> - <field name="name">Manager</field> - <field name="category_id" ref="base.module_category_purchase_management"/> + <field name="name">Administrator</field> + <field name="category_id" ref="base.module_category_operations_purchase"/> <field name="implied_ids" eval="[(4, ref('group_purchase_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/sale/__manifest__.py b/addons/sale/__manifest__.py index 3c316a4ccea..741d357c900 100644 --- a/addons/sale/__manifest__.py +++ b/addons/sale/__manifest__.py @@ -4,7 +4,7 @@ { 'name': 'Sales', 'version': '1.1', - 'category': 'Sales', + 'category': 'Sales/Sales', 'summary': 'Sales internal machinery', 'description': """ This module contains all the common features of Sales Management and eCommerce. diff --git a/addons/sales_team/__manifest__.py b/addons/sales_team/__manifest__.py index 471fc179c52..6e79a3afa7f 100644 --- a/addons/sales_team/__manifest__.py +++ b/addons/sales_team/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Sales Teams', 'version': '1.0', - 'category': 'Sales', + 'category': 'Sales/Sales', 'summary': 'Sales Teams', 'description': """ Using this application you can manage Sales Teams with CRM and/or Sales diff --git a/addons/sales_team/data/sales_team_data.xml b/addons/sales_team/data/sales_team_data.xml index 12d92efd92e..6863a00e153 100644 --- a/addons/sales_team/data/sales_team_data.xml +++ b/addons/sales_team/data/sales_team_data.xml @@ -31,12 +31,4 @@ ref('sales_team.pos_sales_team')], [ref('base.partner_root')]"/> </data> - - <record id="sales_team.group_sale_salesman" model="res.groups"> - <field name="category_id" ref="base.module_category_sales_management"/> - </record> - - <record id="sales_team.group_sale_manager" model="res.groups"> - <field name="category_id" ref="base.module_category_sales_management"/> - </record> </odoo> diff --git a/addons/sales_team/security/sales_team_security.xml b/addons/sales_team/security/sales_team_security.xml index aee015cbd0b..73b8f5e8b8b 100644 --- a/addons/sales_team/security/sales_team_security.xml +++ b/addons/sales_team/security/sales_team_security.xml @@ -1,23 +1,28 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> + <record id="base.module_category_sales_sales" model="ir.module.category"> + <field name="description">Helps you handle your quotations, sale orders and invoicing.</field> + <field name="sequence">1</field> + </record> + <record id="group_sale_salesman" model="res.groups"> <field name="name">User: Own Documents Only</field> - <field name="category_id" ref="base.module_category_sales_management"/> + <field name="category_id" ref="base.module_category_sales_sales"/> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> <field name="comment">the user will have access to his own data in the sales application.</field> </record> <record id="group_sale_salesman_all_leads" model="res.groups"> <field name="name">User: All Documents</field> - <field name="category_id" ref="base.module_category_sales_management"/> + <field name="category_id" ref="base.module_category_sales_sales"/> <field name="implied_ids" eval="[(4, ref('group_sale_salesman'))]"/> <field name="comment">the user will have access to all records of everyone in the sales application.</field> </record> <record id="group_sale_manager" model="res.groups"> - <field name="name">Manager</field> + <field name="name">Administrator</field> <field name="comment">the user will have an access to the sales configuration as well as statistic reports.</field> - <field name="category_id" ref="base.module_category_sales_management"/> + <field name="category_id" ref="base.module_category_sales_sales"/> <field name="implied_ids" eval="[(4, ref('group_sale_salesman_all_leads'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/stock/__manifest__.py b/addons/stock/__manifest__.py index 15ab63754c8..28f044b1072 100644 --- a/addons/stock/__manifest__.py +++ b/addons/stock/__manifest__.py @@ -8,7 +8,7 @@ 'description': "", 'website': 'https://www.odoo.com/page/warehouse', 'depends': ['product', 'barcodes'], - 'category': 'Warehouse', + 'category': 'Operations/Inventory', 'sequence': 13, 'demo': [ 'data/stock_demo_pre.xml', diff --git a/addons/stock/security/stock_security.xml b/addons/stock/security/stock_security.xml index e33e665842a..b738306073a 100644 --- a/addons/stock/security/stock_security.xml +++ b/addons/stock/security/stock_security.xml @@ -2,6 +2,11 @@ <odoo> <data noupdate="0"> + <record id="base.module_category_operations_inventory" model="ir.module.category"> + <field name="description">Helps you manage your inventory and main stock operations: delivery orders, receptions, etc.</field> + <field name="sequence">4</field> + </record> + <record id="group_stock_multi_locations" model="res.groups"> <field name="name">Manage Multiple Stock Locations</field> <field name="category_id" ref="base.module_category_hidden"/> @@ -14,12 +19,12 @@ <record id="group_stock_user" model="res.groups"> <field name="name">User</field> - <field name="category_id" ref="base.module_category_warehouse_management"/> + <field name="category_id" ref="base.module_category_operations_inventory"/> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> </record> <record id="group_stock_manager" model="res.groups"> - <field name="name">Manager</field> - <field name="category_id" ref="base.module_category_warehouse_management"/> + <field name="name">Administrator</field> + <field name="category_id" ref="base.module_category_operations_inventory"/> <field name="implied_ids" eval="[(4, ref('group_stock_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/survey/__manifest__.py b/addons/survey/__manifest__.py index 3d8aeab4541..63fa068f150 100644 --- a/addons/survey/__manifest__.py +++ b/addons/survey/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Surveys', 'version': '3.0', - 'category': 'Marketing', + 'category': 'Marketing/Survey', 'description': """ Create beautiful surveys and visualize answers ============================================== diff --git a/addons/survey/security/survey_security.xml b/addons/survey/security/survey_security.xml index b4bd9519871..c2025b7017e 100644 --- a/addons/survey/security/survey_security.xml +++ b/addons/survey/security/survey_security.xml @@ -1,16 +1,21 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> <data noupdate="1"> + <record model="ir.module.category" id="base.module_category_marketing_survey"> + <field name="description">Helps you manage your survey for review of different-different users.</field> + <field name="sequence">20</field> + </record> + <!-- Survey users --> <record model="res.groups" id="group_survey_user"> <field name="name">User</field> - <field name="category_id" ref="base.module_category_survey"/> + <field name="category_id" ref="base.module_category_marketing_survey"/> </record> <!-- Survey managers --> <record model="res.groups" id="group_survey_manager"> - <field name="name">Manager</field> - <field name="category_id" ref="base.module_category_survey"/> + <field name="name">Administrator</field> + <field name="category_id" ref="base.module_category_marketing_survey"/> <field name="implied_ids" eval="[(4, ref('group_survey_user'))]"/> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> </record> diff --git a/addons/website/__manifest__.py b/addons/website/__manifest__.py index fe7c479d23e..8077191960d 100644 --- a/addons/website/__manifest__.py +++ b/addons/website/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Website', - 'category': 'Website', + 'category': 'Website/Website', 'sequence': 7, 'summary': 'Enterprise website builder', 'website': 'https://www.odoo.com/page/website-builder', diff --git a/addons/website/security/website_security.xml b/addons/website/security/website_security.xml index 3be09426270..8197f896841 100644 --- a/addons/website/security/website_security.xml +++ b/addons/website/security/website_security.xml @@ -1,14 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> + <record model="ir.module.category" id="base.module_category_website_website"> + <field name="sequence">23</field> + </record> + <record id="group_website_publisher" model="res.groups"> <field name="name">Restricted Editor</field> - <field name="category_id" ref="base.module_category_website"/> + <field name="category_id" ref="base.module_category_website_website"/> </record> <record id="group_website_designer" model="res.groups"> <field name="name">Editor and Designer</field> <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> <field name="implied_ids" eval="[(4, ref('group_website_publisher'))]"/> - <field name="category_id" ref="base.module_category_website"/> + <field name="category_id" ref="base.module_category_website_website"/> </record> <record id="base.default_user" model="res.users"> diff --git a/odoo/addons/base/data/ir_module_category_data.xml b/odoo/addons/base/data/ir_module_category_data.xml index cd04fc153b4..d99fed12077 100644 --- a/odoo/addons/base/data/ir_module_category_data.xml +++ b/odoo/addons/base/data/ir_module_category_data.xml @@ -23,183 +23,45 @@ <field name="visible" eval="0" /> </record> - <record model="ir.module.category" id="module_category_sales_management"> - <field name="name">Sales</field> - <field name="description">Helps you handle your quotations, sale orders and invoicing.</field> - <field name="sequence">1</field> - </record> - - <record model="ir.module.category" id="module_category_lead_automation"> - <field name="name">Lead Automation</field> - <field name="description">Helps you manage lead of your marketing campaigns step by step.</field> - <field name="sequence">2</field> - </record> - - <record model="ir.module.category" id="module_category_project_management"> - <field name="name">Project</field> - <field name="description">Helps you manage your projects and tasks by tracking them, generating plannings, etc...</field> - <field name="sequence">3</field> - </record> - - <record model="ir.module.category" id="module_category_warehouse_management"> - <field name="name">Inventory</field> - <field name="description">Helps you manage your inventory and main stock operations: delivery orders, receptions, etc.</field> - <field name="sequence">4</field> - </record> - - <record model="ir.module.category" id="module_category_manufacturing"> - <field name="name">Manufacturing</field> - <field name="description">Helps you manage your manufacturing processes and generate reports on those processes.</field> - <field name="sequence">5</field> - </record> - - <record model="ir.module.category" id="module_category_account_voucher"> - <field name="name">Invoicing & Payments</field> - <field name="description">Allows you to create your invoices and track the payments. It is an easier version of the accounting module for managers who are not accountants.</field> - <field name="sequence">6</field> - </record> - - <record model="ir.module.category" id="module_category_accounting_and_finance"> - <field name="name">Invoicing</field> - <field name="description">Helps you handle your accounting needs, if you are not an accountant, we suggest you to install only the Invoicing.</field> - <field name="sequence">7</field> - </record> - - <record model="ir.module.category" id="module_category_purchase_management"> - <field name="name">Purchase</field> - <field name="description">Helps you manage your purchase-related processes such as requests for quotations, supplier bills, etc...</field> - <field name="sequence">8</field> - </record> - <record model="ir.module.category" id="module_category_user_type"> <field name="name">User types</field> <field name="description">Helps you manage users.</field> <field name="sequence">9</field> </record> - <record model="ir.module.category" id="module_category_human_resources"> - <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_approvals"> - <field name="name">Approvals</field> - <field name="description">Helps you manage your approvals.</field> - <field name="sequence">9</field> - </record> - - <record model="ir.module.category" id="module_category_hr_holidays"> - <field name="name">Time Off</field> - <field name="description">Helps you manage your time off.</field> - <field name="sequence">10</field> - </record> - - <record model="ir.module.category" id="module_category_hr_contract"> - <field name="name">Contracts</field> - <field name="description">Helps you manage your contracts.</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">Attendances</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">Appraisal</field> + <record model="ir.module.category" id="module_category_human_resources_appraisals"> + <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">18</field> - </record> - - <record id="module_category_mass_mailing" model="ir.module.category"> - <field name="name">Email Marketing</field> - <field name="sequence">19</field> - <field name="description">Helps you manage your mass mailing for design - professional emails and reuse templates.</field> - </record> - - <record id="module_category_survey" model="ir.module.category"> - <field name="name">Surveys</field> - <field name="description">Helps you manage your survey for review of different-different users.</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 sale with fast sale encoding, simplified payment mode encoding, automatic picking lists generation and more.</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">22</field> - </record> - - <record model="ir.module.category" id="module_category_website"> - <field name="name">Website</field> - <field name="sequence">23</field> - </record> - - <record model="ir.module.category" id="module_category_sign"> + <record model="ir.module.category" id="module_category_communication_sign"> <field name="name">Sign</field> <field name="description">Helps you sign and complete your documents easily.</field> <field name="sequence">25</field> </record> - <record model="ir.module.category" id="module_category_helpdesk"> + <record model="ir.module.category" id="module_category_operations_helpdesk"> <field name="name">Helpdesk</field> <field name="description">After-sales services</field> - <field name="sequence">2</field> + <field name="sequence">14</field> </record> - <record model="ir.module.category" id="module_category_theme"> <field name="name">Theme</field> <field name="exclusive" eval="0"/> <field name="sequence">50</field> </record> + <record model="ir.module.category" id="module_category_administration_administration"> + <field name="name">Administration</field> + <field name="sequence">100</field> + </record> + <record model="ir.module.category" id="module_category_administration"> <field name="name">Administration</field> <field name="sequence">100</field> + <field name="parent_id" ref="module_category_administration_administration"/> </record> <record model="ir.module.category" id="module_category_usability"> diff --git a/odoo/addons/base/data/ir_module_module.xml b/odoo/addons/base/data/ir_module_module.xml index 5a08bbb216c..4f8ce3f9b60 100644 --- a/odoo/addons/base/data/ir_module_module.xml +++ b/odoo/addons/base/data/ir_module_module.xml @@ -20,7 +20,7 @@ <field name="name">timesheet_grid</field> <field name="shortdesc">Timesheets</field> <field name="sequence">11</field> - <field name="category_id" ref="base.module_category_hr_timesheet"/> + <field name="category_id" ref="base.module_category_operations_timesheets"/> <field name="application" eval="True"/> <field name="summary">Track time & costs</field> <field name="license">OEEL-1</field> @@ -34,7 +34,7 @@ <field name="name">account_accountant</field> <field name="sequence">15</field> <field name="shortdesc">Accounting</field> - <field name="category_id" ref="base.module_category_accounting_and_finance"/> + <field name="category_id" ref="base.module_category_accounting_invoicing"/> <field name="application" eval="True"/> <field name="summary">Accounting, Taxes, Budgets, Assets...</field> <field name="license">OEEL-1</field> @@ -48,7 +48,7 @@ <field name="name">helpdesk</field> <field name="shortdesc">Helpdesk</field> <field name="sequence">65</field> - <field name="category_id" ref="base.module_category_helpdesk"/> + <field name="category_id" ref="base.module_category_operations_helpdesk"/> <field name="application" eval="True"/> <field name="summary">Track support tickets</field> <field name="license">OEEL-1</field> @@ -61,7 +61,7 @@ <record model="ir.module.module" id="base.module_hr_appraisal"> <field name="name">hr_appraisal</field> <field name="shortdesc">Appraisal</field> - <field name="category_id" ref="base.module_category_hr_appraisal"/> + <field name="category_id" ref="base.module_category_human_resources_appraisals"/> <field name="application" eval="True"/> <field name="summary">Assess your employees</field> <field name="license">OEEL-1</field> @@ -75,7 +75,7 @@ <field name="name">marketing_automation</field> <field name="shortdesc">Marketing Automation</field> <field name="sequence">111</field> - <field name="category_id" ref="base.module_category_mass_mailing"/> + <field name="category_id" ref="base.module_category_marketing_email_marketing"/> <field name="application" eval="True"/> <field name="summary">Build automated mailing campaigns</field> <field name="license">OEEL-1</field> @@ -88,7 +88,7 @@ <record model="ir.module.module" id="base.module_mrp_plm"> <field name="name">mrp_plm</field> <field name="shortdesc">Product Lifecycle Management (PLM)</field> - <field name="category_id" ref="base.module_category_manufacturing"/> + <field name="category_id" ref="base.module_category_manufacturing_manufacturing"/> <field name="sequence">17</field> <field name="application" eval="True"/> <field name="summary">PLM, ECOs, Versions</field> @@ -103,7 +103,7 @@ <field name="name">quality_control</field> <field name="shortdesc">Quality</field> <field name="sequence">17</field> - <field name="category_id" ref="base.module_category_manufacturing"/> + <field name="category_id" ref="base.module_category_manufacturing_manufacturing"/> <field name="application" eval="True"/> <field name="summary">Quality Alerts, Control Points</field> <field name="license">OEEL-1</field> @@ -116,7 +116,7 @@ <record model="ir.module.module" id="base.module_sale_ebay"> <field name="name">sale_ebay</field> <field name="shortdesc">eBay Connector</field> - <field name="category_id" ref="base.module_category_sales_management"/> + <field name="category_id" ref="base.module_category_sales_sales"/> <field name="application" eval="True"/> <field name="summary">Sell on eBay easily</field> <field name="license">OEEL-1</field> @@ -129,7 +129,7 @@ <record model="ir.module.module" id="base.module_project_forecast"> <field name="name">project_forecast</field> <field name="shortdesc">Project Forecast</field> - <field name="category_id" ref="base.module_category_project_management"/> + <field name="category_id" ref="base.module_category_operations_project"/> <field name="application" eval="True"/> <field name="summary">Project forecasts, resource allocation</field> <field name="license">OEEL-1</field> @@ -142,7 +142,7 @@ <record model="ir.module.module" id="base.module_sale_subscription"> <field name="name">sale_subscription</field> <field name="shortdesc">Subscriptions</field> - <field name="category_id" ref="base.module_category_sales_management"/> + <field name="category_id" ref="base.module_category_sales_sales"/> <field name="application" eval="True"/> <field name="summary">MRR, Churn, Recurring payments</field> <field name="license">OEEL-1</field> @@ -155,7 +155,7 @@ <record model="ir.module.module" id="base.module_sign"> <field name="name">sign</field> <field name="shortdesc">Sign</field> - <field name="category_id" ref="base.module_category_sign"/> + <field name="category_id" ref="base.module_category_communication_sign"/> <field name="application" eval="True"/> <field name="summary">Send documents to sign online</field> <field name="license">OEEL-1</field> @@ -169,7 +169,7 @@ <field name="name">stock_barcode</field> <field name="shortdesc">Barcode</field> <field name="sequence">14</field> - <field name="category_id" ref="base.module_category_warehouse_management"/> + <field name="category_id" ref="base.module_category_operations_inventory"/> <field name="application" eval="True"/> <field name="summary">Barcode scanner for warehouses</field> <field name="license">OEEL-1</field> @@ -183,7 +183,7 @@ <field name="name">voip</field> <field name="shortdesc">VoIP</field> <field name="sequence">100</field> - <field name="category_id" ref="base.module_category_sales_management"/> + <field name="category_id" ref="base.module_category_sales_sales"/> <field name="application" eval="True"/> <field name="summary">Call using VoIP</field> <field name="license">OEEL-1</field> @@ -196,7 +196,7 @@ <record model="ir.module.module" id="base.module_website_calendar"> <field name="name">website_calendar</field> <field name="shortdesc">Appointments</field> - <field name="category_id" ref="base.module_category_sales_management"/> + <field name="category_id" ref="base.module_category_sales_sales"/> <field name="application" eval="True"/> <field name="summary">Online appointments scheduler</field> <field name="license">OEEL-1</field> @@ -210,7 +210,7 @@ <field name="name">mrp_workorder</field> <field name="sequence">16</field> <field name="shortdesc">MRP II</field> - <field name="category_id" ref="base.module_category_manufacturing"/> + <field name="category_id" ref="base.module_category_manufacturing_manufacturing"/> <field name="application" eval="True"/> <field name="summary">Work Orders, Planning, Routing</field> <field name="license">OEEL-1</field> @@ -238,7 +238,7 @@ <field name="name">website_twitter_wall</field> <field name="shortdesc">Twitter Wall</field> <field name="summary">Interactive twitter wall for events</field> - <field name="category_id" ref="base.module_category_website"/> + <field name="category_id" ref="base.module_category_website_website"/> <field name="license">OEEL-1</field> <field name="author">Odoo S.A.</field> <field name="to_buy" eval="True"/> @@ -249,7 +249,7 @@ <field name="name">website_form_editor</field> <field name="shortdesc">Form Builder</field> <field name="summary">Customize web forms with drag and drop</field> - <field name="category_id" ref="base.module_category_website"/> + <field name="category_id" ref="base.module_category_website_website"/> <field name="license">OEEL-1</field> <field name="author">Odoo S.A.</field> <field name="to_buy" eval="True"/> diff --git a/odoo/addons/base/models/ir_module.py b/odoo/addons/base/models/ir_module.py index 4bc2c405ff6..7a7c23f6c36 100644 --- a/odoo/addons/base/models/ir_module.py +++ b/odoo/addons/base/models/ir_module.py @@ -111,7 +111,6 @@ class ModuleCategory(models.Model): for cat in self: cat.xml_id = xml_ids.get(cat.id, [''])[0] - class MyFilterMessages(Transform): """ Custom docutils transform to remove `system message` for a document and diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py index 57226a9b010..6077e76877d 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py @@ -1038,11 +1038,11 @@ class GroupsView(models.Model): group_no_one = view.env.ref('base.group_no_one') group_employee = view.env.ref('base.group_user') xml1, xml2, xml3 = [], [], [] + xml_by_category = {} xml1.append(E.separator(string=_('User Type'), colspan="2", groups='base.group_no_one')) - xml2.append(E.separator(string=_('Application Accesses'), colspan="2")) user_type_field_name = '' - for app, kind, gs in self.get_groups_by_application(): + for app, kind, gs, category_name in self.get_groups_by_application(): attrs = {} # hide groups in categories 'Hidden' and 'Extra' (except for group_no_one) if app.xml_id in ('base.module_category_hidden', 'base.module_category_extra', 'base.module_category_usability'): @@ -1062,8 +1062,12 @@ class GroupsView(models.Model): elif kind == 'selection': # application name with a selection field field_name = name_selection_groups(gs.ids) - xml2.append(E.field(name=field_name, **attrs)) - xml2.append(E.newline()) + if category_name not in xml_by_category: + xml_by_category[category_name] = [] + xml_by_category[category_name].append(E.newline()) + xml_by_category[category_name].append(E.field(name=field_name, **attrs)) + xml_by_category[category_name].append(E.newline()) + else: # application separator with boolean fields app_name = app.name or _('Other') @@ -1082,6 +1086,11 @@ class GroupsView(models.Model): else: user_type_attrs = {} + for xml_cat in sorted(xml_by_category.keys(), key=lambda it: it[0]): + xml_cat_name = xml_cat[1] + master_category_name = (_(xml_cat_name)) + xml2.append(E.group(*(xml_by_category[xml_cat]), col="2", string=master_category_name)) + xml = E.field( E.group(*(xml1), col="2"), E.group(*(xml2), col="2", attrs=str(user_type_attrs)), @@ -1109,17 +1118,17 @@ class GroupsView(models.Model): order. If ``kind`` is ``'selection'``, ``groups`` are given in reverse implication order. """ - def linearize(app, gs): + def linearize(app, gs, category_name): # 'User Type' is an exception if app.xml_id == 'base.module_category_user_type': - return (app, 'selection', gs.sorted('id')) + return (app, 'selection', gs.sorted('id'), category_name) # determine sequence order: a group appears after its implied groups order = {g: len(g.trans_implied_ids & gs) for g in gs} # check whether order is total, i.e., sequence orders are distinct if len(set(order.values())) == len(gs): - return (app, 'selection', gs.sorted(key=order.get)) + return (app, 'selection', gs.sorted(key=order.get), category_name) else: - return (app, 'boolean', gs) + return (app, 'boolean', gs, (100, 'Other')) # classify all groups by application by_app, others = defaultdict(self.browse), self.browse() @@ -1131,9 +1140,13 @@ class GroupsView(models.Model): # build the result res = [] for app, gs in sorted(by_app.items(), key=lambda it: it[0].sequence or 0): - res.append(linearize(app, gs)) + if app.parent_id: + res.append(linearize(app, gs, (app.parent_id.sequence, app.parent_id.name))) + else: + res.append(linearize(app, gs, (100, 'Other'))) + if others: - res.append((self.env['ir.module.category'], 'boolean', others)) + res.append((self.env['ir.module.category'], 'boolean', others, (100,'Other'))) return res @@ -1236,7 +1249,7 @@ class UsersView(models.Model): def fields_get(self, allfields=None, attributes=None): res = super(UsersView, self).fields_get(allfields, attributes=attributes) # add reified groups fields - for app, kind, gs in self.env['res.groups'].sudo().get_groups_by_application(): + for app, kind, gs, category_name in self.env['res.groups'].sudo().get_groups_by_application(): if kind == 'selection': # 'User Type' should not be 'False'. A user is either 'employee', 'portal' or 'public' (required). selection_vals = [(False, '')] diff --git a/odoo/addons/base/security/base_groups.xml b/odoo/addons/base/security/base_groups.xml index 62889e5cbc9..3bdf8ee3928 100644 --- a/odoo/addons/base/security/base_groups.xml +++ b/odoo/addons/base/security/base_groups.xml @@ -50,9 +50,6 @@ <field name="groups_id" eval="[(4,ref('base.group_partner_manager'))]"/> </record> - <record id="group_private_addresses" model="res.groups"> - <field name="name">Access to Private Addresses</field> - </record> <!-- A group dedicated to the portal users, making groups restrictions more convenient. |
