diff --git a/website_product_search_snippet/README.rst b/website_product_search_snippet/README.rst new file mode 100755 index 000000000..96b951b6a --- /dev/null +++ b/website_product_search_snippet/README.rst @@ -0,0 +1,48 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +====================== +Product Search Snippet +====================== +This module helps to search products in category and all category wise. + +Configuration +============= +* No additional configurations needed + +Company +------- +* `Cybrosys Techno Solutions `__ + + +License +------- +General Public License, Version 3 (AGPL v3). +(https://www.gnu.org/licenses/agpl-3.0-standalone.html) + +Credits +------- +* Developer: (V17) Ajith V, + (V16) Farhana Jahan PT, + (V14) Ajith V, Contact: odoo@cybrosys.com +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ diff --git a/website_product_search_snippet/__init__.py b/website_product_search_snippet/__init__.py new file mode 100644 index 000000000..a3e810360 --- /dev/null +++ b/website_product_search_snippet/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################### +from . import controllers +from . import models diff --git a/website_product_search_snippet/__manifest__.py b/website_product_search_snippet/__manifest__.py new file mode 100644 index 000000000..bfd724374 --- /dev/null +++ b/website_product_search_snippet/__manifest__.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################### +{ + 'name': 'Product Search Snippet', + 'version': '14.0.1.0.0', + 'summary': """Product Search Snippet for Website allows to easily search + products and filter based on category.""", + 'description': """This module enables users to search for products + within a specific category or across all categories using the search + bar on the website snippet and redirect to its details.""", + 'category': 'Website', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': [ + 'website', 'sale_management' + ], + 'data': [ + 'views/assets.xml', + 'views/snippets/search_snippet_templates.xml', + 'views/snippets/product_search_templates.xml', + 'views/snippets/product_details_templates.xml', + 'views/snippets/selected_product_from_all_product_templates.xml', + 'views/snippets/product_all_result_templates.xml', + 'views/snippets/category_details_templates.xml', + 'views/snippets/category_selected_product_templates.xml', + 'views/snippets/selected_category_from_all_category_templates.xml', + 'views/snippets/category_all_result_templates.xml', + 'views/snippets/product_select_from_category_templates.xml', + ], + 'qweb': ['static/src/xml/category_templates.xml', + 'static/src/xml/product_templates.xml', ], + 'images': ['static/description/banner.png'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/website_product_search_snippet/controllers/__init__.py b/website_product_search_snippet/controllers/__init__.py new file mode 100644 index 000000000..8a60c55de --- /dev/null +++ b/website_product_search_snippet/controllers/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################### +from . import website_product_search_snippet diff --git a/website_product_search_snippet/controllers/website_product_search_snippet.py b/website_product_search_snippet/controllers/website_product_search_snippet.py new file mode 100644 index 000000000..ce38bf54b --- /dev/null +++ b/website_product_search_snippet/controllers/website_product_search_snippet.py @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################### +from odoo import http +from odoo.http import request + +class WebsiteSnippetPage(http.Controller): + """ Controller for setting routes. Pass all categories and category wise + products as an array to a template""" + @http.route('/category/form', type='http', auth='public', + website=True, csrf=False, sitemap=False, cache=300) + def category_page(self, **kw): + """ Function for rendering specific category and products of that + category into website """ + category = request.env['product.category'].sudo().browse( + int(kw.get('category_id'))) + parent = request.env['product.category'].sudo().browse( + int(kw.get('parent_id'))) + values = { + 'category': category, + 'products': request.env['product.template'].search( + [('categ_id', '=', category.id)]), + 'products_category': request.env['product.template'].search( + [('category_id', '=', parent.id)]) + } + return http.request.render( + 'website_product_search_snippet.category_snippet_img', values) + + @http.route('/selected/category/result', type='http', auth='public', + website=True, csrf=False, sitemap=False, cache=300) + def category_all_page(self, **kw): + """ Function for rendering specific category and products of that + category into website """ + category = request.env['product.category'].sudo().browse( + int(kw.get('category_id'))) + values = { + 'category': category, + 'products': request.env['product.template'].search( + [('categ_id', '=', category.id)]) + } + return http.request.render( + 'website_product_search_snippet.all_category_snippet_img', values) + + @http.route('/selected/category/from/all_category/result', type='http', auth='public', + website=True, csrf=False, sitemap=False, cache=300) + def category_from_all_category_page(self, **kw): + """ Function for rendering specific category and products of that + category into website """ + category = request.env['product.category'].sudo().browse( + int(kw.get('category_id'))) + values = { + 'category': category, + 'products': request.env['product.template'].search( + [('categ_id', '=', category.id)]) + } + return http.request.render( + 'website_product_search_snippet.category_from_all_category_snippet_img', values) + + @http.route('/product/form', type='http', auth='public', + website=True, csrf=False, sitemap=False, cache=300) + def product_page(self, **kw): + """ Function for rendering specific product into website """ + values = { + 'products': request.env['product.template'].sudo().browse( + int(kw.get('product_id'))) + } + return http.request.render( + 'website_product_search_snippet.products_snippet_img', values) + + @http.route('/selected/product/from/category', type='http', auth='public', + website=True, csrf=False, sitemap=False, cache=300) + def selected_product_page(self, **kw): + """ Function for rendering specific product into website """ + values = { + 'products': request.env['product.template'].sudo().browse( + int(kw.get('product_id'))) + } + return http.request.render( + 'website_product_search_snippet.selected_products_from_category_snippet_img', + values) + + @http.route('/all/product/selected/product/details', type='http', + auth='public', + website=True, csrf=False, sitemap=False, cache=300) + def product_all_page(self, **kw): + """ Function for rendering specific product into website """ + values = { + 'products': request.env['product.template'].sudo().browse( + int(kw.get('product_id'))) + } + return http.request.render( + 'website_product_search_snippet.all_products_snippet_img', values) + + @http.route('/select/product/from/category', type='http', auth='public', + website=True, csrf=False, sitemap=False, cache=300) + def product_category_all_page(self, **kw): + """ Function for rendering specific product into website """ + values = { + 'products': request.env['product.template'].sudo().browse( + int(kw.get('product_id'))) + } + return http.request.render( + 'website_product_search_snippet.products_category_snippet_img', + values) + + @http.route('/product/form/all/results', type='http', auth='public', + website=True, csrf=False, sitemap=False, cache=300) + def product_page_result(self): + """ Function for rendering all products into website """ + values = { + 'products': request.env['product.template'].search([]) + } + return http.request.render( + "website_product_search_snippet.product_all_result_template", + values) + + @http.route('/category/form/all/results', type='http', auth='public', + website=True, csrf=False, sitemap=False, cache=300) + def category_page_result(self): + """ Function for rendering all categories into website """ + values = {'category': request.env['product.category'].search( + [('id', '!=', request.env.ref('product.product_category_all').id), + ('id', '!=', request.env.ref('product.product_category_1').id)])} + return http.request.render( + "website_product_search_snippet.category_all_result_template", + values) diff --git a/website_product_search_snippet/doc/RELEASE_NOTES.md b/website_product_search_snippet/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..13b3994c7 --- /dev/null +++ b/website_product_search_snippet/doc/RELEASE_NOTES.md @@ -0,0 +1,5 @@ +## Module + +#### 17.09.2024 +#### Version 14.0.1.0.0 +##### ADD diff --git a/website_product_search_snippet/models/__init__.py b/website_product_search_snippet/models/__init__.py new file mode 100644 index 000000000..d33177e72 --- /dev/null +++ b/website_product_search_snippet/models/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################### +from . import product_template diff --git a/website_product_search_snippet/models/product_template.py b/website_product_search_snippet/models/product_template.py new file mode 100644 index 000000000..ecf4ff0f5 --- /dev/null +++ b/website_product_search_snippet/models/product_template.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import api, fields, models + + +class ProductTemplate(models.Model): + """ Inherit product_template model for fetch products and categories to + frontend. """ + _inherit = 'product.template' + + parent_category_id = fields.Many2one("product.category", + string="Parent Category", + help="Parent Category of product.") + category_boolean = fields.Boolean(default=True, + help="If enabled will be able to search " + "based on Category.") + category_id = fields.Char(string='Parent Category', + compute="_compute_parent_id", + help="Compute the category id of the product.") + + @api.depends('category_boolean') + def _compute_parent_id(self): + """ Get the parent category of the product """ + for record in self: + record.category_id = record.categ_id.parent_id.id + + @api.model + def search_products(self, qry): + """ Search all products in product.template, and pass searched products + into templates. """ + products = self.env['product.template'].search([('name', 'ilike', qry)]) + return [[product.name, product.id, + product.list_price, + '/web/image/product.template/{}/image_512/'.format(product.id), + product.currency_id.symbol, ] + for product in products] + + @api.model + def search_all_categories(self): + """ Search products in all categories """ + products = self.env['product.template'].search([]) + return [[product.name, product.id, + product.list_price, + '/web/image/product.template/{}/image_512/'.format(product.id), + product.currency_id.symbol, ] + for product in products] + + @api.model + def product_all_categories(self): + """ Search all product categories """ + categories = self.env['product.category'].search([ + ('id', '!=', self.env.ref('product.product_category_all').id)]) + return [[category.name, category.id, category.parent_id.name, + category.parent_id.id, category.product_count] + for category in categories] + + @api.model + def product_category(self, qry): + """ Search all category in product_category, and pass category into + another template. """ + category = self.env['product.category'].search( + [('id', '!=', self.env.ref('product.product_category_all').id), + ('name', 'ilike', qry)]) + return [[category.name, category.id, category.parent_id.name, + category.parent_id.id, category.product_count] + for category in category] diff --git a/website_product_search_snippet/static/description/assets/icons/check.png b/website_product_search_snippet/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/check.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/chevron.png b/website_product_search_snippet/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/chevron.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/cogs.png b/website_product_search_snippet/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/cogs.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/consultation.png b/website_product_search_snippet/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/consultation.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/ecom-black.png b/website_product_search_snippet/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/ecom-black.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/education-black.png b/website_product_search_snippet/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/education-black.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/hotel-black.png b/website_product_search_snippet/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/hotel-black.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/license.png b/website_product_search_snippet/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/license.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/lifebuoy.png b/website_product_search_snippet/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/lifebuoy.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/logo.png b/website_product_search_snippet/static/description/assets/icons/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/logo.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/manufacturing-black.png b/website_product_search_snippet/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/manufacturing-black.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/pos-black.png b/website_product_search_snippet/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/pos-black.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/puzzle.png b/website_product_search_snippet/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/puzzle.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/restaurant-black.png b/website_product_search_snippet/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/restaurant-black.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/service-black.png b/website_product_search_snippet/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/service-black.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/trading-black.png b/website_product_search_snippet/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/trading-black.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/training.png b/website_product_search_snippet/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/training.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/update.png b/website_product_search_snippet/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/update.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/user.png b/website_product_search_snippet/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/user.png differ diff --git a/website_product_search_snippet/static/description/assets/icons/wrench.png b/website_product_search_snippet/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/website_product_search_snippet/static/description/assets/icons/wrench.png differ diff --git a/website_product_search_snippet/static/description/assets/modules/1.png b/website_product_search_snippet/static/description/assets/modules/1.png new file mode 100644 index 000000000..cf31cfb4a Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/1.png differ diff --git a/website_product_search_snippet/static/description/assets/modules/2.png b/website_product_search_snippet/static/description/assets/modules/2.png new file mode 100644 index 000000000..d11710492 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/2.png differ diff --git a/website_product_search_snippet/static/description/assets/modules/3.png b/website_product_search_snippet/static/description/assets/modules/3.png new file mode 100644 index 000000000..4e4ea0e51 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/3.png differ diff --git a/website_product_search_snippet/static/description/assets/modules/4.png b/website_product_search_snippet/static/description/assets/modules/4.png new file mode 100644 index 000000000..8189b153b Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/4.png differ diff --git a/website_product_search_snippet/static/description/assets/modules/5.png b/website_product_search_snippet/static/description/assets/modules/5.png new file mode 100644 index 000000000..3afc14722 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/5.png differ diff --git a/website_product_search_snippet/static/description/assets/modules/6.png b/website_product_search_snippet/static/description/assets/modules/6.png new file mode 100644 index 000000000..5019050da Binary files /dev/null and b/website_product_search_snippet/static/description/assets/modules/6.png differ diff --git a/website_product_search_snippet/static/description/assets/screenshots/1.png b/website_product_search_snippet/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..4c9e05a5e Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/1.png differ diff --git a/website_product_search_snippet/static/description/assets/screenshots/2.png b/website_product_search_snippet/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..aad2077af Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/2.png differ diff --git a/website_product_search_snippet/static/description/assets/screenshots/3.png b/website_product_search_snippet/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..2217ba059 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/3.png differ diff --git a/website_product_search_snippet/static/description/assets/screenshots/4.png b/website_product_search_snippet/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..de2af17e5 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/4.png differ diff --git a/website_product_search_snippet/static/description/assets/screenshots/5.png b/website_product_search_snippet/static/description/assets/screenshots/5.png new file mode 100644 index 000000000..ebd31ae2f Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/5.png differ diff --git a/website_product_search_snippet/static/description/assets/screenshots/6.png b/website_product_search_snippet/static/description/assets/screenshots/6.png new file mode 100644 index 000000000..667a01216 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/6.png differ diff --git a/website_product_search_snippet/static/description/assets/screenshots/7.png b/website_product_search_snippet/static/description/assets/screenshots/7.png new file mode 100644 index 000000000..9540dcf5f Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/7.png differ diff --git a/website_product_search_snippet/static/description/assets/screenshots/hero.gif b/website_product_search_snippet/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..8873b8379 Binary files /dev/null and b/website_product_search_snippet/static/description/assets/screenshots/hero.gif differ diff --git a/website_product_search_snippet/static/description/banner.png b/website_product_search_snippet/static/description/banner.png new file mode 100644 index 000000000..6675f4733 Binary files /dev/null and b/website_product_search_snippet/static/description/banner.png differ diff --git a/website_product_search_snippet/static/description/icon.png b/website_product_search_snippet/static/description/icon.png new file mode 100644 index 000000000..20241e05d Binary files /dev/null and b/website_product_search_snippet/static/description/icon.png differ diff --git a/website_product_search_snippet/static/description/images/checked.png b/website_product_search_snippet/static/description/images/checked.png new file mode 100644 index 000000000..578cedb80 Binary files /dev/null and b/website_product_search_snippet/static/description/images/checked.png differ diff --git a/website_product_search_snippet/static/description/images/cybrosys.png b/website_product_search_snippet/static/description/images/cybrosys.png new file mode 100644 index 000000000..d76b5bafb Binary files /dev/null and b/website_product_search_snippet/static/description/images/cybrosys.png differ diff --git a/website_product_search_snippet/static/description/images/odoo-powr-countdown-timer-12.0.1.0.zip b/website_product_search_snippet/static/description/images/odoo-powr-countdown-timer-12.0.1.0.zip new file mode 100644 index 000000000..54b4beb1f Binary files /dev/null and b/website_product_search_snippet/static/description/images/odoo-powr-countdown-timer-12.0.1.0.zip differ diff --git a/website_product_search_snippet/static/description/images/paytm_payment_gateway.gif b/website_product_search_snippet/static/description/images/paytm_payment_gateway.gif new file mode 100644 index 000000000..d18f662d3 Binary files /dev/null and b/website_product_search_snippet/static/description/images/paytm_payment_gateway.gif differ diff --git a/website_product_search_snippet/static/description/images/product_brand_ecommerce.png b/website_product_search_snippet/static/description/images/product_brand_ecommerce.png new file mode 100644 index 000000000..4a3246e78 Binary files /dev/null and b/website_product_search_snippet/static/description/images/product_brand_ecommerce.png differ diff --git a/website_product_search_snippet/static/description/images/scrn1.png b/website_product_search_snippet/static/description/images/scrn1.png new file mode 100644 index 000000000..462407dbd Binary files /dev/null and b/website_product_search_snippet/static/description/images/scrn1.png differ diff --git a/website_product_search_snippet/static/description/images/scrn10.png b/website_product_search_snippet/static/description/images/scrn10.png new file mode 100644 index 000000000..5f67bf6a5 Binary files /dev/null and b/website_product_search_snippet/static/description/images/scrn10.png differ diff --git a/website_product_search_snippet/static/description/images/scrn2.png b/website_product_search_snippet/static/description/images/scrn2.png new file mode 100644 index 000000000..54628a8dd Binary files /dev/null and b/website_product_search_snippet/static/description/images/scrn2.png differ diff --git a/website_product_search_snippet/static/description/images/scrn3.png b/website_product_search_snippet/static/description/images/scrn3.png new file mode 100644 index 000000000..626c16571 Binary files /dev/null and b/website_product_search_snippet/static/description/images/scrn3.png differ diff --git a/website_product_search_snippet/static/description/images/scrn4.png b/website_product_search_snippet/static/description/images/scrn4.png new file mode 100644 index 000000000..01bf06e39 Binary files /dev/null and b/website_product_search_snippet/static/description/images/scrn4.png differ diff --git a/website_product_search_snippet/static/description/images/scrn5.png b/website_product_search_snippet/static/description/images/scrn5.png new file mode 100644 index 000000000..85befd215 Binary files /dev/null and b/website_product_search_snippet/static/description/images/scrn5.png differ diff --git a/website_product_search_snippet/static/description/images/scrn6.png b/website_product_search_snippet/static/description/images/scrn6.png new file mode 100644 index 000000000..263c5679a Binary files /dev/null and b/website_product_search_snippet/static/description/images/scrn6.png differ diff --git a/website_product_search_snippet/static/description/images/scrn7.png b/website_product_search_snippet/static/description/images/scrn7.png new file mode 100644 index 000000000..fc9ee5ed3 Binary files /dev/null and b/website_product_search_snippet/static/description/images/scrn7.png differ diff --git a/website_product_search_snippet/static/description/images/scrn8.png b/website_product_search_snippet/static/description/images/scrn8.png new file mode 100644 index 000000000..e78a07031 Binary files /dev/null and b/website_product_search_snippet/static/description/images/scrn8.png differ diff --git a/website_product_search_snippet/static/description/images/scrn9.png b/website_product_search_snippet/static/description/images/scrn9.png new file mode 100644 index 000000000..21744894f Binary files /dev/null and b/website_product_search_snippet/static/description/images/scrn9.png differ diff --git a/website_product_search_snippet/static/description/images/website_featured_products.jpeg b/website_product_search_snippet/static/description/images/website_featured_products.jpeg new file mode 100644 index 000000000..9542b3f7a Binary files /dev/null and b/website_product_search_snippet/static/description/images/website_featured_products.jpeg differ diff --git a/website_product_search_snippet/static/description/images/website_repeat_sale.jpeg b/website_product_search_snippet/static/description/images/website_repeat_sale.jpeg new file mode 100644 index 000000000..dc8e987fb Binary files /dev/null and b/website_product_search_snippet/static/description/images/website_repeat_sale.jpeg differ diff --git a/website_product_search_snippet/static/description/images/website_sale_advanced_search.png b/website_product_search_snippet/static/description/images/website_sale_advanced_search.png new file mode 100644 index 000000000..691f06847 Binary files /dev/null and b/website_product_search_snippet/static/description/images/website_sale_advanced_search.png differ diff --git a/website_product_search_snippet/static/description/images/website_sale_product_quick_view.jpeg b/website_product_search_snippet/static/description/images/website_sale_product_quick_view.jpeg new file mode 100644 index 000000000..6fa520659 Binary files /dev/null and b/website_product_search_snippet/static/description/images/website_sale_product_quick_view.jpeg differ diff --git a/website_product_search_snippet/static/description/index.html b/website_product_search_snippet/static/description/index.html new file mode 100644 index 000000000..fe6f72b55 --- /dev/null +++ b/website_product_search_snippet/static/description/index.html @@ -0,0 +1,686 @@ +
+
+
+
+ +
+
+
+ Community +
+
+ Enterprise +
+ +
+
+
+
+ +
+
+
+

+ Product Search Snippet

+

+ This App Allows to Search Products in Category With the Help of + Snippet +

+ +
+
+ + + + +
+
+

+ Overview +

+
+ +
+

+ This module allows users to search for products either within a + particular category or across all categories by utilizing the + search bar on the website snippet. Subsequently, users can be + redirected to view the details of the chosen product. +

+ +
+
+ + +
+
+

+ Features +

+
+ +
+
+ +
+
+

+ + Community,Enterprise and Odoo.sh Support. +

+
+
+ +
+
+ +
+
+

+ + Search for Products based on specific Categories as well as across All Categories.

+ +
+
+ +
+
+ +
+
+

+ + Filtering can be applied during the search process, either based on a specific Category or across All Categories.

+
+
+
+
+ +
+
+

+ Product details can be viewed by clicking on the respective Products.

+
+
+
+ +
+
+

+ Screenshots +

+
+
+

+ Drag the Product Search Snippet and save it. +

+ +
+
+

+ When selecting "All Categories," the system should be able to display All Products as users type in the Search Bar, and users should have the option to choose a specific Product. +

+ +
+ +
+

+ Upon selecting a Product, the system should direct users to the details of that Product. Within the product details page, there should be an option available for users to navigate Back to the previous page. +

+ +
+ +
+

+ Upon selecting "Category", the Search Bar should be filtered according to the chosen Category. This allows users to narrow down their search, and they should be able to select a Category from there. If no products are available in the selected Category, the color red will be displayed. Additionally, a button labeled "See All Category" will be provided to users.

+ +
+
+

+ Get all Product Categories. Additionally, utilize red and blue colors to signify the product count within each category. +

+ +
+ +
+

+ Clicking on a Category should lead users to a dedicated page that displays Products falling under that specific Category.There also contains a Search Bar for search products +

+ +
+ +
+

+ When there are No Products Available under the selected Category, the system should display the following message. +

+ +
+
+ +
+
+

Suggested Products

+
+ + +
+
+ + + +
+
+
+

Our Services

+
+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ + +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ + +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

Our Industries

+
+
+ +
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+ +
+
+ + + + + +
+
+
+

Need Help?

+
+
+
+ + +
+ +
+ +
+ +
+ WhatsApp +
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ + +
\ No newline at end of file diff --git a/website_product_search_snippet/static/src/img/icon.png b/website_product_search_snippet/static/src/img/icon.png new file mode 100644 index 000000000..06cca8e93 Binary files /dev/null and b/website_product_search_snippet/static/src/img/icon.png differ diff --git a/website_product_search_snippet/static/src/js/search_bar.js b/website_product_search_snippet/static/src/js/search_bar.js new file mode 100644 index 000000000..00621c7fc --- /dev/null +++ b/website_product_search_snippet/static/src/js/search_bar.js @@ -0,0 +1,37 @@ +odoo.define('website_product_search_snippet.search', function (require) { + "use strict"; + var publicWidget = require('web.public.widget'); + publicWidget.registry.portalDetails = publicWidget.Widget.extend({ + /** + * Retrieve all the data from the table. + */ + selector: '.product_search_bar', + events: { + 'keyup .search_product_bar': '_onKeyUp', + }, + // Function to start a website. + start: function () { + this._super.apply(this, arguments); + }, + // Function to search table datas. + _onKeyUp: function () { + var input, filter, table, tr, td, i, txtValue; + input = this.$el.find("#searchBarInput")[0]; + filter = input.value.toUpperCase(); + table = this.$el.find("#category_table") + tr = table[0].children.category_table_body.children; + for (i = 0; i < tr.length; i++) { + td = tr[i].children; + for (var j = 0; j < td.length; j++) { + txtValue = td[j].textContent || td[j].innerText; + if (txtValue.toUpperCase().indexOf(filter) > -1) { + tr[i].style.display = ""; + break; + } else { + tr[i].style.display = "none"; + } + } + } + }, + }); +}); diff --git a/website_product_search_snippet/static/src/js/website_product_search_snippet.js b/website_product_search_snippet/static/src/js/website_product_search_snippet.js new file mode 100644 index 000000000..aca6ac352 --- /dev/null +++ b/website_product_search_snippet/static/src/js/website_product_search_snippet.js @@ -0,0 +1,85 @@ +odoo.define('website_product_search_snippet.dynamic', function (require) { + 'use strict'; + + var publicWidget = require('web.public.widget'); + var rpc = require('web.rpc'); + var core = require('web.core'); + var Qweb = core.qweb; + var Dynamic = publicWidget.Widget.extend({ + selector: '.dynamic_search_snippet', + xmlDependencies: [ + "/website_product_search_snippet/static/src/xml/category_templates.xml", + "/website_product_search_snippet/static/src/xml/product_templates.xml", + ], + events: { + 'click .search_container': '_onClick', + 'keyup .search_bar': '_onKeyUp', + 'change .category_options': '_filterProducts', + }, + // When click on search bar, products/categories will displays.otherwise products/categories will not be displayed + _onClick: function () { + this.$el.find('#searchInput').val(""); + }, + // Call rpc query to keyup function for display all products under all category filter + _onKeyUp: async function (ev) { + var self = this; + var category = this.$el.find(".category_options").find(":selected").val(); + var qry = $(ev.currentTarget).val() + if (category === "volvo") { + await rpc.query({ + model: 'product.template', + method: 'search_products', + args: [qry], + }).then(function (result) { + self.$('.qweb_product_id').html(""); + self.$('.qweb_product_id').append(Qweb.render('website_product_search_snippet.product_template', { + 'result': result + })); + }); + } + // Call rpc query to keyup function for display all category under category filter + if (category === "saab") { + await rpc.query({ + model: 'product.template', + method: 'product_category', + args: [qry], + }).then(function (result) { + self.$('.qweb_product_id').html(""); + self.$('.qweb_product_id').append(Qweb.render('website_product_search_snippet.product_category', { + result + })); + }); + } + }, + _filterProducts: async function (ev) { + var self = this; + var category = this.$el.find(".category_options").find(":selected").val(); + if (category === "volvo") { + await rpc.query({ + model: 'product.template', + method: 'search_all_categories', + args: [], + }).then(function (result) { + self.$('.qweb_product_id').html(""); + self.$('.qweb_product_id').append(Qweb.render('website_product_search_snippet.product_template', { + 'result': result + })); + }); + } + if (category === "saab") { + await rpc.query({ + model: 'product.template', + method: 'product_all_categories', + args: [], + }).then(function (result) { + self.$('.qweb_product_id').html(""); + self.$('.qweb_product_id').append(Qweb.render('website_product_search_snippet.product_category', { + result + })); + }); + } + }, + }); + publicWidget.registry.dynamic_search_snippet = Dynamic; + return Dynamic; +}); diff --git a/website_product_search_snippet/static/src/scss/website_product_search_snippet.scss b/website_product_search_snippet/static/src/scss/website_product_search_snippet.scss new file mode 100644 index 000000000..7d988f26c --- /dev/null +++ b/website_product_search_snippet/static/src/scss/website_product_search_snippet.scss @@ -0,0 +1,25 @@ +.heading{ + color: #fff6f8; + background: #575758; + font-size: 47px; + font-weight: bold; +} +.search_bar{ + margin-left: 47px; + border-radius: 15px; +} +.search_container{ + background: #9c9a9a +} +#sub_temp{ + background: #e9e9f1; +} +#category_template{ + background: #e9e9f1; +} +#table_header { + background-color: #bababa; + color: white; +} +#table_row:nth-child(even){background-color: #ededed} +#category_table:nth-child(even){background-color: #c3c3c3} diff --git a/website_product_search_snippet/static/src/xml/category_templates.xml b/website_product_search_snippet/static/src/xml/category_templates.xml new file mode 100644 index 000000000..d367d94de --- /dev/null +++ b/website_product_search_snippet/static/src/xml/category_templates.xml @@ -0,0 +1,61 @@ + + + + +
+
+
+
+
+

Categories

+
+ +

No results found. Please try another search.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parent CategoryCategory
+ See All Categories + +
+
+
+ + diff --git a/website_product_search_snippet/static/src/xml/product_templates.xml b/website_product_search_snippet/static/src/xml/product_templates.xml new file mode 100644 index 000000000..c5932e3f8 --- /dev/null +++ b/website_product_search_snippet/static/src/xml/product_templates.xml @@ -0,0 +1,61 @@ + + + + +
+
+
+
+
+

Products

+
+ +

No results found. Please try another search.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ImageProduct Price
+ See All Products + +
+
+
+ + diff --git a/website_product_search_snippet/views/assets.xml b/website_product_search_snippet/views/assets.xml new file mode 100644 index 000000000..29fbb93bd --- /dev/null +++ b/website_product_search_snippet/views/assets.xml @@ -0,0 +1,14 @@ + + +