Merge PR #2632 into 14.0

Signed-off-by ilyasProgrammer
pull/2633/head
OCA-git-bot 2023-10-02 16:39:03 +00:00
commit 796b1f1eb8
2 changed files with 22 additions and 13 deletions

View File

@ -49,9 +49,9 @@ class CustomFieldRestriction(models.Model):
field_invisible = fields.Boolean() field_invisible = fields.Boolean()
field_readonly = fields.Boolean() field_readonly = fields.Boolean()
# generated technical fields used in form attrs: # generated technical fields used in form attrs:
visibility_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", ondelete="cascade") readonly_field_id = fields.Many2one("ir.model.fields")
required_field_id = fields.Many2one("ir.model.fields", ondelete="cascade") required_field_id = fields.Many2one("ir.model.fields")
@api.onchange("field_id") @api.onchange("field_id")
def onchange_field_id(self): def onchange_field_id(self):
@ -84,6 +84,20 @@ class CustomFieldRestriction(models.Model):
rec.create_restriction_field("required") rec.create_restriction_field("required")
return rec 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): def create_restriction_field(self, f_type):
field_name = self.get_field_name(f_type) field_name = self.get_field_name(f_type)
field_id = self.env["ir.model.fields"].search([("name", "=", field_name)]) field_id = self.env["ir.model.fields"].search([("name", "=", field_name)])

View File

@ -73,11 +73,6 @@ class TestFieldRequiredIvisibleManager(common.SavepointCase):
self.assertTrue(self.invisible_rec_id.visibility_field_id) self.assertTrue(self.invisible_rec_id.visibility_field_id)
self.assertTrue(self.required_rec_id.required_field_id) self.assertTrue(self.required_rec_id.required_field_id)
self.assertTrue(self.readonly_rec_id.readonly_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() # _compute_model_name()
self.invisible_rec_id._compute_model_name() self.invisible_rec_id._compute_model_name()
self.assertEqual(self.invisible_rec_id.model_name, "res.partner") 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.invalidate_cache()
self.deco_addict.read(["x_computed_res_partner_name_visibility"]) self.deco_addict.read(["x_computed_res_partner_name_visibility"])
self.assertTrue(self.deco_addict.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 # default get
self.env["res.partner"].default_get(["name"]) self.env["res.partner"].default_get(["name"])
self.env["res.partner"].default_get(["city"]) self.env["res.partner"].default_get(["city"])
self.env["res.partner.title"].default_get(["name"]) self.env["res.partner.title"].default_get(["name"])
self.env["res.partner.title"].default_get(["shortcut"]) 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)