Browse Source

Aug 09 : [ADD] Initial Commit 'theme_classic_store'

pull/280/head
AjmalCybro 2 years ago
parent
commit
48c9bdf6f6
  1. 46
      theme_classic_store/README.rst
  2. 23
      theme_classic_store/__init__.py
  3. 81
      theme_classic_store/__manifest__.py
  4. 22
      theme_classic_store/controllers/__init__.py
  5. 104
      theme_classic_store/controllers/theme_classic_store.py
  6. 12
      theme_classic_store/data/classic_store_config_data.xml
  7. 6
      theme_classic_store/doc/RELEASE_NOTES.md
  8. 25
      theme_classic_store/models/__init__.py
  9. 43
      theme_classic_store/models/classic_store_config.py
  10. 46
      theme_classic_store/models/product_public_category.py
  11. 34
      theme_classic_store/models/product_template.py
  12. 60
      theme_classic_store/models/theme_utils.py
  13. 2
      theme_classic_store/security/ir.model.access.csv
  14. BIN
      theme_classic_store/static/description/banner.png
  15. BIN
      theme_classic_store/static/description/icon.png
  16. BIN
      theme_classic_store/static/description/images/1.jpg
  17. BIN
      theme_classic_store/static/description/images/2.jpg
  18. BIN
      theme_classic_store/static/description/images/3.jpg
  19. BIN
      theme_classic_store/static/description/images/4.jpg
  20. BIN
      theme_classic_store/static/description/images/5.jpg
  21. BIN
      theme_classic_store/static/description/images/6.jpg
  22. BIN
      theme_classic_store/static/description/images/Cybrosys.png
  23. BIN
      theme_classic_store/static/description/images/categories.jpg
  24. BIN
      theme_classic_store/static/description/images/cybro-logo-oca.png
  25. BIN
      theme_classic_store/static/description/images/demo1.png
  26. BIN
      theme_classic_store/static/description/images/demo2.png
  27. BIN
      theme_classic_store/static/description/images/demo3.png
  28. BIN
      theme_classic_store/static/description/images/demo4.png
  29. BIN
      theme_classic_store/static/description/images/hero.png
  30. BIN
      theme_classic_store/static/description/images/laptop-screenshots.jpg
  31. BIN
      theme_classic_store/static/description/images/phone-screenshots.jpg
  32. 332
      theme_classic_store/static/description/index.html
  33. BIN
      theme_classic_store/static/description/theme_screenshot.png
  34. 7
      theme_classic_store/static/src/css/animate.min.css
  35. 25
      theme_classic_store/static/src/css/classic_store.css
  36. 6
      theme_classic_store/static/src/css/owl.carousel.min.css
  37. 6
      theme_classic_store/static/src/css/owl.theme.default.min.css
  38. 4617
      theme_classic_store/static/src/css/style.css
  39. 39
      theme_classic_store/static/src/css/style.css.map
  40. BIN
      theme_classic_store/static/src/images/404/404.png
  41. BIN
      theme_classic_store/static/src/images/about/about.jpg
  42. BIN
      theme_classic_store/static/src/images/about/er.jpg
  43. BIN
      theme_classic_store/static/src/images/account/Account1.png
  44. BIN
      theme_classic_store/static/src/images/apps/apple-app-store.png
  45. BIN
      theme_classic_store/static/src/images/apps/google-play-store.png
  46. BIN
      theme_classic_store/static/src/images/banner/hero.jpg
  47. BIN
      theme_classic_store/static/src/images/blog/post-1.jpg
  48. BIN
      theme_classic_store/static/src/images/blog/post-2.jpg
  49. BIN
      theme_classic_store/static/src/images/blog/post-3.jpg
  50. BIN
      theme_classic_store/static/src/images/blog/post-4.jpg
  51. BIN
      theme_classic_store/static/src/images/blog/post-5.jpg
  52. BIN
      theme_classic_store/static/src/images/blog/video-icon.png
  53. BIN
      theme_classic_store/static/src/images/call-to-action/cta-background.jpg
  54. BIN
      theme_classic_store/static/src/images/call-to-action/sd.jpg
  55. BIN
      theme_classic_store/static/src/images/categories/c1 (1).jpg
  56. BIN
      theme_classic_store/static/src/images/categories/c1 (2).jpg
  57. BIN
      theme_classic_store/static/src/images/categories/c1 (3).jpg
  58. BIN
      theme_classic_store/static/src/images/categories/c1 (4).jpg
  59. BIN
      theme_classic_store/static/src/images/categories/c1 (5).jpg
  60. BIN
      theme_classic_store/static/src/images/categories/c1 (6).jpg
  61. BIN
      theme_classic_store/static/src/images/categories/c1 (7).jpg
  62. BIN
      theme_classic_store/static/src/images/categories/c1 (8).jpg
  63. BIN
      theme_classic_store/static/src/images/cybro-logo-oca.png
  64. BIN
      theme_classic_store/static/src/images/footer/phone-icon.png
  65. BIN
      theme_classic_store/static/src/images/logo-footer.png
  66. BIN
      theme_classic_store/static/src/images/logo.png
  67. BIN
      theme_classic_store/static/src/images/products/22 (1).jpg
  68. BIN
      theme_classic_store/static/src/images/products/22 (2).jpg
  69. BIN
      theme_classic_store/static/src/images/products/22 (3).jpg
  70. BIN
      theme_classic_store/static/src/images/products/22 (4).jpg
  71. BIN
      theme_classic_store/static/src/images/products/products-1.jpg
  72. BIN
      theme_classic_store/static/src/images/products/products-2.jpg
  73. BIN
      theme_classic_store/static/src/images/products/products-3.jpg
  74. BIN
      theme_classic_store/static/src/images/products/products-4.jpg
  75. BIN
      theme_classic_store/static/src/images/snippets/about_us_block.jpg
  76. BIN
      theme_classic_store/static/src/images/snippets/banner_block.jpg
  77. BIN
      theme_classic_store/static/src/images/snippets/categories_block.jpg
  78. BIN
      theme_classic_store/static/src/images/snippets/counter_block.jpg
  79. BIN
      theme_classic_store/static/src/images/snippets/listing_block.jpg
  80. BIN
      theme_classic_store/static/src/images/snippets/packages_block.jpg
  81. BIN
      theme_classic_store/static/src/images/snippets/search_bar_block.jpg
  82. BIN
      theme_classic_store/static/src/images/snippets/sub_header_block.jpg
  83. BIN
      theme_classic_store/static/src/images/snippets/team_members_block.jpg
  84. BIN
      theme_classic_store/static/src/images/snippets/trending-products.jpg
  85. BIN
      theme_classic_store/static/src/images/subscription/subscription-back.jpg
  86. BIN
      theme_classic_store/static/src/images/team/team1.jpg
  87. BIN
      theme_classic_store/static/src/images/team/team2.jpg
  88. BIN
      theme_classic_store/static/src/images/team/team3.jpg
  89. BIN
      theme_classic_store/static/src/images/team/team4.jpg
  90. BIN
      theme_classic_store/static/src/images/user/user-thumb.jpg
  91. 3448
      theme_classic_store/static/src/js/owl.carousel.js
  92. 128
      theme_classic_store/static/src/js/sale_utils.js
  93. 35
      theme_classic_store/static/src/js/shop_sidebar.js
  94. 29
      theme_classic_store/static/src/js/snippets_category.js
  95. 76
      theme_classic_store/static/src/js/snippets_trending.js
  96. 54
      theme_classic_store/views/classic_store_config_views.xml
  97. 35
      theme_classic_store/views/http_routing_templates.xml
  98. 55
      theme_classic_store/views/snippets/classic_store_aboutus_templates.xml
  99. 43
      theme_classic_store/views/snippets/classic_store_banner_templates.xml
  100. 53
      theme_classic_store/views/snippets/classic_store_categories_templates.xml

