Browse Source

Dec 5: [ADD] Initial Commit 'theme_boec'

pull/221/merge
AjmalCybro 2 years ago
parent
commit
9cc133f5ba
  1. 24
      theme_boec/__init__.py
  2. 89
      theme_boec/__manifest__.py
  3. 26
      theme_boec/controllers/__init__.py
  4. 242
      theme_boec/controllers/brand_filter_controller.py
  5. 41
      theme_boec/controllers/deal_week.py
  6. 151
      theme_boec/controllers/price_filter.py
  7. 42
      theme_boec/controllers/product_tab.py
  8. 25
      theme_boec/data/boec_config.xml
  9. 9
      theme_boec/data/boec_config_data.xml
  10. 48
      theme_boec/data/brand_filter.xml
  11. 15
      theme_boec/data/brand_inherit.xml
  12. 15
      theme_boec/data/hot_deals_button.xml
  13. 24
      theme_boec/models/__init__.py
  14. 48
      theme_boec/models/brand_filter_model.py
  15. 73
      theme_boec/models/theme_boec.py
  16. 3
      theme_boec/security/ir.model.access.csv
  17. BIN
      theme_boec/static/description/banner.png
  18. BIN
      theme_boec/static/description/icon.png
  19. BIN
      theme_boec/static/description/images/1.jpg
  20. BIN
      theme_boec/static/description/images/2.jpg
  21. BIN
      theme_boec/static/description/images/3.jpg
  22. BIN
      theme_boec/static/description/images/4.jpg
  23. BIN
      theme_boec/static/description/images/5.jpg
  24. BIN
      theme_boec/static/description/images/6.jpg
  25. BIN
      theme_boec/static/description/images/Cybrosys.png
  26. BIN
      theme_boec/static/description/images/boec_deal.png
  27. BIN
      theme_boec/static/description/images/boec_hot_sales.png
  28. BIN
      theme_boec/static/description/images/cybro-logo-oca-no-text.png
  29. BIN
      theme_boec/static/description/images/cybro-logo-oca.png
  30. BIN
      theme_boec/static/description/images/demo-1.jpg
  31. BIN
      theme_boec/static/description/images/demo-2.jpg
  32. BIN
      theme_boec/static/description/images/demo-3.jpg
  33. BIN
      theme_boec/static/description/images/demo-4.jpg
  34. BIN
      theme_boec/static/description/images/demo-5.jpg
  35. BIN
      theme_boec/static/description/images/hero.png
  36. BIN
      theme_boec/static/description/images/laptop-screenshots.jpg
  37. BIN
      theme_boec/static/description/images/new_arrivals.jpg
  38. BIN
      theme_boec/static/description/images/phone-screenshots.jpg
  39. 360
      theme_boec/static/description/index.html
  40. BIN
      theme_boec/static/description/theme_screenshot.png
  41. 183
      theme_boec/static/src/css/owl_carousel_min.css
  42. 6
      theme_boec/static/src/css/owl_theme_default_min.css
  43. 6054
      theme_boec/static/src/css/style.css
  44. 38
      theme_boec/static/src/css/style.css.map
  45. 122
      theme_boec/static/src/css/style.scss
  46. BIN
      theme_boec/static/src/images/about/about.jpg
  47. BIN
      theme_boec/static/src/images/about/client/1.png
  48. BIN
      theme_boec/static/src/images/about/client/2.png
  49. BIN
      theme_boec/static/src/images/about/client/3.png
  50. BIN
      theme_boec/static/src/images/about/client/4.png
  51. BIN
      theme_boec/static/src/images/about/client/5.png
  52. BIN
      theme_boec/static/src/images/about/client/6.png
  53. BIN
      theme_boec/static/src/images/about/client/7.png
  54. BIN
      theme_boec/static/src/images/about/client/8.png
  55. BIN
      theme_boec/static/src/images/about/p-img.jpg
  56. BIN
      theme_boec/static/src/images/about/team/t-1 (1).jpg
  57. BIN
      theme_boec/static/src/images/about/team/t-1 (2).jpg
  58. BIN
      theme_boec/static/src/images/about/team/t-1 (3).jpg
  59. BIN
      theme_boec/static/src/images/about/team/t-1 (4).jpg
  60. BIN
      theme_boec/static/src/images/about/test-bg.jpg
  61. BIN
      theme_boec/static/src/images/banner/banner1.jpg
  62. BIN
      theme_boec/static/src/images/banner/banner2.jpg
  63. BIN
      theme_boec/static/src/images/banner/banner3.jpg
  64. BIN
      theme_boec/static/src/images/banner/blog-bg.jpg
  65. BIN
      theme_boec/static/src/images/blog/1.jpg
  66. BIN
      theme_boec/static/src/images/blog/2.jpg
  67. BIN
      theme_boec/static/src/images/blog/3.jpg
  68. BIN
      theme_boec/static/src/images/blog/4.jpg
  69. BIN
      theme_boec/static/src/images/blog/5.jpg
  70. BIN
      theme_boec/static/src/images/blog/6.jpg
  71. BIN
      theme_boec/static/src/images/blog/7.jpg
  72. BIN
      theme_boec/static/src/images/blog/8.jpg
  73. BIN
      theme_boec/static/src/images/blog/9.jpg
  74. BIN
      theme_boec/static/src/images/blog/blog-detail.jpg
  75. BIN
      theme_boec/static/src/images/carty/j-kelly-brito-dDLiE0fxEXk-unsplash.jpg
  76. BIN
      theme_boec/static/src/images/carty/kris-gerhard-0BKZfcamvGg-unsplash.jpg
  77. BIN
      theme_boec/static/src/images/carty/w.png
  78. BIN
      theme_boec/static/src/images/deal/deal.jpg
  79. BIN
      theme_boec/static/src/images/deal/deal.png
  80. BIN
      theme_boec/static/src/images/demo-product/dp1.jpg
  81. BIN
      theme_boec/static/src/images/demo-product/dp111.jpg
  82. BIN
      theme_boec/static/src/images/demo-product/dp2.jpg
  83. BIN
      theme_boec/static/src/images/demo-product/dp3.jpg
  84. BIN
      theme_boec/static/src/images/demo-product/light-up-sneakers-women.jpg
  85. BIN
      theme_boec/static/src/images/icons/master.png
  86. BIN
      theme_boec/static/src/images/icons/menu.png
  87. BIN
      theme_boec/static/src/images/icons/payment.png
  88. 38
      theme_boec/static/src/images/icons/rate-star-button.svg
  89. BIN
      theme_boec/static/src/images/icons/visa.png
  90. BIN
      theme_boec/static/src/images/insta/1 (1).jpg
  91. BIN
      theme_boec/static/src/images/insta/1 (2).jpg
  92. BIN
      theme_boec/static/src/images/insta/1 (3).jpg
  93. BIN
      theme_boec/static/src/images/insta/1 (4).jpg
  94. BIN
      theme_boec/static/src/images/insta/1 (5).jpg
  95. BIN
      theme_boec/static/src/images/insta/1 (6).jpg
  96. BIN
      theme_boec/static/src/images/insta/2 (1).jpg
  97. BIN
      theme_boec/static/src/images/insta/2 (2).jpg
  98. BIN
      theme_boec/static/src/images/insta/2 (3).jpg
  99. BIN
      theme_boec/static/src/images/logo/logo.png
  100. BIN
      theme_boec/static/src/images/product-preview/1 (1).jpg

