From 5034e7e6604816ebbb2d2aff705d65aae7c38c3f Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 5 Mar 2015 11:58:07 +0530 Subject: [PATCH] [api] add frappe.model.get_value in js (gets value from serverside) --- frappe/client.py | 14 ++++++++-- .../public/js/frappe/form/script_manager.js | 2 +- frappe/public/js/frappe/model/model.js | 26 +++++++++++++++---- .../print_formats/standard_macros.html | 2 +- frappe/website/website_generator.py | 6 ++--- 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/frappe/client.py b/frappe/client.py index 1b4242ad5d..4065883317 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -32,9 +32,19 @@ def get_value(doctype, fieldname, filters=None, as_dict=True, debug=False): if not frappe.has_permission(doctype): frappe.throw(_("Not permitted"), frappe.PermissionError) - if fieldname and fieldname.startswith("["): + try: + filters = json.loads(filters) + except ValueError: + # name passed, not json + pass + + try: fieldname = json.loads(fieldname) - return frappe.db.get_value(doctype, json.loads(filters), fieldname, as_dict=as_dict, debug=debug) + except ValueError: + # name passed, not json + pass + + return frappe.db.get_value(doctype, filters, fieldname, as_dict=as_dict, debug=debug) @frappe.whitelist() def set_value(doctype, name, fieldname, value): diff --git a/frappe/public/js/frappe/form/script_manager.js b/frappe/public/js/frappe/form/script_manager.js index 1b9005b238..e2f4f3b77b 100644 --- a/frappe/public/js/frappe/form/script_manager.js +++ b/frappe/public/js/frappe/form/script_manager.js @@ -80,7 +80,7 @@ frappe.ui.form.ScriptManager = Class.extend({ // setup add fetch $.each(this.frm.fields, function(i, field) { var df = field.df; - if(df.fieldtype==="Read Only" && df.options && df.options.indexOf(".")!=-1) { + if((df.fieldtype==="Read Only" || df.read_only==1) && df.options && df.options.indexOf(".")!=-1) { var parts = df.options.split("."); me.frm.add_fetch(parts[0], parts[1], df.fieldname); } diff --git a/frappe/public/js/frappe/model/model.js b/frappe/public/js/frappe/model/model.js index f1e77a5f11..43d7e68054 100644 --- a/frappe/public/js/frappe/model/model.js +++ b/frappe/public/js/frappe/model/model.js @@ -242,12 +242,28 @@ $.extend(frappe.model, { return frappe.utils.filter_dict(docsdict, filters); }, - get_value: function(doctype, filters, fieldname) { - if(typeof filters==="string" && locals[doctype] && locals[doctype][filters]) { - return locals[doctype][filters][fieldname]; + get_value: function(doctype, filters, fieldname, callback) { + if(callback) { + frappe.call({ + method:"frappe.client.get_value", + args: { + doctype: doctype, + fieldname: fieldname, + filters: filters + }, + callback: function(r) { + if(!r.exc) { + callback(r.message); + } + } + }); } else { - var l = frappe.get_list(doctype, filters); - return (l.length && l[0]) ? l[0][fieldname] : null; + if(typeof filters==="string" && locals[doctype] && locals[doctype][filters]) { + return locals[doctype][filters][fieldname]; + } else { + var l = frappe.get_list(doctype, filters); + return (l.length && l[0]) ? l[0][fieldname] : null; + } } }, diff --git a/frappe/templates/print_formats/standard_macros.html b/frappe/templates/print_formats/standard_macros.html index ce3841cb0f..0606fb32d4 100644 --- a/frappe/templates/print_formats/standard_macros.html +++ b/frappe/templates/print_formats/standard_macros.html @@ -113,7 +113,7 @@ diff --git a/frappe/website/website_generator.py b/frappe/website/website_generator.py index b4d4c563b7..3bf9d6115f 100644 --- a/frappe/website/website_generator.py +++ b/frappe/website/website_generator.py @@ -148,7 +148,7 @@ class WebsiteGenerator(Document): if context.parents: return context.parents - # home_page = get_home_page() + home_page = get_home_page() parents = [] me = self @@ -157,8 +157,8 @@ class WebsiteGenerator(Document): _parent_val = me.get(_parent_field) if _parent_field else None # if no parent and not home page, then parent is home page - # if not _parent_val and me.get_route() != home_page: - # _parent_val = home_page + if not _parent_val and me.get_route() != home_page: + _parent_val = home_page if _parent_val: df = me.meta.get_field(_parent_field)