diff --git a/frappe/api.py b/frappe/api.py index f16c73b172..fcf0692e56 100644 --- a/frappe/api.py +++ b/frappe/api.py @@ -90,7 +90,7 @@ def handle(): if frappe.local.form_dict.get('fields'): frappe.local.form_dict['fields'] = json.loads(frappe.local.form_dict['fields']) frappe.local.response.update({ - "data": frappe.call(frappe.widgets.reportview.execute, + "data": frappe.call(frappe.client.get_list, doctype, **frappe.local.form_dict)}) if frappe.local.request.method=="POST": diff --git a/frappe/cli.py b/frappe/cli.py index b42e887a98..f0900206b8 100755 --- a/frappe/cli.py +++ b/frappe/cli.py @@ -791,7 +791,7 @@ def run_tests(app=None, module=None, doctype=None, verbose=False, tests=(), driv import frappe.test_runner from frappe.utils import sel - sel.start(verbose, driver) + #sel.start(verbose, driver) ret = 1 try: diff --git a/frappe/client.py b/frappe/client.py index dd80dc6026..2e72c47712 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -8,6 +8,12 @@ import frappe.model import frappe.utils import json, os +@frappe.whitelist() +def get_list(doctype, fields=None, filters=None, order_by=None, + limit_start=None, limit_page_length=None): + return frappe.get_list(doctype, fields=fields, filters=filters, order_by=order_by, + limit_start=limit_start, limit_page_length=limit_page_length) + @frappe.whitelist() def get(doctype, name=None, filters=None): if filters and not name: diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index c8c264354a..7e055e5887 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -217,11 +217,20 @@ class BaseDocument(object): d = self.get_valid_dict() columns = d.keys() - frappe.db.sql("""update `tab{doctype}` - set {values} where name=%s""".format( - doctype = self.doctype, - values = ", ".join(["`"+c+"`=%s" for c in columns]) - ), d.values() + [d.get("name")]) + try: + frappe.db.sql("""update `tab{doctype}` + set {values} where name=%s""".format( + doctype = self.doctype, + values = ", ".join(["`"+c+"`=%s" for c in columns]) + ), d.values() + [d.get("name")]) + except Exception, e: + if e.args[0]==1062: + type, value, traceback = sys.exc_info() + fieldname = str(e).split("'")[-2] + frappe.msgprint(_("{0} must be unique".format(self.meta.get_label(fieldname)))) + raise frappe.ValidationError, (self.doctype, self.name, e), traceback + else: + raise def db_set(self, fieldname, value): self.set(fieldname, value) diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index 6658a792bf..50cd7943fc 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -223,10 +223,13 @@ class DatabaseQuery(object): if not isinstance(f, (list, tuple)): frappe.throw("Filter must be a tuple or list (in a list)") - if len(f) != 4: + if len(f) == 3: + f = (self.doctype, f[0], f[1], f[2]) + + elif len(f) != 4: frappe.throw("Filter must have 4 values (doctype, fieldname, condition, value): " + str(f)) - return f + return list(f) def build_match_conditions(self, as_condition=True): """add match conditions if applicable""" diff --git a/frappe/model/db_schema.py b/frappe/model/db_schema.py index 18cc9310f6..9c5154c008 100644 --- a/frappe/model/db_schema.py +++ b/frappe/model/db_schema.py @@ -210,7 +210,7 @@ class DbTable: # if index key exists if frappe.db.sql("""show index from `{0}` where key_name=%s - and Non_unique=%s""".format(self.name), (col.fieldname, 1 if col.unique else 0), debug=1): + and Non_unique=%s""".format(self.name), (col.fieldname, 1 if col.unique else 0)): query.append("drop index `{}`".format(col.fieldname)) for col in self.set_default: diff --git a/frappe/public/js/frappe/form/control.js b/frappe/public/js/frappe/form/control.js index d042f65a67..a7f44b3fe0 100644 --- a/frappe/public/js/frappe/form/control.js +++ b/frappe/public/js/frappe/form/control.js @@ -190,7 +190,12 @@ frappe.ui.form.ControlInput = frappe.ui.form.Control.extend({ me.disp_area && $(me.disp_area).toggle(false); $(me.input_area).toggle(true); $(me.input_area).find("input").prop("disabled", false); - !me.has_input && me.make_input(); + if(!me.has_input) { + me.make_input(); + if(me.df.on_make) { + me.df.on_make(me); + } + }; if(me.doctype && me.docname) me.set_input(me.value); } else { diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index 050bfcbcf7..208d22e0e1 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -508,7 +508,7 @@ frappe.ui.form.GridRow = Class.extend({
\
\