Sidebar reports fixedversion-14
@@ -99,35 +99,46 @@ def get_allowed_reports(): | |||||
def get_user_page_or_report(parent): | def get_user_page_or_report(parent): | ||||
roles = frappe.get_roles() | roles = frappe.get_roles() | ||||
has_role = {} | has_role = {} | ||||
field = "title" if parent == 'Page' else "name" | |||||
column = get_column(parent) | |||||
# get pages or reports set on custom role | # get pages or reports set on custom role | ||||
for p in frappe.db.sql("""select `tabCustom Role`.{field} as name, `tabCustom Role`.modified | |||||
for p in frappe.db.sql("""select `tabCustom Role`.{field} as name, `tabCustom Role`.modified, `tabCustom Role`.ref_doctype | |||||
from `tabCustom Role`, `tabHas Role` where | from `tabCustom Role`, `tabHas Role` where | ||||
`tabHas Role`.parent = `tabCustom Role`.name and | `tabHas Role`.parent = `tabCustom Role`.name and | ||||
`tabCustom Role`.{field} is not null and `tabHas Role`.role in ({roles}) | `tabCustom Role`.{field} is not null and `tabHas Role`.role in ({roles}) | ||||
""".format(field=parent.lower(), roles = ', '.join(['%s']*len(roles))), roles, as_dict=1): | """.format(field=parent.lower(), roles = ', '.join(['%s']*len(roles))), roles, as_dict=1): | ||||
has_role[p.name] = {"modified":p.modified, "title": p.name} | |||||
has_role[p.name] = {"modified":p.modified, "title": p.name, "ref_doctype": p.ref_doctype} | |||||
for p in frappe.db.sql("""select distinct | for p in frappe.db.sql("""select distinct | ||||
tab{parent}.name, tab{parent}.modified, tab{parent}.{field} as title | |||||
tab{parent}.name, tab{parent}.modified, {column} | |||||
from `tabHas Role`, `tab{parent}` | from `tabHas Role`, `tab{parent}` | ||||
where `tabHas Role`.role in ({roles}) | where `tabHas Role`.role in ({roles}) | ||||
and `tabHas Role`.parent = `tab{parent}`.name | and `tabHas Role`.parent = `tab{parent}`.name | ||||
""".format(parent=parent, field=field, roles = ', '.join(['%s']*len(roles))), roles, as_dict=True): | |||||
""".format(parent=parent, column=column, roles = ', '.join(['%s']*len(roles))), roles, as_dict=True): | |||||
if p.name not in has_role: | if p.name not in has_role: | ||||
has_role[p.name] = {"modified":p.modified, "title": p.title} | has_role[p.name] = {"modified":p.modified, "title": p.title} | ||||
if parent == "Report": | |||||
has_role[p.name].update({'ref_doctype': p.ref_doctype}) | |||||
# pages or reports where role is not set are also allowed | # pages or reports where role is not set are also allowed | ||||
for p in frappe.db.sql("""select name, modified, {field} as title | |||||
for p in frappe.db.sql("""select `tab{parent}`.name, `tab{parent}`.modified, {column} | |||||
from `tab{parent}` where | from `tab{parent}` where | ||||
(select count(*) from `tabHas Role` | (select count(*) from `tabHas Role` | ||||
where `tabHas Role`.parent=tab{parent}.name) = 0""".format(parent=parent, field=field), as_dict=1): | |||||
where `tabHas Role`.parent=tab{parent}.name) = 0""".format(parent=parent, column=column), as_dict=1): | |||||
if p.name not in has_role: | if p.name not in has_role: | ||||
has_role[p.name] = {"modified":p.modified, "title": p.title} | has_role[p.name] = {"modified":p.modified, "title": p.title} | ||||
if parent == "Report": | |||||
has_role[p.name].update({'ref_doctype': p.ref_doctype}) | |||||
return has_role | return has_role | ||||
def get_column(doctype): | |||||
column = "`tabPage`.title as title" | |||||
if doctype == "Report": | |||||
column = "`tabReport`.name as name, `tabReport`.ref_doctype" | |||||
return column | |||||
def load_translations(bootinfo): | def load_translations(bootinfo): | ||||
messages = frappe.get_lang_dict("boot") | messages = frappe.get_lang_dict("boot") | ||||
@@ -1,5 +1,6 @@ | |||||
{ | { | ||||
"allow_copy": 0, | "allow_copy": 0, | ||||
"allow_guest_to_view": 0, | |||||
"allow_import": 1, | "allow_import": 1, | ||||
"allow_rename": 0, | "allow_rename": 0, | ||||
"autoname": "hash", | "autoname": "hash", | ||||
@@ -159,19 +160,48 @@ | |||||
"search_index": 0, | "search_index": 0, | ||||
"set_only_once": 0, | "set_only_once": 0, | ||||
"unique": 0 | "unique": 0 | ||||
}, | |||||
{ | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"columns": 0, | |||||
"fieldname": "ref_doctype", | |||||
"fieldtype": "Data", | |||||
"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": "Reference Doctype", | |||||
"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 | |||||
} | } | ||||
], | ], | ||||
"has_web_view": 0, | |||||
"hide_heading": 0, | "hide_heading": 0, | ||||
"hide_toolbar": 0, | "hide_toolbar": 0, | ||||
"idx": 0, | "idx": 0, | ||||
"image_view": 0, | "image_view": 0, | ||||
"in_create": 0, | "in_create": 0, | ||||
"in_dialog": 0, | |||||
"is_submittable": 0, | "is_submittable": 0, | ||||
"issingle": 0, | "issingle": 0, | ||||
"istable": 0, | "istable": 0, | ||||
"max_attachments": 0, | "max_attachments": 0, | ||||
"modified": "2017-02-20 13:59:35.882885", | |||||
"modified": "2017-03-20 12:56:09.164494", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Core", | "module": "Core", | ||||
"name": "Custom Role", | "name": "Custom Role", | ||||
@@ -17,7 +17,7 @@ execute:frappe.reload_doc('core', 'doctype', 'custom_docperm') | |||||
execute:frappe.reload_doc('core', 'doctype', 'deleted_document') | execute:frappe.reload_doc('core', 'doctype', 'deleted_document') | ||||
frappe.patches.v8_0.rename_page_role_to_has_role #2017-03-16 | frappe.patches.v8_0.rename_page_role_to_has_role #2017-03-16 | ||||
frappe.patches.v7_2.setup_custom_perms #2017-01-19 | frappe.patches.v7_2.setup_custom_perms #2017-01-19 | ||||
frappe.patches.v8_0.set_user_permission_for_page_and_report | |||||
frappe.patches.v8_0.set_user_permission_for_page_and_report #2017-03-20 | |||||
execute:frappe.reload_doc('core', 'doctype', 'role') | execute:frappe.reload_doc('core', 'doctype', 'role') | ||||
execute:frappe.reload_doc('core', 'doctype', 'user') | execute:frappe.reload_doc('core', 'doctype', 'user') | ||||
execute:frappe.reload_doc('custom', 'doctype', 'custom_field') #2015-10-19 | execute:frappe.reload_doc('custom', 'doctype', 'custom_field') #2015-10-19 | ||||
@@ -9,6 +9,15 @@ def execute(): | |||||
frappe.reload_doc("core", 'doctype', "custom_role") | frappe.reload_doc("core", 'doctype', "custom_role") | ||||
set_user_permission_for_page_and_report() | set_user_permission_for_page_and_report() | ||||
update_ref_doctype_in_custom_role() | |||||
def update_ref_doctype_in_custom_role(): | |||||
frappe.reload_doc("core", 'doctype', "custom_role") | |||||
frappe.db.sql("""update `tabCustom Role` | |||||
set | |||||
ref_doctype = (select ref_doctype from tabReport where name = `tabCustom Role`.report) | |||||
where report is not null""") | |||||
def set_user_permission_for_page_and_report(): | def set_user_permission_for_page_and_report(): | ||||
make_custom_roles_for_page_and_report() | make_custom_roles_for_page_and_report() | ||||
@@ -90,7 +90,7 @@ frappe.views.ListSidebar = Class.extend({ | |||||
if(!r.ref_doctype || r.ref_doctype==me.doctype) { | if(!r.ref_doctype || r.ref_doctype==me.doctype) { | ||||
var report_type = r.report_type==='Report Builder' | var report_type = r.report_type==='Report Builder' | ||||
? 'Report/' + r.ref_doctype : 'query-report'; | ? 'Report/' + r.ref_doctype : 'query-report'; | ||||
var route = r.route || report_type + '/' + r.name; | |||||
var route = r.route || report_type + '/' + r.title; | |||||
if(added.indexOf(route)===-1) { | if(added.indexOf(route)===-1) { | ||||
// don't repeat | // don't repeat | ||||
@@ -102,7 +102,7 @@ frappe.views.ListSidebar = Class.extend({ | |||||
} | } | ||||
$('<li><a href="#'+ route + '">' | $('<li><a href="#'+ route + '">' | ||||
+ __(r.name)+'</a></li>').appendTo(dropdown); | |||||
+ __(r.title)+'</a></li>').appendTo(dropdown); | |||||
} | } | ||||
} | } | ||||
}); | }); | ||||