24
theme_boec/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 models
from . import controllers

89
theme_boec/__manifest__.py

@ -0,0 +1,89 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 Boec',
'description': 'Theme Boec is an attractive and modern eCommerce Website theme',
'summary': 'Theme Boec is a new kind of Theme. '
'The theme is a very user-friendly and is suitable for your eCommerce website with blog.',
'category': 'Theme/eCommerce',
'version': '16.0.1.0.0',
'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',
'website_sale_comparison', 'website'],
'data': [
'data/boec_config.xml',
'data/boec_config_data.xml',
'data/brand_filter.xml',
'data/brand_inherit.xml',
'data/hot_deals_button.xml',
'security/ir.model.access.csv',
'views/about.xml',
'views/blog.xml',
'views/blog_preview.xml',
'views/cart.xml',
'views/contact_us.xml',
'views/footer.xml',
'views/header.xml',
'views/layouts.xml',
'views/pages_top.xml',
'views/product_view.xml',
'views/shop.xml',
'views/sidebar_shop.xml',
'views/snippets/banner.xml',
'views/snippets/blog_latest.xml',
'views/snippets/deal_week.xml',
'views/snippets/demo_product.xml',
'views/snippets/insta_feed.xml',
'views/snippets/product_tab.xml',
'views/snippets/product_tab_demo.xml',
],
'assets': {
'web.assets_frontend': [
('replace', 'website_sale/static/src/js/website_sale_utils.js',
'theme_boec/static/src/js/sale_utils.js'),
"/theme_boec/static/src/css/style.css",
"/theme_boec/static/src/css/style.css.map",
"/theme_boec/static/src/css/style.scss",
"/theme_boec/static/src/css/owl_carousel_min.css",
"/theme_boec/static/src/css/owl_theme_default_min.css",
"/theme_boec/static/src/js/owl.carousel.js",
"/theme_boec/static/src/js/owl.carousel.min.js",
"/theme_boec/static/src/js/jquery.countdown.min.js",
"/theme_boec/static/src/js/deal_week.js",
"/theme_boec/static/src/js/product_tab.js",
"/theme_boec/static/src/js/custom.js",
"https://fonts.googleapis.com/css2?family=Karla:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,500&amp;family=Montserrat&amp;display=swap"
],
},
'images': [
'static/description/banner.png',
'static/description/theme_screenshot.png',
],
'license': 'LGPL-3',
'installable': True,
'application': False,
'auto_install': False,
}

26
theme_boec/controllers/__init__.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 brand_filter_controller
from . import deal_week
from . import price_filter
from . import product_tab

242
theme_boec/controllers/brand_filter_controller.py

