forked from Techsystech/web
[IMP] web_field_required_invisible_manager: added menus and views
parent
e54255e7d0
commit
d133a881b1
|
@ -22,19 +22,19 @@ class CustomFieldRestriction(models.Model):
|
|||
required_model_id = fields.Many2one(
|
||||
"ir.model",
|
||||
ondelete="cascade",
|
||||
string="required_model_id",
|
||||
string="Model (required)",
|
||||
index=True,
|
||||
)
|
||||
invisible_model_id = fields.Many2one(
|
||||
"ir.model",
|
||||
ondelete="cascade",
|
||||
string="invisible_model_id",
|
||||
string="Model (visibility)",
|
||||
index=True,
|
||||
)
|
||||
readonly_model_id = fields.Many2one(
|
||||
"ir.model",
|
||||
ondelete="cascade",
|
||||
string="readonly_model_id",
|
||||
string="Model (readonly)",
|
||||
index=True,
|
||||
)
|
||||
model_name = fields.Char(
|
||||
|
@ -45,7 +45,9 @@ class CustomFieldRestriction(models.Model):
|
|||
)
|
||||
condition_domain = fields.Char()
|
||||
group_ids = fields.Many2many("res.groups", required=True)
|
||||
default_required = fields.Boolean(related="field_id.required")
|
||||
default_required = fields.Boolean(
|
||||
related="field_id.required", string="Required by Default"
|
||||
)
|
||||
required = fields.Boolean()
|
||||
field_invisible = fields.Boolean()
|
||||
field_readonly = fields.Boolean()
|
||||
|
@ -56,11 +58,7 @@ class CustomFieldRestriction(models.Model):
|
|||
|
||||
@api.onchange("field_id")
|
||||
def onchange_field_id(self):
|
||||
vals = {
|
||||
"required": self.field_id.required,
|
||||
"field_invisible": False,
|
||||
"field_readonly": self.field_id.readonly,
|
||||
}
|
||||
vals = {}
|
||||
if self.env.context.get("default_readonly_model_id"):
|
||||
vals["readonly_model_id"] = (
|
||||
self.env["ir.model"]
|
||||
|
@ -86,10 +84,13 @@ class CustomFieldRestriction(models.Model):
|
|||
for rec in self:
|
||||
if rec.required_model_id:
|
||||
rec.model_name = rec.required_model_id.model
|
||||
rec.required = True
|
||||
elif rec.invisible_model_id:
|
||||
rec.model_name = rec.invisible_model_id.model
|
||||
rec.field_invisible = True
|
||||
elif rec.readonly_model_id:
|
||||
rec.model_name = rec.readonly_model_id.model
|
||||
rec.field_readonly = True
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
|
|
|
@ -215,7 +215,8 @@ class TestFieldRequiredIvisibleManager(common.SavepointCase):
|
|||
# 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.invisible_title_rec_id.required_model_id = self.partner_model_id
|
||||
self.invisible_title_rec_id._compute_model_name()
|
||||
self.assertTrue(self.invisible_title_rec_id.required)
|
||||
# unlink
|
||||
self.invisible_rec_id.unlink()
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<odoo>
|
||||
|
||||
<!-- Inherited Views -->
|
||||
<record id="view_model_form_inherit" model="ir.ui.view">
|
||||
<field name="name">view.model.form.inherit</field>
|
||||
<field name="model">ir.model</field>
|
||||
|
@ -13,7 +13,7 @@
|
|||
<field
|
||||
name="custom_required_restriction_ids"
|
||||
nolabel="1"
|
||||
context="{'default_required_model_id': model}"
|
||||
context="{'default_required_model_id': model, 'show_required_form': True}"
|
||||
>
|
||||
<tree>
|
||||
<field name="required_model_id" invisible="1" />
|
||||
|
@ -43,7 +43,7 @@
|
|||
<field
|
||||
name="custom_invisible_restriction_ids"
|
||||
nolabel="1"
|
||||
context="{'default_invisible_model_id': model}"
|
||||
context="{'default_invisible_model_id': model, 'show_invisible_form': True}"
|
||||
>
|
||||
<tree>
|
||||
<field name="required_model_id" invisible="1" />
|
||||
|
@ -70,7 +70,7 @@
|
|||
<field
|
||||
name="custom_readonly_restriction_ids"
|
||||
nolabel="1"
|
||||
context="{'default_readonly_model_id': model}"
|
||||
context="{'default_readonly_model_id': model, 'show_readonly_form': True}"
|
||||
>
|
||||
<tree>
|
||||
<field name="required_model_id" invisible="1" />
|
||||
|
@ -95,49 +95,241 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_custom_field_restriction_form" model="ir.ui.view">
|
||||
<field name="name">custom.field.restriction.form.view</field>
|
||||
<!-- New Views -->
|
||||
<record id="cfr_all_view_form" model="ir.ui.view">
|
||||
<field name="name">custom.field.restriction.all.view.form</field>
|
||||
<field name="model">custom.field.restriction</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<group><group>
|
||||
|
||||
<field name="required_model_id" invisible="1" />
|
||||
<field name="invisible_model_id" invisible="1" />
|
||||
<field name="readonly_model_id" invisible="1" />
|
||||
<field name="model_name" invisible="1" />
|
||||
<div invisible="context.get('hide_title', False)">
|
||||
<h2 invisible="not context.get('show_required_form', False)">
|
||||
Required Field Rule</h2>
|
||||
<h2 invisible="not context.get('show_invisible_form', False)">
|
||||
Invisible Field Rule</h2>
|
||||
<h2 invisible="not context.get('show_readonly_form', False)">
|
||||
Readonly Field Rule</h2>
|
||||
</div>
|
||||
<group>
|
||||
<group
|
||||
attrs="{'invisible': ['|', ('required_model_id', '!=', False), ('readonly_model_id', '!=', False)]}"
|
||||
invisible="not context.get('show_invisible_form', False)"
|
||||
>
|
||||
<field
|
||||
name="invisible_model_id"
|
||||
required="context.get('show_invisible_form', False)"
|
||||
/>
|
||||
<field name="field_invisible" />
|
||||
<field name="visibility_field_id" readonly="1" />
|
||||
</group>
|
||||
<group
|
||||
attrs="{'invisible': ['|', ('invisible_model_id', '!=', False), ('readonly_model_id', '!=', False)]}"
|
||||
invisible="not context.get('show_required_form', False)"
|
||||
>
|
||||
<field
|
||||
name="required_model_id"
|
||||
required="context.get('show_required_form', False)"
|
||||
/>
|
||||
<field name="default_required" readonly="1" />
|
||||
<field
|
||||
name="required"
|
||||
attrs="{'readonly':[('default_required', '=', True)]}"
|
||||
/>
|
||||
<field name="required_field_id" readonly="1" />
|
||||
</group>
|
||||
<group
|
||||
attrs="{'invisible': ['|', ('required_model_id', '!=', False), ('invisible_model_id', '!=', False)]}"
|
||||
invisible="not context.get('show_readonly_form', False)"
|
||||
>
|
||||
<field
|
||||
name="readonly_model_id"
|
||||
required="context.get('show_readonly_form', False)"
|
||||
/>
|
||||
<field name="field_readonly" />
|
||||
<field name="readonly_field_id" readonly="1" />
|
||||
</group>
|
||||
<group>
|
||||
<field
|
||||
name="field_id"
|
||||
context="{'search_by_technical_name': True, 'display_technical_name': True}"
|
||||
domain="[('model_id.model', '=', model_name)]"
|
||||
options="{'create': False, 'create_edit': False}"
|
||||
/>
|
||||
<field name="default_required" invisible="1" />
|
||||
<field
|
||||
name="required"
|
||||
attrs="{'readonly':[('default_required', '=', True)],
|
||||
'invisible':[('required_model_id', '=', False)]}"
|
||||
/>
|
||||
<field
|
||||
name="field_invisible"
|
||||
attrs="{'invisible':[('invisible_model_id', '=', False)]}"
|
||||
/>
|
||||
<field
|
||||
name="field_readonly"
|
||||
attrs="{'invisible':[('readonly_model_id', '=', False)]}"
|
||||
/>
|
||||
<field name="field_name" />
|
||||
<field name="model_name" />
|
||||
<field name="group_ids" widget="many2many_tags" />
|
||||
<field
|
||||
name="condition_domain"
|
||||
widget="domain"
|
||||
options="{'model': 'model_name', 'in_dialog': True}"
|
||||
/>
|
||||
<field name="group_ids" widget="many2many_tags" />
|
||||
</group></group>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="cfr_required_view_tree" model="ir.ui.view">
|
||||
<field name="name">custom.field.restriction.required.view.tree</field>
|
||||
<field name="model">custom.field.restriction</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="field_id" />
|
||||
<field name="field_name" />
|
||||
<field name="required_model_id" />
|
||||
<field name="model_name" />
|
||||
<field name="group_ids" widget="many2many_tags" />
|
||||
<field name="condition_domain" />
|
||||
<field name="default_required" />
|
||||
<field name="required" />
|
||||
<field name="required_field_id" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="cfr_invisible_view_tree" model="ir.ui.view">
|
||||
<field name="name">custom.field.restriction.invisible.view.tree</field>
|
||||
<field name="model">custom.field.restriction</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="field_id" />
|
||||
<field name="field_name" />
|
||||
<field name="invisible_model_id" />
|
||||
<field name="model_name" />
|
||||
<field name="condition_domain" />
|
||||
<field name="group_ids" widget="many2many_tags" />
|
||||
<field name="field_invisible" />
|
||||
<field name="visibility_field_id" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="cfr_readonly_view_tree" model="ir.ui.view">
|
||||
<field name="name">custom.field.restriction.readonly.view.tree</field>
|
||||
<field name="model">custom.field.restriction</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="field_id" />
|
||||
<field name="field_name" />
|
||||
<field name="readonly_model_id" />
|
||||
<field name="model_name" />
|
||||
<field name="condition_domain" />
|
||||
<field name="group_ids" widget="many2many_tags" />
|
||||
<field name="field_readonly" />
|
||||
<field name="readonly_field_id" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="cfr_all_view_tree" model="ir.ui.view">
|
||||
<field name="name">custom.field.restriction.all.view.tree</field>
|
||||
<field name="model">custom.field.restriction</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="field_id" />
|
||||
<field name="field_name" />
|
||||
<field name="invisible_model_id" />
|
||||
<field name="required_model_id" />
|
||||
<field name="readonly_model_id" />
|
||||
<field name="model_name" />
|
||||
<field name="condition_domain" />
|
||||
<field name="group_ids" widget="many2many_tags" />
|
||||
<field name="default_required" />
|
||||
<field name="required" />
|
||||
<field name="required_field_id" />
|
||||
<field name="field_readonly" />
|
||||
<field name="readonly_field_id" />
|
||||
<field name="field_invisible" />
|
||||
<field name="visibility_field_id" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Actions -->
|
||||
<record id="action_field_manager_required_view_tree" model="ir.actions.act_window">
|
||||
<field name="name">Required Fields</field>
|
||||
<field name="res_model">custom.field.restriction</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('required', '=', True)]</field>
|
||||
<field name="context">{'show_required_form': True}</field>
|
||||
<field
|
||||
name="view_id"
|
||||
ref="web_field_required_invisible_manager.cfr_required_view_tree"
|
||||
/>
|
||||
</record>
|
||||
|
||||
<record id="action_cfr_invisible_view_tree" model="ir.actions.act_window">
|
||||
<field name="name">Invisible Fields</field>
|
||||
<field name="res_model">custom.field.restriction</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('field_invisible', '=', True)]</field>
|
||||
<field name="context">{'show_invisible_form': True}</field>
|
||||
<field
|
||||
name="view_id"
|
||||
ref="web_field_required_invisible_manager.cfr_invisible_view_tree"
|
||||
/>
|
||||
</record>
|
||||
|
||||
<record id="action_cfr_readonly_view_tree" model="ir.actions.act_window">
|
||||
<field name="name">Readonly Fields</field>
|
||||
<field name="res_model">custom.field.restriction</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('field_readonly', '=', True)]</field>
|
||||
<field name="context">{'show_readonly_form': True}</field>
|
||||
<field
|
||||
name="view_id"
|
||||
ref="web_field_required_invisible_manager.cfr_readonly_view_tree"
|
||||
/>
|
||||
</record>
|
||||
|
||||
<record id="action_cfr_all_view_tree" model="ir.actions.act_window">
|
||||
<field name="name">All Fields Restrictions</field>
|
||||
<field name="res_model">custom.field.restriction</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field
|
||||
name="context"
|
||||
>{'show_readonly_form': True, 'show_invisible_form': True, 'show_required_form': True, 'hide_title': True}</field>
|
||||
<field
|
||||
name="view_id"
|
||||
ref="web_field_required_invisible_manager.cfr_all_view_tree"
|
||||
/>
|
||||
</record>
|
||||
|
||||
<!-- Menus -->
|
||||
<menuitem
|
||||
id="menu_field_manager_config"
|
||||
parent="base.next_id_9"
|
||||
sequence="3"
|
||||
name="Fields Restrictions"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
id="menu_field_manager_required"
|
||||
parent="menu_field_manager_config"
|
||||
sequence="20"
|
||||
action="action_field_manager_required_view_tree"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
id="menu_field_manager_invisible"
|
||||
parent="menu_field_manager_config"
|
||||
sequence="21"
|
||||
action="action_cfr_invisible_view_tree"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
id="menu_field_manager_readonly"
|
||||
parent="menu_field_manager_config"
|
||||
sequence="22"
|
||||
action="action_cfr_readonly_view_tree"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
id="menu_field_manager_all"
|
||||
parent="menu_field_manager_config"
|
||||
sequence="23"
|
||||
action="action_cfr_all_view_tree"
|
||||
/>
|
||||
|
||||
</odoo>
|
||||
|
|
Loading…
Reference in New Issue