[IMP] base_user_role_profile: black, isort, prettier

This commit is contained in:
Pierrick Brun
2020-12-18 14:05:31 +01:00
committed by KevinKhao
parent eb8eea4a21
commit b032978510
13 changed files with 136 additions and 113 deletions

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<odoo> <odoo>
<record id="default_profile" model="res.users.profile"> <record id="default_profile" model="res.users.profile">
<field name="name">No profile</field> <field name="name">No profile</field>

View File

@@ -9,9 +9,7 @@ class Http(models.AbstractModel):
def session_info(self): # pragma: no cover def session_info(self): # pragma: no cover
result = super().session_info() result = super().session_info()
user = request.env.user user = request.env.user
allowed_profiles = [ allowed_profiles = [(profile.id, profile.name) for profile in user.profile_ids]
(profile.id, profile.name) for profile in user.profile_ids
]
if len(allowed_profiles) > 1: if len(allowed_profiles) > 1:
current_profile = (user.profile_id.id, user.profile_id.name) current_profile = (user.profile_id.id, user.profile_id.name)
result["user_profiles"] = { result["user_profiles"] = {
@@ -20,7 +18,5 @@ class Http(models.AbstractModel):
} }
else: else:
result["user_profiles"] = False result["user_profiles"] = False
result["profile_id"] = ( result["profile_id"] = user.profile_id.id if request.session.uid else None
user.profile_id.id if request.session.uid else None
)
return result return result

View File

@@ -5,7 +5,10 @@ from odoo import fields, models
class ResUsersRole(models.Model): class ResUsersRole(models.Model):
_inherit = "res.users.role" _inherit = "res.users.role"
profile_id = fields.Many2one("res.users.profile", "Profile",) profile_id = fields.Many2one(
"res.users.profile",
"Profile",
)
class ResUsersRoleLine(models.Model): class ResUsersRoleLine(models.Model):

View File

@@ -15,7 +15,8 @@ class ResUsers(models.Model):
) )
profile_ids = fields.Many2many( profile_ids = fields.Many2many(
"res.users.profile", string="Currently allowed profiles", "res.users.profile",
string="Currently allowed profiles",
) )
def _get_action_root_menu(self): def _get_action_root_menu(self):
@@ -55,15 +56,12 @@ class ResUsers(models.Model):
def _get_applicable_roles(self): def _get_applicable_roles(self):
res = super()._get_applicable_roles() res = super()._get_applicable_roles()
res = res.filtered( res = res.filtered(
lambda r: not r.profile_id lambda r: not r.profile_id or (r.profile_id.id == r.user_id.profile_id.id)
or (r.profile_id.id == r.user_id.profile_id.id)
) )
return res return res
def _update_profile_id(self): def _update_profile_id(self):
default_profile = self.env.ref( default_profile = self.env.ref("base_user_role_profile.default_profile")
"base_user_role_profile.default_profile"
)
if not self.profile_ids: if not self.profile_ids:
if self.profile_id != default_profile: if self.profile_id != default_profile:
self.profile_id = default_profile self.profile_id = default_profile

View File