@ -0,0 +1,242 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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.addons.website_sale.controllers.main import TableCompute, WebsiteSale
from datetime import datetime
from werkzeug.exceptions import Forbidden, NotFound
from odoo import fields, http, SUPERUSER_ID, tools, _
from odoo.http import request
from odoo.addons.http_routing.models.ir_http import slug
from odoo.addons.website.controllers.main import QueryURL
from odoo.tools import lazy
from odoo.addons.website.models.ir_http import sitemap_qs2dom
class ProductBrand(WebsiteSale):
def sitemap_shop(env, rule, qs):
if not qs or qs.lower() in '/shop':
yield {'loc': '/shop'}
Category = env['product.public.category']
dom = sitemap_qs2dom(qs, '/shop/category', Category._rec_name)
dom += env['website'].get_current_website().website_domain()
for cat in Category.search(dom):
loc = '/shop/category/%s' % slug(cat)
if not qs or qs.lower() in loc:
yield {'loc': loc}
@http.route([
'/shop',
'/shop/page/<int:page>',
'/shop/category/<model("product.public.category"):category>',
'/shop/category/<model("product.public.category"):category>/page/<int:page>',
'/shop/brand/<model("product.brand"):brand>'
], type='http', auth="public", website=True, sitemap=sitemap_shop)
def shop(self, brand=None, page=0, category=None, search='', min_price=0.0, max_price=0.0, ppg=False, **post):
add_qty = int(post.get('add_qty', 1))
try:
min_price = float(min_price)
except ValueError:
min_price = 0
try:
max_price = float(max_price)
except ValueError:
max_price = 0
Category = request.env['product.public.category']
if category:
category = Category.search([('id', '=', int(category))], limit=1)
if not category or not category.can_access_from_current_website():
raise NotFound()
else:
category = Category
website = request.env['website'].get_current_website()
if ppg:
try:
ppg = int(ppg)
post['ppg'] = ppg
except ValueError:
ppg = False
if not ppg:
ppg = website.shop_ppg or 20
ppr = website.shop_ppr or 4
attrib_list = request.httprequest.args.getlist('attrib')
attrib_values = [[int(x) for x in v.split("-")] for v in attrib_list if v]
attributes_ids = {v[0] for v in attrib_values}
attrib_set = {v[1] for v in attrib_values}
if not brand:
keep = QueryURL('/shop',
**self._shop_get_query_url_kwargs(category and int(category), search, min_price, max_price,
**post))
else:
keep = QueryURL('shop/brand')
now = datetime.timestamp(datetime.now())
pricelist = request.env['product.pricelist'].browse(request.session.get('website_sale_current_pl'))
if not pricelist or request.session.get('website_sale_pricelist_time',
0) < now - 60 * 60: # test: 1 hour in session
pricelist = website.get_current_pricelist()
request.session['website_sale_pricelist_time'] = now
request.session['website_sale_current_pl'] = pricelist.id
request.update_context(pricelist=pricelist.id, partner=request.env.user.partner_id)
filter_by_price_enabled = website.is_view_active('website_sale.filter_products_price')
if filter_by_price_enabled:
company_currency = website.company_id.currency_id
conversion_rate = request.env['res.currency']._get_conversion_rate(
company_currency, pricelist.currency_id, request.website.company_id, fields.Date.today())
else:
conversion_rate = 1
url = "/shop"
if search:
post["search"] = search
if attrib_list:
post['attrib'] = attrib_list
options = self._get_search_options(
category=category,
attrib_values=attrib_values,
pricelist=pricelist,
min_price=min_price,
max_price=max_price,
conversion_rate=conversion_rate,
**post
)
fuzzy_search_term, product_count, search_product = self._shop_lookup_products(attrib_set, options, post, search,
website)
filter_by_price_enabled = website.is_view_active('website_sale.filter_products_price')
if filter_by_price_enabled:
# TODO Find an alternative way to obtain the domain through the search metadata.
Product = request.env['product.template'].with_context(bin_size=True)
domain = self._get_search_domain(search, category, attrib_values)
# This is ~4 times more efficient than a search for the cheapest and most expensive products
from_clause, where_clause, where_params = Product._where_calc(domain).get_sql()
query = f"""
SELECT COALESCE(MIN(list_price), 0) * {conversion_rate}, COALESCE(MAX(list_price), 0) * {conversion_rate}
FROM {from_clause}
WHERE {where_clause}
"""
request.env.cr.execute(query, where_params)
available_min_price, available_max_price = request.env.cr.fetchone()
if min_price or max_price:
# The if/else condition in the min_price / max_price value assignment
# tackles the case where we switch to a list of products with different
# available min / max prices than the ones set in the previous page.
# In order to have logical results and not yield empty product lists, the
# price filter is set to their respective available prices when the specified
# min exceeds the max, and / or the specified max is lower than the available min.
if min_price:
min_price = min_price if min_price <= available_max_price else available_min_price
post['min_price'] = min_price
if max_price:
max_price = max_price if max_price >= available_min_price else available_max_price
post['max_price'] = max_price
website_domain = website.website_domain()
categs_domain = [('parent_id', '=', False)] + website_domain
if search:
search_categories = Category.search(
[('product_tmpl_ids', 'in', search_product.ids)] + website_domain
).parents_and_self
categs_domain.append(('id', 'in', search_categories.ids))
else:
search_categories = Category
categs = lazy(lambda: Category.search(categs_domain))
if category:
url = "/shop/category/%s" % slug(category)
pager = website.pager(url=url, total=product_count, page=page, step=ppg, scope=7, url_args=post)
offset = pager['offset']
if not brand:
products = search_product[offset:offset + ppg]
else:
products = request.env['product.template'].sudo().search([('brand_id', '=', brand.id),
('website_published', '=', True)],
order="id desc",
offset=pager['offset'])
ProductAttribute = request.env['product.attribute']
if products:
# get all products without limit
attributes = lazy(lambda: ProductAttribute.search([
('product_tmpl_ids', 'in', search_product.ids),
('visibility', '=', 'visible'),
]))
else:
attributes = lazy(lambda: ProductAttribute.browse(attributes_ids))
layout_mode = request.session.get('website_sale_shop_layout_mode')
if not layout_mode:
if website.viewref('website_sale.products_list_view').active:
layout_mode = 'list'
else:
layout_mode = 'grid'
request.session['website_sale_shop_layout_mode'] = layout_mode
products_prices = lazy(lambda: products._get_sales_prices(pricelist))
values = {
'search': fuzzy_search_term or search,
'original_search': fuzzy_search_term and search,
'order': post.get('order', ''),
'category': category,
'attrib_values': attrib_values,
'attrib_set': attrib_set,
'pager': pager,
'pricelist': pricelist,
'add_qty': add_qty,
'products': products,
'search_count': product_count, # common for all searchbox
'bins': lazy(lambda: TableCompute().process(products, ppg, ppr)),
'ppg': ppg,
'ppr': ppr,
'categories': categs,
'attributes': attributes,
'keep': keep,
'search_categories_ids': search_categories.ids,
'layout_mode': layout_mode,
'products_prices': products_prices,
'get_product_prices': lambda product: lazy(lambda: products_prices[product.id]),
'float_round': tools.float_round,
}
if filter_by_price_enabled:
values['min_price'] = min_price or available_min_price
values['max_price'] = max_price or available_max_price
values['available_min_price'] = tools.float_round(available_min_price, 2)
values['available_max_price'] = tools.float_round(available_max_price, 2)
if category:
values['main_object'] = category
values.update(self._get_additional_shop_values(values))
return request.render("website_sale.products", values)

