Browse Source

Oct 18 : [FIX] Bug Fixed 'product_visibility_website'

pull/295/head
AjmalCybro 2 years ago
parent
commit
76374a8674
  1. 4
      product_visibility_website/__manifest__.py
  2. 120
      product_visibility_website/controllers/main.py
  3. 5
      product_visibility_website/doc/RELEASE_NOTES.md
  4. 1
      product_visibility_website/models/__init__.py
  5. 107
      product_visibility_website/models/website.py
  6. BIN
      product_visibility_website/static/description/assets/modules/1.png
  7. BIN
      product_visibility_website/static/description/assets/modules/2.png
  8. BIN
      product_visibility_website/static/description/assets/modules/3.png
  9. BIN
      product_visibility_website/static/description/assets/modules/4.png
  10. BIN
      product_visibility_website/static/description/assets/modules/5.gif
  11. BIN
      product_visibility_website/static/description/assets/modules/5.png
  12. BIN
      product_visibility_website/static/description/assets/modules/6.png
  13. 228
      product_visibility_website/static/description/index.html

4
product_visibility_website/__manifest__.py

@ -22,7 +22,7 @@
################################################################################ ################################################################################
{ {
'name': 'Website Product Visibility', 'name': 'Website Product Visibility',
'version': '16.0.1.1.1', 'version': '16.0.1.1.2',
'category': 'Website', 'category': 'Website',
'summary': 'Website Product visibility for Users', 'summary': 'Website Product visibility for Users',
'description': """Website Product visibility for Users""", 'description': """Website Product visibility for Users""",
@ -35,7 +35,7 @@
'views/website_product_visibility.xml', 'views/website_product_visibility.xml',
'views/res_config_settings_views.xml' 'views/res_config_settings_views.xml'
], ],
'images': ['static/description/1.png'], 'images': ['static/description/banner.png'],
'license': 'AGPL-3', 'license': 'AGPL-3',
'installable': True, 'installable': True,
'auto_install': False, 'auto_install': False,

120
product_visibility_website/controllers/main.py

@ -357,123 +357,3 @@ class ProductVisibilityCon(WebsiteSale):
partner = request.env['res.partner'].sudo().search( partner = request.env['res.partner'].sudo().search(
[('id', '=', user.partner_id.id)]) [('id', '=', user.partner_id.id)])
return partner.website_available_product_ids return partner.website_available_product_ids
# --------------------------------------------------------------------------
# Products Search Bar
# --------------------------------------------------------------------------
@http.route('/shop/products/autocomplete', type='json', auth='public',
website=True)
def products_autocomplete(self, term, options={}, **kwargs):
"""
Returns list of products according to the term and product options
Params:
term (str): search term written by the user
options (dict)
- 'limit' (int), default to 5: number of products to consider
- 'display_description' (bool), default to True
- 'display_price' (bool), default to True
- 'order' (str)
- 'max_nb_chars' (int): max number of characters for the
description if returned
Returns:
dict (or False if no result)
- 'products' (list): products (only their needed field values)
note: the prices will be strings properly formatted and
already containing the currency
- 'products_count' (int): the number of products in the database
that matched the search query
"""
user = request.env['res.users'].sudo().search(
[('id', '=', request.env.user.id)])
available_categ = available_products = ''
if not user:
mode = request.env['ir.config_parameter'].sudo().get_param(
'filter_mode')
products = literal_eval(
request.env['ir.config_parameter'].sudo().get_param(
'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_for_guest_ids',
'False'))
available_categ = request.env['product.public.category'].search(
[('id', 'in', cat)])
else:
partner = request.env['res.partner'].sudo().search(
[('id', '=', user.partner_id.id)])
mode = partner.filter_mode
if mode != 'categ_only':
available_products = self.available_products()
available_categ = partner.website_available_cat_ids
ProductTemplate = request.env['product.template']
display_description = options.get('display_description', True)
display_price = options.get('display_price', True)
order = self._get_search_order(options)
max_nb_chars = options.get('max_nb_chars', 999)
category = options.get('category')
attrib_values = options.get('attrib_values')
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:
domain = self.reset_domain(term, available_categ,
available_products, attrib_values,
display_description)
products = ProductTemplate.search(
domain,
limit=min(20, options.get('limit', 5)),
order=order
)
fields = ['id', 'name', 'website_url']
if display_description:
fields.append('description_sale')
res = {
'products': products.read(fields),
'products_count': ProductTemplate.search_count(domain),
}
if display_description:
for res_product in res['products']:
desc = res_product['description_sale']
if desc and len(desc) > max_nb_chars:
res_product['description_sale'] = "%s..." % desc[:(
max_nb_chars - 3)]
if display_price:
FieldMonetary = request.env['ir.qweb.field.monetary']
monetary_options = {
'display_currency':
request.website.get_current_pricelist().currency_id,
}
for res_product, product in zip(res['products'], products):
combination_info = product._get_combination_info(
only_template=True)
res_product.update(combination_info)
res_product['list_price'] = FieldMonetary.value_to_html(
res_product['list_price'], monetary_options)
res_product['price'] = FieldMonetary.value_to_html(
res_product['price'], monetary_options)
return res