@@ -1,79 +1,85 @@
odoo.define('web.SwitchProfileMenu', function(require) { odoo.define("web.SwitchProfileMenu", function (require) {
"use strict"; "use strict";
var config = require('web.config'); var config = require("web.config");
var core = require('web.core'); var core = require("web.core");
var session = require('web.session'); var session = require("web.session");
var SystrayMenu = require('web.SystrayMenu'); var SystrayMenu = require("web.SystrayMenu");
var Widget = require('web.Widget') var Widget = require("web.Widget");
var _t = core._t; var _t = core._t;
var SwitchProfileMenu = Widget.extend({ var SwitchProfileMenu = Widget.extend({
template: 'SwitchProfileMenu', template: "SwitchProfileMenu",
events: { events: {
'click .dropdown-item[data-menu]': '_onClick', "click .dropdown-item[data-menu]": "_onClick",
}, },
init: function() { init: function () {
this._super.apply(this, arguments); this._super.apply(this, arguments);
this.isMobile = config.device.isMobile; this.isMobile = config.device.isMobile;
this._onClick = _.debounce(this._onClick, 1500, true); this._onClick = _.debounce(this._onClick, 1500, true);
}, },
willStart: function() { willStart: function () {
return session.user_profiles ? this._super() : $.Deferred().reject(); return session.user_profiles ? this._super() : $.Deferred().reject();
}, },
start: function() { start: function () {
var profilesList = ''; var profilesList = "";
if (this.isMobile) { if (this.isMobile) {
profilesList = '<li class="bg-info">' + profilesList =
_t('Tap on the list to change profile') + '</li>'; '<li class="bg-info">' +
_t("Tap on the list to change profile") +
"</li>";
} else { } else {
this.$('.oe_topbar_name').text(session.user_profiles.current_profile[1]); this.$(".oe_topbar_name").text(
session.user_profiles.current_profile[1]
);
} }
_.each(session.user_profiles.allowed_profiles, function(profile) { _.each(session.user_profiles.allowed_profiles, function (profile) {
var a = ''; var a = "";
if (profile[0] == session.user_profiles.current_profile[0]) { if (profile[0] == session.user_profiles.current_profile[0]) {
a = '<i class="fa fa-check mr8"></i>'; a = '<i class="fa fa-check mr8"></i>';
} else { } else {
a = '<span style="margin-right: 24px;"/>'; a = '<span style="margin-right: 24px;"/>';
} }
profilesList += '<a role="menuitem" href="#" class="dropdown-item" data-menu="profile" data-profile-id="' + profilesList +=
profile[0] + '">' + a + profile[1] + '</a>'; '<a role="menuitem" href="#" class="dropdown-item" data-menu="profile" data-profile-id="' +
profile[0] +
'">' +
a +
profile[1] +
"</a>";
}); });
this.$('.dropdown-menu').html(profilesList); this.$(".dropdown-menu").html(profilesList);
return this._super(); return this._super();
}, },
_onClick: function(ev) { _onClick: function (ev) {
var self = this; var self = this;
ev.preventDefault(); ev.preventDefault();
var profileID = $(ev.currentTarget).data('profile-id'); var profileID = $(ev.currentTarget).data("profile-id");
// We use this instead of the location.reload() because permissions change // We use this instead of the location.reload() because permissions change
// and we might land on a menu that we don't have permissions for. Thus it // and we might land on a menu that we don't have permissions for. Thus it
// is cleaner to reload any root menu // is cleaner to reload any root menu
this._rpc({ this._rpc({
model: 'res.users', model: "res.users",
method: 'action_profile_change', method: "action_profile_change",
args: [ args: [
[session.uid], { [session.uid],
'profile_id': profileID {
} profile_id: profileID,
},
], ],
}) }).done(function (result) {
.done( self.trigger_up("do_action", {
function(result) {
self.trigger_up('do_action', {
action: result, action: result,
}) });
} });
)
}, },
}); });
SystrayMenu.Items.push(SwitchProfileMenu); SystrayMenu.Items.push(SwitchProfileMenu);
return SwitchProfileMenu; return SwitchProfileMenu;
}); });

View File

@@ -1,12 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" ?>
<templates id="template" xml:space="preserve"> <templates id="template" xml:space="preserve">
<t t-name="SwitchProfileMenu"> <t t-name="SwitchProfileMenu">
<li class="o_switch_profile_menu"> <li class="o_switch_profile_menu">
<a role="button" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" href="#" aria-label="Dropdown menu" title="Dropdown menu"> <a
<span t-attf-class="#{widget.isMobile ? 'fa fa-building-o' : 'oe_topbar_name'}"/> role="button"
class="dropdown-toggle"
data-toggle="dropdown"
aria-expanded="false"
href="#"
aria-label="Dropdown menu"
title="Dropdown menu"
>
<span
t-attf-class="#{widget.isMobile ? 'fa fa-building-o' : 'oe_topbar_name'}"
/>
</a> </a>
<div class="dropdown-menu dropdown-menu-right" role="menu"/> <div class="dropdown-menu dropdown-menu-right" role="menu" />
</li> </li>
</t> </t>

View File

