From 42abb214ac679a15da5a01afb9daebe1c437be2b Mon Sep 17 00:00:00 2001 From: Alaguraj0361 Date: Mon, 12 Oct 2026 12:42:32 +0530 Subject: [PATCH] fix(dashboard): resolve 500 internal server error on production server - Add SafeStats fallback wrapper to prevent QWeb KeyError exceptions - Safely resolve dictionary keys with .get() across all dashboard templates - Add support for production SaaS master database 'dine360db' - Add route mapping for '/dashboard' alongside '/' - Remove invalid tracking attribute from restaurant.table is_occupied field --- addons/dine360_dashboard/controllers/main.py | 34 ++++++++++++------- .../dine360_dashboard/views/home_template.xml | 34 +++++++++---------- .../views/reservations_page.xml | 20 +++++------ .../views/restaurants_page.xml | 20 +++++------ .../dine360_dashboard/views/tables_page.xml | 16 ++++----- .../models/restaurant_table.py | 2 +- 6 files changed, 67 insertions(+), 59 deletions(-) diff --git a/addons/dine360_dashboard/controllers/main.py b/addons/dine360_dashboard/controllers/main.py index 6d596b1..dfcdf92 100644 --- a/addons/dine360_dashboard/controllers/main.py +++ b/addons/dine360_dashboard/controllers/main.py @@ -17,14 +17,19 @@ class MenuWrapper: class SafeStats(dict): def __missing__(self, key): - if any(term in key for term in ['list', 'recent', 'products', 'orders', 'tables', 'reservations']): + if any(term in key for term in ['list', 'recent', 'products', 'orders', 'tables', 'reservations', 'floors', 'activities']): return [] - if any(term in key for term in ['count', 'total', 'capacity', 'rate', 'active', 'provisioning', 'expired']): + if any(term in key for term in ['count', 'total', 'capacity', 'rate', 'active', 'provisioning', 'expired', 'occupied', 'available', 'seats', 'percent']): return 0 - if 'formatted' in key: - return '$0.00' + if any(term in key for term in ['formatted', 'value', 'avg', 'revenue', 'price', 'ticket']): + return '₹0.00' return '' + def get(self, key, default=None): + if key in self: + return self[key] + return self.__missing__(key) if default is None else default + class CustomHome(Home): @http.route('/web/login', type='http', auth="public") def web_login(self, *args, **kw): @@ -35,9 +40,12 @@ class CustomHome(Home): def get_dashboard_context(active_page='dashboard'): """Helper to collect unified metrics and data for all Dine360 dashboard pages.""" - db_name = request.env.cr.dbname or '' - is_saas_master = ('Dine360Restaurants' in db_name) or ( - 'saas.restaurant' in request.env and bool(request.env['saas.restaurant'].sudo().search_count([])) + db_name = (request.env.cr.dbname or '').lower() + is_saas_master = ( + 'dine360restaurants' in db_name or + 'dine360db' in db_name or + 'saas' in db_name or + ('saas.restaurant' in request.env) ) user = request.env.user.sudo() @@ -345,17 +353,17 @@ def get_dashboard_context(active_page='dashboard'): 'active_page': active_page, 'user_id': user, 'is_saas_master': is_saas_master, - 'saas_stats': saas_stats, - 'saas_dashboard_data': saas_dashboard_data, + 'saas_stats': SafeStats(saas_stats), + 'saas_dashboard_data': SafeStats(saas_dashboard_data), 'onboarded_restaurants': onboarded_restaurants, 'plans': plans, - 'table_stats': table_stats, + 'table_stats': SafeStats(table_stats), 'tables': tables_list, 'available_tables': [t for t in tables_list if not t.get('is_occupied')], 'floors': floors_list, - 'reservation_stats': reservation_stats, + 'reservation_stats': SafeStats(reservation_stats), 'reservations': reservations_list, - 'online_orders_data': online_orders_data, + 'online_orders_data': SafeStats(online_orders_data), 'current_date_str': datetime.now().strftime('%d %b %Y'), 'stats': stats, 'low_stock_products': low_stock, @@ -384,7 +392,7 @@ class Dine360DashboardController(http.Controller): # ------------------------------------------------------------- # 1. Main Home & Overview # ------------------------------------------------------------- - @http.route('/', type='http', auth='user', website=True) + @http.route(['/', '/dashboard'], type='http', auth='user', website=True) def index(self, **kwargs): return render_dashboard(request) diff --git a/addons/dine360_dashboard/views/home_template.xml b/addons/dine360_dashboard/views/home_template.xml index d3df8ec..1709d9f 100644 --- a/addons/dine360_dashboard/views/home_template.xml +++ b/addons/dine360_dashboard/views/home_template.xml @@ -62,7 +62,7 @@ +0%
Total Restaurants
-
+
Active Subscriptions
-
+
Provisioning
-
+
Expired / Suspended
-
+