41
theme_boec/controllers/deal_week.py

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 http
from odoo.http import request
class DealWeek(http.Controller):
@http.route('/get_product', auth='public', type='json', website=True)
def get_products(self, **kwargs):
boec_configuration = request.env.ref('theme_boec.boec_config_data')
product_id = boec_configuration.deal_week_product_id
values = {'product_id': product_id}
response = http.Response(template='theme_boec.deal_week', qcontext=values)
return response.render()
@http.route('/get_countdown', auth='public', type='json', website=True)
def get_countdown(self, **kwargs):
boec_configuration = request.env.ref('theme_boec.boec_config_data')
end_date = boec_configuration.date_end
return end_date

151
theme_boec/controllers/price_filter.py

@ -0,0 +1,151 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 werkzeug.exceptions import NotFound
# from odoo.addons.http_routing.models.ir_http import slug
# from odoo.addons.website.controllers.main import QueryURL
# from odoo.addons.website_sale.controllers.main import TableCompute, WebsiteSale
# from odoo import http
# from odoo.http import request
#
#
# class PriceFilter(WebsiteSale):
#
# @http.route()
# def shop(self, page=0, category=None, search='', ppg=False, **post):
# """Override WebsiteSale shop for Price Filter"""
# maximum = minimum = 0
# add_qty = int(post.get('add_qty', 1))
# Category = request.env['product.public.category']
# if category:
# category = Category.search([('id', '=', int(category))], limit=1)
# if not category or not category.can_access_from_current_website():
# raise NotFound()
# else:
# category = Category
#
# if ppg:
# try:
# ppg = int(ppg)
# post['ppg'] = ppg
# except ValueError:
# ppg = False
# if not ppg:
# ppg = request.env['website'].get_current_website().shop_ppg or 20
#
# ppr = request.env['website'].get_current_website().shop_ppr or 4
#
# product_ids = request.env['product.template'].search(['&', ('sale_ok', '=', True), ('active', '=', True)])
#
# if product_ids and product_ids.ids:
# request.cr.execute(
# 'select min(list_price),max(list_price) from product_template where id in %s',
# (tuple(product_ids.ids),))
# list_prices = request.cr.fetchall()
#
# minimum = list_prices[0][0]
# maximum = list_prices[0][1]
#
# attrib_list = request.httprequest.args.getlist('attrib')
# attrib_values = [[int(x) for x in v.split("-")] for v in attrib_list if v]
# attributes_ids = {v[0] for v in attrib_values}
# attrib_set = {v[1] for v in attrib_values}
#
# domain = self._get_search_domain(search, category, attrib_values)
#
# if post.get('minimum') and post.get('maximum'):
# domain = domain + [('list_price', '>=', float(post.get('minimum'))),
# ('list_price', '<=', float(post.get('maximum')))]
#
# keep = QueryURL('/shop', category=category and int(category), search=search, attrib=attrib_list,
# order=post.get('order'), minimum=post.get('minimum'), maximum=post.get('maximum'))
#
# pricelist_context, pricelist = self._get_pricelist_context()
#
# request.context = dict(request.context, pricelist=pricelist.id, partner=request.env.user.partner_id)
#
# url = "/shop"
# if search:
# post["search"] = search
# if attrib_list:
# post['attrib'] = attrib_list
#
# Product = request.env['product.template'].with_context(bin_size=True)
#
# search_product = Product.search(domain, order=self._get_search_order(post))
# website_domain = request.website.website_domain()
# categs_domain = [('parent_id', '=', False)] + website_domain
# if search:
# search_categories = Category.search(
# [('product_tmpl_ids', 'in', search_product.ids)] + website_domain).parents_and_self
# categs_domain.append(('id', 'in', search_categories.ids))
# else:
# search_categories = Category
# categs = Category.search(categs_domain)
#
# if category:
# url = "/shop/category/%s" % slug(category)
#
# product_count = len(search_product)
# pager = request.website.pager(url=url, total=product_count, page=page, step=ppg, scope=7, url_args=post)
# offset = pager['offset']
# products = search_product[offset: offset + ppg]
#
# ProductAttribute = request.env['product.attribute']
# if products:
# # get all products without limit
# attributes = ProductAttribute.search([('product_tmpl_ids', 'in', search_product.ids)])
# else:
# attributes = ProductAttribute.browse(attributes_ids)
#
# layout_mode = request.session.get('website_sale_shop_layout_mode')
# if not layout_mode:
# if request.website.viewref('website_sale.products_list_view').active:
# layout_mode = 'list'
# else:
# layout_mode = 'grid'
#
# values = {
# 'search': search,
# 'category': category,
# 'attrib_values': attrib_values,
# 'attrib_set': attrib_set,
# 'pager': pager,
# 'pricelist': pricelist,
# 'add_qty': add_qty,
# 'products': products,
# 'search_count': product_count, # common for all searchbox
# 'bins': TableCompute().process(products, ppg, ppr),
# 'ppg': ppg,
# 'ppr': ppr,
# 'categories': categs,
# 'attributes': attributes,
# 'keep': keep,
# 'search_categories_ids': search_categories.ids,
# 'layout_mode': layout_mode,
# 'minimum': minimum,
# 'maximum': maximum,
#
# }
# if category:
# values['main_object'] = category
# return request.render("website_sale.products", values)

