Skip to Content
เมนู
คุณต้องลงทะเบียนเพื่อโต้ตอบกับคอมมูนิตี้
คำถามนี้ถูกตั้งค่าสถานะ
3 ตอบกลับ
7302 มุมมอง

We are using multi company structure. Company A and Company B.

A menuitem called "Recurring Invoice Pipeline" i want to hide for Company A and want to show for company B.

How to achieve this?



อวตาร
ละทิ้ง
ผู้เขียน

I want to hide a menuitem not a field.

Hello,

Have you found a solution that worked well for this?

I am using menuitems as quick filtering of data in Inventory. But these menuitems will not apply to the other company. I'm not sure if there is an easy solution for Odoo Online. Most users have multi company access.

Thanks

คำตอบที่ดีที่สุด

You can apply record rules in menu item records. 

Create a method in the res.users model that will check if the current user is allowed to access the menu. Below is an actual example. Just add a condition to check for the company.

    def get_restricted_menus(self):
restricted_menu = ['sale.menu_sale_quotations',
'stock.menu_stock_warehouse_mgmt',
'sale.menu_sale_invoicing',
'mail.menu_root_discuss',
'contacts.menu_contacts',
'sale.menu_sale_order',
'sale.res_partner_menu']
menu_ids = []
for menu in restricted_menu:
try:
menu_ids.append(self.env.ref(menu).id)
except:
continue
return menu_ids


Then create a record rule assign it to the group. The domain is something like 

[('id', 'not in', user.get_restricted_menus())]








อวตาร
ละทิ้ง
คำตอบที่ดีที่สุด
it is definitely worked

1)create js file
odoo.define('your_module.HideMenuSection', function (require) {
"use strict";

var core = require('web.core');
var _t = core._t;
const ajax = require('web.ajax');
var SwitchCompanyMenu = require('web.SwitchCompanyMenu');
var session = require('web.session');

SwitchCompanyMenu.include({
_onSwitchCompanyClick: function (ev) {
if (session.user_context.allowed_company_ids) {
let cmp_id = session.user_context.allowed_company_ids[0];
ajax.jsonRpc("/switch/user/company", 'call', {
'company_id': cmp_id,
})
}
this._super.apply(this, arguments);
},
});
});

2)call the controller
from odoo.addons.website.controllers.main import Website



class BackendControllerInherit(Website):
"""Website Inherit"""

@http.route('/switch/user/company', type='json', auth="user")
def switch_user_company_details(self, company_id, **kw):
"""Check selected user company"""
restricted_menu = 'your_module.your_menuitem_id'
menu_id = None
try:
menu_id = request.env.ref(restricted_menu).id
except:
pass
if menu_id:
menu = request.env['ir.ui.menu'].browse(menu_id)
if company_id:
if company_id == 1:
menu.sudo().update({'active': False})
else:
menu.sudo().update({'active': True}) 
3) add link reference

odoo>
template id="assets_backend" name="claim assets backend" inherit_id="web.assets_backend">
xpath expr="." position="inside">
script type="text/javascript" src="/your_module_name/static/src/js/your_js_file_name.js"/>
/xpath>
/template>
/odoo>
อวตาร
ละทิ้ง
คำตอบที่ดีที่สุด

Hi,

Try create a boolean Field under company to show Recurring Invoice Pipeline menu and set the attrs invisible based on company boolean field.

Regards

อวตาร
ละทิ้ง
ผู้เขียน

I believe attrs not supported on menu item.
Can you share sample code/example to achieve solution given by you.

Related Posts ตอบกลับ มุมมอง กิจกรรม
0
มี.ค. 21
4247
Always invisible fields on V18 แก้ไขแล้ว
1
มิ.ย. 25
4488
0
พ.ค. 21
2270
3
ก.พ. 24
2657
1
พ.ค. 22
3579