diff --git a/frappe/patches.txt b/frappe/patches.txt index d8ed1fd82b..c3799ccca9 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -231,4 +231,5 @@ frappe.patches.v10_0.enhance_security frappe.patches.v11_0.multiple_references_in_events frappe.patches.v11_0.set_allow_self_approval_in_workflow frappe.patches.v11_0.migrate_report_settings_for_new_listview -frappe.patches.v11_0.delete_all_prepared_reports \ No newline at end of file +frappe.patches.v11_0.delete_all_prepared_reports +frappe.patches.v11_0.fix_order_by_in_reports_json \ No newline at end of file diff --git a/frappe/patches/v11_0/fix_order_by_in_reports_json.py b/frappe/patches/v11_0/fix_order_by_in_reports_json.py new file mode 100644 index 0000000000..28558ef4fb --- /dev/null +++ b/frappe/patches/v11_0/fix_order_by_in_reports_json.py @@ -0,0 +1,22 @@ +import frappe, json + +def execute(): + reports_data = frappe.get_all('Report', + filters={'json': ['not like', '%%%"order_by": "`tab%%%'], + 'report_type': 'Report Builder', 'is_standard': 'No'}, fields=['name']) + + for d in reports_data: + doc = frappe.get_doc('Report', d.get('name')) + json_data = json.loads(doc.get('json')) + + parts = [] + if ('order_by' in json_data) and ('.' in json_data.get('order_by')): + parts = json_data.get('order_by').split('.') + + sort_by = parts[1].split(' ') + + json_data['order_by'] = '`tab{0}`.`{1}`'.format(doc.ref_doctype, sort_by[0]) + json_data['order_by'] += ' {0}'.format(sort_by[1]) if len(sort_by) > 1 else '' + + doc.json = json.dumps(json_data) + doc.save() diff --git a/frappe/utils/data.py b/frappe/utils/data.py index 8f5961d775..a09f9a1354 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -824,7 +824,8 @@ def get_filter(doctype, f): if len(f) == 3: f = (doctype, f[0], f[1], f[2]) - + elif len(f) > 4: + f = f[0:4] elif len(f) != 4: frappe.throw(frappe._("Filter must have 4 values (doctype, fieldname, operator, value): {0}").format(str(f)))