42
theme_boec/controllers/product_tab.py

@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 http
from odoo.http import request
class WebsiteProduct(http.Controller):
@http.route('/get_product_tab', auth="public", type='json', website=True)
def get_product_tab(self):
new_arrivals = request.env['product.template'].sudo().search([('website_published', '=', True)],
order='create_date desc', limit=12)
hot_deals = request.env['product.template'].sudo().search([('website_published', '=', True),
('hot_deals', '=', True)], limit=12)
values = {
'new_arrivals': new_arrivals,
'hot_deals': hot_deals
}
response = http.Response(template='theme_boec.product_tab', qcontext=values)
return response.render()

25
theme_boec/data/boec_config.xml

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data noupdate="1">
<record id="boec_config_action" model="ir.actions.act_window">
<field name="name">Boec Config</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">boec.config</field>
<field name="view_mode">tree,form</field>
</record>
<record id="boec_config_tree" model="ir.ui.view">
<field name="name">boec.config.tree</field>
<field name="model">boec.config</field>
<field name="arch" type="xml">
<tree create="0" delete="false">
<field name="name"/>
</tree>
</field>
</record>
<menuitem id="boec_config_menu" name="Boec Configuration"
parent="website.menu_website_global_configuration"
sequence="15"
action="boec_config_action"/>
</data>
</odoo>

9
theme_boec/data/boec_config_data.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data noupdate="1">
<record id="boec_config_data" model="boec.config">
<field name="name">Boec Config</field>
<!-- <field name="max_price">100000</field>-->
</record>
</data>
</odoo>

48
theme_boec/data/brand_filter.xml

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!--Product Brand views-->
<record model="ir.ui.view" id="product_brand_tree_view">
<field name="name">Product Brand</field>
<field name="model">product.brand</field>
<field name="arch" type="xml">
<tree string="Products Brands">
<field name="brand_name"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="product_brand_from_view">
<field name="name">Product Brand</field>
<field name="model">product.brand</field>
<field name="arch" type="xml">
<form string="Products Brands">
<sheet>
<group>
<group>
<field name="brand_name"/>
<field name="sequence_no"/>
<field name="parent_id"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_product_brand" model="ir.actions.act_window">
<field name="name">Product Brand</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">product.brand</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">Create a new record!</p>
</field>
</record>
<!--Adds a menu under configuration in website-->
<menuitem id="menu_product_brand"
name="Product Brand"
parent="website_sale.menu_ecommerce_settings"
action="action_product_brand"/>
</data>
</odoo>

15
theme_boec/data/brand_inherit.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record id="view_product_brand_inherited" model="ir.ui.view">
<field name="name">Brand view</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<field name="arch" type="xml">
<field name="website_sequence" position="after">
<field name="brand_id"/>
</field>
</field>
</record>
</data>
</odoo>

