[report] make run() agnostic of data source
This commit is contained in:
parent
658d463b58
commit
c7154eed16
5 changed files with 100 additions and 82 deletions
|
|
@ -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
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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():
|
||||
|
|
|
|||
|
|
@ -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
|
||||
});
|
||||
|
|
@ -416,6 +416,8 @@ frappe.ui.Page = Class.extend({
|
|||
let $message = $(`<span class='inner-page-message text-muted small'>${message}</div>`);
|
||||
this.inner_toolbar.find('.inner-page-message').remove();
|
||||
this.inner_toolbar.removeClass("hide").prepend($message);
|
||||
|
||||
return $message;
|
||||
},
|
||||
|
||||
clear_inner_toolbar: function() {
|
||||
|
|
|
|||
|
|
@ -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 <a href=#Form/Prepared%20Report/${doc.name}>generated</a>
|
||||
on ${doc.report_end_time}.
|
||||
<a class="generated_report_list">See all</a>.
|
||||
`));
|
||||
|
||||
$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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue