diff --git a/frappe/public/js/frappe/views/query_report.js b/frappe/public/js/frappe/views/query_report.js index 5d2609f111..c5fbd2e5a6 100644 --- a/frappe/public/js/frappe/views/query_report.js +++ b/frappe/public/js/frappe/views/query_report.js @@ -146,11 +146,13 @@ frappe.views.QueryReport = Class.extend({ } var data = []; - $.each(me.data, function(i, d) { + // get filtered data + for (var i=0, l=me.dataView.getLength(); i") + .css("padding-left", (cint(dataContext.indent) * 21) + "px") + .html(value); + + var idx = me.dataView.getIdxById(dataContext.id); + var show_toggle = me.data[idx + 1] && (me.data[idx + 1].indent > me.data[idx].indent) + + if (dataContext[me.name_field] && show_toggle) { + $('') + .addClass(dataContext._collapsed ? "expand" : "collapse") + .css("margin-right", "7px") + .prependTo($span); + } + + return $span.wrap("

").parent().html(); + }, compare_values: function(value, filter, columnDef) { var invert = false; @@ -520,6 +604,32 @@ frappe.views.QueryReport = Class.extend({ me.dataView.refresh(); }); }, + setup_tree: function() { + // set these in frappe.query_reports[report_name] + // "tree": true, + // "name_field": "account", + // "parent_field": "parent_account", + // "initial_depth": 3 + + // also set "is_tree" true for ColumnDef + + var me = this; + this.grid.onClick.subscribe(function (e, args) { + if ($(e.target).hasClass("toggle")) { + var item = me.dataView.getItem(args.row); + if (item) { + if (!item._collapsed) { + item._collapsed = true; + } else { + item._collapsed = false; + } + + me.dataView.updateItem(item.id, item); + } + e.stopImmediatePropagation(); + } + }); + }, export_report: function() { if(!frappe.model.can_export(this.report_doc.ref_doctype)) { msgprint(_("You are not allowed to export this report"));