From cedf84cbc76151f77c2e3f05192fbc6abcd643be Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 18 Feb 2016 19:15:59 +0530 Subject: [PATCH] [fix] print hide fields with higher perm levels - Fixes frappe/erpnext#4833 --- frappe/model/document.py | 21 ++++++++++++++------- frappe/templates/pages/print.py | 3 +++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/frappe/model/document.py b/frappe/model/document.py index 2bd5c9841d..a1eb053094 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -375,14 +375,21 @@ class Document(BaseDocument): d.reset_values_if_no_permlevel_access(has_access_to, high_permlevel_fields) def get_permlevel_access(self): - user_roles = frappe.get_roles() - has_access_to = [] - for perm in self.meta.permissions: - if perm.role in user_roles and perm.permlevel > 0 and perm.write: - if perm.permlevel not in has_access_to: - has_access_to.append(perm.permlevel) + if not hasattr(self, "_has_access_to"): + user_roles = frappe.get_roles() + self._has_access_to = [] + for perm in self.meta.permissions: + if perm.role in user_roles and perm.permlevel > 0 and perm.write: + if perm.permlevel not in self._has_access_to: + self._has_access_to.append(perm.permlevel) - return has_access_to + return self._has_access_to + + def has_permlevel_access_to(self, fieldname, df=None): + if not df: + df = self.meta.get_field(fieldname) + + return df.permlevel in self.get_permlevel_access() def _set_defaults(self): if frappe.flags.in_import: diff --git a/frappe/templates/pages/print.py b/frappe/templates/pages/print.py index eb1988fce8..35184a5fa6 100644 --- a/frappe/templates/pages/print.py +++ b/frappe/templates/pages/print.py @@ -265,6 +265,9 @@ def is_visible(df, doc): if df.fieldname in doc.hide_in_print_layout: return False + if df.permlevel > 0 and not doc.has_permlevel_access_to(df.fieldname, df): + return False + return not doc.is_print_hide(df.fieldname, df) def has_value(df, doc):