From 8d9158e021a8f4fb83efed7c8e4dca9948286499 Mon Sep 17 00:00:00 2001 From: Ilyas Date: Mon, 2 Oct 2023 11:03:45 +0200 Subject: [PATCH] [FIX] web_field_required_invisible_manager: regenerate rest. field --- .../models/custom_field_restriction.py | 20 ++++++++++++++++--- ...st_web_field_required_invisible_manager.py | 15 +++++--------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/web_field_required_invisible_manager/models/custom_field_restriction.py b/web_field_required_invisible_manager/models/custom_field_restriction.py index b924f1e9e..5cced2eb4 100644 --- a/web_field_required_invisible_manager/models/custom_field_restriction.py +++ b/web_field_required_invisible_manager/models/custom_field_restriction.py @@ -49,9 +49,9 @@ class CustomFieldRestriction(models.Model): field_invisible = fields.Boolean() field_readonly = fields.Boolean() # generated technical fields used in form attrs: - visibility_field_id = fields.Many2one("ir.model.fields", ondelete="cascade") - readonly_field_id = fields.Many2one("ir.model.fields", ondelete="cascade") - required_field_id = fields.Many2one("ir.model.fields", ondelete="cascade") + visibility_field_id = fields.Many2one("ir.model.fields") + readonly_field_id = fields.Many2one("ir.model.fields") + required_field_id = fields.Many2one("ir.model.fields") @api.onchange("field_id") def onchange_field_id(self): @@ -84,6 +84,20 @@ class CustomFieldRestriction(models.Model): rec.create_restriction_field("required") return rec + def write(self, vals): + res = super().write(vals) + if vals.get("field_id"): + if self.visibility_field_id: + self.visibility_field_id.unlink() + self.create_restriction_field("visibility") + elif self.readonly_field_id: + self.readonly_field_id.unlink() + self.create_restriction_field("readonly") + elif self.required_field_id: + self.required_field_id.unlink() + self.create_restriction_field("required") + return res + def create_restriction_field(self, f_type): field_name = self.get_field_name(f_type) field_id = self.env["ir.model.fields"].search([("name", "=", field_name)]) diff --git a/web_field_required_invisible_manager/tests/test_web_field_required_invisible_manager.py b/web_field_required_invisible_manager/tests/test_web_field_required_invisible_manager.py index 1e9bb3235..b378690db 100644 --- a/web_field_required_invisible_manager/tests/test_web_field_required_invisible_manager.py +++ b/web_field_required_invisible_manager/tests/test_web_field_required_invisible_manager.py @@ -73,11 +73,6 @@ class TestFieldRequiredIvisibleManager(common.SavepointCase): self.assertTrue(self.invisible_rec_id.visibility_field_id) self.assertTrue(self.required_rec_id.required_field_id) self.assertTrue(self.readonly_rec_id.readonly_field_id) - # onchange_field_id() - self.assertFalse(self.invisible_title_rec_id.required) - self.invisible_title_rec_id.field_id = self.partner_title_name_field_id - self.invisible_title_rec_id.onchange_field_id() - self.assertTrue(self.invisible_title_rec_id.required) # _compute_model_name() self.invisible_rec_id._compute_model_name() self.assertEqual(self.invisible_rec_id.model_name, "res.partner") @@ -125,13 +120,13 @@ class TestFieldRequiredIvisibleManager(common.SavepointCase): self.deco_addict.invalidate_cache() self.deco_addict.read(["x_computed_res_partner_name_visibility"]) self.assertTrue(self.deco_addict.x_computed_res_partner_name_visibility) - # unlink - field_name = self.invisible_title_rec_id.get_field_name("visibility") - self.invisible_title_rec_id.unlink() - field_id = self.env["ir.model.fields"].search([("name", "=", field_name)]) - self.assertFalse(field_id) # default get self.env["res.partner"].default_get(["name"]) self.env["res.partner"].default_get(["city"]) self.env["res.partner.title"].default_get(["name"]) self.env["res.partner.title"].default_get(["shortcut"]) + # onchange_field_id() + self.assertFalse(self.invisible_title_rec_id.required) + self.invisible_title_rec_id.field_id = self.partner_title_name_field_id + self.invisible_title_rec_id.onchange_field_id() + self.assertTrue(self.invisible_title_rec_id.required)