Browse Source

Oct 13 : [UPDT] Bug Fixed 'product_visibility_website'

pull/295/head
AjmalCybro 2 years ago
parent
commit
ec710f18ba
  1. 5
      product_visibility_website/__manifest__.py
  2. 88
      product_visibility_website/controllers/main.py
  3. 5
      product_visibility_website/doc/RELEASE_NOTES.md
  4. 1
      product_visibility_website/models/__init__.py
  5. 155
      product_visibility_website/models/res_config_settings.py
  6. 76
      product_visibility_website/models/website_product_visibility.py
  7. BIN
      product_visibility_website/static/description/assets/screenshots/10.png
  8. BIN
      product_visibility_website/static/description/assets/screenshots/11.png
  9. BIN
      product_visibility_website/static/description/assets/screenshots/12.png
  10. BIN
      product_visibility_website/static/description/assets/screenshots/13.png
  11. BIN
      product_visibility_website/static/description/assets/screenshots/14.png
  12. BIN
      product_visibility_website/static/description/assets/screenshots/15.png
  13. BIN
      product_visibility_website/static/description/assets/screenshots/6.png
  14. BIN
      product_visibility_website/static/description/assets/screenshots/7.png
  15. BIN
      product_visibility_website/static/description/assets/screenshots/8.png
  16. BIN
      product_visibility_website/static/description/assets/screenshots/9.png
  17. 504
      product_visibility_website/static/description/index.html
  18. 90
      product_visibility_website/views/res_config_settings_views.xml
  19. 70
      product_visibility_website/views/website_product_visibility.xml

5
product_visibility_website/__manifest__.py