15
theme_boec/data/hot_deals_button.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id="hot_deals" model="ir.ui.view">
<field name="name">Hot Deals</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_only_form_view"/>
<field name="arch" type="xml">
<field name="website_ribbon_id" position="after">
<field name="hot_deals" string="Hot Sale"/>
</field>
</field>
</record>
</data>
</odoo>

24
theme_boec/models/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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_boec
from . import brand_filter_model

48
theme_boec/models/brand_filter_model.py

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 ProductBrand(models.Model):
_name = 'product.brand'
_description = "Product Brand"
_rec_name = 'brand_name'
brand_name = fields.Char(required=True)
sequence_no = fields.Integer(string="Sequence no")
parent_id = fields.Many2one('product.brand', string='Parent Brand',
index=True)
class DiscountPrizeTag(models.Model):
_inherit = 'product.template'
brand_id = fields.Many2one('product.brand', string="Product Brand")
class Website(models.Model):
_inherit = "website"
def get_brands(self):
brand = self.env['product.brand'].search([])
print('brand', brand)
return brand

73
theme_boec/models/theme_boec.py

@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 BoecConfig(models.Model):
_name = 'boec.config'
name = fields.Char('Name')
deal_week_product_id = fields.Many2one('product.product', domain=[('is_published', '=', True)],
string='Deal of the Week Product')
date_end = fields.Datetime(string='Counter End Date')
# max_price = fields.Integer(string="Maximum Price", default=10000)
class ThemeBoec(models.AbstractModel):
_inherit = 'theme.utils'
def _theme_boec_post_copy(self, mod):
self.enable_view('theme_boec.boec_header')
#
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.alternative_products')
self.disable_view('website_sale.product_buy_now')
self.disable_view('website_sale.product_comment')
self.disable_view('website_sale.product_picture_magnify_both')
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')
self.disable_view('website_blog.opt_posts_loop_show_author')
self.disable_view('website_blog.opt_posts_loop_show_stats')
self.disable_view('website_blog.opt_posts_loop_show_stats')
self.disable_view('website_blog.opt_blog_list_view')
self.disable_view('website_blog.opt_blog_cards_design')
self.disable_view('website_blog.opt_blog_cover_post')
self.disable_view('website_blog.opt_blog_cover_post_fullwidth_design')
self.disable_view('website_blog.opt_blog_post_breadcrumb')
self.disable_view('website_blog.opt_blog_post_sidebar')
class ProductInherited(models.Model):
_inherit = "product.template"
hot_deals = fields.Boolean(string="Hot Sale")

3
theme_boec/security/ir.model.access.csv

@ -0,0 +1,3 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_product_brand_manager,product.brand,model_product_brand,base.group_user,1,1,1,1
access_theme_boec,boec.config,model_boec_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_product_brand_manager product.brand model_product_brand base.group_user 1 1 1 1
3 access_theme_boec boec.config model_boec_config base.group_user 1 1 1 1

BIN
theme_boec/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
theme_boec/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
theme_boec/static/description/images/boec_deal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 KiB

BIN
theme_boec/static/description/images/boec_hot_sales.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 KiB

BIN
theme_boec/static/description/images/cybro-logo-oca-no-text.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
theme_boec/static/description/images/demo-1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

BIN
theme_boec/static/description/images/demo-2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

BIN
theme_boec/static/description/images/demo-3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

BIN
theme_boec/static/description/images/demo-4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 KiB

BIN
theme_boec/static/description/images/demo-5.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 KiB

BIN
theme_boec/static/description/images/new_arrivals.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 KiB

360
theme_boec/static/description/index.html

