Merge pull request #3547 from rmehta/fixes-for-gst
Permissions and other minor fixes for GST
This commit is contained in:
commit
760ab551bb
24 changed files with 198 additions and 100 deletions
|
|
@ -12,6 +12,7 @@
|
|||
"editable_grid": 0,
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -41,11 +42,12 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "Name of person or organization that this address belongs to.",
|
||||
"description": "",
|
||||
"fieldname": "address_title",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
|
|
@ -70,6 +72,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -99,6 +102,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -127,6 +131,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -155,6 +160,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -183,6 +189,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -212,6 +219,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -240,6 +248,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -269,6 +278,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -297,6 +307,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -325,6 +336,7 @@
|
|||
"width": "50%"
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -353,6 +365,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -381,6 +394,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -409,6 +423,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -439,6 +454,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -469,6 +485,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -498,6 +515,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -528,6 +546,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -569,7 +588,7 @@
|
|||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-04-10 13:09:45.030542",
|
||||
"modified": "2017-06-21 11:30:20.719590",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Contacts",
|
||||
"name": "Address",
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
"engine": "InnoDB",
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -42,36 +43,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "salutation",
|
||||
"fieldtype": "Link",
|
||||
"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": "Salutation",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Salutation",
|
||||
"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_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -102,6 +74,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
|
|
@ -132,6 +105,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
|
|
@ -163,6 +137,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -193,6 +168,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -220,6 +196,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -250,6 +227,38 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "salutation",
|
||||
"fieldtype": "Link",
|
||||
"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": "Salutation",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Salutation",
|
||||
"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_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -280,6 +289,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
|
|
@ -310,6 +320,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 1,
|
||||
"collapsible": 0,
|
||||
|
|
@ -340,6 +351,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -369,6 +381,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -398,6 +411,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -430,6 +444,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -460,6 +475,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -489,6 +505,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -518,6 +535,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -547,6 +565,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -575,6 +594,7 @@
|
|||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
|
|
@ -615,7 +635,7 @@
|
|||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-04-10 13:09:27.880530",
|
||||
"modified": "2017-06-21 17:17:44.694188",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Contacts",
|
||||
"name": "Contact",
|
||||
|
|
|
|||
|
|
@ -7,7 +7,9 @@ import frappe
|
|||
from frappe.model.document import Document
|
||||
|
||||
class CustomRole(Document):
|
||||
pass
|
||||
def validate(self):
|
||||
if self.report and not self.ref_doctype:
|
||||
self.ref_doctype = frappe.db.get_value('Report', self.report, 'ref_doctype')
|
||||
|
||||
def get_custom_allowed_roles(field, name):
|
||||
allowed_roles = []
|
||||
|
|
|
|||
|
|
@ -623,10 +623,24 @@ def validate_permissions_for_doctype(doctype, for_remove=False):
|
|||
for perm in doctype.get("permissions"):
|
||||
perm.db_update()
|
||||
|
||||
clear_permissions_cache(doctype.name)
|
||||
|
||||
def clear_permissions_cache(doctype):
|
||||
frappe.clear_cache(doctype=doctype)
|
||||
delete_notification_count_for(doctype)
|
||||
for user in frappe.db.sql_list("""select
|
||||
distinct `tabHas Role`.parent
|
||||
from
|
||||
`tabHas Role`,
|
||||
tabDocPerm
|
||||
where tabDocPerm.parent = %s
|
||||
and tabDocPerm.role = `tabHas Role`.role""", doctype):
|
||||
frappe.clear_cache(user=user)
|
||||
|
||||
def validate_permissions(doctype, for_remove=False):
|
||||
permissions = doctype.get("permissions")
|
||||
if not permissions:
|
||||
frappe.throw(_('Enter at least one permission row'), frappe.MandatoryError)
|
||||
frappe.msgprint(_('No Permissions Specified'), alert=True, indicator='orange')
|
||||
issingle = issubmittable = isimportable = False
|
||||
if doctype:
|
||||
issingle = cint(doctype.issingle)
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ class Report(Document):
|
|||
if self.report_type == "Report Builder":
|
||||
self.update_report_json()
|
||||
|
||||
def before_insert(self):
|
||||
self.set_doctype_roles()
|
||||
|
||||
def on_update(self):
|
||||
|
|
@ -48,11 +49,10 @@ class Report(Document):
|
|||
delete_custom_role('report', self.name)
|
||||
|
||||
def set_doctype_roles(self):
|
||||
if self.get('roles'): return
|
||||
|
||||
doc = frappe.get_meta(self.ref_doctype)
|
||||
roles = [{'role': d.role} for d in doc.permissions if d.permlevel==0]
|
||||
self.set('roles', roles)
|
||||
if not self.get('roles'):
|
||||
meta = frappe.get_meta(self.ref_doctype)
|
||||
roles = [{'role': d.role} for d in meta.permissions if d.permlevel==0]
|
||||
self.set('roles', roles)
|
||||
|
||||
def is_permitted(self):
|
||||
"""Returns true if Has Role is not set or the user is allowed."""
|
||||
|
|
@ -153,7 +153,7 @@ class Report(Document):
|
|||
for c in columns]
|
||||
|
||||
out = out + [list(d) for d in result]
|
||||
|
||||
|
||||
if as_dict:
|
||||
data = []
|
||||
for row in out:
|
||||
|
|
|
|||
|
|
@ -6,8 +6,10 @@ import frappe
|
|||
import frappe.defaults
|
||||
from frappe.modules.import_file import get_file_path, read_doc_from_file
|
||||
from frappe.translate import send_translations
|
||||
from frappe.desk.notifications import delete_notification_count_for
|
||||
from frappe.permissions import reset_perms, get_linked_doctypes, get_all_perms, setup_custom_perms
|
||||
from frappe.permissions import (reset_perms, get_linked_doctypes, get_all_perms,
|
||||
setup_custom_perms, add_permission)
|
||||
from frappe.core.doctype.doctype.doctype import (clear_permissions_cache,
|
||||
validate_permissions_for_doctype)
|
||||
from frappe import _
|
||||
|
||||
@frappe.whitelist()
|
||||
|
|
@ -61,20 +63,7 @@ def get_permissions(doctype=None, role=None):
|
|||
@frappe.whitelist()
|
||||
def add(parent, role, permlevel):
|
||||
frappe.only_for("System Manager")
|
||||
setup_custom_perms(parent)
|
||||
|
||||
frappe.get_doc({
|
||||
"doctype":"Custom DocPerm",
|
||||
"__islocal": 1,
|
||||
"parent": parent,
|
||||
"parenttype": "DocType",
|
||||
"parentfield": "permissions",
|
||||
"role": role,
|
||||
"permlevel": permlevel,
|
||||
"read": 1
|
||||
}).save()
|
||||
|
||||
validate_and_reset(parent)
|
||||
add_permission(parent, role, permlevel)
|
||||
|
||||
@frappe.whitelist()
|
||||
def update(doctype, role, permlevel, ptype, value=None):
|
||||
|
|
@ -88,7 +77,7 @@ def update(doctype, role, permlevel, ptype, value=None):
|
|||
|
||||
frappe.db.sql("""update `tabCustom DocPerm` set `%s`=%s where name=%s"""\
|
||||
% (frappe.db.escape(ptype), '%s', '%s'), (value, name))
|
||||
validate_and_reset(doctype)
|
||||
validate_permissions_for_doctype(doctype)
|
||||
|
||||
return out
|
||||
|
||||
|
|
@ -103,27 +92,14 @@ def remove(doctype, role, permlevel):
|
|||
if not frappe.get_all('Custom DocPerm', dict(parent=doctype)):
|
||||
frappe.throw(_('There must be atleast one permission rule.'), title=_('Cannot Remove'))
|
||||
|
||||
validate_and_reset(doctype, for_remove=True)
|
||||
|
||||
def validate_and_reset(doctype, for_remove=False):
|
||||
from frappe.core.doctype.doctype.doctype import validate_permissions_for_doctype
|
||||
validate_permissions_for_doctype(doctype, for_remove)
|
||||
clear_doctype_cache(doctype)
|
||||
validate_permissions_for_doctype(doctype, for_remove=True)
|
||||
|
||||
@frappe.whitelist()
|
||||
def reset(doctype):
|
||||
frappe.only_for("System Manager")
|
||||
reset_perms(doctype)
|
||||
clear_doctype_cache(doctype)
|
||||
clear_permissions_cache(doctype)
|
||||
|
||||
def clear_doctype_cache(doctype):
|
||||
frappe.clear_cache(doctype=doctype)
|
||||
delete_notification_count_for(doctype)
|
||||
for user in frappe.db.sql_list("""select distinct `tabHas Role`.parent from `tabHas Role`,
|
||||
tabDocPerm
|
||||
where tabDocPerm.parent = %s
|
||||
and tabDocPerm.role = `tabHas Role`.role""", doctype):
|
||||
frappe.clear_cache(user=user)
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_users_with_role(role):
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# MIT License. See license.txt
|
||||
|
||||
|
|
@ -73,7 +73,8 @@ class CustomField(Document):
|
|||
|
||||
@frappe.whitelist()
|
||||
def get_fields_label(doctype=None):
|
||||
return [{"value": df.fieldname or "", "label": _(df.label or "")} for df in frappe.get_meta(doctype).get("fields")]
|
||||
return [{"value": df.fieldname or "", "label": _(df.label or "")}
|
||||
for df in frappe.get_meta(doctype).get("fields")]
|
||||
|
||||
def create_custom_field_if_values_exist(doctype, df):
|
||||
df = frappe._dict(df)
|
||||
|
|
|
|||
|
|
@ -86,6 +86,11 @@ def update_user_name(args):
|
|||
first_name, last_name = first_name.split(' ', 1)
|
||||
|
||||
if args.get("email"):
|
||||
if frappe.db.exists('User', args.get('email')):
|
||||
# running again
|
||||
return
|
||||
|
||||
|
||||
args['name'] = args.get("email")
|
||||
|
||||
_mute_emails, frappe.flags.mute_emails = frappe.flags.mute_emails, True
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import os, json
|
|||
from frappe import _
|
||||
from frappe.modules import scrub, get_module_path
|
||||
from frappe.utils import flt, cint, get_html_format, cstr
|
||||
from frappe.model.utils import render_include
|
||||
from frappe.translate import send_translations
|
||||
import frappe.desk.reportview
|
||||
from frappe.permissions import get_role_permissions
|
||||
|
|
@ -55,7 +56,7 @@ def get_script(report_name):
|
|||
send_translations(frappe.get_lang_dict("report", report_name))
|
||||
|
||||
return {
|
||||
"script": script,
|
||||
"script": render_include(script),
|
||||
"html_format": html_format
|
||||
}
|
||||
|
||||
|
|
@ -104,7 +105,7 @@ def run(report_name, filters=None, user=None):
|
|||
|
||||
if cint(report.add_total_row) and result:
|
||||
result = add_total_row(result, columns)
|
||||
|
||||
|
||||
return {
|
||||
"result": result,
|
||||
"columns": columns,
|
||||
|
|
@ -145,7 +146,7 @@ def export_query():
|
|||
# add column headings
|
||||
for idx in range(len(data.columns)):
|
||||
result[0].append(columns[idx]["label"])
|
||||
|
||||
|
||||
# build table from dict
|
||||
if isinstance(data.result[0], dict):
|
||||
for i,row in enumerate(data.result):
|
||||
|
|
@ -381,4 +382,4 @@ def get_user_match_filters(doctypes, ref_doctype):
|
|||
if filter_list:
|
||||
match_filters[dt] = filter_list
|
||||
|
||||
return match_filters
|
||||
return match_filters
|
||||
0
frappe/desk/report/__init__.py
Normal file
0
frappe/desk/report/__init__.py
Normal file
0
frappe/desk/report/todo/__init__.py
Normal file
0
frappe/desk/report/todo/__init__.py
Normal file
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (c) 2016, Frappe Technologies and contributors
|
||||
// For license information, please see license.txt
|
||||
/* eslint-disable */
|
||||
|
||||
frappe.query_reports["ToDo"] = {
|
||||
"filters": [
|
||||
|
|
@ -7,9 +7,9 @@
|
|||
"doctype": "Report",
|
||||
"idx": 3,
|
||||
"is_standard": "Yes",
|
||||
"modified": "2017-02-24 20:13:12.217943",
|
||||
"modified": "2017-06-21 18:18:50.748793",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"module": "Desk",
|
||||
"name": "ToDo",
|
||||
"owner": "Administrator",
|
||||
"ref_doctype": "ToDo",
|
||||
|
|
@ -31,5 +31,4 @@ def execute(filters=None):
|
|||
result.append([todo.name, todo.priority, todo.date, todo.description,
|
||||
todo.owner, todo.assigned_by, todo.reference])
|
||||
|
||||
return columns, result
|
||||
|
||||
return columns, result
|
||||
|
|
@ -4,7 +4,6 @@
|
|||
from __future__ import unicode_literals, print_function
|
||||
import frappe
|
||||
import time
|
||||
import redis
|
||||
from frappe import _, msgprint
|
||||
from frappe.utils import flt, cstr, now, get_datetime_str, file_lock
|
||||
from frappe.utils.background_jobs import enqueue
|
||||
|
|
|
|||
|
|
@ -61,3 +61,20 @@ def render_include(content):
|
|||
break
|
||||
|
||||
return content
|
||||
|
||||
def get_fetch_values(doctype, fieldname, value):
|
||||
'''Returns fetch value dict for the given object
|
||||
|
||||
:param doctype: Target doctype
|
||||
:param fieldname: Link fieldname selected
|
||||
:param value: Value selected
|
||||
'''
|
||||
out = {}
|
||||
meta = frappe.get_meta(doctype)
|
||||
link_df = meta.get_field(fieldname)
|
||||
for df in meta.get_fields_to_fetch(fieldname):
|
||||
# example shipping_address.gistin
|
||||
link_field, source_fieldname = df.options.split('.', 1)
|
||||
out[df.fieldname] = frappe.db.get_value(link_df.options, value, source_fieldname)
|
||||
|
||||
return out
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ def get_user_settings(doctype, for_update=False):
|
|||
|
||||
if not for_update:
|
||||
update_user_settings(doctype, user_settings, True)
|
||||
|
||||
|
||||
return user_settings or '{}'
|
||||
|
||||
def update_user_settings(doctype, user_settings, for_update=False):
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ def get_file_path(module, dt, dn):
|
|||
|
||||
def import_file_by_path(path, force=False, data_import=False, pre_process=None, ignore_version=None,
|
||||
reset_permissions=False):
|
||||
frappe.flags.in_import = True
|
||||
try:
|
||||
docs = read_doc_from_file(path)
|
||||
except IOError:
|
||||
|
|
@ -54,8 +53,10 @@ def import_file_by_path(path, force=False, data_import=False, pre_process=None,
|
|||
|
||||
original_modified = doc.get("modified")
|
||||
|
||||
frappe.flags.in_import = True
|
||||
import_doc(doc, force=force, data_import=data_import, pre_process=pre_process,
|
||||
ignore_version=ignore_version, reset_permissions=reset_permissions)
|
||||
frappe.flags.in_import = False
|
||||
|
||||
if original_modified:
|
||||
# since there is a new timestamp on the file, update timestamp in
|
||||
|
|
@ -67,7 +68,6 @@ def import_file_by_path(path, force=False, data_import=False, pre_process=None,
|
|||
(doc['doctype'], '%s', '%s'),
|
||||
(original_modified, doc['name']))
|
||||
|
||||
frappe.flags.in_import = False
|
||||
return True
|
||||
|
||||
def read_doc_from_file(path):
|
||||
|
|
|
|||
|
|
@ -183,4 +183,5 @@ frappe.patches.v8_0.set_currency_field_precision # 2017-05-09
|
|||
frappe.patches.v8_0.rename_print_to_printing
|
||||
frappe.patches.v7_1.disabled_print_settings_for_custom_print_format
|
||||
frappe.patches.v8_0.update_desktop_icons
|
||||
frappe.patches.v8_0.update_gender_and_salutation
|
||||
frappe.patches.v8_0.update_gender_and_salutation
|
||||
execute:frappe.db.sql('update tabReport set module="Desk" where name="ToDo"')
|
||||
|
|
@ -330,7 +330,7 @@ def get_all_perms(role):
|
|||
'''Returns valid permissions for a given role'''
|
||||
perms = frappe.get_all('DocPerm', fields='*', filters=dict(role=role))
|
||||
custom_perms = frappe.get_all('Custom DocPerm', fields='*', filters=dict(role=role))
|
||||
doctypes_with_custom_perms = frappe.db.sql_list("""select distinct parent
|
||||
doctypes_with_custom_perms = frappe.db.sql_list("""select distinct parent
|
||||
from `tabCustom DocPerm`""")
|
||||
|
||||
for p in perms:
|
||||
|
|
@ -458,6 +458,31 @@ def setup_custom_perms(parent):
|
|||
copy_perms(parent)
|
||||
return True
|
||||
|
||||
def add_permission(doctype, role, permlevel=0):
|
||||
'''Add a new permission rule to the given doctype
|
||||
for the given Role and Permission Level'''
|
||||
from frappe.core.doctype.doctype.doctype import validate_permissions_for_doctype
|
||||
setup_custom_perms(doctype)
|
||||
|
||||
if frappe.db.get_value('Custom DocPerm', dict(parent=doctype, role=role,
|
||||
permlevel=permlevel)):
|
||||
return
|
||||
|
||||
custom_docperm = frappe.get_doc({
|
||||
"doctype":"Custom DocPerm",
|
||||
"__islocal": 1,
|
||||
"parent": doctype,
|
||||
"parenttype": "DocType",
|
||||
"parentfield": "permissions",
|
||||
"role": role,
|
||||
'read': 1,
|
||||
"permlevel": permlevel,
|
||||
})
|
||||
|
||||
custom_docperm.save()
|
||||
|
||||
validate_permissions_for_doctype(doctype)
|
||||
|
||||
def copy_perms(parent):
|
||||
'''Copy all DocPerm in to Custom DocPerm for the given document'''
|
||||
for d in frappe.get_all('DocPerm', fields='*', filters=dict(parent=parent)):
|
||||
|
|
@ -480,3 +505,4 @@ def get_linked_doctypes(dt):
|
|||
"options": ("!=", "[Select]")
|
||||
})
|
||||
]))
|
||||
|
||||
|
|
|
|||
|
|
@ -223,6 +223,14 @@ h6.uppercase,
|
|||
.badge-important {
|
||||
background-color: #e74c3c;
|
||||
}
|
||||
.address-box {
|
||||
background-color: #fafbfc;
|
||||
padding: 0px 15px;
|
||||
margin: 15px 0px;
|
||||
border: 1px solid #d1d8dd;
|
||||
border-radius: 3px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.timeline {
|
||||
margin: 30px 0px;
|
||||
}
|
||||
|
|
@ -272,7 +280,7 @@ h6.uppercase,
|
|||
}
|
||||
.timeline-item.user-content .media-body {
|
||||
border: 1px solid #d1d8dd;
|
||||
border-radius: 2px;
|
||||
border-radius: 3px;
|
||||
margin-left: -7px;
|
||||
position: relative;
|
||||
overflow: visible;
|
||||
|
|
@ -386,7 +394,7 @@ h6.uppercase,
|
|||
.timeline-head {
|
||||
background-color: white;
|
||||
border: 1px solid #d1d8dd;
|
||||
border-radius: 2px;
|
||||
border-radius: 3px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -218,12 +218,15 @@ $.extend(frappe.ui.toolbar, {
|
|||
|
||||
frappe.ui.toolbar.clear_cache = function() {
|
||||
frappe.assets.clear_local_storage();
|
||||
$c('frappe.sessions.clear',{},function(r,rt){
|
||||
if(!r.exc) {
|
||||
frappe.show_alert(r.message);
|
||||
location.reload(true);
|
||||
frappe.call({
|
||||
method: 'frappe.sessions.clear',
|
||||
callback: function(r) {
|
||||
if(!r.exc) {
|
||||
frappe.show_alert({message:r.message, indicator:'green'});
|
||||
location.reload(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -293,6 +293,15 @@ h6.uppercase, .h6.uppercase {
|
|||
background-color: #e74c3c;
|
||||
}
|
||||
|
||||
.address-box {
|
||||
background-color: @light-bg;
|
||||
padding: 0px 15px;
|
||||
margin: 15px 0px;
|
||||
border: 1px solid @border-color;
|
||||
border-radius: 3px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.timeline {
|
||||
margin: 30px 0px;
|
||||
|
||||
|
|
@ -356,7 +365,7 @@ h6.uppercase, .h6.uppercase {
|
|||
|
||||
.media-body {
|
||||
border: 1px solid @border-color;
|
||||
border-radius: 2px;
|
||||
border-radius: 3px;
|
||||
margin-left: -7px;
|
||||
position: relative;
|
||||
|
||||
|
|
@ -502,7 +511,7 @@ h6.uppercase, .h6.uppercase {
|
|||
background-color: white;
|
||||
// padding: 15px 30px;
|
||||
border: 1px solid @border-color;
|
||||
border-radius: 2px;
|
||||
border-radius: 3px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue