Browse Source

[ADD] Initial Commit 'master_search'

pull/195/head
Ajmal Cybro 3 years ago
parent
commit
55f812c2af
  1. 42
      master_search/README.rst
  2. 22
      master_search/__init__.py
  3. 50
      master_search/__manifest__.py
  4. 7
      master_search/doc/RELEASE_NOTES.md
  5. 22
      master_search/models/__init__.py
  6. 366
      master_search/models/master_search.py
  7. 2
      master_search/security/ir.model.access.csv
  8. 20
      master_search/security/security.xml
  9. BIN
      master_search/static/description/assets/icons/._.DS_Store
  10. BIN
      master_search/static/description/assets/icons/._cogs.png
  11. BIN
      master_search/static/description/assets/icons/._consultation.png
  12. BIN
      master_search/static/description/assets/icons/._ecom-black.png
  13. BIN
      master_search/static/description/assets/icons/._education-black.png
  14. BIN
      master_search/static/description/assets/icons/._hotel-black.png
  15. BIN
      master_search/static/description/assets/icons/._license.png
  16. BIN
      master_search/static/description/assets/icons/._lifebuoy.png
  17. BIN
      master_search/static/description/assets/icons/._manufacturing-black.png
  18. BIN
      master_search/static/description/assets/icons/._pos-black.png
  19. BIN
      master_search/static/description/assets/icons/._puzzle.png
  20. BIN
      master_search/static/description/assets/icons/._restaurant-black.png
  21. BIN
      master_search/static/description/assets/icons/._service-black.png
  22. BIN
      master_search/static/description/assets/icons/._trading-black.png
  23. BIN
      master_search/static/description/assets/icons/._training.png
  24. BIN
      master_search/static/description/assets/icons/._update.png
  25. BIN
      master_search/static/description/assets/icons/._user.png
  26. BIN
      master_search/static/description/assets/icons/._wrench.png
  27. BIN
      master_search/static/description/assets/icons/chevron.png
  28. BIN
      master_search/static/description/assets/icons/cogs.png
  29. BIN
      master_search/static/description/assets/icons/consultation.png
  30. BIN
      master_search/static/description/assets/icons/ecom-black.png
  31. BIN
      master_search/static/description/assets/icons/education-black.png
  32. BIN
      master_search/static/description/assets/icons/feature-icons/._lifebuoy.png
  33. BIN
      master_search/static/description/assets/icons/feature-icons/document.png
  34. BIN
      master_search/static/description/assets/icons/feature-icons/down.png
  35. BIN
      master_search/static/description/assets/icons/feature-icons/lifebuoy.png
  36. BIN
      master_search/static/description/assets/icons/hotel-black.png
  37. BIN
      master_search/static/description/assets/icons/license.png
  38. BIN
      master_search/static/description/assets/icons/lifebuoy.png
  39. BIN
      master_search/static/description/assets/icons/manufacturing-black.png
  40. BIN
      master_search/static/description/assets/icons/pos-black.png
  41. BIN
      master_search/static/description/assets/icons/puzzle.png
  42. BIN
      master_search/static/description/assets/icons/restaurant-black.png
  43. BIN
      master_search/static/description/assets/icons/service-black.png
  44. BIN
      master_search/static/description/assets/icons/trading-black.png
  45. BIN
      master_search/static/description/assets/icons/training.png
  46. BIN
      master_search/static/description/assets/icons/update.png
  47. BIN
      master_search/static/description/assets/icons/user.png
  48. BIN
      master_search/static/description/assets/icons/wrench.png
  49. BIN
      master_search/static/description/assets/modules/akit_image.gif
  50. BIN
      master_search/static/description/assets/modules/budget_image.png
  51. BIN
      master_search/static/description/assets/modules/employee_image.png
  52. BIN
      master_search/static/description/assets/modules/login_image.png
  53. BIN
      master_search/static/description/assets/modules/quotation_image.png
  54. BIN
      master_search/static/description/assets/modules/whatsapp_image.png
  55. BIN
      master_search/static/description/assets/screenshots/1-Master-Search-User-Access.png
  56. BIN
      master_search/static/description/assets/screenshots/2-Master-Search-main-screenshot.png
  57. BIN
      master_search/static/description/assets/screenshots/A1-Search-in-Customer-data.png
  58. BIN
      master_search/static/description/assets/screenshots/A2-Customer-Search-record-view.png
  59. BIN
      master_search/static/description/assets/screenshots/B1-Search-in-Inventory-Data.png
  60. BIN
      master_search/static/description/assets/screenshots/B2-Inventory-Search-record-view.png
  61. BIN
      master_search/static/description/assets/screenshots/C1-Search-in-accounting-data.png
  62. BIN
      master_search/static/description/assets/screenshots/C2-Accounting-Search-record-view.png
  63. BIN
      master_search/static/description/assets/screenshots/Search-in-Product-data.png
  64. BIN
      master_search/static/description/assets/screenshots/Search-in-Purchase-data.png
  65. BIN
      master_search/static/description/assets/screenshots/Search-in-Sale-data.png
  66. BIN
      master_search/static/description/assets/screenshots/hero.png
  67. BIN
      master_search/static/description/assets/video/master_search.mp4
  68. BIN
      master_search/static/description/assets/video/master_search.webm
  69. BIN
      master_search/static/description/banner.png
  70. BIN
      master_search/static/description/icon.png
  71. 677
      master_search/static/description/index.html
  72. BIN
      master_search/static/description/logo.png
  73. 143
      master_search/static/src/js/form_renderer.js
  74. 31
      master_search/static/src/scss/master_search.scss
  75. 253
      master_search/views/master_search_view.xml

