From 75292e7b8881c2d16355a7ab2eb987aeea9385d2 Mon Sep 17 00:00:00 2001 From: Alaguraj0361 Date: Wed, 4 Mar 2026 17:44:12 +0530 Subject: [PATCH] Introduce a custom dashboard with role-based menu filtering, low stock alerts, and branded web layout including title, favicon, and a dashboard return button. --- addons/dine360_dashboard/controllers/main.py | 35 +++++++++++-------- .../views/web_title_template.xml | 3 +- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/addons/dine360_dashboard/controllers/main.py b/addons/dine360_dashboard/controllers/main.py index 4799358..eb99198 100644 --- a/addons/dine360_dashboard/controllers/main.py +++ b/addons/dine360_dashboard/controllers/main.py @@ -15,29 +15,34 @@ from odoo.addons.website.controllers.main import Website class ImageHome(Website): @http.route('/', type='http', auth='public', website=True, sitemap=True) def index(self, **kwargs): - # ----------------------------------------------------------- - # WEBSITE EDITOR FIX - # When Odoo's Website editor loads the site, it opens it in an - # iframe. We must NOT intercept that request with our backend - # dashboard; instead let the real website homepage render so the - # editor can attach to it. - # # Detection methods (any one is enough): # 1. Sec-Fetch-Dest == 'iframe' → browser signals iframe load - # 2. enable_editor param present → explicit editor activation - # 3. ?debug= in query string → editor dev mode coming from /web + # 2. enable_editor / edit param → explicit editor activation + # 3. path param → Odoo redirection to a specific page + # 4. Referer contains website/force → coming from editor switch # ----------------------------------------------------------- fetch_dest = request.httprequest.headers.get('Sec-Fetch-Dest', '') + referer = request.httprequest.headers.get('Referer', '') + is_iframe = fetch_dest == 'iframe' - is_editor = kwargs.get('enable_editor') or request.params.get('enable_editor') - - if is_iframe or is_editor: - # Let the standard Website controller render the homepage + is_editor_param = any([ + kwargs.get('enable_editor'), + request.params.get('enable_editor'), + kwargs.get('edit'), + request.params.get('edit'), + kwargs.get('path'), + request.params.get('path') + ]) + is_from_editor = '/website/force' in referer or 'enable_editor' in referer or '/web' in referer + + # In Odoo, when we click "Edit", it often redirects to /?path=... + # If any editor signal is present, we must let the real website handle it. + if is_iframe or is_editor_param or is_from_editor: return super(ImageHome, self).index(**kwargs) - # Not logged in → show the public website homepage + # For public users (not logged in), always show the standard website homepage if not request.session.uid: - return request.render('website.homepage') + return super(ImageHome, self).index(**kwargs) # Remove sudo() to respect Odoo's standard menu group restrictions menus = request.env['ir.ui.menu'].search([ diff --git a/addons/dine360_dashboard/views/web_title_template.xml b/addons/dine360_dashboard/views/web_title_template.xml index 7e30331..106395b 100644 --- a/addons/dine360_dashboard/views/web_title_template.xml +++ b/addons/dine360_dashboard/views/web_title_template.xml @@ -8,7 +8,8 @@ - + +