@ -22,7 +22,7 @@
################################################################################
{
'name': 'Website Product Visibility',
'version': '16.0.1.1.0',
'version': '16.0.1.1.1',
'category': 'Website',
'summary': 'Website Product visibility for Users',
'description': """Website Product visibility for Users""",
@ -33,8 +33,9 @@
'depends': ['contacts', 'website_sale','website'],
'data': [
'views/website_product_visibility.xml',
'views/res_config_settings_views.xml'
],
'images': ['static/description/banner.png'],
'images': ['static/description/1.png'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,

88
product_visibility_website/controllers/main.py

@ -75,12 +75,7 @@ class ProductVisibilityCon(WebsiteSale):
domains.append([('public_categ_ids', 'child_of', categories.ids)])
return expression.AND(domains)
@http.route([
'/shop',
'/shop/page/<int:page>',
'/shop/category/<model("product.public.category"):category>',
'/shop/category/<model("product.public.category"):category>/page/<int:page>',
], type='http', auth="public", website=True, sitemap=sitemap_shop)
@http.route(type='http', auth="public", website=True)
def shop(self, page=0, category=None, search='', min_price=0.0,
max_price=0.0, ppg=False, **post):
available_categ = available_products = ''
@ -91,14 +86,15 @@ class ProductVisibilityCon(WebsiteSale):
'filter_mode')
products = literal_eval(
request.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_product_ids',
'False'))
'website_product_visibility.'
'available_products_for_guest_ids', 'False'))
if mode == 'product_only':
available_products = request.env['product.template'].search(
[('id', 'in', products)])
cat = literal_eval(
request.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_cat_ids', 'False'))
'website_product_visibility.available_cat_for_guest_ids',
'False'))
available_categ = request.env['product.public.category'].search(
[('id', 'in', cat)])
else:
@ -119,7 +115,28 @@ class ProductVisibilityCon(WebsiteSale):
categ = Category.search([('parent_id', '=', False), (
'product_tmpl_ids', 'in', available_products.ids)])
# supering shop***
if not available_categ and not available_products:
if not available_categ and not available_products and \
request.env.user.has_group(
'base.group_portal'):
mode = request.env['ir.config_parameter'].sudo().get_param(
'filter_mode_portal')
products = literal_eval(
request.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.'
'available_products_for_portal_ids', 'False'))
if mode == 'product_only':
available_products = request.env['product.template'].search(
[('id', 'in', products)])
cat = literal_eval(
request.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_cat_for_portal_ids',
'False'))
available_categ = request.env['product.public.category'].search(
[('id', 'in', cat)])
if not available_categ and not available_products and \
not request.env.user.has_group(
'base.group_user'):
return super(ProductVisibilityCon, self).shop(page, category,
search, ppg, **post)
add_qty = int(post.get('add_qty', 1))
@ -195,20 +212,24 @@ class ProductVisibilityCon(WebsiteSale):
conversion_rate=conversion_rate,
**post
)
fuzzy_search_term, product_count, search_product = self._shop_lookup_products(
attrib_set, options, post, search, website)
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.
# TODO Find an alternative way to obtain the domain through the
# search metadata.
Product = request.env['product.template'].with_context(
bin_size=True)
domain = self._get_search_domain(search, category, attrib_values)
# This is ~4 times more efficient than a search for the cheapest and most expensive products
# 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}
SELECT COALESCE(MIN(list_price), 0) * {conversion_rate},
COALESCE(MAX(list_price), 0) * {conversion_rate}
FROM {from_clause}
WHERE {where_clause}
"""
@ -222,10 +243,12 @@ class ProductVisibilityCon(WebsiteSale):
# price filter is set to their respective available prices when the specified
# min exceeds the max, and / or the specified max is lower than the available min.
if min_price:
min_price = min_price if min_price <= available_max_price else available_min_price
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
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
@ -369,14 +392,14 @@ class ProductVisibilityCon(WebsiteSale):
'filter_mode')
products = literal_eval(
request.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_product_ids',
'False'))
'website_product_visibility.'
'available_products_for_guest_ids', 'False'))
if mode == 'product_only':
available_products = request.env['product.template'].search(
[('id', 'in', products)])
cat = literal_eval(
request.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_cat_ids',
'website_product_visibility.available_cat_for_guest_ids',
'False'))
available_categ = request.env['product.public.category'].search(
[('id', 'in', cat)])
@ -394,7 +417,27 @@ class ProductVisibilityCon(WebsiteSale):
max_nb_chars = options.get('max_nb_chars', 999)
category = options.get('category')
attrib_values = options.get('attrib_values')
if not available_products and not available_categ:
if not available_categ and not available_products \
and request.env.user.has_group(
'base.group_portal'):
mode = request.env['ir.config_parameter'].sudo().get_param(
'filter_mode_portal')
products = literal_eval(
request.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.'
'available_products_for_portal_ids', 'False'))
if mode == 'product_only':
available_products = request.env['product.template'].search(
[('id', 'in', products)])
cat = literal_eval(
request.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_cat_for_portal_ids',
'False'))
available_categ = request.env['product.public.category'].search(
[('id', 'in', cat)])
if not available_products and not available_categ \
and not request.env.user.has_group(
'base.group_portal'):
domain = self._get_search_domain(term, category, attrib_values,
display_description)
else:
@ -422,7 +465,8 @@ class ProductVisibilityCon(WebsiteSale):
if display_price:
FieldMonetary = request.env['ir.qweb.field.monetary']
monetary_options = {
'display_currency': request.website.get_current_pricelist().currency_id,
'display_currency':
request.website.get_current_pricelist().currency_id,
}
for res_product, product in zip(res['products'], products):
combination_info = product._get_combination_info(

5
product_visibility_website/doc/RELEASE_NOTES.md

@ -8,3 +8,8 @@
#### Version 16.0.1.0.0
##### FIX
- Bug Fixed
#### 12.10.2023
#### Version 16.0.1.1.1
##### FIX
- Feature Of Website Product Visibility For Portal Users Is Added

1
product_visibility_website/models/__init__.py

@ -20,4 +20,5 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
################################################################################
from . import res_config_settings
from . import website_product_visibility

155
product_visibility_website/models/res_config_settings.py

@ -0,0 +1,155 @@
# -*- coding: utf-8 -*-
################################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-TODAY Cybrosys Technologies (<https://www.cybrosys.com>)
# Author: Neeraj Krishnan V M, Saneen K (<https://www.cybrosys.com>)
#
# This program is free software: you can modify
# it under the terms of the GNU Affero General Public License (AGPL) as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# 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 for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
################################################################################
from odoo import fields, models, api
from ast import literal_eval
class ResConfigSettings(models.TransientModel):
"""Inherit the model res.config.settings for adding the fields for
selecting the product for website visitors and portal users"""
_inherit = 'res.config.settings'
product_visibility_guest_user = fields.Boolean(
string="Product visibility Guest User", help="Product Visibility")
filter_mode = fields.Selection([('product_only', 'Product Wise'),
('categ_only', 'Category Wise')],
string='Filter Mode', default='product_only')
available_products_for_guest_ids = fields.Many2many(
'product.template',
string='Available Product',
domain="[('is_published', '=', True)]",
help='The website will only display products which are within one of '
'the selected category trees. If no category is specified,all '
'available products will be shown')
available_cat_for_guest_ids = fields.Many2many(
'product.public.category',
string='Available Product Categories',
help='The website will only display products which are selected. If no '
'product is specified,all available products will be shown')
product_visibility_portal_user = fields.Boolean(
string="Product visibility Portal User", help="Product Visibility")
filter_mode_portal = fields.Selection([('product_only', 'Product Wise'),
('categ_only', 'Category Wise')],
string='Filter Mode',
default='product_only')
available_products_for_portal_ids = fields.Many2many(
'product.template',
relation="available_product_for_portal_rel",
string='Available Product',
domain="[('is_published', '=', True)]",
help='The website will only display products which are within one of '
'the selected category trees. If no category is specified,all '
'available products will be shown')
available_cat_for_portal_ids = fields.Many2many(
'product.public.category',
relation="available_cat_for_portal_rel",
string='Available Product Categories',
help='The website will only display products which are selected. If no '
'product is specified,all available products will be shown')
@api.model
def set_values(self):
res = super(ResConfigSettings, self).set_values()
self.env['ir.config_parameter'].sudo().set_param(
'product_visibility_guest_user',
self.product_visibility_guest_user)
self.env['ir.config_parameter'].sudo().set_param(
'product_visibility_portal_user',
self.product_visibility_portal_user)
self.env['ir.config_parameter'].sudo().set_param('filter_mode',
self.filter_mode)
self.env['ir.config_parameter'].sudo().set_param(
'filter_mode_portal', self.filter_mode_portal)
if not self.product_visibility_guest_user:
self.available_cat_for_guest_ids = None
self.available_products_for_guest_ids = None
self.env['ir.config_parameter'].sudo().set_param('filter_mode',
'product_only')
if not self.product_visibility_portal_user:
self.available_products_for_portal_ids = None
self.available_cat_for_portal_ids = None
if self.filter_mode == 'product_only':
self.available_cat_for_guest_ids = None
elif self.filter_mode == 'categ_only':
self.available_products_for_guest_ids = None
if self.filter_mode_portal == 'product_only':
self.available_cat_for_portal_ids = None
elif self.filter_mode_portal == 'categ_only':
self.available_products_for_portal_ids = None
self.env['ir.config_parameter'].sudo().set_param(
'website_product_visibility.available_products_for_guest_ids',
self.available_products_for_guest_ids.ids)
self.env['ir.config_parameter'].sudo().set_param(
'website_product_visibility.available_products_for_portal_ids',
self.available_products_for_portal_ids.ids)
self.env['ir.config_parameter'].sudo().set_param(
'website_product_visibility.available_cat_for_guest_ids',
self.available_cat_for_guest_ids.ids)
self.env['ir.config_parameter'].sudo().set_param(
'website_product_visibility.available_cat_for_portal_ids',
self.available_cat_for_portal_ids.ids)
return res
@api.model
def get_values(self):
res = super(ResConfigSettings, self).get_values()
product_visibility_guest_user = self.env[
'ir.config_parameter'].sudo().get_param(
'product_visibility_guest_user')
product_visibility_portal_user = self.env[
'ir.config_parameter'].sudo().get_param(
'product_visibility_portal_user')
filter_mode = self.env['ir.config_parameter'].sudo().get_param(
'filter_mode')
filter_mode_portal = self.env['ir.config_parameter'].sudo().get_param(
'filter_mode_portal')
available_products_for_guest_ids = literal_eval(
self.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_products_for_guest_ids',
'False')) or []
available_products_for_portal_ids = literal_eval(
self.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_products_for_portal_ids',
'False')) or []
available_cat_for_guest_ids = literal_eval(
self.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_cat_for_guest_ids',
'False')) or []
available_cat_for_portal_ids = literal_eval(
self.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_cat_for_portal_ids',
'False')) or []
res.update(
product_visibility_guest_user=product_visibility_guest_user,
product_visibility_portal_user=product_visibility_portal_user,
filter_mode=filter_mode if filter_mode else 'product_only',
filter_mode_portal=filter_mode_portal if filter_mode_portal
else 'product_only',
available_products_for_guest_ids=[
(6, 0, available_products_for_guest_ids)],
available_products_for_portal_ids=[
(6, 0, available_products_for_portal_ids)],
available_cat_for_guest_ids=[(6, 0, available_cat_for_guest_ids)],
available_cat_for_portal_ids=[(6, 0, available_cat_for_portal_ids)]
)
return res

76
product_visibility_website/models/website_product_visibility.py

@ -21,7 +21,6 @@
#
################################################################################
from odoo import fields, models, api
from ast import literal_eval
class ProductVisibility(models.Model):
@ -64,78 +63,3 @@ class ProductVisibility(models.Model):
if self.filter_mode == 'null':
self.website_available_cat_ids = None
self.website_available_product_ids = None
class WebsiteGuestVisibility(models.TransientModel):
"""Inherit the model res.config.settings for adding the fields for
selecting the product for visitors"""
_inherit = 'res.config.settings'
product_visibility_guest_user = fields.Boolean(
string="Product visibility Guest User", help="Product Visibility")
filter_mode = fields.Selection([('product_only', 'Product Wise'),
('categ_only', 'Category Wise')],
string='Filter Mode', default='product_only')
available_product_ids = fields.Many2many('product.template',
string='Available Product',
domain="[('is_published', '=', "
"True)]",
help='The website will only '
'display products which are '
'within one of the selected'
' category trees. If no'
' category is specified,'
'all available products '
'will be shown')
available_cat_ids = fields.Many2many('product.public.category',
string='Available Product Categories',
help='The website will only display '
'products which are selected.'
' If no product is specified,'
'all available products will be '
'shown')
@api.model
def set_values(self):
res = super(WebsiteGuestVisibility, self).set_values()
self.env['ir.config_parameter'].sudo().set_param(
'product_visibility_guest_user',
self.product_visibility_guest_user)
self.env['ir.config_parameter'].sudo().set_param('filter_mode',
self.filter_mode)
if not self.product_visibility_guest_user:
self.available_cat_ids = None
self.available_product_ids = None
self.env['ir.config_parameter'].sudo().set_param('filter_mode',
'product_only')
if self.filter_mode == 'product_only':
self.available_cat_ids = None
elif self.filter_mode == 'categ_only':
self.available_product_ids = None
self.env['ir.config_parameter'].sudo().set_param(
'website_product_visibility.available_product_ids',
self.available_product_ids.ids)
self.env['ir.config_parameter'].sudo().set_param(
'website_product_visibility.available_cat_ids',
self.available_cat_ids.ids)
return res
@api.model
def get_values(self):
res = super(WebsiteGuestVisibility, self).get_values()
product_ids = literal_eval(
self.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_product_ids', 'False'))
cat_ids = literal_eval(self.env['ir.config_parameter'].sudo().get_param(
'website_product_visibility.available_cat_ids', 'False'))
mod = self.env['ir.config_parameter'].sudo().get_param('filter_mode')
if mod:
res.update(
product_visibility_guest_user=self.env[
'ir.config_parameter'].sudo().get_param(
'product_visibility_guest_user'),
filter_mode=mod if mod else 'product_only',
available_product_ids=[(6, 0, product_ids)],
available_cat_ids=[(6, 0, cat_ids)],
)
return res

BIN
product_visibility_website/static/description/assets/screenshots/10.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 111 KiB

BIN
product_visibility_website/static/description/assets/screenshots/11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
product_visibility_website/static/description/assets/screenshots/12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

BIN
product_visibility_website/static/description/assets/screenshots/13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
product_visibility_website/static/description/assets/screenshots/14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

BIN
product_visibility_website/static/description/assets/screenshots/15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

BIN
product_visibility_website/static/description/assets/screenshots/6.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 156 KiB

BIN
product_visibility_website/static/description/assets/screenshots/7.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 KiB

After

Width:  |  Height:  |  Size: 145 KiB

BIN
product_visibility_website/static/description/assets/screenshots/8.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 100 KiB

BIN
product_visibility_website/static/description/assets/screenshots/9.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

After

Width:  |  Height:  |  Size: 148 KiB

504
product_visibility_website/static/description/index.html

@ -1,19 +1,20 @@
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42" style="width: 42px; height: 42px;" />
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
@ -21,66 +22,72 @@
<!-- END OF TITLE BAR -->
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">Website Product Visibility</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">Website Product visibility for logged in and logged out users/Visitors</p>
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Website Product Visibility</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
Website Product visibility for logged in and logged out
users/Visitors</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif"
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;" />
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;"/>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png" />
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Explore This
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
more about this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36" />
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36" />
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">See
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">See
key screenshots of this module
</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36" />
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
@ -88,134 +95,222 @@
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png" />
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Overview
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Overview
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
This module helps you to make visible only the filtered products and product categories for a logged in and logged out users/visitors.
Also, it enables the user to search products and product categories only from those available products and categories.
This module helps you to make visible only the filtered products and
product categories for a logged in and logged out users/visitors.
Also, it enables the user to search products and product categories only
from those available products and categories.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png" />
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Features
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Features
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center" style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2" />
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Filter according to the logged users</span>
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
Filter product and product categories according to the logged user.</p>
Filter product and product categories according to the logged
user.</p>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2" />
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Filter according to the public users/visitors</span>
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
Filter product and product categories according to the public users/visitors.</p>
Filter product and product categories according to the public
users/visitors.</p>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2" />
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Restrict user searches to available product/category only</span>
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
User can only search product and category among from the available product/category.</p>
</div>
User can only search product and category among from the
available product/category.</p>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="screenshots">
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png" />
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Screenshots
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Set filter for a logged user</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Setting the filtering mode for a logged user.</p>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Set filter for a logged user</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Setting the filtering mode for a logged user.</p>
<img src="assets/screenshots/1.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Product wise filtering for website shop (Logged in Users)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Product wise filtering mode for logged user in website shop.</p>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product wise filtering for website shop (Logged in Users)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Product wise filtering mode for logged user in website shop.</p>
<img src="assets/screenshots/2.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Product wise visibility for website shop (Product wise)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Product visibility (Product wise) for the logged user in website shop.</p>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product wise visibility for website shop (Product wise)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Product visibility (Product wise) for the logged user in website
shop.</p>
<img src="assets/screenshots/3.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Category wise filtering for website shop (Logged in Users)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Category wise filtering mode for logged user in website shop.</p>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Category wise filtering for website shop (Logged in Users)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Category wise filtering mode for logged user in website
shop.</p>
<img src="assets/screenshots/4.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Product visibility for website shop (Category wise)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Product visibility (Category wise) for the logged user in website shop.</p>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product visibility for website shop (Category wise)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Product visibility (Category wise) for the logged user in
website shop.</p>
<img src="assets/screenshots/5.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Product wise filtering for website shop (Visitors)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Product wise filtering mode for the visitors in the website shop.</p>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product wise filtering for website shop (Portal Users)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Product wise filtering mode for the portal users in the website
shop.</p>
<img src="assets/screenshots/6.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Product wise visibility for website shop (Visitors)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Product visibility (Product wise) for the visitors in website shop.</p>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Set filter for a portal user</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Setting the filtering mode for a portal user as No Filter.</p>
<img src="assets/screenshots/7.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Category wise filtering for website shop (Visitors)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Category wise filtering mode for the visitors in the website shop.</p>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product wise visibility for website shop (Portal Users)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Product visibility (Product wise) for the portal users in
website shop when no filter is set for them.</p>
<img src="assets/screenshots/8.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Product visibility for website shop visitors (Category wise)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Product visibility (Category wise) for the visitors in website shop.</p>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Category wise filtering for website shop (Portal Users)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Category wise filtering mode for the portal users in the website
shop.</p>
<img src="assets/screenshots/9.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Search available product from the list</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Search product from the available product list.</p>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product visibility for website shop portal users (Category
wise)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Product visibility (Category wise) for the portal users in
website shop when no filter is set for them.</p>
<img src="assets/screenshots/10.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product wise filtering for website shop (Visitors)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Product wise filtering mode for the visitors in the website
shop.</p>
<img src="assets/screenshots/11.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product wise visibility for website shop (Visitors)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Product visibility (Product wise) for the visitors in website
shop.</p>
<img src="assets/screenshots/12.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Category wise filtering for website shop (Visitors)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Category wise filtering mode for the visitors in the website
shop.</p>
<img src="assets/screenshots/13.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product visibility for website shop visitors (Category
wise)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Product visibility (Category wise) for the visitors in website
shop.</p>
<img src="assets/screenshots/14.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Search available product from the list</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Search product from the available product list.</p>
<img src="assets/screenshots/15.png" class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png" />
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Related
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related
Products
</h2>
</div>
@ -225,65 +320,89 @@
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/dynamic_accounts_report/" target="_blank">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/dynamic_accounts_report/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/1.png">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/1.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/custom_gantt_view/" target="_blank">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/custom_gantt_view/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/2.png">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/2.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/project_custom_gantt/" target="_blank">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/project_custom_gantt/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/3.png">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/account_reports_xlsx/" target="_blank">
<div class="carousel-item active"
style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/account_reports_xlsx/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/4.png">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/4.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/base_accounting_kit/" target="_blank">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/base_accounting_kit/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/5.png">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/5.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/hr_payroll_community/" target="_blank">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/hr_payroll_community/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/6.png">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/6.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right"
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i
class="fa fa-chevron-left"
style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1"
data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</a>
</div>
</div>
</div>
@ -291,12 +410,15 @@
<!-- OUR SERVICES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png" />
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our Services
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Services
</h2>
</div>
@ -304,30 +426,36 @@
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px">
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px">
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
@ -335,10 +463,12 @@
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
@ -346,20 +476,24 @@
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px">
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px">
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
@ -367,30 +501,36 @@
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px">
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px">
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px">
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
@ -402,12 +542,15 @@
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png" />
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our
Industries
</h2>
</div>
@ -416,8 +559,9 @@
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px">
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/trading-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
@ -430,8 +574,9 @@
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px">
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/pos-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
@ -444,8 +589,9 @@
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/education-black.png" class="img-responsive mb-3" height="48px" width="48px">
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/education-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
@ -457,9 +603,10 @@
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px"
width="48px">
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/manufacturing-black.png"
class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
@ -471,8 +618,9 @@
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px">
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
@ -485,8 +633,9 @@
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px">
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/service-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
@ -498,8 +647,9 @@
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" width="48px">
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/restaurant-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
@ -511,8 +661,9 @@
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px">
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/hotel-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
@ -528,12 +679,15 @@
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png" />
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Support
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support
</h2>
</div>
<div class="container mt-5">
@ -541,12 +695,14 @@
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48" style="width: 42px; height: 42px;" />
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48"
style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help? Get in touch.</p>
<p style="line-height: 100%;">Got questions or need help?
Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
@ -557,14 +713,16 @@
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52" style="width: 52px; height: 52px;" />
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52"
style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">+91 86068
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
+91 86068
27707</p>
</a>
</div>
@ -574,7 +732,7 @@
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;" />
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>

90
product_visibility_website/views/res_config_settings_views.xml

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">
res.config.settings.view.form.inherit.product.visibility.website
</field>
<field name="model">res.config.settings</field>
<field name="inherit_id"
ref="website.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('app_settings_block')]/div[@id='website_info_settings']"
position="after">
<div class="app_settings_block" data-string="Website"
string="Website">
<h2>Product Visibility</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="product_visibility_guest_user"/>
</div>
<div class="o_setting_right_pane">
<label for="product_visibility_guest_user"/>
<div class="text-muted">
Enable Product Visibility
</div>
<div attrs="{'invisible': [('product_visibility_guest_user', '=', False)]}">
<div class="mt16">
<label class="o_light_label col-lg-3"
for="filter_mode"/>
<field name="filter_mode"
widget="radio"/>
</div>
<div class="mt16"
attrs="{'invisible': [('filter_mode', 'in', ['categ_only'])]}">
<label class="o_light_label col-lg-3"
for="available_products_for_portal_ids"/>
<field name="available_products_for_guest_ids"
widget="many2many_tags"/>
</div>
<div class="mt16"
attrs="{'invisible': [('filter_mode', 'in', ['product_only'])]}">
<label class="o_light_label col-lg-3"
for="available_cat_for_guest_ids"/>
<field name="available_cat_for_guest_ids"
widget="many2many_tags"/>
</div>
</div>
</div>
</div>
</div>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="product_visibility_portal_user"/>
</div>
<div class="o_setting_right_pane">
<label for="product_visibility_portal_user"/>
<div class="text-muted">
Enable Product Visibility
</div>
<div attrs="{'invisible': [('product_visibility_portal_user', '=', False)]}">
<div class="mt16">
<label class="o_light_label col-lg-3"
for="filter_mode_portal"/>
<field name="filter_mode_portal"
widget="radio"/>
</div>
<div class="mt16"
attrs="{'invisible': [('filter_mode_portal', 'in', ['categ_only'])]}">
<label class="o_light_label col-lg-3"
for="available_products_for_portal_ids"/>
<field name="available_products_for_portal_ids"
widget="many2many_tags"/>
</div>
<div class="mt16"
attrs="{'invisible': [('filter_mode_portal', 'in', ['product_only'])]}">
<label class="o_light_label col-lg-3"
for="available_cat_for_portal_ids"/>
<field name="available_cat_for_portal_ids"
widget="many2many_tags"/>
</div>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

70
product_visibility_website/views/website_product_visibility.xml

@ -1,65 +1,33 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id="view_partner_form" model="ir.ui.view">
<field name="name"> res.partner.view.form.inherit.product.visibility.website</field>
<record id="view_partner_form" model="ir.ui.view">
<field name="name">
res.partner.view.form.inherit.product.visibility.website
</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//sheet/notebook/page[@name='internal_notes']" position="after">
<page name="product_visibility" string="Product Visibility" groups="website.group_website_designer">
<group name ='container_row_2'>
<xpath expr="//sheet/notebook/page[@name='internal_notes']"
position="after">
<page name="product_visibility" string="Product Visibility"
groups="website.group_website_designer">
<group name='container_row_2'>
<field name="filter_mode" widget="radio"/>
</group>
<group name="container_row_2">
<field name="website_available_cat_ids" widget="many2many_tags" attrs="{'invisible': [('filter_mode', 'in', ['product_only','null'])]}" />
</group>
<group name="container_row_3">
<field name="website_available_product_ids" widget="many2many_tags" attrs="{'invisible': [('filter_mode', 'in', ['categ_only','null'])]}" />
</group>
<group name="container_row_2">
<field name="website_available_cat_ids"
widget="many2many_tags"
attrs="{'invisible': [('filter_mode', 'in', ['product_only','null'])]}"/>
</group>
<group name="container_row_3">
<field name="website_available_product_ids"
widget="many2many_tags"
attrs="{'invisible': [('filter_mode', 'in', ['categ_only','null'])]}"/>
</group>
</page>
</xpath>
</field>
</record>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.product.visibility.website</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="website.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('app_settings_block')]/div[@id='website_info_settings']" position="after">
<div class="app_settings_block" data-string="Website" string="Website">
<h2>Product Visibility</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box" >
<div class="o_setting_left_pane">
<field name="product_visibility_guest_user"/>
</div>
<div class="o_setting_right_pane">
<label for="product_visibility_guest_user"/>
<div class="text-muted">
Enable Product Visibility
</div>
<div attrs="{'invisible': [('product_visibility_guest_user', '=', False)]}">
<div class="mt16">
<label class="o_light_label col-lg-3" for="filter_mode"/>
<field name="filter_mode" widget="radio"/>
</div>
<div class="mt16" attrs="{'invisible': [('filter_mode', 'in', ['categ_only'])]}">
<label class="o_light_label col-lg-3" for="available_product_ids"/>
<field name="available_product_ids" widget="many2many_tags" />
</div>
<div class="mt16" attrs="{'invisible': [('filter_mode', 'in', ['product_only'])]}">
<label class="o_light_label col-lg-3" for="available_cat_ids"/>
<field name="available_cat_ids" widget="many2many_tags" />
</div>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</data>
</odoo>

Loading…
Cancel
Save