@@ -30,12 +30,8 @@ class TestUserProfile(TransactionCase):
} }
self.user_id = self.user_model.create(user_vals) self.user_id = self.user_model.create(user_vals)
self.profile1_id = self.env["res.users.profile"].create( self.profile1_id = self.env["res.users.profile"].create({"name": "profile1"})
{"name": "profile1"} self.profile2_id = self.env["res.users.profile"].create({"name": "profile2"})
)
self.profile2_id = self.env["res.users.profile"].create(
{"name": "profile2"}
)
# role 1 # role 1
self.group_user_id = self.env.ref("base.group_user") self.group_user_id = self.env.ref("base.group_user")
@@ -47,16 +43,12 @@ class TestUserProfile(TransactionCase):
# role 3 # role 3
self.group_erp_manager_id = self.env.ref("base.group_erp_manager") self.group_erp_manager_id = self.env.ref("base.group_erp_manager")
self.group_partner_manager_id = self.env.ref( self.group_partner_manager_id = self.env.ref("base.group_partner_manager")
"base.group_partner_manager"
)
# roles 1 and 2 have a profile, role 3 no profile # roles 1 and 2 have a profile, role 3 no profile
vals = { vals = {
"name": "ROLE_1", "name": "ROLE_1",
"implied_ids": [ "implied_ids": [(6, 0, [self.group_user_id.id, self.group_no_one_id.id])],
(6, 0, [self.group_user_id.id, self.group_no_one_id.id])
],
"profile_id": self.profile1_id.id, "profile_id": self.profile1_id.id,
} }
self.role1_id = self.role_model.create(vals) self.role1_id = self.role_model.create(vals)
@@ -97,23 +89,17 @@ class TestUserProfile(TransactionCase):
self.user_id.write({"role_line_ids": [(0, 0, line1_vals)]}) self.user_id.write({"role_line_ids": [(0, 0, line1_vals)]})
line2_vals = {"role_id": self.role2_id.id, "user_id": self.user_id.id} line2_vals = {"role_id": self.role2_id.id, "user_id": self.user_id.id}
self.user_id.write({"role_line_ids": [(0, 0, line2_vals)]}) self.user_id.write({"role_line_ids": [(0, 0, line2_vals)]})
self.assertEqual( self.assertEqual(self.user_id.profile_ids, self.profile1_id + self.profile2_id)
self.user_id.profile_ids, self.profile1_id + self.profile2_id
)
self.assertEqual(self.user_id.profile_id, self.profile1_id) self.assertEqual(self.user_id.profile_id, self.profile1_id)
self.user_id.action_profile_change({"profile_id": self.profile1_id.id}) self.user_id.action_profile_change({"profile_id": self.profile1_id.id})
user_group_ids = sorted( user_group_ids = sorted({group.id for group in self.user_id.groups_id})
set([group.id for group in self.user_id.groups_id])
)
expected_group_ids = sorted(set(self.role1_group_ids)) expected_group_ids = sorted(set(self.role1_group_ids))
self.assertEqual(user_group_ids, expected_group_ids) self.assertEqual(user_group_ids, expected_group_ids)
self.user_id.action_profile_change({"profile_id": self.profile2_id.id}) self.user_id.action_profile_change({"profile_id": self.profile2_id.id})
user_group_ids = sorted( user_group_ids = sorted({group.id for group in self.user_id.groups_id})
set([group.id for group in self.user_id.groups_id])
)
expected_group_ids = sorted(set(self.role2_group_ids)) expected_group_ids = sorted(set(self.role2_group_ids))
self.assertEqual(user_group_ids, expected_group_ids) self.assertEqual(user_group_ids, expected_group_ids)
@@ -146,16 +132,12 @@ class TestUserProfile(TransactionCase):
self.user_id.write({"role_line_ids": [(0, 0, line2_vals)]}) self.user_id.write({"role_line_ids": [(0, 0, line2_vals)]})
self.assertEqual(self.user_id.profile_ids, self.profile1_id) self.assertEqual(self.user_id.profile_ids, self.profile1_id)
user_group_ids = sorted( user_group_ids = sorted({group.id for group in self.user_id.groups_id})
set([group.id for group in self.user_id.groups_id])
)
expected_group_ids = sorted(set(self.role1_group_ids)) expected_group_ids = sorted(set(self.role1_group_ids))
self.assertEqual(user_group_ids, expected_group_ids) self.assertEqual(user_group_ids, expected_group_ids)
self.user_id.company_id = self.company2 self.user_id.company_id = self.company2
self.assertEqual(self.user_id.profile_ids, self.profile2_id) self.assertEqual(self.user_id.profile_ids, self.profile2_id)
user_group_ids = sorted( user_group_ids = sorted({group.id for group in self.user_id.groups_id})
set([group.id for group in self.user_id.groups_id])
)
expected_group_ids = sorted(set(self.role2_group_ids)) expected_group_ids = sorted(set(self.role2_group_ids))
self.assertEqual(user_group_ids, expected_group_ids) self.assertEqual(user_group_ids, expected_group_ids)

View File

