From c7154eed1693e84cbfce457e665c01861fb96ed7 Mon Sep 17 00:00:00 2001 From: Prateeksha Singh Date: Fri, 29 Jun 2018 13:17:10 +0530 Subject: [PATCH] [report] make run() agnostic of data source --- .../prepared_report/prepared_report.js | 29 ++---- frappe/desk/query_report.py | 45 +++++---- frappe/public/js/frappe/query_string.js | 10 ++ frappe/public/js/frappe/ui/page.js | 2 + .../js/frappe/views/reports/query_report.js | 96 ++++++++++--------- 5 files changed, 100 insertions(+), 82 deletions(-) diff --git a/frappe/core/doctype/prepared_report/prepared_report.js b/frappe/core/doctype/prepared_report/prepared_report.js index 4564175d09..885ff48000 100644 --- a/frappe/core/doctype/prepared_report/prepared_report.js +++ b/frappe/core/doctype/prepared_report/prepared_report.js @@ -4,28 +4,13 @@ frappe.ui.form.on('Prepared Report', { refresh: function(frm) { frm.add_custom_button(__("Show Report"), function() { - return frm.call({ - method: "frappe.core.doctype.prepared_report.prepared_report.get_report_attachment_data", - args: { - dn: frm.doc.name - }, - callback: function(r) { - if(r.message) { - let data = r.message; - frappe.flags.prepared_report = { - data: data, - name: frm.doc.name, - generated_on: frm.doc.report_end_time, - filters: JSON.parse(frm.doc.filters) - }; - - frappe.route_options = JSON.parse(JSON.parse(frm.doc.filters)); - - frappe.set_route("query-report", frm.doc.report_name); - } - } - }); + frappe.set_route( + "query-report", + frm.doc.report_name, + frappe.utils.make_query_string({ + prepared_report_name: frm.doc.name + }) + ); }); - } }); diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index ff349ec421..d0ff41f61d 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -150,25 +150,38 @@ def run(report_name, filters=None, user=None): raise_exception=True) if report.prepared_report: - doc_list = frappe.get_list("Prepared Report", filters={"status": "Completed", "ref_report_doctype": report}) - columns = [] - result = [] - if len(doc_list): - doc = frappe.get_doc("Prepared Report", doc_list[0]) - data = read_csv_content_from_attached_file(doc) - columns = data[0] - result = data[1:] - return { - "message": "Prepared Report", - "prepared_report": True, - "data": { - "columns": columns, - "result": result - } - } + if filters: + dn = json.loads(filters).get("prepared_report_name") + else: + dn = "" + return get_prepared_report_result(report, filters, dn) else: return generate_report_result(report, filters, user) +def get_prepared_report_result(report, filters, dn=""): + latest_report_data = {} + doc_list = frappe.get_list("Prepared Report", filters={"status": "Completed", "ref_report_doctype": report}) + + if len(doc_list): + if dn: + # Get specified dn + doc = frappe.get_doc("Prepared Report", dn) + else: + # Get latest + doc = frappe.get_doc("Prepared Report", doc_list[0]) + + data = read_csv_content_from_attached_file(doc) + latest_report_data = { + "columns": data[0], + "result": data[1:] + } + + return { + "prepared_report": True, + "data": latest_report_data, + "doc": doc + } + @frappe.whitelist() def export_query(): diff --git a/frappe/public/js/frappe/query_string.js b/frappe/public/js/frappe/query_string.js index 678e059a39..8dbf5589a4 100644 --- a/frappe/public/js/frappe/query_string.js +++ b/frappe/public/js/frappe/query_string.js @@ -4,6 +4,15 @@ function get_url_arg(name) { return get_query_params()[name] || ""; } +function get_query_string(url) { + if(url.includes("?")) { + return url.slice(url.indexOf("?")+1); + } + else { + return ""; + } +} + function get_query_params(query_string) { var query_params = {}; if (!query_string) { @@ -61,6 +70,7 @@ function make_query_string(obj, encode=true) { Object.assign(frappe.utils, { get_url_arg, + get_query_string, get_query_params, make_query_string }); \ No newline at end of file diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js index c0a2d6cef3..d543293f0a 100644 --- a/frappe/public/js/frappe/ui/page.js +++ b/frappe/public/js/frappe/ui/page.js @@ -416,6 +416,8 @@ frappe.ui.Page = Class.extend({ let $message = $(`${message}`); this.inner_toolbar.find('.inner-page-message').remove(); this.inner_toolbar.removeClass("hide").prepend($message); + + return $message; }, clear_inner_toolbar: function() { diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index a68084bd86..d7bba734f9 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -204,45 +204,63 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { } refresh() { - const flags = frappe.flags.prepared_report; + this.toggle_message(true); + let filters = this.get_filter_values(true); - if(flags) { - const prepared_data = flags.data; - this.init_report_with_data(prepared_data); - this.toggle_to_button(); - return; + let query = frappe.utils.get_query_string(frappe.get_route_str()); + + if(query) { + let obj = frappe.utils.get_query_params(query); + filters = Object.assign(filters || {}, obj); } - if(!this.prepared_report){ - this.toggle_message(true); - const filters = this.get_filter_values(true); - return new Promise(resolve => frappe.call({ - method: 'frappe.desk.query_report.run', - type: 'GET', - args: { - report_name: this.report_name, - filters: filters - }, - callback: resolve - })).then(r => { - this.init_report_with_data(r.message); - }); - } + + return new Promise(resolve => frappe.call({ + method: 'frappe.desk.query_report.run', + type: 'GET', + args: { + report_name: this.report_name, + filters: filters, + }, + callback: resolve + })).then(r => { + let data = r.message; + + if (data.prepared_report){ + this.prepared_report = true; + this.add_prepared_report_buttons(data.doc); + data = data.data; + } + this.toggle_message(false); + if (data.result && data.result.length) { + this.render_chart(data); + this.render_report(data); + } else { + this.toggle_nothing_to_show(true); + } + }); } - init_report_with_data(data) { - if (data.prepared_report){ - this.prepared_report = true; - this.toggle_to_button(); - data = data.data; - } - this.toggle_message(false); - if (data.result && data.result.length) { - this.render_chart(data); - this.render_report(data); - } else { - this.toggle_nothing_to_show(true); - } + add_prepared_report_buttons(doc) { + this.page.add_inner_button(__("Download Report"), function () { + frappe.call({ + method:"frappe.core.doctype.prepared_report.prepared_report.download_attachment", + args: {"dn": flags.name} + }); + }); + let $message = this.page.add_inner_message(__(` + This report was generated + on ${doc.report_end_time}. + See all. + `)); + + $message.on('click', () => { + frappe.route_options = { + report_name: doc.report_name, + filters: doc.filters + }; + frappe.set_route("List", "Prepared Report"); + }) } render_background_report() { @@ -630,16 +648,6 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { toggle_nothing_to_show(flag) { this.toggle_message(flag, __('Nothing to show')); } - toggle_to_button(){ - this.page.add_inner_button(__("Download Report"), function () { - frappe.call({ - method:"frappe.core.doctype.prepared_report.prepared_report.download_attachment", - args: {"dn": flags.name} - }); - }); - - this.page.add_inner_message(__("This report was generated on " + flags.generated_on)); - } toggle_message(flag, message) { if (flag) { this.$message.find('div').html(message);