fd6a0b02bc4f6358f0fdd933a2c0d81642626e02
[portal/sdk.git] /
1 /*
2  * Copyright (c) 2014 DataTorrent, Inc. ALL Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 'use strict';
18
19 angular.module('ui.dashboard')
20   .controller('WidgetSettingsRaptorReportCtrl', ['$http','$scope','$rootScope','$uibModalInstance', 'widget', function ($http,$scope,$rootScope,$uibModalInstance, widget) {
21
22                         // add watch function for widget here
23                         // leave ajax call to the dashboard.js
24
25                         console.log("============= WidgetSettingsRaptorReportCtrl scope =================");
26                         console.log($scope);
27     
28       var getFormFieldListUrl = "raptor.htm?action=report.run.container&c_master="+widget.report_id + "&refresh=Y"
29       console.log("============= getFormFieldListUrl =============");
30       console.log(getFormFieldListUrl);
31       $http.get(getFormFieldListUrl).then(
32                               function(res){
33                         $scope.reportData = res.data;                         
34                         // add widget to scope
35                         $scope.showFormFieldIds = false;
36                         $scope.formFieldSelectedValues = {};
37 });
38
39         var parseQueryString = function( queryString ) {
40             var params = {}, queries, temp, i, l;
41             // Split into key/value pairs
42             queries = queryString.split("&");
43             // Convert the array of strings into an object
44             for ( i = 0, l = queries.length; i < l; i++ ) {
45                 temp = queries[i].split('=');
46                 //console.log(temp[0]);
47                 //console.log(temp[0] != "refresh");
48                 if(temp[0] && temp[0] != "refresh")
49                         params[temp[0]] = temp[1];
50             }
51             return params;
52         };
53       
54         var paginationOptions = {
55                     pageNumber: 1,
56                     pageSize: 5,
57                     sort: null
58         };
59           
60         $scope.gridOptions = {
61           paginationPageSizes: [5],
62           paginationPageSize: 5,
63           useExternalPagination: true,
64           columnDefs: [],
65           data: [],
66           enableGridMenu: true,
67           enableSelectAll: true,
68           exporterMenuPdf: false,
69           exporterMenuCsv: false,
70           exporterCsvFilename: 'myFile.csv',
71           exporterPdfDefaultStyle: {fontSize: 9},
72           exporterPdfTableStyle: {margin: [30, 30, 30, 30]},
73           exporterPdfTableHeaderStyle: {fontSize: 10, bol$rootScoped: true, italics: true, color: 'red'},
74           exporterPdfHeader: { text: "My Header", style: 'headerStyle' },
75           exporterPdfFooter: function ( currentPage, pageCount ) {
76             return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' };
77           },
78           exporterPdfCustomFormatter: function ( docDefinition ) {
79             docDefinition.styles.headerStyle = { fontSize: 22, bold: true };
80             docDefinition.styles.footerStyle = { fontSize: 10, bold: true };
81             return docDefinition;
82           },
83           exporterPdfOrientation: 'portrait',
84           exporterPdfPageSize: 'LETTER',
85           exporterPdfMaxGridWidth: 500,
86           exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")),
87           onRegisterApi: function(gridApi) {
88                     $scope.gridApi = gridApi;
89                     gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {
90                               paginationOptions.pageNumber = newPage;
91                               paginationOptions.pageSize = pageSize;
92                               $scope.runReport();
93                             });
94                           }
95                         };
96       
97         
98
99             $scope.getFormFieldSelectedValuesAsURL = function(){
100                 var formFieldsUrl = '';
101                 $scope.widget.reportData.formFieldList.forEach(function(formField) {
102                                 if(formField.fieldType==='LIST_BOX') {
103                                         if($scope.formFieldSelectedValues && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId].value != '') {
104                                                 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId].value+'&';
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                 return formFieldsUrl;
123
124             }   
125                 
126                 $scope.triggerOtherFormFields = function(){
127                                 console.log("report_run");
128                 var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
129                 $http.get('raptor.htm?action=report.formfields.run.container&c_master='+widget.report_id+'&'+formFieldsUrl).then(
130                                 function(response){
131                                 $scope.widget.reportData = response.data;
132                                 });
133                 };              
134         
135         
136       $scope.runReport = function(pagination){
137         var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
138                 console.log("pagination");
139         if(!pagination) {
140                 console.log("refreshed ...");
141                 $scope.gridOptions.pageNumber = 1;
142                   $scope.gridOptions.paginationPageSizes= [widget.reportData.pageSize];
143                   $scope.gridOptions.paginationPageSize= widget.reportData.pageSize;
144                   if(widget.reportData.totalRows<14){
145                           $scope.gridHeight = (widget.reportData.totalRows+7)*30+'px';
146                   } else{
147                           $scope.gridHeight = '400px';
148                   }
149                   $scope.gridOptions.totalItems = widget.reportData.totalRows;
150                   $scope.gridOptions.data= widget.reportData.reportDataRows;
151                   $scope.gridOptions.exporterPdfHeader.text= widget.reportData.reportName;
152         }
153 /*          $scope.currentReportUrlParams = 'c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'&display_content=Y&r_page='+(paginationOptions.pageNumber-1);
154         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));
155           $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(
156           */
157         $scope.currentReportUrlParams = 'c_master='+ widget.report_id+'&'+formFieldsUrl+'&display_content=Y&r_page='+(paginationOptions.pageNumber-1);
158         $scope.urlParams = parseQueryString($scope.currentReportUrlParams);
159         
160         console.log('raptor.htm?action=report.run.container&c_master='+ widget.report_id +'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1));
161           $http.get('raptor.htm?action=report.run.container&c_master='+widget.report_id+'&'+formFieldsUrl+'refresh=Y&display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then(
162                           function(response){
163                                 widget.reportData = response.data;
164                         if(widget.reportData.errormessage) {
165                                 document.getElementById('errorDiv').innerHTML = widget.reportData.errormessage;
166                                 console.log(document.getElementById('errorDiv').innerHtml);
167                                 console.log(widget.reportData.errormessage);
168                         }                  
169                     if(!pagination) {
170                       if(!$scope.urlParams.hideChart && widget.reportData.chartAvailable && widget.reportData.totalRows>1){
171                                 console.log('raptor.htm?action=chart.run&c_master='+widget.report_id+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1));
172                                 $http.get('raptor.htm?action=chart.run&c_master='+widget.report_id +'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then(
173                                                 function(response) {
174                                                         console.log(response.data);
175                                                         $scope.showChart =  true;
176                                                         document.getElementById('chartiframe').contentWindow.document.write(response.data);
177                                                         document.getElementById('chartiframe').contentWindow.document.close();
178                                                 });
179                         } else {
180                                                         $scope.showChart =  false;
181                         }
182                     }
183                         if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields){
184                                 $scope.showFormFields = true;
185                                 } else {
186                                         $scope.showFormFields = false;
187                                 }
188                 });
189                 $rootScope.gridOptions = $scope.gridOptions;
190                 $rootScope.gridHeight = $scope.gridHeight;
191                 $rootScope.showdataContainer = true;
192       };
193         
194
195
196     
197         
198     // set up result object
199     $scope.result = jQuery.extend(true, {}, widget);
200
201     $scope.ok = function () {
202       $uibModalInstance.close($scope.result);
203     };
204     
205     $scope.okay = function () {
206         console.log("$scope.okay!")
207         console.log($scope);
208                 $scope.runReport();
209 /*        $uibModalInstance.close($scope.result);*/
210     };
211
212     $scope.cancel = function () {
213       $uibModalInstance.dismiss('cancel');
214     };
215   }]);