diff --git a/setup/web_tooltip_field/odoo/addons/web_tooltip_field b/setup/web_tooltip_field/odoo/addons/web_tooltip_field new file mode 120000 index 000000000000..db513405742b --- /dev/null +++ b/setup/web_tooltip_field/odoo/addons/web_tooltip_field @@ -0,0 +1 @@ +../../../../web_tooltip_field \ No newline at end of file diff --git a/setup/web_tooltip_field/setup.py b/setup/web_tooltip_field/setup.py new file mode 100644 index 000000000000..28c57bb64031 --- /dev/null +++ b/setup/web_tooltip_field/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/web_tooltip_field/README.rst b/web_tooltip_field/README.rst new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/web_tooltip_field/__init__.py b/web_tooltip_field/__init__.py new file mode 100644 index 000000000000..f7beb5a7d506 --- /dev/null +++ b/web_tooltip_field/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models +from .patch import post_load diff --git a/web_tooltip_field/__manifest__.py b/web_tooltip_field/__manifest__.py new file mode 100644 index 000000000000..d97d68781e0c --- /dev/null +++ b/web_tooltip_field/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2023 Komit - Cuong Nguyen Mtm +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Web Tooltip Field", + "version": "14.0.1.0.0", + "summary": "Showing a Field ToolTip in Odoo", + "category": "Tools", + "website": "https://github.com/OCA/web", + "author": "KOMIT, Odoo Community Association (OCA)", + "maintainers": ["cuongnmtm"], + "license": "AGPL-3", + "depends": ["base", "web"], + "data": [ + "security/ir.model.access.csv", + "views/ir_model_fields_help_tooltip_view.xml", + ], + "post_load": "post_load", + "application": False, + "installable": True, +} diff --git a/web_tooltip_field/models/__init__.py b/web_tooltip_field/models/__init__.py new file mode 100644 index 000000000000..f971c52dc9e2 --- /dev/null +++ b/web_tooltip_field/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import ir_model_fields_help_tooltip diff --git a/web_tooltip_field/models/ir_model_fields_help_tooltip.py b/web_tooltip_field/models/ir_model_fields_help_tooltip.py new file mode 100644 index 000000000000..5cec92804cea --- /dev/null +++ b/web_tooltip_field/models/ir_model_fields_help_tooltip.py @@ -0,0 +1,24 @@ +# Copyright 2023 Komit - Cuong Nguyen Mtm +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class IrModelFieldsHelpTooltip(models.Model): + _name = "ir.model.fields.help.tooltip" + _description = "Help Tooltip for Fields" + _rec_name = "field_id" + + field_id = fields.Many2one( + "ir.model.fields", required=True, ondelete="cascade", index=True + ) + model = fields.Char(related="field_id.model", store=True) + help = fields.Text(translate=True) + + _sql_constraints = [ + ( + "field_id_uniq", + "unique(field_id)", + "Help Tooltip for Field already exists!", + ), + ] diff --git a/web_tooltip_field/patch.py b/web_tooltip_field/patch.py new file mode 100644 index 000000000000..bac5cc5f6df8 --- /dev/null +++ b/web_tooltip_field/patch.py @@ -0,0 +1,27 @@ +import logging + +from odoo.fields import Field + +_logger = logging.getLogger(__name__) + +_former_field_description_help = Field._description_help + + +def _description_help(self, env): + model_name = self.base_field.model_name + help_tooltip = env["ir.model.fields.help.tooltip"].search( + [ + ("field_id.name", "=", self.name), + ("model", "=", model_name), + ("help", "!=", ""), + ], + limit=1, + ) + if help_tooltip: + return help_tooltip.help + return _former_field_description_help(self, env) + + +def post_load(): + _logger.info("Aplying patch web_tooltip_field ...") + Field._description_help = _description_help diff --git a/web_tooltip_field/readme/CONTRIBUTORS.rst b/web_tooltip_field/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..f3280f06eef4 --- /dev/null +++ b/web_tooltip_field/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Komit `_: + + * Cuong Nguyen Mtm diff --git a/web_tooltip_field/readme/CREDITS.rst b/web_tooltip_field/readme/CREDITS.rst new file mode 100644 index 000000000000..9a8cf44e6281 --- /dev/null +++ b/web_tooltip_field/readme/CREDITS.rst @@ -0,0 +1,4 @@ +The development of this module has been financially supported by: + +- Scaleway SAS (https://www.scaleway.com/) +- Komit (https://komit-consulting.com) diff --git a/web_tooltip_field/readme/USAGE.rst b/web_tooltip_field/readme/USAGE.rst new file mode 100644 index 000000000000..8748da6fe082 --- /dev/null +++ b/web_tooltip_field/readme/USAGE.rst @@ -0,0 +1,7 @@ +Configure +========= +* Open debug mode. +* Go to Setting > Fields Help Tooltip. +* Choose a field and insert your help message for that field. + +Then there will be a help message displayed when you mouserover it. diff --git a/web_tooltip_field/security/ir.model.access.csv b/web_tooltip_field/security/ir.model.access.csv new file mode 100644 index 000000000000..94cccfd647d9 --- /dev/null +++ b/web_tooltip_field/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_ir_model_fields_help_tooltip,ir.model.fields.help.tooltip,model_ir_model_fields_help_tooltip,base.group_system,1,1,1,1 +access_ir_model_fields_help_tooltip_internal,ir.model.fields.help.tooltip,model_ir_model_fields_help_tooltip,base.group_user,1,0,0,0 diff --git a/web_tooltip_field/tests/__init__.py b/web_tooltip_field/tests/__init__.py new file mode 100644 index 000000000000..e68ed3e08683 --- /dev/null +++ b/web_tooltip_field/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_field diff --git a/web_tooltip_field/tests/test_field.py b/web_tooltip_field/tests/test_field.py new file mode 100644 index 000000000000..d4fe4cb3c861 --- /dev/null +++ b/web_tooltip_field/tests/test_field.py @@ -0,0 +1,30 @@ +# Copyright 2023 Komit - Cuong Nguyen Mtm +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests import common + + +class TestField(common.SavepointCase): + @classmethod + def setUpClass(cls): + super(TestField, cls).setUpClass() + + def test_field_description_help(self): + contact_user_id_field = self.env["res.partner"]._fields["user_id"] + self.assertEqual( + contact_user_id_field._description_help(self.env), + "The internal user in charge of this contact.", + ) + contact_user_id_field_rec = self.env["ir.model.fields"].search( + [ + ("model", "=", "res.partner"), + ("name", "=", "user_id"), + ], + limit=1, + ) + self.env["ir.model.fields.help.tooltip"].create( + {"field_id": contact_user_id_field_rec.id, "help": "This is a test help."} + ) + self.assertEqual( + contact_user_id_field._description_help(self.env), "This is a test help." + ) diff --git a/web_tooltip_field/views/ir_model_fields_help_tooltip_view.xml b/web_tooltip_field/views/ir_model_fields_help_tooltip_view.xml new file mode 100644 index 000000000000..880ae4dd9629 --- /dev/null +++ b/web_tooltip_field/views/ir_model_fields_help_tooltip_view.xml @@ -0,0 +1,86 @@ + + + + + + ir.model.fields.help.tooltip.view.tree + ir.model.fields.help.tooltip + + + + + + + + + + + ir.model.fields.help.tooltip.view.form + ir.model.fields.help.tooltip + +
+ + + + + + + + + + + +
+
+
+ + + ir.model.fields.help.tooltip.view.search + ir.model.fields.help.tooltip + + + + + + + + + + + + + Fields Help Tooltip + ir.model.fields.help.tooltip + tree,form + + + + + + + + + 20 + + + 25 + + + 30 + + + 35 + + +