@@ -1,9 +1,15 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<odoo> <odoo>
<template id="assets_backend" name="User Role Profile assets" inherit_id="web.assets_backend"> <template
id="assets_backend"
name="User Role Profile assets"
inherit_id="web.assets_backend"
>
<xpath expr="." position="inside"> <xpath expr="." position="inside">
<script type="text/javascript" src="/base_user_role_profile/static/src/js/switch_profile_menu.js"/> <script
type="text/javascript"
src="/base_user_role_profile/static/src/js/switch_profile_menu.js"
/>
</xpath> </xpath>
</template> </template>
</odoo> </odoo>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<!--License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).--> <!--License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).-->
<odoo> <odoo>
@@ -9,8 +9,8 @@
<form> <form>
<sheet> <sheet>
<group> <group>
<field name="name"/> <field name="name" />
<field name="user_ids"/> <field name="user_ids" />
</group> </group>
</sheet> </sheet>
</form> </form>
@@ -22,7 +22,7 @@
<field name="model">res.users.profile</field> <field name="model">res.users.profile</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree> <tree>
<field name="name"/> <field name="name" />
</tree> </tree>
</field> </field>
</record> </record>
@@ -32,11 +32,13 @@
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="res_model">res.users.profile</field> <field name="res_model">res.users.profile</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_id" ref="view_res_users_profile_tree"/> <field name="view_id" ref="view_res_users_profile_tree" />
</record> </record>
<menuitem id="menu_action_res_users_profile_tree" <menuitem
id="menu_action_res_users_profile_tree"
parent="base.menu_users" parent="base.menu_users"
action="action_res_users_profile_tree"/> action="action_res_users_profile_tree"
/>
</odoo> </odoo>

View File

@@ -1,17 +1,20 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<!--License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).--> <!--License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).-->
<odoo> <odoo>
<record id="view_res_users_form_inherit" model="ir.ui.view"> <record id="view_res_users_form_inherit" model="ir.ui.view">
<field name="name">res.users.role.form.inherit</field> <field name="name">res.users.role.form.inherit</field>
<field name="model">res.users.role</field> <field name="model">res.users.role</field>
<field name="inherit_id" ref="base_user_role.view_res_users_role_form"/> <field name="inherit_id" ref="base_user_role.view_res_users_role_form" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='line_ids']//field[@name='company_id']" position="after"> <xpath
<field name="profile_id"/> expr="//field[@name='line_ids']//field[@name='company_id']"
position="after"
>
<field name="profile_id" />
</xpath> </xpath>
<xpath expr="//field[@name='group_id']" position="after"> <xpath expr="//field[@name='group_id']" position="after">
<field name="profile_id"/> <field name="profile_id" />
</xpath> </xpath>
</field> </field>
</record> </record>

View File

@@ -1,21 +1,31 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<!--License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).--> <!--License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).-->
<odoo> <odoo>
<record id="view_res_users_form_inherit_profile" model="ir.ui.view"> <record id="view_res_users_form_inherit_profile" model="ir.ui.view">
<field name="name">res.users.form.inherit</field> <field name="name">res.users.form.inherit</field>
<field name="model">res.users</field> <field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form"/> <field name="inherit_id" ref="base.view_users_form" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='role_line_ids']" position="before"> <xpath expr="//field[@name='role_line_ids']" position="before">
<group> <group>
<field name="profile_ids" widget="many2many_tags" attrs="{'readonly': True}"/> <field
<field name="profile_id" domain="[('id', 'in', profile_ids)]" name="profile_ids"
options="{'no_create_edit': True, 'no_open': True}"/> widget="many2many_tags"
attrs="{'readonly': True}"
/>
<field
name="profile_id"
domain="[('id', 'in', profile_ids)]"
options="{'no_create_edit': True, 'no_open': True}"
/>
</group> </group>
</xpath> </xpath>
<xpath expr="//field[@name='role_line_ids']//field[@name='company_id']" position="after"> <xpath
<field name="profile_id"/> expr="//field[@name='role_line_ids']//field[@name='company_id']"
position="after"
>
<field name="profile_id" />
</xpath> </xpath>
</field> </field>
</record> </record>
@@ -23,13 +33,14 @@
<record id="view_res_users_form_show_company" model="ir.ui.view"> <record id="view_res_users_form_show_company" model="ir.ui.view">
<field name="name">res.users.form.inherit</field> <field name="name">res.users.form.inherit</field>
<field name="model">res.users</field> <field name="model">res.users</field>
<field name="inherit_id" ref="base_user_role.view_res_users_form_inherit"/> <field name="inherit_id" ref="base_user_role.view_res_users_form_inherit" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='role_line_ids']//field[@name='company_id']" position="attributes"> <xpath
<attribute name="groups" eval=""/> expr="//field[@name='role_line_ids']//field[@name='company_id']"
position="attributes"
>
<attribute name="groups" eval="" />
</xpath> </xpath>
</field> </field>
</record> </record>
</odoo> </odoo>

View File

@@ -0,0 +1 @@
../../../../base_user_role_profile

View File

@@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)