@@ -741,8 +741,80 @@ taskmanager.getTableQueryResult = async function(options, callback) {
741
741
}
742
742
const count = await options . db . collection ( "long_tasks" ) . count ( options . query ) ;
743
743
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.
744
745
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
+ }
746
818
}
747
819
else {
748
820
callback ( err , { } ) ;
0 commit comments