diff --git a/website_sample_product_request/README.rst b/website_sample_product_request/README.rst new file mode 100644 index 000000000..f87b64882 --- /dev/null +++ b/website_sample_product_request/README.rst @@ -0,0 +1,51 @@ +.. 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 + +Website Sample Product Request +============================== +Website Sample Product Request to handle sample product order. + +Configuration +============= +- Additional configuration not required + +Installation +============ +- www.odoo.com/documentation/16.0/setup/install.html +- Install our custom addon + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +======= +Affero General Public License v3.0 (AGPL v3) +(https://www.gnu.org/licenses/agpl-3.0-standalone.html) + +Credits +------- +* Developer: (V16): Rosmy John, 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_sample_product_request/__init__.py b/website_sample_product_request/__init__.py new file mode 100644 index 000000000..12d9cc9a1 --- /dev/null +++ b/website_sample_product_request/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright(C) 2023-TODAY Cybrosys Technologies(). +# Author: Rosmy John () +# +# 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_sample_product_request/__manifest__.py b/website_sample_product_request/__manifest__.py new file mode 100644 index 000000000..eb0d11595 --- /dev/null +++ b/website_sample_product_request/__manifest__.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright(C) 2023-TODAY Cybrosys Technologies(). +# Author: Rosmy John () +# +# 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': 'Website Sample Product Request', + 'version': '16.0.1.0.0', + 'category': 'Website', + 'summary': 'This module allows us to create sample request from website,' + 'in odoo 16', + 'description': 'This module allows us to create sample request from website' + 'by choosing sample product from backend,odoo 16', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['sale_management', 'website_sale'], + 'data': [ + 'data/website_menu_data.xml', + 'views/product_product_views.xml', + 'views/product_template_views.xml', + 'views/website_sample_product_templates.xml', + 'views/sale_order_views.xml', + 'views/website_sample_product_request_menus.xml', + ], + 'images': ['static/description/banner.png'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/website_sample_product_request/controllers/__init__.py b/website_sample_product_request/controllers/__init__.py new file mode 100644 index 000000000..976231cd8 --- /dev/null +++ b/website_sample_product_request/controllers/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright(C) 2023-TODAY Cybrosys Technologies(). +# Author: Rosmy John () +# +# 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_sample_product_request diff --git a/website_sample_product_request/controllers/website_sample_product_request.py b/website_sample_product_request/controllers/website_sample_product_request.py new file mode 100644 index 000000000..2b225b699 --- /dev/null +++ b/website_sample_product_request/controllers/website_sample_product_request.py @@ -0,0 +1,313 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright(C) 2023-TODAY Cybrosys Technologies(). +# Author: Rosmy John () +# +# 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 datetime import datetime +from werkzeug.exceptions import NotFound +from odoo.http import request +from odoo.tools import lazy +from odoo import fields, http, tools +from odoo.addons.http_routing.models.ir_http import slug +from odoo.addons.website.models.ir_http import sitemap_qs2dom +from odoo.addons.website.controllers.main import QueryURL +from odoo.addons.website_sale.controllers.main import TableCompute +from odoo.addons.website_sale.controllers.main import WebsiteSale + + +class WebsiteSaleInherit(WebsiteSale): + """This class inherits from the base WebsiteSale class and includes + overridden methods and additional functionality for handling sample + products in the shop,creating sitemap entries for categories, and + managing the shopping cart.""" + + def sitemap_shop(env, rule, qs): + """This function is overridden to create category. + Generate sitemap entries for categories in the shop. + Args: + env(env): Environment of the function. + rule: The Sitemap rule object. + qs (str): Query string parameter. + Returns: + yield (dict):Sitemap entries for shop categories.""" + 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} + + @http.route([ + '/shop', + '/shop/page/', + '/shop/category/', + '/shop/category//page/', + ], type='http', auth="public", website=True, sitemap=sitemap_shop) + def shop(self, page=0, category=None, search='', min_price=0.0, + max_price=0.0, ppg=False, **post): + """This function is used to create sample products shop. + page:Representing the page number for pagination. + category: An optional parameter specifying the category of products + to display. + search: An optional string representing the search term entered by + the user. + min_price: An optional float indicating the minimum price for + filtering products. + max_price: An optional float indicating the maximum price for + filtering products. + ppg: A boolean indicating whether to override the number of + products per page. + **post: Additional keyword arguments that can be passed to the function. + return: If `shop_type` is set, render a sample order template view. + Otherwise, render the products template with the necessary values. + """ + add_qty = int(post.get('add_qty', 1)) + try: + min_price = float(min_price) + except ValueError: + min_price = 0 + try: + max_price = float(max_price) + except ValueError: + max_price = 0 + Category = request.env['product.public.category'] + 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 + website = request.env['website'].get_current_website() + if ppg: + try: + ppg = int(ppg) + post['ppg'] = ppg + except ValueError: + ppg = False + if not ppg: + ppg = website.shop_ppg or 20 + ppr = 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} + keep = QueryURL('/shop', + **self._shop_get_query_url_kwargs( + category and int(category), search, min_price, + max_price, + **post)) + now = datetime.timestamp(datetime.now()) + pricelist = request.env['product.pricelist'].browse( + request.session.get('website_sale_current_pl')) + if not pricelist or request.session.get('website_sale_pricelist_time', + 0) < now - 60 * 60: + pricelist = website.get_current_pricelist() + request.session['website_sale_pricelist_time'] = now + request.session['website_sale_current_pl'] = pricelist.id + request.update_context(pricelist=pricelist.id, + partner=request.env.user.partner_id) + filter_by_price_enabled = website.is_view_active( + 'website_sale.filter_products_price') + if filter_by_price_enabled: + company_currency = website.company_id.currency_id + conversion_rate = request.env['res.currency']._get_conversion_rate( + company_currency, pricelist.currency_id, + request.website.company_id, fields.Date.today()) + else: + conversion_rate = 1 + url = "/shop" + if search: + post["search"] = search + if attrib_list: + post['attrib'] = attrib_list + options = self._get_search_options( + category=category, + attrib_values=attrib_values, + pricelist=pricelist, + min_price=min_price, + max_price=max_price, + conversion_rate=conversion_rate, + **post + ) + fuzzy_search_term, product_count, search_product = ( + self._shop_lookup_products(attrib_set, options, post, + search, website)) + filter_by_price_enabled = website.is_view_active( + 'website_sale.filter_products_price') + if filter_by_price_enabled: + product = request.env['product.template'].with_context( + bin_size=True) + domain = self._get_search_domain(search, category, attrib_values) + from_clause, where_clause, where_params = product._where_calc( + domain).get_sql() + query = ( + f"SELECT COALESCE(MIN(list_price), 0) * {conversion_rate}, " + f"COALESCE(MAX(list_price), 0) * {conversion_rate} " + f"FROM {from_clause} " + f"WHERE {where_clause}" + ) + request.env.cr.execute(query, where_params) + available_min_price, available_max_price = request.env.cr.fetchone() + if min_price or max_price: + if min_price: + min_price = min_price if min_price <= available_max_price \ + else available_min_price + post['min_price'] = min_price + if max_price: + max_price = max_price if max_price >= available_min_price \ + else available_max_price + post['max_price'] = max_price + website_domain = website.website_domain() + categs_domain = [('parent_id', '=', False)] + 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 = Category + categs = lazy(lambda: Category.search(categs_domain)) + if category: + url = "/shop/category/%s" % slug(category) + pager = website.pager(url=url, total=product_count, page=page, step=ppg, + scope=7, url_args=post) + offset = pager['offset'] + products = search_product[offset:offset + ppg] + shop_type = post.get('type') if post.get('type') else False + if shop_type: + products = request.env['product.template'].search( + [('is_sample_product', '=', True)]) + ProductAttribute = request.env['product.attribute'] + if products: + # get all products without limit + attributes = lazy(lambda: ProductAttribute.search([ + ('product_tmpl_ids', 'in', search_product.ids), + ('visibility', '=', 'visible'), + ])) + else: + attributes = lazy(lambda: ProductAttribute.browse(attributes_ids)) + layout_mode = request.session.get('website_sale_shop_layout_mode') + if not layout_mode: + if website.viewref('website_sale.products_list_view').active: + layout_mode = 'list' + else: + layout_mode = 'grid' + request.session['website_sale_shop_layout_mode'] = layout_mode + products_prices = lazy(lambda: products._get_sales_prices(pricelist)) + fiscal_position_id = website._get_current_fiscal_position_id( + request.env.user.partner_id) + values = { + 'search': fuzzy_search_term or search, + 'original_search': fuzzy_search_term and search, + 'order': post.get('order', ''), + 'category': category, + 'attrib_values': attrib_values, + 'attrib_set': attrib_set, + 'pager': pager, + 'pricelist': pricelist, + 'add_qty': add_qty, + 'products': products, + 'search_product': search_product, + 'search_count': product_count, # common for all searchbox + 'bins': lazy(lambda: TableCompute().process(products, ppg, ppr)), + 'ppg': ppg, + 'ppr': ppr, + 'categories': categs, + 'attributes': attributes, + 'keep': keep, + 'search_categories_ids': search_categories.ids, + 'layout_mode': layout_mode, + 'products_prices': products_prices, + 'get_product_prices': lambda product: lazy( + lambda: products_prices[product.id]), + 'float_round': tools.float_round, + 'fiscal_position_id': fiscal_position_id, + } + if filter_by_price_enabled: + values['min_price'] = min_price or available_min_price + values['max_price'] = max_price or available_max_price + values['available_min_price'] = tools.float_round( + available_min_price, 2) + values['available_max_price'] = tools.float_round( + available_max_price, 2) + if category: + values['main_object'] = category + values.update(self._get_additional_shop_values(values)) + if shop_type: + return request.render( + "website_sample_product_request.sample_order_template_view", + values) + else: + return request.render("website_sale.products", values) + + @http.route(['/shop/cart'], type='http', auth="public", website=True, + sitemap=False) + def cart(self, access_token=None, revive='', **post): + """This function is used to create sample product cart.""" + order = request.website.sale_get_order() + sample_order_line = order.order_line + for rec in sample_order_line: + if rec.product_template_id.is_sample_product: + order.is_sample_order = True + else: + order.is_sample_order = False + if order and order.state != 'draft': + request.session['sale_order_id'] = None + order = request.website.sale_get_order() + request.session['website_sale_cart_quantity'] = order.cart_quantity + values = {} + if access_token: + abandoned_order = request.env['sale.order'].sudo().search( + [('access_token', '=', access_token)], limit=1) + if not abandoned_order: + raise NotFound() + if abandoned_order.state != 'draft': + values.update({'abandoned_proceed': True}) + elif revive == 'squash' or ( + revive == 'merge' and not request.session.get( + 'sale_order_id')): + request.session['sale_order_id'] = abandoned_order.id + return request.redirect('/shop/cart') + elif revive == 'merge': + abandoned_order.order_line.write( + {'order_id': request.session['sale_order_id']}) + abandoned_order.action_cancel() + elif abandoned_order.id != request.session.get( + 'sale_order_id'): + values.update({'access_token': abandoned_order.access_token}) + values.update({ + 'website_sale_order': order, + 'date': fields.Date.today(), + 'suggested_products': [], + }) + if order: + order.order_line.filtered( + lambda l: not l.product_id.active).unlink() + values['suggested_products'] = order._cart_accessories() + values.update(self._get_express_shop_payment_values(order)) + if post.get('type') == 'popover': + return request.render("website_sale.cart_popover", values, + headers={'Cache-Control': 'no-cache'}) + return request.render("website_sale.cart", values) diff --git a/website_sample_product_request/data/website_menu_data.xml b/website_sample_product_request/data/website_menu_data.xml new file mode 100644 index 000000000..27c4898e4 --- /dev/null +++ b/website_sample_product_request/data/website_menu_data.xml @@ -0,0 +1,12 @@ + + + + + + Sample Order + /shop?type=sample + + 10 + + + diff --git a/website_sample_product_request/doc/RELEASE_NOTES.md b/website_sample_product_request/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..82055fed5 --- /dev/null +++ b/website_sample_product_request/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 31.01.2024 +#### Version 16.0.1.0.0 +#### ADD + +- Initial commit for Website Sample Product Request diff --git a/website_sample_product_request/models/__init__.py b/website_sample_product_request/models/__init__.py new file mode 100644 index 000000000..3f74ca3eb --- /dev/null +++ b/website_sample_product_request/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright(C) 2023-TODAY Cybrosys Technologies(). +# Author: Rosmy John () +# +# 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 +from . import sale_order diff --git a/website_sample_product_request/models/product_template.py b/website_sample_product_request/models/product_template.py new file mode 100644 index 000000000..685ac7a1f --- /dev/null +++ b/website_sample_product_request/models/product_template.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright(C) 2023-TODAY Cybrosys Technologies(). +# Author: Rosmy John () +# +# 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): + """It introduces an additional field 'is_sample_product' to mark products + as sample products. When a product is marked as a sample, its list price + is set to 0.0.""" + _inherit = "product.template" + + is_sample_product = fields.Boolean(string="Sample Product", + help="To know as a sample product") + + @api.onchange('is_sample_product') + def _onchange_is_sample_product(self): + """Change the product price when it is sample product""" + self.list_price = 0.0 if self.is_sample_product else self.list_price \ No newline at end of file diff --git a/website_sample_product_request/models/sale_order.py b/website_sample_product_request/models/sale_order.py new file mode 100644 index 000000000..23a3fb765 --- /dev/null +++ b/website_sample_product_request/models/sale_order.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright(C) 2023-TODAY Cybrosys Technologies(). +# Author: Rosmy John () +# +# 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 fields, models + + +class SaleOrder(models.Model): + """This class represents the order of samples in the sale order""" + _inherit = 'sale.order' + + is_sample_order = fields.Boolean(string="Sample order", + help="To identify as a sample order") diff --git a/website_sample_product_request/static/description/assets/icons/check.png b/website_sample_product_request/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/check.png differ diff --git a/website_sample_product_request/static/description/assets/icons/chevron.png b/website_sample_product_request/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/chevron.png differ diff --git a/website_sample_product_request/static/description/assets/icons/cogs.png b/website_sample_product_request/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/cogs.png differ diff --git a/website_sample_product_request/static/description/assets/icons/consultation.png b/website_sample_product_request/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/consultation.png differ diff --git a/website_sample_product_request/static/description/assets/icons/ecom-black.png b/website_sample_product_request/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/ecom-black.png differ diff --git a/website_sample_product_request/static/description/assets/icons/education-black.png b/website_sample_product_request/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/education-black.png differ diff --git a/website_sample_product_request/static/description/assets/icons/hotel-black.png b/website_sample_product_request/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/hotel-black.png differ diff --git a/website_sample_product_request/static/description/assets/icons/license.png b/website_sample_product_request/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/license.png differ diff --git a/website_sample_product_request/static/description/assets/icons/lifebuoy.png b/website_sample_product_request/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/lifebuoy.png differ diff --git a/website_sample_product_request/static/description/assets/icons/manufacturing-black.png b/website_sample_product_request/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/manufacturing-black.png differ diff --git a/website_sample_product_request/static/description/assets/icons/pos-black.png b/website_sample_product_request/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/pos-black.png differ diff --git a/website_sample_product_request/static/description/assets/icons/puzzle.png b/website_sample_product_request/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/puzzle.png differ diff --git a/website_sample_product_request/static/description/assets/icons/restaurant-black.png b/website_sample_product_request/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/restaurant-black.png differ diff --git a/website_sample_product_request/static/description/assets/icons/service-black.png b/website_sample_product_request/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/service-black.png differ diff --git a/website_sample_product_request/static/description/assets/icons/trading-black.png b/website_sample_product_request/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/trading-black.png differ diff --git a/website_sample_product_request/static/description/assets/icons/training.png b/website_sample_product_request/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/training.png differ diff --git a/website_sample_product_request/static/description/assets/icons/update.png b/website_sample_product_request/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/update.png differ diff --git a/website_sample_product_request/static/description/assets/icons/user.png b/website_sample_product_request/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/user.png differ diff --git a/website_sample_product_request/static/description/assets/icons/wrench.png b/website_sample_product_request/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/website_sample_product_request/static/description/assets/icons/wrench.png differ diff --git a/website_sample_product_request/static/description/assets/misc/categories.png b/website_sample_product_request/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/categories.png differ diff --git a/website_sample_product_request/static/description/assets/misc/check-box.png b/website_sample_product_request/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/check-box.png differ diff --git a/website_sample_product_request/static/description/assets/misc/compass.png b/website_sample_product_request/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/compass.png differ diff --git a/website_sample_product_request/static/description/assets/misc/corporate.png b/website_sample_product_request/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/corporate.png differ diff --git a/website_sample_product_request/static/description/assets/misc/customer-support.png b/website_sample_product_request/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/customer-support.png differ diff --git a/website_sample_product_request/static/description/assets/misc/cybrosys-logo.png b/website_sample_product_request/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/cybrosys-logo.png differ diff --git a/website_sample_product_request/static/description/assets/misc/features.png b/website_sample_product_request/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/features.png differ diff --git a/website_sample_product_request/static/description/assets/misc/logo.png b/website_sample_product_request/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/logo.png differ diff --git a/website_sample_product_request/static/description/assets/misc/pictures.png b/website_sample_product_request/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/pictures.png differ diff --git a/website_sample_product_request/static/description/assets/misc/pie-chart.png b/website_sample_product_request/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/pie-chart.png differ diff --git a/website_sample_product_request/static/description/assets/misc/right-arrow.png b/website_sample_product_request/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/right-arrow.png differ diff --git a/website_sample_product_request/static/description/assets/misc/star.png b/website_sample_product_request/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/star.png differ diff --git a/website_sample_product_request/static/description/assets/misc/support.png b/website_sample_product_request/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/support.png differ diff --git a/website_sample_product_request/static/description/assets/misc/whatsapp.png b/website_sample_product_request/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/website_sample_product_request/static/description/assets/misc/whatsapp.png differ diff --git a/website_sample_product_request/static/description/assets/modules/1.png b/website_sample_product_request/static/description/assets/modules/1.png new file mode 100644 index 000000000..8f3c9004e Binary files /dev/null and b/website_sample_product_request/static/description/assets/modules/1.png differ diff --git a/website_sample_product_request/static/description/assets/modules/2.png b/website_sample_product_request/static/description/assets/modules/2.png new file mode 100644 index 000000000..fa478cd14 Binary files /dev/null and b/website_sample_product_request/static/description/assets/modules/2.png differ diff --git a/website_sample_product_request/static/description/assets/modules/3.png b/website_sample_product_request/static/description/assets/modules/3.png new file mode 100644 index 000000000..df65629bf Binary files /dev/null and b/website_sample_product_request/static/description/assets/modules/3.png differ diff --git a/website_sample_product_request/static/description/assets/modules/4.png b/website_sample_product_request/static/description/assets/modules/4.png new file mode 100644 index 000000000..7b32f3698 Binary files /dev/null and b/website_sample_product_request/static/description/assets/modules/4.png differ diff --git a/website_sample_product_request/static/description/assets/modules/5.png b/website_sample_product_request/static/description/assets/modules/5.png new file mode 100644 index 000000000..6058f6c3b Binary files /dev/null and b/website_sample_product_request/static/description/assets/modules/5.png differ diff --git a/website_sample_product_request/static/description/assets/modules/6.png b/website_sample_product_request/static/description/assets/modules/6.png new file mode 100644 index 000000000..7a9d3b1f6 Binary files /dev/null and b/website_sample_product_request/static/description/assets/modules/6.png differ diff --git a/website_sample_product_request/static/description/assets/screenshots/1-web.png b/website_sample_product_request/static/description/assets/screenshots/1-web.png new file mode 100644 index 000000000..bfbd7c940 Binary files /dev/null and b/website_sample_product_request/static/description/assets/screenshots/1-web.png differ diff --git a/website_sample_product_request/static/description/assets/screenshots/2-web.png b/website_sample_product_request/static/description/assets/screenshots/2-web.png new file mode 100644 index 000000000..8a61da6e0 Binary files /dev/null and b/website_sample_product_request/static/description/assets/screenshots/2-web.png differ diff --git a/website_sample_product_request/static/description/assets/screenshots/3-web.png b/website_sample_product_request/static/description/assets/screenshots/3-web.png new file mode 100644 index 000000000..f95b7ab8f Binary files /dev/null and b/website_sample_product_request/static/description/assets/screenshots/3-web.png differ diff --git a/website_sample_product_request/static/description/assets/screenshots/4-web.png b/website_sample_product_request/static/description/assets/screenshots/4-web.png new file mode 100644 index 000000000..68d1cad53 Binary files /dev/null and b/website_sample_product_request/static/description/assets/screenshots/4-web.png differ diff --git a/website_sample_product_request/static/description/assets/screenshots/5-web.png b/website_sample_product_request/static/description/assets/screenshots/5-web.png new file mode 100644 index 000000000..b9c04eaa2 Binary files /dev/null and b/website_sample_product_request/static/description/assets/screenshots/5-web.png differ diff --git a/website_sample_product_request/static/description/assets/screenshots/6-web.png b/website_sample_product_request/static/description/assets/screenshots/6-web.png new file mode 100644 index 000000000..f02b27a45 Binary files /dev/null and b/website_sample_product_request/static/description/assets/screenshots/6-web.png differ diff --git a/website_sample_product_request/static/description/assets/screenshots/7-web.png b/website_sample_product_request/static/description/assets/screenshots/7-web.png new file mode 100644 index 000000000..0f411cad6 Binary files /dev/null and b/website_sample_product_request/static/description/assets/screenshots/7-web.png differ diff --git a/website_sample_product_request/static/description/assets/screenshots/8-web.png b/website_sample_product_request/static/description/assets/screenshots/8-web.png new file mode 100644 index 000000000..d91b98a8b Binary files /dev/null and b/website_sample_product_request/static/description/assets/screenshots/8-web.png differ diff --git a/website_sample_product_request/static/description/assets/screenshots/hero.gif b/website_sample_product_request/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..921b7a586 Binary files /dev/null and b/website_sample_product_request/static/description/assets/screenshots/hero.gif differ diff --git a/website_sample_product_request/static/description/banner.png b/website_sample_product_request/static/description/banner.png new file mode 100644 index 000000000..8f3c9004e Binary files /dev/null and b/website_sample_product_request/static/description/banner.png differ diff --git a/website_sample_product_request/static/description/icon.png b/website_sample_product_request/static/description/icon.png new file mode 100644 index 000000000..5dd27465f Binary files /dev/null and b/website_sample_product_request/static/description/icon.png differ diff --git a/website_sample_product_request/static/description/index.html b/website_sample_product_request/static/description/index.html new file mode 100644 index 000000000..dbe3005e6 --- /dev/null +++ b/website_sample_product_request/static/description/index.html @@ -0,0 +1,606 @@ +
+ +
+ +
+
+ Community +
+
+ Enterprise +
+
+
+ +
+
+
+ +

+ Website Sample Product Request

+

+ Website Sample Product Request

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

+ Explore This + Module

+
+ + + +
+
+ +
+

+ Overview +

+
+
+
+ This module helps to create sample orders from website By Choosing + Sample Product from Backend. +
+
+ + +
+
+ +
+

+ Features +

+
+
+
+
+ + Available in Odoo 16.0 + Community and Enterprise. +
+
+ + Create a sample order. +
+
+
+ + +
+
+ +
+

+ Screenshots +

+
+
+
+
+

+ Choose Sample Product in products. +

+ +
+
+

+ We can see the Sample Product in Products menu. +

+ +
+ +
+

+ Create Sample Orders in sale. +

+ +
+
+

+ Sample Product, Sample Variant and Sample Order. +

+ +
+
+

+ Sample product in website.

+ +
+
+

+ Sample product order.Price will be zero for the sample + product

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

+ Related + 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

+
+
+
+
+ + +
+
+ +
+

+ Support +

+
+
+
+
+
+
+ +
+
+

Need Help?

+

Got questions or need help? + Get in touch.

+ +

+ odoo@cybrosys.com

+
+
+
+
+
+
+
+ +
+
+

WhatsApp

+

Say hi to us on WhatsApp!

+ +

+ +91 86068 + 27707

+
+
+
+
+
+
+
+ +
+
+
+ diff --git a/website_sample_product_request/views/product_product_views.xml b/website_sample_product_request/views/product_product_views.xml new file mode 100644 index 000000000..d6731e65a --- /dev/null +++ b/website_sample_product_request/views/product_product_views.xml @@ -0,0 +1,24 @@ + + + + + Sample Variant + product.product + tree,form + [('is_sample_product','=',True)] + + + + product.product.view.form.inherit.website.sample.product.request + product.product + +
+ + 0 + +
+
+
+
diff --git a/website_sample_product_request/views/product_template_views.xml b/website_sample_product_request/views/product_template_views.xml new file mode 100644 index 000000000..c4fdb2b92 --- /dev/null +++ b/website_sample_product_request/views/product_template_views.xml @@ -0,0 +1,31 @@ + + + + + + product.template.view.form.inherit.website.sample.product.request + + product.template + + + + + + + + + + 0 + + + + + + Sample Product + product.template + tree,form + [('is_sample_product','=',True)] + + diff --git a/website_sample_product_request/views/sale_order_views.xml b/website_sample_product_request/views/sale_order_views.xml new file mode 100644 index 000000000..64782b9ca --- /dev/null +++ b/website_sample_product_request/views/sale_order_views.xml @@ -0,0 +1,23 @@ + + + + + Sample Order + sale.order + tree,form + ['&',('website_id', '!=', + False),('is_sample_order','=',True)] + + + + + sale.order.view.form.inherit.website.sample.product.request + sale.order + + + + + + + + diff --git a/website_sample_product_request/views/website_sample_product_request_menus.xml b/website_sample_product_request/views/website_sample_product_request_menus.xml new file mode 100644 index 000000000..44f251fc9 --- /dev/null +++ b/website_sample_product_request/views/website_sample_product_request_menus.xml @@ -0,0 +1,19 @@ + + + + + + + + + diff --git a/website_sample_product_request/views/website_sample_product_templates.xml b/website_sample_product_request/views/website_sample_product_templates.xml new file mode 100644 index 000000000..f1eea4478 --- /dev/null +++ b/website_sample_product_request/views/website_sample_product_templates.xml @@ -0,0 +1,143 @@ + + + + +