42
master_search/README.rst

@ -0,0 +1,42 @@
Master Search
=============
* Master Search module for Odoo 14 community editions
Installation
============
- www.odoo.com/documentation/14.0/setup/install.html
- Install our custom addon
License
-------
General Public License, Version 3 (LGPL v3).
(https://www.odoo.com/documentation/user/14.0/legal/licenses/licenses.html)
Company
-------
* 'Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
* Developer:
(v14) Shahil @ Cybrosys
(v15) Athul @ Cybrosys
Contacts
--------
* Mail Contact : odoo@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
==========
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com
Further information
===================
HTML Description: `<static/description/index.html>`__

22
master_search/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions (odoo@cybrosys.com)
# 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
# GENERAL PUBLIC LICENSE (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import models

50
master_search/__manifest__.py

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions (odoo@cybrosys.com)
# 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
# GENERAL PUBLIC LICENSE (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Global Search',
'version': '15.0.1.1.1',
'summary': """Easy Search in Customers, Products, Sale, Purchase, Inventory and Accounting modules""",
'description': """Search, Global Search, Quick Search, Easy Search, Easy Search in Customers, Products, Sale, Purchase, Inventory and Accounting modules,
Search, Advance search, global search, odoo15, """,
'category': 'Settings',
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'license': 'AGPL-3',
'images': ['static/description/banner.png'],
'depends': ['base', 'stock', 'sale', 'purchase'],
'data': [
'security/ir.model.access.csv',
'security/security.xml',
'views/master_search_view.xml'
],
'assets': {
'web.assets_backend': [
'/master_search/static/src/js/form_renderer.js',
'/master_search/static/src/scss/master_search.scss'
],
},
'installable': True,
'auto_install': False,
'application': False,
}

7
master_search/doc/RELEASE_NOTES.md

@ -0,0 +1,7 @@
## Module <master_search>
#### 13.12.2021
#### Version 15.0.1.0.0
#### ADD
Initial Commit

22
master_search/models/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions (odoo@cybrosys.com)
# 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
# GENERAL PUBLIC LICENSE (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import master_search

366
master_search/models/master_search.py

