@@ -121,13 +121,13 @@ def get_user_page_or_report(parent): | |||
has_role[p.name] = {"modified":p.modified, "title": p.title} | |||
# pages or reports where role is not set are also allowed | |||
for p in frappe.db.sql("""select name, modified, {field} as title | |||
from `tab{parent}` where | |||
(select count(*) from `tabHas Role` | |||
where `tabHas Role`.parent=tab{parent}.name) = 0""".format(parent=parent, field=field), as_dict=1): | |||
# pages or reports where role is not set are also allowed | |||
for p in frappe.db.sql("""select name, modified, {field} as title | |||
from `tab{parent}` where | |||
(select count(*) from `tabHas Role` | |||
where `tabHas Role`.parent=tab{parent}.name) = 0""".format(parent=parent, field=field), as_dict=1): | |||
has_role[p.name] = {"modified":p.modified, "title": p.title} | |||
has_role[p.name] = {"modified":p.modified, "title": p.title} | |||
return has_role | |||
@@ -5,16 +5,30 @@ frappe.ui.form.on('Role Permission for Page and Report', { | |||
refresh: function(frm) { | |||
frm.disable_save(); | |||
frm.role_area.hide(); | |||
frm.add_custom_button(__("Reset to defaults"), | |||
function(){ frm.trigger("reset_roles") }); | |||
frm.add_custom_button(__("Update"), | |||
function(){ frm.trigger("update_roles") }).addClass('btn-primary'); | |||
}, | |||
onload: function(frm) { | |||
if(!frm.roles_editor) { | |||
frm.role_area = $('<div style="min-height: 300px">') | |||
.appendTo(frm.fields_dict.roles_html.wrapper); | |||
frm.roles_editor = new frappe.RoleEditor(frm.role_area); | |||
frm.roles_editor = new frappe.RoleEditor(frm.role_area, frm); | |||
} | |||
}, | |||
set_role_for: function(frm) { | |||
frm.trigger("clear_fields") | |||
frm.toggle_display('roles_html', false) | |||
}, | |||
clear_fields: function(frm) { | |||
field = (frm.doc.set_role_for == 'Report') ? 'page' : 'report'; | |||
frm.set_value(field, '') | |||
}, | |||
page: function(frm) { | |||
frm.trigger("get_roles") | |||
}, | |||
@@ -24,9 +38,10 @@ frappe.ui.form.on('Role Permission for Page and Report', { | |||
}, | |||
get_roles: function(frm) { | |||
frm.toggle_display('roles_html', true) | |||
frm.role_area.show(); | |||
return frappe.call({ | |||
return frm.call({ | |||
method:"get_custom_roles", | |||
doc: frm.doc, | |||
callback: function(r) { | |||
@@ -36,20 +51,43 @@ frappe.ui.form.on('Role Permission for Page and Report', { | |||
}) | |||
}, | |||
update: function(frm) { | |||
update_roles: function(frm) { | |||
frm.trigger("validate_mandatory_fields") | |||
if(frm.roles_editor) { | |||
frm.roles_editor.set_roles_in_table() | |||
} | |||
return frappe.call({ | |||
return frm.call({ | |||
method:"set_custom_roles", | |||
doc: frm.doc, | |||
callback: function(r) { | |||
refresh_field('roles') | |||
frm.roles_editor.show() | |||
frappe.msgprint(__("Successfully Updated")) | |||
frm.reload_doc() | |||
} | |||
}) | |||
}, | |||
reset_roles: function(frm) { | |||
frm.trigger("validate_mandatory_fields") | |||
return frm.call({ | |||
method:"reset_roles", | |||
doc: frm.doc, | |||
callback: function(r) { | |||
refresh_field('roles') | |||
frm.roles_editor.show() | |||
frappe.msgprint(__("Successfully Updated")) | |||
} | |||
}) | |||
}, | |||
validate_mandatory_fields: function(frm) { | |||
if(!frm.doc.set_role_for){ | |||
frappe.throw(__("Mandatory field: set role for")) | |||
} | |||
if(frm.doc.set_role_for && !frm.doc[frm.doc.set_role_for.toLocaleLowerCase()]) { | |||
frappe.throw(__("Mandatory field: {0}", [frm.doc.set_role_for])) | |||
} | |||
} | |||
}); |
@@ -1,5 +1,6 @@ | |||
{ | |||
"allow_copy": 1, | |||
"allow_guest_to_view": 0, | |||
"allow_import": 0, | |||
"allow_rename": 0, | |||
"beta": 0, | |||
@@ -36,7 +37,7 @@ | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 0, | |||
"reqd": 1, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"unique": 0 | |||
@@ -191,77 +192,19 @@ | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "section_break_8", | |||
"fieldtype": "Section Break", | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 0, | |||
"precision": "", | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 0, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "update", | |||
"fieldtype": "Button", | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Update", | |||
"length": 0, | |||
"no_copy": 0, | |||
"options": "", | |||
"permlevel": 0, | |||
"precision": "", | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 0, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"unique": 0 | |||
} | |||
], | |||
"has_web_view": 0, | |||
"hide_heading": 0, | |||
"hide_toolbar": 1, | |||
"idx": 0, | |||
"image_view": 0, | |||
"in_create": 0, | |||
"in_dialog": 0, | |||
"is_submittable": 0, | |||
"issingle": 1, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2017-03-02 16:06:16.295111", | |||
"modified": "2017-03-11 02:35:32.369043", | |||
"modified_by": "Administrator", | |||
"module": "Core", | |||
"name": "Role Permission for Page and Report", | |||
@@ -14,12 +14,22 @@ class RolePermissionforPageandReport(Document): | |||
name = frappe.db.get_value('Custom Role', args, "name") | |||
if name: | |||
doc = frappe.get_doc('Custom Role', name) | |||
roles = doc.roles | |||
else: | |||
doctype = self.set_role_for | |||
docname = self.page if self.set_role_for == 'Page' else self.report | |||
doc = frappe.get_doc(doctype, docname) | |||
roles = self.get_standard_roles() | |||
self.set('roles', doc.roles) | |||
self.set('roles', roles) | |||
def get_standard_roles(self): | |||
doctype = self.set_role_for | |||
docname = self.page if self.set_role_for == 'Page' else self.report | |||
doc = frappe.get_doc(doctype, docname) | |||
return doc.roles | |||
def reset_roles(self): | |||
roles = self.get_standard_roles() | |||
self.set('roles', roles) | |||
self.set_custom_roles() | |||
def set_custom_roles(self): | |||
args = self.get_args() | |||
@@ -27,13 +37,13 @@ class RolePermissionforPageandReport(Document): | |||
args.update({ | |||
'doctype': 'Custom Role', | |||
'roles': self.roles | |||
'roles': self.get_roles() | |||
}) | |||
if name: | |||
doc = frappe.get_doc("Custom Role", name) | |||
doc.set('roles', self.roles) | |||
doc.save() | |||
custom_role = frappe.get_doc("Custom Role", name) | |||
custom_role.set('roles', self.get_roles()) | |||
custom_role.save() | |||
else: | |||
frappe.get_doc(args).insert() | |||
@@ -45,5 +55,14 @@ class RolePermissionforPageandReport(Document): | |||
check_for_field: name | |||
} | |||
def get_roles(self): | |||
roles = [] | |||
for data in self.roles: | |||
roles.append({ | |||
'role': data.role, | |||
'parenttype': 'Custom Role' | |||
}) | |||
return roles | |||
def update_status(self): | |||
return frappe.render_template |
@@ -22,7 +22,7 @@ frappe.ui.form.on('User', { | |||
if(!frm.roles_editor) { | |||
var role_area = $('<div style="min-height: 300px">') | |||
.appendTo(frm.fields_dict.roles_html.wrapper); | |||
frm.roles_editor = new frappe.RoleEditor(role_area); | |||
frm.roles_editor = new frappe.RoleEditor(role_area, frm); | |||
var module_area = $('<div style="min-height: 300px">') | |||
.appendTo(frm.fields_dict.modules_html.wrapper); | |||
@@ -1,6 +1,7 @@ | |||
frappe.RoleEditor = Class.extend({ | |||
init: function(wrapper) { | |||
init: function(wrapper, frm) { | |||
var me = this; | |||
this.frm = frm; | |||
this.wrapper = wrapper; | |||
$(wrapper).html('<div class="help">' + __("Loading") + '...</div>') | |||
return frappe.call({ | |||
@@ -11,8 +12,8 @@ frappe.RoleEditor = Class.extend({ | |||
// refresh call could've already happened | |||
// when all role checkboxes weren't created | |||
if(cur_frm.doc) { | |||
cur_frm.roles_editor.show(); | |||
if(me.frm.doc) { | |||
me.frm.roles_editor.show(); | |||
} | |||
} | |||
}); | |||
@@ -53,7 +54,7 @@ frappe.RoleEditor = Class.extend({ | |||
$(this.wrapper).find('input[type="checkbox"]').change(function() { | |||
me.set_roles_in_table(); | |||
cur_frm.dirty(); | |||
me.frm.dirty(); | |||
}); | |||
$(this.wrapper).find('.user-role a').click(function() { | |||
me.show_permissions($(this).parent().attr('data-user-role')) | |||
@@ -68,7 +69,7 @@ frappe.RoleEditor = Class.extend({ | |||
.each(function(i, checkbox) { checkbox.checked = false; }); | |||
// set user roles as checked | |||
$.each((cur_frm.doc.roles || []), function(i, user_role) { | |||
$.each((me.frm.doc.roles || []), function(i, user_role) { | |||
var checkbox = $(me.wrapper) | |||
.find('[data-user-role="'+user_role.role+'"] input[type="checkbox"]').get(0); | |||
if(checkbox) checkbox.checked = true; | |||
@@ -78,8 +79,9 @@ frappe.RoleEditor = Class.extend({ | |||
var opts = this.get_roles(); | |||
var existing_roles_map = {}; | |||
var existing_roles_list = []; | |||
var me = this; | |||
$.each((cur_frm.doc.roles || []), function(i, user_role) { | |||
$.each((me.frm.doc.roles || []), function(i, user_role) { | |||
existing_roles_map[user_role.role] = user_role.name; | |||
existing_roles_list.push(user_role.role); | |||
}); | |||
@@ -94,7 +96,7 @@ frappe.RoleEditor = Class.extend({ | |||
// add new roles that are checked | |||
$.each(opts.checked_roles, function(i, role) { | |||
if(existing_roles_list.indexOf(role)==-1) { | |||
var user_role = frappe.model.add_child(cur_frm.doc, "Has Role", "roles"); | |||
var user_role = frappe.model.add_child(me.frm.doc, "Has Role", "roles"); | |||
user_role.role = role; | |||
} | |||
}); | |||