| @ -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> | |||