@ -0,0 +1,366 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Cybrosys Techno Solutions (odoo@cybrosys.com)
# 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
# GENERAL PUBLIC LICENSE (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from odoo import fields, models, api, _
from odoo.exceptions import UserError
class MasterSearch(models.Model):
_name = 'master.search'
_description = "Model for master search"
_rec_name = 'name'
_order = "create_date desc"
name = fields.Char(string="Name", default=lambda self: _('Search'))
res_customers_id = fields.Many2many('res.partner', 'res_customers_search_rel', 'res_customers_id', 'search_id',
string="Locations")
search_string = fields.Char(string="Search")
search_mode = fields.Selection([('all', 'All'), ('active', 'Active'), ('inactive', 'Inactive')],
string="Search Mode", default="active")
search_by = fields.Selection(
[('any', 'Any'), ('customer', 'Customer'), ('product', 'Product'), ('sale details', 'Sale'),
('purchase details', 'Purchase'), ('transaction details', 'Inventory'), ('account details', 'Accounting')],
string="Search By", default='any')
master_search_ids = fields.Many2many('master.search', 'master_search_self_rel', 'search_id',
'search_id1', compute="_get_recent_searches", limit=1)
history_count = fields.Integer(string="History Count", compute="_get_history_count")
customer_ids = fields.Many2many('res.partner', 'master_search_company_rel', 'search_id', 'company_id')
product_ids = fields.Many2many('product.template', 'master_search_product_rel', 'search_id', 'company_id')
transaction_details = fields.Many2many('stock.picking', 'master_search_transaction_details_rel', 'search_id',
'company_id', string="Inventory")
customer_count = fields.Integer(string="Company Count", compute="_get_operator_count")
product_count = fields.Integer(string="Product Count", compute="_get_product_count")
transaction_count = fields.Integer(string="Transaction Count", compute="_get_transaction_count")
sale_count = fields.Integer(string="Sale Count", compute="_get_sale_count")
purchase_count = fields.Integer(string="Sale Count", compute="_get_purchase_count")
account_count = fields.Integer(string="Account Count", compute="_get_account_count")
user_id = fields.Many2one('res.users', string="User", default=lambda self: self.env.user)
match_entire = fields.Boolean(string="Match entire sentence")
sale_details = fields.Many2many('sale.order', 'master_search_sale_details_rel', 'search_id',
'company_id', string="Sale")
purchase_details = fields.Many2many('purchase.order', 'master_search_purchase_details_rel', 'search_id',
'company_id', string="Sale")
account_details = fields.Many2many('account.move', 'master_search_account_details_rel', 'search_id',
'company_id', string="Account")
@api.depends('search_string')
def _get_recent_searches(self):
""" Get recent searches """
# unlink search result with empty string
try:
current_id = self.id if isinstance(self.id, int) \
else self._origin.id
except:
current_id = False
pass
empty_search = self.env['master.search'].search(
[('search_string', 'in', ['', False]),
('id', 'not in', [current_id, False]
if current_id else [False])])
if empty_search:
empty_search.unlink()
# get search histories avoid null strings
recent_searches = self.env['master.search'].search([
('search_string', 'not in', ['', False])])
# commended for viewing last search
# self.master_search_ids = recent_searches.filtered(
# lambda x: x.id != self.id) if self.id else recent_searches
self.master_search_ids = recent_searches
def action_unlink_search(self):
""" Unlink search """
self.unlink()
action = self.env.ref('master_search.master_search_action').read()[0]
return action
@api.depends('master_search_ids')
def _get_history_count(self):
""" Get history count """
self.history_count = len(self.master_search_ids)
@api.depends('product_ids')
def _get_product_count(self):
""" Get product count """
self.product_count = len(self.product_ids)
@api.depends('customer_ids')
def _get_operator_count(self):
""" Get customer count """
self.customer_count = len(self.customer_ids)
@api.depends('transaction_count')
def _get_transaction_count(self):
""" Get transaction details count """
self.transaction_count = len(self.transaction_details)
@api.depends('sale_count')
def _get_sale_count(self):
""" Get sale details count """
self.sale_count = len(self.sale_details)
@api.depends('purchase_count')
def _get_purchase_count(self):
""" Get purchase details count """
self.purchase_count = len(self.purchase_details)
@api.depends('account_count')
def _get_account_count(self):
""" Get account details count """
self.account_count = len(self.account_details)
def action_clear_search(self):
""" clear search input """
self.search_string = ""
self.name = "Search"
@api.model_create_multi
def create(self, vals_list):
""" Function for unlink first result and raise error if no string """
res = super(MasterSearch, self).create(vals_list)
search_index = self.env['master.search'].search_count([('user_id', '=', self.env.user.id)])
# unlink old search result if count greater than 10
if search_index > 10:
last_search = self.env['master.search'].search([('id', '!=', res.id), ('user_id', '=', self.env.user.id)],
order="create_date asc", limit=1)
last_search.unlink() if last_search else False
return res
def action_search(self):
""" search for the string and store search data """
if self.search_string and "*" in self.search_string:
return
if not self.search_string:
raise UserError(_("Please provide a search string!"))
search_keys = self.search_string.split(" ")
# delete all the lines
self.customer_ids = self.product_ids = self.transaction_details = False
# search for entire sentence
if self.match_entire:
return self._search_query(self.search_string)
# search for all the words
for key in search_keys:
self._search_query(key)
self.name = self.search_string
def _search_query(self, key):
""" search for the model with given key and update result """
company_id = self.env.user.company_id.id
if self.search_mode == 'all':
active_qry = """
and obj.active in ({},{})
""".format("'FALSE'", "'TRUE'")
elif self.search_mode == 'active':
active_qry = """ and obj.active in ({})""".format("'TRUE'")
else:
active_qry = """ and obj.active in ({})""".format("'FALSE'")
# search for customers
self._search_customer(key, active_qry) \
if self.search_by in ['any', 'customer'] else False
# search for products
self._search_products(key, active_qry, company_id) \
if self.search_by in ['any', 'product'] else False
# search for inventory transactions
self._search_inventory_transactions(key, active_qry, company_id) \
if self.search_by in ['any', 'transaction details'] else False
# search for inventory transactions
self._search_sale_transactions(key, active_qry, company_id) \
if self.search_by in ['any', 'sale details'] else False
# search for purchase transactions
self._search_purchase_transactions(key, active_qry, company_id) \
if self.search_by in ['any', 'purchase details'] else False
# search for account transactions
self._search_account_transactions(key, active_qry, company_id) \
if self.search_by in ['any', 'account details'] else False
def _search_account_transactions(self, key, active_qry, company_id):
""" Search for all account transactions """
sp_query = """
SELECT
am.id from account_move am
LEFT JOIN
res_partner p on p.id = am.partner_id
WHERE
am.company_id = {op_id}
AND
(am.name ILIKE '%{key}%'
OR
p.name ILIKE '%{key}%'
OR
am.state ILIKE '%{key}%')
GROUP BY
am.id,p.name
"""
self._cr.execute(sp_query.format(op_id=company_id, key=key, active=active_qry))
moves = self._cr.dictfetchall()
move_ids = self.env['account.move'].browse([i['id'] for i in moves])
self.account_details += move_ids
def _search_purchase_transactions(self, key, active_qry, company_id):
""" Search for all purchase transactions """
sp_query = """
SELECT
po.id from purchase_order po
LEFT JOIN
res_partner p on p.id = po.partner_id
WHERE
po.company_id = {op_id}
AND
(po.name ILIKE '%{key}%'
OR
p.name ILIKE '%{key}%'
OR
po.state ILIKE '%{key}%')
GROUP BY
po.id,p.name
"""
self._cr.execute(sp_query.format(op_id=company_id, key=key, active=active_qry))
purchases = self._cr.dictfetchall()
purchase_ids = self.env['purchase.order'].browse([i['id'] for i in purchases])
self.purchase_details += purchase_ids
def _search_sale_transactions(self, key, active_qry, company_id):
""" Search for all sale transactions """
sp_query = """
SELECT
sl.id from sale_order sl
LEFT JOIN
res_partner p on p.id = sl.partner_id
LEFT JOIN
product_pricelist pl
ON
pl.id = sl.pricelist_id
LEFT JOIN
account_payment_term pt
ON
pt.id = sl.payment_term_id
WHERE
sl.company_id = {op_id}
AND
(sl.name ILIKE '%{key}%'
OR
p.name ILIKE '%{key}%'
OR
sl.state ILIKE '%{key}%'
OR
pl.name ILIKE '%{key}%')
GROUP BY
sl.id,p.name,pl.name,pt.name
"""
self._cr.execute(sp_query.format(op_id=company_id, key=key, active=active_qry))
sales = self._cr.dictfetchall()
sale_ids = self.env['sale.order'].browse([i['id'] for i in sales])
self.sale_details += sale_ids
def _search_inventory_transactions(self, key, active_qry, company_id):
""" Search for all inventory transactions """
sp_query = """
SELECT
sp.id from stock_picking sp
LEFT JOIN
res_partner p on p.id = sp.partner_id
LEFT JOIN
stock_picking_type t
ON
t.id = sp.picking_type_id
WHERE
sp.company_id = {op_id}
AND
(sp.name ILIKE '%{key}%'
OR
p.name ILIKE '%{key}%'
OR
sp.state ILIKE '%{key}%'
OR
t.name ILIKE '%{key}%')
GROUP BY
sp.id,p.name,t.name
"""
self._cr.execute(sp_query.format(op_id=company_id, key=key, active=active_qry))
transactions = self._cr.dictfetchall()
transaction_ids = self.env['stock.picking'].browse([i['id'] for i in transactions])
self.transaction_details += transaction_ids
def _search_products(self, key, active_qry, company_id):
""" search for products """
pt_query = """
SELECT
pt.id
FROM
product_template pt
LEFT JOIN
product_category pc
ON
pc.id = pt.categ_id
WHERE
(pt.name ILIKE '%{key}%'
OR
pt.default_code ILIKE '%{key}%'
OR
pt.type ILIKE '%{key}%'
OR
pt.description ILIKE '%{key}%'
OR
pc.name ILIKE '%{key}%')
"""
self._cr.execute(pt_query.format(op_id=company_id, key=key, active=active_qry).replace('obj', 'pt'))
template_ids = self._cr.dictfetchall()
product_template_ids = self.env['product.template'].browse([i['id'] for i in template_ids])
self.product_ids += product_template_ids
def _search_customer(self, key, active_qry):
""" search for customer """
query = """
SELECT
r.id from res_partner r
LEFT JOIN
res_country_state rs
ON
rs.id = r.state_id
LEFT JOIN
res_country rc
ON
rc.id = r.country_id
WHERE
(r.parent_id is NULL )
AND
r.type = 'contact' {active}
AND
(r.name ILIKE '%{key}%'
OR
r.street ILIKE '%{key}%'
OR
r.street2 ILIKE '%{key}%'
OR
r.city ILIKE '%{key}%'
OR
r.zip ILIKE '%{key}%'
OR
rs.name ILIKE '%{key}%'
OR
rc.name ILIKE '%{key}%'
OR
r.email ILIKE '%{key}%')
"""
self._cr.execute(query.format(key=key, active=active_qry).replace('obj', 'r'))
customers = self._cr.dictfetchall()
customer_ids = self.env['res.partner'].browse([i['id'] for i in customers])
self.customer_ids += customer_ids

