diff --git a/product_brand_ecommerce/README.md b/product_brand_ecommerce/README.md new file mode 100644 index 000000000..757364761 --- /dev/null +++ b/product_brand_ecommerce/README.md @@ -0,0 +1,32 @@ +Product Brand in eCommerce +========================== + +Installation +============ +- www.odoo.com/documentation/15.0/setup/install.html +- Install our custom addon + +License +======= +GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (AGPLv3) +(http://www.gnu.org/licenses/agpl.html) + +Bug Tracker +=========== +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Credits +======= +* Cybrosys Techno Solutions + + +Developer: Afras Habis - odoo@cybrosys.com, + V15 Midilaj V K - odoo@cybrosys.com + +Maintainer +---------- + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com. + diff --git a/product_brand_ecommerce/__init__.py b/product_brand_ecommerce/__init__.py new file mode 100644 index 000000000..afbd69d17 --- /dev/null +++ b/product_brand_ecommerce/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies() +# Author: Midilaj () +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from . import controllers diff --git a/product_brand_ecommerce/__manifest__.py b/product_brand_ecommerce/__manifest__.py new file mode 100644 index 000000000..48a52e481 --- /dev/null +++ b/product_brand_ecommerce/__manifest__.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2021-TODAY Cybrosys Technologies() +# Author: Midilaj () +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# + +{ + 'name': 'Product Brand in eCommerce', + 'version': '15.0.1.0.0', + 'category': 'eCommerce', + 'summary': 'Product Brand in eCommerce', + 'description': 'Product Brand in eCommerce', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'images': ['static/description/banner.png'], + 'website': 'https://www.cybrosys.com', + 'depends': ['product_brand_sale', 'website_sale'], + 'data': [ + 'views/template.xml', + 'views/sale_report_views.xml' + ], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, + +} diff --git a/product_brand_ecommerce/controllers/__init__.py b/product_brand_ecommerce/controllers/__init__.py new file mode 100644 index 000000000..5871b7cca --- /dev/null +++ b/product_brand_ecommerce/controllers/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies() +# Author: Midilaj () +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from . import main diff --git a/product_brand_ecommerce/controllers/main.py b/product_brand_ecommerce/controllers/main.py new file mode 100644 index 000000000..573f5eede --- /dev/null +++ b/product_brand_ecommerce/controllers/main.py @@ -0,0 +1,246 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies() +# Author: Midilaj () +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# + +import json +import logging +from datetime import datetime +from werkzeug.exceptions import Forbidden, NotFound + +from odoo import fields, http, tools, _ +from odoo.http import request +from odoo.addons.http_routing.models.ir_http import slug +from odoo.addons.website.controllers.main import QueryURL +from odoo.addons.website_sale.controllers.main import WebsiteSale + +_logger = logging.getLogger(__name__) + + +class TableCompute(object): + + def __init__(self): + self.table = {} + + def _check_place(self, posx, posy, sizex, sizey, ppr): + res = True + for y in range(sizey): + for x in range(sizex): + if posx + x >= ppr: + res = False + break + row = self.table.setdefault(posy + y, {}) + if row.setdefault(posx + x) is not None: + res = False + break + for x in range(ppr): + self.table[posy + y].setdefault(x, None) + return res + + def process(self, products, ppg=20, ppr=4): + # Compute products positions on the grid + minpos = 0 + index = 0 + maxy = 0 + x = 0 + for p in products: + x = min(max(p.website_size_x, 1), ppr) + y = min(max(p.website_size_y, 1), ppr) + if index >= ppg: + x = y = 1 + + pos = minpos + while not self._check_place(pos % ppr, pos // ppr, x, y, ppr): + pos += 1 + # if 21st products (index 20) and the last line is full (ppr products in it), break + # (pos + 1.0) / ppr is the line where the product would be inserted + # maxy is the number of existing lines + # + 1.0 is because pos begins at 0, thus pos 20 is actually the 21st block + # and to force python to not round the division operation + if index >= ppg and ((pos + 1.0) // ppr) > maxy: + break + + if x == 1 and y == 1: # simple heuristic for CPU optimization + minpos = pos // ppr + + for y2 in range(y): + for x2 in range(x): + self.table[(pos // ppr) + y2][(pos % ppr) + x2] = False + self.table[pos // ppr][pos % ppr] = { + 'product': p, 'x': x, 'y': y, + 'ribbon': p.website_ribbon_id, + } + if index <= ppg: + maxy = max(maxy, y + (pos // ppr)) + index += 1 + + # Format table according to HTML needs + rows = sorted(self.table.items()) + rows = [r[1] for r in rows] + for col in range(len(rows)): + cols = sorted(rows[col].items()) + x += len(cols) + rows[col] = [r[1] for r in cols if r[1]] + + return rows + + +class WebsiteSales(WebsiteSale): + @http.route([ + '''/shop''', + '''/shop/page/''', + '''/shop/category/''', + '''/shop/category//page/''', + '''/shop/brand/''', + ], type='http', auth="public", website=True) + def shop(self, page=0, category=None, search='', ppg=False, brand=None, **post): + add_qty = int(post.get('add_qty', 1)) + compute_brand = brand + 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 + + Brand = request.env['product.brand'] + if not brand: + brand = Brand + + 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) + + 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 + + Product = request.env['product.template'].with_context(bin_size=True) + + search_product = Product.search(domain) + website_domain = request.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 = Category.search(categs_domain) + + 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)) + print(products) + + 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' + Brand = request.env['product.brand'].search([]) + if compute_brand: + products_brand = request.env['product.template'].search( + ['&', ('brand_id', '=', brand.id), ('sale_ok', '=', True)]) + product_brand_count = len(products_brand) + pager_brand = request.website.pager(url=url, total=product_brand_count, page=page, step=ppg, scope=7, + url_args=post) + values = { + 'search': search, + 'category': category, + 'brand': brand, + 'attrib_values': attrib_values, + 'attrib_set': attrib_set, + 'pager': pager_brand, + 'pricelist': pricelist, + 'add_qty': add_qty, + 'products': products_brand, + 'search_count': product_brand_count, # common for all searchbox + 'bins': TableCompute().process(products_brand, ppg, ppr), + 'ppg': ppg, + 'ppr': ppr, + 'categories': categs, + 'attributes': attributes, + 'keep': keep, + 'search_categories_ids': search_categories.ids, + 'layout_mode': layout_mode, + 'brands': Brand, + } + return request.render("website_sale.products", values) + else: + values = { + 'brand': brand, + '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': categs, + 'attributes': attributes, + 'keep': keep, + 'search_categories_ids': search_categories.ids, + 'layout_mode': layout_mode, + 'brands': Brand, + } + if category: + values['main_object'] = category + return request.render("website_sale.products", values) diff --git a/product_brand_ecommerce/doc/RELEASE_NOTES.md b/product_brand_ecommerce/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..2558cca0a --- /dev/null +++ b/product_brand_ecommerce/doc/RELEASE_NOTES.md @@ -0,0 +1,4 @@ +## Module + +#### 22.10.2021 +#### Version 15.0.1.0.0 \ No newline at end of file diff --git a/product_brand_ecommerce/static/description/assets/icons/check.png b/product_brand_ecommerce/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/check.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/chevron.png b/product_brand_ecommerce/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/chevron.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/cogs.png b/product_brand_ecommerce/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/cogs.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/consultation.png b/product_brand_ecommerce/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/consultation.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/ecom-black.png b/product_brand_ecommerce/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/ecom-black.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/education-black.png b/product_brand_ecommerce/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/education-black.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/hotel-black.png b/product_brand_ecommerce/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/hotel-black.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/license.png b/product_brand_ecommerce/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/license.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/lifebuoy.png b/product_brand_ecommerce/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/lifebuoy.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/logo.png b/product_brand_ecommerce/static/description/assets/icons/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/logo.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/manufacturing-black.png b/product_brand_ecommerce/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/manufacturing-black.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/pos-black.png b/product_brand_ecommerce/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/pos-black.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/puzzle.png b/product_brand_ecommerce/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/puzzle.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/restaurant-black.png b/product_brand_ecommerce/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/restaurant-black.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/service-black.png b/product_brand_ecommerce/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/service-black.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/trading-black.png b/product_brand_ecommerce/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/trading-black.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/training.png b/product_brand_ecommerce/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/training.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/update.png b/product_brand_ecommerce/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/update.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/user.png b/product_brand_ecommerce/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/user.png differ diff --git a/product_brand_ecommerce/static/description/assets/icons/wrench.png b/product_brand_ecommerce/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/icons/wrench.png differ diff --git a/product_brand_ecommerce/static/description/assets/modules/1.png b/product_brand_ecommerce/static/description/assets/modules/1.png new file mode 100644 index 000000000..924a65196 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/modules/1.png differ diff --git a/product_brand_ecommerce/static/description/assets/modules/2.png b/product_brand_ecommerce/static/description/assets/modules/2.png new file mode 100644 index 000000000..4e4ea0e51 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/modules/2.png differ diff --git a/product_brand_ecommerce/static/description/assets/modules/3.png b/product_brand_ecommerce/static/description/assets/modules/3.png new file mode 100644 index 000000000..4be2248a4 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/modules/3.png differ diff --git a/product_brand_ecommerce/static/description/assets/modules/4.png b/product_brand_ecommerce/static/description/assets/modules/4.png new file mode 100644 index 000000000..3afc14722 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/modules/4.png differ diff --git a/product_brand_ecommerce/static/description/assets/modules/5.png b/product_brand_ecommerce/static/description/assets/modules/5.png new file mode 100644 index 000000000..cea66b05f Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/modules/5.png differ diff --git a/product_brand_ecommerce/static/description/assets/modules/6.png b/product_brand_ecommerce/static/description/assets/modules/6.png new file mode 100644 index 000000000..0c9bb377e Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/modules/6.png differ diff --git a/product_brand_ecommerce/static/description/assets/screenshots/hero.png b/product_brand_ecommerce/static/description/assets/screenshots/hero.png new file mode 100644 index 000000000..1a1c2f392 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/screenshots/hero.png differ diff --git a/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce1.png b/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce1.png new file mode 100644 index 000000000..978e0767e Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce1.png differ diff --git a/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce2.png b/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce2.png new file mode 100644 index 000000000..7583cca36 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce2.png differ diff --git a/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce3.png b/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce3.png new file mode 100644 index 000000000..76118df23 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce3.png differ diff --git a/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce4.png b/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce4.png new file mode 100644 index 000000000..6fe1fcb63 Binary files /dev/null and b/product_brand_ecommerce/static/description/assets/screenshots/product_brand_ecommerce4.png differ diff --git a/product_brand_ecommerce/static/description/banner.png b/product_brand_ecommerce/static/description/banner.png new file mode 100644 index 000000000..ae3e11bff Binary files /dev/null and b/product_brand_ecommerce/static/description/banner.png differ diff --git a/product_brand_ecommerce/static/description/icon.png b/product_brand_ecommerce/static/description/icon.png new file mode 100644 index 000000000..d78eddf62 Binary files /dev/null and b/product_brand_ecommerce/static/description/icon.png differ diff --git a/product_brand_ecommerce/static/description/index.html b/product_brand_ecommerce/static/description/index.html new file mode 100644 index 000000000..cc71d1330 --- /dev/null +++ b/product_brand_ecommerce/static/description/index.html @@ -0,0 +1,602 @@ +
+
+
+
+ +
+
+
+ Community +
+
+ Enterprise +
+ +
+
+
+
+ +
+
+
+

+ Product Brand in eCommerce

+

+ Easily Manage Product Brands +

+ +
+
+ + + + +
+
+

+ Overview +

+
+ +
+

+ This module allows the odoo users to manage their product brands easily.

+ +
+
+ + +
+
+

+ Features +

+
+ +
+
+ +
+
+

+ Community & Enterprise Support

+

+ Available in Odoo 15.0 Community and Enterprise.

+
+
+ +
+
+ +
+
+

+ Activate Product Brand Filter.

+
+
+
+
+ +
+
+

+ Product Brand Filter in eCommerce.

+
+
+
+
+ +
+
+

+ Product Brand in Pivot View.

+
+
+ +
+ +
+
+

+ Screenshots +

+
+
+

+ Activate Product Brand Filter

+

+ Activate Product Brand Filter from the Customize menu.

+ +
+
+

+ Product Brand Filter in eCommerce

+

+ Product Brand Filter will be shows in the eCommerce website.

+ +
+ +
+

+ Product Brand in Pivot View

+

+ Brand filter available in pivot view.

+ +
+ +
+

+ Filtered by Product Brand

+

+ User can Filtered by product brand in pivot view. +

+ +
+ +
+ + +
+
+

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/product_brand_ecommerce/views/sale_report_views.xml b/product_brand_ecommerce/views/sale_report_views.xml new file mode 100644 index 000000000..522d1fd82 --- /dev/null +++ b/product_brand_ecommerce/views/sale_report_views.xml @@ -0,0 +1,16 @@ + + + + + + sale.report.search.inherit + sale.report + + + + + + + + + \ No newline at end of file diff --git a/product_brand_ecommerce/views/template.xml b/product_brand_ecommerce/views/template.xml new file mode 100644 index 000000000..ac7247ae5 --- /dev/null +++ b/product_brand_ecommerce/views/template.xml @@ -0,0 +1,31 @@ + + + + + \ No newline at end of file diff --git a/product_brand_invoicing/README.md b/product_brand_invoicing/README.md new file mode 100644 index 000000000..b394a03e7 --- /dev/null +++ b/product_brand_invoicing/README.md @@ -0,0 +1,32 @@ +Product Brand in Invoicing +========================== + +Installation +============ +- www.odoo.com/documentation/15.0/setup/install.html +- Install our custom addon + +License +======= +GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (AGPLv3) +(http://www.gnu.org/licenses/agpl.html) + +Bug Tracker +=========== +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Credits +======= +* Cybrosys Techno Solutions + + +Developer: Afras Habis - odoo@cybrosys.com, + Version 15 Midilaj V K - odoo@cybrosys.com + +Maintainer +---------- + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com. + diff --git a/product_brand_invoicing/__init__.py b/product_brand_invoicing/__init__.py new file mode 100644 index 000000000..3c537e5f1 --- /dev/null +++ b/product_brand_invoicing/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies() +# Author: Midilaj () +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from . import models diff --git a/product_brand_invoicing/__manifest__.py b/product_brand_invoicing/__manifest__.py new file mode 100644 index 000000000..7bb4023dd --- /dev/null +++ b/product_brand_invoicing/__manifest__.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2021-TODAY Cybrosys Technologies() +# Author: Midilaj () +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + 'name': 'Product Brand in Invoicing', + 'version': '15.0.1.0.0', + 'category': 'Accounting', + 'summary': 'Product Brand in Invoicing', + 'description': 'Product Brand in Invoicing, brand, odoo 13', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'images': ['static/description/banner.png'], + 'website': 'https://www.cybrosys.com', + 'depends': ['account'], + 'data': [ + 'security/ir.model.access.csv', + 'views/brand_views.xml', + 'views/account_invoice_report_view.xml' + ], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, + +} diff --git a/product_brand_invoicing/doc/RELEASE_NOTES.md b/product_brand_invoicing/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..089a1621c --- /dev/null +++ b/product_brand_invoicing/doc/RELEASE_NOTES.md @@ -0,0 +1,5 @@ +## Module + +#### 22.10.2021 +#### Version 15.0.1.0.0 +#### ADD \ No newline at end of file diff --git a/product_brand_invoicing/models/__init__.py b/product_brand_invoicing/models/__init__.py new file mode 100644 index 000000000..44346b4af --- /dev/null +++ b/product_brand_invoicing/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies() +# Author: Midilaj () +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from . import brand diff --git a/product_brand_invoicing/models/brand.py b/product_brand_invoicing/models/brand.py new file mode 100644 index 000000000..20bbd90e0 --- /dev/null +++ b/product_brand_invoicing/models/brand.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2020-TODAY Cybrosys Technologies() +# Author: Midilaj () +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# + +from odoo import models, fields, api, tools + + +class ProductBrand(models.Model): + _inherit = 'product.template' + + brand_id = fields.Many2one('product.brand', string='Brand') + + +class BrandProduct(models.Model): + _name = 'product.brand' + + name = fields.Char(String="Name") + brand_image = fields.Binary() + member_ids = fields.One2many('product.template', 'brand_id') + product_count = fields.Char(String='Product Count', compute='get_count_products', store=True) + + @api.depends('member_ids') + def get_count_products(self): + self.product_count = len(self.member_ids) + + +class BrandPivotInvoicing(models.Model): + _inherit = "account.invoice.report" + + brand_id = fields.Many2one('product.brand', string='Brand') + + def _select(self): + res = super(BrandPivotInvoicing, self)._select() + query = res.split('template.categ_id AS product_categ_id,', 1) + res = query[0] + 'template.categ_id as product_categ_id,template.brand_id as brand_id,' + query[1] + return res + + def _group_by(self): + res = super(BrandPivotInvoicing, self)._group_by() + query = res.split('template.categ_id,', 1) + res = query[0] + 'template.categ_id,template.brand_id,' + query[1] + return res diff --git a/product_brand_invoicing/security/ir.model.access.csv b/product_brand_invoicing/security/ir.model.access.csv new file mode 100644 index 000000000..6c654dda8 --- /dev/null +++ b/product_brand_invoicing/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_product_brand,access_product_brand,model_product_brand,,1,1,1,1 \ No newline at end of file diff --git a/product_brand_invoicing/static/description/assets/icons/check.png b/product_brand_invoicing/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/check.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/chevron.png b/product_brand_invoicing/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/chevron.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/cogs.png b/product_brand_invoicing/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/cogs.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/consultation.png b/product_brand_invoicing/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/consultation.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/ecom-black.png b/product_brand_invoicing/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/ecom-black.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/education-black.png b/product_brand_invoicing/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/education-black.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/hotel-black.png b/product_brand_invoicing/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/hotel-black.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/license.png b/product_brand_invoicing/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/license.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/lifebuoy.png b/product_brand_invoicing/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/lifebuoy.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/logo.png b/product_brand_invoicing/static/description/assets/icons/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/logo.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/manufacturing-black.png b/product_brand_invoicing/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/manufacturing-black.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/pos-black.png b/product_brand_invoicing/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/pos-black.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/puzzle.png b/product_brand_invoicing/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/puzzle.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/restaurant-black.png b/product_brand_invoicing/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/restaurant-black.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/service-black.png b/product_brand_invoicing/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/service-black.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/trading-black.png b/product_brand_invoicing/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/trading-black.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/training.png b/product_brand_invoicing/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/training.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/update.png b/product_brand_invoicing/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/update.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/user.png b/product_brand_invoicing/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/user.png differ diff --git a/product_brand_invoicing/static/description/assets/icons/wrench.png b/product_brand_invoicing/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/product_brand_invoicing/static/description/assets/icons/wrench.png differ diff --git a/product_brand_invoicing/static/description/assets/modules/approval_image.png b/product_brand_invoicing/static/description/assets/modules/approval_image.png new file mode 100644 index 000000000..84fe94e80 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/modules/approval_image.png differ diff --git a/product_brand_invoicing/static/description/assets/modules/budget_image.png b/product_brand_invoicing/static/description/assets/modules/budget_image.png new file mode 100644 index 000000000..fe6aa6fe4 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/modules/budget_image.png differ diff --git a/product_brand_invoicing/static/description/assets/modules/export_image.png b/product_brand_invoicing/static/description/assets/modules/export_image.png new file mode 100644 index 000000000..4e4ea0e51 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/modules/export_image.png differ diff --git a/product_brand_invoicing/static/description/assets/modules/magento_image.png b/product_brand_invoicing/static/description/assets/modules/magento_image.png new file mode 100644 index 000000000..39de0820f Binary files /dev/null and b/product_brand_invoicing/static/description/assets/modules/magento_image.png differ diff --git a/product_brand_invoicing/static/description/assets/modules/pos_image.png b/product_brand_invoicing/static/description/assets/modules/pos_image.png new file mode 100644 index 000000000..c5932894b Binary files /dev/null and b/product_brand_invoicing/static/description/assets/modules/pos_image.png differ diff --git a/product_brand_invoicing/static/description/assets/modules/shopify_image.png b/product_brand_invoicing/static/description/assets/modules/shopify_image.png new file mode 100644 index 000000000..c6d92c16d Binary files /dev/null and b/product_brand_invoicing/static/description/assets/modules/shopify_image.png differ diff --git a/product_brand_invoicing/static/description/assets/screenshots/hero.png b/product_brand_invoicing/static/description/assets/screenshots/hero.png new file mode 100644 index 000000000..8bb8f650a Binary files /dev/null and b/product_brand_invoicing/static/description/assets/screenshots/hero.png differ diff --git a/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing1.png b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing1.png new file mode 100644 index 000000000..50185fced Binary files /dev/null and b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing1.png differ diff --git a/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing2.png b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing2.png new file mode 100644 index 000000000..4da262878 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing2.png differ diff --git a/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing3.png b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing3.png new file mode 100644 index 000000000..6acb1ace2 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing3.png differ diff --git a/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing4.png b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing4.png new file mode 100644 index 000000000..a75163647 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing4.png differ diff --git a/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing5.png b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing5.png new file mode 100644 index 000000000..766ad9aaa Binary files /dev/null and b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing5.png differ diff --git a/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing6.png b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing6.png new file mode 100644 index 000000000..bd85b09d4 Binary files /dev/null and b/product_brand_invoicing/static/description/assets/screenshots/product_brand_invoicing6.png differ diff --git a/product_brand_invoicing/static/description/banner.png b/product_brand_invoicing/static/description/banner.png new file mode 100644 index 000000000..1bae9eabe Binary files /dev/null and b/product_brand_invoicing/static/description/banner.png differ diff --git a/product_brand_invoicing/static/description/icon.png b/product_brand_invoicing/static/description/icon.png new file mode 100644 index 000000000..4635c8a9e Binary files /dev/null and b/product_brand_invoicing/static/description/icon.png differ diff --git a/product_brand_invoicing/static/description/index.html b/product_brand_invoicing/static/description/index.html new file mode 100644 index 000000000..5f53c652c --- /dev/null +++ b/product_brand_invoicing/static/description/index.html @@ -0,0 +1,649 @@ +
+
+
+
+ +
+
+
+ Community +
+
+ Enterprise +
+ +
+
+
+
+ +
+
+
+

+ Product Brand in Invoicing

+

+ Manage the Product Brands Easily +

+ +
+
+ + + + +
+
+

+ Overview +

+
+ +
+

+ This module allows the odoo users to manage their product brands easily.

+ +
+
+ + +
+
+

+ Features +

+
+ +
+
+ +
+
+

+ Community & Enterprise Support

+

+ Available in Odoo 15.0 Community and Enterprise.

+
+
+
+
+ +
+
+

+ Easy adding of products to Product Brand.

+

+ User can create new product brands and add products to the brand.

+
+
+ +
+
+ +
+
+

+ Product Brand inside Products.

+

+ User can add the brand inside the product form.

+
+
+ +
+
+ +
+
+

+ Group By Product Brand.

+

+ Group products based on product Brand.

+
+
+ +
+
+ +
+
+

+ Product Brand in Pivot view.

+

+ User can Filtered by product brand in pivot view.

+
+
+ +
+ +
+
+

+ Screenshots +

+
+
+

+ Product Brand Menu

+ +
+ +
+

+ Create product Brand and add products

+

+ Create a new Product Brand . We can add products directly from here itself. +

+ +
+ +
+

+ Add brand from product form

+

+ Also we can add the brand inside the product form. +

+ +
+ +
+

+ Group by Product Brand

+

+ User can group products by brand. +

+ +
+ +
+

+ Product Brand in Pivot view

+

+ Brand filter available in pivot view. +

+ +
+ +
+

+ Filtered by Product Brand

+

+ User can Filtered by product brand in pivot view. +

+ +
+ +
+ + +
+
+

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/product_brand_invoicing/views/account_invoice_report_view.xml b/product_brand_invoicing/views/account_invoice_report_view.xml new file mode 100644 index 000000000..0832a18ae --- /dev/null +++ b/product_brand_invoicing/views/account_invoice_report_view.xml @@ -0,0 +1,16 @@ + + + + + + account.invoice.report.search.inherit + account.invoice.report + + + + + + + + + \ No newline at end of file diff --git a/product_brand_invoicing/views/brand_views.xml b/product_brand_invoicing/views/brand_views.xml new file mode 100644 index 000000000..28055d93f --- /dev/null +++ b/product_brand_invoicing/views/brand_views.xml @@ -0,0 +1,88 @@ + + + + Brand Name + product.template + + + + + + + + + + Product Brand + product.brand + tree,form + + + Product Brand + product.brand + +
+ + +
+