Add initial Dine360 Chennora Odoo theme including static assets, JavaScript functionalities, and SCSS styling.

This commit is contained in:
Alaguraj0361 2026-02-02 22:33:51 +05:30
parent 2447db0726
commit ad48c93063
40 changed files with 1594 additions and 312 deletions

77
GIT_COMMIT_SUMMARY.md Normal file
View File

@ -0,0 +1,77 @@
# Git Commit Summary - Chennora Theme Update
## ✅ Files Added to Git:
### New Images (3 files):
1. `odoo-testing-addons/addons/dine360_theme_chennora/static/src/img/gobi-65.png` (88 KB)
2. `odoo-testing-addons/addons/dine360_theme_chennora/static/src/img/unlimited-thali.png` (127 KB)
3. `odoo-testing-addons/addons/dine360_theme_chennora/static/src/img/fish-curry.png` (100 KB)
### Updated Files:
1. `odoo-testing-addons/addons/dine360_theme_chennora/views/pages.xml` - New 3-card offer section
2. `odoo-testing-addons/addons/dine360_theme_chennora/__manifest__.py` - Added main.css
3. `odoo-testing-addons/addons/dine360_theme_chennora/views/layout.xml` - Added Bootstrap Icons
4. `IMPLEMENTATION_SUMMARY.md` - Documentation
5. `HOW_TO_UPDATE_THEME.md` - Update guide
6. `docker-compose.yml` - Changed to client2
## 📝 Commit Message:
```
Update Chennora theme with new offer cards and assets
```
## 🔄 Git Status:
**Committed locally** - All changes are saved in your local Git repository
**Not pushed to remote** - Authentication failed when trying to push
## 🚀 To Push to Remote Repository:
You need to authenticate with Git. Run one of these:
### Option 1: Push with credentials
```bash
cd d:\ODOO_Final
git push origin main
```
(You'll be prompted for username/password or token)
### Option 2: Configure Git credentials
```bash
git config credential.helper store
git push origin main
```
### Option 3: Use SSH instead of HTTPS
```bash
git remote set-url origin git@github.com:alaguraj/odoo-testing-addons.git
git push origin main
```
## 📦 What's in the Commit:
### Changes Made:
- **3 new food images** for offer cards
- **Updated homepage design** with dark cards
- **Bootstrap Icons** added to layout
- **Main CSS** (335KB) added to theme
- **Documentation files** for implementation
### Card Design:
- Dark background (#04121D)
- Text on left (70%), image on right (30%)
- Yellow "ORDER NOW" buttons (#FECD4F)
- Teal and yellow accent colors
## 🔍 Verify the Commit:
```bash
git log --oneline -1
git show HEAD --stat
```
## 📌 Next Steps:
1. **Authenticate and push** to remote repository
2. **Upgrade the theme** in Odoo (Apps → Chennora → Upgrade)
3. **Refresh homepage** to see the new cards
Your changes are safely committed locally! 🎉

View File

@ -16,6 +16,7 @@
'web.assets_frontend': [ 'web.assets_frontend': [
'dine360_theme_chennora/static/src/scss/primary_variables.scss', 'dine360_theme_chennora/static/src/scss/primary_variables.scss',
'dine360_theme_chennora/static/src/scss/theme.scss', 'dine360_theme_chennora/static/src/scss/theme.scss',
'dine360_theme_chennora/static/src/js/deal_switcher.js',
], ],
}, },
'images': [ 'images': [

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 906 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

View File

@ -0,0 +1,98 @@
/** @odoo-module **/
import publicWidget from "@web/legacy/js/public/public_widget";
publicWidget.registry.DealSwitcher = publicWidget.Widget.extend({
selector: '.s_popular_deals_premium',
events: {
'mouseenter .deal-item': '_onDealHover',
},
/**
* @override
*/
start: function () {
this.$centerImg = this.$('#dealCenterImg');
return this._super.apply(this, arguments);
},
//--------------------------------------------------------------------------
// Handlers
//--------------------------------------------------------------------------
/**
* @private
* @param {Event} ev
*/
_onDealHover: function (ev) {
const $item = $(ev.currentTarget);
const newImg = $item.data('deal-img');
if (newImg && this.$centerImg.length) {
// Remove active class from others
this.$('.deal-item').removeClass('active');
// Add active to current
$item.addClass('active');
// Fade out, change src, fade in
this.$centerImg.css('opacity', '0');
setTimeout(() => {
this.$centerImg.attr('src', newImg);
this.$centerImg.css('opacity', '1');
}, 300);
}
},
});
publicWidget.registry.GallerySlider = publicWidget.Widget.extend({
selector: '.s_gallery_slider_premium',
start: function () {
this.$track = this.$('.gallery-track');
this.slideWidth = 315; // 300px width + 15px gap
this.currentIndex = 0;
this.totalOriginal = 6;
// Start auto-slide
this._startAutoSlide();
// Pause on hover
this.$el.on('mouseenter', () => this._stopAutoSlide());
this.$el.on('mouseleave', () => this._startAutoSlide());
return this._super.apply(this, arguments);
},
_startAutoSlide: function () {
this.interval = setInterval(this._slide.bind(this), 2000);
},
_stopAutoSlide: function () {
clearInterval(this.interval);
},
_slide: function () {
this.currentIndex++;
this.$track.css({
'transition': 'transform 0.8s cubic-bezier(0.165, 0.84, 0.44, 1)',
'transform': `translateX(-${this.currentIndex * this.slideWidth}px)`
});
// Seamless loop reset
if (this.currentIndex >= this.totalOriginal) {
setTimeout(() => {
this.$track.css({
'transition': 'none',
'transform': 'translateX(0)'
});
this.currentIndex = 0;
}, 800); // Match transition duration
}
}
});
export default {
DealSwitcher: publicWidget.registry.DealSwitcher,
GallerySlider: publicWidget.registry.GallerySlider,
};

View File

@ -59,9 +59,763 @@
} }
} }
// Marquee Animation
.quee-container {
overflow: hidden;
position: relative;
background: #f4f1ea;
padding: 40px 0;
.quee-content {
display: flex;
width: 200%;
animation: marquee 30s linear infinite;
h1 {
font-size: 6rem;
font-weight: 900;
color: rgba(0, 0, 0, 0.05);
white-space: nowrap;
text-transform: uppercase;
margin: 0;
padding-right: 100px;
letter-spacing: 5px;
}
}
}
@keyframes marquee {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-50%);
}
}
// Slider Adjustments
#categoryCarousel {
.carousel-inner {
padding-bottom: 20px;
}
}
// About Section Styles
.s_about_premium {
position: relative;
overflow: hidden;
background-color: rgb(244, 241, 234);
.floating-lemon {
position: absolute;
left: -30px;
top: 40%;
width: 120px;
opacity: 0.8;
z-index: 10;
animation: float 6s ease-in-out infinite;
}
.floating-leaves {
position: absolute;
left: 50px;
bottom: 5%;
width: 150px;
opacity: 0.9;
z-index: 10;
animation: float 8s ease-in-out infinite;
}
.floating-bellpepper {
position: absolute;
right: 40px;
top: 50px;
width: 130px;
opacity: 0.8;
z-index: 10;
animation: float 7s ease-in-out infinite;
}
.about-image-wrapper {
position: relative;
padding: 50px;
&::before {
content: "";
position: absolute;
left: 15%;
top: 25%;
width: 75%;
height: 60%;
background-color: #FECD4F;
z-index: 0;
border-radius: 10px;
opacity: 0.6;
}
img {
position: relative;
z-index: 5;
filter: drop-shadow(0 20px 30px rgba(0, 0, 0, 0.15));
}
}
.feature-item {
display: flex;
align-items: flex-start;
margin-bottom: 25px;
.feature-icon-wrapper {
margin-right: 20px;
img {
width: 60px;
height: auto;
}
}
h5 {
font-size: 19px;
font-weight: 800;
color: #04121D;
margin-bottom: 5px;
}
p {
font-size: 14px;
color: #555;
line-height: 1.5;
margin: 0;
}
}
}
@keyframes float {
0% {
transform: translateY(0px) rotate(0deg);
}
50% {
transform: translateY(-20px) rotate(5deg);
}
100% {
transform: translateY(0px) rotate(0deg);
}
}
// Why Choose Section
.s_why_choose_premium {
background-color: #04121D;
position: relative;
overflow: hidden;
.choose-left-accent {
position: absolute;
left: 0;
bottom: -20px;
width: 180px;
z-index: 1;
opacity: 0.9;
}
.choose-right-accent {
position: absolute;
right: 0;
top: 10%;
width: 250px;
z-index: 1;
opacity: 0.9;
}
.choose-pepper-float {
position: absolute;
left: 5%;
top: 10%;
width: 80px;
z-index: 2;
animation: float 5s ease-in-out infinite;
}
.choose-main-dish-wrapper {
position: relative;
z-index: 5;
&::after {
content: "";
position: absolute;
top: -20px;
right: 20%;
width: 300px;
height: 200px;
background: radial-gradient(circle, rgba(255, 255, 255, 0.05) 0%, transparent 70%);
z-index: -1;
}
img {
filter: drop-shadow(0 30px 50px rgba(0, 0, 0, 0.5));
}
}
.choose-content {
position: relative;
z-index: 10;
h6 {
font-weight: 800;
letter-spacing: 1px;
}
h2 {
letter-spacing: -1px;
margin-bottom: 25px;
}
p {
line-height: 1.8;
opacity: 0.8;
}
}
}
// Popular Deals Section
.s_popular_deals_premium {
background-color: white;
.deal-item {
display: flex;
align-items: center;
margin-bottom: 30px;
transition: all 0.3s ease;
padding: 10px;
border-radius: 8px;
cursor: pointer;
&:hover,
&.active {
background-color: #f8f9fa;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
h6 {
color: #2BB1A5 !important;
}
}
.deal-img-wrapper {
width: 80px;
height: 80px;
flex-shrink: 0;
background: #f8f9fa;
border-radius: 4px;
overflow: hidden;
margin-right: 15px;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
.deal-details {
flex-grow: 1;
h6 {
font-size: 18px;
font-weight: 800;
color: #04121D;
margin-bottom: 2px;
}
p {
font-size: 12px;
color: #888;
margin: 0;
}
}
.deal-price {
font-size: 16px;
font-weight: 800;
color: #04121D;
white-space: nowrap;
}
}
.deal-center-image {
position: relative;
padding: 20px;
&::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #e9ecef;
z-index: 0;
border-radius: 4px;
}
img {
position: relative;
z-index: 1;
width: 100%;
border-radius: 50%;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
}
}
}
// Testimonials Section
.s_testimonials_premium {
background-color: #04121D;
position: relative;
overflow: hidden;
.testimonial-main-image-wrapper {
position: relative;
border-radius: 0 400px 400px 0;
overflow: hidden;
border-right: 15px solid #FECD4F;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
.video-btn-wrapper {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 20;
.play-btn {
width: 150px;
height: 150px;
background: transparent;
border: none;
position: relative;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
.play-icon {
width: 70px;
height: 70px;
background: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: #04121D;
font-size: 24px;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
z-index: 5;
}
.rotating-text {
position: absolute;
width: 100%;
height: 100%;
animation: rotate 15s linear infinite;
img {
width: 100%;
height: 100%;
object-fit: contain;
}
}
}
}
}
.testimonial-content-side {
padding: 80px 40px;
position: relative;
z-index: 10;
color: white;
.google-reviews-logo {
width: 180px;
margin-bottom: 25px;
}
.testimonial-carousel {
.carousel-item {
p {
font-size: 18px;
line-height: 1.8;
font-style: italic;
color: rgba(255, 255, 255, 0.8);
}
}
}
.testimonial-controls {
display: flex;
gap: 15px;
margin-top: 40px;
.control-btn {
width: 50px;
height: 50px;
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
background: transparent;
transition: all 0.3s ease;
&:hover {
background: #FECD4F;
border-color: #FECD4F;
color: #04121D;
}
&.next-btn {
background: #FECD4F;
border-color: #FECD4F;
color: #04121D;
}
}
}
}
.testimonial-accent-right {
position: absolute;
right: 0;
bottom: 0;
width: 150px;
z-index: 5;
}
}
@keyframes rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
// FAQ Section
.s_faq_premium {
background-color: #F4F1EA;
.faq-accordion {
.accordion-item {
background-color: white;
border: none;
border-radius: 12px !important;
margin-bottom: 20px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
overflow: hidden;
.accordion-button {
background-color: white;
color: #04121D;
font-weight: 700;
padding: 20px 25px;
border: none;
box-shadow: none;
position: relative;
font-size: 18px;
&:not(.collapsed) {
color: #2BB1A5;
&::after {
content: "-";
transform: none;
background-image: none;
color: #FECD4F;
font-size: 30px;
line-height: 1;
}
}
&::after {
content: "+";
background-image: none;
color: #FECD4F;
font-size: 24px;
font-weight: 300;
display: flex;
align-items: center;
justify-content: center;
}
}
.accordion-body {
padding: 0 25px 25px;
color: #555;
font-size: 15px;
line-height: 1.6;
}
}
}
.faq-carousel-wrapper {
border-radius: 15px;
overflow: hidden;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
.carousel-control-prev,
.carousel-control-next {
width: 40px;
height: 40px;
background: #FECD4F;
border-radius: 50%;
top: 50%;
transform: translateY(-50%);
opacity: 0.9;
span {
color: #04121D;
font-size: 12px;
}
}
.carousel-control-prev {
left: 15px;
}
.carousel-control-next {
right: 15px;
}
}
.know-more-btn {
background-color: #FECD4F;
color: #04121D;
font-weight: 700;
padding: 12px 30px;
border-radius: 4px;
text-transform: uppercase;
display: inline-flex;
align-items: center;
gap: 10px;
margin-top: 30px;
text-decoration: none;
span {
background: black;
color: white;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 2px;
font-size: 12px;
}
}
}
// Blog Section
.s_blog_premium {
background-color: #F4F1EA;
position: relative;
overflow: hidden;
.blog-card {
background: white;
border-radius: 12px;
overflow: hidden;
height: 100%;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
position: relative;
color: #04121D;
.blog-img-wrapper {
position: relative;
height: 280px;
overflow: hidden;
img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);
}
.date-badge {
position: absolute;
bottom: -20px;
left: 20px;
width: 60px;
height: 60px;
background: white;
border: 2px solid #2BB1A5;
border-radius: 8px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-weight: 700;
z-index: 5;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
span {
display: block;
line-height: 1;
&:first-child {
font-size: 20px;
color: #04121D;
transition: color 0.3s;
}
&:last-child {
font-size: 10px;
color: #2BB1A5;
text-transform: uppercase;
transition: color 0.3s;
}
}
}
}
.blog-body {
padding: 40px 25px 30px;
transition: all 0.3s ease;
.category-line {
font-size: 11px;
text-transform: uppercase;
letter-spacing: 1px;
color: #888;
margin-bottom: 20px;
display: inline-block;
padding: 4px 12px;
background: #f8f9fa;
border-radius: 4px;
transition: all 0.3s ease;
}
h4 {
font-size: 20px;
font-weight: 800;
margin-bottom: 15px;
line-height: 1.4;
transition: color 0.3s ease;
}
.blog-excerpt {
font-size: 14px;
line-height: 1.6;
color: #666;
transition: color 0.3s ease;
}
}
&:hover {
transform: translateY(-10px);
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.15);
background-color: #04121D;
color: white;
.blog-img-wrapper {
img {
transform: scale(1.1);
}
.date-badge {
border: 2px dashed #FECD4F;
background: #2BB1A5 !important;
span:first-child {
color: white !important;
}
span:last-child {
color: #04121D !important;
}
}
}
.blog-body {
h4 {
color: white;
}
.blog-excerpt {
color: rgba(255, 255, 255, 0.7);
}
.category-line {
background: white;
color: #04121D;
}
}
}
}
.fries-accent {
position: absolute;
bottom: -20px;
left: -30px;
width: 250px;
z-index: 10;
pointer-events: none;
}
}
// Gallery Slider Section
.s_gallery_slider_premium {
background-color: #F4F1EA;
padding: 30px 0;
overflow: hidden;
position: relative;
border-top: 1px solid rgba(0, 0, 0, 0.05);
.gallery-container {
display: flex;
align-items: center;
}
.gallery-track {
display: flex;
gap: 15px;
transition: transform 0.8s cubic-bezier(0.165, 0.84, 0.44, 1);
}
.gallery-item {
width: 300px;
height: 300px;
flex-shrink: 0;
overflow: hidden;
border-radius: 8px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease;
}
&:hover img {
transform: scale(1.1);
}
}
}
// Footer // Footer
footer#bottom { footer#bottom {
background-color: #0d3b37 !important; // Dark Teal background-color: #04121D !important;
color: white; color: white;
a:hover { a:hover {

File diff suppressed because it is too large Load Diff

@ -1 +0,0 @@
Subproject commit b28e05b057fcebf0ef50e496ddc588e709325dd6

BIN
update_error.txt Normal file

Binary file not shown.

BIN
update_log.txt Normal file

Binary file not shown.