@ -0,0 +1,360 @@
<div class="oe_styling_v8">
<!-- Hero Section -->
<div class="container pt-4 mt-4 rounded" style="background-color: #fff; 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 Boec</h1>
<p class="lead mb-4" style="max-width: 700px; margin: 0 auto;">
Theme Boec is a new kind of Theme. The theme is a very user-friendly and is suitable for your
eCommerce website with blog.
It is the most powerful, easy to use theme. Many custom designed snippets facilitates to add
better
user experience.
Contains Hot sales, New arrival and Deal of the week with Counter snippets that are configured
from
the backend.
It have instagram feed snippet and deal of the week snippet with counter.
It is a fully Responsive Theme with a premium design and attractive front-end theme.
it contains price filter and brand filter options by default and it easily configure from
backend.
This theme is a perfect choice for your online store you are looking for. This theme is fully
customized
the eCommerce website, shop view, custom categories view, product view, contact us page, cart,
blog,
blog preview...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">
It is easy to customize and use. Just drag and drop the building blocks to make attractive
webpages.
</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">
User friendly and modern looking theme makes your page more Stylish And Beautiful.
</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">
It is easy to customize and use. Just drag and drop the building blocks to make
attractive
webpages.Customizable building blocks in home page design helps you to edit them as per
needs. </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">
The shop display you products in a stylish way. It displaying 3 products in a row and it
will attract your customers.
Also the Category side are customized in collapsible style. Display high quality images
for
your products
</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: 100px;">
<h2>Overview</h2>
<p class="lead">
It is an attractive and modern eCommerce Website theme. It make your eCommerce website is
attractive.
Just drag & drop the building blocks you need to easily build your layout.
Theme Boec is a perfect choice for your online store you are looking for.
</p>
</div>
</div>
<!-- End of One Columns Section -->
<!-- New Arrivals Section -->
<div class="row p-4">
<div class="col-lg-6" style="padding-top: 100px;">
<h2>Hot Sales and New Arrivals</h2>
<p class="lead">
Hot sales and New arrivals are the snippets that are configured from the backend. You can easily add products
to the Hot sales. New arrivals are automatically taken the newly arrived products.
</p>
</div>
<div class="col-lg-6">
<img style="border-radius: 0.5em;" src="images/new_arrivals.jpg" width="90%" height="auto"
class="mb-4 shadow-sm" alt="Theme Screenshot">
</div>
</div>
<!-- End of New Section -->
<!-- Deal Section -->
<div class="row p-4">
<div class="col-lg-12 px-4">
<img class="shadow" style="border-radius: 0.5rem;" src="images/boec_deal.png" width="100%"
height="auto">
</div>
<div class="col-lg-12 my-4 d-flex flex-column justify-content-center align-items-center">
<h2 class="mt-4">Deal of the Week</h2>
<p class="lead text-center">
Deal of the week snippet have Counter for giving a premium look the deal of the week product and its counter
are easily configurable from the backend.
</p>
</div>
</div>
<!-- End of Deal Section -->
<!-- Three 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">Cart</h2>
<p class="lead text-center">
The cart display your products in a stylish way. it will display the all needed details
of
the product
</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 Preview</h2>
<p class="lead text-center">
Theme Boec have a fully customized blog preview with big cover image of the blog with
share
buttons.
</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">Product Preview</h2>
<p class="lead text-center">
It have a fully customized Product preview with full details of the product with an
attractive design.
</p>
</div>
</div>
</div>
<!-- End of Column 4 -->
</div>
<!-- End of Three Columns Section -->
<!--&lt;!&ndash; Video Section &ndash;&gt;-->
<!--<div class="row p-4">-->
<!-- <div class="col-lg-12 d-flex flex-column justify-content-center">-->
<!-- <h4 class="mt-4 text-center">Video</h4>-->
<!-- <hr style="border-width: 3px; border-color: #0984e3; width: 100px;">-->
<!-- </div>-->
<!-- <div class="col-lg-12 d-flex justify-content-center mt-4">-->
<!-- <div class="s_panel_video" data-video-id="peAp2Tx_XIs?rel=0" style="cursor:pointer;">-->
<!-- <img class="img-fluid s_tooltip_tabs_tooltip_image s_figure_link pb0"-->
<!-- src="images/your-video-cover.jpg" alt="Cybrosys Cover Video" style="max-width:100%;">-->
<!-- </div>-->
<!-- </div>-->
<!--</div>-->
<!--&lt;!&ndash; End of Video Section&ndash;&gt;-->
<!-- 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/demo-1.jpg" width="300px" height="auto">
<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/demo-2.jpg" width="300px" height="auto">
<h6 class="text-center my-3">Blog Preview</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/demo-3.jpg" width="300px" height="auto">
<h6 class="text-center my-3">Shop 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/demo-4.jpg" width="300px" height="auto">
<h6 class="text-center my-3">Blog Page</h6>
<hr style="border-width: 5px; border-color: #ffa801; 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/demo-5.jpg" width="300px" height="auto">
<h6 class="text-center my-3">About Page</h6>
<hr style="border-width: 5px; border-color: #3c40c6; 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>
</div>

BIN
theme_boec/static/description/theme_screenshot.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

183
theme_boec/static/src/css/owl_carousel_min.css

