02f589856e763e050d6d562cd7ccab677f321417
[portal/sdk.git] /
1 appDS2.controller("reportRunController", ['$scope','$rootScope','$routeParams','$http','dateFilter', '$window', '$timeout', 'rowSorter',
2                                        function ($scope,$rootScope,$routeParams,$http,dateFilter,$window,$timeout,rowSorter) { 
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         
14         $scope.isInProgress = true;
15         
16         if($routeParams.reportUrlParams.indexOf("parent___params===")>-1) {
17                 $scope.showBackButton = true;
18                 $scope.parentReportUrlParams = $routeParams.reportUrlParams.substring($routeParams.reportUrlParams.indexOf("parent___params===")+18);
19                 $scope.currentReportUrlParams = $routeParams.reportUrlParams.substring(0,$routeParams.reportUrlParams.indexOf("parent___params==="));
20         } else {
21                 $scope.currentReportUrlParams = $routeParams.reportUrlParams;
22         }
23         console.log($routeParams.reportUrlParams);
24         var parseQueryString = function( queryString ) {
25             var params = {}, queries, temp, i, l;
26             // Split into key/value pairs
27             queries = queryString.split("&");
28             // Convert the array of strings into an object
29             for ( i = 0, l = queries.length; i < l; i++ ) {
30                 temp = queries[i].split('=');
31                 //console.log(temp[0]);
32                 //console.log(temp[0] != "refresh");
33                 if(temp[0] && temp[0] != "refresh")
34                         params[temp[0]] = temp[1];
35             }
36             return params;
37         };
38         
39         var convertQueryString = function(queryString) {
40                 var keys = ""; var str = "";
41                 keys = Object.keys(queryString);
42                 //console.log(keys);
43                 for ( i = 0, l = keys.length; i < l; i++ ) {
44                         str += keys[i]+"="+queryString[keys[i]] + "&";
45                         
46                 }
47                 return str;
48                 //queryString = 
49         }
50         
51         
52         
53         
54         $scope.urlParams = parseQueryString($scope.currentReportUrlParams);
55         
56         $scope.reportChartURL = 'report#/report_chart_wizard/'+$scope.urlParams.c_master;
57         
58         $scope.reportEditURL = 'report_wizard.htm?action=report.edit&c_master='+$scope.urlParams.c_master;
59
60         
61         $http.get('raptor.htm?action=report.run.container&'+$scope.currentReportUrlParams).then(
62                 function(response){
63                         console.log(response);
64                         $scope.isInProgress = false;
65                         $scope.reportData = response.data;
66                         console.log('reportData report run container response',$scope.reportData);
67                         if ($scope.reportData.reportTitle) {
68                                 $scope.reportData.reportHeading = $scope.reportData.reportTitle;
69                                 if ($scope.reportData.reportSubTitle) {
70                                         $scope.reportData.reportSubTitle = $scope.reportData.reportSubTitle;
71                                 }
72                         }
73                         else
74                                 $scope.reportData.reportHeading = $scope.reportData.reportName;
75                         if(!$scope.urlParams.hideChart && $scope.reportData.chartAvailable && $scope.reportData.totalRows>1){
76                         console.log('raptor.htm?action=chart.run&'+convertQueryString($scope.urlParams));
77                         $http.get('raptor.htm?action=chart.run&'+convertQueryString($scope.urlParams)).then(
78                                         function(response){
79                                           $scope.showChart =  true;
80                                           document.getElementById('chartiframe').contentWindow.document.write(response.data);
81                                           document.getElementById('chartiframe').contentWindow.document.close();
82                                         });
83                 }
84         
85                 if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields){
86                           $scope.showFormFields = true;
87                     }
88                 });
89     $scope.getFormFieldSelectedValuesAsURL = function(){
90         var formFieldsUrl = '';
91         $scope.reportData.formFieldList.forEach(function(formField) {
92                         if(formField.fieldType==='LIST_BOX') {
93                                 if($scope.formFieldSelectedValues && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId].value != '') {
94                                         formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId].value+'&';
95                                 }
96                         } else if(formField.fieldType==='LIST_MULTI_SELECT') {
97                                 if($scope.formFieldSelectedValues[formField.fieldId].length >0) {
98                                         for (var i = 0; i < $scope.formFieldSelectedValues[formField.fieldId].length; i++) {
99                                                 if($scope.formFieldSelectedValues[formField.fieldId][i].defaultValue){
100                                                   formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId][i].value+'&';
101                                                 }
102                                     }
103                                 }
104                         } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'DATE'){
105                                 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.dateformat)+'&';
106                         } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'TIMESTAMP_MIN'){
107                                 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.datetimeformat)+'&';
108                         } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId] != ''){
109                                 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId]+'&';
110                         }
111         });
112         return formFieldsUrl;
113
114     }
115
116     $scope.runReport = function(pagination){
117         var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
118                 /*if ($scope.reportData.reportTitle)
119                         $scope.reportData.reportHeading = $scope.reportData.reportTitle;
120                 else
121                         $scope.reportData.reportHeading = $scope.reportData.reportName;*/
122                         
123         console.log("pagination");
124         if(!pagination) {
125                 //console.log("refreshed ...");
126                 $scope.gridOptions.pageNumber = 1;
127                 paginationOptions.pageNumber = 1;
128                 paginationOptions.pageSize = $scope.reportData.pageSize;
129                 //console.log($scope.gridOptions);
130                 $scope.gridOptions.paginationCurrentPage = 1;
131                   $scope.gridOptions.paginationPageSizes= [$scope.reportData.pageSize];
132                   $scope.gridOptions.paginationPageSize= $scope.reportData.pageSize;
133                   if($scope.reportData.totalRows<14){
134                           $scope.gridHeight = ($scope.reportData.totalRows+7)*30+'px';
135                   } else{
136                           $scope.gridHeight = '400px';
137                   }
138                   $scope.gridOptions.totalItems = $scope.reportData.totalRows;
139                   $scope.gridOptions.data= $scope.reportData.reportDataRows;
140                   $scope.gridOptions.exporterPdfHeader.text= $scope.reportData.reportName;
141
142         }
143         $scope.currentReportUrlParams = 'c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'&display_content=Y&r_page='+(paginationOptions.pageNumber-1);
144         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));
145           $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(
146                 function(response){
147                         $scope.reportData = response.data;
148                         if ($scope.reportData.reportTitle) {
149                                         $scope.reportData.reportHeading = $scope.reportData.reportTitle;
150                                         if ($scope.reportData.reportSubTitle) {
151                                                 $scope.reportData.reportSubTitle = $scope.reportData.reportSubTitle;
152                                         }
153                                 }
154                                 else
155                                         $scope.reportData.reportHeading = $scope.reportData.reportName;
156                                 
157                         if($scope.reportData.errormessage) {
158                                 //console.log($scope.reportData);
159                                 var stacktraceFP = $scope.reportData.stacktrace.substring(0, $scope.reportData.stacktrace.indexOf(":")+1);
160                                 document.getElementById('errorDiv').innerHTML = stacktraceFP + " " + $scope.reportData.errormessage;
161                                 //console.log(document.getElementById('errorDiv').innerHtml);
162                                 //console.log(stacktraceFP + " " + $scope.reportData.errormessage);
163                         }                  
164                     if(!pagination) {   
165                       if(!$scope.urlParams.hideChart && $scope.reportData.chartAvailable && $scope.reportData.totalRows>1){
166                                 console.log('raptor.htm?action=chart.run&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1));
167                                 $http.get('raptor.htm?action=chart.run&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then(
168                                                 function(response) {
169                                                         console.log(response.data);
170                                                         $scope.showChart =  true;
171                                                         console.log('response.data',response.data);
172                                                         document.getElementById('chartiframe').contentWindow.document.write(response.data);
173                                                         document.getElementById('chartiframe').contentWindow.document.close();
174                                                 });
175                         } else {
176                                                         $scope.showChart =  false;
177                         }
178                     }
179                         if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields && !$scope.reportData.hideFormFieldsAfterRun){
180                                 $scope.showFormFields = true;
181                                 } else {
182                                         $scope.showFormFields = false;
183                                 }
184                 });
185     };
186
187           var paginationOptions = {
188                             pageNumber: 1,
189                             pageSize: 5,
190                             sort: null
191           };
192           
193                 var correctTotalPaginationTemplate = 
194                           //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)}}
195                           "<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>";
196
197           $scope.gridOptions = {
198                                 pageNumber: 1,
199                                 sort : null,
200                             paginationPageSizes: [5],
201                             paginationPageSize: 5,
202                                 paginationTemplate: correctTotalPaginationTemplate,
203                                 columnDefs: [],
204                                 data: [],
205                             enableGridMenu: true,
206                             enableSelectAll: true,
207                                 gridMenuCustomItems : [
208                                         {       title : 'All Reports',
209                                                 action : function($event) {
210                                                         $window.open('report.htm','_self');
211                                                         },      order : 210     },
212                                         {       title : 'Edit Report',
213                                                 action : function($event) {
214                                                         $window.open($scope.reportEditURL,'_self');
215                                                         },      order : 211     },
216                                         {       title : 'Export All data as Excel 2007',
217                                                 action : function($event) {
218                                                         $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.excel2007.session','_self');
219                                                         },      order : 212     },
220                                         {       title : 'Export All data as Excel',
221                                                 action : function($event) {
222                                                         $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.excel.session','_self');
223                                                         },      order : 213 },
224                                         {       title : 'Export All data as CSV',
225                                                 action : function($event) {
226                                                         $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.csv.session','_self');
227                                                         },      order : 214     },
228                                         {       title : 'Export All data as PDF',
229                                                 action : function($event) {
230                                                         $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.pdf.session','_self');
231                                                         },      order : 215     } ],
232                             exporterMenuPdf: false,
233                         exporterMenuCsv: false,
234                             exporterCsvFilename: 'myFile.csv',
235                             exporterPdfDefaultStyle: {fontSize: 9},
236                             exporterPdfTableStyle: {margin: [30, 30, 30, 30]},
237                             exporterPdfTableHeaderStyle: {fontSize: 10, bold: true, italics: true, color: 'red'},
238                             exporterPdfHeader: { text: "My Header", style: 'headerStyle' },
239                             exporterPdfFooter: function ( currentPage, pageCount ) {
240                               return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' };
241                             },
242                             exporterPdfCustomFormatter: function ( docDefinition ) {
243                               docDefinition.styles.headerStyle = { fontSize: 22, bold: true };
244                               docDefinition.styles.footerStyle = { fontSize: 10, bold: true };
245                               return docDefinition;
246                             },
247                             exporterPdfOrientation: 'portrait',
248                             exporterPdfPageSize: 'LETTER',
249                             exporterPdfMaxGridWidth: 500,
250                             exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")),
251                             onRegisterApi: function(gridApi) {
252                                 $scope.gridApi = gridApi;
253                                 gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {
254                                   paginationOptions.pageNumber = newPage;
255                                   paginationOptions.pageSize = pageSize;
256                                   $scope.runReport(true);
257                                 });
258                               }
259                           };
260  
261           $scope.uiGridRefresh = function(){
262                   var columnDefsArray = [];
263                   var columnFreezeEndColumn = $scope.reportData.colIdxTobeFreezed;
264                   var doColumnNeedToFreeze = false;
265                   if(columnFreezeEndColumn && columnFreezeEndColumn.length>0) {
266                           doColumnNeedToFreeze = true;
267                   }
268                   $scope.reportData.reportDataColumns.forEach(function(entry) {
269                           var tempColumnDef = { displayName: entry.columnTitle, field: entry.colId, enableSorting: entry.sortable,
270                                           sortingAlgorithm: function(a, b) {
271                                          return rowSorter.sortAlpha(a.displayValue, b.displayValue);
272                                           },
273                                           cellTemplate: '<div  class="ui-grid-cell-contents"  style="text-align:{{COL_FIELD.alignment}};" title="TOOLTIP">   '+
274                                                  '  <div ng-if="!COL_FIELD.drillDownURL || COL_FIELD.drillDownURL==\'\'">{{COL_FIELD.displayValue}}</div>' +
275                                  '  <a ng-if="COL_FIELD.drillDownURL && COL_FIELD.drillDownURL!=\'\'" ng-href="{{COL_FIELD.drillDownURL}}&parent___params==={{grid.appScope.currentReportUrlParams}}" >{{COL_FIELD.displayValue}}</a>' +
276                                                   '</div>'};
277                           if(entry.columnWidth && entry.columnWidth!='null' && entry.columnWidth!='pxpx' && entry.columnWidth!='nullpx' && entry.columnWidth!='nullpxpx'){
278                                   tempColumnDef['minWidth'] = entry.columnWidth.substring(0, entry.columnWidth.length - 2);
279                           } else {
280                                   tempColumnDef['minWidth'] = '100';
281                           }
282                           if(doColumnNeedToFreeze) {
283                                   tempColumnDef['pinnedLeft']= true;
284                                   if(columnFreezeEndColumn === entry.colId){
285                                           doColumnNeedToFreeze = false;
286                                   }
287                           }
288                           columnDefsArray.push(tempColumnDef);
289                   }); 
290           
291                   $scope.gridOptions.paginationPageSizes= [$scope.reportData.pageSize];
292                   $scope.gridOptions.paginationPageSize= $scope.reportData.pageSize;
293                   if($scope.reportData.totalRows<14){
294                           $scope.gridHeight = ($scope.reportData.totalRows+5)*30+'px';
295                   }else{
296                           $scope.gridHeight = '400px';
297                   }
298                   $scope.gridOptions.totalItems = $scope.reportData.totalRows;
299                   $scope.gridOptions.columnDefs= columnDefsArray;
300                   $scope.gridOptions.data= $scope.reportData.reportDataRows;
301                   $scope.gridOptions.exporterPdfHeader.text= $scope.reportData.reportName;
302           };
303
304                 $scope.$watch("reportData",function(newValue,oldValue) {
305                  if(!$scope.urlParams.hideGrid){
306                   if($scope.reportData){
307                 if($scope.reportData.displayData && $scope.reportData.reportDataColumns){
308                                 $scope.showGrid =  true;
309                         $scope.uiGridRefresh();
310                         }
311               }
312                  }
313                 });
314
315                 $scope.triggerOtherFormFields = function(){
316                         console.log("report_run");
317                 var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
318                 $http.get('raptor.htm?action=report.formfields.run.container&c_master='+$scope.reportData.reportID+'&'+formFieldsUrl).then(
319                                 function(response){
320                                 $scope.reportData = response.data;
321                                 });
322                 };
323                 $timeout(function() {
324                         $rootScope.isViewRendering = false;
325                         });
326 }]);