diff --git a/frappe/__init__.py b/frappe/__init__.py index 52789a0ef5..1f1fd5e7a9 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template -__version__ = '10.0.7' +__version__ = '10.0.8' __title__ = "Frappe Framework" local = Local() diff --git a/frappe/core/doctype/data_import/importer.py b/frappe/core/doctype/data_import/importer.py index 3f6f229aea..27bb9a49f1 100644 --- a/frappe/core/doctype/data_import/importer.py +++ b/frappe/core/doctype/data_import/importer.py @@ -168,7 +168,7 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, # added file to attachments list attachments.append(d[fieldname]) - elif fieldtype in ("Link", "Dynamic Link") and d[fieldname]: + elif fieldtype in ("Link", "Dynamic Link", "Data") and d[fieldname]: # as fields can be saved in the number format(long type) in data import template d[fieldname] = cstr(d[fieldname]) diff --git a/frappe/core/page/permission_manager/permission_manager.js b/frappe/core/page/permission_manager/permission_manager.js index c986af35cc..c5dfd1f5d9 100644 --- a/frappe/core/page/permission_manager/permission_manager.js +++ b/frappe/core/page/permission_manager/permission_manager.js @@ -155,9 +155,7 @@ frappe.PermissionEngine = Class.extend({ role: me.get_role() }, callback: function(r) { - frappe.model.with_doc('DocType', me.get_doctype(), () => { - me.render(r.message); - }); + me.render(r.message); } }); }, @@ -211,10 +209,8 @@ frappe.PermissionEngine = Class.extend({ var perm_cell = me.add_cell(row, d, "permissions").css("padding-top", 0); var perm_container = $("
").appendTo(perm_cell); - const { is_submittable } = frappe.model.get_doc('DocType', me.get_doctype()); - me.rights.forEach(r => { - if (!is_submittable && ['submit', 'cancel', 'amend'].includes(r)) return; + if (!d.is_submittable && ['submit', 'cancel', 'amend'].includes(r)) return; me.add_check(perm_container, d, r); }); diff --git a/frappe/core/page/permission_manager/permission_manager.py b/frappe/core/page/permission_manager/permission_manager.py index 32a85d2864..63d15a12fe 100644 --- a/frappe/core/page/permission_manager/permission_manager.py +++ b/frappe/core/page/permission_manager/permission_manager.py @@ -62,6 +62,9 @@ def get_permissions(doctype=None, role=None): if not d.parent in linked_doctypes: linked_doctypes[d.parent] = get_linked_doctypes(d.parent) d.linked_doctypes = linked_doctypes[d.parent] + meta = frappe.get_meta(d.parent) + if meta: + d.is_submittable = meta.is_submittable return out diff --git a/frappe/public/js/frappe/form/controls/dynamic_link.js b/frappe/public/js/frappe/form/controls/dynamic_link.js index fcb1fbf272..bcbcc32eb2 100644 --- a/frappe/public/js/frappe/form/controls/dynamic_link.js +++ b/frappe/public/js/frappe/form/controls/dynamic_link.js @@ -12,7 +12,7 @@ frappe.ui.form.ControlDynamicLink = frappe.ui.form.ControlLink.extend({ let input = null; if (cur_list) { // for list page - input = cur_list.wrapper.find(selector); + input = cur_list.filter_area.standard_filters_wrapper.find(selector); } if (cur_page) { input = $(cur_page.page).find(selector); diff --git a/frappe/public/js/frappe/views/treeview.js b/frappe/public/js/frappe/views/treeview.js index 117dbe4f50..3f2a9a9c70 100644 --- a/frappe/public/js/frappe/views/treeview.js +++ b/frappe/public/js/frappe/views/treeview.js @@ -184,11 +184,7 @@ frappe.views.TreeView = Class.extend({ condition: function(node) { let allow_rename = true; if (me.doctype && frappe.get_meta(me.doctype)) { - let autoname = frappe.get_meta(me.doctype).autoname; - - // only allow renaming if doctye is set and - // autoname property is "prompt" - allow_rename = autoname && autoname.toLowerCase()==='prompt'; + if(!frappe.get_meta(me.doctype).allow_rename) allow_rename = false; } return !node.is_root && me.can_write && allow_rename; }, diff --git a/frappe/templates/print_formats/standard_macros.html b/frappe/templates/print_formats/standard_macros.html index 968aa300cf..723d2ea840 100644 --- a/frappe/templates/print_formats/standard_macros.html +++ b/frappe/templates/print_formats/standard_macros.html @@ -10,6 +10,13 @@ {{ render_image(df, doc) }} {%- elif df.fieldtype=="Geolocation" -%} {{ render_geolocation(df, doc) }} + {%- elif df.fieldtype=="Currency" -%} + {%- if doc.print_templates and + doc.print_templates.get(df.fieldname) -%} + {% include doc.print_templates[df.fieldname] %} + {%- else -%} + {{ render_field_with_label(df, doc) }} + {%- endif -%} {%- else -%} {{ render_field_with_label(df, doc) }} {%- endif -%} diff --git a/frappe/utils/nestedset.py b/frappe/utils/nestedset.py index 67318a0f75..772eadf4f0 100644 --- a/frappe/utils/nestedset.py +++ b/frappe/utils/nestedset.py @@ -185,12 +185,12 @@ class NestedSet(Document): update_nsm(self) self.validate_ledger() - def on_trash(self): + def on_trash(self, allow_root_deletion=False): if not getattr(self, 'nsm_parent_field', None): self.nsm_parent_field = frappe.scrub(self.doctype) + "_parent" parent = self.get(self.nsm_parent_field) - if not parent: + if not parent and not allow_root_deletion: frappe.throw(_("Root {0} cannot be deleted").format(_(self.doctype))) # cannot delete non-empty group