From 02bc3d9cbbd0857ba116c988dbd55fb0b3b816d4 Mon Sep 17 00:00:00 2001 From: GuillemCForgeFlow Date: Thu, 19 Jan 2023 13:18:30 +0100 Subject: [PATCH 1/2] [ADD]base_field_deprecated This module adds the possibilty to track all the declared deprecated fields in a fast way. --- base_field_deprecated/README.rst | 0 base_field_deprecated/__init__.py | 2 + base_field_deprecated/__manifest__.py | 17 +++++++++ base_field_deprecated/hooks.py | 22 +++++++++++ base_field_deprecated/models/__init__.py | 1 + .../models/ir_model_fields.py | 12 ++++++ base_field_deprecated/readme/CONTRIBUTORS.rst | 3 ++ base_field_deprecated/readme/DESCRIPTION.rst | 2 + base_field_deprecated/readme/USAGE.rst | 4 ++ .../views/ir_model_fields_views.xml | 37 +++++++++++++++++++ 10 files changed, 100 insertions(+) create mode 100644 base_field_deprecated/README.rst create mode 100644 base_field_deprecated/__init__.py create mode 100644 base_field_deprecated/__manifest__.py create mode 100644 base_field_deprecated/hooks.py create mode 100644 base_field_deprecated/models/__init__.py create mode 100644 base_field_deprecated/models/ir_model_fields.py create mode 100644 base_field_deprecated/readme/CONTRIBUTORS.rst create mode 100644 base_field_deprecated/readme/DESCRIPTION.rst create mode 100644 base_field_deprecated/readme/USAGE.rst create mode 100644 base_field_deprecated/views/ir_model_fields_views.xml diff --git a/base_field_deprecated/README.rst b/base_field_deprecated/README.rst new file mode 100644 index 0000000000..e69de29bb2 diff --git a/base_field_deprecated/__init__.py b/base_field_deprecated/__init__.py new file mode 100644 index 0000000000..cc6b6354ad --- /dev/null +++ b/base_field_deprecated/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .hooks import post_init_hook diff --git a/base_field_deprecated/__manifest__.py b/base_field_deprecated/__manifest__.py new file mode 100644 index 0000000000..f74ea15a0c --- /dev/null +++ b/base_field_deprecated/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2023 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": "Base Field Deprecated", + "summary": "Adds the deprecated attribute to the Odoo field model.", + "version": "13.0.1.0.0", + "category": "Usability", + "license": "AGPL-3", + "website": "https://github.com/OCA/server-ux", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "depends": ["base"], + "data": ["views/ir_model_fields_views.xml"], + "maintainers": ["GuillemCForgeFlow"], + "installable": True, + "application": False, + "post_init_hook": "post_init_hook", +} diff --git a/base_field_deprecated/hooks.py b/base_field_deprecated/hooks.py new file mode 100644 index 0000000000..59fb2031dc --- /dev/null +++ b/base_field_deprecated/hooks.py @@ -0,0 +1,22 @@ +from odoo import SUPERUSER_ID, api + + +def post_init_hook(cr, registry): + """ + Set deprecated value for all existing fields + """ + env = api.Environment(cr, SUPERUSER_ID, {}) + + model_obj = env["ir.model"] + field_obj = env["ir.model.fields"] + for model in model_obj.search([]): + all_fields = model._fields.items() + for field_name, field in all_fields: + # Only assign for deprecated fields to avoid too many useless searches + to_assign = bool(field.deprecated) + if to_assign: + odoo_field = field_obj.search( + [("name", "=", field_name), ("model", "=", model._name)], limit=1 + ) + if odoo_field: + odoo_field.write({"deprecated": to_assign}) diff --git a/base_field_deprecated/models/__init__.py b/base_field_deprecated/models/__init__.py new file mode 100644 index 0000000000..4236f0a44c --- /dev/null +++ b/base_field_deprecated/models/__init__.py @@ -0,0 +1 @@ +from . import ir_model_fields diff --git a/base_field_deprecated/models/ir_model_fields.py b/base_field_deprecated/models/ir_model_fields.py new file mode 100644 index 0000000000..0fd2b62389 --- /dev/null +++ b/base_field_deprecated/models/ir_model_fields.py @@ -0,0 +1,12 @@ +from odoo import fields, models + + +class IrModelFields(models.Model): + _inherit = "ir.model.fields" + + deprecated = fields.Boolean(help="Whether the field is deprecated or not.") + + def _reflect_field_params(self, field): + result = super()._reflect_field_params(field) + result["deprecated"] = bool(field.deprecated) + return result diff --git a/base_field_deprecated/readme/CONTRIBUTORS.rst b/base_field_deprecated/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..a502d31e5b --- /dev/null +++ b/base_field_deprecated/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `ForgeFlow S.L. `_: + + * Guillem Casassas diff --git a/base_field_deprecated/readme/DESCRIPTION.rst b/base_field_deprecated/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..f0a440b97a --- /dev/null +++ b/base_field_deprecated/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module adds the deprecated field to the Odoo field itself based on the value set to the Python field. +This can be useful to determine which are the declared deprecated fields in a fast way. diff --git a/base_field_deprecated/readme/USAGE.rst b/base_field_deprecated/readme/USAGE.rst new file mode 100644 index 0000000000..8a52a00cc8 --- /dev/null +++ b/base_field_deprecated/readme/USAGE.rst @@ -0,0 +1,4 @@ +#. By setting **deprecated=True** to a declared field, the Odoo field will inherit the value and it will be stored at the database level. +#. For instance: + #. If we have the following field: test_field = fields.Boolean(deprecated=True). + #. By looking at the instance that saves the information of the Python field on the **ir.model.fields** model, the deprecated attribute will be set there, just like copied, store, computed, among others. diff --git a/base_field_deprecated/views/ir_model_fields_views.xml b/base_field_deprecated/views/ir_model_fields_views.xml new file mode 100644 index 0000000000..1d408d6769 --- /dev/null +++ b/base_field_deprecated/views/ir_model_fields_views.xml @@ -0,0 +1,37 @@ + + + + ir.model.fields.tree - base_field_deprecated + ir.model.fields + + + + + + + + + ir.model.fields.form - base_field_deprecated + ir.model.fields + + + + + + + + + ir.model.fields.search - base_field_deprecated + ir.model.fields + + + + + + + + From de9ba1eb9b58f56d190e1308ed88848e8e16d591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miquel=20Ra=C3=AFch?= Date: Mon, 30 Jan 2023 11:53:44 +0100 Subject: [PATCH 2/2] [MIG] base_field_deprecated: Migration to 15.0 --- base_field_deprecated/__manifest__.py | 2 +- base_field_deprecated/models/ir_model_fields.py | 4 ++-- .../base_field_deprecated/odoo/addons/base_field_deprecated | 1 + setup/base_field_deprecated/setup.py | 6 ++++++ 4 files changed, 10 insertions(+), 3 deletions(-) create mode 120000 setup/base_field_deprecated/odoo/addons/base_field_deprecated create mode 100644 setup/base_field_deprecated/setup.py diff --git a/base_field_deprecated/__manifest__.py b/base_field_deprecated/__manifest__.py index f74ea15a0c..c06df09c49 100644 --- a/base_field_deprecated/__manifest__.py +++ b/base_field_deprecated/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Base Field Deprecated", "summary": "Adds the deprecated attribute to the Odoo field model.", - "version": "13.0.1.0.0", + "version": "15.0.1.0.0", "category": "Usability", "license": "AGPL-3", "website": "https://github.com/OCA/server-ux", diff --git a/base_field_deprecated/models/ir_model_fields.py b/base_field_deprecated/models/ir_model_fields.py index 0fd2b62389..e6dfc21918 100644 --- a/base_field_deprecated/models/ir_model_fields.py +++ b/base_field_deprecated/models/ir_model_fields.py @@ -6,7 +6,7 @@ class IrModelFields(models.Model): deprecated = fields.Boolean(help="Whether the field is deprecated or not.") - def _reflect_field_params(self, field): - result = super()._reflect_field_params(field) + def _reflect_field_params(self, field, model_id): + result = super()._reflect_field_params(field, model_id) result["deprecated"] = bool(field.deprecated) return result diff --git a/setup/base_field_deprecated/odoo/addons/base_field_deprecated b/setup/base_field_deprecated/odoo/addons/base_field_deprecated new file mode 120000 index 0000000000..d2915f0aac --- /dev/null +++ b/setup/base_field_deprecated/odoo/addons/base_field_deprecated @@ -0,0 +1 @@ +../../../../base_field_deprecated \ No newline at end of file diff --git a/setup/base_field_deprecated/setup.py b/setup/base_field_deprecated/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/base_field_deprecated/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)