@ -0,0 +1,76 @@ |
|||
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg |
|||
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
|
|||
Theme Shopping |
|||
============== |
|||
Theme Shopping module provide attractive and unique front end theme mainly |
|||
suitable for eCommerce website |
|||
|
|||
Configuration |
|||
============= |
|||
Top Deal product Flow: |
|||
- Enabling and Managing 'Top Deal' for a Product: |
|||
* Navigate to: Products -> Top Deal |
|||
* Enable the 'Top Deal' boolean field for the desired product |
|||
|
|||
- Setting Deal Details |
|||
* Once enabled, new fields appear under Products -> General Information: |
|||
- Offer Price |
|||
- Planned Date |
|||
* Set the offer price |
|||
* Select the time period for the event |
|||
* Click the 'Apply' button to confirm the date |
|||
|
|||
- Deal Visibility and Duration |
|||
* The product is added to the Top Deal carousel for the specified period |
|||
* When the time period ends, the product is automatically removed from the carousel |
|||
|
|||
- Product Detail Page Display |
|||
* The Top Deal offer price is shown |
|||
* The original price is displayed with a strikethrough |
|||
|
|||
Winter Collections : |
|||
Adding Products to the Winter Collection: |
|||
- Navigate to: Products -> General Information -> Category |
|||
- Under the "Category" section, select "Winter Collection" from the product category options. |
|||
- Add the desired products to this category. |
|||
- These products will be available in the Winter Collection snippets. |
|||
Testimonial Snippet: |
|||
-Only admin allowed users can submit their testimonials. |
|||
-All submited testimonials will be displayed for all users. |
|||
|
|||
License |
|||
------- |
|||
General Public License, Version 3 (AGPL v3). |
|||
(https://www.gnu.org/licenses/agpl-3.0-standalone.html) |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
Credits |
|||
------- |
|||
Developer: (V17) Sabeel B, V(17) Shikhil Raj, (V18) Anaswara S Sunil |
|||
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) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions (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 controllers |
|||
from . import models |
@ -0,0 +1,93 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions (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 Shopping', |
|||
'version': '18.0.1.0.0', |
|||
'category': 'Theme/eCommerce', |
|||
'summary': "Theme Shopping is an attractive and modern eCommerce Website " |
|||
"theme", |
|||
'description': "Theme Shopping 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': ['base','sale_management', 'website_blog', 'website_sale_wishlist', |
|||
'website_sale','website', |
|||
'website_sale_comparison', 'website_mass_mailing'], |
|||
'data': [ |
|||
'security/ir.model.access.csv', |
|||
'security/security_groups.xml', |
|||
'views/header_templates.xml', |
|||
'views/footer_templates.xml', |
|||
'views/add_testimonial.xml', |
|||
'views/about_us_views.xml', |
|||
'views/blog_templates.xml', |
|||
'views/snippets/frequently_asked.xml', |
|||
'views/snippets/our_team.xml', |
|||
'views/snippets/new_testimonial_snippet.xml', |
|||
'views/snippets/offers.xml', |
|||
'views/snippets/winter_collections.xml', |
|||
'views/snippets/price_collection.xml', |
|||
'views/snippets/subscription.xml', |
|||
'views/shop_templates.xml', |
|||
'views/snippets.xml', |
|||
'views/product_template_views.xml', |
|||
'views/snippets/top_deal_carousal_templates.xml', |
|||
'views/website_sale_wishlist_template.xml', |
|||
'data/ir_cron.xml', |
|||
'views/homepage_snippets.xml' |
|||
], |
|||
'demo': ['data/product_category_data.xml'], |
|||
'assets': { |
|||
'web.assets_frontend': [ |
|||
"theme_shopping/static/src/js/top_deal_carousel/top_deal_content.xml", |
|||
"theme_shopping/static/src/js/top_deal_carousel/top_deal_carousal.js", |
|||
"theme_shopping/static/src/js/winter_collection_carousel/winter_products_content.xml", |
|||
"theme_shopping/static/src/js/winter_collection_carousel/winter_products_carousel.js", |
|||
"theme_shopping/static/src/js/testimonial.js", |
|||
"theme_shopping/static/src/js/subscription/subscription.js", |
|||
"theme_shopping/static/src/js/snippet_carousel.js", |
|||
"theme_shopping/static/src/css/main.css", |
|||
"theme_shopping/static/src/css/owl.carousel.min.css", |
|||
"theme_shopping/static/src/css/owl.theme.default.min.css", |
|||
"theme_shopping/static/src/js/owl.carousel.js", |
|||
"theme_shopping/static/src/js/owl.carousel.min.js", |
|||
"theme_shopping/static/src/js/product_review.js", |
|||
], |
|||
'web.assets_backend': [ |
|||
"theme_shopping/static/src/js/welcome_message.js" |
|||
], |
|||
}, |
|||
'images': [ |
|||
'static/description/banner.jpg', |
|||
'static/description/theme_screenshot.jpg', |
|||
], |
|||
'images_preview_theme': { |
|||
'website.s_cover_default_image': '/theme_shopping/static/description/images/banner.jpg', |
|||
}, |
|||
'license': 'AGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions (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 dynamic_snippets |
|||
from . import theme_shopping |
|||
from . import testimonial |
|||
|
@ -0,0 +1,74 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions (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 DynamicSnippets(http.Controller): |
|||
"""This class is for the getting values for dynamic product snippets |
|||
""" |
|||
@http.route('/top_deal_product_snippet', auth='public', type='json', |
|||
website=True) |
|||
def get_best_products(self): |
|||
"""Controller to reflect chosen products in 'Top Deal' |
|||
snippet""" |
|||
products = [] |
|||
products_search_read = request.env['product.product'].with_user( |
|||
1).search_read( |
|||
[('is_published', '=', True), |
|||
('is_top_deal_product', '=', True), |
|||
('ready_to_top_deal', '=', True)], |
|||
['name', 'image_1920', 'website_id', |
|||
'sales_count', 'list_price','actual_price', 'offer_price', 'product_tmpl_id', 'website_url']) |
|||
unique_products = [] |
|||
seen_tmpl_ids = set() |
|||
for product in products_search_read: |
|||
if product['product_tmpl_id'][0] not in seen_tmpl_ids: |
|||
unique_products.append(product) |
|||
seen_tmpl_ids.add(product['product_tmpl_id'][0]) |
|||
for product in unique_products: |
|||
products.append(product) |
|||
response = http.Response( |
|||
template='theme_shopping.best_deal_product_carousel_snippet', |
|||
qcontext={'products': products}) |
|||
return products |
|||
|
|||
@http.route('/get_winter_product_snippet', auth='public', type='json', |
|||
website=True) |
|||
def get_winter_products(self): |
|||
"""Controller to reflect chosen products in 'Winter Collection' |
|||
snippet""" |
|||
products = [] |
|||
products_search_read = request.env['product.product'].with_user( |
|||
1).search_read( |
|||
[('is_published', '=', True), |
|||
('categ_id', '=', request.env.ref( |
|||
'theme_shopping.product_category_winter').id)], |
|||
['name', 'image_1920', 'website_id', |
|||
'sales_count', 'list_price', 'website_url']) |
|||
for product in products_search_read: |
|||
products.append(product) |
|||
|
|||
response = http.Response( |
|||
template='theme_shopping.winter_product_carousel_snippet', |
|||
qcontext={'products': products}) |
|||
return products |
@ -0,0 +1,64 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions (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 WebsiteTestimonialController(http.Controller): |
|||
@http.route('/website/testimonials/fetch', type='json', auth='public') |
|||
def fetch_testimonials(self): |
|||
"""Fetch all testimonials""" |
|||
try: |
|||
testimonials = request.env['website.testimonial'].sudo().search([]) |
|||
return [{ |
|||
'user_name': testimonial.user_id.name, |
|||
'testimonial': testimonial.testimonial, |
|||
'image': testimonial.image, |
|||
} for testimonial in testimonials] |
|||
except Exception as e: |
|||
return {'status': 'error', 'message': str(e)} |
|||
|
|||
@http.route('/fetch_user_group', type='json', auth='public', methods=['POST']) |
|||
def check_user_group(self, userId, **kwargs): |
|||
"""Check the user group of current logged-in user""" |
|||
user_group = request.env['res.users'].search([('id', '=', userId)]) |
|||
user_has_group = ( |
|||
user_group.has_group('theme_shopping.testimonial_user') or |
|||
user_group.has_group('website.group_website_designer') |
|||
) |
|||
return user_has_group |
|||
|
|||
@http.route('/website/testimonial/create', type='json', auth='public', methods=['POST']) |
|||
def create_testimonial(self, testimonial, **kwargs): |
|||
"""Create a new testimonial record""" |
|||
try: |
|||
current_user = request.env.user |
|||
user_name = current_user.id |
|||
user_image = current_user.image_1920 |
|||
request.env['website.testimonial'].sudo().create({ |
|||
'user_id': user_name, |
|||
'testimonial': testimonial, |
|||
'image': user_image, |
|||
}) |
|||
return {'status': 'success'} |
|||
except Exception as e: |
|||
return {'status': 'error', 'message': str(e)} |
@ -0,0 +1,100 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions (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, fields |
|||
from odoo.http import request |
|||
from odoo.addons.payment import utils as payment_utils |
|||
from odoo.tools.json import scriptsafe as json_scriptsafe |
|||
from odoo.addons.website_sale.controllers import main |
|||
|
|||
|
|||
class WebsiteSale(main.WebsiteSale): |
|||
"""Imported and recalled WebsiteSale class to Patch cart_update_json()""" |
|||
@http.route() |
|||
def cart_update_json( |
|||
self, product_id, line_id=None, add_qty=None, set_qty=None, |
|||
display=True, |
|||
product_custom_attribute_values=None, |
|||
no_variant_attribute_values=None, **kw |
|||
): |
|||
""" |
|||
This route is called : |
|||
- When changing quantity from the cart. |
|||
- When adding a product from the wishlist. |
|||
- When adding a product to cart on the same page (without redirection). |
|||
""" |
|||
order = request.website.sale_get_order(force_create=True) |
|||
if order.state != 'draft': |
|||
request.website.sale_reset() |
|||
if kw.get('force_create'): |
|||
order = request.website.sale_get_order(force_create=True) |
|||
else: |
|||
return {} |
|||
|
|||
if product_custom_attribute_values: |
|||
product_custom_attribute_values = json_scriptsafe.loads( |
|||
product_custom_attribute_values) |
|||
|
|||
if no_variant_attribute_values: |
|||
no_variant_attribute_values = json_scriptsafe.loads( |
|||
no_variant_attribute_values) |
|||
values = order._cart_update( |
|||
product_id=product_id, |
|||
line_id=line_id, |
|||
add_qty=add_qty, |
|||
set_qty=set_qty, |
|||
product_custom_attribute_values=product_custom_attribute_values, |
|||
no_variant_attribute_values=no_variant_attribute_values, |
|||
**kw |
|||
) |
|||
for line in order.order_line.filtered( |
|||
lambda rec: rec.product_id.is_top_deal_product): |
|||
line.update({"price_unit": line.product_id.offer_price}) |
|||
values['notification_info'] = self._get_cart_notification_information( |
|||
order, [values['line_id']]) |
|||
values['notification_info']['warning'] = values.pop('warning', '') |
|||
request.session['website_sale_cart_quantity'] = order.cart_quantity |
|||
if not order.cart_quantity: |
|||
request.website.sale_reset() |
|||
return values |
|||
values['cart_quantity'] = order.cart_quantity |
|||
values['minor_amount'] = payment_utils.to_minor_currency_units( |
|||
order.amount_total, order.currency_id |
|||
), |
|||
if not display: |
|||
return values |
|||
|
|||
values['cart_ready'] = order._is_cart_ready() |
|||
values['website_sale.cart_lines'] = request.env[ |
|||
'ir.ui.view']._render_template( |
|||
"website_sale.cart_lines", { |
|||
'website_sale_order': order, |
|||
'date': fields.Date.today(), |
|||
'suggested_products': order._cart_accessories() |
|||
} |
|||
) |
|||
values['website_sale.total'] = request.env[ |
|||
'ir.ui.view']._render_template( |
|||
"website_sale.total", { |
|||
'website_sale_order': order, |
|||
} |
|||
) |
|||
return values |
@ -0,0 +1,16 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<!--<odoo noupdate="1">--> |
|||
<odoo > |
|||
<data> |
|||
<!-- crone job checking top deal products --> |
|||
<record id="ir_cron_action_top_deal" model="ir.cron"> |
|||
<field name="name">Top deal Offer Checking</field> |
|||
<field name="model_id" ref="model_product_template"/> |
|||
<field name="state">code</field> |
|||
<field name="code">model.check_top_deal() |
|||
</field> |
|||
<field name="interval_number">1</field> |
|||
<field name="interval_type">days</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo noupdate="1"> |
|||
<!-- Demo product category for winter products --> |
|||
<record id="product_category_winter" model="product.category"> |
|||
<field name="parent_id" ref="product.product_category_1"/> |
|||
<field name="name">Winter Collection</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,6 @@ |
|||
## Module <theme_shopping> |
|||
|
|||
#### 16.01.2025 |
|||
#### Version 18.0.1.0.0 |
|||
#### ADD |
|||
- Initial commit for Theme Shopping |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions (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 product_template |
|||
from . import product_wishlist |
|||
from . import theme_utils |
|||
from . import website_testimonial |
@ -0,0 +1,103 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions (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 api, fields, models |
|||
from odoo.exceptions import ValidationError |
|||
|
|||
class ProductTemplate(models.Model): |
|||
_inherit = 'product.template' |
|||
|
|||
is_top_deal_product = fields.Boolean(string="Top Deal Product", |
|||
help="Whether the product is listed " |
|||
"in the top deal product", |
|||
store=True) |
|||
offer_price = fields.Float(string="Offer Price", |
|||
help="Set an offer price to price to " |
|||
"display on website") |
|||
time_period_from = fields.Date(string="From Date", |
|||
help="From date for offer price visibility", |
|||
default=lambda self: fields.Date.today()) |
|||
time_period_end = fields.Date(string="End Date", |
|||
help="End date for offer price visibility", |
|||
default=lambda self: fields.Date.today()) |
|||
ready_to_top_deal = fields.Boolean(string="Ready to Top Deal", |
|||
help="Determine whether the product is ready to be featured as a top deal.") |
|||
actual_price = fields.Monetary(string="Actual Price") |
|||
|
|||
def _get_combination_info(self, combination=False, product_id=False, |
|||
add_qty=1, parent_combination=False, |
|||
only_template=False): |
|||
"""Return the variant info based on its combination. |
|||
See `_get_combination_info` for more information. |
|||
""" |
|||
combination_info = super()._get_combination_info( |
|||
combination=combination, product_id=product_id, add_qty=add_qty, |
|||
parent_combination=parent_combination, only_template=only_template) |
|||
combination_info['offer_price'] = self.offer_price |
|||
return combination_info |
|||
|
|||
@api.onchange('is_top_deal_product') |
|||
def onchange_is_top_deal_product(self): |
|||
"""Set the offer price as new sale price and old sales price saves |
|||
into new field """ |
|||
if self.is_top_deal_product: |
|||
self.actual_price = self.list_price |
|||
self.time_period_from = fields.Date.today() |
|||
self.time_period_end = fields.Date.today() |
|||
config = self.env['res.config.settings'].create( |
|||
{'group_product_price_comparison': True}) |
|||
config.execute() |
|||
else: |
|||
self.list_price = self.actual_price |
|||
self.compare_list_price = 0.0 |
|||
self.ready_to_top_deal = False |
|||
|
|||
def check_top_deal(self): |
|||
"""Check the timeframe of the top deal offer.""" |
|||
data = self.env['product.template'].search( |
|||
[('is_top_deal_product', '=', 'True')]) |
|||
today = fields.Date.today() |
|||
for rec in data: |
|||
if today > rec.time_period_end: |
|||
rec.write({'ready_to_top_deal': False, |
|||
'list_price': rec.actual_price, |
|||
'compare_list_price': 0.0 |
|||
}) |
|||
|
|||
elif rec.time_period_from <= today <= rec.time_period_end: |
|||
if rec.offer_price < rec.actual_price: |
|||
rec.write({'ready_to_top_deal': True, |
|||
'list_price': rec.offer_price, |
|||
'compare_list_price': rec.actual_price}) |
|||
else: |
|||
rec.write({'ready_to_top_deal': True, |
|||
'list_price': rec.actual_price, |
|||
'compare_list_price': 0.0 |
|||
}) |
|||
elif rec.time_period_from > rec.time_period_end: |
|||
rec.write({'ready_to_top_deal': False}) |
|||
raise ValidationError("From date should be less than end date") |
|||
else: |
|||
rec.write({'ready_to_top_deal': False}) |
|||
|
|||
def apply_top_deal_time(self): |
|||
"""Method for set time period for top deal products.""" |
|||
self.check_top_deal() |
@ -0,0 +1,47 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions (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 api, models |
|||
|
|||
|
|||
class ProductWishlist(models.Model): |
|||
"""Inherited product_wishlist to overwrite a function""" |
|||
_inherit = 'product.wishlist' |
|||
|
|||
@api.model |
|||
def _add_to_wishlist(self, pricelist_id, currency_id, website_id, price, |
|||
product_id, partner_id=False): |
|||
"""Over-writing the function to check conditions""" |
|||
existing_product = self.env['product.wishlist'].search_count([ |
|||
('product_id', '=', product_id)]) |
|||
if existing_product == 1: |
|||
return False |
|||
else: |
|||
wish = self.env['product.wishlist'].create({ |
|||
'partner_id': partner_id, |
|||
'product_id': product_id, |
|||
'currency_id': currency_id, |
|||
'pricelist_id': pricelist_id, |
|||
'price': price, |
|||
'website_id': website_id, |
|||
}) |
|||
total_wish = self.env['product.wishlist'].search_count([]) |
|||
return wish, total_wish |
@ -0,0 +1,41 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions (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 api, models |
|||
|
|||
|
|||
class ThemeUtils(models.AbstractModel): |
|||
""" Class for enable and disable templates when using theme shopping""" |
|||
_inherit = 'theme.utils' |
|||
|
|||
@api.model |
|||
def _theme_shopping_post_copy(self, mod): |
|||
""" Enable and disable templates when using coffee shop theme """ |
|||
self.enable_view("website_sale.products_categories") |
|||
self.enable_view("website_sale.products_description") |
|||
self.enable_view("website_sale.products_design_card") |
|||
self.enable_view("website_sale.products_add_to_cart") |
|||
self.enable_view("website_sale.product_comment") |
|||
self.enable_view("website_sale.option_collapse_products_categories") |
|||
self.enable_view("website_sale.product_buy_now") |
|||
self.disable_view("website_sale.products_categories_top") |
|||
self.disable_view("website_sale.products_design_grid") |
|||
self.disable_view("website_sale_comparison.add_to_compare") |
@ -0,0 +1,42 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Cybrosys Techno Solutions (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 api, models,fields |
|||
|
|||
|
|||
class WebsiteTestimonial(models.Model): |
|||
""" Class for adding testimonials theme shopping""" |
|||
_name = 'website.testimonial' |
|||
_description = 'Testimonial Review' |
|||
_inherit = 'mail.thread' |
|||
_rec_name ='user_id' |
|||
|
|||
user_id = fields.Many2one('res.users', required=True,string='User Name') |
|||
testimonial = fields.Text('Testimonial', required=True) |
|||
image = fields.Binary() # To store the user's image, if you want to allow image uploads |
|||
|
|||
@api.onchange('user_id') |
|||
def _onchange_name(self): |
|||
""" For setting profile picture while changing the user """ |
|||
if self.user_id and self.user_id.image_1920: |
|||
self.image = self.user_id.image_1920 |
|||
else: |
|||
self.image = False |
|
@ -0,0 +1,9 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!--Testimonial Group--> |
|||
<record id="testimonial_user" model="res.groups"> |
|||
<field name="name">Testimonial</field> |
|||
<field name="category_id" ref="base.module_category_website_website"/> |
|||
</record> |
|||
|
|||
</odoo> |
After Width: | Height: | Size: 226 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 202 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 138 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 226 KiB |
After Width: | Height: | Size: 513 KiB |
After Width: | Height: | Size: 127 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 691 KiB |
After Width: | Height: | Size: 1.0 MiB |
After Width: | Height: | Size: 545 KiB |
After Width: | Height: | Size: 843 B |
After Width: | Height: | Size: 936 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 9.5 KiB |
After Width: | Height: | Size: 1.2 MiB |
After Width: | Height: | Size: 500 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 929 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 336 KiB |
After Width: | Height: | Size: 319 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 643 KiB |
After Width: | Height: | Size: 177 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 495 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 193 KiB |
After Width: | Height: | Size: 121 KiB |
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 885 B |
@ -0,0 +1,911 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|||
<title>app index</title> |
|||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" /> |
|||
<link rel="preconnect" href="https://fonts.googleapis.com"> |
|||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
|||
<link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap" |
|||
rel="stylesheet"> |
|||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css" /> |
|||
<style> |
|||
:root { |
|||
--primary-color: #F5C000; |
|||
--bg-white: #fff; |
|||
--text-color: #121212; |
|||
--text-color-light: #64728f; |
|||
} |
|||
|
|||
body { |
|||
font-family: "Montserrat", sans-serif; |
|||
} |
|||
</style> |
|||
</head> |
|||
|
|||
<body> |
|||
<!-- overview --> |
|||
<div class="container"> |
|||
|
|||
<!-- support-header --> |
|||
<div class="supports my-5 py-3" style="border-bottom: 1px solid #e7e7e7;"> |
|||
<div class="row justify-content-between"> |
|||
<div class="col-4"> |
|||
<div class="my-3"> |
|||
<img src="images/logo-cybro.png" |
|||
style="width:auto !important; height:40px !important"> |
|||
</div> |
|||
</div> |
|||
<div class="col-6"> |
|||
<div class="row" style="margin-top:10px"> |
|||
|
|||
<div class="my-3 d-flex align-items-center justify-content-end"> |
|||
<span class="me-3"><b>Supports: </b></span> |
|||
<div class="text-center" |
|||
style="background-color:#017E84 !important; font-size:0.8rem !important; color:#fff !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width:120px !important"> |
|||
Community |
|||
</div> |
|||
<div class="text-center" |
|||
style="background-color:#875A7B !important; color:#fff !important; font-size:0.8rem !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width:120px !important"> |
|||
Enterprise |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row" style="margin-top:10px"> |
|||
<div class="d-flex align-items-center justify-content-end"> |
|||
<span class="me-3"><b>Availability: </b></span> |
|||
<div class="text-center col" |
|||
style="border:1px solid #017E84; font-size:0.8rem !important; color:#017E84 !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:20px !important; min-width:120px !important"> |
|||
<i class="fa fa-times" style="color:red"></i> Odoo Online |
|||
</div> |
|||
<div class="text-center col" |
|||
style="font-size:0.8rem !important; border:1px solid #714b67; color:#714b67 !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:20px !important; min-width:120px !important"> |
|||
<i class="fa fa-check" style="color:green"></i> Odoo.sh |
|||
</div> |
|||
<div class="text-center col" |
|||
style="font-size:0.8rem !important; color:#5B899E !important; border:1px solid #5B899E; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:20px !important; min-width:120px !important"> |
|||
<i class="fa fa-check" style="color:green"></i> On Premise |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- banner-section --> |
|||
<div class="my-5"> |
|||
<div class=""> |
|||
<img src="images/banner.jpg" class="img-fluid" style="border-radius: 16px; width: 100%;"> |
|||
</div> |
|||
</div> |
|||
|
|||
<!--Stared feature section --> |
|||
<div class="my-5" style="padding: 100px; background-color: #f1f5fd; border-radius: 16px;"> |
|||
<div class="container"> |
|||
<div class="row mb-60"> |
|||
<div class="col-lg-12 d-flex justify-content-center align-items-center flex-wrap gap-3"> |
|||
<div class="position-relative" ; style=" |
|||
text-align: center; |
|||
font-size: 46.875px; |
|||
font-style: normal; |
|||
padding-bottom: 40px; "> |
|||
<h2 style="font-weight: 600;">Our Features</h2> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row g-4" style="margin-bottom:15px"> |
|||
<div class="col-lg-4 col-md-6" |
|||
style="visibility: visible;"> |
|||
<div style="background-color: #fff;height: 100%;border-radius: 12px;padding: 35px 30px;"> |
|||
<div class="content"> |
|||
<img src="https://media.istockphoto.com/id/1069729858/vector/five-point-star-rating-icon.jpg?s=612x612&w=0&k=20&c=qjMq2RrfahWPP2EqPlUnq4BIB1vJrpviq0a5WgPJMa8=" class="img-responsive" height="46px" width="46px"> |
|||
<h4 class="mt-3"><a href="#" |
|||
style=" color: #121212; |
|||
font-size: 18px; |
|||
text-decoration: none; |
|||
font-weight: 700; |
|||
line-height: 1.2;"> Design</a> |
|||
</h4> |
|||
<p style=" font-size: 16px; |
|||
font-weight: 400; |
|||
line-height: 1.5; |
|||
color: #212529;">Unique and Attractive custom-designed snippets |
|||
</p> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 col-md-6"> |
|||
<div style="background-color: #fff; height: 100%;border-radius: 12px;padding: 35px 30px;"> |
|||
<div class="content"> |
|||
<img src="https://media.istockphoto.com/id/1069729858/vector/five-point-star-rating-icon.jpg?s=612x612&w=0&k=20&c=qjMq2RrfahWPP2EqPlUnq4BIB1vJrpviq0a5WgPJMa8=" class="img-responsive" height="46px" width="46px"> |
|||
<h4 class="mt-3"> |
|||
<a href="#" style=" color: #121212; |
|||
font-size: 18px; |
|||
text-decoration: none; |
|||
font-weight: 700; |
|||
line-height: 1.2;"> Fast loading times</a> |
|||
</h4> |
|||
<p style=" font-size: 16px; |
|||
font-weight: 400; |
|||
line-height: 1.5; |
|||
color: #212529;">This theme loads all of its features |
|||
more quickly than other designs.</p> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 col-md-6"> |
|||
<div style="background-color: #fff; height: 100%; |
|||
border-radius: 12px; |
|||
padding: 35px 30px;"> |
|||
<div class="content"> |
|||
<img src="https://media.istockphoto.com/id/1069729858/vector/five-point-star-rating-icon.jpg?s=612x612&w=0&k=20&c=qjMq2RrfahWPP2EqPlUnq4BIB1vJrpviq0a5WgPJMa8=" class="img-responsive" height="46px" width="46px"> |
|||
<h4 class="mt-3"><a href="#" style=" color: #121212; |
|||
font-size: 18px; |
|||
text-decoration: none; |
|||
font-weight: 700; |
|||
line-height: 1.2;">Responsive design</a></h4> |
|||
</div> |
|||
<p style=" font-size: 16px; |
|||
font-weight: 400; |
|||
line-height: 1.5; |
|||
color: #212529;">Different resolution devices can be |
|||
used by users to watch websites.</p> |
|||
|
|||
</a> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
<div class="row g-4" style="margin-bottom:15px"> |
|||
<div class="col-lg-4 col-md-6" |
|||
style="visibility: visible;"> |
|||
<div style="background-color: #fff;height: 100%;border-radius: 12px;padding: 35px 30px;"> |
|||
<div class="content"> |
|||
<img src="https://media.istockphoto.com/id/1069729858/vector/five-point-star-rating-icon.jpg?s=612x612&w=0&k=20&c=qjMq2RrfahWPP2EqPlUnq4BIB1vJrpviq0a5WgPJMa8=" class="img-responsive" height="46px" width="46px"> |
|||
<h4 class="mt-3"><a href="#" |
|||
style=" color: #121212; |
|||
font-size: 18px; |
|||
text-decoration: none; |
|||
font-weight: 700; |
|||
line-height: 1.2;"> Frequently Asked Question Snippet</a> |
|||
</h4> |
|||
<p style=" font-size: 16px; |
|||
font-weight: 400; |
|||
line-height: 1.5; |
|||
color: #212529;">A Frequently Asked Questions (FAQ) snippet is a section on a website that provides users with answers to common questions regarding a product, service, or topic. |
|||
</p> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 col-md-6"> |
|||
<div style="background-color: #fff; height: 100%;border-radius: 12px;padding: 35px 30px;"> |
|||
<div class="content"> |
|||
<img src="https://media.istockphoto.com/id/1069729858/vector/five-point-star-rating-icon.jpg?s=612x612&w=0&k=20&c=qjMq2RrfahWPP2EqPlUnq4BIB1vJrpviq0a5WgPJMa8=" class="img-responsive" height="46px" width="46px"> |
|||
<h4 class="mt-3"> |
|||
<a href="#" style=" color: #121212; |
|||
font-size: 18px; |
|||
text-decoration: none; |
|||
font-weight: 700; |
|||
line-height: 1.2;">Testimonial Snippet</a> |
|||
</h4> |
|||
<p style=" font-size: 16px; |
|||
font-weight: 400; |
|||
line-height: 1.5; |
|||
color: #212529;">A Testimonial Snippet is a feature where allowed users can submit their testimonials, which are then displayed for others to see. </p> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 col-md-6"> |
|||
<div style="background-color: #fff; height: 100%; |
|||
border-radius: 12px; |
|||
padding: 35px 30px;"> |
|||
<div class="content"> |
|||
<img src="https://media.istockphoto.com/id/1069729858/vector/five-point-star-rating-icon.jpg?s=612x612&w=0&k=20&c=qjMq2RrfahWPP2EqPlUnq4BIB1vJrpviq0a5WgPJMa8=" class="img-responsive" height="46px" width="46px"> |
|||
<h4 class="mt-3"><a href="#" style=" color: #121212; |
|||
font-size: 18px; |
|||
text-decoration: none; |
|||
font-weight: 700; |
|||
line-height: 1.2;">Product Offer Snippet</a></h4> |
|||
</div> |
|||
<p style=" font-size: 16px; |
|||
font-weight: 400; |
|||
line-height: 1.5; |
|||
color: #212529;">Snippet for highlighting products that are on sale or come with special promotions, attracting customer attention and driving conversions.</p> |
|||
|
|||
</a> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
<div class="row g-4" style="margin-bottom:15px"> |
|||
<div class="col-lg-4 col-md-6" |
|||
style="visibility: visible;"> |
|||
<div style="background-color: #fff;height: 100%;border-radius: 12px;padding: 35px 30px;"> |
|||
<div class="content"> |
|||
<img src="https://media.istockphoto.com/id/1069729858/vector/five-point-star-rating-icon.jpg?s=612x612&w=0&k=20&c=qjMq2RrfahWPP2EqPlUnq4BIB1vJrpviq0a5WgPJMa8=" class="img-responsive" height="46px" width="46px"> |
|||
<h4 class="mt-3"><a href="#" |
|||
style=" color: #121212; |
|||
font-size: 18px; |
|||
text-decoration: none; |
|||
font-weight: 700; |
|||
line-height: 1.2;">Price Collection Snippets</a> |
|||
</h4> |
|||
<p style=" font-size: 16px; |
|||
font-weight: 400; |
|||
line-height: 1.5; |
|||
color: #212529;">A powerful way to promote discounts, limited-time offers, or newly launched products.</p> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 col-md-6"> |
|||
<div style="background-color: #fff; height: 100%;border-radius: 12px;padding: 35px 30px;"> |
|||
<div class="content"> |
|||
<img src="https://media.istockphoto.com/id/1069729858/vector/five-point-star-rating-icon.jpg?s=612x612&w=0&k=20&c=qjMq2RrfahWPP2EqPlUnq4BIB1vJrpviq0a5WgPJMa8=" class="img-responsive" height="46px" width="46px"> |
|||
<h4 class="mt-3"> |
|||
<a href="#" style=" color: #121212; |
|||
font-size: 18px; |
|||
text-decoration: none; |
|||
font-weight: 700; |
|||
line-height: 1.2;">Top Deal Snippets</a> |
|||
</h4> |
|||
<p style=" font-size: 16px; |
|||
font-weight: 400; |
|||
line-height: 1.5; |
|||
color: #212529;">A highly effective way to showcase products that are currently available at special limited-time offers.</p> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-4 col-md-6"> |
|||
<div style="background-color: #fff; height: 100%; |
|||
border-radius: 12px; |
|||
padding: 35px 30px;"> |
|||
<div class="content"> |
|||
<img src="https://media.istockphoto.com/id/1069729858/vector/five-point-star-rating-icon.jpg?s=612x612&w=0&k=20&c=qjMq2RrfahWPP2EqPlUnq4BIB1vJrpviq0a5WgPJMa8=" class="img-responsive" height="46px" width="46px"> |
|||
<h4 class="mt-3"><a href="#" style=" color: #121212; |
|||
font-size: 18px; |
|||
text-decoration: none; |
|||
font-weight: 700; |
|||
line-height: 1.2;">Winter Collection Snippet</a></h4> |
|||
</div> |
|||
<p style=" font-size: 16px; |
|||
font-weight: 400; |
|||
line-height: 1.5; |
|||
color: #212529;">Highlighting curated selection of products that fall under the "Winter" category. </p> |
|||
|
|||
</a> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Mobile Responsiveness --> |
|||
<div class="pt-5 mt-5 float-left w-100"> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
<div class="col-lg-8"> |
|||
<h3 class="text-uppercase float-left font-weight-bold" |
|||
style="color:#004f73; line-height:47px; font-size:24px;">Mobile Responsive Design</h3> |
|||
<div class="w-50 float-left text-center arrow-black" style="margin-left:14px;"><img class="w-100" src="images/arrow-black.png"></div> |
|||
</div> |
|||
<div class="col-lg-12"> |
|||
<div class="w-100 float-left text-center" style="margin-left:14px;"><img class="w-100" src="images/mobile-view.jpg"></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Theme Features --> |
|||
<section class="container my-5"> |
|||
<div class="row"> |
|||
<div class="col-md-12"> |
|||
<ul role="tablist" class="nav nav-tabs justify-content-center d-flex justify-content-center" data-tabs="tabs" |
|||
style="border:none; background-color:unset; margin:0 auto"> |
|||
</ul> |
|||
</div> |
|||
<div class="col-md-12 tab-content ui-front" |
|||
style="border-radius:20px;border: 1px solid #D6E0FF; height:auto;padding: 20px;"> |
|||
|
|||
<div class="tab-pane active show fade" id="Features" role="tabpanel" aria-labelledby="features-1"> |
|||
<section class=""> |
|||
<section class="mt-5"> |
|||
<h2 class="pb-1" style="font-weight: 700; text-align: center;">Theme Features</h2> |
|||
<!-- row-1--> |
|||
<div class="row" style="max-height:600px" > |
|||
<div class="col-md-8 "> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: #303030; |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 50%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Desktop View</h3> |
|||
<p class="des" style="color: #c7c7c7; |
|||
font-size: 16px; |
|||
font-style: normal; |
|||
font-weight: 400; |
|||
line-height: 24px; |
|||
margin-bottom: 0;">User-friendly and modern looking theme makes your page more Stylish And Beautiful. |
|||
</p> |
|||
|
|||
</div> |
|||
<div class="mt-5 ms-5" style="width:600px;height:800px;"> |
|||
<img src="images/home_desk.png" alt="Grid item" class="img-fluid "> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
<!-- Mobile view --> |
|||
<div class="col-md-4"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: #303030; |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 50%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Mobile View</h3> |
|||
<p class="des" style="color: #c7c7c7; |
|||
font-size: 16px; |
|||
font-style: normal; |
|||
font-weight: 400; |
|||
line-height: 24px; |
|||
margin-bottom: 0;">It is easy to customize and use.Just drag and drop the building blocks to make attractive webpages. |
|||
|
|||
.</p> |
|||
|
|||
</div> |
|||
<div class="mt-2" style="display: flex; justify-content: center; align-items: center;"> |
|||
<img src="images/home-mob.png" style="height:300px;" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!--row-2 --> |
|||
<div class="row " style="margin-top:10px; margin-bottom: 24px;"> |
|||
<!-- About us--> |
|||
<div class="col-md-6"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">About Us Page</h3> |
|||
</div> |
|||
<div class="mt-5" > |
|||
<img src="images/about.png" style="width:100% ; height:400px" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
<!--Shop View --> |
|||
<div class="col-md-6"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Shop View</h3> |
|||
|
|||
</div> |
|||
<div class="mt-5"> |
|||
<img src="images/shop.png" style="width:100% ; height:400px;" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!--row-3 --> |
|||
<div class="row" style="margin-bottom: 20px;"> |
|||
<!-- Blog page--> |
|||
<div class="col-md-6"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Blog Preview</h3> |
|||
</div> |
|||
<div class="mt-5"> |
|||
<img src="images/blog.png" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
<!-- Wishlist --> |
|||
<div class="col-md-6"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Wishlist Preview</h3> |
|||
</div> |
|||
<div class=" mt-5" style="--aspect-ratioapt: 872/443;"> |
|||
<img src="images/wishlist.png" style="width:100%; height:330px;" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- --> |
|||
</section> |
|||
<!--Snippets--> |
|||
<section class="mt-5"> |
|||
<h2 class="pb-5" style="font-weight: 700; text-align: center;margin-bottom: 20px;">Snippets</h2> |
|||
<!-- Frequently asked --> |
|||
<div class="row" style="margin-bottom: 20px;"> |
|||
<div class="col-md-12"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Frequently Asked Questions Snippets</h3> |
|||
</div> |
|||
<div class="mt-5"> |
|||
<img src="images/frequently-asked-snippet.png" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- New testimonial --> |
|||
<div class="row" style="margin-bottom: 20px;"> |
|||
<div class="col-md-12"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Testimonial Snippets</h3> |
|||
</div> |
|||
<div class="mt-5"> |
|||
<img src="images/testimonial.png" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Offers --> |
|||
<div class="row" style="margin-bottom: 20px;"> |
|||
<div class="col-md-12"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Product Offers Snippets</h3> |
|||
</div> |
|||
<div class="mt-5" style="display: flex; justify-content: center; align-items: center;" > |
|||
<img src="images/offfers.png" style="width:200vh" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Team --> |
|||
<div class="row" style="margin-bottom: 20px;"> |
|||
<div class="col-md-12"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Our Team Snippets</h3> |
|||
</div> |
|||
<div class="mt-5" style="display: flex; justify-content: center; align-items: center;" > |
|||
<img src="images/team.png" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Price collection --> |
|||
<div class="row" style="margin-bottom: 20px;"> |
|||
<div class="col-md-12"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Price Collection Snippets</h3> |
|||
</div> |
|||
<div class="mt-5" style="display: flex; justify-content: center; align-items: center;" > |
|||
<img src="images/price-collection.png" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Subscription --> |
|||
<div class="row" style="margin-bottom: 20px;"> |
|||
<div class="col-md-12"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Subscription Snippets</h3> |
|||
</div> |
|||
<div class="mt-5" style="display: flex; justify-content: center; align-items: center;" > |
|||
<img src="images/subscription.png" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Top deal --> |
|||
<div class="row" style="margin-bottom: 20px;"> |
|||
<div class="col-md-12"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Top Deal Snippets</h3> |
|||
</div> |
|||
<div class="mt-5" style="display: flex; justify-content: center; align-items: center;" > |
|||
<img src="images/top-deals.png" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Winter Collection --> |
|||
<div class="row" style="margin-bottom: 20px;"> |
|||
<div class="col-md-12"> |
|||
<div style="border-radius: 10px; padding: 32px; |
|||
background-color: rgba(48, 48, 48, 1); |
|||
-webkit-backdrop-filter: blur(5px); |
|||
backdrop-filter: blur(5px); height: 100%;"> |
|||
<div class="info"> |
|||
<span class="label" style="font-size: 12px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: 32px; |
|||
color: #f14848; |
|||
margin-bottom: 13px; |
|||
text-transform: uppercase;">HIGHLIGHT</span> |
|||
<h3 class="text-white" style=" color: #fff; |
|||
font-size: 24px; |
|||
font-weight: 500; |
|||
line-height: 32px; |
|||
margin-bottom: 9px;">Winter Collection Snippets</h3> |
|||
</div> |
|||
<div class="mt-5" style="display: flex; justify-content: center; align-items: center;" > |
|||
<img src="images/winter-collection.png" alt="Grid item" class="img-fluid"> |
|||
</div> |
|||
<a href="#" target="_blank" class="url_link" name="grid_popup" |
|||
aria-label="Url link label"><span></span></a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
</section> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<!-- Our Services--> |
|||
<div class="my-5"> |
|||
<section id="services" class="mt-5" |
|||
style="border-radius: 16px; |
|||
border: 1px solid #EBEEF2; |
|||
background-color: #FFF; |
|||
padding: 60px 40px; |
|||
box-shadow: 0px 5px 20px -11px rgba(0, 0, 0, 0.25);"> |
|||
<div class="text-center mt-4"> |
|||
<h3 class="mb-0" style="color: #000; |
|||
text-align: center; |
|||
font-family: Montserrat; |
|||
font-size: 40px; |
|||
font-style: normal; |
|||
font-weight: 700; |
|||
line-height: normal; |
|||
text-transform: uppercase; |
|||
padding-bottom: 50px;">Our Services</h3> |
|||
</div> |
|||
<div class="row mt-3"> |
|||
<div class="col-lg-3 col-sm-12 mb-3"> |
|||
<a href="#" style="text-decoration:none"> |
|||
<div class="btn-lg btn-block p-4 mb-2 d-flex flex-column justify-content-center align-items-center" |
|||
style="font-size:25px; font-weight:bold;background-color:#FFE2E5; margin:auto; border-radius: 8px;"> |
|||
|
|||
<div class="d-flex justify-content-center align-items-center" |
|||
style="background-color:#FA5A7D; border-radius:50%; height:56px; width:56px"> |
|||
<img src="images/gear.svg" class="img-responsive" height="28px" width="28px"> |
|||
</div> |
|||
<span class="mt-3" style="font-size: 18px; |
|||
color: #121212; |
|||
font-weight: 600;"> Odoo Customization</span> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-lg-3 col-sm-12 mb-3"> |
|||
<a href="#" style="text-decoration:none"> |
|||
<div class="btn-lg btn-block p-4 mb-2 d-flex flex-column justify-content-center align-items-center" |
|||
style="font-size:25px; font-weight:bold;background-color:#FFF4DE; margin:auto; border-radius: 8px;"> |
|||
|
|||
<div class="d-flex justify-content-center align-items-center" |
|||
style="background-color:#FF947A; border-radius:50%; height:56px; width:56px"> |
|||
<img src="images/wrench-icon.svg" class="img-responsive" height="28px" width="28px"> |
|||
</div> |
|||
<span class="mt-3" style="font-size: 18px; |
|||
color: #121212; |
|||
font-weight: 600;"> Odoo Implementation</span> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-lg-3 col-sm-12 mb-3"> |
|||
<a href="#" style="text-decoration:none"> |
|||
<div class="btn-lg btn-block p-4 mb-2 d-flex flex-column justify-content-center align-items-center" |
|||
style="font-size:25px; font-weight:bold;background-color:#DCFCE7; margin:auto; border-radius: 8px;"> |
|||
|
|||
<div class="d-flex justify-content-center align-items-center" |
|||
style="background-color:#3CD856; border-radius:50%; height:56px; width:56px"> |
|||
<img src="images/life-ring-icon.svg" class="img-responsive" height="28px" width="28px"> |
|||
</div> |
|||
<span class="mt-3" style="font-size: 18px; |
|||
color: #121212; |
|||
font-weight: 600;">Odoo Support</span> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-lg-3 col-sm-12 mb-3"> |
|||
<a href="#" style="text-decoration:none"> |
|||
<div class="btn-lg btn-block p-4 mb-2 d-flex flex-column justify-content-center align-items-center" |
|||
style="font-size:25px; font-weight:bold;background-color:#F3E8FF; margin:auto; border-radius: 8px;"> |
|||
|
|||
<div class="d-flex justify-content-center align-items-center" |
|||
style="background-color:#BF83FF; border-radius:50%; height:56px; width:56px"> |
|||
<img src="images/arrows-repeat.svg" class="img-responsive" height="28px" width="28px"> |
|||
</div> |
|||
<span class="mt-3" style="font-size: 18px; |
|||
color: #121212; |
|||
font-weight: 600;">Odoo Migration</span> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-lg-3 col-sm-12 mb-3"> |
|||
<a href="#" style="text-decoration:none"> |
|||
<div class="btn-lg btn-block p-4 mb-2 d-flex flex-column justify-content-center align-items-center" |
|||
style="font-size:25px; font-weight:bold;background-color:#F1F9FF; margin:auto; border-radius: 8px;"> |
|||
|
|||
<div class="d-flex justify-content-center align-items-center" |
|||
style="background-color:#01649C; border-radius:50%; height:56px; width:56px"> |
|||
<img src="images/puzzle-piece-icon.svg" class="img-responsive" height="28px" width="28px"> |
|||
</div> |
|||
<span class="mt-3" style="font-size: 18px; |
|||
color: #121212; |
|||
font-weight: 600;">Odoo integration</span> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-lg-3 col-sm-12 mb-3"> |
|||
<a href="#" style="text-decoration:none"> |
|||
<div class="btn-lg btn-block p-4 mb-2 d-flex flex-column justify-content-center align-items-center" |
|||
style="font-size:25px; font-weight:bold;background-color:#EDF8ED; margin:auto; border-radius: 8px;"> |
|||
|
|||
<div class="d-flex justify-content-center align-items-center" |
|||
style="background-color:#69CC70; border-radius:50%; height:56px; width:56px"> |
|||
<img src="images/odoo-consultancy.svg" class="img-responsive" height="28px" width="28px"> |
|||
</div> |
|||
<span class="mt-3" style="font-size: 18px; |
|||
color: #121212; |
|||
font-weight: 600;">Odoo Consultancy</span> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-lg-3 col-sm-12 mb-3"> |
|||
<a href="#" style="text-decoration:none"> |
|||
<div class="btn-lg btn-block p-4 mb-2 d-flex flex-column justify-content-center align-items-center" |
|||
style="font-size:25px; font-weight:bold;background-color:#F1F6FF; margin:auto; border-radius: 8px;"> |
|||
|
|||
<div class="d-flex justify-content-center align-items-center" |
|||
style="background-color:#2E4556; border-radius:50%; height:56px; width:56px"> |
|||
<img src="images/odoo-licencing.svg" class="img-responsive" height="28px" width="28px"> |
|||
</div> |
|||
<span class="mt-3" style="font-size: 18px; |
|||
color: #121212; |
|||
font-weight: 600;">Odoo Licensing</span> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-lg-3 col-sm-12 mb-3"> |
|||
<a href="#" style="text-decoration:none"> |
|||
<div class="btn-lg btn-block p-4 mb-2 d-flex flex-column justify-content-center align-items-center" |
|||
style="font-size:25px; font-weight:bold;background-color:#FAF6EA; margin:auto; border-radius: 8px;"> |
|||
|
|||
<div class="d-flex justify-content-center align-items-center" |
|||
style="background-color:#FCD12C; border-radius:50%; height:56px; width:56px"> |
|||
<img src="images/hire-odoo.svg" class="img-responsive" height="28px" width="28px"> |
|||
</div> |
|||
<span class="mt-3" style="font-size: 18px; |
|||
color: #121212; |
|||
font-weight: 600;">Hire Odoo Developer</span> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
</div> |
|||
|
|||
</div> |
|||
</body> |
|||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"></script> |
|||
|
|||
</html> |
After Width: | Height: | Size: 434 KiB |
@ -0,0 +1,247 @@ |
|||
/** |
|||
* Owl Carousel v2.3.4 |
|||
* Copyright 2013-2018 David Deutsch |
|||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE |
|||
*/ |
|||
|
|||
/* General Owl Carousel Styling */ |
|||
.owl-carousel { |
|||
display: none; |
|||
width: 100%; |
|||
-webkit-tap-highlight-color: transparent; |
|||
position: relative; |
|||
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(0px, 0px, 0px); |
|||
} |
|||
|
|||
.owl-carousel .owl-wrapper, |
|||
.owl-carousel .owl-item { |
|||
-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 { |
|||
position: relative; |
|||
min-height: 1px; |
|||
float: left; |
|||
-webkit-backface-visibility: hidden; |
|||
-webkit-tap-highlight-color: transparent; |
|||
-webkit-touch-callout: none; |
|||
} |
|||
|
|||
.owl-carousel .owl-item img { |
|||
display: block; |
|||
width: 100%; |
|||
} |
|||
|
|||
.owl-carousel .owl-nav.disabled, |
|||
.owl-carousel .owl-dots.disabled { |
|||
display: none; |
|||
} |
|||
|
|||
.owl-carousel .owl-nav .owl-prev, |
|||
.owl-carousel .owl-nav .owl-next, |
|||
.owl-carousel .owl-dot { |
|||
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-prev, |
|||
.owl-carousel .owl-nav button.owl-next, |
|||
.owl-carousel button.owl-dot { |
|||
background: none; |
|||
color: inherit; |
|||
border: none; |
|||
padding: 0 !important; |
|||
font: inherit; |
|||
} |
|||
|
|||
.owl-carousel.owl-loaded { |
|||
display: block; |
|||
} |
|||
|
|||
.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; |
|||
} |
|||
|
|||
/* No Js */ |
|||
.no-js .owl-carousel { |
|||
display: block; |
|||
} |
|||
|
|||
/* Responsive Styling */ |
|||
|
|||
/* Mobile View - 1 item per slide */ |
|||
@media (max-width: 767px) { |
|||
.owl-carousel .item { |
|||
width: 100% !important; /* 1 item per slide on mobile */ |
|||
} |
|||
} |
|||
|
|||
/* Tablet View - 2 items per slide */ |
|||
@media (min-width: 768px) and (max-width: 1023px) { |
|||
.owl-carousel .item { |
|||
width: 100%; /* 2 items per slide on tablets */ |
|||
} |
|||
} |
|||
|
|||
/* Desktop View - 3 items per slide */ |
|||
@media (min-width: 1024px) { |
|||
.owl-carousel .item { |
|||
width: 33.33%; /* 3 items per slide on desktops */ |
|||
} |
|||
} |
|||
|
|||
/* Owl Carousel - Animate Plugin */ |
|||
.owl-carousel .animated { |
|||
animation-duration: 1000ms; |
|||
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 Carousel - Auto Height Plugin */ |
|||
.owl-height { |
|||
transition: height 500ms ease-in-out; |
|||
} |
|||
|
|||
/* Owl Carousel - Lazy Load Plugin */ |
|||
.owl-carousel .owl-item .owl-lazy { |
|||
opacity: 0; |
|||
transition: opacity 400ms ease; |
|||
} |
|||
|
|||
.owl-carousel .owl-item .owl-lazy[src^=""], .owl-carousel .owl-item .owl-lazy:not([src]) { |
|||
max-height: 0; |
|||
} |
|||
|
|||
.owl-carousel .owl-item img.owl-lazy { |
|||
transform-style: preserve-3d; |
|||
} |
|||
|
|||
/* Owl Carousel - Video Plugin */ |
|||
.owl-carousel .owl-video-wrapper { |
|||
position: relative; |
|||
height: 100%; |
|||
background: #000; |
|||
} |
|||
|
|||
.owl-carousel .owl-video-play-icon { |
|||
position: absolute; |
|||
height: 80px; |
|||
width: 80px; |
|||
left: 50%; |
|||
top: 50%; |
|||
margin-left: -40px; |
|||
margin-top: -40px; |
|||
background: url("owl.video.play.png") no-repeat; |
|||
cursor: pointer; |
|||
z-index: 1; |
|||
-webkit-backface-visibility: hidden; |
|||
transition: transform 100ms 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-tn, |
|||
.owl-carousel .owl-video-playing .owl-video-play-icon { |
|||
display: none; |
|||
} |
|||
|
|||
.owl-carousel .owl-video-tn { |
|||
opacity: 0; |
|||
height: 100%; |
|||
background-position: center center; |
|||
background-repeat: no-repeat; |
|||
background-size: contain; |
|||
transition: opacity 400ms 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-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} |
@ -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} |
After Width: | Height: | Size: 4.2 MiB |
After Width: | Height: | Size: 634 KiB |
After Width: | Height: | Size: 15 MiB |
After Width: | Height: | Size: 3.8 MiB |
After Width: | Height: | Size: 1.3 MiB |
After Width: | Height: | Size: 471 B |
After Width: | Height: | Size: 492 B |
After Width: | Height: | Size: 191 KiB |
After Width: | Height: | Size: 832 KiB |
After Width: | Height: | Size: 239 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 135 KiB |
After Width: | Height: | Size: 146 KiB |
After Width: | Height: | Size: 3.2 MiB |
After Width: | Height: | Size: 1.3 MiB |
After Width: | Height: | Size: 1015 B |
After Width: | Height: | Size: 134 KiB |
After Width: | Height: | Size: 2.6 MiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 5.8 MiB |
After Width: | Height: | Size: 102 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 24 MiB |
After Width: | Height: | Size: 15 MiB |
After Width: | Height: | Size: 15 MiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 934 KiB |
After Width: | Height: | Size: 2.1 MiB |
After Width: | Height: | Size: 2.6 MiB |
After Width: | Height: | Size: 2.1 MiB |
After Width: | Height: | Size: 2.5 MiB |