2
master_search/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_master_search,master.search,model_master_search,,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_master_search master.search model_master_search 1 1 1 1

20
master_search/security/security.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Record rule for search history -->
<record model="ir.rule" id="company_search_rule">
<field name="name">Company Search Rule</field>
<field name="model_id" ref="model_master_search"/>
<field name="domain_force">[('user_id', '=', user.id)]</field>
</record>
<!-- Record rules for restrict search access -->
<record model="ir.module.category" id="module_master_search">
<field name="name">Search Rights</field>
<field name="sequence">11</field>
</record>
<record id="master_search_read" model="res.groups">
<field name="name">Global Search</field>
<field name="comment">Global Search Group</field>
</record>
</odoo>

BIN
master_search/static/description/assets/icons/._.DS_Store

Binary file not shown.

BIN
master_search/static/description/assets/icons/._cogs.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._consultation.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._ecom-black.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._education-black.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._hotel-black.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._license.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._lifebuoy.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._manufacturing-black.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._pos-black.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._puzzle.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._restaurant-black.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._service-black.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._trading-black.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._training.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._update.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._user.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/._wrench.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
master_search/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
master_search/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
master_search/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
master_search/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
master_search/static/description/assets/icons/feature-icons/._lifebuoy.png

Binary file not shown.

BIN
master_search/static/description/assets/icons/feature-icons/document.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

BIN
master_search/static/description/assets/icons/feature-icons/down.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

BIN
master_search/static/description/assets/icons/feature-icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
master_search/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
master_search/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
master_search/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
master_search/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
master_search/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
master_search/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
master_search/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
master_search/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
master_search/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
master_search/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
master_search/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
master_search/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
master_search/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
master_search/static/description/assets/modules/akit_image.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
master_search/static/description/assets/modules/budget_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
master_search/static/description/assets/modules/employee_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
master_search/static/description/assets/modules/login_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
master_search/static/description/assets/modules/quotation_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
master_search/static/description/assets/modules/whatsapp_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
master_search/static/description/assets/screenshots/1-Master-Search-User-Access.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
master_search/static/description/assets/screenshots/2-Master-Search-main-screenshot.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
master_search/static/description/assets/screenshots/A1-Search-in-Customer-data.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
master_search/static/description/assets/screenshots/A2-Customer-Search-record-view.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
master_search/static/description/assets/screenshots/B1-Search-in-Inventory-Data.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
master_search/static/description/assets/screenshots/B2-Inventory-Search-record-view.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
master_search/static/description/assets/screenshots/C1-Search-in-accounting-data.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
master_search/static/description/assets/screenshots/C2-Accounting-Search-record-view.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
master_search/static/description/assets/screenshots/Search-in-Product-data.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
master_search/static/description/assets/screenshots/Search-in-Purchase-data.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
master_search/static/description/assets/screenshots/Search-in-Sale-data.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
master_search/static/description/assets/screenshots/hero.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

BIN
master_search/static/description/assets/video/master_search.mp4

Binary file not shown.

BIN
master_search/static/description/assets/video/master_search.webm

Binary file not shown.

BIN
master_search/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
master_search/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

677
master_search/static/description/index.html

