Skip to content

Commit 9d1fe3c

Browse files
authored
Merge pull request #4657 from Cookiezaurs/master
[[core][report-manager] If a report is created for the dashboard widget, viewing leads to the dashboard with that widget.[SER-932]
2 parents 99f7ca8 + eee26b0 commit 9d1fe3c

File tree

2 files changed

+90
-3
lines changed

2 files changed

+90
-3
lines changed

api/utils/taskmanager.js

+73-1
Original file line numberDiff line numberDiff line change
@@ -741,8 +741,80 @@ taskmanager.getTableQueryResult = async function(options, callback) {
741741
}
742742
const count = await options.db.collection("long_tasks").count(options.query);
743743
return options.db.collection("long_tasks").find(options.query, options.projection).sort(sortBy).skip(skip).limit(limit).toArray((err, list) => {
744+
//check if there are any reports connected to widgets and change view links to correct dashboards if there are any.
744745
if (!err) {
745-
callback(null, {list, count});
746+
var ids_drill = [];
747+
var ids_formulas = [];
748+
for (var z = 0; z < list.length; z++) {
749+
if (list[z].linked_to) {
750+
list[z].dashboard_report = true;
751+
if (list[z].linked_to._issuer === "wqm:drill") {
752+
ids_drill.push(list[z]._id);
753+
}
754+
755+
if (list[z].linked_to._issuer === "wqm:formulas") {
756+
ids_formulas.push(list[z]._id);
757+
}
758+
}
759+
}
760+
if (ids_drill.length > 0 || ids_formulas.length > 0) {
761+
var query = {};
762+
if (ids_formulas.length > 0 && ids_drill.length > 0) {
763+
query.$or = [{"cmetrics": {$in: ids_formulas}}, {"drill_report": {$in: ids_drill}}];
764+
}
765+
else if (ids_formulas.length > 0) {
766+
query.cmetrics = {$in: ids_formulas};
767+
}
768+
else if (ids_drill.length > 0) {
769+
query.drill_report = {$in: ids_drill};
770+
}
771+
common.db.collection("widgets").aggregate([
772+
{"$match": query},
773+
{"$project": {"wid": {"$toString": "$_id"}, "drill_report": "$drill_report", "cmetrics": "$cmetrics"}},
774+
{"$unionWith": {"coll": "dashboards", "pipeline": [{"$project": {"did": "$_id", "wid": "$widgets"}}, {"$unwind": "$wid"}, {"$project": {"did": "$did", "wid": {"$toString": "$wid"}}}]}},
775+
{"$group": {"_id": "$wid", "did": {"$push": "$did"}, "drill_report": {"$push": "$drill_report"}, "cmetrics": {"$push": "$cmetrics"}}}
776+
], function(err1, res) {
777+
if (err1) {
778+
log.e(err1);
779+
}
780+
if (res) {
781+
var map_report = {};
782+
for (var k = 0; k < res.length; k++) {
783+
if (Array.isArray(res[k].did)) {
784+
res[k].did = res[k].did[0];
785+
}
786+
787+
if (Array.isArray(res[k].drill_report)) {
788+
res[k].drill_report = res[k].drill_report[0];
789+
}
790+
791+
if (Array.isArray(res[k].cmetrics)) {
792+
res[k].cmetrics = res[k].cmetrics[0];
793+
}
794+
if (res[k].drill_report && res[k].drill_report.length > 0) {
795+
for (var p = 0; p < res[k].drill_report.length; p++) {
796+
map_report[res[k].drill_report[p]] = res[k].did;
797+
}
798+
}
799+
if (res[k].cmetrics && res[k].cmetrics.length > 0) {
800+
for (var p2 = 0; p2 < res[k].cmetrics.length; p2++) {
801+
map_report[res[k].cmetrics[p2]] = res[k].did;
802+
}
803+
}
804+
}
805+
for (var kk = 0; kk < list.length; kk++) {
806+
if (map_report[list[kk]._id]) {
807+
list[kk].view = "#/custom/" + map_report[list[kk]._id];
808+
list[kk].have_dashboard_widget = true;
809+
}
810+
}
811+
}
812+
callback(null, {list, count});
813+
});
814+
}
815+
else {
816+
callback(null, {list, count});
817+
}
746818
}
747819
else {
748820
callback(err, {});

frontend/express/public/core/report-manager/javascripts/countly.views.js

+17-2
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,17 @@
320320
}
321321
},
322322
isReadyForView: function(row) {
323-
return row.view && row.hasData;
323+
if (row.linked_to) {
324+
if (row.have_dashboard_widget) {
325+
return true;
326+
}
327+
else {
328+
return false;
329+
}
330+
}
331+
else {
332+
return row.view && row.hasData;
333+
}
324334
},
325335
isReadyForRerun: function(row) {
326336
return row.status !== "running" && row.status !== "rerunning" && row.request;
@@ -383,7 +393,12 @@
383393
else if (command === "view-task") {
384394
self.$emit("view-task", row);
385395
if (!this.disableAutoNavigationToTask) {
386-
window.location = row.view + id;
396+
if (row.dashboard_report) {
397+
window.location = row.view;
398+
}
399+
else {
400+
window.location = row.view + id;
401+
}
387402
}
388403
}
389404
else if (command === "download-task") {

0 commit comments

Comments
 (0)