5
product_visibility_website/doc/RELEASE_NOTES.md

@ -13,3 +13,8 @@
#### Version 16.0.1.1.1 #### Version 16.0.1.1.1
##### FIX ##### FIX
- Feature Of Website Product Visibility For Portal Users Is Added - Feature Of Website Product Visibility For Portal Users Is Added
#### 17.10.2023
#### Version 16.0.1.1.2
##### FIX
- The issue with the product/product-category search functionality has been fixed

1
product_visibility_website/models/__init__.py

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

107
product_visibility_website/models/website.py

@ -0,0 +1,107 @@
from ast import literal_eval
from odoo import models
from odoo.http import request
class Website(models.Model):
"""
Extends the 'website' model to filter product search.
"""
_inherit = "website"
_description = "Website"
def _search_with_fuzzy(self, search_type, search, limit, order, options):
"""
This method extends the base search functionality to include additional
filtering
"""
res = super()._search_with_fuzzy(
search_type, search, limit, order, options)
response = list(res)
available_products = False
user = request.env['res.users'].sudo().search(
[('id', '=', request.env.user.id)])
if response[1][0] and (response[1][0].get(
'model', '') == 'product.template' or response[1][0].get(
'model', '') == 'product.public.category'):
if not user:
mode = request.env['ir.config_parameter'].sudo().get_param(
'filter_mode')
products = literal_eval(
request.env['ir.config_parameter'].sudo().get_param(
'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_for_guest_ids',
'False'))
available_categ = request.env['product.public.category'].search(
[('id', 'in', cat)])
else:
partner = request.env['res.partner'].sudo().search(
[('id', '=', user.partner_id.id)])
mode = partner.filter_mode
if mode == 'product_only':
available_products = self.available_products()
available_categ = partner.website_available_cat_ids
Category_avail = []
Category = request.env['product.public.category']
for ids in available_categ:
if not ids.parent_id.id in available_categ.ids:
Category_avail.append(ids.id)
categ = request.env['product.public.category'].search(
[('id', 'in', Category_avail)])
if mode == 'product_only':
categ = Category.search([('parent_id', '=', False), (
'product_tmpl_ids', 'in', available_products.ids)])
# supering shop***
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 available_products:
product_category = available_products.mapped('public_categ_ids')
category = set(response[1][0]['results'].ids).intersection(set(
product_category.ids))
products = set(response[1][-1]['results'].ids).intersection(set(
available_products.ids))
response[1][-1]['results'] = request.env[
'product.template'].browse(products)
response[1][0]['results'] = request.env[
'product.public.category'].browse(category)
if available_categ:
categ_products = available_categ.mapped('product_tmpl_ids')
products = set(response[1][-1]['results'].ids).intersection(set(
categ_products.ids))
category = set(response[1][0]['results'].ids).intersection(set(
available_categ.ids))
response[1][0]['results'] = request.env[
'product.public.category'].browse(category)
response[1][-1]['results'] = request.env[
'product.template'].browse(products)
return tuple(response)
def available_products(self):
"""Returns the available product (product.template) ids"""
user = request.env['res.users'].sudo().search(
[('id', '=', request.env.user.id)])
partner = request.env['res.partner'].sudo().search(
[('id', '=', user.partner_id.id)])
return partner.website_available_product_ids