@ -0,0 +1,677 @@
<div class="container" style="padding: 1rem !important; margin-bottom: 1rem !important;">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between"
style="border-bottom: 1px solid #d5d5d5;">
<div class="my-3">
<img src="logo.png" style="width: auto !important; height: 40px !important;">
</div>
<div class="my-3 d-flex align-items-center">
<div
style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="background-color: #875A7B !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
</div>
</div>
</div>
</div>
<div class="container" style="padding: 0rem 1.5rem 4rem !important">
<div class="row" style="height: 900px !important;">
<div class="col-sm-12 col-md-12 col-lg-12"
style="padding: 4rem 1rem !important; background-color: #714B67 !important; height: 600px !important; border-radius: 20px !important;">
<h1
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #FFFFFF !important; font-size: 4rem !important; text-align: center !important;">
Global Search</h1>
<p
style="font-family: 'Montserrat', sans-serif !important; font-weight: 300 !important; color: #FFFFFF !important; font-size: 1.4rem !important; text-align: center !important;">
Easy Search in Customers, Products, Sale, Purchase, Inventory and Accounting modules
</p>
<img src="/assets/screenshots/hero.png" class="img-responsive" width="100%" height="auto" />
</div>
</div>
<div class="row">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin-bottom: 2rem !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-compass mr-2"></i>Explore this module
</h2>
</div>
<div class="col-md-6">
<a href="#overview" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Overview</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
Learn more about this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#features" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Features</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
View features of this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#screenshots" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Screenshots</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
See key screenshots of this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
<div class="col-md-6">
<a href="#video" style="text-decoration: none !important;">
<div class="row"
style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;">
<div class="col-8">
<h3
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">
Video</h3>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;">
Watch video demo of this module</p>
</div>
<div class="col-4 text-right d-flex justify-content-end align-items-center">
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i>
</div>
</div>
</a>
</div>
</div>
<div class="row" id="overview">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-pie-chart mr-2"></i>Overview
</h2>
</div>
<div class="col-mg-12 pl-3">
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;">
Global Search module enables advance and simple search in different modules. It helps users to
search the
records
in Customers, Products, Sale, Purchase, Inventory and Accounting Modules for
'Global Search' group users. Possible to search using different attributes like name, reference,
number, etc.
</p>
</div>
</div>
<div class="row" id="features">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-star mr-2"></i>Features
</h2>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="./assets/icons/chevron.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Dynamic Search View Option</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
</p>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="./assets/icons/chevron.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Easily Search Records in
Customers, Products, Sale, Purchase, Inventory and Accounting Data</h4>
</div>
</div>
<div class="col-md-6 pl-3 py-3 d-flex">
<div>
<img src="./assets/icons/chevron.png">
</div>
<div>
<h4
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Possible to search with
different attributes like name, reference, number, etc.</h4>
</div>
</div>
<div class="row" id="screenshots">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-image mr-2"></i>Screenshots
</h2>
</div>
<div class="col-lg-12 my-2">
<h4 class="mt-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Global Search User Access</h4>
<img src="assets/screenshots/1-Master-Search-User-Access.png"
class="img-responsive img-thumbnail border" width="100%" height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Global Search</h4>
<img src="assets/screenshots/2-Master-Search-main-screenshot.png"
class="img-responsive img-thumbnail border" width="100%" height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Search in Customer Data</h4>
<img src="assets/screenshots/A1-Search-in-Customer-data.png" class="img-responsive img-thumbnail border"
width="100%" height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Customer Search Record View</h4>
<img src="assets/screenshots/A2-Customer-Search-record-view.png"
class="img-responsive img-thumbnail border" width="100%" height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Search in Inventory Data</h4>
<img src="assets/screenshots/B1-Search-in-Inventory-Data.png"
class="img-responsive img-thumbnail border" width="100%" height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Search Record View</h4>
<img src="assets/screenshots/B2-Inventory-Search-record-view.png"
class="img-responsive img-thumbnail border" width="100%" height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Accounting Search Record View</h4>
<img src="assets/screenshots/C2-Accounting-Search-record-view.png"
class="img-responsive img-thumbnail border" width="100%" height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Search in Product Data</h4>
<img src="assets/screenshots/Search-in-Product-data.png" class="img-responsive img-thumbnail border"
width="100%" height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Search in Purchase Data</h4>
<img src="assets/screenshots/Search-in-Purchase-data.png" class="img-responsive img-thumbnail border"
width="100%" height="auto" />
</div>
<div class="col-lg-12 my-3">
<h4 class="mt-3"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Search in Sale Data</h4>
<img src="assets/screenshots/Search-in-Sale-data.png" class="img-responsive img-thumbnail border"
width="100%" height="auto" />
</div>
</div>
<div class="row" id="video">
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important">
<h2
style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;">
<i class="fa fa-film mr-2"></i>Video
</h2>
</div>
<div class="col-lg-12 my-2">
<video width="100%" height="600px;" controls="">
<source src="assets/video/master_search.mp4" type="video/mp4">
<source src="assets/video/master_search.webm" type="video/webm">
</video>
</div>
</div>
<!-- SUGGESTED PRODUCTS -->
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center"
style="text-align: center; padding: 2.5rem 1rem !important;">
<h2 style="color: #212529 !important;">Suggested Products</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner">
<div class="carousel-item active" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/whatsapp_redirect/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/whatsapp_image.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/base_accounting_kit/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/akit_image.gif">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/login_user_detail/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/login_image.png">
</div>
</a>
</div>
</div>
<div class="carousel-item" style="min-height:0px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/base_account_budget/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/budget_image.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/product_to_quotation/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/quotation_image.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/employee_documents_expiry/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/employee_image.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="left:-25px;width: 35px;color: #000;"> <span class="carousel-control-prev-icon"><i
class="fa fa-chevron-left" style="font-size:24px"></i></span> </a> <a
class="carousel-control-next" href="#demo1" data-slide="next"
style="right:-25px;width: 35px;color: #000;">
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF SUGGESTED PRODUCTS -->
<!-- OUR SERVICES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Our Services</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</section>
<!-- END OF END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Our Industries</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/trading-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/education-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/service-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</section>
<!-- END OF END OF OUR INDUSTRIES -->
<!-- FOOTER -->
<!-- Footer Section -->
<section class="container" style="margin: 5rem auto 2rem;">
<div class="row" style="max-width:1540px;">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 style="color: #212529 !important;">Need Help?</h2>
<hr
style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" />
</div>
</div>
<!-- Contact Cards -->
<div class="row d-flex justify-content-center align-items-center"
style="max-width:1540px; margin: 0 auto 2rem auto;">
<div class="col-lg-12" style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; ">
<div class="row mt-4">
<div class="col-lg-6">
<a href="mailto:odoo@cybrosys.com" target="_blank" class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a>
</div>
<div class="col-lg-6">
<a href="https://api.whatsapp.com/send?phone=918606827707" target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;"><i
class="fa fa-whatsapp mr-2"></i>+91 86068 27707</a>
</div>
</div>
</div>
</div>
<!-- End of Contact Cards -->
</section>
<!-- Footer -->
<section class="container" style="padding: 2rem 3rem 1rem;">
<div class="row" style="max-width:1540px; margin: 0 auto; margin-right: 3rem; ">
<!-- Logo -->
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin-top: 3rem;">
<img src="https://www.cybrosys.com/images/logo.png" width="200px" height="auto" />
</div>
<!-- End of Logo -->
<div class="col-lg-12">
<hr
style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;">
<!-- End of Footer Section -->
</div>
</div>
</section>
<!-- END OF FOOTER -->
</div>

