From a955c658cadce6a624f283979e2a520e39209fba Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 23 Feb 2015 20:17:30 +0530 Subject: [PATCH] [fixes] minor --- .../page/data_import_tool/data_import_tool.py | 6 +-- frappe/database.py | 33 ++++++++++---- frappe/model/base_document.py | 3 +- frappe/model/naming.py | 2 + frappe/public/js/frappe/form/control.js | 9 ---- frappe/public/js/frappe/misc/datetime.js | 4 ++ frappe/utils/data.py | 44 ++++++++++++++----- 7 files changed, 67 insertions(+), 34 deletions(-) diff --git a/frappe/core/page/data_import_tool/data_import_tool.py b/frappe/core/page/data_import_tool/data_import_tool.py index 21300d93a5..2eac94e511 100644 --- a/frappe/core/page/data_import_tool/data_import_tool.py +++ b/frappe/core/page/data_import_tool/data_import_tool.py @@ -43,11 +43,11 @@ def export_csv(doctype, path): get_template(doctype=doctype, all_doctypes="Yes", with_data="Yes") csvfile.write(frappe.response.result.encode("utf-8")) -def export_json(doctype, path): +def export_json(doctype, path, filters=None): from frappe.utils.response import json_handler out = [] - for doc in frappe.get_all(doctype, fields=["name"], limit_page_length=None): - out.append(frappe.get_doc(doctype.doc.name).as_dict()) + for doc in frappe.get_all(doctype, fields=["name"], filters=filters, limit_page_length=0, order_by="creation asc"): + out.append(frappe.get_doc(doctype, doc.name).as_dict()) with open(path, "w") as outfile: outfile.write(json.dumps(out, default=json_handler, indent=1, sort_keys=True)) diff --git a/frappe/database.py b/frappe/database.py index ee3d35700f..07f7fb3210 100644 --- a/frappe/database.py +++ b/frappe/database.py @@ -308,6 +308,8 @@ class Database: * ifnull(`fieldname`, default_value) = %(fieldname)s * `fieldname` [=, !=, >, >=, <, <=] %(fieldname)s """ + conditions = [] + values = {} def _build_condition(key): """ filter's key is passed by map function @@ -317,25 +319,38 @@ class Database: """ _operator = "=" value = filters.get(key) + values[key] = value if isinstance(value, (list, tuple)): _operator = value[0] - filters[key] = value[1] + values[key] = value[1] + if isinstance(value[1], (tuple, list)): + inner_list = [] + for i, v in enumerate(value[1]): + inner_key = "{0}_{1}".format(key, i) + values[inner_key] = v + inner_list.append("%({0})s".format(inner_key)) - if _operator not in ["=", "!=", ">", ">=", "<", "<=", "like"]: + values[key] = "({0})".format(", ".join(inner_list)) + + if _operator not in ["=", "!=", ">", ">=", "<", "<=", "like", "in", "not in"]: _operator = "=" if "[" in key: split_key = key.split("[") - return "ifnull(`" + split_key[0] + "`, " + split_key[1][:-1] + ") " \ + condition = "ifnull(`" + split_key[0] + "`, " + split_key[1][:-1] + ") " \ + _operator + " %(" + key + ")s" else: - return "`" + key + "` " + _operator + " %(" + key + ")s" + condition = "`" + key + "` " + _operator + " %(" + key + ")s" + + conditions.append(condition) if isinstance(filters, basestring): filters = { "name": filters } - conditions = map(_build_condition, filters) - return " and ".join(conditions), filters + for f in filters: + _build_condition(f) + + return " and ".join(conditions), values def get(self, doctype, filters=None, as_dict=True): """Returns `get_value` with fieldname='*'""" @@ -487,12 +502,12 @@ class Database: if fields=="*": as_dict = True - conditions, filters = self.build_conditions(filters) + conditions, values = self.build_conditions(filters) order_by = ("order by " + order_by) if order_by else "" - r = self.sql("select %s from `tab%s` where %s %s" % (fl, doctype, - conditions, order_by), filters, as_dict=as_dict, debug=debug, update=update) + r = self.sql("select {0} from `tab{1}` where {2} {3}".format(fl, doctype, + conditions, order_by), values, as_dict=as_dict, debug=debug, update=update) return r diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index c9a13acc8b..91731c2e60 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -211,7 +211,8 @@ class BaseDocument(object): return frappe._dict(doc) def as_json(self): - return json.dumps(self.as_dict(), indent=1, sort_keys=True) + from frappe.utils.response import json_handler + return json.dumps(self.as_dict(), indent=1, sort_keys=True, default=json_handler) def get_table_field_doctype(self, fieldname): return self.meta.get_field(fieldname).options diff --git a/frappe/model/naming.py b/frappe/model/naming.py index a0a10e7c99..605a986f8b 100644 --- a/frappe/model/naming.py +++ b/frappe/model/naming.py @@ -19,6 +19,8 @@ def set_new_name(doc): :param doc: Document to be named.""" + doc.run_method("before_naming") + autoname = frappe.get_meta(doc.doctype).autoname if getattr(doc, "amended_from", None): _set_amended_name(doc) diff --git a/frappe/public/js/frappe/form/control.js b/frappe/public/js/frappe/form/control.js index 40ef4fef8e..4cecb4b3bb 100644 --- a/frappe/public/js/frappe/form/control.js +++ b/frappe/public/js/frappe/form/control.js @@ -1256,15 +1256,6 @@ frappe.ui.form.ControlTable = frappe.ui.form.Control.extend({ this._super(); // add title if prev field is not column / section heading or html - var prev_fieldtype = ""; - if(this.df.idx > 1) { - var prev_fieldtype = cur_frm.meta.fields[this.df.idx - 2].fieldtype; - } - - if(frappe.model.layout_fields.indexOf(prev_fieldtype)===-1) { - $("