diff --git a/dynamic_hover_on_related_fields/README.rst b/dynamic_hover_on_related_fields/README.rst new file mode 100644 index 000000000..e4a8787c6 --- /dev/null +++ b/dynamic_hover_on_related_fields/README.rst @@ -0,0 +1,48 @@ +.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg + :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +Dynamic Hover on Related Fields +=============================== +Dynamic Hover on Related Fields Helps you to show the configured +fields in a tooltip popup + +Configuration +============= +No additional configuration required + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +------- +General Public License, Version 3 (LGPL v3). +(https://www.gnu.org/licenses/lgpl-3.0-standalone.html) + +Credits +------- +* Developer: (V16) ASWIN A K, Contact: odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if +your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ diff --git a/dynamic_hover_on_related_fields/__init__.py b/dynamic_hover_on_related_fields/__init__.py new file mode 100644 index 000000000..fbcfd1219 --- /dev/null +++ b/dynamic_hover_on_related_fields/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: ASWIN A K (odoo@cybrosys.com) +# +# 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/dynamic_hover_on_related_fields/__manifest__.py b/dynamic_hover_on_related_fields/__manifest__.py new file mode 100644 index 000000000..454f2ad10 --- /dev/null +++ b/dynamic_hover_on_related_fields/__manifest__.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: ASWIN A K (odoo@cybrosys.com) +# +# 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': 'Dynamic Hover on Related Fields', + 'version': '16.0.1.0.0', + 'category': 'Extra Tools', + 'summary': 'Dynamic Hover on Related Fields Helps you to ' + 'show the configured fields in a tooltip popup', + 'description': 'Enhance your user experience with ' + 'Dynamic Hover on Related Fields! This feature allows ' + 'you to effortlessly display configured fields in ' + 'a convenient tooltip popup. You have the flexibility ' + 'to choose which fields and models you want to showcase ' + 'when hovering over relevant information. ' + 'Simplify your interactions and access key data with ease.', + 'author': 'Cybrosys Techno solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['web'], + 'data': [ + 'security/ir.model.access.csv', + 'views/hover_related_fields_views.xml' + ], + 'assets': { + 'web.assets_backend': [ + 'dynamic_hover_on_related_fields/static/src/xml/*.xml', + 'dynamic_hover_on_related_fields/static/src/js/*.js', + ], + }, + 'images': ['static/description/banner.png'], + 'license': 'LGPL-3', + 'installable': True, + 'application': True, + 'auto_install': False, +} diff --git a/dynamic_hover_on_related_fields/doc/RELEASE_NOTES.md b/dynamic_hover_on_related_fields/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..0d62ccbb7 --- /dev/null +++ b/dynamic_hover_on_related_fields/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 20.04.2024 +#### Version 16.0.1.0.0 +#### ADD + - Initial Commit for Dynamic Hover on Related Fields diff --git a/dynamic_hover_on_related_fields/models/__init__.py b/dynamic_hover_on_related_fields/models/__init__.py new file mode 100644 index 000000000..46a150589 --- /dev/null +++ b/dynamic_hover_on_related_fields/models/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: ASWIN A K (odoo@cybrosys.com) +# +# 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 hover_related_fields diff --git a/dynamic_hover_on_related_fields/models/hover_related_fields.py b/dynamic_hover_on_related_fields/models/hover_related_fields.py new file mode 100644 index 000000000..7ead73c28 --- /dev/null +++ b/dynamic_hover_on_related_fields/models/hover_related_fields.py @@ -0,0 +1,120 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: ASWIN A K (odoo@cybrosys.com) +# +# 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 api, fields, models + + +class HoverRelatedFields(models.Model): + """ + Model for managing hover-related fields and their configurations. + """ + _name = 'hover.related.fields' + _description = 'Hover Related Fields' + _rec_name = 'model_id' + _sql_constraints = [ + ('unique_model_id', 'UNIQUE(model_id)', + 'One model should only have one configuration.') + ] + + model_ids = fields.Many2many( + 'ir.model', + string='Models', + compute='_compute_model_ids', + help='Models related to the configuration ' + 'for setting domain for model_id', + ) + model_id = fields.Many2one( + 'ir.model', + 'Model', + domain="[('id', 'not in', model_ids)]", + help='Select a model for configuration', + ) + field_ids = fields.Many2many( + 'ir.model.fields', + string='Fields', domain="[('model_id', '=', model_id)]", + help='Fields related to the selected model', + ) + active = fields.Boolean( + string='Active', + default=True, + help='Helps to archive the configurations') + + @api.depends('model_id') + def _compute_model_ids(self): + self.model_ids = self.search([]).mapped('model_id') + + @api.model + def finding_the_data_to_show_tooltip(self, info): + """ + Method to find data to display in tooltips based on the provided + information. + + :param info: Information about the tooltip request. + :type info: dict + :return: Data to display in the tooltip. + :rtype: list or bool + """ + current_record = self.env[info['resModel']].browse(int(info['resId'])) + field_name = info['field']['name'] + configured_model = self.search( + [('model_id.model', '=', info['field']['relation'])]) + required_data = [[ + { + 'id': field.id, + 'field': field.field_description, + 'field_name': field.name, + 'ttype': field.ttype, + 'value': rec[ + field.name + ].display_name if field.ttype == 'many2one' else rec[field.name] + } for field in configured_model.field_ids + ] for rec in current_record[field_name]] + return required_data if required_data != [[]] else False + + @api.model + def finding_the_data_to_show_tooltip_many2many(self, info): + """ + Method to find data for tooltips in many2many, + many2one relationships. + + :param info: Information about the tooltip request. + :type info: dict + :return: Data to display in the tooltip. + :rtype: list or string + """ + rec_to_show = self.env[info['field']['relation']].browse( + int(info['related_record_id'])) + configured_model = self.search( + [('model_id.model', '=', info['field']['relation'])]) + required_data = [ + { + 'id': field.id, + 'field': field.field_description, + 'field_name': field.name, + 'ttype': field.ttype, + 'value': rec_to_show[ + field.name + ].display_name if field.ttype == 'many2one' else rec_to_show[field.name] + } + for field in configured_model.field_ids] + if required_data == [] and info['viewMode'] == 'list': + required_data = rec_to_show.display_name + return required_data diff --git a/dynamic_hover_on_related_fields/security/ir.model.access.csv b/dynamic_hover_on_related_fields/security/ir.model.access.csv new file mode 100644 index 000000000..6bc68ac51 --- /dev/null +++ b/dynamic_hover_on_related_fields/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_hover_related_fields_user,access.hover.related.fields.user,model_hover_related_fields,base.group_user,1,1,1,1 diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/check.png b/dynamic_hover_on_related_fields/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/check.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/chevron.png b/dynamic_hover_on_related_fields/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/chevron.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/cogs.png b/dynamic_hover_on_related_fields/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/cogs.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/consultation.png b/dynamic_hover_on_related_fields/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/consultation.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/ecom-black.png b/dynamic_hover_on_related_fields/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/ecom-black.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/education-black.png b/dynamic_hover_on_related_fields/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/education-black.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/hotel-black.png b/dynamic_hover_on_related_fields/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/hotel-black.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/license.png b/dynamic_hover_on_related_fields/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/license.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/lifebuoy.png b/dynamic_hover_on_related_fields/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/lifebuoy.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/manufacturing-black.png b/dynamic_hover_on_related_fields/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/manufacturing-black.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/pos-black.png b/dynamic_hover_on_related_fields/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/pos-black.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/puzzle.png b/dynamic_hover_on_related_fields/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/puzzle.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/restaurant-black.png b/dynamic_hover_on_related_fields/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/restaurant-black.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/service-black.png b/dynamic_hover_on_related_fields/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/service-black.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/trading-black.png b/dynamic_hover_on_related_fields/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/trading-black.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/training.png b/dynamic_hover_on_related_fields/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/training.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/update.png b/dynamic_hover_on_related_fields/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/update.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/user.png b/dynamic_hover_on_related_fields/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/user.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/icons/wrench.png b/dynamic_hover_on_related_fields/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/icons/wrench.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/Cybrosys R.png b/dynamic_hover_on_related_fields/static/description/assets/misc/Cybrosys R.png new file mode 100644 index 000000000..da4058087 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/Cybrosys R.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/categories.png b/dynamic_hover_on_related_fields/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/categories.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/check-box.png b/dynamic_hover_on_related_fields/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/check-box.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/compass.png b/dynamic_hover_on_related_fields/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/compass.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/corporate.png b/dynamic_hover_on_related_fields/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/corporate.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/customer-support.png b/dynamic_hover_on_related_fields/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/customer-support.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/cybrosys-logo.png b/dynamic_hover_on_related_fields/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/cybrosys-logo.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/email.svg b/dynamic_hover_on_related_fields/static/description/assets/misc/email.svg new file mode 100644 index 000000000..15291cdc3 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/description/assets/misc/email.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/features.png b/dynamic_hover_on_related_fields/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/features.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/logo.png b/dynamic_hover_on_related_fields/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/logo.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/phone.svg b/dynamic_hover_on_related_fields/static/description/assets/misc/phone.svg new file mode 100644 index 000000000..b7bd7f251 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/description/assets/misc/phone.svg @@ -0,0 +1,3 @@ + + + diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/pictures.png b/dynamic_hover_on_related_fields/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/pictures.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/pie-chart.png b/dynamic_hover_on_related_fields/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/pie-chart.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/right-arrow.png b/dynamic_hover_on_related_fields/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/right-arrow.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/star (1) 2.svg b/dynamic_hover_on_related_fields/static/description/assets/misc/star (1) 2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/dynamic_hover_on_related_fields/static/description/assets/misc/star (1) 2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/star.png b/dynamic_hover_on_related_fields/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/star.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/support (1) 1.svg b/dynamic_hover_on_related_fields/static/description/assets/misc/support (1) 1.svg new file mode 100644 index 000000000..7d37a8f30 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/description/assets/misc/support (1) 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/support-email.svg b/dynamic_hover_on_related_fields/static/description/assets/misc/support-email.svg new file mode 100644 index 000000000..eb70370d6 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/description/assets/misc/support-email.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/support.png b/dynamic_hover_on_related_fields/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/support.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/tick-mark.svg b/dynamic_hover_on_related_fields/static/description/assets/misc/tick-mark.svg new file mode 100644 index 000000000..2dbb40187 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/description/assets/misc/tick-mark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/whatsapp 1.svg b/dynamic_hover_on_related_fields/static/description/assets/misc/whatsapp 1.svg new file mode 100644 index 000000000..0bfaf8fc6 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/description/assets/misc/whatsapp 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/whatsapp.png b/dynamic_hover_on_related_fields/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/misc/whatsapp.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/misc/whatsapp.svg b/dynamic_hover_on_related_fields/static/description/assets/misc/whatsapp.svg new file mode 100644 index 000000000..b618aea1d --- /dev/null +++ b/dynamic_hover_on_related_fields/static/description/assets/misc/whatsapp.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynamic_hover_on_related_fields/static/description/assets/modules/1.png b/dynamic_hover_on_related_fields/static/description/assets/modules/1.png new file mode 100644 index 000000000..489f44e86 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/modules/1.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/modules/2.png b/dynamic_hover_on_related_fields/static/description/assets/modules/2.png new file mode 100644 index 000000000..4f9e87f6e Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/modules/2.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/modules/3.png b/dynamic_hover_on_related_fields/static/description/assets/modules/3.png new file mode 100644 index 000000000..e571015b1 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/modules/3.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/modules/4.png b/dynamic_hover_on_related_fields/static/description/assets/modules/4.png new file mode 100644 index 000000000..624ef69b7 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/modules/4.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/modules/5.gif b/dynamic_hover_on_related_fields/static/description/assets/modules/5.gif new file mode 100644 index 000000000..8f40aab85 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/modules/5.gif differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/modules/6.png b/dynamic_hover_on_related_fields/static/description/assets/modules/6.png new file mode 100644 index 000000000..31ed46762 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/modules/6.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic1.png b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic1.png new file mode 100644 index 000000000..f6b45feb0 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic1.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic2.png b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic2.png new file mode 100644 index 000000000..0ce8a2c66 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic2.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic3.png b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic3.png new file mode 100644 index 000000000..9baad7196 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic3.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic4.png b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic4.png new file mode 100644 index 000000000..68b2cc057 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic4.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic5.png b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic5.png new file mode 100644 index 000000000..e01459338 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic5.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic6.png b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic6.png new file mode 100644 index 000000000..89800dbb8 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/screenshots/dynamic6.png differ diff --git a/dynamic_hover_on_related_fields/static/description/assets/screenshots/hero-v16.gif b/dynamic_hover_on_related_fields/static/description/assets/screenshots/hero-v16.gif new file mode 100644 index 000000000..e43686045 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/assets/screenshots/hero-v16.gif differ diff --git a/dynamic_hover_on_related_fields/static/description/banner.png b/dynamic_hover_on_related_fields/static/description/banner.png new file mode 100644 index 000000000..980e02e1f Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/banner.png differ diff --git a/dynamic_hover_on_related_fields/static/description/icon.png b/dynamic_hover_on_related_fields/static/description/icon.png new file mode 100644 index 000000000..340e05cd7 Binary files /dev/null and b/dynamic_hover_on_related_fields/static/description/icon.png differ diff --git a/dynamic_hover_on_related_fields/static/description/index.html b/dynamic_hover_on_related_fields/static/description/index.html new file mode 100644 index 000000000..76c005ab8 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/description/index.html @@ -0,0 +1,620 @@ + +
+ +
+ +
+
+ Community +
+
+ Enterprise +
+
+
+ +
+
+
+ +

+ Dynamic Hover on Related Fields +

+

+ Dynamic Hover on Related Fields Helps you to show the configured fields in a tooltip popup

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

+ Explore This + Module

+
+ + + + +
+
+ +
+

+ Overview +

+
+
+
+ Enhance your user experience with Dynamic Hover on Related Fields! This feature enables you to effortlessly display configured fields in a convenient tooltip popup. With the flexibility to choose which fields and models you want to showcase when hovering over relevant information, you can simplify your interactions and access key data with ease. Whether it's navigating through complex datasets or swiftly retrieving important information, Dynamic Hover empowers you to streamline your workflow and enhance productivity. +
+
+
+ + + +
+
+ +
+

+ Features +

+
+
+
+
+ + Dynamic Hover on Related Fields +
+
+ + Customizable Field Selection +
+
+ + Flexibility in Field and Model Selection +
+
+ + Seamless Interaction +
+
+ + Enhanced Accessibility. +
+
+
+ + + +
+
+ +
+

+ Screenshots +

+
+
+
+ +
+

+ Configuration: Go to Dynamic Hover -> New -> We can see the fields model and fields to configure. +

+ +
+
+

+ Configured Records: Go to Dynamic Hover -> We can see the configured models and fields. +

+ +
+ +
+

+ In Tree View: Hover over any configured related field to instantly view its data in popup +

+ +
+ +
+

+ In Form View

+ +
+ +
+ +
+ +
+

+ In Many2many Tags +

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

+ Related Products +

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

+ Our Services +

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

+ Our + Industries +

+
+ +
+
+
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

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

+ Mobile + friendly, + awe-inspiring product pages

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

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

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

+ An + all-inclusive + hotel management application

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

+ Support +

+
+
+
+
+
+
+ +
+
+

Need Help?

+

Got questions or need help? + Get in touch.

+ +

+ odoo@cybrosys.com

+
+
+
+
+
+
+
+ +
+
+

WhatsApp

+

Say hi to us on WhatsApp!

+ +

+ +91 86068 + 27707

+
+
+
+
+
+
+
+ +
+
+
+ \ No newline at end of file diff --git a/dynamic_hover_on_related_fields/static/src/js/fieldToltip.js b/dynamic_hover_on_related_fields/static/src/js/fieldToltip.js new file mode 100644 index 000000000..d814b7e55 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/src/js/fieldToltip.js @@ -0,0 +1,31 @@ +/** @odoo-module **/ + +export function getTooltipInfo(params) { + let widgetDescription = undefined; + if (params.fieldInfo.widget) { + widgetDescription = params.fieldInfo.FieldComponent.displayName; + } + + const info = { + viewMode: params.viewMode, + resModel: params.resModel, + resId: params.resId, + debug: Boolean(odoo.debug), + field: { + label: params.field.string, + name: params.field.name, + help: params.fieldInfo.help !== null ? params.fieldInfo.help : params.field.help, + type: params.field.type, + widget: params.fieldInfo.widget, + widgetDescription, + context: params.fieldInfo.context, + domain: params.field.domain, + modifiers: JSON.stringify(params.fieldInfo.modifiers), + changeDefault: params.field.change_default, + relation: params.field.relation, + selection: params.field.selection, + default: params.field.default, + }, + }; + return JSON.stringify(info); +} \ No newline at end of file diff --git a/dynamic_hover_on_related_fields/static/src/js/formLabel.js b/dynamic_hover_on_related_fields/static/src/js/formLabel.js new file mode 100644 index 000000000..2b1a3a355 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/src/js/formLabel.js @@ -0,0 +1,30 @@ +/** @odoo-module **/ + +import { FormLabel } from "@web/views/form/form_label" +import { patch } from "@web/core/utils/patch" +import { getTooltipInfo } from "./fieldToltip" + +patch(FormLabel.prototype, "Form_label", { + + /** + * Retrieves tooltip information for the FormLabel. + * @returns {string} JSON string representing tooltip information. + */ + get tooltipInfo() { + if (!odoo.debug) { + return JSON.stringify({ + field: { + help: this.tooltipHelp, + }, + }); + } + return getTooltipInfo({ + viewMode: "form", + resModel: this.props.record.resModel, + resId: this.props.record.resId, + field: this.props.record.fields[this.props.fieldName], + fieldInfo: this.props.fieldInfo, + help: this.tooltipHelp, + }); + }, +}) \ No newline at end of file diff --git a/dynamic_hover_on_related_fields/static/src/js/listRenderer.js b/dynamic_hover_on_related_fields/static/src/js/listRenderer.js new file mode 100644 index 000000000..7227fbb81 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/src/js/listRenderer.js @@ -0,0 +1,41 @@ +/** @odoo-module **/ + +import { patch } from "@web/core/utils/patch" +import { ListRenderer } from "@web/views/list/list_renderer"; + +patch(ListRenderer.prototype, "ListRenderer_patch", { + /** + * Generate tooltip information for a field. + * @param {Object} record - The record object. + * @param {Object} fields - The fields object. + * @returns {string} - JSON string containing tooltip information. + */ + tolTipInfo(record, fields) { + const field = record.fields[fields.name] + const info = { + viewMode: "list", + resModel: record.resModel, + related_record_id: record.data[fields.name][0], + resId: record.resId, + debug: Boolean(odoo.debug), + field: { + name: field.name, + help: field?.help, + type: field.type, + domain: field.domain, + relation: field.relation, + }, + }; + return JSON.stringify(info); + }, + /** + * Check if the field type is many2one. + * @param {Object} record - The record object. + * @param {Object} fields - The fields object. + * @returns {boolean} - True if the field type is many2one, false otherwise. + */ + isMany2one(record, fields){ + const field = record.fields[fields.name] + return field.type === 'many2one'; + } +}) \ No newline at end of file diff --git a/dynamic_hover_on_related_fields/static/src/js/many2ManyTagsField.js b/dynamic_hover_on_related_fields/static/src/js/many2ManyTagsField.js new file mode 100644 index 000000000..90d53822a --- /dev/null +++ b/dynamic_hover_on_related_fields/static/src/js/many2ManyTagsField.js @@ -0,0 +1,39 @@ +/** @odoo-module **/ + +import { patch } from "@web/core/utils/patch"; +import { Many2ManyTagsField } from "@web/views/fields/many2many_tags/many2many_tags_field"; + +patch(Many2ManyTagsField.prototype, "Many2ManyTagsField_patch", { + + /** + * Retrieves tag properties for the Many2ManyTagsField. + * @param {Object} record - The record for which tag properties are retrieved. + * @returns {Object} Tag properties object. + */ + getTagProps(record) { + const field = this.props.record.fields[this.props.name] + const info = { + viewMode: "form", + resModel:this.props.record.resModel, + resId: this.props.record.resId, + related_record_id: record.resId, + debug: Boolean(odoo.debug), + field: { + name: field.name, + help: field?.help, + type: field.type, + domain: field.domain, + relation: field.relation, + }, + }; + return { + id: record.id, // datapoint_X + resId: record.resId, + text: record.data.display_name, + colorIndex: record.data[this.props.colorField], + onDelete: !this.props.readonly ? () => this.deleteTag(record.id) : undefined, + onKeydown: this.onTagKeydown.bind(this), + info: JSON.stringify(info) + }; + } +}) diff --git a/dynamic_hover_on_related_fields/static/src/js/many2OneField.js b/dynamic_hover_on_related_fields/static/src/js/many2OneField.js new file mode 100644 index 000000000..5a8512bbd --- /dev/null +++ b/dynamic_hover_on_related_fields/static/src/js/many2OneField.js @@ -0,0 +1,49 @@ +/** @odoo-module **/ + +import { patch } from "@web/core/utils/patch"; +import { Many2OneField } from "@web/views/fields/many2one/many2one_field"; + +patch(Many2OneField.prototype, "Many2OneField_patch", { + /** + * Generates tooltip information for the Many2OneField. + * @returns {string} JSON string representing tooltip information. + */ + get tooltipInfo() { + return this.getTooltipInfo({ + viewMode: "form", + resModel: this.props.record.resModel, + related_record_id: this.props.record.data[this.props.name][0], + resId: this.props.record.resId, + field: this.props.record.fields[this.props.name], + fieldInfo: this.props.fieldInfo, + }); + }, + + /** + * Constructs tooltip information object based on provided parameters. + * @param {Object} params - Parameters for tooltip information. + * @param {string} params.viewMode - View mode of the record. + * @param {string} params.resModel - Model of the record. + * @param {number} params.resId - ID of the record. + * @param {Object} params.field - Field information. + * @param {Object} params.fieldInfo - Field information. + * @returns {string} JSON string representing tooltip information. + */ + getTooltipInfo(params){ + const info = { + viewMode: params.viewMode, + resModel: params.resModel, + related_record_id: params.related_record_id, + resId: params.resId, + debug: Boolean(odoo.debug), + field: { + name: params.field.name, + help: params.field?.help, + type: params.field.type, + domain: params.field.domain, + relation: params.field.relation, + }, + }; + return JSON.stringify(info); + }, +}) \ No newline at end of file diff --git a/dynamic_hover_on_related_fields/static/src/js/tooltipService.js b/dynamic_hover_on_related_fields/static/src/js/tooltipService.js new file mode 100644 index 000000000..674f626a7 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/src/js/tooltipService.js @@ -0,0 +1,204 @@ +/** @odoo-module **/ +import { tooltipService } from "@web/core/tooltip/tooltip_service"; +import { browser } from "@web/core/browser/browser"; +import { registry } from "@web/core/registry"; +import { Tooltip } from "@web/core/tooltip/tooltip"; +import { hasTouch } from "@web/core/browser/feature_detection"; +const rpc = require('web.rpc') +import { whenReady } from "@odoo/owl"; + +const OPEN_DELAY = 400; +const CLOSE_DELAY = 200; +tooltipService.start = (env, { popover }) => { + let openTooltipTimeout; + let closeTooltip; + let target = null; + let touchPressed; + const elementsWithTooltips = new Map(); + + /** + * Closes the currently opened tooltip if any, or prevent it from opening. + */ + function cleanup() { + browser.clearTimeout(openTooltipTimeout); + if (closeTooltip) { + closeTooltip(); + } + } + + /** + * Checks that the target is in the DOM and we're hovering the target. + * @returns {boolean} + */ + function shouldCleanup() { + if (!target) { + return false; + } + if (!document.body.contains(target)) { + return true; // target is no longer in the DOM + } + if (hasTouch()) { + return !touchPressed; + } + return false; + } + + async function getDataFromBackend(info) { + if (!info?.field?.relation ) return + if (info?.related_record_id){ + const requiredData = await rpc.query({ + model: "hover.related.fields", + method: "finding_the_data_to_show_tooltip_many2many", + args:[info]}); + info.requiredData = requiredData; + }else if(info?.resId){ + const requiredData = await rpc.query({ + model: "hover.related.fields", + method: "finding_the_data_to_show_tooltip", + args: [info]}); + info.requiredData = requiredData; + } + } + + /** + * Checks whether there is a tooltip registered on the event target, and + * if there is, creates a timeout to open the corresponding tooltip + * after a delay. + * + * @param {HTMLElement} el the element on which to add the tooltip + * @param {object} param1 + * @param {string} [param1.tooltip] the string to add as a tooltip, if + * no tooltip template is specified + * @param {string} [param1.template] the name of the template to use for + * tooltip, if any + * @param {object} [param1.info] info for the tooltip template + * @param {'top'|'bottom'|'left'|'right'} param1.position + * @param {number} [param1.delay] delay after which the popover should + * open + */ + async function openTooltip(el, { tooltip = "", template, info, position, delay = OPEN_DELAY }) { + await getDataFromBackend(info) + target = el; + cleanup(); + if (!tooltip && !template) { + return; + } + + openTooltipTimeout = browser.setTimeout(() => { + // verify that the element is still in the DOM + if (target.isConnected) { + closeTooltip = popover.add( + target, + Tooltip, + { tooltip, template, info }, + { position } + ); + // Prevent title from showing on a parent at the same time + target.title = ""; + } + }, delay); + } + + /** + * Checks whether there is a tooltip registered on the element, and + * if there is, creates a timeout to open the corresponding tooltip + * after a delay. + * + * @param {HTMLElement} el + */ + function openElementsTooltip(el) { + if (elementsWithTooltips.has(el)) { + openTooltip(el, elementsWithTooltips.get(el)); + } else if (el.matches("[data-tooltip], [data-tooltip-template]")) { + const dataset = el.dataset; + const params = { + tooltip: dataset.tooltip, + template: dataset.tooltipTemplate, + position: dataset.tooltipPosition, + }; + if (dataset.tooltipInfo) { + params.info = JSON.parse(dataset.tooltipInfo); + } + if (dataset.tooltipDelay) { + params.delay = parseInt(dataset.tooltipDelay, 10); + } + openTooltip(el, params); + } + } + + /** + * Checks whether there is a tooltip registered on the event target, and + * if there is, creates a timeout to open the corresponding tooltip + * after a delay. + * + * @param {MouseEvent} ev a "mouseenter" event + */ + function onMouseenter(ev) { + openElementsTooltip(ev.target); + } + + function onMouseleave(ev) { + if (target === ev.target) { + cleanup(); + } + } + /** + * Checks whether there is a tooltip registered on the event target, and + * if there is, creates a timeout to open the corresponding tooltip + * after a delay. + * + * @param {TouchEvent} ev a "touchstart" event + */ + function onTouchStart(ev) { + touchPressed = true; + openElementsTooltip(ev.target); + } + + whenReady(() => { + // Regularly check that the target is still in the DOM and if not, close the tooltip + browser.setInterval(() => { + if (shouldCleanup()) { + cleanup(); + } + }, CLOSE_DELAY); + + if (hasTouch()) { + document.body.addEventListener("touchstart", onTouchStart); + + document.body.addEventListener("touchend", (ev) => { + if (ev.target.matches("[data-tooltip], [data-tooltip-template]")) { + if (!ev.target.dataset.tooltipTouchTapToShow) { + touchPressed = false; + } + } + }); + + document.body.addEventListener("touchcancel", (ev) => { + if (ev.target.matches("[data-tooltip], [data-tooltip-template]")) { + if (!ev.target.dataset.tooltipTouchTapToShow) { + touchPressed = false; + } + } + }); + + return; + } + + // Listen (using event delegation) to "mouseenter" events to open the tooltip if any + document.body.addEventListener("mouseenter", onMouseenter, { capture: true }); + // Listen (using event delegation) to "mouseleave" events to close the tooltip if any + document.body.addEventListener("mouseleave", onMouseleave, { capture: true }); + }); + + return { + add(el, params) { + elementsWithTooltips.set(el, params); + return () => { + elementsWithTooltips.delete(el); + if (target === el) { + cleanup(); + } + }; + }, + }; + } diff --git a/dynamic_hover_on_related_fields/static/src/xml/listRenderer.xml b/dynamic_hover_on_related_fields/static/src/xml/listRenderer.xml new file mode 100644 index 000000000..ebdd56d46 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/src/xml/listRenderer.xml @@ -0,0 +1,16 @@ + + + + + + + + dynamic_hover_on_related_fields.RelatedFieldTooltip + + isMany2one(record, column)? tolTipInfo(record, column) : false + + true + + + \ No newline at end of file diff --git a/dynamic_hover_on_related_fields/static/src/xml/many2OneField.xml b/dynamic_hover_on_related_fields/static/src/xml/many2OneField.xml new file mode 100644 index 000000000..ef7c9c25e --- /dev/null +++ b/dynamic_hover_on_related_fields/static/src/xml/many2OneField.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + +
+ +
+
+
+
+ + + {'data-tooltip-template': 'dynamic_hover_on_related_fields.RelatedFieldTooltip', 'data-tooltip-info': tooltipInfo, 'data-tooltip-touch-tap-to-show': 'true'} + + +
+ {'data-tooltip-template': 'dynamic_hover_on_related_fields.RelatedFieldTooltip', 'data-tooltip-info': tooltipInfo, 'data-tooltip-touch-tap-to-show': 'true'} +
+
+
\ No newline at end of file diff --git a/dynamic_hover_on_related_fields/static/src/xml/relatedFieldTooltip.xml b/dynamic_hover_on_related_fields/static/src/xml/relatedFieldTooltip.xml new file mode 100644 index 000000000..782d8db9d --- /dev/null +++ b/dynamic_hover_on_related_fields/static/src/xml/relatedFieldTooltip.xml @@ -0,0 +1,41 @@ + + + + + +
+
Field Data
+
    + + + +
  • + : + +
  • + +
  • + : +
    +
    + +
    +
  • + +
  • + : + +
  • +
    +
+
+ +
+ +
+ +
+
No Data Available !!!
+
+
+
\ No newline at end of file diff --git a/dynamic_hover_on_related_fields/static/src/xml/tagsList.xml b/dynamic_hover_on_related_fields/static/src/xml/tagsList.xml new file mode 100644 index 000000000..220416de2 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/src/xml/tagsList.xml @@ -0,0 +1,15 @@ + + + + + + + + dynamic_hover_on_related_fields.RelatedFieldTooltip + + tag.info + + true + + + \ No newline at end of file diff --git a/dynamic_hover_on_related_fields/static/src/xml/webFieldToltip.xml b/dynamic_hover_on_related_fields/static/src/xml/webFieldToltip.xml new file mode 100644 index 000000000..86cb49c99 --- /dev/null +++ b/dynamic_hover_on_related_fields/static/src/xml/webFieldToltip.xml @@ -0,0 +1,37 @@ + + + + + + + +
+
Field Data
+ + +
    + + --> Record - + + +
  • + + : + +
  • + +
  • + : + +
  • +
    +
+
+
+ +
+
No Data Available !!!
+
+
+
+
\ No newline at end of file diff --git a/dynamic_hover_on_related_fields/views/hover_related_fields_views.xml b/dynamic_hover_on_related_fields/views/hover_related_fields_views.xml new file mode 100644 index 000000000..6484391ab --- /dev/null +++ b/dynamic_hover_on_related_fields/views/hover_related_fields_views.xml @@ -0,0 +1,61 @@ + + + + + hover.related.fields.view.form + hover.related.fields + +
+ + + + + + + +
+
+
+ + + hover.related.fields.view.tree + hover.related.fields + + + + + + + + + + hover.related.fields.view.search + hover.related.fields + + + + + + + + + + + Configure hover fields + hover.related.fields + tree,form + + + + + +
\ No newline at end of file