BIN
master_search/static/description/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

143
master_search/static/src/js/form_renderer.js

@ -0,0 +1,143 @@
odoo.define('master_search.FormRenderer', function(require) {
"use strict";
var FormRenderer = require('web.FormRenderer');
var framework = require('web.framework');
FormRenderer.include({
events: _.extend({}, FormRenderer.prototype.events, {
'click .oe_search_tab': '_onSearchTabClick',
'click .oe_search_btn': '_onSearchButtonClick',
'keyup .search_input': '_onKeypressSearch',
'click .re_search': '_onHistoryClick',
}),
// Research on history click
_onHistoryClick: function(ev){
var history_key = ev.currentTarget.parentElement.firstChild.innerText;
var edit_flag = $(".search_input").hasClass('o_input')
// search if in edit mode
if (edit_flag){
$(".search_input").val(history_key)
.trigger('change');
$('.oe_search_btn').trigger('click');
}
else{
// trigger edit mode if search screen
$('.o_form_button_edit').trigger('click');
//var search_input = $(".search_input").length
//if (search_input <= 0 ){$('.o_form_button_edit').trigger('click');}
}
},
// Trigger search while enter is pressed and process input
_onKeypressSearch: function(ev){
var search_string = $(".search_input").val();
if(search_string.includes("*") == true){
$(".not-allowed").css("display", 'block');
// remove * from the input
$(".search_input")
.val(search_string.replace('*', ''))
.trigger('change');
}
else{$(".not-allowed").css("display", 'none');}
if (ev.which == 13){$('.oe_search_btn').trigger('click');}
},
// block UI while searching
_onSearchButtonClick: function(ev){
if( $(".search_input").val() != ''){framework.blockUI();}
},
// collapse and expand tabs
_onSearchTabClick: function(ev){
var targetDiv = ev.currentTarget.parentElement.children[1]
var targetIcon = ev.currentTarget.getElementsByClassName('fa')[0]
if (targetDiv){
if(targetDiv.style.display == "block") {
console.log(targetDiv.style.display, "ddddddd")
targetDiv.style.display = "none";
targetIcon.className = "fa fa-caret-down"
}
else {
console.log(targetDiv.style.display, "sssssss")
targetDiv.style.display = "block";
targetIcon.className = "fa fa-caret-up"
}
}
},
// override existing form renderer function
_renderView: function () {
var self = this;
// render the form and evaluate the modifiers
var defs = [];
var colour_list = []
this.defs = defs;
this.inactiveNotebooks = [];
var $form = this._renderNode(this.arch).addClass(this.className);
delete this.defs;
return Promise.all(defs).then(() => this.__renderView()).then(function () {
self._updateView($form.contents());
if (self.state.res_id in self.alertFields) {
self.displayTranslationAlert();
}
self.trigger_up('edit_mode');
}).then(function(){
if (self.lastActivatedFieldIndex >= 0) {
self._activateNextFieldWidget(self.state, self.lastActivatedFieldIndex);
}
if (self._isInDom) {
_.forEach(self.allFieldWidgets, function (widgets){
_.invoke(widgets, 'on_attach_callback');
});
}
// function for getting random light colors
function getRandomColor() {
var color = "hsl(" + Math.random() * 360 + ", 100%, 75%)";
// avoid colour repetition
if(colour_list.indexOf(color) > -1){color = getRandomColor()}
colour_list.push(color);
return color;
}
// function for expanding tabs with result count
function onSearchButtonClick(ev){
$('.oe_search_tab').each(function(i, obj) {
var result_count = parseInt(obj.getElementsByClassName('oe_tab_count')[0].innerHTML)
if (result_count > 0){
obj.click()
}
});
}
// Highlight all the words in result with different color
var text = $(".search_input").val();
if (text){
var keyword_list = []
var key_list = text.split(" ")
for (var i = 0; i< key_list.length; i++) {
keyword_list[i] = {'key': key_list[i], 'color':getRandomColor()}
}
for (var i = 0; i< keyword_list.length; i++) {
var key = keyword_list[i].key;
var color = keyword_list[i].color
var regex = new RegExp("("+key+")", "ig");
$('.o_data_cell').each(function(i, obj) {
var old_text = obj.innerHTML
if (!obj.firstChild || obj.firstChild.type != 'button'){
obj.innerHTML = old_text.replace(regex, "<span style='background-color: "+ color +";'>$1</span>");
}
});
}
}
// trigger search button click for expand tab with value
if((self.$el.find(".search_input")).length > 0){onSearchButtonClick()}
// unblock UI
framework.unblockUI();
// change document title on search refresh
var search_input = $(".search_input").length
if (search_input <= 0 ){document.title = 'Search';}
}).guardedCatch(function () {
$form.remove();
});
},
});
});

