diff --git a/frappe/core/doctype/prepared_report/prepared_report.js b/frappe/core/doctype/prepared_report/prepared_report.js index 3081d76030..587bf2b5c3 100644 --- a/frappe/core/doctype/prepared_report/prepared_report.js +++ b/frappe/core/doctype/prepared_report/prepared_report.js @@ -12,7 +12,10 @@ frappe.ui.form.on('Prepared Report', { callback: function(r) { if(r.message) { let data = r.message; - frappe.flags.prepared_report_data = data; + frappe.flags.prepared_report = { + data: data, + name: frm.doc.name + }; frappe.set_route("query-report", frm.doc.report_name); } diff --git a/frappe/core/doctype/prepared_report/prepared_report.py b/frappe/core/doctype/prepared_report/prepared_report.py index 49b2f30575..f73e9de7f9 100644 --- a/frappe/core/doctype/prepared_report/prepared_report.py +++ b/frappe/core/doctype/prepared_report/prepared_report.py @@ -13,7 +13,8 @@ from frappe.utils.background_jobs import enqueue from frappe.desk.query_report import generate_report_result, get_columns_dict from frappe.utils.file_manager import save_file from frappe.utils.csvutils import to_csv, read_csv_content_from_attached_file - +from frappe.desk.form.load import get_attachments +from frappe.utils.file_manager import download_file class PreparedReport(Document): def before_insert(self): @@ -70,3 +71,9 @@ def get_report_attachment_data(dn): 'columns': data[0], 'result': data[-1:] } + +@frappe.whitelist() +def download_attachment(dn): + doc = frappe.get_doc("Prepared Report", dn) + attachment = get_attachments("Prepared Report", dn)[0] + download_file(attachment.file_url) diff --git a/frappe/core/doctype/system_settings/system_settings.json b/frappe/core/doctype/system_settings/system_settings.json index d70bdd413a..0f036196f8 100644 --- a/frappe/core/doctype/system_settings/system_settings.json +++ b/frappe/core/doctype/system_settings/system_settings.json @@ -1361,6 +1361,37 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fieldname": "use_socketio_to_upload_file", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Use socketio to upload file", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "has_web_view": 0, diff --git a/frappe/public/js/frappe/socketio_client.js b/frappe/public/js/frappe/socketio_client.js index 2f5067ab56..3bb8ea5e14 100644 --- a/frappe/public/js/frappe/socketio_client.js +++ b/frappe/public/js/frappe/socketio_client.js @@ -282,6 +282,22 @@ frappe.socketio.SocketIOUploader = class SocketIOUploader { frappe.throw(__('File Upload in Progress. Please try again in a few moments.')); } + frappe.model.get_value( + 'System Settings', + {'name': 'System Settings'}, + 'use_socketio_to_upload_file', + function(d) { + if (d.use_socketio_to_upload_file==1){ + if (fallback) { + fallback(); + return; + } else { + frappe.throw(__('Socketio is not connected. Cannot upload')); + } + } + } + ) + if (!frappe.socketio.socket.connected) { if (fallback) { fallback(); @@ -345,4 +361,4 @@ frappe.socketio.SocketIOUploader = class SocketIOUploader { } } } -} \ No newline at end of file +} diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index 7699090ac8..5659277485 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -203,9 +203,16 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { } refresh() { - const prepared_data = frappe.flags.prepared_report_data - if(prepared_data) { + const flags = frappe.flags.prepared_report; + if(flags) { + const prepared_data = flags.data this.init_report_with_data(prepared_data); + this.downloadifypage.add_inner_button(__("Download Report"), function () { + frappe.call({ + method:"frappe.core.doctype.prepared_report.prepared_report.download_attachment", + args: {"dn": flags.name} + }); + }); return; } if(!this.prepared_report){ @@ -265,7 +272,6 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { this.columns = this.prepare_columns(data.columns); this.data = this.prepare_data(data.result); - console.log(data.columns.slice(0, 2), data); this.tree_report = this.data.some(d => 'indent' in d); const columns = this.get_visible_columns(); @@ -275,7 +281,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { } this.datatable = new DataTable(this.$report[0], { - columns: columns.slice(0, 2), + columns: columns, data: this.data, inlineFilters: true, treeView: this.tree_report,