e1c5e1e8791e6a3558d722d299a73097750c3c59
[portal/sdk.git] /
1 appDS2.requires.push('ui.grid');
2 appDS2.requires.push('ui.grid.pagination');
3 appDS2.requires.push('ui.grid.resizeColumns');
4 appDS2.controller("reportSearchController", ['$scope','$rootScope','$http','$timeout','uiGridConstants','$modal','$q','$log','raptorReportFactory',function ($scope,$rootScope,$http,$timeout,uiGridConstants,$modal,$q,$log,raptorReportFactory) { 
5             
6         $scope.getSearchData = function(){
7                 raptorReportFactory.getSearchData().then(function(data){
8                         $scope.searchdData = data;
9                 },function(error){
10                         $log.error("raptorReportFactory: getSearchData failed.");
11                 });
12         }
13         
14         $scope.getSearchData();
15         
16         $scope.runReport = function(){
17                         var searchParams = '';
18                         if($scope.reportId && $scope.reportId!=''){
19                                 searchParams = '&rep_id='+$scope.reportId+'&rep_id_options='+$scope.operatorRepId.index;
20                         }
21                         if($scope.reportName && $scope.reportName!=''){
22                                 searchParams = searchParams+'&rep_name='+$scope.reportName+'&rep_name_options='+$scope.operatorRepName.index;
23                         }
24                         
25                         var pageSearchParameter = ($scope.paginationOptions.pageNumber-1)+searchParams
26                         raptorReportFactory.getSearchDataAtPage(pageSearchParameter).then(function(data){
27                                 $scope.searchdData = data
28                         },function(error){
29                                 $log.error("raptorReportFactory: getSearchDataAtPage failed.");
30                         });
31         };
32
33
34         $scope.paginationOptions = {
35                     pageNumber: 1,
36                     pageSize: 5,
37                     sort: null
38         };
39           
40         var correctTotalPaginationTemplate = 
41                   //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)}}
42                   "<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>";
43         
44         $scope.gridOptions = {                  
45           paginationPageSizes: [5],
46           paginationPageSize: 5,
47           paginationTemplate: correctTotalPaginationTemplate,
48           columnDefs: [],
49           enableColumnResizing: true,
50           data: [],
51           enableGridMenu: true,
52           enableSelectAll: true,
53           exporterMenuPdf: false,
54           exporterMenuCsv: false,
55           exporterCsvFilename: 'myFile.csv',
56           exporterPdfDefaultStyle: {fontSize: 9},
57           exporterPdfTableStyle: {margin: [30, 30, 30, 30]},
58           exporterPdfTableHeaderStyle: {fontSize: 10, bold: true, italics: true, color: 'red'},
59           exporterPdfHeader: { text: "My Header", style: 'headerStyle' },
60           exporterPdfFooter: function ( currentPage, pageCount ) {
61             return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' };
62           },
63           exporterPdfCustomFormatter: function ( docDefinition ) {
64             docDefinition.styles.headerStyle = { fontSize: 22, bold: true };
65             docDefinition.styles.footerStyle = { fontSize: 10, bold: true };
66             return docDefinition;
67           },
68           exporterPdfOrientation: 'portrait',
69           exporterPdfPageSize: 'LETTER',
70           exporterPdfMaxGridWidth: 500,
71           exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")),
72           onRegisterApi: function(gridApi) {
73                     gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {
74                         $scope.paginationOptions.pageNumber = newPage;
75                         $scope.paginationOptions.pageSize = pageSize;
76                               $scope.runReport();
77                             });  
78                   }
79                 };
80
81
82         var getPage = function() {
83                 $scope.gridOptions.columnDefs = [];
84                 $scope.searchdData.columns[0].forEach(function(entry) {
85                         if(entry.columnTitle=='Run'){
86                                 $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false,
87                                 cellTemplate: '<div class="ui-grid-cell-contents"><a ng-href="#/report_run/{{COL_FIELD.drillDownLink.substr(39)}}" class="icon-controls-pointer" style="font-size:20px;"></a></div>'
88                                 });
89                         } else if(entry.columnTitle=='Edit'){
90                                 $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false,
91                                         cellTemplate: '<div class="ui-grid-cell-contents"><a ng-href="{{COL_FIELD.drillDownLink}}" class="icon-misc-pen" style="font-size:20px;"></a></div>'
92                                 });
93                         } else if(entry.columnTitle=='Delete'){
94                                 $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false,
95                                         cellTemplate: '<div class="ui-grid-cell-contents"><a ng-click="grid.appScope.removeReport(COL_FIELD.drillDownLink,row)" class="icon-misc-trash" style="font-size:20px;"></a></div>'
96                                 });
97                         }  else if(entry.columnTitle=='Copy'){
98                                 $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, enableSorting: false,
99                                         cellTemplate: '<div class="ui-grid-cell-contents"><a ng-href="{{COL_FIELD.drillDownLink}}" class="icon-documents-copy" style="font-size:20px;"></a></div>'
100                                 });
101                         } else if(entry.columnTitle=='Schedule'){
102                         } else if(entry.columnTitle=='No'){
103                         } else {
104                                         $scope.gridOptions.columnDefs.push({ displayName: entry.columnTitle, field: entry.columnId, 
105                                                 enableSorting: true,
106                                         cellTemplate: '<div class="ui-grid-cell-contents"  style="text-align:{{COL_FIELD.alignment}};" title="TOOLTIP"> <div>{{COL_FIELD.displayValue}}</div> </div>'   
107                                        });
108                         }
109                 });
110                 
111                 $scope.gridOptions.paginationPageSizes= [$scope.searchdData.metaReport.pageSize];
112                 $scope.gridOptions.paginationPageSize= $scope.searchdData.metaReport.pageSize;
113                 $scope.gridOptions.totalItems = $scope.searchdData.metaReport.totalSize;
114                 
115                 $scope.gridOptions.data = [];
116                 $scope.searchdData.rows[0].forEach(function(entry) {
117                         var localData = {};
118                         entry.forEach(function(rowData){
119                                 localData[rowData["columnId"]]= rowData["searchresultField"];
120                         });
121                         $scope.gridOptions.data.push(localData);
122                 });
123         };
124
125         $scope.$watch("searchdData",function(newValue,oldValue) {
126                 if($scope.searchdData){
127                         getPage();
128                 }
129         });
130         
131         $scope.operatorsRepId = [
132                 {index: 0, value: 'Equal To', text: 'Equal To', alias:'Equal To'},
133         {index: 1, value: 'Less Than', text: 'Less Than', alias:'Less Than'},
134         {index: 2, value: 'Greater Than', text: 'Greater Than', alias:'Greater Than'}];
135         $scope.operatorRepId = {};
136         $scope.operatorRepId.value = $scope.operatorsRepId[0].value;
137         $scope.operatorRepId.index = $scope.operatorsRepId[0].index;
138
139         $scope.operatorsRepName = [
140                 {index: 0, value: 'Starts With', text: 'Starts With', alias:'Starts With'},
141         {index:1, value: 'Ends With', text: 'Ends With', alias:'Ends With'},
142         {index: 2, value: 'Contains', text: 'Contains', alias:'Contains'}];
143
144         $scope.operatorRepName = {};
145         $scope.operatorRepName.value = $scope.operatorsRepName[0].value;
146         $scope.operatorRepName.index = $scope.operatorsRepName[0].index;
147
148         $scope.removeReport = function(reportDeleteUrl,row) {           
149                    var modalInstance = $modal.open({
150                                  animation: $scope.animationsEnabled,
151                                  templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-del-confirm.html',
152                                         sizeClass: 'modal-small',
153                                  controller: ['$scope', '$modalInstance', '$http', '$log','raptorReportFactory', function ($scope, $modalInstance, $http, $log, raptorReportFactory) {
154                                                 $scope.ok = function() {
155                                                         raptorReportFactory.getReportDeleteStatus(reportDeleteUrl).then(function(data){
156                                                                 if (!(data.deleted))  {
157                                                                          $log.error("raptorReportFactory: report removal failed.")
158                                                                 }
159                                                         $modalInstance.close();                                                                                                                                 
160                                                         },function(error){
161                                                                  $log.error("report removal error.")
162                                                     });
163                                   };
164                         
165                                   $scope.cancel = function() {
166                                         $modalInstance.dismiss();
167                                   };
168                             }]
169                           });
170
171                       modalInstance.result.then(function () {
172                                 $scope.$emit('RefreshGridOptions');
173                       }, function () {
174                       });
175         };
176         
177         $scope.$on('RefreshGridOptions', function(event) {
178                 $scope.getSearchData();
179         });
180
181         $timeout(function() {
182                 $rootScope.isViewRendering = false;
183                 });
184         
185         
186 }]);