Module Master Selector

This commit is contained in:
karuna 2026-03-10 10:45:00 +05:30
parent 5d6c2c09aa
commit b5b276f552
9 changed files with 130 additions and 0 deletions

View File

@ -0,0 +1 @@
from . import controllers

View File

@ -0,0 +1,12 @@
{
"name": "Custom Module Switcher",
"version": "1.0",
"depends": ["web"],
"assets": {
"web.assets_backend": [
"module_selector_sidebar/static/src/js/module_switcher.js",
"module_selector_sidebar/static/src/xml/module_switcher.xml",
],
},
"installable": True,
}

View File

@ -0,0 +1 @@
from . import master_switcher

View File

@ -0,0 +1,14 @@
from odoo import http
from odoo.http import request
class MasterSwitcher(http.Controller):
@http.route('/switch/master/<string:code>', type='http', auth='user')
def switch_master(self, code):
request.session['active_master'] = code
request.env['ir.ui.menu'].sudo().clear_caches()
return request.redirect('/web?reload=1')

View File

@ -0,0 +1,22 @@
.custom-switcher {
position: fixed;
left: 0;
top: 40%;
width: 180px;
background: white;
padding: 15px;
box-shadow: 2px 2px 10px rgba(0,0,0,0.15);
z-index: 9999;
border-radius: 0 10px 10px 0;
}
.switcher-title {
font-weight: bold;
margin-bottom: 10px;
}
.custom-switcher button {
width: 100%;
margin-bottom: 8px;
padding: 6px;
}

View File

@ -0,0 +1,37 @@
/** @odoo-module **/
import { Component, onWillStart, useState } from "@odoo/owl";
import { registry } from "@web/core/registry";
import { useService } from "@web/core/utils/hooks";
export class ModuleSelector extends Component {
static template = "module_selector_sidebar.ModuleSelector";
static props = {};
setup() {
this.orm = useService("orm");
this.state = useState({
masters: [],
});
onWillStart(async () => {
const masters = await this.orm.searchRead(
"master.control",
[],
["name", "code"]
);
this.state.masters = masters;
});
}
}
registry.category("systray").add("module_selector_sidebar", {
Component: ModuleSelector,
});

View File

@ -0,0 +1,34 @@
<templates xml:space="preserve">
<t t-name="module_selector_sidebar.ModuleSelector" owl="1">
<div class="o_systray_item dropdown">
<button class="btn btn-link dropdown-toggle"
type="button"
data-bs-toggle="dropdown">
<i class="fa fa-th-large"/>
</button>
<div class="dropdown-menu dropdown-menu-end">
<t t-if="state.masters.length">
<t t-foreach="state.masters" t-as="master" t-key="master.code">
<a class="dropdown-item"
t-att-href="'/switch/master/' + master.code">
<t t-esc="master.name"/>
</a>
</t>
</t>
</div>
</div>
</t>
</templates>

View File

@ -14,6 +14,11 @@
# 'views/project_task_kudo_button.xml', # 'views/project_task_kudo_button.xml',
'views/task_assign_kudos_action.xml', 'views/task_assign_kudos_action.xml',
'views/kudo_log_extend.xml', 'views/kudo_log_extend.xml',
'views/task_form_extend.xml',
'views/task_timesheet_employee_domain.xml',
'views/task_timesheet_context.xml',
# 'views/task_timesheet_stage_domain.xml',
], ],
'post_init_hook': 'post_init_hook', 'post_init_hook': 'post_init_hook',
'installable': True, 'installable': True,

View File

@ -1 +1,5 @@
from . import project_kudo_extend from . import project_kudo_extend
from . import task_assignee_domain
from . import project_task
from . import account_analytic_line