fix: website editor iframe blocked by dashboard controller, branding phone field, menu missing name

This commit is contained in:
Alaguraj0361 2026-03-04 12:57:41 +05:30
parent 165e582927
commit 146495a2e6
5 changed files with 60 additions and 20 deletions

View File

@ -11,6 +11,20 @@
'dine360_theme_chennora', 'dine360_theme_chennora',
'dine360_kds', 'dine360_kds',
'dine360_reservation', 'dine360_reservation',
'dine360_uber',
'dine360_recipe',
'mail',
'calendar',
'contacts',
'crm',
'sale_management',
'board',
'point_of_sale',
'account',
'website',
'purchase',
'stock',
'hr',
], ],
'uninstall_hook': 'uninstall_hook', 'uninstall_hook': 'uninstall_hook',
'data': [ 'data': [

View File

@ -15,50 +15,75 @@ from odoo.addons.website.controllers.main import Website
class ImageHome(Website): class ImageHome(Website):
@http.route('/', type='http', auth='public', website=True, sitemap=True) @http.route('/', type='http', auth='public', website=True, sitemap=True)
def index(self, **kwargs): 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
# -----------------------------------------------------------
fetch_dest = request.httprequest.headers.get('Sec-Fetch-Dest', '')
is_iframe = fetch_dest == 'iframe'
is_editor = kwargs.get('enable_editor') or request.params.get('enable_editor')
if is_iframe or is_editor:
# Render the actual website homepage directly.
# Do NOT call super().index() here — for logged-in admin users
# the standard Website.index() may redirect to /web (backend),
# which breaks the website editor iframe.
return request.render('website.homepage')
# Not logged in → show the public website homepage
if not request.session.uid: if not request.session.uid:
return request.render('website.homepage') return request.render('website.homepage')
# Remove sudo() to respect Odoo's standard menu group restrictions # Remove sudo() to respect Odoo's standard menu group restrictions
menus = request.env['ir.ui.menu'].search([ menus = request.env['ir.ui.menu'].search([
('parent_id', '=', False) ('parent_id', '=', False)
], order='sequence') ], order='sequence')
# User role checks # User role checks
is_admin = request.env.user.has_group('base.group_system') or request.env.user.has_group('dine360_restaurant.group_restaurant_admin') try:
is_kitchen = request.env.user.has_group('dine360_restaurant.group_restaurant_kitchen') is_admin = request.env.user.has_group('base.group_system') or \
request.env.user.has_group('dine360_restaurant.group_restaurant_admin')
is_kitchen = request.env.user.has_group('dine360_restaurant.group_restaurant_kitchen')
except Exception:
is_admin = request.env.user.has_group('base.group_system')
is_kitchen = False
filtered_menus = [] filtered_menus = []
seen_names = set() seen_names = set()
for menu in menus: for menu in menus:
# 1. Hide "Apps" for non-admins (usually name is 'Apps' or xmlid has base.menu_management) # 1. Hide "Apps" for non-admins
if (menu.name == 'Apps' or (menu.web_icon and menu.web_icon.startswith('base,'))) and not is_admin: if (menu.name == 'Apps' or (menu.web_icon and menu.web_icon.startswith('base,'))) and not is_admin:
continue continue
# 2. Hide "Kitchen (KDS)" for Waiters (only show for Kitchen Staff or Admin) # 2. Hide "Kitchen (KDS)" for non-kitchen/non-admin users
if 'Kitchen' in menu.name or 'KDS' in menu.name: if 'Kitchen' in menu.name or 'KDS' in menu.name:
if not (is_kitchen or is_admin): if not (is_kitchen or is_admin):
continue continue
# 3. De-duplicate by name to prevent double icons (like Kitchen showing twice) # 3. De-duplicate by name
if menu.name in seen_names: if menu.name in seen_names:
continue continue
seen_names.add(menu.name) seen_names.add(menu.name)
filtered_menus.append(menu) filtered_menus.append(menu)
# Low Stock Alerts (Ingredients) # Low Stock Alerts (Ingredients)
low_stock_products = [] low_stock_products = []
try: try:
# Try to get low stock products if the model and method exist
ProductTemplate = request.env['product.template'].sudo() ProductTemplate = request.env['product.template'].sudo()
if hasattr(ProductTemplate, 'get_low_stock_products'): if hasattr(ProductTemplate, 'get_low_stock_products'):
low_stock_products = ProductTemplate.get_low_stock_products(limit=5) low_stock_products = ProductTemplate.get_low_stock_products(limit=5)
except Exception: except Exception:
# Fallback if module is not yet fully loaded or method missing
low_stock_products = [] low_stock_products = []
return request.render('dine360_dashboard.image_home_template', { return request.render('dine360_dashboard.image_home_template', {
'menus': filtered_menus, 'menus': filtered_menus,
'user_id': request.env.user, 'user_id': request.env.user,

View File

@ -10,10 +10,8 @@
<record id="base.main_company" model="res.company"> <record id="base.main_company" model="res.company">
<field name="phone">+1(647)856-2878</field> <field name="phone">+1(647)856-2878</field>
</record> </record>
<!-- Update the website phone as well, as it might be used in the header --> <!-- Note: 'phone' field is not available on the website model in Odoo 17.
<record id="website.default_website" model="website"> Phone/contact info should be set on res.company (line above) instead. -->
<field name="phone">+1(647)856-2878</field>
</record>
</data> </data>
</odoo> </odoo>

View File

@ -4,7 +4,7 @@
'category': 'Manufacturing', 'category': 'Manufacturing',
'summary': 'Manage recipes and automatic ingredient-level inventory deduction', 'summary': 'Manage recipes and automatic ingredient-level inventory deduction',
'author': 'Dine360', 'author': 'Dine360',
'depends': ['point_of_sale', 'stock', 'dine360_restaurant'], 'depends': ['point_of_sale', 'stock'],
'data': [ 'data': [
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'views/recipe_views.xml', 'views/recipe_views.xml',

View File

@ -29,6 +29,9 @@
<!-- Update the menu item to use this action --> <!-- Update the menu item to use this action -->
<record id="menu_restaurant_kds_orders" model="ir.ui.menu"> <record id="menu_restaurant_kds_orders" model="ir.ui.menu">
<field name="name">Kitchen Display</field>
<field name="parent_id" ref="point_of_sale.menu_point_root"/>
<field name="action" ref="action_restaurant_kitchen_orders"/> <field name="action" ref="action_restaurant_kitchen_orders"/>
<field name="sequence">30</field>
</record> </record>
</odoo> </odoo>