diff options
| author | jbm-odoo <jbm@odoo.com> | 2018-12-07 12:50:03 +0000 |
|---|---|---|
| committer | Yannick Tivisse <yti@odoo.com> | 2019-03-05 09:08:12 +0000 |
| commit | ec07e72845a390cdf9cf72ebbbf4369ea92ecfbe (patch) | |
| tree | cde381bde3d9fa626ec4c3d466d2c883e92f0b9c /odoo | |
| parent | c0222efd1393bf88720c56799ad8e63ae8cc89bc (diff) | |
[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>
Diffstat (limited to 'odoo')
| -rw-r--r-- | odoo/addons/base/data/ir_module_category_data.xml | 160 | ||||
| -rw-r--r-- | odoo/addons/base/data/ir_module_module.xml | 34 | ||||
| -rw-r--r-- | odoo/addons/base/models/ir_module.py | 1 | ||||
| -rw-r--r-- | odoo/addons/base/models/res_users.py | 35 | ||||
| -rw-r--r-- | odoo/addons/base/security/base_groups.xml | 3 |
5 files changed, 52 insertions, 181 deletions
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. |
