[IMP] base,*: Reorganize access rights groups

Purpose
=======

Access group terminology is missleading. Yous have to be manager to administrate
an application. This task consists to rename groups to be understandable for everyone.

Groups should be reorganised on the users form to be more explicit.

Specification
=============

1/ Rename 'Manager' to 'Administrator' in users groups.
2/ Define a hierarchy on access groups by using the category_id in the manifests
   A category 'Operations/Project' will create a category Project with a parent
   category 'Operations', and something smart is already developed (in modules/db.py)
   to avoid duplicating categories.
3/ Add a group in expenses to be able to approve expenses reports for my team.
4/ Add a group in timesheets to be able to approve timesheets for my team.
5/ Remove partially the useless crap in ir_module_category_data.xml
6/ Sort access rights groups on users form according to its parent category

closes odoo/odoo#29362

Signed-off-by: "Yannick Tivisse (yti)" <yti@odoo.com>
This commit is contained in:
jbm-odoo
2019-03-05 09:08:12 +00:00
committed by Yannick Tivisse
parent c0222efd13
commit ec07e72845
64 changed files with 324 additions and 362 deletions
+1 -1
View File
@@ -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'],
+8 -3
View File
@@ -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>
+1 -1
View File
@@ -4,7 +4,7 @@
{
'name': 'CRM',
'version': '1.0',
'category': 'Sales',
'category': 'Sales/CRM',
'sequence': 5,
'summary': 'Track leads and close opportunities',
'description': "",
+1 -1
View File
@@ -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.
+8 -3
View File
@@ -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>
+1 -1
View File
@@ -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' : """
+9 -9
View File
@@ -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>
+1 -1
View File
@@ -4,7 +4,7 @@
{
'name': 'Employees',
'version': '1.1',
'category': 'Human Resources',
'category': 'Human Resources/Employees',
'sequence': 75,
'summary': 'Centralize employee information',
'description': "",
+8 -3
View File
@@ -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>
+1 -1
View File
@@ -5,7 +5,7 @@
{
'name': 'Attendances',
'version': '2.0',
'category': 'Human Resources',
'category': 'Human Resources/Attendances',
'sequence': 81,
'summary': 'Track employee attendance',
'description': """
@@ -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>
+1 -1
View File
@@ -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.
=============================================================
+7 -2
View File
@@ -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>
+1 -1
View File
@@ -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': """
+2 -2
View File
@@ -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):
+11 -11
View File
@@ -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'})
@@ -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>
</odoo>
+12 -12
View File
@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_hr_expense_employee hr.expense.employee model_hr_expense base.group_user 1 1 1 1
3 access_hr_expense_sheet_employee hr.expense.sheet.employee model_hr_expense_sheet base.group_user 1 1 1 1
4 access_hr_expense_user hr.expense.user model_hr_expense hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 1 1 1
5 access_hr_expense_sheet_user hr.expense.sheet.user model_hr_expense_sheet hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 1 1 1
6 access_hr_expense_manager hr.expense.manager model_hr_expense hr_expense.group_hr_expense_manager 1 1 1 1
7 access_hr_expense_sheet_manager hr.expense.sheet.manager model_hr_expense_sheet hr_expense.group_hr_expense_manager 1 1 1 1
8 access_product_product_hr_expense_user product.product.hr.expense.user product.model_product_product hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 1 1 1
9 access_product_template_hr_expense_user product.template.hr.expense.user product.model_product_template hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 1 1 1
10 access_uom_uom_hr_expense_user uom.uom.hr.expense.user uom.model_uom_uom hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 1 1 1
11 access_account_journal_user account.journal.user account.model_account_journal hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 1 1 1
12 access_account_journal_employee account.journal.employee account.model_account_journal base.group_user 1 0 0 0
13 access_account_invoice_user account.invoice.user account.model_account_invoice hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 1 1 1
14 access_account_invoice_line_user account.invoice.line.user account.model_account_invoice_line hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 1 1 1
15 access_account_invoice_tax_user account.invoice.tax.user account.model_account_invoice_tax hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 0 0 0
16 access_account_move_user account.move.user account.model_account_move hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 0 0 0
17 access_account_move_line_user account.move.line.user account.model_account_move_line hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 0 0 0
18 access_account_analytic_line_user account.analytic.line.user account.model_account_analytic_line hr_expense.group_hr_expense_user hr_expense.group_hr_expense_team_approver 1 1 1 1
19 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
+16 -17
View File
@@ -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>
+1 -1
View File
@@ -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({
@@ -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">
+5 -5
View File
@@ -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"
+1 -1
View File
@@ -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': """
+1 -1
View File
@@ -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']
@@ -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'))]"/>
+2 -2
View File
@@ -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>
+1 -1
View File
@@ -3,7 +3,7 @@
{
'name': 'Payroll',
'category': 'Human Resources',
'category': 'Human Resources/Payroll',
'sequence': 38,
'summary': 'Manage your employee payroll records',
'description': "",
@@ -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>
+1 -1
View File
@@ -4,7 +4,7 @@
{
'name': 'Recruitment',
'version': '1.0',
'category': 'Human Resources',
'category': 'Human Resources/Recruitment',
'sequence': 90,
'summary': 'Track your recruitment pipeline',
'description': "",
@@ -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>
+1 -1
View File
@@ -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': """
@@ -1,26 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data noupdate="1">
<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="implied_ids" eval="[(4, ref('base.group_user'))]"/>
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
<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_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'))]"/>
<record id="group_hr_timesheet_user" model="res.groups">
<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="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">
+1 -1
View File
@@ -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>
+1 -1
View File
@@ -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':
@@ -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>
+1 -1
View File
@@ -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.
+3 -3
View File
@@ -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>
+1 -1
View File
@@ -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'],
+1 -1
View File
@@ -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>
+1 -1
View File
@@ -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',
@@ -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>
+1 -1
View File
@@ -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'],
+8 -3
View File
@@ -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>
+1 -1
View File
@@ -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': "",
@@ -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>
+1 -1
View File
@@ -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': [
+8 -3
View File
@@ -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>
+1 -1
View File
@@ -4,7 +4,7 @@
{
'name': 'Purchase',
'version': '1.2',
'category': 'Purchase',
'category': 'Operations/Purchase',
'sequence': 60,
'summary': 'Purchase orders, tenders and agreements',
'description': "",
@@ -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>
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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
@@ -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>
@@ -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>
+1 -1
View File
@@ -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',
+8 -3
View File
@@ -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>
+1 -1
View File
@@ -3,7 +3,7 @@
{
'name': 'Surveys',
'version': '3.0',
'category': 'Marketing',
'category': 'Marketing/Survey',
'description': """
Create beautiful surveys and visualize answers
==============================================
+8 -3
View File
@@ -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>
+1 -1
View File
@@ -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',
+6 -2
View File
@@ -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">
+11 -149
View File
@@ -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 &amp; 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">
+17 -17
View File
@@ -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 &amp; 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"/>
-1
View File
@@ -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
+24 -11
View File
@@ -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, '')]
@@ -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.