@ -1,25 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
|||
# Author: Shijin V (<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 . import controllers |
|||
from . import models |
@ -1,43 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
|||
# Author: Shijin V (<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/>. |
|||
# |
|||
################################################################################### |
|||
|
|||
{ |
|||
'name': 'Website Product Visibility', |
|||
'summary': 'Website Product visibility for Users', |
|||
'version': '13.0.1.0.0', |
|||
'description': """Website Product visibility for Users""", |
|||
'author': 'Cybrosys Techno Solution', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'https://www.cybrosys.com', |
|||
'category': 'Website', |
|||
'depends': ['contacts', 'website_sale'], |
|||
'data': [ |
|||
'views/website_product_visibility.xml', |
|||
], |
|||
'images': ['static/description/banner.png'], |
|||
'license': 'AGPL-3', |
|||
'installable': True, |
|||
'application': False, |
|||
'auto_install': False, |
|||
} |
@ -1,24 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
|||
# Author: Shijin V (<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 . import main |
@ -1,331 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
|||
# Author: Shijin V (<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 werkzeug.exceptions import NotFound |
|||
|
|||
from addons.http_routing.models.ir_http import slug |
|||
from addons.website.controllers.main import QueryURL |
|||
from addons.website_sale.controllers.main import TableCompute |
|||
from odoo import http |
|||
from ast import literal_eval |
|||
from odoo.http import request |
|||
from odoo.addons.website.models.ir_http import sitemap_qs2dom |
|||
from odoo.addons.website_sale.controllers.main import WebsiteSale |
|||
|
|||
from odoo.osv import expression |
|||
|
|||
|
|||
|
|||
class ProductVisibilityCon(WebsiteSale): |
|||
|
|||
def sitemap_shop(env, rule, qs): |
|||
if not qs or qs.lower() in '/shop': |
|||
yield {'loc': '/shop'} |
|||
category = env['product.public.category'] |
|||
dom = sitemap_qs2dom(qs, '/shop/category', category._rec_name) |
|||
dom += env['website'].get_current_website().website_domain() |
|||
for cat in category.search(dom): |
|||
loc = '/shop/category/%s' % slug(cat) |
|||
if not qs or qs.lower() in loc: |
|||
yield {'loc': loc} |
|||
|
|||
def reset_domain(self, search, categories, available_products, attrib_values, search_in_description=True): |
|||
''' |
|||
Function returns a domain consist of filter conditions |
|||
:param search: search variable |
|||
:param categories: list of category available |
|||
:param available_products: list of available product ids from product.template |
|||
:param attrib_values:product attiribute values |
|||
:param search_in_description: boolean filed showing there is search variable exist or not''' |
|||
|
|||
domains = [request.website.sale_product_domain()] |
|||
if search: |
|||
for srch in search.split(" "): |
|||
subdomains = [ |
|||
[('name', 'ilike', srch)], |
|||
[('product_variant_ids.default_code', 'ilike', srch)] |
|||
] |
|||
if search_in_description: |
|||
subdomains.append([('description', 'ilike', srch)]) |
|||
subdomains.append([('description_sale', 'ilike', srch)]) |
|||
domains.append(expression.OR(subdomains)) |
|||
if available_products: |
|||
domains.append([('id', 'in', available_products.ids)]) |
|||
if categories: |
|||
domains.append([('public_categ_ids', 'child_of', categories.ids)]) |
|||
if attrib_values: |
|||
attrib = None |
|||
ids = [] |
|||
for value in attrib_values: |
|||
if not attrib: |
|||
attrib = value[0] |
|||
ids.append(value[1]) |
|||
elif value[0] == attrib: |
|||
ids.append(value[1]) |
|||
else: |
|||
domains.append([('attribute_line_ids.value_ids', 'in', ids)]) |
|||
attrib = value[0] |
|||
ids = [value[1]] |
|||
if attrib: |
|||
domains.append([('attribute_line_ids.value_ids', 'in', 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) |
|||
def shop(self, page=0, category=None, search='', ppg=False, **post): |
|||
''''Override shop function.''' |
|||
available_categ = available_products = '' |
|||
user = request.env['res.users'].sudo().search([('id', '=', request.env.user.id)]) |
|||
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_product_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')) |
|||
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.availavle_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: |
|||
return super(ProductVisibilityCon, self).shop(page, category, search, ppg, **post) |
|||
add_qty = int(post.get('add_qty', 1)) |
|||
|
|||
if category: |
|||
category = Category.search([('id', '=', int(category))], limit=1) |
|||
if not category or not category.can_access_from_current_website(): |
|||
raise NotFound() |
|||
else: |
|||
category = Category |
|||
|
|||
if ppg: |
|||
try: |
|||
ppg = int(ppg) |
|||
post['ppg'] = ppg |
|||
except ValueError: |
|||
ppg = False |
|||
if not ppg: |
|||
ppg = request.env['website'].get_current_website().shop_ppg or 20 |
|||
ppr = request.env['website'].get_current_website().shop_ppr or 4 |
|||
attrib_list = request.httprequest.args.getlist('attrib') |
|||
attrib_values = [[int(x) for x in v.split("-")] for v in attrib_list if v] |
|||
attributes_ids = {v[0] for v in attrib_values} |
|||
attrib_set = {v[1] for v in attrib_values} |
|||
domain = self._get_search_domain(search, category, attrib_values) |
|||
Product = request.env['product.template'].with_context(bin_size=True) |
|||
if available_products: |
|||
domain_pro = self.reset_domain(search, category, available_products, attrib_values) |
|||
Product = Product.search(domain_pro) |
|||
keep = QueryURL('/shop', category=category and int(category), search=search, attrib=attrib_list, |
|||
order=post.get('order')) |
|||
pricelist_context, pricelist = self._get_pricelist_context() |
|||
request.context = dict(request.context, pricelist=pricelist.id, partner=request.env.user.partner_id) |
|||
url = "/shop" |
|||
if search: |
|||
post["search"] = search |
|||
if attrib_list: |
|||
post['attrib'] = attrib_list |
|||
if not category: |
|||
domain = self.reset_domain(search, available_categ, available_products, attrib_values) |
|||
search_product = Product.search(domain) |
|||
website_domain = request.website.website_domain() |
|||
categs_domain = [('parent_id', '=', False), ('product_tmpl_ids', 'in', search_product.ids)] + website_domain |
|||
if search: |
|||
search_categories = Category.search( |
|||
[('product_tmpl_ids', 'in', search_product.ids)] + website_domain).parents_and_self |
|||
categs_domain.append(('id', 'in', search_categories.ids)) |
|||
else: |
|||
search_categories = available_categ |
|||
if category: |
|||
url = "/shop/category/%s" % slug(category) |
|||
product_count = len(search_product) |
|||
pager = request.website.pager(url=url, total=product_count, page=page, step=ppg, scope=7, url_args=post) |
|||
products = Product.search(domain, limit=ppg, offset=pager['offset'], order=self._get_search_order(post)) |
|||
if not category: |
|||
if available_products: |
|||
products = Product.search(domain_pro, limit=ppg, offset=pager['offset'], |
|||
order=self._get_search_order(post)) |
|||
else: |
|||
products = Product.search(domain, limit=ppg, offset=pager['offset'], |
|||
order=self._get_search_order(post)) |
|||
else: |
|||
if available_products: |
|||
products = Product.search(domain_pro, limit=ppg, offset=pager['offset'], |
|||
order=self._get_search_order(post)) |
|||
else: |
|||
products = Product.search(domain, limit=ppg, offset=pager['offset'], |
|||
order=self._get_search_order(post)) |
|||
ProductAttribute = request.env['product.attribute'] |
|||
if products: |
|||
# get all products without limit |
|||
attributes = ProductAttribute.search([('product_tmpl_ids', 'in', search_product.ids)]) |
|||
else: |
|||
attributes = ProductAttribute.browse(attributes_ids) |
|||
|
|||
layout_mode = request.session.get('website_sale_shop_layout_mode') |
|||
if not layout_mode: |
|||
if request.website.viewref('website_sale.products_list_view').active: |
|||
layout_mode = 'list' |
|||
else: |
|||
layout_mode = 'grid' |
|||
values = { |
|||
'search': search, |
|||
'category': category, |
|||
'attrib_values': attrib_values, |
|||
'attrib_set': attrib_set, |
|||
'pager': pager, |
|||
'pricelist': pricelist, |
|||
'add_qty': add_qty, |
|||
'products': products, |
|||
'search_count': product_count, # common for all searchbox |
|||
'bins': TableCompute().process(products, ppg, ppr), |
|||
'ppg': ppg, |
|||
'ppr': ppr, |
|||
'categories': categ, |
|||
'attributes': attributes, |
|||
'keep': keep, |
|||
'search_categories_ids': categ.ids, |
|||
'layout_mode': layout_mode, |
|||
} |
|||
|
|||
if category: |
|||
values['main_object'] = category |
|||
return request.render("website_sale.products", values) |
|||
|
|||
def availavle_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 |
|||
|
|||
# -------------------------------------------------------------------------- |
|||
# 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_product_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')) |
|||
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.availavle_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_products and not available_categ: |
|||
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 |
@ -1,9 +0,0 @@ |
|||
## Module <website_product_visibility> |
|||
|
|||
#### 31.03.2020 |
|||
#### Version 13.0.1.0.0 |
|||
##### ADD |
|||
|
|||
|
|||
|
|||
|
@ -1,24 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
|||
# Author: Shijin V (<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 . import website_product_visibility |
@ -1,97 +0,0 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). |
|||
# Author: Shijin V (<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 ProductVisibility(models.Model): |
|||
_inherit = 'res.partner' |
|||
|
|||
filter_mode = fields.Selection([('null', 'No Filter'), ('product_only', 'Product Wise'), |
|||
('categ_only', 'Category Wise')], string='Filter Mode', default='null') |
|||
website_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') |
|||
website_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') |
|||
|
|||
|
|||
class WebsiteGuestVisibility(models.TransientModel): |
|||
_inherit = 'res.config.settings' |
|||
|
|||
product_visibility_guest_user = fields.Boolean(string="Product visibility Guest User") |
|||
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 |
|||
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')) |
|||
|
|||
res.update( |
|||
product_visibility_guest_user=self.env['ir.config_parameter'].sudo().get_param( |
|||
'product_visibility_guest_user'), |
|||
filter_mode=self.env['ir.config_parameter'].sudo().get_param( |
|||
'filter_mode'), |
|||
available_product_ids=[(6, 0, product_ids)], |
|||
available_cat_ids=[(6, 0, cat_ids)], |
|||
) |
|||
return res |
Before Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 452 KiB |
Before Width: | Height: | Size: 138 KiB |
Before Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 135 KiB |
Before Width: | Height: | Size: 173 KiB |
Before Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 72 KiB |
@ -1,321 +0,0 @@ |
|||
<div class="row" style="margin: 0;position: relative;color: #000;background-position: center;background: #ffffff;border-bottom: 1px solid #e4e4e4;text-align: center; margin: auto; display: flex;justify-content: center;"> <a href="https://www.cybrosys.com/" target="_blank"><img src="images/cybrosys.png" style=" width: 293px; padding: 1rem 0rem; margin: auto" alt="cybrosys-logo"></a> </div> |
|||
<div class="row" style="margin:75px 0;position: relative;color: #000;background-position: center;background: #ffffff;border-bottom: 1px solid #e4e4e4; padding-bottom: 30px;"> |
|||
<div class="col-md-7 col-sm-12 col-xs-12" style="padding: 0px"> |
|||
<div style=" margin: 0 0 0px;padding: 20px 0 10;font-size: 23px;line-height: 35px;font-weight: 400;color: #000;border-top: 1px solid rgba(255,255,255,0.1);border-bottom: 1px solid rgba(255,255,255,0.11);text-align: left;"> |
|||
<h1 style="font-size: 39px;font-weight: 600;margin: 0px !important;">Website Product Visibility</h1> |
|||
<h3 style="font-size: 21px;margin-top: 8px;position: relative;">Website Product visibility for Users.</h3> |
|||
</div> |
|||
<h2 style="font-weight: 600;font-size: 1.8rem;margin-top: 15px;">Key Highlights</h2> |
|||
<ul style=" padding: 0 1px; list-style: none; "> |
|||
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">Filter product and product categories according to the logged user.</li> |
|||
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> Filter product and product categories according to the public users/visitors. </li> |
|||
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">User can only search product and category among from the available product/category.</li> |
|||
</ul> |
|||
</div> |
|||
<!-- <div class="col-md-5 col-sm-12 col-xs-12"> <img src="images/task_timer.gif" class="img-responsive" alt=""> </div>--> |
|||
</div> |
|||
<div> |
|||
<section class="oe_container" style="padding: 1rem 0rem 1rem; background-color: #ffffff !important;"> |
|||
<div class="row py-4 px-3"> |
|||
<div class="w-100" style="padding-top:30px;padding-bottom:45px;border-radius: 10px;"> |
|||
<ul role="tablist" class="nav nav-pills justify-content-center" data-tabs="tabs" id="pills-tab" style="border: none;background: unset;"> |
|||
<li class="nav-item mr-1 mb-3" style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #d31c22;background-color: #d31c22;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;"> <a id="pills-home-tab" data-toggle="pill" href="#pills-home" role="tab" aria-controls="pills-home" aria-selected="true" class="nav-link active show" style="color: #000000;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400;text-align: center; |
|||
color: #fff;">Overview </a> </li> |
|||
<li class="nav-item mr-1 mb-3" style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #d31c22;background-color: #d31c22;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;"> <a id="pills-home-tab" data-toggle="pill" href="#pills-home1" role="tab" aria-controls="pills-home" aria-selected="true" class="nav-link " style="color: #000000;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400; text-align: center; |
|||
color: #fff;" >Features </a> </li> |
|||
<li class="nav-item mr-1 mb-3" style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #ffffff;background-color: #d31c22;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;"> <a class="nav-link" id="pills-profile-tab" data-toggle="pill" href="#pills-profile" role="tab" aria-controls="pills-profile" aria-selected="false" style="color: #000000;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400; text-align: center; |
|||
color: #fff;">Screenshots </a> </li> |
|||
<!-- <li class="nav-item mr-1 mb-3" style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #ffffff;background-color: #d31c22;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;"> <a class="nav-link" id="pills-profile-tab" data-toggle="pill" href="#pills-video" role="tab" aria-controls="pills-profile" aria-selected="false" style="color: #000000;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400; text-align: center; |
|||
color: #fff;">Video </a> </li> --> |
|||
</ul> |
|||
<div class="tab-content" id="pills-tabContent" |
|||
style="padding-top: 30px; padding-bottom: 30px; padding: 30px;"> |
|||
<div class="px-3 pt-1 tab-pane fade active show" id="pills-home" role="tabpanel" aria-labelledby=" |
|||
pills-home-tab"> |
|||
<!-- Overview--> |
|||
<h2 style="font-weight: 600;text-align: center;width: 100%;">Overview</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<h3 class="oe_slogan" style="text-align: center;font-size: 19px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 31px;font-weight: 400;letter-spacing: .5px;margin-bottom: 21px;"> |
|||
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. |
|||
</h3> |
|||
</div> |
|||
<div class="px-3 pt-1 tab-pane fade " id="pills-home1" role="tabpanel" aria-labelledby=" |
|||
pills-home-tab"> |
|||
<!-- feature tab--> |
|||
<h2 style="font-weight: 600;text-align: center;width: 100%;">Website Product Visibility</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<ul> |
|||
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;"> |
|||
<img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">Filter product and product categories according to the logged user. |
|||
</li> |
|||
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;"> |
|||
<img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">Filter product and product categories according to the public users/visitors. |
|||
</li> |
|||
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;"> |
|||
<img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">User can only search product and category among from the available product/category. |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
<!-- Screenshot tab--> |
|||
<div class="px-3 tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab" > |
|||
<div class="tab-pane"> |
|||
<h2 style="font-weight: 600;text-align: center;width: 100%;">Screenshots</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<div> |
|||
<section class="oe_container"> |
|||
<div id="demo" class="row carousel slide mb32" data-ride="carousel"> |
|||
<div class="carousel-inner"> |
|||
<div class="carousel-item active" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;"> |
|||
<h3 class="alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;"> <img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">Filtering products and categories for a logged user.</h3> |
|||
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/scrn1.png"> </div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="carousel-item" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;"> |
|||
<h3 class="alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;"> <img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> Product visibility for the logged user in website shop.</h3> |
|||
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/scrn2.png"> </div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="carousel-item" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;"> |
|||
<h3 class="mb32 alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px; "> <img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> Filtering products and categories for a visitor.</h3> |
|||
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/scrn4.png"> </div> |
|||
</div> |
|||
</div> |
|||
<div class="carousel-item" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;"> |
|||
<h3 class="mb32 alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px; "> <img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> product visibility for a visitor in the website shop.</h3> |
|||
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/scrn5.png"> </div> |
|||
</div> |
|||
</div> |
|||
<div class="carousel-item" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;"> |
|||
<h3 class="mb32 alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px; "> <img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> Search product from the available product list.</h3> |
|||
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/scrn3.png"> </div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<a class="carousel-control-prev" href="#demo" data-slide="prev" style="left:-25px;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="#demo" data-slide="next" style="right:-25px;width: 35px;color: #000;"> <span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span> </a> |
|||
</div> |
|||
</section> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- <div class="px-3 pt-1 tab-pane fade" id="pills-video" role="tabpanel" aria-labelledby=" |
|||
pills-home-tab"> --> |
|||
<!-- Video--> |
|||
<!-- <h2 style="font-weight: 600;text-align: center;width: 100%;">Video</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<center> --> |
|||
<!-- <p>Project Task Timer Demo</p> --> |
|||
<!--<a href="https://www.youtube.com/watch?v=57QWXrMYe84&feature=youtu.be" target="_blank"> <img src="addon-youtube.png" style="width:80%;"></a>--> |
|||
<!-- <div class="s_panel_video" data-video-id="7PFB7FpMFyM?rel=0" style="cursor:pointer;"> |
|||
<img class="img-fluid s_tooltip_tabs_tooltip_image s_figure_link pb0" src="images/task_timer_youtube.png" alt="Cybrosys Cover Video" style="max-width:100%;"> |
|||
</div> |
|||
</center> |
|||
</div> --> |
|||
<!-- faq tab--> |
|||
<!-- <div class="px-2 px-lg-4 pt-3 tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab"> |
|||
<ul class="list-unstyled"> |
|||
</ul> |
|||
</div> --> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 2rem 3rem 1rem;"> |
|||
<h2 style="font-weight: 600;text-align: center;margin-bottom: 25px;width: 100%;">Suggested Products</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<div id="demo1" class="row carousel slide" data-ride="carousel"> |
|||
<!-- The slideshow --> |
|||
<div class="carousel-inner"> |
|||
<div class="carousel-item active" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;"> |
|||
<a href="https://apps.odoo.com/apps/modules/13.0/product_brand_ecommerce/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/product_brand_ecommerce.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/13.0/website_repeat_sale/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/website_repeat_sale.jpeg"> </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/13.0/website_sale_advanced_search/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/website_sale_advanced_search.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/11.0/website_sale_product_quick_view/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/website_sale_product_quick_view.jpeg"> </div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="carousel-item" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;"> |
|||
<a href="https://apps.odoo.com/apps/modules/10.0/website_featured_products/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/website_featured_products.jpeg"> </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/13.0/paytm_payment_gateway/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/paytm_payment_gateway.gif"> </div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Left and right controls --> |
|||
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="left:-25px;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="right:-25px;width: 35px;color: #000;"> <span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span> </a> |
|||
</div> |
|||
</section> |
|||
<section class="row" style="padding: 2rem 3rem 1rem;margin:0px"> |
|||
<h2 style="font-weight: 600;margin-bottom: 20px;text-align: center;width: 100%;">Our Service</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<div class="row" style=" display: flex; justify-content: center; flex-wrap: wrap;width: 100%; "> |
|||
<!-- <div style="display:flex;padding-top: 20px;justify-content: space-between;"> --> |
|||
<div class="col-md-2 col-sm-6 col-xs-12"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-customization.png" style="width: 100%;border-radius: 100%;"/> </a> </div> |
|||
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Customization </a> </h3> |
|||
</div> |
|||
<div class="col-md-2 col-sm-6 col-xs-12"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-erp-implementation.png" style="width: 100%;border-radius: 100%;"/> </a> </div> |
|||
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Implementation </a> </h3> |
|||
</div> |
|||
<div class="col-md-2 col-sm-6 col-xs-12"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-erp-integration.png" style="width: 100%;border-radius: 100%;"/> </a> </div> |
|||
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Integration </a> </h3> |
|||
</div> |
|||
<div class="col-md-2 col-sm-6 col-xs-12"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-erp-support/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-erp-support.png" style="width: 100%;border-radius: 100%;"/> </a> </div> |
|||
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-erp-support/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Support</a> </h3> |
|||
</div> |
|||
<div class="col-md-2 col-sm-6 col-xs-12"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank"> <img src="https://www.cybrosys.com/images/hire-odoo-developer.png" style="width: 100%;border-radius: 100%;"/> </a> </div> |
|||
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Hire Odoo Developers</a> </h3> |
|||
</a> |
|||
</div> |
|||
<!-- </div> --> |
|||
</div> |
|||
</section> |
|||
<section class="row" style="padding: 2rem 3rem 1rem;margin:0px"> |
|||
<div class="row" style="margin: 0"> |
|||
<h2 style="font-weight: 600;margin-bottom: 20px;text-align: center;width: 100%;">Our Industries</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<!-- <div style="display:flex;justify-content: space-between;flex-wrap:wrap;"> --> |
|||
<div class="row" style="width: 100%"> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-1.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> Trading </a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> Easily procure and sell your products. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-2.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;" style=" margin-bottom: 10px; "> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> Manufacturing</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;"> Plan, track and schedule your operations. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-3.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> Restaurant</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;"> Run your bar or restaurant methodical. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-4.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> POS</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;"> Easy configuring and convivial selling. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-5.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 0px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> E-commerce & Website</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> Mobile friendly, awe-inspiring product pages. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-6.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Hotel Management</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> An all-inclusive hotel management application. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-7.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Education</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> A Collaborative platform for educational management. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-8.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Service Management</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> Keep track of services and invoice accordingly. </h3> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 0% 0% 6% 0%;"> |
|||
<center> |
|||
<div class="col-md-12" style="margin: auto !important; |
|||
width: 70%; |
|||
padding: 30px;"> |
|||
<h2 style="font-weight: 600;text-align: center;width: 100%;">Need Any Help?</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<h4 style="font-size:16px;"> If you have anything to share with us based on your use of this module, please let us know. We are ready to offer our support. </h4> |
|||
<div class="col-md-6" style="float:left; padding:20px;"> |
|||
<h4><i class="fa fa-envelope"></i>Email us </h4> |
|||
<p>odoo@cybrosys.com / info@cybrosys.com</p> |
|||
</div> |
|||
<div class="col-md-6" style="float:left; padding:20px;"> |
|||
<h4><i class="fa fa-phone"></i> Contact Us </h4> |
|||
<a href="https://www.cybrosys.com/contact/" target="_blank"> www.cybrosys.com</a> |
|||
</div> |
|||
</div> |
|||
</center> |
|||
</section> |
|||
<section class="oe_container" style="padding: 0% 0% 6% 0%;"> |
|||
<div class="oe_slogan" style="margin-bottom: 0px;"> |
|||
<div style=" display: flex; justify-content: center; flex-wrap: wrap; "> |
|||
</div> |
|||
<br> |
|||
<img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" class="center-block"> |
|||
<div style=" display: flex; justify-content: center; flex-wrap: wrap; "> <a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a> |
|||
</td> |
|||
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a> |
|||
</td> |
|||
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px; height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a> |
|||
</td> |
|||
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a> |
|||
</td> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
</div> |
@ -1,66 +0,0 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<data> |
|||
<record id="base_view_partner_form_inherit" model="ir.ui.view"> |
|||
<field name="name"> base.view.partner.form.inherit</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'> |
|||
<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> |
|||
</page> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
|
|||
<record id="website_config_view_inherit" model="ir.ui.view"> |
|||
<field name="name">website.config.view.inherit</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_selection_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> |