feat: add mandatory_depends_on and read_only_depends_on to docfield
This commit is contained in:
parent
af67d81b7b
commit
1026800ee0
6 changed files with 168 additions and 1408 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -905,7 +905,7 @@ def validate_fields(meta):
|
|||
|
||||
def check_illegal_depends_on_conditions(docfield):
|
||||
''' assignment operation should not be allowed in the depends on condition.'''
|
||||
depends_on_fields = ["depends_on", "collapsible_depends_on"]
|
||||
depends_on_fields = ["depends_on", "collapsible_depends_on", "mandatory_depends_on", "read_only_depends_on"]
|
||||
for field in depends_on_fields:
|
||||
depends_on = docfield.get(field, None)
|
||||
if depends_on and ("=" in depends_on) and \
|
||||
|
|
|
|||
|
|
@ -96,14 +96,19 @@ class TestDocType(unittest.TestCase):
|
|||
def test_all_depends_on_fields_conditions(self):
|
||||
import re
|
||||
|
||||
docfields = frappe.get_all("DocField", or_filters={
|
||||
docfields = frappe.get_all("DocField",
|
||||
or_filters={
|
||||
"ifnull(depends_on, '')": ("!=", ''),
|
||||
"ifnull(collapsible_depends_on, '')": ("!=", '')
|
||||
}, fields=["parent", "depends_on", "collapsible_depends_on", "fieldname", "fieldtype"])
|
||||
"ifnull(collapsible_depends_on, '')": ("!=", ''),
|
||||
"ifnull(mandatory_depends_on, '')": ("!=", ''),
|
||||
"ifnull(read_only_depends_on, '')": ("!=", '')
|
||||
},
|
||||
fields=["parent", "depends_on", "collapsible_depends_on", "mandatory_depends_on",\
|
||||
"read_only_depends_on", "fieldname", "fieldtype"])
|
||||
|
||||
pattern = """[\w\.:_]+\s*={1}\s*[\w\.@'"]+"""
|
||||
for field in docfields:
|
||||
for depends_on in ["depends_on", "collapsible_depends_on"]:
|
||||
for depends_on in ["depends_on", "collapsible_depends_on", "mandatory_depends_on", "read_only_depends_on"]:
|
||||
condition = field.get(depends_on)
|
||||
if condition:
|
||||
self.assertFalse(re.match(pattern, condition))
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@ CREATE TABLE `tabDocField` (
|
|||
`show_preview_popup` int(1) NOT NULL DEFAULT 0,
|
||||
`trigger` varchar(255) DEFAULT NULL,
|
||||
`collapsible_depends_on` text,
|
||||
`mandatory_depends_on` text,
|
||||
`read_only_depends_on` text,
|
||||
`depends_on` text,
|
||||
`permlevel` int(11) NOT NULL DEFAULT 0,
|
||||
`ignore_user_permissions` int(1) NOT NULL DEFAULT 0,
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@ CREATE TABLE "tabDocField" (
|
|||
"show_preview_popup" smallint NOT NULL DEFAULT 0,
|
||||
"trigger" varchar(255) DEFAULT NULL,
|
||||
"collapsible_depends_on" text,
|
||||
"mandatory_depends_on" text,
|
||||
"read_only_depends_on" text,
|
||||
"depends_on" text,
|
||||
"permlevel" bigint NOT NULL DEFAULT 0,
|
||||
"ignore_user_permissions" smallint NOT NULL DEFAULT 0,
|
||||
|
|
|
|||
|
|
@ -454,7 +454,7 @@ frappe.ui.form.Layout = Class.extend({
|
|||
for(var fkey in this.fields_list) {
|
||||
var f = this.fields_list[fkey];
|
||||
f.dependencies_clear = true;
|
||||
if(f.df.depends_on) {
|
||||
if(f.df.depends_on || f.df.mandatory_depends_on || f.df.read_only_depends_on) {
|
||||
has_dep = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -483,10 +483,26 @@ frappe.ui.form.Layout = Class.extend({
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(f.df.mandatory_depends_on) {
|
||||
this.set_dependant_property(f.df.mandatory_depends_on, f.df.fieldname, 'reqd');
|
||||
}
|
||||
|
||||
if(f.df.read_only_depends_on) {
|
||||
this.set_dependant_property(f.df.read_only_depends_on, f.df.fieldname, 'read_only');
|
||||
}
|
||||
}
|
||||
|
||||
this.refresh_section_count();
|
||||
},
|
||||
set_dependant_property: function(condition, fieldname, property) {
|
||||
let set_property = this.evaluate_depends_on_value(condition);
|
||||
if (set_property) {
|
||||
this.frm.set_df_property(fieldname, property, 1);
|
||||
} else {
|
||||
this.frm.set_df_property(fieldname, property, 0);
|
||||
}
|
||||
},
|
||||
evaluate_depends_on_value: function(expression) {
|
||||
var out = null;
|
||||
var doc = this.doc;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue