daa479000d679c3d62b07b82545eaa99138fc391
[portal/sdk.git] /
1 appDS2.controller("reportRunController", ['$scope','$rootScope','$routeParams','$http','dateFilter', '$window', '$timeout', 'rowSorter','$modal',
2                                        function ($scope,$rootScope,$routeParams,$http,dateFilter,$window,$timeout,rowSorter,$modal) { 
3         $scope.dateformat = "MM/dd/yyyy";
4         $scope.datetimeformat = "MM/dd/yyyy hh:mm a";
5         $scope.showFormFields =  false;
6         $scope.showGrid =  false;
7         $scope.showChart =  false;
8         $scope.showBackButton = false;
9         $scope.reportData = {};
10         $scope.reportData.allowEdit = false;
11         $scope.formFieldSelectedValues = {};
12         $scope.showFormFieldIds = false;
13     $scope.showFormFieldId = {
14             value: false
15         };
16         $scope.isInProgress = true;
17         $scope.showLoader=false;
18         if($routeParams.reportUrlParams.indexOf("parent___params===")>-1) {
19                 $scope.showBackButton = true;
20                 $scope.parentReportUrlParams = $routeParams.reportUrlParams.substring($routeParams.reportUrlParams.indexOf("parent___params===")+18);
21                 $scope.currentReportUrlParams = $routeParams.reportUrlParams.substring(0,$routeParams.reportUrlParams.indexOf("parent___params==="));
22         } else {
23                 $scope.currentReportUrlParams = $routeParams.reportUrlParams;
24         }
25         // console.log($routeParams.reportUrlParams);
26         var parseQueryString = function( queryString ) {
27             var params = {}, queries, temp, i, l;
28             // Split into key/value pairs
29             queries = queryString.split("&");
30             // Convert the array of strings into an object
31             for ( i = 0, l = queries.length; i < l; i++ ) {
32                 temp = queries[i].split('=');
33                 //console.log(temp[0]);
34                 //console.log(temp[0] != "refresh");
35                 if(temp[0] && temp[0] != "refresh")
36                         params[temp[0]] = temp[1];
37             }
38             return params;
39         };
40         
41         var convertQueryString = function(queryString) {
42                 var keys = ""; var str = "";
43                 keys = Object.keys(queryString);
44                 //console.log(keys);
45                 for ( i = 0, l = keys.length; i < l; i++ ) {
46                         str += keys[i]+"="+queryString[keys[i]] + "&";
47                         
48                 }
49                 return str;
50                 //queryString = 
51         }
52         
53         
54         
55         $scope.backToParentReport = function (){
56                 $window.location.href = "report#/report_run/"+$scope.parentReportUrlParams
57         }
58         
59         $scope.urlParams = parseQueryString($scope.currentReportUrlParams);
60         
61         $scope.reportChartURL = 'report#/report_chart/'+$scope.urlParams.c_master;
62         
63         $scope.reportEditURL = 'report#/report_wizard/'+$scope.urlParams.c_master;
64
65         
66         $http.get('raptor.htm?action=report.run.container&'+$scope.currentReportUrlParams).then(
67                 function(response){
68                         // console.log(response);
69                         $scope.isInProgress = false;
70                         if(response.data.errormessage!=null && response.data.errormessage!=''){
71                                 $scope.errorPopUp(response.data.errormessage);
72                         }else{
73                                 $scope.reportData = response.data;
74                                 // console.log('reportData report run container response',$scope.reportData);
75                                 if ($scope.reportData.reportTitle) {
76                                         $scope.reportData.reportHeading = $scope.reportData.reportTitle;
77                                         if ($scope.reportData.reportSubTitle) {
78                                                 $scope.reportData.reportSubTitle = $scope.reportData.reportSubTitle;
79                                         }
80                                 }
81                                 else
82                                         $scope.reportData.reportHeading = $scope.reportData.reportName;
83                                 if(!$scope.urlParams.hideChart && $scope.reportData.chartAvailable && $scope.reportData.totalRows>1){
84                                 // console.log('raptor.htm?action=chart.run&'+convertQueryString($scope.urlParams));
85                                 $http.get('raptor.htm?action=chart.run&'+convertQueryString($scope.urlParams)).then(
86                                                 function(response){
87                                                   $scope.showChart =  true;
88                                                   document.getElementById('chartiframe').contentWindow.document.write(response.data);
89                                                   document.getElementById('chartiframe').contentWindow.document.close();
90                                                 });
91                         }
92                 
93                         if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields){
94                                   $scope.showFormFields = true;
95                             }
96                         }
97                         
98                 });
99     $scope.getFormFieldSelectedValuesAsURL = function(){
100         var formFieldsUrl = '';
101         $scope.reportData.formFieldList.forEach(function(formField) {
102                         if(formField.fieldType==='LIST_BOX') {
103                                 if($scope.formFieldSelectedValues && $scope.formFieldSelectedValues[formField.fieldId] ) {
104                                         formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId]+'&';
105                                 }
106                         } else if(formField.fieldType==='LIST_MULTI_SELECT') {
107                                 if($scope.formFieldSelectedValues[formField.fieldId].length >0) {
108                                         for (var i = 0; i < $scope.formFieldSelectedValues[formField.fieldId].length; i++) {
109                                                 if($scope.formFieldSelectedValues[formField.fieldId][i].defaultValue){
110                                                   formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId][i].value+'&';
111                                                 }
112                                     }
113                                 }
114                         } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'DATE'){
115                                 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.dateformat)+'&';
116                         } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'TIMESTAMP_MIN'){
117                                 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.datetimeformat)+'&';
118                         } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId] != ''){
119                                 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId]+'&';
120                         }
121         });
122         //formFieldsUrl = str.slice(0, -1); 
123         return formFieldsUrl;
124
125     }
126
127     $scope.runReport = function(pagination){
128         $scope.showLoader=true;
129         var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
130                 /*if ($scope.reportData.reportTitle)
131                         $scope.reportData.reportHeading = $scope.reportData.reportTitle;
132                 else
133                         $scope.reportData.reportHeading = $scope.reportData.reportName;*/
134                         
135         // console.log("pagination");
136         if(!pagination) {
137                 //console.log("refreshed ...");
138                 $scope.gridOptions.pageNumber = 1;
139                 paginationOptions.pageNumber = 1;
140                 paginationOptions.pageSize = $scope.reportData.pageSize;
141                 //console.log($scope.gridOptions);
142                 $scope.gridOptions.paginationCurrentPage = 1;
143                   $scope.gridOptions.paginationPageSizes= [$scope.reportData.pageSize];
144                   $scope.gridOptions.paginationPageSize= $scope.reportData.pageSize;
145                   if($scope.reportData.totalRows<14){
146                           $scope.gridHeight = ($scope.reportData.totalRows+7)*30+'px';
147                   } else{
148                           $scope.gridHeight = '400px';
149                   }
150                   $scope.gridOptions.totalItems = $scope.reportData.totalRows;
151                   $scope.gridOptions.data= $scope.reportData.reportDataRows;
152                   $scope.gridOptions.exporterPdfHeader.text= $scope.reportData.reportName;
153
154         }
155         $scope.currentReportUrlParams = 'c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'&display_content=Y&r_page='+(paginationOptions.pageNumber-1);
156         // console.log('raptor.htm?action=report.run.container&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1));
157           $http.get('raptor.htm?action=report.run.container&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then(
158                 function(response){
159                         $scope.showLoader=false;
160                         $scope.reportData = response.data;
161                         if ($scope.reportData.reportTitle) {
162                                         $scope.reportData.reportHeading = $scope.reportData.reportTitle;
163                                         if ($scope.reportData.reportSubTitle) {
164                                                 $scope.reportData.reportSubTitle = $scope.reportData.reportSubTitle;
165                                         }
166                                 }
167                                 else
168                                         $scope.reportData.reportHeading = $scope.reportData.reportName;
169                                 
170                         if($scope.reportData.errormessage) {
171                                 //console.log($scope.reportData);
172                                 var stacktraceFP = $scope.reportData.stacktrace.substring(0, $scope.reportData.stacktrace.indexOf(":")+1);
173                                 document.getElementById('errorDiv').innerHTML = stacktraceFP + " " + $scope.reportData.errormessage;
174                                 //console.log(document.getElementById('errorDiv').innerHtml);
175                                 //console.log(stacktraceFP + " " + $scope.reportData.errormessage);
176                         }                  
177                     if(!pagination) {   
178                       if(!$scope.urlParams.hideChart && $scope.reportData.chartAvailable && $scope.reportData.totalRows>1){
179                                 // console.log('raptor.htm?action=chart.run&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1));
180                                 $http.get('raptor.htm?action=chart.run&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then(
181                                                 function(response) {
182                                                         // console.log(response.data);
183                                                         $scope.showChart =  true;
184                                                         // console.log('response.data',response.data);
185                                                         document.getElementById('chartiframe').contentWindow.document.write(response.data);
186                                                         document.getElementById('chartiframe').contentWindow.document.close();
187                                                 });
188                         } else {
189                                                         $scope.showChart =  false;
190                         }
191                     }
192                         if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields && !$scope.reportData.hideFormFieldsAfterRun){
193                                 $scope.showFormFields = true;
194                                 } else {
195                                         $scope.showFormFields = false;
196                                 }
197                 });
198     };
199
200           var paginationOptions = {
201                             pageNumber: 1,
202                             pageSize: 5,
203                             sort: null
204           };
205           
206                 var correctTotalPaginationTemplate = 
207                           //same as normal template, but fixed totals:  {{(((grid.options.paginationCurrentPage-1)*grid.options.paginationPageSize)+1)}}   {{(grid.options.paginationCurrentPage*grid.options.paginationPageSize>grid.options.totalItems?grid.options.totalItems:grid.options.paginationCurrentPage*grid.options.paginationPageSize)}}
208                           "<div role=\"contentinfo\" class=\"ui-grid-pager-panel\" ui-grid-pager ng-show=\"grid.options.enablePaginationControls\"><div role=\"navigation\" class=\"ui-grid-pager-container\"><div role=\"menubar\" class=\"ui-grid-pager-control\"><button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-first\" ui-grid-one-bind-title=\"aria.pageToFirst\" ui-grid-one-bind-aria-label=\"aria.pageToFirst\" ng-click=\"pageFirstPageClick()\" ng-disabled=\"cantPageBackward()\"><div class=\"first-triangle\"><div class=\"first-bar\"></div></div></button> <button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-previous\" ui-grid-one-bind-title=\"aria.pageBack\" ui-grid-one-bind-aria-label=\"aria.pageBack\" ng-click=\"pagePreviousPageClick()\" ng-disabled=\"cantPageBackward()\"><div class=\"first-triangle prev-triangle\"></div></button> <input type=\"number\" ui-grid-one-bind-title=\"aria.pageSelected\" ui-grid-one-bind-aria-label=\"aria.pageSelected\" class=\"ui-grid-pager-control-input\" ng-model=\"grid.options.paginationCurrentPage\" min=\"1\" max=\"{{ paginationApi.getTotalPages() }}\" required> <span class=\"ui-grid-pager-max-pages-number\" ng-show=\"paginationApi.getTotalPages() > 0\"><abbr ui-grid-one-bind-title=\"paginationOf\">/</abbr> {{ paginationApi.getTotalPages() }}</span> <button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-next\" ui-grid-one-bind-title=\"aria.pageForward\" ui-grid-one-bind-aria-label=\"aria.pageForward\" ng-click=\"pageNextPageClick()\" ng-disabled=\"cantPageForward()\"><div class=\"last-triangle next-triangle\"></div></button> <button type=\"button\" role=\"menuitem\" class=\"ui-grid-pager-last\" ui-grid-one-bind-title=\"aria.pageToLast\" ui-grid-one-bind-aria-label=\"aria.pageToLast\" ng-click=\"pageLastPageClick()\" ng-disabled=\"cantPageToLast()\"><div class=\"last-triangle\"><div class=\"last-bar\"></div></div></button></div><div class=\"ui-grid-pager-row-count-picker\" ng-if=\"grid.options.paginationPageSizes.length > 1\"><select ui-grid-one-bind-aria-labelledby-grid=\"'items-per-page-label'\" ng-model=\"grid.options.paginationPageSize\" ng-options=\"o as o for o in grid.options.paginationPageSizes\"></select><span ui-grid-one-bind-id-grid=\"'items-per-page-label'\" class=\"ui-grid-pager-row-count-label\">&nbsp;{{sizesLabel}}</span></div><span ng-if=\"grid.options.paginationPageSizes.length <= 1\" class=\"ui-grid-pager-row-count-label\">{{grid.options.paginationPageSize}}&nbsp;{{sizesLabel}}</span></div><div class=\"ui-grid-pager-count-container\"><div class=\"ui-grid-pager-count\"><span ng-show=\"grid.options.totalItems > 0\">{{(((grid.options.paginationCurrentPage-1)*grid.options.paginationPageSize)+1)}} <abbr ui-grid-one-bind-title=\"paginationThrough\">-</abbr> {{(grid.options.paginationCurrentPage*grid.options.paginationPageSize>grid.options.totalItems?grid.options.totalItems:grid.options.paginationCurrentPage*grid.options.paginationPageSize)}} {{paginationOf}} {{grid.options.totalItems}} {{totalItemsLabel}}</span></div></div></div>";
209
210           $scope.gridOptions = {
211                                 pageNumber: 1,
212                                 sort : null,
213                             paginationPageSizes: [5],
214                             paginationPageSize: 5,
215                                 paginationTemplate: correctTotalPaginationTemplate,
216                                 columnDefs: [],
217                                 data: [],
218                                 enableSorting: true,
219                             enableGridMenu: true,
220                             enableSelectAll: true,
221                                 gridMenuCustomItems : [
222                                         {       title : 'All Reports',
223                                                 action : function($event) {
224                                                         $window.open('report.htm','_self');
225                                                         },      order : 210     },
226                                         {       title : 'Edit Report',
227                                                 action : function($event) {
228                                                         $window.open($scope.reportEditURL,'_self');
229                                                         },      order : 211     },
230                                         /*{     title : 'Export All data as Excel 2007',
231                                                 action : function($event) {
232                                                         $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.excel2007.session','_self');
233                                                         },      order : 212     },*/
234                                         {       title : 'Export All data as Excel',
235                                                 action : function($event) {
236                                                         $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.excel.session','_self');
237                                                         },      order : 213 },
238                                         {       title : 'Export All data as CSV',
239                                                 action : function($event) {
240                                                         $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.csv.session','_self');
241                                                         },      order : 214     },
242                                         {       title : 'Export All data as PDF',
243                                                 action : function($event) {
244                                                         $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.pdf.session','_self');
245                                                         },      order : 215     } ],
246                             exporterMenuPdf: false,
247                         exporterMenuCsv: false,
248                             exporterCsvFilename: 'myFile.csv',
249                             exporterPdfDefaultStyle: {fontSize: 9},
250                             exporterPdfTableStyle: {margin: [30, 30, 30, 30]},
251                             exporterPdfTableHeaderStyle: {fontSize: 10, bold: true, italics: true, color: 'red'},
252                             exporterPdfHeader: { text: "My Header", style: 'headerStyle' },
253                             exporterPdfFooter: function ( currentPage, pageCount ) {
254                               return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' };
255                             },
256                             exporterPdfCustomFormatter: function ( docDefinition ) {
257                               docDefinition.styles.headerStyle = { fontSize: 22, bold: true };
258                               docDefinition.styles.footerStyle = { fontSize: 10, bold: true };
259                               return docDefinition;
260                             },
261                             exporterPdfOrientation: 'portrait',
262                             exporterPdfPageSize: 'LETTER',
263                             exporterPdfMaxGridWidth: 500,
264                             exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")),
265                             onRegisterApi: function(gridApi) {
266                                 $scope.gridApi = gridApi;
267                                 gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {
268                                   paginationOptions.pageNumber = newPage;
269                                   paginationOptions.pageSize = pageSize;
270                                   $scope.runReport(true);
271                                 });
272                               }
273                           };
274  
275           $scope.uiGridRefresh = function(){
276                   var columnDefsArray = [];
277                   var columnFreezeEndColumn = $scope.reportData.colIdxTobeFreezed;
278                   var doColumnNeedToFreeze = false;
279                   if(columnFreezeEndColumn && columnFreezeEndColumn.length>0) {
280                           doColumnNeedToFreeze = true;
281                   }
282                   $scope.reportData.reportDataColumns.forEach(function(entry) {
283                           var tempColumnDef = { displayName: entry.columnTitle, field: entry.colId, enableSorting: entry.sortable,
284                                           sortingAlgorithm: function(a, b) {
285                                          return rowSorter.sortAlpha(a.displayValue, b.displayValue);
286                                           },
287                                           cellTemplate: '<div  class="ui-grid-cell-contents"  style="text-align:{{COL_FIELD.alignment}};" title="TOOLTIP">   '+
288                                                  '  <div ng-if="!COL_FIELD.drillDownURL || COL_FIELD.drillDownURL==\'\'">{{COL_FIELD.displayValue}}</div>' +
289                                  '  <a ng-if="COL_FIELD.drillDownURL && COL_FIELD.drillDownURL!=\'\'" ng-href="{{COL_FIELD.drillDownURL}}&parent___params==={{grid.appScope.currentReportUrlParams}}" >{{COL_FIELD.displayValue}}</a>' +
290                                                   '</div>'};
291                           if(entry.columnWidth && entry.columnWidth!='null' && entry.columnWidth!='pxpx' && entry.columnWidth!='nullpx' && entry.columnWidth!='nullpxpx'){
292                                   tempColumnDef['minWidth'] = entry.columnWidth.substring(0, entry.columnWidth.length - 2);
293                           } else {
294                                   tempColumnDef['minWidth'] = '100';
295                           }
296                           if(doColumnNeedToFreeze) {
297                                   tempColumnDef['pinnedLeft']= true;
298                                   if(columnFreezeEndColumn === entry.colId){
299                                           doColumnNeedToFreeze = false;
300                                   }
301                           }
302                           columnDefsArray.push(tempColumnDef);
303                   }); 
304           
305                   $scope.gridOptions.paginationPageSizes= [$scope.reportData.pageSize];
306                   $scope.gridOptions.paginationPageSize= $scope.reportData.pageSize;
307                   if($scope.reportData.totalRows<14){
308                           $scope.gridHeight = ($scope.reportData.totalRows+5)*30+'px';
309                   }else{
310                           $scope.gridHeight = '400px';
311                   }
312                   $scope.gridOptions.totalItems = $scope.reportData.totalRows;
313                   $scope.gridOptions.columnDefs= columnDefsArray;
314                   $scope.gridOptions.data= $scope.reportData.reportDataRows;
315                   $scope.gridOptions.exporterPdfHeader.text= $scope.reportData.reportName;
316           };
317
318                 $scope.$watch("reportData",function(newValue,oldValue) {
319                  if(!$scope.urlParams.hideGrid){
320                   if($scope.reportData){
321                 if($scope.reportData.displayData && $scope.reportData.reportDataColumns){
322                                 $scope.showGrid =  true;
323                         $scope.uiGridRefresh();
324                         }
325               }
326                  }
327                 });
328
329                 $scope.triggerOtherFormFields = function(){
330                         // console.log("report_run");
331                 var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
332                 $http.get('raptor.htm?action=report.formfields.run.container&c_master='+$scope.reportData.reportID+'&'+formFieldsUrl).then(
333                                 function(response){
334                                 $scope.reportData = response.data;
335                                 if($scope.reportData.reportHeading==null || $scope.reportData.reportHeading=='')
336                                         $scope.reportData.reportHeading = ($scope.reportData.reportTitle=='')?$scope.reportData.reportName:$scope.reportData.reportTitle;
337                                 });
338                 };
339                 $timeout(function() {
340                         $rootScope.isViewRendering = false;
341                         });
342                 $scope.successPopUp = function (msg) {
343                 var modalInstance = $modal.open({
344                                 templateUrl: 'app/fusion/scripts/DS2-modal/success_modal.html',
345                                 controller: ModalInstanceCtrl,
346                                 sizeClass: 'modal-small',
347                                 resolve: {
348                                         msg: function () {
349                                                 var message = {
350                                                         title:    '',
351                                         text:     msg
352                                 };
353                                                 return message;                                 
354                         }
355                         }
356                         });
357             };
358             
359             $scope.errorPopUp = function (msg) {
360                 var modalInstance = $modal.open({
361                                 templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
362                                 controller: ModalInstanceCtrl,
363                                 sizeClass: 'modal-small',
364                                 resolve: {
365                                         msg: function () {
366                                                 return msg;                                     
367                         }
368                         }
369                         });
370             };
371             var ModalInstanceCtrl = function ($scope, $modalInstance, msg,$rootScope) {
372                         $scope.msg=msg;
373                 }
374 }]);