mirror of https://github.com/OCA/web.git
59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
# Copyright 2020 ooops404
|
|
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class CustomFieldRestriction(models.Model):
|
|
_name = "custom.field.restriction"
|
|
_description = "Make field invisible or required"
|
|
|
|
field_id = fields.Many2one(
|
|
"ir.model.fields",
|
|
ondelete="cascade",
|
|
required=True,
|
|
string="Field",
|
|
)
|
|
|
|
field_name = fields.Char(
|
|
related="field_id.name",
|
|
store=True,
|
|
string="Field Name",
|
|
)
|
|
|
|
required_model_id = fields.Many2one(
|
|
"ir.model",
|
|
ondelete="cascade",
|
|
string="required_model_id",
|
|
index=True,
|
|
)
|
|
invisible_model_id = fields.Many2one(
|
|
"ir.model",
|
|
ondelete="cascade",
|
|
string="invisible_model_id",
|
|
index=True,
|
|
)
|
|
|
|
model_name = fields.Char(
|
|
compute="_compute_model_name",
|
|
store=True,
|
|
string="Model Name",
|
|
index=True,
|
|
)
|
|
condition_domain = fields.Char()
|
|
group_ids = fields.Many2many("res.groups", required=True)
|
|
required = fields.Boolean()
|
|
default_required = fields.Boolean(related="field_id.required")
|
|
field_invisible = fields.Boolean()
|
|
|
|
@api.onchange("field_id")
|
|
def onchange_field_id(self):
|
|
self.required = self.field_id.required
|
|
|
|
@api.depends("required_model_id", "invisible_model_id")
|
|
def _compute_model_name(self):
|
|
for rec in self:
|
|
if rec.required_model_id:
|
|
rec.model_name = rec.required_model_id.model
|
|
elif rec.invisible_model_id:
|
|
rec.model_name = rec.invisible_model_id.model
|