BIN
product_visibility_website/static/description/assets/modules/1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 33 KiB

BIN
product_visibility_website/static/description/assets/modules/2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 76 KiB

BIN
product_visibility_website/static/description/assets/modules/3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 74 KiB

BIN
product_visibility_website/static/description/assets/modules/4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 79 KiB

BIN
product_visibility_website/static/description/assets/modules/5.gif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

BIN
product_visibility_website/static/description/assets/modules/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 86 KiB

228
product_visibility_website/static/description/index.html

@ -1,35 +1,43 @@
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;"> <div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR --> <!-- TITLE BAR -->
<div <div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;"> 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" <img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/> style="width: 42px; height: 42px;"/>
<div> <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;" <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 <i class="fa fa-check mr-1"></i>Community
</div> </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;" <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 <i class="fa fa-check mr-1"></i>Enterprise
</div> </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;" <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 <i class="fa fa-check mr-1"></i>Odoo.sh
</div> </div>
</div> </div>
</div> </div>
<!-- END OF TITLE BAR --> <!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO --> <!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;"> <h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Website Product Visibility</h1> Website Product Visibility</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;"> <p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
Website Product visibility for logged in and logged out Website Product Visibility For Logged in, Logged out Users/Visitors and Portal Users</p>
users/Visitors</p>
<!-- END OF APP HERO --> <!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" <img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;"/> style="width: 100%; margin-left: auto; margin-right: auto;"/>
</div>
</div>
</div>
</div> </div>
@ -52,8 +60,7 @@
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div> <div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span> <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<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 more about this
module</span> module</span>
</div> </div>
@ -67,8 +74,7 @@
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div> <div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span> <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<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 features of this
module</span> module</span>
</div> </div>
@ -82,10 +88,9 @@
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div> <div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span> <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<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;">See screenshots for this
key screenshots of this module module</span>
</span>
</div> </div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/> <img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div> </div>
@ -96,7 +101,8 @@
<!-- OVERVIEW SECTION --> <!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center" <div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview"> style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="overview">
<div class="d-flex justify-content-center align-items-center mr-2" <div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/> <img src="assets/misc/pie-chart.png"/>
@ -110,7 +116,7 @@
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4"> <div class="col-sm-12 py-4">
This module helps you to make visible only the filtered products and This module helps you to make visible only the filtered products and
product categories for a logged in and logged out users/visitors. product categories for a logged in logged out users/visitors and Portal Users.
Also, it enables the user to search products and product categories only Also, it enables the user to search products and product categories only
from those available products and categories. from those available products and categories.
</div> </div>
@ -132,32 +138,37 @@
<div class="row" <div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> 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="col-sm-12 col-md-6">
<div class="d-flex align-items-center" <div class="d-flex align-items-start"
style="margin-top: 40px; margin-bottom: 40px"> style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/> <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> <div>
<span style="display: block; 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;"> <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 Filter product and product categories according to the logged user.</p>
user.</p> <span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 12px;"> </span>
</div> </div>
<div class="d-flex align-items-center" </div>
<div class="d-flex align-items-start"
style="margin-top: 30px; margin-bottom: 30px"> style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/> <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> <div>
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> <span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Filter according to the public users/visitors and portal users</span>
Filter product and product categories according to the public <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 and portal users.</p>
users/visitors.</p> <span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 14px;"> </span>
</div> </div>
<div class="d-flex align-items-center" </div>
<div class="d-flex align-items-start"
style="margin-top: 30px; margin-bottom: 30px"> style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/> <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> <div>
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> <span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Restrict user searches to available product/category only</span>
User can only search product and category among from the <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>
available product/category.</p> <span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 14px;"> </span>
</div> </div>
</div> </div>
</div> </div>
</div>
<!-- END OF FEATURES SECTION --> <!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION --> <!-- SCREENSHOTS SECTION -->
@ -195,122 +206,107 @@
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product wise visibility for website shop (Product wise)</h3> Product wise visibility for website shop (Product wise)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> <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>
Product visibility (Product wise) for the logged user in website
shop.</p>
<img src="assets/screenshots/3.png" class="img-thumbnail"> <img src="assets/screenshots/3.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Category wise filtering for website shop (Logged in Users)</h3> Category wise filtering for website shop (Logged in Users)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Category wise filtering mode for logged user in website shop.</p>
Category wise filtering mode for logged user in website
shop.</p>
<img src="assets/screenshots/4.png" class="img-thumbnail"> <img src="assets/screenshots/4.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product visibility for website shop (Category wise)</h3> Product visibility for website shop (Category wise)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> <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>
Product visibility (Category wise) for the logged user in
website shop.</p>
<img src="assets/screenshots/5.png" class="img-thumbnail"> <img src="assets/screenshots/5.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product wise filtering for website shop (Portal Users)</h3> Product wise filtering for website shop (Portal Users)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> <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>
Product wise filtering mode for the portal users in the website
shop.</p>
<img src="assets/screenshots/6.png" class="img-thumbnail"> <img src="assets/screenshots/6.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Set filter for a portal user</h3> Set filter for a portal user</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> <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>
Setting the filtering mode for a portal user as No Filter.</p>
<img src="assets/screenshots/7.png" class="img-thumbnail"> <img src="assets/screenshots/7.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product wise visibility for website shop (Portal Users)</h3> Product wise visibility for website shop (Portal Users)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Product visibility (Product wise) for the portal users in
Product visibility (Product wise) for the portal users in
website shop when no filter is set for them.</p> website shop when no filter is set for them.</p>
<img src="assets/screenshots/8.png" class="img-thumbnail"> <img src="assets/screenshots/8.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Category wise filtering for website shop (Portal Users)</h3> Category wise filtering for website shop (Portal Users)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Category wise filtering mode for the portal users in the website
Category wise filtering mode for the portal users in the website
shop.</p> shop.</p>
<img src="assets/screenshots/9.png" class="img-thumbnail"> <img src="assets/screenshots/9.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product visibility for website shop portal users (Category Product visibility for website shop portal users (Categorywise)</h3>
wise)</h3> <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Product visibility (Category wise) for the portal users in
<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> website shop when no filter is set for them.</p>
<img src="assets/screenshots/10.png" class="img-thumbnail"> <img src="assets/screenshots/10.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product wise filtering for website shop (Visitors)</h3> Product wise filtering for website shop (Visitors)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> <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>
Product wise filtering mode for the visitors in the website
shop.</p>
<img src="assets/screenshots/11.png" class="img-thumbnail"> <img src="assets/screenshots/11.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product wise visibility for website shop (Visitors)</h3> Product wise visibility for website shop (Visitors)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Product visibility (Product wise) for the visitors in website shop.</p>
Product visibility (Product wise) for the visitors in website
shop.</p>
<img src="assets/screenshots/12.png" class="img-thumbnail"> <img src="assets/screenshots/12.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Category wise filtering for website shop (Visitors)</h3> Category wise filtering for website shop (Visitors)</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> <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>
Category wise filtering mode for the visitors in the website
shop.</p>
<img src="assets/screenshots/13.png" class="img-thumbnail"> <img src="assets/screenshots/13.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Product visibility for website shop visitors (Category Product visibility for website shop visitors (Category wise)</h3>
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>
<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"> <img src="assets/screenshots/14.png" class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Search available product from the list</h3> Search available product from the list</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Search product from the available product list.</p>
Search product from the available product list.</p>
<img src="assets/screenshots/15.png" class="img-thumbnail"> <img src="assets/screenshots/15.png" class="img-thumbnail">
</div> </div>
</div> </div>
</div> </div>
<!-- END OF SCREENSHOTS SECTION --> <!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS --> <!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center" <div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2" <div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png" /> <img src="assets/misc/categories.png" />
</div> </div>
<h2 class="mt-2" <h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Related
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related
Products Products
</h2> </h2>
</div> </div>
@ -320,71 +316,52 @@
<!-- The slideshow --> <!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;"> <div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;"> <div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
style="float:left"> <a href="https://apps.odoo.com/apps/modules/16.0/odoo_website_helpdesk/#" target="_blank">
<a href="https://apps.odoo.com/apps/modules/15.0/dynamic_accounts_report/"
target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block" style="border-radius: 0px;"
style="border-radius: 0px;"
src="assets/modules/1.png"> src="assets/modules/1.png">
</div> </div>
</a> </a>
</div> </div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
style="float:left"> <a href="https://apps.odoo.com/apps/modules/16.0/animated_snippet/#" target="_blank">
<a href="https://apps.odoo.com/apps/modules/15.0/custom_gantt_view/"
target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block" style="border-radius: 0px;"
style="border-radius: 0px;"
src="assets/modules/2.png"> src="assets/modules/2.png">
</div> </div>
</a> </a>
</div> </div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
style="float:left"> <a href="https://apps.odoo.com/apps/modules/16.0/customer_geolocation/#" target="_blank">
<a href="https://apps.odoo.com/apps/modules/15.0/project_custom_gantt/"
target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block" style="border-radius: 0px;"
style="border-radius: 0px;"
src="assets/modules/3.png"> src="assets/modules/3.png">
</div> </div>
</a> </a>
</div> </div>
</div> </div>
<div class="carousel-item active" <div class="carousel-item active" style="min-height: 198.656px;">
style="min-height: 198.656px;"> <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <a href="https://apps.odoo.com/apps/modules/16.0/insta_feed_snippet/#" target="_blank">
style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/account_reports_xlsx/"
target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block" style="border-radius: 0px;"
style="border-radius: 0px;"
src="assets/modules/4.png"> src="assets/modules/4.png">
</div> </div>
</a> </a>
</div> </div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
style="float:left"> <a href="https://apps.odoo.com/apps/modules/16.0/website_signup_approval/#" target="_blank">
<a href="https://apps.odoo.com/apps/modules/15.0/base_accounting_kit/"
target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block" style="border-radius: 0px;"
style="border-radius: 0px;"
src="assets/modules/5.png"> src="assets/modules/5.png">
</div> </div>
</a> </a>
</div> </div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
style="float:left"> <a href="https://apps.odoo.com/apps/modules/16.0/refer_friend_and_earn/#" target="_blank">
<a href="https://apps.odoo.com/apps/modules/15.0/hr_payroll_community/"
target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block" style="border-radius: 0px;"
style="border-radius: 0px;"
src="assets/modules/6.png"> src="assets/modules/6.png">
</div> </div>
</a> </a>
@ -392,15 +369,10 @@
</div> </div>
</div> </div>
<!-- Left and right controls --> <!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev" <a class="carousel-control-prev" href="#demo1" data-slide="prev" style="width:35px; color:#000"> <span
style="width:35px; color:#000"> <span class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span>
class="carousel-control-prev-icon"><i </a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="width:35px; color:#000">
class="fa fa-chevron-left" <span class="carousel-control-next-icon"><i class="fa fa-chevron-right"
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> style="font-size:24px"></i></span>
</a> </a>
</div> </div>

Loading…
Cancel
Save