46
theme_classic_store/README.rst

@ -0,0 +1,46 @@
.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
Theme Classic Store
===================
* Design Web Pages with theme classic store
Installation
============
- www.odoo.com/documentation/15.0/setup/install.html
- Install our custom addon
License
-------
General Public License, Version 3 (LGPL v3).
(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developer: (V15) Vivek S, Contact: odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@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 https://www.cybrosys.com
Further information
===================
HTML Description: `<static/description/index.html>`__

23
theme_classic_store/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vivek @ cybrosys,(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import controllers
from . import models

81
theme_classic_store/__manifest__.py

@ -0,0 +1,81 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vivek @ cybrosys,(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': 'Theme Classic Store',
'version': '15.0.1.0.0',
'category': 'Theme/eCommerce',
'summary': 'Theme Classic Store for Odoo Website and e-Commerce',
'description': 'Theme Classic Store is an attractive eCommerce theme.'
'The theme comes with many useful and stylish snippets',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': ['website_blog', 'website_sale_wishlist',
'website_sale_comparison', 'website_sale', 'website'],
'data': [
'security/ir.model.access.csv',
'data/classic_store_config_data.xml',
'views/classic_store_config_views.xml',
'views/website_templates.xml',
'views/website_contactus_templates.xml',
'views/website_blog_templates.xml',
'views/http_routing_templates.xml',
'views/website_sale_templates.xml',
'views/snippets/classic_store_aboutus_templates.xml',
'views/snippets/classic_store_banner_templates.xml',
'views/snippets/classic_store_categories_templates.xml',
'views/snippets/classic_store_listing_templates.xml',
'views/snippets/classic_store_package_templates.xml',
'views/snippets/classic_store_team_templates.xml',
'views/snippets/classic_store_counter_templates.xml',
'views/snippets/classic_store_sub_header_templates.xml',
'views/snippets/classic_store_search_templates.xml',
'views/snippets/classic_store_trending_templates.xml',
'views/snippets/snippet_templates.xml',
],
'assets': {
'web.assets_frontend': [
('replace', 'website_sale/static/src/js/website_sale_utils.js',
'theme_classic_store/static/src/js/sale_utils.js'),
"/theme_classic_store/static/src/css/style.css",
"/theme_classic_store/static/src/css/style.css.map",
"/theme_classic_store/static/src/css/animate.min.css",
"/theme_classic_store/static/src/css/classic_store.css",
"/theme_classic_store/static/src/css/owl.carousel.min.css",
"/theme_classic_store/static/src/css/owl.theme.default.min.css",
"/theme_classic_store/static/src/js/owl.carousel.js",
"/theme_classic_store/static/src/js/owl.carousel.min.js",
"/theme_classic_store/static/src/js/snippets_category.js",
"/theme_classic_store/static/src/js/snippets_trending.js",
"/theme_classic_store/static/src/js/shop_sidebar.js",
],
},
'images': [
'static/description/banner.png',
'static/description/theme_screenshot.png',
],
'license': 'LGPL-3',
'installable': True,
'auto_install': False,
'application': True,
}

22
theme_classic_store/controllers/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vivek @ cybrosys,(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import theme_classic_store

104
theme_classic_store/controllers/theme_classic_store.py

@ -0,0 +1,104 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vivek @ cybrosys,(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
import datetime
from odoo import fields, http
from odoo.http import request
class WebsiteClassicCategory(http.Controller):
"""
This controller method returns a JSON object that categorizes products
based on their product categories. """
@http.route('/classic_product_category', auth="public", type='json',
website=True)
def get_product_categories(self):
"""
Categorize products based on product categories
The counter "category_counter" is used to keep track of the product
count in each category """
product_ids = request.env['product.template'].sudo().search(
[('website_published', '=', True)])
product_category_ids = request.env[
'product.public.category'].sudo().search([])
product_categories_main_list = []
for rec in product_category_ids:
if rec.child_id:
product_categories_main_list.append(rec)
category_counter = {}
for rec in product_category_ids:
category_counter[rec] = 0
for rec in product_ids:
for cat in rec.public_categ_ids:
if cat in product_category_ids:
category_counter[cat] += 1
values = {
'product_categories_main': product_categories_main_list,
'counter': category_counter
}
response = http.Response(
template='theme_classic_store.s_classic_store_categories',
qcontext=values)
return response.render()
class WebsiteClassicTrending(http.Controller):
"""
This module defines a controller for the website that showcases trending
products. It contains a class `WebsiteClassicTrending` with a method
`get_trending_products()` that is called when the route
`/classic_product_trending` is accessed."""
@http.route('/classic_product_trending', auth="public", type='json',
website=True)
def get_trending_products(self):
"""
Showcase trending products based on their number of views between a
defined period
number of views for a product is tracked and then the most viewed
products are shown in order of views
"""
classic_config = request.env[
'classic_store.config'].sudo().search([])
trending_products = classic_config.trending_product_ids
if not trending_products:
products = request.env['product.template'].sudo().search([])
for each in products:
each.views = 0
each.is_most_viewed = False
date = fields.Datetime.now()
date_before = date - datetime.timedelta(days=7)
products = request.env['website.track'].sudo().search(
[('visit_datetime', '<=', date),
('visit_datetime', '>=', date_before),
('product_id', '!=', False)])
for pro in products:
pro.product_id.views = pro.product_id.views + 1
trending_products = request.env['product.template'].sudo().search(
[('is_published', '=', True),
('views', '!=', 0)],
order='views desc', limit=4)
values = {
'trending_products': trending_products
}
response = http.Response(
template='theme_classic_store.s_classic_store_trending',
qcontext=values)
return response.render()

12
theme_classic_store/data/classic_store_config_data.xml

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--This XML file defines the configuration data for the Classic Store.
It contains information such as the store name and the maximum price.
Modify the values as needed.-->
<data noupdate="1">
<record id="classic_store_config_data" model="classic_store.config">
<field name="name">Classic Store Configuration</field>
<field name="max_price">100000</field>
</record>
</data>
</odoo>

6
theme_classic_store/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <theme_classic_store>
#### 26.07.2023
#### Version 15.0.1.0.0
#### ADD
- Initial commit for Theme Classic Store

25
theme_classic_store/models/__init__.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vivek @ cybrosys,(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import classic_store_config
from . import product_public_category
from . import product_template
from . import theme_utils

43
theme_classic_store/models/classic_store_config.py

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vivek @ cybrosys,(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields
class ClassicStoreConfig(models.Model):
"""Creating 'name', 'max_price', 'trending_product_ids', field in
classic_store.config settings"""
_name = 'classic_store.config'
_description = 'Configuration Model For Theme Classic Store'
name = fields.Char(string="Name",
help="Enter the name for the configuration.")
max_price = fields.Integer(string="Maximum Price", default=100000,
help="Maximum amount to apply in "
"product filter.")
trending_product_ids = fields.Many2many('product.template',
string="Trending Products",
help="Manually enter trending "
"products or leave the field"
"blank to automatically "
"add the trending products.",
domain=[
('is_published', '=', True)])

46
theme_classic_store/models/product_public_category.py

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vivek @ cybrosys,(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields
class ProductPublicCategory(models.Model):
"""Adding 'category_count' field to the 'product.public.category' model."""
_inherit = 'product.public.category'
category_count = fields.Integer(string="Count",
help="The count of different products"
" in each category.",
compute="_compute_category_count")
def _compute_category_count(self):
"""
Compute function for calculating the value of category_count
Calculates the count of different products in each category
"""
product_ids = self.env['product.template'].search(
[('website_published', '=', True)])
for category in self:
category_ids = category.search(
[('id', 'child_of', category.id)]).ids
category.category_count = sum(
1 for rec in product_ids for cat in rec.public_categ_ids if
cat.id in category_ids)

34
theme_classic_store/models/product_template.py

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vivek @ cybrosys,(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields
class ProductTemplate(models.Model):
"""Adding 'views' and 'most_viewed' fields to the 'product.template'
model"""
_inherit = 'product.template'
views = fields.Integer(string="Views",
help="The total views for the product through "
"website.")
is_most_viewed = fields.Boolean(string="Most Viewed",
help='Set true if the product is most viewed')

60
theme_classic_store/models/theme_utils.py

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Vivek @ cybrosys,(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models
class ThemeClassicStore(models.AbstractModel):
"""
This class extends the 'theme.utils' abstract model to provide
theme-specific functionalities."""
_inherit = 'theme.utils'
def _theme_classic_store_post_copy(self, mod):
"""
Disable certain views in the website sale and wishlist functionality
of the Odoo e-commerce module for the "Classic" theme.
This method disables certain views related to features such as product
comparison, grid or list views,adding products to the cart or wishlist,
displaying product attributes and variants, displaying recommended or
recently viewed products, and other product-related features in the
e-commerce website.
"""
self.disable_view('website_sale_comparison.add_to_compare')
self.disable_view('website_sale_comparison.product_attributes_body')
self.disable_view('website_sale.add_grid_or_list_option')
self.disable_view('website_sale.products_add_to_cart')
self.disable_view('website_sale_comparison.add_to_compare')
self.disable_view('website_sale.product_buy_now')
self.disable_view('website_sale_wishlist.add_to_wishlist')
self.disable_view('website_sale.add_grid_or_list_option')
self.disable_view('website_sale.products_images_full')
self.disable_view('website_sale.products_list_view')
self.disable_view('website_sale.recommended_products')
self.disable_view('website_sale.product_picture_magnify_auto')
self.disable_view('website_sale.product_buy_now')
self.disable_view('website_sale.product_comment')
self.disable_view('website_sale.product_picture_magnify')
self.disable_view('website_sale.product_variants')
self.disable_view('website_sale_comparison.product_attributes_body')
self.disable_view('website_sale.ecom_show_extra_fields')
self.disable_view('website_sale.product_custom_text')
self.disable_view('website_sale_wishlist.product_add_to_wishlist')

2
theme_classic_store/security/ir.model.access.csv

@ -0,0 +1,2 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_theme_classic_store,access.theme.classic.store,model_classic_store_config,base.group_user,1,1,1,1
1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
2 access_theme_classic_store access.theme.classic.store model_classic_store_config base.group_user 1 1 1 1

BIN
theme_classic_store/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

BIN
theme_classic_store/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
theme_classic_store/static/description/images/1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

BIN
theme_classic_store/static/description/images/2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

BIN
theme_classic_store/static/description/images/3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

BIN
theme_classic_store/static/description/images/4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

BIN
theme_classic_store/static/description/images/5.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

BIN
theme_classic_store/static/description/images/6.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 KiB

BIN
theme_classic_store/static/description/images/Cybrosys.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
theme_classic_store/static/description/images/categories.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
theme_classic_store/static/description/images/cybro-logo-oca.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
theme_classic_store/static/description/images/demo1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
theme_classic_store/static/description/images/demo2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
theme_classic_store/static/description/images/demo3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
theme_classic_store/static/description/images/demo4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
theme_classic_store/static/description/images/hero.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

BIN
theme_classic_store/static/description/images/laptop-screenshots.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 KiB

BIN
theme_classic_store/static/description/images/phone-screenshots.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 KiB

332
theme_classic_store/static/description/index.html

@ -0,0 +1,332 @@
<!-- Hero Section -->
<div class="container pt-4 mt-4 rounded"
style="background-color: #f0f2f4; font-family: Montserrat, 'sans-serif';">
<div class="row">
<div class="col-lg-12 mb-4">
<img src="images/Cybrosys.png" alt="Cybrosys Logo"
style="width: 120px; height: auto;">
<hr style="border-color: #e1e5e9;"/>
</div>
</div>
<div class="row">
<div class="col-lg-12 text-center">
<img src="images/hero.png" width=60% height="auto" class="mb-4"
alt="Theme Screenshot">
</div>
<div class="col-lg-12 text-center">
<h1 class="mt-4">Theme Classic Store</h1>
<p class="lead mb-4" style="max-width: 700px; margin: 0 auto;">
Theme Classic Store is an attractive and unique front-end theme
mainly suitable for eCommerce website.
Many
custom designed snippets facilitates to add better user
experience. Contains Categories Snippet with
subcategories and its product count, Shop categories sidebar
with product count, Shop price filter. This
theme fully customized the eCommerce website, shop view, custom
categories view, product view,
contact-us page...etc.
</p>
</div>
</div>
<!-- End of Hero Section -->
<!-- Alternate Section -->
<div class="row p-4">
<div class="col-lg-6 px-4" style="margin-top: 100px;">
<h2>Desktop View</h2>
<p class="lead">
Attractive webpages with elegant desktop view. User-friendly
and Modern looking theme makes your page
more Stylish and Beautiful.
</p>
</div>
<div class="col-lg-6 px-4">
<img style="border-radius: 0.5em;"
src="images/laptop-screenshots.jpg" width="90%" height="auto"
class="mb-4 shadow-sm" alt="Theme Screenshot">
</div>
</div>
<div class="row p-4">
<div class="col-lg-6 px-4">
<img style="border-radius: 0.5em;"
src="images/phone-screenshots.jpg" width="90%" height="auto"
class="mb-4 shadow-sm" alt="Theme Screenshot">
</div>
<div class="col-lg-6 px-4" style="margin-top: 100px;">
<h2>Mobile View</h2>
<p class="lead">
The webpages are Stylish, Attractive and Easy to use in mobile
view also.
</p>
</div>
</div>
<!-- End of Alternate Section -->
<!-- Two Columns Section -->
<div class="row p-4">
<!-- Column 1 -->
<div class="col-lg-6">
<div class="row">
<div class="col-lg-12">
<img style="border-radius: 0.5em;" src="images/1.jpg"
width="100%" height="auto"
class="mb-4 shadow-sm" alt="Theme Screenshot">
</div>
<div class="col-lg-12 mt-4">
<h2 class="text-center">Home Page</h2>
<p class="lead text-center">
Stylish Home page which is easily customizable. Simple
and attractive header with
page menus that has animated styles.
</p>
</div>
</div>
</div>
<!-- End of Column 1 -->
<!-- Column 2 -->
<div class="col-lg-6">
<div class="row">
<div class="col-lg-12">
<img style="border-radius: 0.5em;" src="images/2.jpg"
width="100%" height="auto"
class="mb-4 shadow-sm" alt="Theme Screenshot">
</div>
<div class="col-lg-12 mt-4">
<h2 class="text-center">Shop page</h2>
<p class="lead text-center">
Shop Page with additional features like Category
sidebar with product counts and Price filter.
</p>
</div>
</div>
</div>
<!-- End of Column 2 -->
</div>
<!-- End of Two Columns Section -->
<!-- One Column Section -->
<div class="row p-4">
<div class="col-lg-6">
<img style="border-radius: 0.5em;" src="images/3.jpg" width="90%"
height="auto" class="mb-4 shadow-sm"
alt="Theme Screenshot">
</div>
<div class="col-lg-6" style="padding-top: 40px;">
<h2>Overview</h2>
<p class="lead">
Theme Classic Store is a simple and elegant theme for your odoo
website. It is easy to customize and
use. It comes with customizable snippets that can be dragged
and dropped to make attractive webpages.
Simple and stylish header, footer and page banners.
</p>
</div>
</div>
<!-- End of One Column Section -->
<!-- Categories Section -->
<div class="row p-4">
<div class="col-lg-6">
<h2>Categories</h2>
<p class="lead">
Categories Snippet which shows all the main categories of the
e-commerce shop with its sub categories
and corresponding product count. The sequence of appearance,
image and count is dynamically updated from
backend data.
</p>
</div>
<div class="col-lg-6 d-flex justify-content-center align-items-center mt-4">
<img style="border-radius: 0.5em;" src="images/categories.jpg"
width="90%" height="auto"
class="mb-4 shadow-sm" alt="Theme Screenshot">
</div>
</div>
<!-- End of Categories Section -->
<!-- Two Columns Section -->
<div class="row p-4">
<!-- Column 1 -->
<div class="col-lg-4">
<div class="row">
<div class="col-lg-12">
<img style="border-radius: 0.5em;" src="images/4.jpg"
width="100%" height="auto"
class="mb-4 shadow-sm" alt="Theme Screenshot">
</div>
<div class="col-lg-12 mt-4">
<h2 class="text-center">Product Preview</h2>
<p class="lead text-center">
Product preview page with simple and stylish display
features and additional Product Details,
Specification and Review Tabs.
</p>
</div>
</div>
</div>
<!-- End of Column 1 -->
<!-- Column 2 -->
<div class="col-lg-4">
<div class="row">
<div class="col-lg-12">
<img style="border-radius: 0.5em;" src="images/5.jpg"
width="100%" height="auto"
class="mb-4 shadow-sm" alt="Theme Screenshot">
</div>
<div class="col-lg-12 mt-4">
<h2 class="text-center">Blog</h2>
<p class="lead text-center">
Blog Page with stylish banner and list view.
</p>
</div>
</div>
</div>
<!-- End of Column 2 -->
<!-- Column 4 -->
<div class="col-lg-4">
<div class="row">
<div class="col-lg-12">
<img style="border-radius: 0.5em;" src="images/6.jpg"
width="100%" height="auto"
class="mb-4 shadow-sm" alt="Theme Screenshot">
</div>
<div class="col-lg-12 mt-4">
<h2 class="text-center">About Us</h2>
<p class="lead text-center">
About Us page which can be easily created and
customized using snippets.
</p>
</div>
</div>
</div>
<!-- End of Column 4 -->
</div>
<!-- End of Two Columns Section -->
<!-- Demo Pages -->
<section class="oe_container">
<div class="row" style="margin: 60px auto -30px;">
<div class="col-lg-12 text-center">
<h4 class="mt-4">Demo Pages</h4>
<hr style="border-width: 3px; border-color: #0984e3; width: 100px;">
</div>
</div>
<div class="row"
style="margin: 40px auto; border-radius: 15px; padding: 38px;">
<div class="col-sm-6 col-md-4 px-2">
<div class="bg-white shadow overflow-hidden mb32"
style="border-radius: 15px; width: 300px; padding-bottom: 0; margin-right: 30px;">
<img src="./images/demo1.png" width="300px" height="500px">
<h6 class="text-center my-3">Home</h6>
<hr style="border-width: 5px; border-color: #0984e3; width: 150px; margin-bottom: 0;">
</div>
</div>
<div class="col-sm-6 col-md-4 px-2">
<div class="bg-white shadow overflow-hidden mb32"
style="border-radius: 15px; width: 300px; padding-bottom: 0;">
<img src="./images/demo2.png" width="300px" height="500px">
<h6 class="text-center my-3">Shop</h6>
<hr style="border-width: 5px; border-color: #05c46b; width: 150px; margin-bottom: 0;">
</div>
</div>
<div class="col-sm-6 col-md-4 px-2">
<div class="bg-white shadow overflow-hidden mb32"
style="border-radius: 15px; width: 300px; padding-bottom: 0;">
<img src="./images/demo3.png" width="300px" height="500px">
<h6 class="text-center my-3">Product Page</h6>
<hr style="border-width: 5px; border-color: #f44f52; width: 150px; margin-bottom: 0;">
</div>
</div>
</div>
<div class="row d-flex justify-content-center"
style="margin: 40px auto; border-radius: 15px; padding: 38px;">
<div class="col-sm-6 col-md-4 px-2">
<div class="bg-white shadow overflow-hidden mb32"
style="border-radius: 15px; width: 300px; padding-bottom: 0;">
<img src="./images/demo4.png" width="300px" height="500px">
<h6 class="text-center my-3">Blog</h6>
<hr style="border-width: 5px; border-color: #ffa801; width: 150px; margin-bottom: 0;">
</div>
</div>
</div>
</section>
<!-- End of Demo Pages -->
<!-- Footer -->
<div class="row" style="margin-top: 4rem;">
<div class="col-lg-12 text-center">
<h2>Get Help</h2>
<hr style=" border: 2px solid #b22126; margin-top: 2px;"
width="40px">
<p class="text-center" style="max-width: 650px; margin: 0 auto;">If
you have anything to share with us
based
on
your use of this module, please let us know. We are ready to
offer our support.</p>
</div>
</div>
<div class="row">
<div class="col px-4 pt-3 pb-2 shadow-sm"
style="background-color: #fff; max-width: 450px; border-radius: 0.5em; margin: 1em auto;">
<div class="row">
<div class="col-lg-8">
<h6><a href="mailto:odoo@cybrosys.com" target="_blank"
style="color: #050505; text-decoration: none;"><i
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a>
</h6>
</div>
<div class="col-lg-4 d-flex justify-content-end"
style="position: relative;">
<h6><a href="mailto:odoo@cybrosys.com" target="_blank"
style="color: #050505; text-decoration: none;"><i
class="fa fa-chevron-right"></i></a>
</h6>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col px-4 pt-3 pb-2 shadow-sm"
style="background-color: #fff; max-width: 450px; border-radius: 0.5em; margin: 1em auto;">
<div class="row">
<div class="col-lg-8">
<h6><a href="https://www.cybrosys.com" target="_blank"
style="color: #050505; text-decoration: none;"><i
class="fa fa-globe mr-2"></i>www.cybrosys.com</a>
</h6>
</div>
<div class="col-lg-4 d-flex justify-content-end"
style="position: relative;">
<h6><a href="https://www.cybrosys.com" target="_blank"
style="color: #050505; text-decoration: none;"><i
class="fa fa-chevron-right"></i></a>
</h6>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 mt-4 mb-2 text-center">
<p style="font-weight: bold">A Quality Theme From</p>
</div>
<div class="col-lg-12 text-center">
<img src="images/cybro-logo-oca.png" width="80px" height="auto">
</div>
</div>
<!-- End of Footer -->
</div>

BIN
theme_classic_store/static/description/theme_screenshot.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 KiB

7
theme_classic_store/static/src/css/animate.min.css

File diff suppressed because one or more lines are too long

25
theme_classic_store/static/src/css/classic_store.css

@ -0,0 +1,25 @@
.page-link {
position: relative;
display: block;
padding: .5rem .75rem;
margin-left: -1px;
line-height: 1.25;
color: #763242 !important;
background-color: #fff;
border: 1px solid #dee2e6;
}
.page-item.active .page-link {
z-index: 3;
color: #fff;
background-color: #c09f7f !important;
border-color: #c09f7f !important;
}
.page-link:hover {
z-index: 2;
color: #0056b3;
text-decoration: none;
background-color: #763242 !important;
border-color: #dee2e6;
}

6
theme_classic_store/static/src/css/owl.carousel.min.css

@ -0,0 +1,6 @@
/**
* Owl Carousel v2.3.4
* Copyright 2013-2018 David Deutsch
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
*/
.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}

6
theme_classic_store/static/src/css/owl.theme.default.min.css

@ -0,0 +1,6 @@
/**
* Owl Carousel v2.3.4
* Copyright 2013-2018 David Deutsch
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
*/
.owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791}

4617
theme_classic_store/static/src/css/style.css

File diff suppressed because it is too large

39
theme_classic_store/static/src/css/style.css.map

File diff suppressed because one or more lines are too long

BIN
theme_classic_store/static/src/images/404/404.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

BIN
theme_classic_store/static/src/images/about/about.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 KiB

BIN
theme_classic_store/static/src/images/about/er.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
theme_classic_store/static/src/images/account/Account1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
theme_classic_store/static/src/images/apps/apple-app-store.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
theme_classic_store/static/src/images/apps/google-play-store.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
theme_classic_store/static/src/images/banner/hero.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
theme_classic_store/static/src/images/blog/post-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

BIN
theme_classic_store/static/src/images/blog/post-2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

BIN
theme_classic_store/static/src/images/blog/post-3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 KiB

BIN
theme_classic_store/static/src/images/blog/post-4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 812 KiB

BIN
theme_classic_store/static/src/images/blog/post-5.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

BIN
theme_classic_store/static/src/images/blog/video-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
theme_classic_store/static/src/images/call-to-action/cta-background.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

BIN
theme_classic_store/static/src/images/call-to-action/sd.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
theme_classic_store/static/src/images/categories/c1 (1).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

BIN
theme_classic_store/static/src/images/categories/c1 (2).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 KiB

BIN
theme_classic_store/static/src/images/categories/c1 (3).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
theme_classic_store/static/src/images/categories/c1 (4).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
theme_classic_store/static/src/images/categories/c1 (5).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 KiB

BIN
theme_classic_store/static/src/images/categories/c1 (6).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

BIN
theme_classic_store/static/src/images/categories/c1 (7).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
theme_classic_store/static/src/images/categories/c1 (8).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 MiB

BIN
theme_classic_store/static/src/images/cybro-logo-oca.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
theme_classic_store/static/src/images/footer/phone-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
theme_classic_store/static/src/images/logo-footer.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
theme_classic_store/static/src/images/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
theme_classic_store/static/src/images/products/22 (1).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
theme_classic_store/static/src/images/products/22 (2).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
theme_classic_store/static/src/images/products/22 (3).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
theme_classic_store/static/src/images/products/22 (4).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
theme_classic_store/static/src/images/products/products-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

BIN
theme_classic_store/static/src/images/products/products-2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

BIN
theme_classic_store/static/src/images/products/products-3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

BIN
theme_classic_store/static/src/images/products/products-4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

BIN
theme_classic_store/static/src/images/snippets/about_us_block.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
theme_classic_store/static/src/images/snippets/banner_block.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
theme_classic_store/static/src/images/snippets/categories_block.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
theme_classic_store/static/src/images/snippets/counter_block.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
theme_classic_store/static/src/images/snippets/listing_block.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
theme_classic_store/static/src/images/snippets/packages_block.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
theme_classic_store/static/src/images/snippets/search_bar_block.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
theme_classic_store/static/src/images/snippets/sub_header_block.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
theme_classic_store/static/src/images/snippets/team_members_block.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
theme_classic_store/static/src/images/snippets/trending-products.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
theme_classic_store/static/src/images/subscription/subscription-back.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 KiB

BIN
theme_classic_store/static/src/images/team/team1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
theme_classic_store/static/src/images/team/team2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
theme_classic_store/static/src/images/team/team3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
theme_classic_store/static/src/images/team/team4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
theme_classic_store/static/src/images/user/user-thumb.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

3448
theme_classic_store/static/src/js/owl.carousel.js

File diff suppressed because it is too large

128
theme_classic_store/static/src/js/sale_utils.js

@ -0,0 +1,128 @@
odoo.define('website_sale.utils', function (require) {
'use strict';
const wUtils = require('website.utils');
/**
* Mixin providing common functionality for handling cart updates.
*/
const cartHandlerMixin = {
/**
* Determines whether to redirect after adding to cart or stay on the same page.
*/
getRedirectOption() {
const html = document.documentElement;
this.stayOnPageOption = html.dataset.add2cartRedirect !== '0';
},
/**
* Determines whether the "Buy Now" option was selected and gets the item image container.
* @param {Event} ev - The event that triggered the cart update.
*/
getCartHandlerOptions(ev) {
this.isBuyNow = ev.currentTarget.classList.contains('o_we_buy_now');
const targetSelector = ev.currentTarget.dataset.animationSelector || 'img';
this.$itemImgContainer = this.$(ev.currentTarget).closest(`:has(${targetSelector})`);
},
/**
* Adds a product to the cart.
* @param {Object} params - The parameters for the cart update.
* @returns {Promise} - A promise that resolves when the cart is updated.
*/
addToCart(params) {
if (this.isBuyNow) {
params.express = true;
} else if (this.stayOnPageOption) {
return this._addToCartInPage(params);
}
return wUtils.sendRequest('/shop/cart/update', params);
},
/**
* Adds a product to the cart on the same page.
* @private
* @param {Object} params - The parameters for the cart update.
* @returns {Promise} - A promise that resolves when the cart is updated.
*/
_addToCartInPage(params) {
params.force_create = true;
return this._rpc({
route: "/shop/cart/update_json",
params: params,
}).then(async data => {
await animateClone($('header .o_wsale_my_cart').first(), this.$itemImgContainer, 25, 40);
updateCartNavBar(data);
});
},
};
/**
* Animates the image of the product being added to the cart.
* @param {jQuery} $cart - The cart element.
* @param {jQuery} $elem - The element representing the product being added.
* @param {number} offsetTop - The top offset of the animated image.
* @param {number} offsetLeft - The left offset of the animated image.
* @returns {Promise} - A promise that resolves when the animation is complete.
*/
function animateClone($cart, $elem, offsetTop, offsetLeft) {
$cart.find('.o_animate_blink').addClass('o_red_highlight o_shadow_animation').delay(500).queue(function () {
$(this).removeClass("o_shadow_animation").dequeue();
}).delay(2000).queue(function () {
$(this).removeClass("o_red_highlight").dequeue();
});
return new Promise(function (resolve, reject) {
var $imgtodrag = $elem.find('img').eq(0);
if ($imgtodrag.length) {
var $imgclone = $imgtodrag.clone()
.offset({
top: $imgtodrag.offset().top,
left: $imgtodrag.offset().left
})
.addClass('o_website_sale_animate')
.appendTo(document.body)
.css({
// Keep the same size on cloned img.
width: $imgtodrag.width(),
height: $imgtodrag.height(),
})
.animate({
top: 100,
left: 1400,
width: 75,
height: 75,
}, 1000, 'easeInOutExpo');
$imgclone.animate({
width: 0,
height: 0,
}, function () {
resolve();
$(this).detach();
});
} else {
resolve();
}
});
}
/**
* Updates both navbar cart
* @param {Object} data
*/
function updateCartNavBar(data) {
var $qtyNavBar = $(".my_cart_quantity");
_.each($qtyNavBar, function (qty) {
var $qty = $(qty);
$qty.parents('li:first').removeClass('d-none');
$qty.addClass('o_mycart_zoom_animation').delay(300).queue(function () {
$(this).text(data.cart_quantity);
$(this).removeClass("o_mycart_zoom_animation").dequeue();
});
});
$(".js_cart_lines").first().before(data['website_sale.cart_lines']).end().remove();
$(".js_cart_summary").first().before(data['website_sale.short_cart_summary']).end().remove();
}
return {
animateClone: animateClone,
updateCartNavBar: updateCartNavBar,
cartHandlerMixin: cartHandlerMixin,
};
});

35
theme_classic_store/static/src/js/shop_sidebar.js

@ -0,0 +1,35 @@
/*
This JavaScript file defines a custom widget for the Classic Store theme.
The widget adds functionality to show or hide a product sidebar when a arrow is clicked.
*/
odoo.define('theme_classic_store', function (require) {
'use strict';
var publicWidget = require('web.public.widget');
publicWidget.registry.show = publicWidget.Widget.extend({
selector: '.product_sidebar',
events: {
'click .show_div': '_showDiv',
},
start: function () {
this._super.apply(this, arguments);
this._setupEventDelegation();
},
_setupEventDelegation: function () {
this.$el.on('click', '.fa-angle-down.dropdown-arrow', this._showDiv.bind(this));
},
_showDiv: function (ev) {
ev.preventDefault();
ev.stopPropagation();
var arrow = this.$(ev.currentTarget);
var div = arrow[0].parentElement.parentElement.nextElementSibling;
if (div.hasAttribute('hidden')) {
div.removeAttribute('hidden');
} else {
div.setAttribute('hidden', '');
}
},
});
return {
show: publicWidget.registry.show,
};
});

29
theme_classic_store/static/src/js/snippets_category.js

@ -0,0 +1,29 @@
odoo.define('theme_classic_store.categories', function(require){
'use strict';
var Animation = require('website.content.snippets.animation');
var ajax = require('web.ajax');
/**
* Defines an animation class for the categories element in the HTML document.
* Sends an AJAX request to the /classic_product_category URL using the ajax.jsonRpc
* method, and calls the 'call' method on the server-side. If the request is successful,
* clears the current content of the categories element using the empty method on the
* self.$target jQuery object, and appends the returned data to the element using the
* append method. The selector property defines the CSS selector for the element that
* the animation will be applied to.
*
* @module theme_classic_store.price_filter
* @extends Animation.Class
*/
Animation.registry.categories = Animation.Class.extend({
selector : '.categories',
start: function(){
var self = this;
ajax.jsonRpc('/classic_product_category', 'call', {})
.then(function (data) {
if(data){
self.$target.empty().append(data);
}
});
}
});
});

76
theme_classic_store/static/src/js/snippets_trending.js

@ -0,0 +1,76 @@
odoo.define('theme_classic_store.trending', function(require){
'use strict';
var Animation = require('website.content.snippets.animation');
var ajax = require('web.ajax');
/**
* Defines an animation class for the trending element in the HTML document.
* Sends an AJAX request to the /classic_product_trending URL using the ajax.jsonRpc
* method, and calls the 'call' method on the server-side. If the request is successful,
* clears the current content of the trending element using the empty method on the
* self.$target jQuery object, and appends the returned data to the element using the
* append method. Initializes the owl carousel on the .owl-carousel element inside the
* trending element with the specified options. The selector property defines the CSS
* selector for the element that the animation will be applied to.
*
* @module theme_classic_store.price_filter
* @extends Animation.Class
*/
Animation.registry.trending = Animation.Class.extend({
selector : '.trending',
start: function(){
var self = this;
ajax.jsonRpc('/classic_product_trending', 'call', {})
.then(function (data) {
if(data){
self.$target.empty().append(data);
self.product_carousel();
}
});
},
product_carousel: function (autoplay=false, items=4, slider_timing=5000) {
var self= this;
$(".owl-carousel").owlCarousel(
{
// animateOut: 'slideOutDown',
// animateIn: 'flipInX',
items: 3,
loop: true,
margin: 30,
stagePadding: 30,
smartSpeed: 450,
autoplay: true,
autoPlaySpeed: 1000,
autoPlayTimeout: 1000,
autoplayHoverPause: true,
onInitialized: self.counter(),
dots: true,
nav: true,
responsiveClass: true,
responsive: {
0: {
items: 1,
nav: true
},
600: {
items: 2,
nav: false
},
1000: {
items: 3,
nav: true,
loop: true
}
}
}
);
},
counter: function() {
var buttons = $('.owl-dots button');
buttons.each(function (index, item) {
$(item).find('span').text(index + 1);
});
}
});
});

54
theme_classic_store/views/classic_store_config_views.xml

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- This record defines an action window for the "Classic Store Configuration" page.
It sets the name of the page, the model it will use, and the view mode (tree and form). -->
<record id="classic_store_config_action" model="ir.actions.act_window">
<field name="name">Classic Store Configuration</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">classic_store.config</field>
<field name="view_mode">tree,form</field>
</record>
<!-- This record defines the tree view for the "Classic Store Configuration" page. It sets the name, model,
and arch of the view, which includes a single field for the name. -->
<record id="classic_store_config_tree" model="ir.ui.view">
<field name="name">classic_store.config.tree</field>
<field name="model">classic_store.config</field>
<field name="arch" type="xml">
<tree create="0" delete="false">
<field name="name"/>
</tree>
</field>
</record>
<!-- This record defines the form view for the "Classic Store Configuration" page.
It sets the name, model, and arch of the view, which includes two groups: one for the price filter
with a single field for the max price, and one for trending products with a many2many_tags widget
for the trending product IDs. -->
<record id="classic_store_config_form" model="ir.ui.view">
<field name="name">classic_store.config.form</field>
<field name="model">classic_store.config</field>
<field name="arch" type="xml">
<form create="0" delete="false">
<sheet>
<field name="name" invisible="1"/>
<group>
<group string="Price Filter">
<field name="max_price" required="1"/>
</group>
</group>
<group>
<group string="Trending Products">
<field name="trending_product_ids"
widget="many2many_tags"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<!-- Menu item for the "Classic Store" configuration page, which appears under the
"Website" global configuration menu. It sets the name, parent, sequence, and action for the menu item. -->
<menuitem id="classic_store_config_menu" name="Classic Store"
parent="website.menu_website_global_configuration"
sequence="15"
action="classic_store_config_action"/>
</odoo>

35
theme_classic_store/views/http_routing_templates.xml

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<template id="classic_store_error_404" name="Classic Store 404"
inherit_id="http_routing.404" customize_show="True">
<!-- It template inherits from "http_routing.404" and customizes it to replace the content of a div element
with a custom error message and image. -->
<xpath expr="//div[@class='container']" position="replace">
<section class="form">
<div class="container">
<div class="error">
<div class="row">
<div class="col-6 mx-auto">
<div class="message">
<div class="wrapper_img">
<img src="theme_classic_store/static/src/images/404/404.png"/>
</div>
<div class="oops">Oops</div>
<p>
Something went wrong,we can't find the
page that you are looking for :(But
there is a
lot more for you!
</p>
<a href="/" class="btn btn-primary">
Go Home
</a>
</div>
</div>
</div>
</div>
</div>
</section>
</xpath>
</template>
</odoo>

55
theme_classic_store/views/snippets/classic_store_aboutus_templates.xml

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<template id="s_classic_store_about" name="About Us">
<!-- This XML code defines a template for the "About Us" page of a website.
Includes sections for a banner and an introduction with text and an image. -->
<section class="banner_about">
<div class="container">
<h3>About Us</h3>
</div>
</section>
<section class="about">
<div class="container">
<div class="row">
<div class="col-lg-6 col-12">
<div class="about_img">
<img src="/theme_classic_store/static/src/images/about/about.jpg"/>
</div>
</div>
<div class="col-lg-6 col-12 mt-md-5">
<div class="about_left">
<h4>Introduction</h4>
<p>
Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc est justo, aliquam nec
tempor fermentum, commodo et libero.
Quisque et rutrum arcu. Vivamus dictum
tincidunt
magna id euismod. Nam sollicitudin mi quis orci
lobortis feugiat.
</p>
<h4>How Can We Help</h4>
<p>
Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc est justo, aliquam nec
tempor fermentum, commodo et libero. Quisque et
rutrum arcu. Vivamus dictum tincidunt magna id
euismod. Nam sollicitudin mi quis orci lobortis
feugiat. Lorem ipsum dolor sit amet,
consectetur
adipiscing elit. Nunc est justo, aliquam nec
tempor fermentum, commodo et libero. Quisque et
rutrum arcu. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Nunc est justo,
aliquam nec tempor fermentum, commodo et l
ibero. Quisque et rutrum arcu. Vivamus dictum
tincidunt magna id euismod. Nam sollicitudin mi
quis orci lobortis feugiat.
</p>
</div>
</div>
</div>
</div>
</section>
</template>
</odoo>

43
theme_classic_store/views/snippets/classic_store_banner_templates.xml

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<template id="s_classic_store_banner" name="Banner">
<!-- the template defines a banner section with a card element displaying a message
and a popular categories section with clickable buttons. -->
<section class="banner">
<div class="container">
<div class="card">
<div class="card-body">
<h5 class="card-title">Buy &amp; Sells Near You</h5>
<p class="card-text">Join the millions who buy and sell
from each other
<br/>
everyday in local communities around the world
</p>
</div>
</div>
<div class="populor text-center">
<h4>POPULAR CATEGORIES</h4>
<div class="populor-buttons">
<a href="" class="btn btn-pop">
<span class="fa fa-bed"/>
Hotel
</a>
<a href="" class="btn btn-pop"><span
class="fab fa-grav"/>Fitness
</a>
<a href="" class="btn btn-pop"><span
class="fas fa-car-alt"/>Car
</a>
<a href="" class="btn btn-pop"><span
class="fab fa-android"/>Gadgets
</a>
<a href="" class="btn btn-pop"><span
class="fa fa-coffee"/>Cafe
</a>
</div>
</div>
</div>
<div class="oe_structure"/>
</section>
</template>
</odoo>

53
theme_classic_store/views/snippets/classic_store_categories_templates.xml

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<template id="s_classic_store_categories" name="Categories">
<!-- The template renders a section for displaying product categories
in an Odoo e-commerce store. It uses a loop to iterate over the main categories and their child
categories to generate the necessary HTML. -->
<section class="categories">
<div class="container">
<div class="top_heading2 text-center">
<h3 class="">All Categories</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing
elit.
Quas, magnam.
</p>
<div class="bottom_line"/>
</div>
<div class="wrapper">
<div class="row justify-content-center">
<t t-foreach="product_categories_main" t-as="category">
<div class="col-lg-3 col-md-6 col-12 p-3">
<div class="c_wrapper"
style="height: 360px; overflow-x: auto;">
<div class="categories_single p-1">
<div class="c_img">
<img t-attf-src="/web/image?model=product.public.category&amp;field=image_1920&amp;id=#{category.id}"
class="img img-fluid"/>
</div>
<h5>
<t t-esc="category.name"/>
</h5>
</div>
<ul class="categories_list">
<t t-foreach="category.child_id"
t-as="child">
<li>
<a t-attf-href="/shop/category/#{slug(child)}">
<t t-esc="child.name"/>
</a>
<span>
<t t-esc="counter[child]"/>
</span>
</li>
</t>
</ul>
</div>
</div>
</t>
</div>
</div>
</div>
</section>
</template>
</odoo>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save