@ -0,0 +1,183 @@
/**
* 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 0.5s ease-in-out;
}
.owl-carousel .owl-item .owl-lazy {
opacity: 0;
transition: opacity 0.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%;
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 0.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 0.4s ease;
}
.owl-carousel .owl-video-frame {
position: relative;
z-index: 1;
height: 100%;
width: 100%;
}

6
theme_boec/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}

6054
theme_boec/static/src/css/style.css

File diff suppressed because it is too large

38
theme_boec/static/src/css/style.css.map

File diff suppressed because one or more lines are too long

122
theme_boec/static/src/css/style.scss

@ -0,0 +1,122 @@
body {
background-color: #f1f1f1;
padding-top: 20px;
}
.young-passion-gradient {
background: linear-gradient(40deg, #b12a5b, #ff8177);
}
.title h1 {
text-align: left;
color: #353535;
font-size: 35px;
}
.hero {
color: white;
padding: 39px 5px;
a button{
font-size: 17px;
color: #fff;
padding: 7px;
border-radius: 9px;
border: 2px solid #fff;
background-color: #ffffff00;
font-weight: 700;
margin: 30px 0;
}
#counters_hero {
display: flex;
justify-content: space-between;
vertical-align: middle;
height: 100%;
.cont {
margin: auto;
.label {
text-align: center;
height: 49px;
line-height: 1.4;
font-size: 14px;
}
}
}
}
.circle {
width: 99px;
height: 99px;
background: #cfcfcfb9;
border-radius: 78px;
margin: auto;
.counter {
font-size: 20px;
text-align: center;
color: white;
line-height: 4.6;
width: auto;
}
}
.description {
background-color: #e0e0e0;
padding: 15px;
color: #3c3c3c;
p {
font-weight: 700;
}
}
#counters_1,
#counters_2,
#counters_3 {
display: flex;
justify-content: space-around;
padding: 33px;
.counter {
font-size: 33px;
font-weight: 600;
color: #000;
width: auto;
}
p {
margin-bottom: 0;
width: 20px;
float: left;
color: #04884c;
font-size: 29px;
line-height: 1.6;
}
.text {
width: 100px;
text-align: center;
text-transform: uppercase;
font-size: 12px;
color: #616161;
}
.cont .row {
justify-content: center;
}
@media (max-width: 480px) {
.counter {
font-size: 25px;
}
p {
font-size: 24px;
line-height: 1.5;
}
.text{
font-size: 10px;
}
}
}
.distance{
margin: 88px 0 160px 0;
text-align: center;
font-size: 41px;
color: #04884c;
font-weight: 400;
}

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 KiB

BIN
theme_boec/static/src/images/about/client/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
theme_boec/static/src/images/about/client/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

BIN
theme_boec/static/src/images/about/client/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
theme_boec/static/src/images/about/client/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
theme_boec/static/src/images/about/client/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
theme_boec/static/src/images/about/client/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
theme_boec/static/src/images/about/client/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
theme_boec/static/src/images/about/client/8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

BIN
theme_boec/static/src/images/about/p-img.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
theme_boec/static/src/images/about/team/t-1 (1).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
theme_boec/static/src/images/about/team/t-1 (2).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

BIN
theme_boec/static/src/images/about/team/t-1 (3).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
theme_boec/static/src/images/about/team/t-1 (4).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 KiB

BIN
theme_boec/static/src/images/about/test-bg.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
theme_boec/static/src/images/banner/banner1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 KiB

BIN
theme_boec/static/src/images/banner/banner2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

BIN
theme_boec/static/src/images/banner/banner3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

BIN
theme_boec/static/src/images/banner/blog-bg.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

BIN
theme_boec/static/src/images/blog/1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

BIN
theme_boec/static/src/images/blog/2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

BIN
theme_boec/static/src/images/blog/3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
theme_boec/static/src/images/blog/4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

BIN
theme_boec/static/src/images/blog/5.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
theme_boec/static/src/images/blog/6.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

BIN
theme_boec/static/src/images/blog/7.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
theme_boec/static/src/images/blog/8.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

BIN
theme_boec/static/src/images/blog/9.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

BIN
theme_boec/static/src/images/blog/blog-detail.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 608 KiB

BIN
theme_boec/static/src/images/carty/j-kelly-brito-dDLiE0fxEXk-unsplash.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
theme_boec/static/src/images/carty/kris-gerhard-0BKZfcamvGg-unsplash.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

BIN
theme_boec/static/src/images/carty/w.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

BIN
theme_boec/static/src/images/deal/deal.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

BIN
theme_boec/static/src/images/deal/deal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1006 KiB

BIN
theme_boec/static/src/images/demo-product/dp1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
theme_boec/static/src/images/demo-product/dp111.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
theme_boec/static/src/images/demo-product/dp2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
theme_boec/static/src/images/demo-product/dp3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
theme_boec/static/src/images/demo-product/light-up-sneakers-women.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
theme_boec/static/src/images/icons/master.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
theme_boec/static/src/images/icons/menu.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
theme_boec/static/src/images/icons/payment.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

38
theme_boec/static/src/images/icons/rate-star-button.svg

@ -0,0 +1,38 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" version="1.1" width="512" height="512" x="0" y="0" viewBox="0 0 306 306" style="enable-background:new 0 0 512 512" xml:space="preserve" class=""><g>
<g xmlns="http://www.w3.org/2000/svg">
<g id="star-rate">
<polygon points="153,230.775 247.35,299.625 211.65,187.425 306,121.125 191.25,121.125 153,6.375 114.75,121.125 0,121.125 94.35,187.425 58.65,299.625 " fill="#12e3e3" data-original="#000000" style="" class=""/>
</g>
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
<g xmlns="http://www.w3.org/2000/svg">
</g>
</g></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
theme_boec/static/src/images/icons/visa.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
theme_boec/static/src/images/insta/1 (1).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

BIN
theme_boec/static/src/images/insta/1 (2).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

BIN
theme_boec/static/src/images/insta/1 (3).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 530 KiB

BIN
theme_boec/static/src/images/insta/1 (4).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
theme_boec/static/src/images/insta/1 (5).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
theme_boec/static/src/images/insta/1 (6).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
theme_boec/static/src/images/insta/2 (1).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

BIN
theme_boec/static/src/images/insta/2 (2).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
theme_boec/static/src/images/insta/2 (3).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
theme_boec/static/src/images/product-preview/1 (1).jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

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

Loading…
Cancel
Save