generate prepared button report

This commit is contained in:
shriharishastry 2018-06-29 10:54:22 +05:30
commit 301a66eb68
5 changed files with 47 additions and 34 deletions

View file

@ -14,9 +14,13 @@ frappe.ui.form.on('Prepared Report', {
let data = r.message;
frappe.flags.prepared_report = {
data: data,
name: frm.doc.name
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);
}
}

View file

@ -70,7 +70,7 @@ def get_report_attachment_data(dn):
return {
'columns': data[0],
'result': data[-1:]
'result': data[1:]
}
@frappe.whitelist()

View file

@ -153,6 +153,7 @@ def run(report_name, filters=None, user=None):
doc_list = frappe.get_list("Prepared Report", filters={"status": "Completed", "ref_report_doctype": report})
columns = []
result = []
doc = {}
if len(doc_list):
doc = frappe.get_doc("Prepared Report", doc_list[0])
data = read_csv_content_from_attached_file(doc)
@ -163,8 +164,9 @@ def run(report_name, filters=None, user=None):
"prepared_report": True,
"data": {
"columns": columns,
"result": result
}
"result": result,
},
"prepared_doc": doc
}
else:
return generate_report_result(report, filters, user)

View file

@ -364,7 +364,7 @@ frappe.ui.Page = Class.extend({
* @param {object} action - function to be called when button is clicked
* @param {string} group - Label of the group button
*/
add_inner_button: function(label, action, group) {
add_inner_button: function(label, action, group, type="default") {
var me = this;
let _action = function() {
let btn = $(this);
@ -384,7 +384,7 @@ frappe.ui.Page = Class.extend({
} else {
var button = this.inner_toolbar.find('button[data-label="'+encodeURIComponent(label)+'"]');
if( button.length == 0 ) {
return $('<button data-label="'+encodeURIComponent(label)+'" class="btn btn-default btn-xs" style="margin-left: 10px;">'+__(label)+'</btn>')
return $('<button data-label="'+encodeURIComponent(label)+`" class="btn btn-${type} btn-xs" style="margin-left: 10px;">`+__(label)+'</btn>')
.on("click", _action)
.appendTo(this.inner_toolbar.removeClass("hide"));
} else {
@ -412,6 +412,12 @@ frappe.ui.Page = Class.extend({
}
},
add_inner_message: function(message) {
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);
},
clear_inner_toolbar: function() {
this.inner_toolbar.empty().addClass("hide");
},

View file

@ -182,6 +182,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
set_route_filters() {
if(frappe.route_options) {
const fields = Object.keys(frappe.route_options);
const filters_to_set = this.filters.filter(f => fields.includes(f.df.fieldname));
const promises = filters_to_set.map(f => {
@ -204,8 +205,9 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
refresh() {
const flags = frappe.flags.prepared_report;
if(flags) {
const prepared_data = flags.data
const prepared_data = flags.data;
this.init_report_with_data(prepared_data);
this.toggle_to_button();
return;
@ -240,30 +242,8 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
} else {
this.toggle_nothing_to_show(true);
}
}
render_background_report() {
this.toggle_message(true);
let mandatory = this.filters.filter(f => f.df.reqd);
let missing_mandatory = mandatory.filter(f => !f.get_value());
if (!missing_mandatory.length){
let filters = this.get_filter_values(true);
return new Promise(resolve => frappe.call({
method: 'frappe.desk.query_report.background_enqueue_run',
type: 'GET',
args: {
report_name: this.report_name,
filters: filters
},
callback: resolve
})).then(r => {
const data = r.message;
this.toggle_nothing_to_show(true);
frappe.msgprint("Prepared report initiated successfully. Track and access results <a class='text-info' target='_blank' href="+data.redirect_url+">here</a>", "Notification");
});
}
}
render_report(data) {
this.columns = this.prepare_columns(data.columns);
this.data = this.prepare_data(data.result);
@ -630,12 +610,33 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
}
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}
});
});
frappe.call({
method:"frappe.core.doctype.prepared_report.prepared_report.download_attachment",
args: {"dn": flags.name}
});
});
this.page.add_inner_button(__("Generate Prepared Report"), () => {
let mandatory = this.filters.filter(f => f.df.reqd);
let missing_mandatory = mandatory.filter(f => !f.get_value());
if (!missing_mandatory.length){
let filters = this.get_filter_values(true);
return new Promise(resolve => frappe.call({
method: 'frappe.desk.query_report.background_enqueue_run',
type: 'GET',
args: {
report_name: this.report_name,
filters: filters
},
callback: resolve
})).then(r => {
const data = r.message;
frappe.msgprint("Prepared report initiated successfully. Track and access results <a class='text-info' target='_blank' href="+data.redirect_url+">here</a>", "Notification");
this.toggle_nothing_to_show(true);
});
}
});
this.page.add_inner_message(__("This report was generated on " + flags.generated_on));
}
toggle_message(flag, message) {
if (flag) {