@ -0,0 +1,46 @@ |
|||
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg |
|||
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
|
|||
Theme Boec |
|||
========================= |
|||
* Attractive and modern eCommerce Website theme for Odoo 17 |
|||
|
|||
Configuration |
|||
============= |
|||
* No need of additional configuration. |
|||
|
|||
License |
|||
------- |
|||
Affero General Public License, Version 3 (AGPL-3). |
|||
(https://www.gnu.org/licenses/agpl-3.0.en.html) |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
Credits |
|||
======= |
|||
* Developer: (v17) Ammu Raj, Contact: odoo@cybrosys.com |
|||
|
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@cybrosys.com |
|||
* Website : https://cybrosys.com |
|||
|
|||
Bug Tracker |
|||
----------- |
|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. |
|||
|
|||
Maintainer |
|||
========== |
|||
.. image:: https://cybrosys.com/images/logo.png |
|||
:target: https://cybrosys.com |
|||
|
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit `Our Website <https://cybrosys.com/>`__ |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Ammu Raj (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from . import models |
|||
from . import controllers |
@ -0,0 +1,87 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Ammu Raj (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
{ |
|||
'name': 'Theme Boec', |
|||
'version': '17.0.1.0.0', |
|||
'category': 'Theme/eCommerce', |
|||
'summary': "Theme Boec is an attractive and modern eCommerce Website " |
|||
"theme", |
|||
'description': "Theme Boec is new kind of Theme.The theme is very user-friendly" |
|||
"and suitable for your eCommerce website with blog", |
|||
'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'], |
|||
'data': [ |
|||
'security/ir.model.access.csv', |
|||
'data/boec_config_data.xml', |
|||
'views/about.xml', |
|||
'views/blog_templates.xml', |
|||
'views/blog_preview_templates.xml', |
|||
'views/cart_templates.xml', |
|||
'views/contact_us_templates.xml', |
|||
'views/footer_templates.xml', |
|||
'views/header_templates.xml', |
|||
'views/layout_templates.xml', |
|||
'views/page_top_templates.xml', |
|||
'views/product_view_templates.xml', |
|||
'views/shop_templates.xml', |
|||
'views/boec_config_views.xml', |
|||
'views/product_brand_views.xml', |
|||
'views/product_template_views.xml', |
|||
'views/sidebar_shop_templates.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': [ |
|||
'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&family=Montserrat&display=swap" |
|||
], |
|||
}, |
|||
'images': [ |
|||
'static/description/banner.png', |
|||
'static/description/theme.png', |
|||
], |
|||
'license': 'AGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Ammu Raj (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from . import brand_filter_controller |
|||
from . import product_snippets |
@ -0,0 +1,240 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Ammu Raj (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from datetime import datetime |
|||
from werkzeug.exceptions import NotFound |
|||
from odoo import fields, http, tools |
|||
from odoo.http import request |
|||
from odoo.tools import lazy |
|||
from odoo.addons.http_routing.models.ir_http import slug |
|||
from odoo.addons.website.models.ir_http import sitemap_qs2dom |
|||
from odoo.addons.website.controllers.main import QueryURL |
|||
from odoo.addons.website_sale.controllers.main import TableCompute, WebsiteSale |
|||
|
|||
|
|||
class ProductBrand(WebsiteSale): |
|||
|
|||
def sitemap_shop(env, rule, qs): |
|||
"""Required function for shop""" |
|||
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): |
|||
"""Adding the feature Brand in shop.""" |
|||
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: |
|||
pricelist = website.pricelist_id |
|||
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_shop_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: |
|||
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: |
|||
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 |
|||
|
|||
fiscal_position_sudo = website.fiscal_position_id.sudo() |
|||
products_prices = lazy( |
|||
lambda: products._get_sales_prices(pricelist, fiscal_position_sudo)) |
|||
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) |
@ -0,0 +1,62 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Ammu Raj (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <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): |
|||
"""Get the website published products for snippet""" |
|||
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() |
|||
|
|||
|
|||
class DealWeek(http.Controller): |
|||
@http.route('/get_product', auth='public', type='json', website=True) |
|||
def get_products(self, **kwargs): |
|||
"""Allows to get deal of the week product.""" |
|||
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): |
|||
"""End date for the deal""" |
|||
boec_configuration = request.env.ref('theme_boec.boec_config_data') |
|||
end_date = boec_configuration.date_end |
|||
return end_date |
|||
|
@ -0,0 +1,8 @@ |
|||
<?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> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,6 @@ |
|||
## Module <theme_boec> |
|||
|
|||
#### 26.12.2023 |
|||
#### Version 17.0.1.0.0 |
|||
#### ADD |
|||
- Initial commit for Theme Boec |
@ -0,0 +1,26 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Ammu Raj (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from . import boec_config |
|||
from . import product_brand |
|||
from . import product_template |
|||
from . import theme_utils |
|||
from . import website |
@ -0,0 +1,37 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Ammu Raj (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from odoo import fields, models |
|||
|
|||
|
|||
class BoecConfig(models.Model): |
|||
"""Allows to set a product that will deal of the week. It is a snippet""" |
|||
_name = 'boec.config' |
|||
_description = 'Boec Config' |
|||
|
|||
name = fields.Char(string='Name', help='Name of the Deal') |
|||
deal_week_product_id = fields.Many2one('product.product', |
|||
domain=[('is_published', '=', True)], |
|||
string='Deal of the Week Product', |
|||
help='This product will be the deal' |
|||
'of the week') |
|||
date_end = fields.Datetime(string='Counter End Date', help='End date of' |
|||
'this offer') |
@ -0,0 +1,37 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Ammu Raj (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from odoo import fields, models |
|||
|
|||
|
|||
class ProductBrand(models.Model): |
|||
"""Model for creating Brands for products.""" |
|||
_name = 'product.brand' |
|||
_description = "Product Brand" |
|||
_rec_name = 'brand_name' |
|||
|
|||
brand_name = fields.Char(required=True, string='Name', help='Name of the' |
|||
'brand.') |
|||
sequence_no = fields.Integer(string="Sequence no", help='Sequence number of' |
|||
'brand.') |
|||
parent_id = fields.Many2one('product.brand', string='Parent Brand', |
|||
index=True, help='Select the parent brand of' |
|||
'the brand.') |
@ -0,0 +1,37 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Ammu Raj (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from odoo import fields, models |
|||
|
|||
|
|||
class ProductTemplate(models.Model): |
|||
"""Inherited product template for adding the field Hot Sale and Product |
|||
Brand. While using the snippet 'Product Tab', the product with enabled |
|||
Hot Sale will be display.""" |
|||
_inherit = "product.template" |
|||
|
|||
hot_deals = fields.Boolean(string="Hot Sale", help='The product or services' |
|||
'which are high in' |
|||
'demand at a particular' |
|||
'time or period') |
|||
brand_id = fields.Many2one('product.brand', string="Product Brand", |
|||
help='Enabled product can filter from website' |
|||
'by brand.') |
@ -0,0 +1,53 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Ammu Raj (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from odoo import models |
|||
|
|||
|
|||
class ThemeUtils(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_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') |
@ -0,0 +1,31 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Ammu Raj (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################ |
|||
from odoo import models |
|||
|
|||
|
|||
class Website(models.Model): |
|||
"""Inherited website fo apply brand feature.""" |
|||
_inherit = "website" |
|||
|
|||
def get_brands(self): |
|||
"""Returning all brands""" |
|||
return self.env['product.brand'].search([]) |
|
After Width: | Height: | Size: 204 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 323 KiB |
After Width: | Height: | Size: 277 KiB |
After Width: | Height: | Size: 2.0 MiB |
After Width: | Height: | Size: 146 KiB |
After Width: | Height: | Size: 272 KiB |
After Width: | Height: | Size: 236 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 361 KiB |
After Width: | Height: | Size: 596 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 1.1 MiB |
After Width: | Height: | Size: 348 KiB |
After Width: | Height: | Size: 231 KiB |
After Width: | Height: | Size: 386 KiB |
After Width: | Height: | Size: 360 KiB |
After Width: | Height: | Size: 380 KiB |
After Width: | Height: | Size: 542 KiB |
After Width: | Height: | Size: 323 KiB |
After Width: | Height: | Size: 632 KiB |
@ -0,0 +1,341 @@ |
|||
<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 has 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 configures 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 is 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 makes 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 has a fully customized Product preview with full details of the product with an |
|||
attractive design. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- End of Column 4 --> |
|||
</div> |
|||
<!-- 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.png" 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> |
After Width: | Height: | Size: 463 KiB |
@ -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%; |
|||
} |
@ -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} |
@ -0,0 +1,127 @@ |
|||
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; |
|||
} |
|||
.o_wsale_product_information .o_wsale_product_information_text h6 a { |
|||
color: #000 !important; |
|||
text-decoration: none; |
|||
font-size: 14px !important; |
|||
font-family: 'Poppins', sans-serif !important; |
|||
} |
After Width: | Height: | Size: 280 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 147 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 138 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 161 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 708 KiB |
After Width: | Height: | Size: 1.5 MiB |
After Width: | Height: | Size: 287 KiB |
After Width: | Height: | Size: 304 KiB |
After Width: | Height: | Size: 267 KiB |
After Width: | Height: | Size: 201 KiB |
After Width: | Height: | Size: 175 KiB |
After Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 185 KiB |
After Width: | Height: | Size: 169 KiB |
After Width: | Height: | Size: 163 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 209 KiB |
After Width: | Height: | Size: 149 KiB |
After Width: | Height: | Size: 608 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 142 KiB |
After Width: | Height: | Size: 168 KiB |
After Width: | Height: | Size: 198 KiB |
After Width: | Height: | Size: 1006 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 123 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 133 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 149 KiB |
After Width: | Height: | Size: 221 KiB |
After Width: | Height: | Size: 530 KiB |
After Width: | Height: | Size: 110 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 236 KiB |
After Width: | Height: | Size: 121 KiB |
After Width: | Height: | Size: 161 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 1.5 MiB |
After Width: | Height: | Size: 1.5 MiB |
After Width: | Height: | Size: 1.5 MiB |