web/web_field_required_invisibl.../models/custom_field_restriction.py

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