31
master_search/static/src/scss/master_search.scss

@ -0,0 +1,31 @@
.oe_search_tab{
cursor: pointer;
transition: .2s;
&:hover {
background-color: #7c7bad !important;
}
}
.oe_details_tree{
display: none;
}
.btn_master_search{
display: inline-block;
background-color:#5f5e97;
color:#fff !important;
color: #fff;margin-left: 1px;
margin-top: -1px;
}
.btn_master_search:hover{
background-color: rgb(255, 255, 255) !important;
color: rgb(61, 155, 187) !important;
}
.not-allowed{
color: #d94242;
border: 1px solid #ea9292;
border-radius: 5px;
background-color: #f9e7e7;
padding: 1px 55px;
width: 370px;
margin-bottom: 5px;
display: none;
}

253
master_search/views/master_search_view.xml

@ -0,0 +1,253 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- form view -->
<record model="ir.ui.view" id="master_search_form">
<field name="name">Search</field>
<field name="model">master.search</field>
<field name="arch" type="xml">
<form string="Search">
<style>
.o_control_panel{display: none;}
</style>
<script>
$(document).ready(function(){
// Disable click events of tree view for history
$(".disable_open").unbind("click");
if ($(".oe_search_bgnd").length > 0){document.title = 'Search';}
});
</script>
<sheet>
<div class="row oe_search_bgnd"
style="padding: 24px 32px;background-color:#e5e4f9;border-radius: 5px;">
<div class="col-12 col-md-8 col-xl-8">
<label for="search_string" string="Search " style="display: inline-block;"
class="oe_read_only"/>
<field name="search_string" default_focus="1" class="search_input"
style="width: 80%; display: inline-block;margin-right: 0px;block-size: 32px;"
placeholder="Type here to search.."/>
<button name="action_clear_search"
type="object" class="fa fa-times oe_edit_only btn_master_search"/>
<button name="action_search"
type="object"
class="fa fa-search oe_search_btn btn_master_search oe_edit_only"/>
<div class="not-allowed">Regular expressions are not allowed in search!</div>
<div>
<label for="match_entire" string="Match Phrase :" style="display: inline-block;"/>
<field name="match_entire" style="display: inline-block; margin-left: 10px;"/>
</div>
<div style="display: block;">
<label for="search_by" string="Search For :" class="oe_read_only"/>
<field name="search_by" widget="radio" options="{'horizontal': true}"/>
</div>
</div>
<div class="col-12 col-md-4 col-xl-4">
<div style="display: block;">
<label for="search_mode" string="Mode :" class="oe_read_only"/>
<field name="search_mode" widget="radio" nolabel="1"
options="{'horizontal': false}"/>
</div>
</div>
</div>
<div class="oe_result_div">
<div style="background-color: #5f5e97; color: #fff; width: 100%; padding: 5px 10px;
margin-top: 10px; border-top-right-radius: 5px;border-top-left-radius: 5px;"
class="oe_search_tab">
Recent Searches
<div style="float: right;">
<field name="history_count" class="oe_tab_count" readonly="1"/>
Records Found
<span class="oe_drop_down">
<i style="color: #fff !important; font-size: 16px;" class="fa fa-caret-down"/>
</span>
</div>
</div>
<div style="height: 200px; overflow-y: scroll;width: 100%;" class="oe_details_tree">
<field name="master_search_ids">
<tree create="0" class="disable_open">
<field name="search_string" class="re_search oe_key"/>
<field name="search_mode" string="Mode" class="re_search"/>
<field name="search_by" string="Type" class="re_search"/>
<!--<field name="create_date" string="Date" optional="hide" class="re_search"/>-->
<button style="display: inline-block;" name="action_unlink_search"
type="object" class="fa fa-trash"/>
</tree>
</field>
</div>
</div>
<div attrs="{'invisible':[('search_by', 'not in', ('any', 'customer'))]}" class="oe_result_div">
<div style="background-color: #5f5e97; color: #fff; width: 100%; padding: 5px 10px;
margin-top: 10px; border-top-right-radius: 5px;border-top-left-radius: 5px;"
class="oe_search_tab">
Customer Search Results
<div style="float: right;">
<field name="customer_count" class="oe_tab_count" readonly="1"/>
Records Found
<span class="oe_drop_down">
<i style="color: #fff !important; font-size: 16px;" class="fa fa-caret-down"/>
</span>
</div>
</div>
<div style="height: 200px; overflow-y: scroll;width: 100%;" class="oe_details_tree">
<field name="customer_ids">
<tree create="0" delete="0">
<field name="name"/>
<field name="email"/>
</tree>
</field>
</div>
</div>
<div attrs="{'invisible':[('search_by', 'not in', ('any', 'product'))]}" class="oe_result_div">
<div style="background-color: #5f5e97; color: #fff; width: 100%; padding: 5px 10px;
margin-top: 10px; border-top-right-radius: 5px;border-top-left-radius: 5px;"
class="oe_search_tab">
Product Search Results
<div style="float: right;">
<field name="product_count" class="oe_tab_count" readonly="1"/>
Records Found
<span class="oe_drop_down">
<i style="color: #fff !important; font-size: 16px;" class="fa fa-caret-down"/>
</span>
</div>
</div>
<div style="height: 200px; overflow-y: scroll;width: 100%;" class="oe_details_tree"
name="products">
<field name="product_ids">
<tree create="0" delete="0">
<field name="name" string="Name"/>
<field name="default_code" string="Code"/>
<field name="description" string="Description"/>
<field name="type" string="Product Type"/>
<field name="categ_id" string="Category"/>
<field name="uom_id" string="Base UoM" optional="hide"/>
<field name="qty_available" string="Stock"/>
</tree>
</field>
</div>
</div>
<div attrs="{'invisible':[('search_by', 'not in', ('any', 'transaction details'))]}"
class="oe_result_div">
<div style="background-color: #5f5e97; color: #fff; width: 100%; padding: 5px 10px;
margin-top: 10px; border-top-right-radius: 5px;border-top-left-radius: 5px;"
class="oe_search_tab">
Inventory Search Results
<div style="float: right;">
<field name="transaction_count" class="oe_tab_count" readonly="1"/>
Records Found
<span class="oe_drop_down">
<i style="color: #fff !important; font-size: 16px;" class="fa fa-caret-down"/>
</span>
</div>
</div>
<div style="height: 200px; overflow-y: scroll;width: 100%;" class="oe_details_tree">
<field name="transaction_details">
<tree create="0" delete="0">
<field name="name" string="Trans. # "/>
<field name="date_done" string="Transaction Date"/>
<field name="picking_type_id" string="Transaction Type"/>
<field name="partner_id" string="Reference Name"/>
<field name="state" string="Transaction Status"/>
</tree>
</field>
</div>
</div>
<div attrs="{'invisible':[('search_by', 'not in', ('any', 'sale details'))]}"
class="oe_result_div">
<div style="background-color: #5f5e97; color: #fff; width: 100%; padding: 5px 10px;
margin-top: 10px; border-top-right-radius: 5px;border-top-left-radius: 5px;"
class="oe_search_tab">
Sale Search Results
<div style="float: right;">
<field name="sale_count" class="oe_tab_count" readonly="1"/>
Records Found
<span class="oe_drop_down">
<i style="color: #fff !important; font-size: 16px;" class="fa fa-caret-down"/>
</span>
</div>
</div>
<div style="height: 200px; overflow-y: scroll;width: 100%;" class="oe_details_tree">
<field name="sale_details">
<tree create="0" delete="0">
<field name="name" string="Trans. # "/>
<field name="partner_id" string="Customer"/>
<field name="pricelist_id" string="Pricelist"/>
<field name="payment_term_id" string="Payment Term"/>
<field name="state" string="Status"/>
</tree>
</field>
</div>
</div>
<div attrs="{'invisible':[('search_by', 'not in', ('any', 'purchase details'))]}"
class="oe_result_div">
<div style="background-color: #5f5e97; color: #fff; width: 100%; padding: 5px 10px;
margin-top: 10px; border-top-right-radius: 5px;border-top-left-radius: 5px;"
class="oe_search_tab">
Purchase Search Results
<div style="float: right;">
<field name="purchase_count" class="oe_tab_count" readonly="1"/>
Records Found
<span class="oe_drop_down">
<i style="color: #fff !important; font-size: 16px;" class="fa fa-caret-down"/>
</span>
</div>
</div>
<div style="height: 200px; overflow-y: scroll;width: 100%;" class="oe_details_tree">
<field name="purchase_details">
<tree create="0" delete="0">
<field name="name" string="Trans. # "/>
<field name="partner_id" string="Customer"/>
<field name="state" string="Status"/>
</tree>
</field>
</div>
</div>
<div attrs="{'invisible':[('search_by', 'not in', ('any', 'account details'))]}"
class="oe_result_div">
<div style="background-color: #5f5e97; color: #fff; width: 100%; padding: 5px 10px;
margin-top: 10px; border-top-right-radius: 5px;border-top-left-radius: 5px;"
class="oe_search_tab">
Accounting Search Results
<div style="float: right;">
<field name="account_count" class="oe_tab_count" readonly="1"/>
Records Found
<span class="oe_drop_down">
<i style="color: #fff !important; font-size: 16px;" class="fa fa-caret-down"/>
</span>
</div>
</div>
<div style="height: 200px; overflow-y: scroll;width: 100%;" class="oe_details_tree">
<field name="account_details">
<tree create="false" delete="false" edit="false">
<field name="name" string="Trans. # "/>
<field name="partner_id" string="Customer"/>
<field name="state" string="Status"/>
</tree>
</field>
</div>
</div>
</sheet>
</form>
</field>
</record>
<!-- actions opening views on models -->
<record model="ir.actions.act_window" id="master_search_action">
<field name="name">Search</field>
<field name="res_model">master.search</field>
<field name="view_mode">form</field>
<field name="context">{'active_test': False, 'search_default_filter_active': 1}</field>
</record>
<!-- Search root menu -->
<menuitem id="master_search_root" name="Search" action="master_search_action"
web_icon="master_search,static/description/icon.png"
sequence="2" groups="master_search.master_search_read"/>
</data>
</odoo>
Loading…
Cancel
Save