diff --git a/theme_eco_refine/README.rst b/theme_eco_refine/README.rst
new file mode 100755
index 000000000..5c1edd593
--- /dev/null
+++ b/theme_eco_refine/README.rst
@@ -0,0 +1,46 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Theme Eco Refine
+================
+Theme Eco Refine module provide attractive and unique front end theme mainly suitable for eCommerce website
+
+Configuration
+=============
+* No additional configurations needed
+
+License
+-------
+General Public License, Version 3 (AGPL v3).
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+Developer: (V17) Ayana KP,
+Contact: odoo@cybrosys.com
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit `Our Website `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/theme_eco_refine/__init__.py b/theme_eco_refine/__init__.py
new file mode 100755
index 000000000..614edda43
--- /dev/null
+++ b/theme_eco_refine/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Ayana KP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import controllers
+from . import models
diff --git a/theme_eco_refine/__manifest__.py b/theme_eco_refine/__manifest__.py
new file mode 100755
index 000000000..9277faa67
--- /dev/null
+++ b/theme_eco_refine/__manifest__.py
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Ayana KP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+{
+ 'name': 'Theme Eco Refine',
+ 'version': '17.0.1.0.0',
+ 'category': 'Theme/eCommerce',
+ 'summary': 'Theme Eco Refine',
+ 'description': """Theme Eco Refine module provide attractive and unique
+ front end theme mainly suitable for eCommerce website""",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ "depends": ['base', 'web', 'website', 'website_livechat',
+ 'website_sale_wishlist', 'website_blog', 'purchase', 'base_automation'],
+ 'data': [
+ 'data/theme_eco_refine_menus.xml',
+ 'views/product_template_views.xml',
+ 'views/website_blog_templates.xml',
+ 'views/templates.xml',
+ 'static/src/xml/homepage_templates.xml',
+ 'views/about_us_templates.xml',
+ 'views/snippets.xml',
+ ],
+ 'assets': {
+ 'web.assets_frontend': [
+ 'https://code.jquery.com/jquery-3.2.1.slim.min.js',
+ 'https://cdn.jsdelivr.net/npm/popper.js@1.12.9/dist/umd/popper.min.js',
+ 'https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/js/bootstrap.min.js',
+ 'theme_eco_refine/static/src/css/contact_us.css',
+ 'theme_eco_refine/static/src/css/product.css',
+ 'theme_eco_refine/static/src/css/home.css',
+ 'theme_eco_refine/static/src/css/blog.css',
+ 'theme_eco_refine/static/src/js/product_specification.js',
+ 'theme_eco_refine/static/src/css/about_us.css',
+ 'theme_eco_refine/static/src/js/about_us.js',
+ 'theme_eco_refine/static/src/js/owl.carousel.js',
+ 'theme_eco_refine/static/src/js/owl.carousel.min.js',
+ 'theme_eco_refine/static/src/css/owl.carousel.css',
+ 'theme_eco_refine/static/src/js/collection_snippet.js',
+ 'theme_eco_refine/static/src/js/customer_response.js',
+ 'theme_eco_refine/static/src/js/best_seller_snippet.js',
+ 'theme_eco_refine/static/src/xml/best_seller_snippet_templates.xml',
+ 'theme_eco_refine/static/src/js/new_arrival_snippet.js',
+ 'theme_eco_refine/static/src/xml/new_arrival_snippet_templates.xml',
+ 'theme_eco_refine/static/src/js/top_rated_products_snippet.js',
+ 'theme_eco_refine/static/src/xml/top_rated_product_snippet_templates.xml',
+ ],
+ },
+ 'images': [
+ 'static/description/banner.png',
+ 'static/description/theme_screenshot.jpg',
+ ],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+ }
diff --git a/theme_eco_refine/controllers/__init__.py b/theme_eco_refine/controllers/__init__.py
new file mode 100755
index 000000000..d9b9bb9e4
--- /dev/null
+++ b/theme_eco_refine/controllers/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Ayana KP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import about_us
+from . import dynamic_snippets
+from . import theme_eco_refine
diff --git a/theme_eco_refine/controllers/about_us.py b/theme_eco_refine/controllers/about_us.py
new file mode 100755
index 000000000..2080630e9
--- /dev/null
+++ b/theme_eco_refine/controllers/about_us.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Ayana KP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import http
+
+
+class EcoRefine(http.Controller):
+ """Class used to define function which renders appropriate template."""
+ @http.route('/about_us', type='http', website=True, auth='public')
+ def eco_refine_about_us(self):
+ """Renders template about_us page."""
+ return http.request.render('theme_eco_refine.about_us', {})
diff --git a/theme_eco_refine/controllers/dynamic_snippets.py b/theme_eco_refine/controllers/dynamic_snippets.py
new file mode 100755
index 000000000..c985b3b70
--- /dev/null
+++ b/theme_eco_refine/controllers/dynamic_snippets.py
@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Ayana KP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+import time
+from odoo import http
+from odoo.http import request
+
+
+class DynamicSnippets(http.Controller):
+ """This class is for the getting values for dynamic product snippets
+ """
+ @http.route('/top_selling_products', type='json', auth='public')
+ def top_selling(self):
+ """Function for getting the current website,top sold products and
+ its categories.
+ Return
+ products-most sold products
+ unique_categories-categories of all products
+ current_website-the current website for checking products or
+ """
+ current_website = request.env['website'].sudo().get_current_website().id
+ public_categ_id = request.env[
+ 'product.public.category'].sudo().search_read([], ['name',
+ 'website_id'])
+ products = []
+ public_categories = []
+ for category in public_categ_id:
+ products_search_read = request.env['product.template'].with_user(
+ 1).search_read(
+ [('is_published', '=', True),
+ ('public_categ_ids.id', '=', category['id'])],
+ ['name', 'image_1920', 'public_categ_ids', 'website_id',
+ 'sales_count', 'list_price'], order='sales_count')
+ for product in products_search_read:
+ if product['sales_count'] != 0:
+ products.append(product)
+ public_categories.append(category)
+ unique_categories = [dict(categories) for categories in
+ {tuple(sorted(record.items())) for record in
+ public_categories}]
+ products = sorted(products, key=lambda i: i['sales_count'],
+ reverse=True)
+ unique_id = "pc-%d" % int(time.time() * 1000)
+ return products, unique_categories, current_website, unique_id
+
+ @http.route('/new_arrival_products', type='json', auth='public')
+ def products_new_arrivals(self):
+ """Function for getting the current website,new arrival products and
+ its categories.
+ Return
+ products-most sold products
+ unique_categories-categories of all products
+ current_website-the current website for checking products or
+ """
+ current_website = request.env[
+ 'website'].sudo().get_current_website().id
+ public_categ_id = request.env[
+ 'product.public.category'].sudo().search_read([], ['name',
+ 'website_id'])
+ products = []
+ public_categories = []
+ for category in public_categ_id:
+ products_search_read = request.env['product.template'].with_user(
+ 1).search_read(
+ [('is_published', '=', True),
+ ('public_categ_ids.id', '=', category['id'])],
+ ['name', 'public_categ_ids', 'website_id',
+ 'sales_count', 'image_1920', 'list_price', 'create_date'],
+ order='create_date desc')
+ for product in products_search_read:
+ products.append(product)
+ public_categories.append(category)
+ unique_id = "uc-%d" % int(time.time() * 1000)
+ unique_categories = [dict(categories) for categories in
+ {tuple(sorted(record.items())) for record in
+ public_categories}]
+ products = sorted(products, key=lambda i: i['create_date'],
+ reverse=True)
+ return products, unique_categories, current_website, unique_id
+
+ @http.route('/top_rated_products', type='json', auth='public')
+ def top_rated_products(self):
+ """Function for getting the current website,rated products and
+ its categories.
+ Return
+ products-most sold products
+ unique_categories-categories of all products
+ current_website-the current website for checking products or
+ """
+ current_website = request.env[
+ 'website'].sudo().get_current_website().id
+ public_categ_id = request.env[
+ 'product.public.category'].sudo().search_read([], ['name',
+ 'website_id'])
+ rated_products = request.env['rating.rating'].sudo().search_read(
+ [('res_model', '=', 'product.template')],
+ ['res_id', 'res_name', ], order='rating desc')
+ products = []
+ public_categories = []
+ for category in rated_products:
+ products_search_read = request.env['product.template'].with_user(
+ 1).search_read(
+ [('is_published', '=', True),
+ ('id', '=', category['res_id'])],
+ ['name', 'public_categ_ids', 'website_id',
+ 'sales_count', 'image_1920', 'list_price', 'create_date'],)
+ for product in products_search_read:
+ if not product in products:
+ products.append(product)
+ public_categories.append(category)
+ unique_categories = [dict(categories) for categories in
+ {tuple(sorted(record.items())) for record in
+ public_categories}]
+ return products, unique_categories, current_website, public_categ_id
diff --git a/theme_eco_refine/controllers/theme_eco_refine.py b/theme_eco_refine/controllers/theme_eco_refine.py
new file mode 100755
index 000000000..f2720e4b1
--- /dev/null
+++ b/theme_eco_refine/controllers/theme_eco_refine.py
@@ -0,0 +1,201 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Ayana KP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+import babel.dates
+import itertools
+import pytz
+from odoo.http import request
+from odoo.tools import lazy
+from odoo import http, fields
+from werkzeug.exceptions import NotFound
+from collections import OrderedDict
+from odoo.tools import sql
+from odoo.tools.misc import get_lang
+from odoo.addons.website.controllers.main import QueryURL
+from odoo.addons.http_routing.models.ir_http import slug, unslug
+from odoo.addons.website_sale.controllers.main import TableCompute, WebsiteSale
+
+
+class WebsiteShop(WebsiteSale):
+ """Shop Controller
+ super the controller to set 3 columns of products in
+ website shop instead of 4 """
+ @http.route(['/shop/config/website'], type='json', auth='user')
+ def _change_website_config(self, **options):
+ """ Function for shop configuration """
+ if not request.env.user.has_group(
+ 'website.group_website_restricted_editor'):
+ raise NotFound()
+ current_website = request.env['website'].get_current_website()
+ # Restrict options we can write to.
+ writable_fields = {
+ 'shop_ppg', 'shop_ppr', 'shop_default_sort',
+ 'product_page_image_layout', 'product_page_image_width',
+ 'product_page_grid_columns', 'product_page_image_spacing'
+ }
+ # Default ppg to 1.
+ if 'ppg' in options and not options['ppg']:
+ options['ppg'] = 1
+ if 'product_page_grid_columns' in options:
+ options['product_page_grid_columns'] = int(
+ options['product_page_grid_columns'])
+ write_vals = {k: v for k, v in options.items() if k in writable_fields}
+ if write_vals:
+ current_website.write(write_vals)
+ current_website.select = True
+
+ @http.route()
+ def shop(self, page=0, category=None, search='', min_price=0.0,
+ max_price=0.0, ppg=False, **post):
+ """Function for website shop"""
+ current_website = request.env['website'].get_current_website()
+ if not current_website.select:
+ ppg = 12
+ ppr = 3
+ res = super(WebsiteShop, self).shop(page=page, category=category,
+ search=search,
+ min_price=min_price,
+ max_price=max_price, ppg=ppg,
+ **post)
+ products = res.qcontext['products']
+ res.qcontext.update({
+ 'bins': lazy(
+ lambda: TableCompute().process(products, ppg, ppr)),
+ 'ppr': ppr,
+ })
+ return res
+ else:
+ ppg = current_website.shop_ppg
+ ppr = current_website.shop_ppr
+ res = super(WebsiteShop, self).shop(page=page, category=category,
+ search=search,
+ min_price=min_price,
+ max_price=max_price, ppg=ppg,
+ **post)
+ products = res.qcontext['products']
+ res.qcontext.update({
+ 'bins': lazy(
+ lambda: TableCompute().process(products, ppg, ppr)),
+ 'ppr': ppr,
+ })
+ current_website.select = True
+ return res
+
+
+class WebsiteBlog(http.Controller):
+ """
+ Class for Website blog, super the controller to get the previous blog id
+ """
+ def nav_list(self, blog=None):
+ dom = blog and [('blog_id', '=', blog.id)] or []
+ if not request.env.user.has_group('website.group_website_designer'):
+ dom += [('post_date', '<=', fields.Datetime.now())]
+ groups = request.env['blog.post']._read_group_raw(
+ dom,
+ ['name', 'post_date'],
+ groupby=["post_date"], orderby="post_date desc")
+ for group in groups:
+ (r, label) = group['post_date']
+ start, end = r.split('/')
+ group['post_date'] = label
+ group['date_begin'] = start
+ group['date_end'] = end
+ locale = get_lang(request.env).code
+ start = pytz.UTC.localize(fields.Datetime.from_string(start))
+ tzinfo = pytz.timezone(request.context.get('tz', 'utc') or 'utc')
+ group['month'] = babel.dates.format_datetime(start, format='MMMM',
+ tzinfo=tzinfo,
+ locale=locale)
+ group['year'] = babel.dates.format_datetime(start, format='yyyy',
+ tzinfo=tzinfo,
+ locale=locale)
+ return OrderedDict((year, [m for m in months]) for year, months in
+ itertools.groupby(groups, lambda g: g['year']))
+
+ @http.route([
+ '''/blog//''',
+ ], type='http', auth="public", website=True, sitemap=True)
+ def blog_post(self, blog, blog_post, tag_id=None, page=1,
+ enable_editor=None, **post):
+ """ Prepare all values to display the blog.
+ :return dict values: values for the templates, containing
+ - 'blog_post': browse of the current post
+ - 'blog': browse of the current blog
+ - 'blogs': list of browse records of blogs
+ - 'tag': current tag, if tag_id in parameters
+ - 'tags': all tags, for tag-based navigation
+ - 'pager': a pager on the comments
+ - 'nav_list': a dict [year][month] for archives navigation
+ - 'next_post': next blog post, to direct the user towards the next
+ interesting post
+ """
+ BlogPost = request.env['blog.post']
+ date_begin, date_end = post.get('date_begin'), post.get('date_end')
+ domain = request.website.website_domain()
+ blogs = blog.search(domain, order="create_date, id asc")
+ tag = None
+ if tag_id:
+ tag = request.env['blog.tag'].browse(int(tag_id))
+ blog_url = QueryURL('', ['blog', 'tag'], blog=blog_post.blog_id,
+ tag=tag, date_begin=date_begin, date_end=date_end)
+ if not blog_post.blog_id.id == blog.id:
+ return request.redirect(
+ "/blog/%s/%s" % (slug(blog_post.blog_id), slug(blog_post)),
+ code=301)
+ tags = request.env['blog.tag'].search([])
+ # Find next Post
+ blog_post_domain = [('blog_id', '=', blog.id)]
+ if not request.env.user.has_group('website.group_website_designer'):
+ blog_post_domain += [('post_date', '<=', fields.Datetime.now())]
+ all_post = BlogPost.search(blog_post_domain)
+ if blog_post not in all_post:
+ return request.redirect("/blog/%s" % (slug(blog_post.blog_id)))
+ # should always return at least the current post
+ all_post_ids = all_post.ids
+ current_blog_post_index = all_post_ids.index(blog_post.id)
+ nb_posts = len(all_post_ids)
+ next_post_id = all_post_ids[
+ (current_blog_post_index + 1) % nb_posts] if nb_posts > 1 else None
+ next_post = next_post_id and BlogPost.browse(next_post_id) or False
+ prev_post_id = all_post_ids[
+ (current_blog_post_index - 1) % nb_posts] if nb_posts > 1 else None
+ prev_post = next_post_id and BlogPost.browse(prev_post_id) or False
+ values = {
+ 'tags': tags,
+ 'tag': tag,
+ 'blog': blog,
+ 'blog_post': blog_post,
+ 'blogs': blogs,
+ 'main_object': blog_post,
+ 'enable_editor': enable_editor,
+ 'next_post': next_post,
+ 'date': date_begin,
+ 'blog_url': blog_url,
+ 'prev_post': prev_post,
+ }
+ response = request.render("website_blog.blog_post_complete", values)
+ if blog_post.id not in request.session.get('posts_viewed', []):
+ if sql.increment_fields_skiplock(blog_post, 'visits'):
+ if not request.session.get('posts_viewed'):
+ request.session['posts_viewed'] = []
+ request.session['posts_viewed'].append(blog_post.id)
+ request.session.modified = True
+ return response
diff --git a/theme_eco_refine/data/theme_eco_refine_menus.xml b/theme_eco_refine/data/theme_eco_refine_menus.xml
new file mode 100755
index 000000000..1106f72a0
--- /dev/null
+++ b/theme_eco_refine/data/theme_eco_refine_menus.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ About us
+ /about_us
+
+ 59
+
+
+
diff --git a/theme_eco_refine/doc/RELEASE_NOTES.md b/theme_eco_refine/doc/RELEASE_NOTES.md
new file mode 100755
index 000000000..4911c284b
--- /dev/null
+++ b/theme_eco_refine/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 16.07.2024
+#### Version 17.0.1.0.0
+#### ADD
+- Initial commit for Theme Eco Refine
diff --git a/theme_eco_refine/models/__init__.py b/theme_eco_refine/models/__init__.py
new file mode 100755
index 000000000..7727ff402
--- /dev/null
+++ b/theme_eco_refine/models/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Ayana KP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import product_template
+from . import website
diff --git a/theme_eco_refine/models/product_template.py b/theme_eco_refine/models/product_template.py
new file mode 100755
index 000000000..01ccd20d8
--- /dev/null
+++ b/theme_eco_refine/models/product_template.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Ayana KP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class ProductTemplate(models.Model):
+ """Inherit model product template and fields for
+ product specification and product details"""
+ _inherit = 'product.template'
+
+ product_spec = fields.Text(
+ string='Product Specification', translate=True,
+ help="The Specification of the Product.")
+ product_detail = fields.Text(
+ string='Product Detail', translate=True,
+ help="The Details of the Product ")
diff --git a/theme_eco_refine/models/website.py b/theme_eco_refine/models/website.py
new file mode 100755
index 000000000..9c3e1d7e8
--- /dev/null
+++ b/theme_eco_refine/models/website.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2024-TODAY Cybrosys Technologies()
+# Author: Ayana KP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class Website(models.Model):
+ """ Inherit website to add boolean field to set
+ 3 product columns in shop instead of 4 """
+ _inherit = 'website'
+
+ select = fields.Boolean(default=False, string='Select',
+ help='Set default 3 columns of products in shop')
diff --git a/theme_eco_refine/static/description/banner.png b/theme_eco_refine/static/description/banner.png
new file mode 100644
index 000000000..814751d74
Binary files /dev/null and b/theme_eco_refine/static/description/banner.png differ
diff --git a/theme_eco_refine/static/description/icon.png b/theme_eco_refine/static/description/icon.png
new file mode 100644
index 000000000..0192e8187
Binary files /dev/null and b/theme_eco_refine/static/description/icon.png differ
diff --git a/theme_eco_refine/static/description/images/About-us-mobile-temp.png b/theme_eco_refine/static/description/images/About-us-mobile-temp.png
new file mode 100644
index 000000000..24da73800
Binary files /dev/null and b/theme_eco_refine/static/description/images/About-us-mobile-temp.png differ
diff --git a/theme_eco_refine/static/description/images/Edu.png b/theme_eco_refine/static/description/images/Edu.png
new file mode 100644
index 000000000..158b36a16
Binary files /dev/null and b/theme_eco_refine/static/description/images/Edu.png differ
diff --git a/theme_eco_refine/static/description/images/FAQ.png b/theme_eco_refine/static/description/images/FAQ.png
new file mode 100644
index 000000000..547db3e04
Binary files /dev/null and b/theme_eco_refine/static/description/images/FAQ.png differ
diff --git a/theme_eco_refine/static/description/images/POS.png b/theme_eco_refine/static/description/images/POS.png
new file mode 100644
index 000000000..3c7f1cfe9
Binary files /dev/null and b/theme_eco_refine/static/description/images/POS.png differ
diff --git a/theme_eco_refine/static/description/images/Production.png b/theme_eco_refine/static/description/images/Production.png
new file mode 100644
index 000000000..e88dcd0d6
Binary files /dev/null and b/theme_eco_refine/static/description/images/Production.png differ
diff --git a/theme_eco_refine/static/description/images/Shop-responsive.png b/theme_eco_refine/static/description/images/Shop-responsive.png
new file mode 100644
index 000000000..6fa44537a
Binary files /dev/null and b/theme_eco_refine/static/description/images/Shop-responsive.png differ
diff --git a/theme_eco_refine/static/description/images/Top_rated_products.png b/theme_eco_refine/static/description/images/Top_rated_products.png
new file mode 100644
index 000000000..6820df620
Binary files /dev/null and b/theme_eco_refine/static/description/images/Top_rated_products.png differ
diff --git a/theme_eco_refine/static/description/images/about_us_1.png b/theme_eco_refine/static/description/images/about_us_1.png
new file mode 100644
index 000000000..773a14ea9
Binary files /dev/null and b/theme_eco_refine/static/description/images/about_us_1.png differ
diff --git a/theme_eco_refine/static/description/images/about_us_2.png b/theme_eco_refine/static/description/images/about_us_2.png
new file mode 100644
index 000000000..298250337
Binary files /dev/null and b/theme_eco_refine/static/description/images/about_us_2.png differ
diff --git a/theme_eco_refine/static/description/images/arrow-black.png b/theme_eco_refine/static/description/images/arrow-black.png
new file mode 100644
index 000000000..3fd6da801
Binary files /dev/null and b/theme_eco_refine/static/description/images/arrow-black.png differ
diff --git a/theme_eco_refine/static/description/images/banner-img.png b/theme_eco_refine/static/description/images/banner-img.png
new file mode 100644
index 000000000..42454d15b
Binary files /dev/null and b/theme_eco_refine/static/description/images/banner-img.png differ
diff --git a/theme_eco_refine/static/description/images/banner_1.png b/theme_eco_refine/static/description/images/banner_1.png
new file mode 100644
index 000000000..176ce6628
Binary files /dev/null and b/theme_eco_refine/static/description/images/banner_1.png differ
diff --git a/theme_eco_refine/static/description/images/banner_2.png b/theme_eco_refine/static/description/images/banner_2.png
new file mode 100644
index 000000000..0ee9609d0
Binary files /dev/null and b/theme_eco_refine/static/description/images/banner_2.png differ
diff --git a/theme_eco_refine/static/description/images/best_seller.png b/theme_eco_refine/static/description/images/best_seller.png
new file mode 100644
index 000000000..0cce72420
Binary files /dev/null and b/theme_eco_refine/static/description/images/best_seller.png differ
diff --git a/theme_eco_refine/static/description/images/blog-responsive-design.png b/theme_eco_refine/static/description/images/blog-responsive-design.png
new file mode 100644
index 000000000..ba13a6590
Binary files /dev/null and b/theme_eco_refine/static/description/images/blog-responsive-design.png differ
diff --git a/theme_eco_refine/static/description/images/blog.png b/theme_eco_refine/static/description/images/blog.png
new file mode 100644
index 000000000..b038c3375
Binary files /dev/null and b/theme_eco_refine/static/description/images/blog.png differ
diff --git a/theme_eco_refine/static/description/images/collections.png b/theme_eco_refine/static/description/images/collections.png
new file mode 100644
index 000000000..466109ad6
Binary files /dev/null and b/theme_eco_refine/static/description/images/collections.png differ
diff --git a/theme_eco_refine/static/description/images/contact_us.png b/theme_eco_refine/static/description/images/contact_us.png
new file mode 100644
index 000000000..d91dfb056
Binary files /dev/null and b/theme_eco_refine/static/description/images/contact_us.png differ
diff --git a/theme_eco_refine/static/description/images/customer_response.png b/theme_eco_refine/static/description/images/customer_response.png
new file mode 100644
index 000000000..7404dbd64
Binary files /dev/null and b/theme_eco_refine/static/description/images/customer_response.png differ
diff --git a/theme_eco_refine/static/description/images/home-mobile.png b/theme_eco_refine/static/description/images/home-mobile.png
new file mode 100644
index 000000000..d66ac582d
Binary files /dev/null and b/theme_eco_refine/static/description/images/home-mobile.png differ
diff --git a/theme_eco_refine/static/description/images/home_2.png b/theme_eco_refine/static/description/images/home_2.png
new file mode 100644
index 000000000..223afa14d
Binary files /dev/null and b/theme_eco_refine/static/description/images/home_2.png differ
diff --git a/theme_eco_refine/static/description/images/icon-Compatibility-with-plugins.png b/theme_eco_refine/static/description/images/icon-Compatibility-with-plugins.png
new file mode 100644
index 000000000..2c0c4015e
Binary files /dev/null and b/theme_eco_refine/static/description/images/icon-Compatibility-with-plugins.png differ
diff --git a/theme_eco_refine/static/description/images/icon-Fast-loading-times.png b/theme_eco_refine/static/description/images/icon-Fast-loading-times.png
new file mode 100644
index 000000000..d758dea65
Binary files /dev/null and b/theme_eco_refine/static/description/images/icon-Fast-loading-times.png differ
diff --git a/theme_eco_refine/static/description/images/icon-One-Click-Installation.png b/theme_eco_refine/static/description/images/icon-One-Click-Installation.png
new file mode 100644
index 000000000..189cc7cbb
Binary files /dev/null and b/theme_eco_refine/static/description/images/icon-One-Click-Installation.png differ
diff --git a/theme_eco_refine/static/description/images/icon-Responsive-design.png b/theme_eco_refine/static/description/images/icon-Responsive-design.png
new file mode 100644
index 000000000..963329a0a
Binary files /dev/null and b/theme_eco_refine/static/description/images/icon-Responsive-design.png differ
diff --git a/theme_eco_refine/static/description/images/icon-Up-to-date-development.png b/theme_eco_refine/static/description/images/icon-Up-to-date-development.png
new file mode 100644
index 000000000..892a490e8
Binary files /dev/null and b/theme_eco_refine/static/description/images/icon-Up-to-date-development.png differ
diff --git a/theme_eco_refine/static/description/images/icon-design.png b/theme_eco_refine/static/description/images/icon-design.png
new file mode 100644
index 000000000..bd578f6d1
Binary files /dev/null and b/theme_eco_refine/static/description/images/icon-design.png differ
diff --git a/theme_eco_refine/static/description/images/logo-cybro.png b/theme_eco_refine/static/description/images/logo-cybro.png
new file mode 100644
index 000000000..ecf9b0134
Binary files /dev/null and b/theme_eco_refine/static/description/images/logo-cybro.png differ
diff --git a/theme_eco_refine/static/description/images/new_arrival.png b/theme_eco_refine/static/description/images/new_arrival.png
new file mode 100644
index 000000000..2c619c5b1
Binary files /dev/null and b/theme_eco_refine/static/description/images/new_arrival.png differ
diff --git a/theme_eco_refine/static/description/images/odoo-consultency.png b/theme_eco_refine/static/description/images/odoo-consultency.png
new file mode 100644
index 000000000..bf2d21531
Binary files /dev/null and b/theme_eco_refine/static/description/images/odoo-consultency.png differ
diff --git a/theme_eco_refine/static/description/images/odoo-customization.png b/theme_eco_refine/static/description/images/odoo-customization.png
new file mode 100644
index 000000000..a51a84de4
Binary files /dev/null and b/theme_eco_refine/static/description/images/odoo-customization.png differ
diff --git a/theme_eco_refine/static/description/images/odoo-developer.png b/theme_eco_refine/static/description/images/odoo-developer.png
new file mode 100644
index 000000000..b2272be9e
Binary files /dev/null and b/theme_eco_refine/static/description/images/odoo-developer.png differ
diff --git a/theme_eco_refine/static/description/images/odoo-implement.png b/theme_eco_refine/static/description/images/odoo-implement.png
new file mode 100644
index 000000000..ab975c139
Binary files /dev/null and b/theme_eco_refine/static/description/images/odoo-implement.png differ
diff --git a/theme_eco_refine/static/description/images/odoo-intergration.png b/theme_eco_refine/static/description/images/odoo-intergration.png
new file mode 100644
index 000000000..82b73a193
Binary files /dev/null and b/theme_eco_refine/static/description/images/odoo-intergration.png differ
diff --git a/theme_eco_refine/static/description/images/odoo-licencing.png b/theme_eco_refine/static/description/images/odoo-licencing.png
new file mode 100644
index 000000000..fe24f14c4
Binary files /dev/null and b/theme_eco_refine/static/description/images/odoo-licencing.png differ
diff --git a/theme_eco_refine/static/description/images/odoo-logo.png b/theme_eco_refine/static/description/images/odoo-logo.png
new file mode 100644
index 000000000..36960c38b
Binary files /dev/null and b/theme_eco_refine/static/description/images/odoo-logo.png differ
diff --git a/theme_eco_refine/static/description/images/odoo-migration.png b/theme_eco_refine/static/description/images/odoo-migration.png
new file mode 100644
index 000000000..03ac43d05
Binary files /dev/null and b/theme_eco_refine/static/description/images/odoo-migration.png differ
diff --git a/theme_eco_refine/static/description/images/odoo-support.png b/theme_eco_refine/static/description/images/odoo-support.png
new file mode 100644
index 000000000..6d481032c
Binary files /dev/null and b/theme_eco_refine/static/description/images/odoo-support.png differ
diff --git a/theme_eco_refine/static/description/images/screen-shot-01.png b/theme_eco_refine/static/description/images/screen-shot-01.png
new file mode 100644
index 000000000..b08ce4069
Binary files /dev/null and b/theme_eco_refine/static/description/images/screen-shot-01.png differ
diff --git a/theme_eco_refine/static/description/images/shop.png b/theme_eco_refine/static/description/images/shop.png
new file mode 100644
index 000000000..4819500ab
Binary files /dev/null and b/theme_eco_refine/static/description/images/shop.png differ
diff --git a/theme_eco_refine/static/description/images/single_product.png b/theme_eco_refine/static/description/images/single_product.png
new file mode 100644
index 000000000..903672d2d
Binary files /dev/null and b/theme_eco_refine/static/description/images/single_product.png differ
diff --git a/theme_eco_refine/static/description/images/trading.png b/theme_eco_refine/static/description/images/trading.png
new file mode 100644
index 000000000..9d99bc55b
Binary files /dev/null and b/theme_eco_refine/static/description/images/trading.png differ
diff --git a/theme_eco_refine/static/description/index.html b/theme_eco_refine/static/description/index.html
new file mode 100644
index 000000000..390345a74
--- /dev/null
+++ b/theme_eco_refine/static/description/index.html
@@ -0,0 +1,741 @@
+
+
+
+ odoo
+
+
+
+
+
+
+
Theme Eco Refine was created by Cybrosys Technology
+ Solutions. This theme makes the website more unique and attractive through its style and
+ custom-designed snippets, mainly suitable for eCommerce websites.
+
+
Provides Structural snippets like Collections,
+ Subscribe, Choose , Cards, Banner and Dynamic content snippets like Asked Questions, Best Seller
+ Products, Most Rated Products, New Arrivals
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Key features
+
+
+
+
+
+
+ Design
+
+
Unique and Attractive custom-designed
+ snippets.
+
+
+
+
+
+
+ Fast loading times
+
+
This theme loads all of its features
+ more quickly than other designs.
+
+
+
+
+
+
+
+ Responsive design
+
+
Different resolution devices can be
+ used by users to watch websites.
+
+
+
+
+
+
+
+ One Click Installation
+
+
This mode is significantly easier than
+ others because Odoo makes One Click Installation feasible.
+
+
+
+
+
+
+
+
+
+
+
Main
+ page
+
+
+
+
+
+
Home
+
Shop
+
Blog
+
About us
+
Contact us
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Mobile Responsive Design
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
About us page
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Mobile Responsive Design
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Shop
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Mobile Responsive Design
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Blog Page
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Mobile Responsive Design
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Contact us Page
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Structural Snippets
+
+
+
+
+
+
Collections
+
Customer Response
+
+
Frequently Asked Questions
+
+ Banner
+
+
+
+
+
+
+
+
+
+
+
Collections
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Customer Response
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Frequently Asked Questions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Banner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Dynamic Content Snippets
+
+
+
+
+
+
Best Seller
+
+
Top Rated Products
+
New Arrivals
+
+
+
+
+
+
+
+
+
+
Best Seller
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Top Rated Products
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
New Arrivals
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Our Services
+
+
View services offered
+ by
+ us
+
+
+
+
+
+
Odoo Customization
+
+
+
+
+
+
Odoo Implementation
+
+
+
+
+
+
Odoo Support
+
+
+
+
+
+
Hire Odoo Developer
+
+
+
+
+
+
Odoo Integration
+
+
+
+
+
+
Odoo Migration
+
+
+
+
+
+
Odoo Consultancy
+
+
+
+
+
+
Odoo Implementation
+
+
+
+
+
+
Odoo Licensing
+ Consultancy
+
+
+
+
+
+
+
+
+
+
Our Industries
+
Get Insight in our
+ odoo
+ knowledge and our marked footprint in industries
+