updated with dine360 branding
@ -6,7 +6,7 @@ Successfully changed the entire Odoo site's primary color to **#fecd4f** (Golden
|
||||
## Changes Made
|
||||
|
||||
### 1. Created Theme Variables File
|
||||
**File:** `d:\Odoo\addons\home_dashboard\static\src\css\theme_variables.css`
|
||||
**File:** `d:\Odoo\addons\dine360_dashboard\static\src\css\theme_variables.css`
|
||||
- Defined CSS custom properties (variables) for the primary color and all variations
|
||||
- Applied primary color to all common Odoo UI elements:
|
||||
- Buttons (primary, save, create)
|
||||
@ -25,7 +25,7 @@ Successfully changed the entire Odoo site's primary color to **#fecd4f** (Golden
|
||||
- Search bars
|
||||
|
||||
### 2. Updated Home Menu CSS
|
||||
**File:** `d:\Odoo\addons\home_dashboard\static\src\css\home_menu.css`
|
||||
**File:** `d:\Odoo\addons\dine360_dashboard\static\src\css\home_menu.css`
|
||||
- App card hover effects now use primary color (#fecd4f)
|
||||
- App name hover color changed to primary color
|
||||
- User avatar background uses gradient with primary color
|
||||
@ -33,11 +33,11 @@ Successfully changed the entire Odoo site's primary color to **#fecd4f** (Golden
|
||||
- AI icon gradient updated to include primary color
|
||||
|
||||
### 3. Updated Manifest
|
||||
**File:** `d:\Odoo\addons\home_dashboard\__manifest__.py`
|
||||
**File:** `d:\Odoo\addons\dine360_dashboard\__manifest__.py`
|
||||
- Added `theme_variables.css` to assets list (loads first)
|
||||
|
||||
### 4. Existing Login Page
|
||||
**File:** `d:\Odoo\addons\home_dashboard\static\src\css\login_style.css`
|
||||
**File:** `d:\Odoo\addons\dine360_dashboard\static\src\css\login_style.css`
|
||||
- Already uses #fecd4f in the gradient background
|
||||
- Login button uses gradient from secondary to primary color
|
||||
|
||||
@ -69,7 +69,7 @@ Successfully changed the entire Odoo site's primary color to **#fecd4f** (Golden
|
||||
|
||||
2. **Update the Module:**
|
||||
```bash
|
||||
docker-compose exec odoo odoo -u home_dashboard -d FOODIES-DELIGHT --stop-after-init
|
||||
docker-compose exec odoo odoo -u dine360_dashboard -d FOODIES-DELIGHT --stop-after-init
|
||||
```
|
||||
|
||||
3. **Clear Browser Cache:**
|
||||
@ -92,7 +92,7 @@ After restarting, check these elements for the primary color:
|
||||
## Customization
|
||||
|
||||
To change the primary color in the future, simply edit:
|
||||
`d:\Odoo\addons\home_dashboard\static\src\css\theme_variables.css`
|
||||
`d:\Odoo\addons\dine360_dashboard\static\src\css\theme_variables.css`
|
||||
|
||||
Update the `--primary-color` variable at the top of the file:
|
||||
```css
|
||||
@ -103,3 +103,4 @@ Update the `--primary-color` variable at the top of the file:
|
||||
```
|
||||
|
||||
Then restart Odoo and clear browser cache.
|
||||
|
||||
|
||||
113
README.md
Normal file
@ -0,0 +1,113 @@
|
||||
# Dine360 Odoo Addons
|
||||
|
||||
This repository contains custom Odoo 17 addons for the Dine360 Restaurant Suite. It includes a website theme, a custom login/dashboard experience, and a restaurant role-based access module, all bundled by a meta module for one-click install.
|
||||
|
||||
## Stack
|
||||
- Odoo 17 (Docker)
|
||||
- Postgres 15 (Docker)
|
||||
- Addons mounted from `./addons`
|
||||
|
||||
## Services (Docker)
|
||||
- Odoo: `http://localhost:10001`
|
||||
- DB: Postgres 15 (`odoo` / `odoo`)
|
||||
|
||||
## Repository Layout
|
||||
- `addons/` – Odoo addons
|
||||
- `docker-compose.yml` – Odoo + Postgres stack
|
||||
- `backup_db.ps1`, `export_odoo.ps1` – Windows helpers
|
||||
- `inspect_views.py`, `resolve_homepage.py`, etc. – view debugging helpers
|
||||
|
||||
## Addons
|
||||
|
||||
### 1) `dine360_dashboard`
|
||||
Custom login layout and app-grid dashboard landing page.
|
||||
|
||||
Key features:
|
||||
- Redirect `/web/login` to `/` after successful login
|
||||
- Override `/` for authenticated users to show a custom app dashboard
|
||||
- Custom login page layout and styling
|
||||
|
||||
Key files:
|
||||
- `addons/dine360_dashboard/controllers/main.py`
|
||||
- `addons/dine360_dashboard/views/home_template.xml`
|
||||
- `addons/dine360_dashboard/views/login_templates.xml`
|
||||
- `addons/dine360_dashboard/views/web_title_template.xml`
|
||||
- `addons/dine360_dashboard/views/website_logo.xml`
|
||||
- `addons/dine360_dashboard/static/src/css/*`
|
||||
|
||||
### 2) `dine360_restaurant`
|
||||
Role-based access control for restaurant staff.
|
||||
|
||||
Roles:
|
||||
- Admin/Owner, Manager, Cashier, Waiter/Captain, Kitchen (KDS), Store Keeper
|
||||
|
||||
Key files:
|
||||
- `addons/dine360_restaurant/models/res_users.py`
|
||||
- `addons/dine360_restaurant/security/*`
|
||||
- `addons/dine360_restaurant/views/*`
|
||||
|
||||
### 3) `dine360_theme_chennora`
|
||||
Custom website theme and page content (homepage + contact us).
|
||||
|
||||
Key files:
|
||||
- `addons/dine360_theme_chennora/views/layout.xml`
|
||||
- `addons/dine360_theme_chennora/views/pages.xml`
|
||||
- `addons/dine360_theme_chennora/static/src/scss/*`
|
||||
- `addons/dine360_theme_chennora/static/src/img/*`
|
||||
|
||||
### 4) `Dine360_Chennora` (meta module)
|
||||
Install this single module to pull in all required addons.
|
||||
|
||||
Depends on:
|
||||
- `dine360_dashboard`
|
||||
- `dine360_restaurant`
|
||||
- `dine360_theme_chennora`
|
||||
|
||||
## Standard Install / Upgrade
|
||||
|
||||
### Start the stack
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### Update Apps list
|
||||
- Apps -> Update Apps List
|
||||
|
||||
### Install the suite (recommended)
|
||||
- Apps -> search `Dine360 Restaurant Suite` -> Install
|
||||
|
||||
### Upgrade the suite (after code changes)
|
||||
```bash
|
||||
docker exec odoo_client1 odoo -u Dine360_Chennora -d chennora_db --db_host db --db_user odoo --db_password odoo --stop-after-init
|
||||
```
|
||||
|
||||
### Upgrade a single addon
|
||||
```bash
|
||||
docker exec odoo_client1 odoo -u dine360_dashboard -d chennora_db --db_host db --db_user odoo --db_password odoo --stop-after-init
|
||||
```
|
||||
|
||||
## Logos (Apps icons)
|
||||
Place PNGs here (128x128 or 256x256 recommended):
|
||||
- `addons/Dine360_Chennora/static/description/icon.png`
|
||||
- `addons/dine360_dashboard/static/description/icon.png`
|
||||
- `addons/dine360_restaurant/static/description/icon.png`
|
||||
- `addons/dine360_theme_chennora/static/description/icon.png`
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### 500 error after view edits
|
||||
- Upgrade the affected module
|
||||
- Restart Odoo: `docker-compose restart odoo`
|
||||
- Hard refresh browser (Ctrl + F5)
|
||||
|
||||
### Old modules still present (home_dashboard, restaurant_management, theme_chennora)
|
||||
If you renamed modules, uninstall the old ones in Apps to avoid conflicts.
|
||||
|
||||
## Utilities
|
||||
Helper scripts for view diagnostics and homepage issues:
|
||||
- `inspect_views.py`, `inspect_views_v2.py`
|
||||
- `resolve_homepage.py`, `fix_homepage.py`, `force_inherit.py`
|
||||
|
||||
## Notes
|
||||
- Homepage content is fully overridden in `addons/dine360_theme_chennora/views/pages.xml`.
|
||||
- If theme changes don’t appear, check for COW (customized) views masking the theme.
|
||||
1
addons/Dine360_Chennora/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
# Meta module for Dine360 Chennora
|
||||
17
addons/Dine360_Chennora/__manifest__.py
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
'name': 'Dine360 Restaurant Suite',
|
||||
'version': '1.0.0',
|
||||
'license': 'LGPL-3',
|
||||
'category': 'Website',
|
||||
'summary': 'Installs all Dine360 Restaurant modules',
|
||||
'author': 'Dine360',
|
||||
'depends': [
|
||||
'dine360_dashboard',
|
||||
'dine360_restaurant',
|
||||
'dine360_theme_chennora',
|
||||
],
|
||||
'data': [],
|
||||
'installable': True,
|
||||
'application': True,
|
||||
}
|
||||
|
||||
BIN
addons/Dine360_Chennora/__pycache__/__init__.cpython-310.pyc
Normal file
BIN
addons/Dine360_Chennora/static/description/icon.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
addons/d360_Dashboard.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
addons/d360_Restaurant.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
addons/d360_Theme.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
addons/d360_logo.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
@ -24,7 +24,7 @@ try:
|
||||
|
||||
# Check theme view logic
|
||||
# The theme view should replace website.homepage
|
||||
theme_view = env.ref('theme_chennora.custom_homepage', raise_if_not_found=False)
|
||||
theme_view = env.ref('dine360_theme_chennora.custom_homepage', raise_if_not_found=False)
|
||||
if theme_view:
|
||||
print(f"Theme view found: {theme_view.name} (ID: {theme_view.id}, Priority: {theme_view.priority})")
|
||||
# Ensure it's active
|
||||
@ -37,7 +37,7 @@ try:
|
||||
theme_view.write({'priority': 50})
|
||||
print(" - Updated priority to 50")
|
||||
else:
|
||||
print("WARNING: Theme view 'theme_chennora.custom_homepage' not found! Make sure the module is upgraded.")
|
||||
print("WARNING: Theme view 'dine360_theme_chennora.custom_homepage' not found! Make sure the module is upgraded.")
|
||||
|
||||
env.cr.commit()
|
||||
print("--- FIX COMPLETE ---")
|
||||
@ -45,3 +45,4 @@ except Exception as e:
|
||||
print(f"ERROR: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
|
||||
3
addons/dine360_dashboard/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# dine360_dashboard/__init__.py
|
||||
from . import controllers
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
{
|
||||
'name': 'home_dashboard',
|
||||
'name': 'Dine360 Dashboard',
|
||||
'version': '1.0.1',
|
||||
'license': 'LGPL-3',
|
||||
'category': 'Website',
|
||||
@ -14,23 +14,23 @@
|
||||
],
|
||||
'assets': {
|
||||
'web.assets_backend': [
|
||||
'home_dashboard/static/src/css/theme_variables.css',
|
||||
'home_dashboard/static/src/css/home_menu.css',
|
||||
'home_dashboard/static/src/js/chennora_title.js',
|
||||
'dine360_dashboard/static/src/css/theme_variables.css',
|
||||
'dine360_dashboard/static/src/css/home_menu.css',
|
||||
'dine360_dashboard/static/src/js/chennora_title.js',
|
||||
],
|
||||
'web.assets_frontend': [
|
||||
'home_dashboard/static/src/css/theme_variables.css',
|
||||
'home_dashboard/static/src/css/login_style.css',
|
||||
'home_dashboard/static/src/css/website_style.css',
|
||||
'home_dashboard/static/src/css/shop_style.css',
|
||||
'dine360_dashboard/static/src/css/theme_variables.css',
|
||||
'dine360_dashboard/static/src/css/login_style.css',
|
||||
'dine360_dashboard/static/src/css/website_style.css',
|
||||
'dine360_dashboard/static/src/css/shop_style.css',
|
||||
],
|
||||
'web.assets_common': [
|
||||
'home_dashboard/static/src/css/theme_variables.css',
|
||||
'dine360_dashboard/static/src/css/theme_variables.css',
|
||||
],
|
||||
'point_of_sale._assets_pos': [
|
||||
'home_dashboard/static/src/css/pos_style.css',
|
||||
'dine360_dashboard/static/src/css/pos_style.css',
|
||||
],
|
||||
},
|
||||
'installable': True,
|
||||
'application': True,
|
||||
}
|
||||
}
|
||||
BIN
addons/dine360_dashboard/__pycache__/__init__.cpython-310.pyc
Normal file
4
addons/dine360_dashboard/controllers/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# dine360_dashboard/controllers/__init__.py
|
||||
from . import main
|
||||
from . import cors
|
||||
|
||||
@ -20,7 +20,7 @@ class ImageHome(Website):
|
||||
('parent_id', '=', False)
|
||||
], order='sequence')
|
||||
|
||||
return request.render('home_dashboard.image_home_template', {
|
||||
return request.render('dine360_dashboard.image_home_template', {
|
||||
'menus': menus,
|
||||
'user_id': request.env.user
|
||||
})
|
||||
@ -28,4 +28,4 @@ class ImageHome(Website):
|
||||
@http.route('/home', type='http', auth="public", website=True, sitemap=True)
|
||||
def website_home(self, **kw):
|
||||
# Explicit route for standard Website Homepage
|
||||
return request.render('website.homepage')
|
||||
return request.render('website.homepage')
|
||||
BIN
addons/dine360_dashboard/static/description/icon.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
@ -5,7 +5,7 @@
|
||||
width: 100vw !important;
|
||||
overflow: hidden;
|
||||
background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
|
||||
url('/home_dashboard/static/src/img/login_bg.png') no-repeat center center !important;
|
||||
url('/dine360_dashboard/static/src/img/login_bg.png') no-repeat center center !important;
|
||||
background-size: cover !important;
|
||||
}
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
position: relative;
|
||||
/* Dark overlay on image for text readability */
|
||||
/* background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
|
||||
url('/home_dashboard/static/src/img/login_bg.png') no-repeat center center !important;
|
||||
url('/dine360_dashboard/static/src/img/login_bg.png') no-repeat center center !important;
|
||||
background-size: cover !important; */
|
||||
color: white !important;
|
||||
}
|
||||
@ -238,7 +238,7 @@ body.o_custom_login_body .o_login_main_wrapper {
|
||||
/* width: 100vw !important; */
|
||||
overflow: hidden !important;
|
||||
background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
|
||||
url('/home_dashboard/static/src/img/login_bg.png') no-repeat center center !important;
|
||||
url('/dine360_dashboard/static/src/img/login_bg.png') no-repeat center center !important;
|
||||
background-size: cover !important;
|
||||
color: white !important;
|
||||
}
|
||||
@ -256,4 +256,4 @@ body.o_custom_login_body .o_login_main_wrapper {
|
||||
border: 1px solid rgba(255, 255, 255, 0.1) !important;
|
||||
z-index: 2;
|
||||
max-width: 400px;
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 760 KiB After Width: | Height: | Size: 760 KiB |
@ -3,7 +3,7 @@
|
||||
<t t-call="web.frontend_layout">
|
||||
<t t-set="no_footer" t-value="True"/>
|
||||
<t t-set="no_header" t-value="True"/>
|
||||
<link rel="stylesheet" type="text/css" href="/home_dashboard/static/src/css/home_menu.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/dine360_dashboard/static/src/css/home_menu.css"/>
|
||||
|
||||
<div class="o_home_menu_background">
|
||||
<!-- Top Bar -->
|
||||
@ -77,3 +77,4 @@
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
|
||||
@ -5,11 +5,11 @@
|
||||
<t t-set="no_header" t-value="True"/>
|
||||
<t t-set="no_footer" t-value="True"/>
|
||||
<t t-set="head">
|
||||
<link rel="stylesheet" type="text/css" href="/home_dashboard/static/src/css/login_style.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/dine360_dashboard/static/src/css/login_style.css"/>
|
||||
</t>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//div[hasclass('container')]" position="replace">
|
||||
<xpath expr="//div[contains(@class,'container')]" position="replace">
|
||||
<div class="o_login_main_wrapper">
|
||||
<div class="o_login_left_side">
|
||||
<!-- Space for right alignment -->
|
||||
@ -42,4 +42,4 @@
|
||||
</div>
|
||||
</xpath>
|
||||
</template>
|
||||
</odoo>
|
||||
</odoo>
|
||||
@ -6,7 +6,7 @@
|
||||
This template typically contains a single span or img for the logo.
|
||||
-->
|
||||
<template id="custom_website_logo_placeholder" inherit_id="website.placeholder_header_brand" name="Custom Website Logo Placeholder">
|
||||
<xpath expr="//span" position="replace">
|
||||
<xpath expr="/*" position="replace">
|
||||
<img src="/web/binary/company_logo" t-att-alt="website.name" class="img-fluid" style="height: 3rem;"/>
|
||||
</xpath>
|
||||
</template>
|
||||
@ -1,5 +1,5 @@
|
||||
{
|
||||
'name': 'Restaurant Management System',
|
||||
'name': 'Dine360 Restaurant',
|
||||
'version': '1.0',
|
||||
'category': 'Sales/Point of Sale',
|
||||
'summary': 'Advanced Role-Based Access for Restaurants',
|
||||
@ -12,7 +12,7 @@
|
||||
- Kitchen (KDS)
|
||||
- Store Keeper
|
||||
""",
|
||||
'author': 'Antigravity',
|
||||
'author': 'Dine360',
|
||||
'depends': ['point_of_sale', 'purchase', 'stock', 'website_sale'],
|
||||
'data': [
|
||||
'security/restaurant_security.xml',
|
||||
BIN
addons/dine360_restaurant/__pycache__/__init__.cpython-310.pyc
Normal file
@ -20,41 +20,41 @@ class ResUsers(models.Model):
|
||||
# Map roles to their XML IDs and REQUIRED Odoo Base groups to keep sections visible
|
||||
role_mapping = {
|
||||
'waiter': [
|
||||
'restaurant_management.group_restaurant_waiter',
|
||||
'dine360_restaurant.group_restaurant_waiter',
|
||||
'base.group_user',
|
||||
'point_of_sale.group_pos_user'
|
||||
],
|
||||
'chef': [
|
||||
'restaurant_management.group_restaurant_kitchen',
|
||||
'dine360_restaurant.group_restaurant_kitchen',
|
||||
'base.group_user'
|
||||
],
|
||||
'cashier': [
|
||||
'restaurant_management.group_restaurant_cashier',
|
||||
'dine360_restaurant.group_restaurant_cashier',
|
||||
'base.group_user',
|
||||
'point_of_sale.group_pos_user'
|
||||
],
|
||||
'manager': [
|
||||
'restaurant_management.group_restaurant_manager',
|
||||
'dine360_restaurant.group_restaurant_manager',
|
||||
'base.group_user',
|
||||
'point_of_sale.group_pos_manager',
|
||||
'stock.group_stock_user'
|
||||
],
|
||||
'admin': [
|
||||
'restaurant_management.group_restaurant_admin',
|
||||
'dine360_restaurant.group_restaurant_admin',
|
||||
'base.group_user',
|
||||
'point_of_sale.group_pos_manager',
|
||||
'stock.group_stock_manager',
|
||||
'base.group_system'
|
||||
],
|
||||
'store': [
|
||||
'restaurant_management.group_restaurant_store_keeper',
|
||||
'dine360_restaurant.group_restaurant_store_keeper',
|
||||
'base.group_user',
|
||||
'stock.group_stock_user'
|
||||
],
|
||||
}
|
||||
|
||||
# 1. Clear existing restaurant groups (only in our custom category)
|
||||
category_staff = self.env.ref('restaurant_management.module_category_restaurant_staff', raise_if_not_found=False)
|
||||
category_staff = self.env.ref('dine360_restaurant.module_category_restaurant_staff', raise_if_not_found=False)
|
||||
if category_staff:
|
||||
restaurant_groups = self.env['res.groups'].search([('category_id', '=', category_staff.id)])
|
||||
self.groups_id = [(3, g.id) for g in restaurant_groups]
|
||||
@ -68,3 +68,4 @@ class ResUsers(models.Model):
|
||||
group_commands.append((4, group.id))
|
||||
|
||||
self.groups_id = group_commands
|
||||
|
||||
BIN
addons/dine360_restaurant/static/description/icon.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
@ -1,9 +1,9 @@
|
||||
{
|
||||
'name': 'Chennora Theme',
|
||||
'description': 'Custom theme for Chennora website',
|
||||
'name': 'Dine360 Theme Chennora',
|
||||
'description': 'Custom theme for Dine360 Chennora website',
|
||||
'category': 'Theme/Website',
|
||||
'version': '1.0',
|
||||
'author': 'Your Company',
|
||||
'author': 'Dine360',
|
||||
'depends': ['website', 'website_sale', 'website_crm'],
|
||||
'data': [
|
||||
'views/layout.xml', # Header, Footer, and Global Layout changes
|
||||
@ -14,8 +14,8 @@
|
||||
],
|
||||
'assets': {
|
||||
'web.assets_frontend': [
|
||||
'theme_chennora/static/src/scss/primary_variables.scss',
|
||||
'theme_chennora/static/src/scss/theme.scss',
|
||||
'dine360_theme_chennora/static/src/scss/primary_variables.scss',
|
||||
'dine360_theme_chennora/static/src/scss/theme.scss',
|
||||
],
|
||||
},
|
||||
'images': [
|
||||
@ -25,3 +25,4 @@
|
||||
'application': True,
|
||||
'license': 'LGPL-3',
|
||||
}
|
||||
|
||||
4
addons/dine360_theme_chennora/dump_home.py
Normal file
@ -0,0 +1,4 @@
|
||||
v = env['ir.ui.view'].browse(3221)
|
||||
with open('/mnt/extra-addons/dine360_theme_chennora/view_3221.xml', 'w') as f:
|
||||
f.write(str(v.arch_db))
|
||||
|
||||
|
Before Width: | Height: | Size: 525 KiB After Width: | Height: | Size: 525 KiB |
BIN
addons/dine360_theme_chennora/static/description/icon.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
@ -18,7 +18,7 @@
|
||||
|
||||
<div class="carousel-inner">
|
||||
|
||||
<div class="carousel-item o_colored_level pb256 pt256 active oe_img_bg o_bg_img_center o_bg_img_origin_border_box" style="background-image: url("/theme_chennora/static/src/img/chen-banner-1.webp");" data-name="Slide" data-mimetype="image/webp" data-original-id="1135" data-original-src="/web/image/1135-573357bb/chen-banner-1.webp" data-mimetype-before-conversion="image/webp" data-resize-width="1920">
|
||||
<div class="carousel-item o_colored_level pb256 pt256 active oe_img_bg o_bg_img_center o_bg_img_origin_border_box" style="background-image: url("/dine360_theme_chennora/static/src/img/chen-banner-1.webp");" data-name="Slide" data-mimetype="image/webp" data-original-id="1135" data-original-src="/web/image/1135-573357bb/chen-banner-1.webp" data-mimetype-before-conversion="image/webp" data-resize-width="1920">
|
||||
<div class="oe_unremovable container">
|
||||
<div class="row">
|
||||
<div class="carousel-content o_colored_level col-lg-6 o_animate o_anim_zoom_in o_animate_both_scroll o_visible" style="">
|
||||
@ -30,7 +30,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="carousel-item o_colored_level pt256 pb256 oe_img_bg o_bg_img_center o_bg_img_origin_border_box" style="background-image: url("/theme_chennora/static/src/img/chen-banner-2.webp");" data-name="Slide" data-mimetype="image/webp" data-original-id="1110" data-original-src="/web/image/1110-55a80a07/banner-2%20%281%29.webp" data-mimetype-before-conversion="image/webp" data-resize-width="1920">
|
||||
</div><div class="carousel-item o_colored_level pt256 pb256 oe_img_bg o_bg_img_center o_bg_img_origin_border_box" style="background-image: url("/dine360_theme_chennora/static/src/img/chen-banner-2.webp");" data-name="Slide" data-mimetype="image/webp" data-original-id="1110" data-original-src="/web/image/1110-55a80a07/banner-2%20%281%29.webp" data-mimetype-before-conversion="image/webp" data-resize-width="1920">
|
||||
<div class="oe_unremovable container">
|
||||
<div class="row">
|
||||
<div class="carousel-content o_colored_level col-lg-6 o_animate o_anim_zoom_in o_animate_both_scroll" style="background-color: rgba(255, 0, 0, 0);">
|
||||
@ -42,7 +42,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="carousel-item o_colored_level pt256 pb256 oe_img_bg o_bg_img_center o_bg_img_origin_border_box" style="background-image: url("/theme_chennora/static/src/img/chen-banner-3.webp");" data-name="Slide" data-mimetype="image/webp" data-original-id="1137" data-original-src="/web/image/1137-113d553b/chen-banner-3.webp" data-mimetype-before-conversion="image/webp" data-resize-width="1920">
|
||||
</div><div class="carousel-item o_colored_level pt256 pb256 oe_img_bg o_bg_img_center o_bg_img_origin_border_box" style="background-image: url("/dine360_theme_chennora/static/src/img/chen-banner-3.webp");" data-name="Slide" data-mimetype="image/webp" data-original-id="1137" data-original-src="/web/image/1137-113d553b/chen-banner-3.webp" data-mimetype-before-conversion="image/webp" data-resize-width="1920">
|
||||
<div class="oe_unremovable container">
|
||||
<div class="row">
|
||||
<div class="carousel-content o_colored_level col-lg-6 o_animate o_anim_zoom_in o_animate_both_scroll" style="background-color: rgba(255, 0, 0, 0);">
|
||||
@ -353,7 +353,7 @@ Chennora is rated among the best Indian restaurants in Brampton, offering authen
|
||||
<xpath expr="//div[@id='wrap']" position="replace">
|
||||
<div id="wrap" class="oe_structure">
|
||||
<!-- Hero Section -->
|
||||
<section class="s_title o_colored_level pt96 pb96 oe_img_bg o_bg_img_center" data-snippet="s_title" style="background-color: rgb(4, 18, 29); background-image: url('/theme_chennora/static/src/img/chen-banner-1.webp');">
|
||||
<section class="s_title o_colored_level pt96 pb96 oe_img_bg o_bg_img_center" data-snippet="s_title" style="background-color: rgb(4, 18, 29); background-image: url('/dine360_theme_chennora/static/src/img/chen-banner-1.webp');">
|
||||
<div class="o_we_bg_filter bg-black-75"/>
|
||||
<div class="container s_allow_columns">
|
||||
<h1 class="display-3-fs text-center" style="text-align: center;"><font class="text-o-color-3">About Chennora's</font></h1>
|
||||
@ -640,3 +640,4 @@ Chennora is rated among the best Indian restaurants in Brampton, offering authen
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@ -21,9 +21,10 @@
|
||||
<!--
|
||||
<template id="snippets_registration" inherit_id="website.snippets" name="Register Custom Snippets">
|
||||
<xpath expr="//div[@id='snippet_structure']" position="inside">
|
||||
<t t-snippet="theme_chennora.s_custom_banner" t-thumbnail="/theme_chennora/static/src/img/s_banner_thumb.jpg"/>
|
||||
<t t-snippet="dine360_theme_chennora.s_custom_banner" t-thumbnail="/dine360_theme_chennora/static/src/img/s_banner_thumb.jpg"/>
|
||||
</xpath>
|
||||
</template>
|
||||
-->
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
# home_dashboard/__init__.py
|
||||
from . import controllers
|
||||
@ -1,3 +0,0 @@
|
||||
# home_dashboard/controllers/__init__.py
|
||||
from . import main
|
||||
from . import cors
|
||||
@ -1,3 +0,0 @@
|
||||
v = env['ir.ui.view'].browse(3221)
|
||||
with open('/mnt/extra-addons/theme_chennora/view_3221.xml', 'w') as f:
|
||||
f.write(str(v.arch_db))
|
||||
@ -1,7 +1,7 @@
|
||||
|
||||
print("--- DUMPING THEME VIEW ---")
|
||||
try:
|
||||
theme_view = env.ref('theme_chennora.custom_homepage')
|
||||
theme_view = env.ref('dine360_theme_chennora.custom_homepage')
|
||||
print(f"Name: {theme_view.name}")
|
||||
print(f"ID: {theme_view.id}")
|
||||
print(f"Type: {theme_view.type}")
|
||||
@ -15,3 +15,4 @@ try:
|
||||
print(theme_view.arch[:200])
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@ try:
|
||||
print("No Blocking Custom Views (COW) found.")
|
||||
|
||||
# 2. Ensure Theme View is Active
|
||||
theme_view = env.ref('theme_chennora.custom_homepage', raise_if_not_found=False)
|
||||
theme_view = env.ref('dine360_theme_chennora.custom_homepage', raise_if_not_found=False)
|
||||
if theme_view:
|
||||
print(f"Theme View found: {theme_view.name}")
|
||||
if not theme_view.active:
|
||||
@ -37,10 +37,11 @@ try:
|
||||
print(" -> Enforced Priority 50")
|
||||
|
||||
else:
|
||||
print("ERROR: Theme View 'theme_chennora.custom_homepage' NOT FOUND. Please upgrade the module.")
|
||||
print("ERROR: Theme View 'dine360_theme_chennora.custom_homepage' NOT FOUND. Please upgrade the module.")
|
||||
|
||||
env.cr.commit()
|
||||
print("--- REPAIR COMPLETE. PLEASE REFRESH HOMEPAGE ---")
|
||||
|
||||
except Exception as e:
|
||||
print(f"ERROR: {e}")
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@ try:
|
||||
print(f"Generic Homepage: {homepage.name} (ID: {homepage.id})")
|
||||
|
||||
# 2. Get the Theme View
|
||||
theme_view = env.ref('theme_chennora.custom_homepage', raise_if_not_found=False)
|
||||
theme_view = env.ref('dine360_theme_chennora.custom_homepage', raise_if_not_found=False)
|
||||
|
||||
if not theme_view:
|
||||
print("Theme view not found by XMLID! Searching by name...")
|
||||
@ -35,3 +35,4 @@ try:
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
|
||||
@ -31,11 +31,12 @@ try:
|
||||
print(f" {cv.arch[:100]}...")
|
||||
|
||||
# Check if our theme view is actually in the db
|
||||
theme_view = env.ref('theme_chennora.custom_homepage', raise_if_not_found=False)
|
||||
theme_view = env.ref('dine360_theme_chennora.custom_homepage', raise_if_not_found=False)
|
||||
if theme_view:
|
||||
print(f"\nTheme View Record: {theme_view.name} (ID: {theme_view.id}, Active: {theme_view.active}, Priority: {theme_view.priority})")
|
||||
else:
|
||||
print("\nTheme View 'theme_chennora.custom_homepage' NOT FOUND in DB.")
|
||||
print("\nTheme View 'dine360_theme_chennora.custom_homepage' NOT FOUND in DB.")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ try:
|
||||
print(" This view is likely BLOCKING your theme changes.")
|
||||
|
||||
# Check our theme view
|
||||
theme_view = env.ref('theme_chennora.custom_homepage', raise_if_not_found=False)
|
||||
theme_view = env.ref('dine360_theme_chennora.custom_homepage', raise_if_not_found=False)
|
||||
if theme_view:
|
||||
print(f"\nTheme View Record: {theme_view.name} (ID: {theme_view.id})")
|
||||
print(f" - Active: {theme_view.active}")
|
||||
@ -40,7 +40,8 @@ try:
|
||||
# If COW view exists, check if theme view is inherited by the COW view?
|
||||
# Usually COW views replace the whole structure or inherit from the generic one but ignore other inherits if not careful.
|
||||
else:
|
||||
print("\n[!] ERROR: Theme View 'theme_chennora.custom_homepage' NOT FOUND in DB.")
|
||||
print("\n[!] ERROR: Theme View 'dine360_theme_chennora.custom_homepage' NOT FOUND in DB.")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
|
||||