1 app.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;
14 $scope.isInProgress = true;
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==="));
21 $scope.currentReportUrlParams = $routeParams.reportUrlParams;
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];
39 var convertQueryString = function(queryString) {
40 var keys = ""; var str = "";
41 keys = Object.keys(queryString);
43 for ( i = 0, l = keys.length; i < l; i++ ) {
44 str += keys[i]+"="+queryString[keys[i]] + "&";
54 $scope.urlParams = parseQueryString($scope.currentReportUrlParams);
56 $scope.reportChartURL = 'report#/report_chart_wizard/'+$scope.urlParams.c_master;
58 $scope.reportEditURL = 'report_wizard.htm?action=report.edit&c_master='+$scope.urlParams.c_master;
61 $http.get('raptor.htm?action=report.run.container&'+$scope.currentReportUrlParams).then(
63 console.log(response);
64 $scope.isInProgress = false;
65 $scope.reportData = response.data;
66 if(!$scope.urlParams.hideChart && $scope.reportData.chartAvailable && $scope.reportData.totalRows>1){
67 console.log('raptor.htm?action=chart.run&'+convertQueryString($scope.urlParams));
68 $http.get('raptor.htm?action=chart.run&'+convertQueryString($scope.urlParams)).then(
70 $scope.showChart = true;
71 document.getElementById('chartiframe').contentWindow.document.write(response.data);
72 document.getElementById('chartiframe').contentWindow.document.close();
76 if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields){
77 $scope.showFormFields = true;
80 $scope.getFormFieldSelectedValuesAsURL = function(){
81 var formFieldsUrl = '';
82 $scope.reportData.formFieldList.forEach(function(formField) {
83 if(formField.fieldType==='LIST_BOX') {
84 if($scope.formFieldSelectedValues && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId].value != '') {
85 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId].value+'&';
87 } else if(formField.fieldType==='LIST_MULTI_SELECT') {
88 if($scope.formFieldSelectedValues[formField.fieldId].length >0) {
89 for (var i = 0; i < $scope.formFieldSelectedValues[formField.fieldId].length; i++) {
90 if($scope.formFieldSelectedValues[formField.fieldId][i].defaultValue){
91 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId][i].value+'&';
95 } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'DATE'){
96 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.dateformat)+'&';
97 } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && formField.validationType === 'TIMESTAMP_MIN'){
98 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+dateFilter($scope.formFieldSelectedValues[formField.fieldId],$scope.datetimeformat)+'&';
99 } else if((formField.fieldType === 'text' || formField.fieldType === 'TEXT') && $scope.formFieldSelectedValues[formField.fieldId] && $scope.formFieldSelectedValues[formField.fieldId] != ''){
100 formFieldsUrl = formFieldsUrl+formField.fieldId+'='+$scope.formFieldSelectedValues[formField.fieldId]+'&';
103 return formFieldsUrl;
107 $scope.runReport = function(pagination){
109 var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
110 console.log("pagination");
112 console.log("refreshed ...");
113 $scope.gridOptions.pageNumber = 1;
114 $scope.gridOptions.paginationPageSizes= [$scope.reportData.pageSize];
115 $scope.gridOptions.paginationPageSize= $scope.reportData.pageSize;
116 if($scope.reportData.totalRows<14){
117 $scope.gridHeight = ($scope.reportData.totalRows+7)*30+'px';
119 $scope.gridHeight = '400px';
121 $scope.gridOptions.totalItems = $scope.reportData.totalRows;
122 $scope.gridOptions.data= $scope.reportData.reportDataRows;
123 $scope.gridOptions.exporterPdfHeader.text= $scope.reportData.reportName;
126 $scope.currentReportUrlParams = 'c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'&display_content=Y&r_page='+(paginationOptions.pageNumber-1);
127 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));
128 $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(
130 $scope.reportData = response.data;
131 if($scope.reportData.errormessage) {
132 document.getElementById('errorDiv').innerHTML = $scope.reportData.errormessage;
133 console.log(document.getElementById('errorDiv').innerHtml);
134 console.log($scope.reportData.errormessage);
137 if(!$scope.urlParams.hideChart && $scope.reportData.chartAvailable && $scope.reportData.totalRows>1){
138 console.log('raptor.htm?action=chart.run&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1));
139 $http.get('raptor.htm?action=chart.run&c_master='+$scope.urlParams.c_master+'&'+formFieldsUrl+'display_content=Y&r_page='+(paginationOptions.pageNumber-1)).then(
141 console.log(response.data);
142 $scope.showChart = true;
143 document.getElementById('chartiframe').contentWindow.document.write(response.data);
144 document.getElementById('chartiframe').contentWindow.document.close();
147 $scope.showChart = false;
150 if($scope.reportData.displayForm && $scope.reportData.formFieldList && $scope.reportData.formFieldList.length>0 && !$scope.urlParams.hideFormFields){
151 $scope.showFormFields = true;
153 $scope.showFormFields = false;
158 var paginationOptions = {
164 $scope.gridOptions = {
167 paginationPageSizes: [5],
168 paginationPageSize: 5,
169 useExternalPagination: true,
172 enableGridMenu: true,
173 enableSelectAll: true,
174 gridMenuCustomItems : [
175 { title : 'All Reports',
176 action : function($event) {
177 $window.open('report.htm','_self');
179 { title : 'Edit Report',
180 action : function($event) {
181 $window.open($scope.reportEditURL,'_self');
183 { title : 'Export All data as Excel 2007',
184 action : function($event) {
185 $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.excel2007.session','_self');
187 { title : 'Export All data as Excel',
188 action : function($event) {
189 $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.excel.session','_self');
191 { title : 'Export All data as CSV',
192 action : function($event) {
193 $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.csv.session','_self');
195 { title : 'Export All data as PDF',
196 action : function($event) {
197 $window.open('raptor.htm?c_master='+$scope.reportData.reportID+'&r_action=report.download.pdf.session','_self');
199 exporterMenuPdf: false,
200 exporterMenuCsv: false,
201 exporterCsvFilename: 'myFile.csv',
202 exporterPdfDefaultStyle: {fontSize: 9},
203 exporterPdfTableStyle: {margin: [30, 30, 30, 30]},
204 exporterPdfTableHeaderStyle: {fontSize: 10, bold: true, italics: true, color: 'red'},
205 exporterPdfHeader: { text: "My Header", style: 'headerStyle' },
206 exporterPdfFooter: function ( currentPage, pageCount ) {
207 return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' };
209 exporterPdfCustomFormatter: function ( docDefinition ) {
210 docDefinition.styles.headerStyle = { fontSize: 22, bold: true };
211 docDefinition.styles.footerStyle = { fontSize: 10, bold: true };
212 return docDefinition;
214 exporterPdfOrientation: 'portrait',
215 exporterPdfPageSize: 'LETTER',
216 exporterPdfMaxGridWidth: 500,
217 exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")),
218 onRegisterApi: function(gridApi) {
219 $scope.gridApi = gridApi;
220 gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {
221 paginationOptions.pageNumber = newPage;
222 paginationOptions.pageSize = pageSize;
223 $scope.runReport(true);
228 $scope.uiGridRefresh = function(){
229 var columnDefsArray = [];
230 var columnFreezeEndColumn = $scope.reportData.colIdxTobeFreezed;
231 var doColumnNeedToFreeze = false;
232 if(columnFreezeEndColumn && columnFreezeEndColumn.length>0) {
233 doColumnNeedToFreeze = true;
235 $scope.reportData.reportDataColumns.forEach(function(entry) {
236 var tempColumnDef = { displayName: entry.columnTitle, field: entry.colId, enableSorting: entry.sortable,
237 sortingAlgorithm: function(a, b) {
238 return rowSorter.sortAlpha(a.displayValue, b.displayValue);
240 cellTemplate: '<div class="ui-grid-cell-contents" style="text-align:{{COL_FIELD.alignment}};" title="TOOLTIP"> '+
241 ' <div ng-if="!COL_FIELD.drillDownURL || COL_FIELD.drillDownURL==\'\'">{{COL_FIELD.displayValue}}</div>' +
242 ' <a ng-if="COL_FIELD.drillDownURL && COL_FIELD.drillDownURL!=\'\'" ng-href="{{COL_FIELD.drillDownURL}}&parent___params==={{grid.appScope.currentReportUrlParams}}" >{{COL_FIELD.displayValue}}</a>' +
244 if(entry.columnWidth && entry.columnWidth!='null' && entry.columnWidth!='pxpx' && entry.columnWidth!='nullpx' && entry.columnWidth!='nullpxpx'){
245 tempColumnDef['minWidth'] = entry.columnWidth.substring(0, entry.columnWidth.length - 2);
247 tempColumnDef['minWidth'] = '100';
249 if(doColumnNeedToFreeze) {
250 tempColumnDef['pinnedLeft']= true;
251 if(columnFreezeEndColumn === entry.colId){
252 doColumnNeedToFreeze = false;
255 columnDefsArray.push(tempColumnDef);
258 $scope.gridOptions.paginationPageSizes= [$scope.reportData.pageSize];
259 $scope.gridOptions.paginationPageSize= $scope.reportData.pageSize;
260 if($scope.reportData.totalRows<14){
261 $scope.gridHeight = ($scope.reportData.totalRows+5)*30+'px';
263 $scope.gridHeight = '400px';
265 $scope.gridOptions.totalItems = $scope.reportData.totalRows;
266 $scope.gridOptions.columnDefs= columnDefsArray;
267 $scope.gridOptions.data= $scope.reportData.reportDataRows;
268 $scope.gridOptions.exporterPdfHeader.text= $scope.reportData.reportName;
271 $scope.$watch("reportData",function(newValue,oldValue) {
272 if(!$scope.urlParams.hideGrid){
273 if($scope.reportData){
274 if($scope.reportData.displayData && $scope.reportData.reportDataColumns){
275 $scope.showGrid = true;
276 $scope.uiGridRefresh();
282 $scope.triggerOtherFormFields = function(){
283 console.log("report_run");
284 var formFieldsUrl = $scope.getFormFieldSelectedValuesAsURL();
285 $http.get('raptor.htm?action=report.formfields.run.container&c_master='+$scope.reportData.reportID+'&'+formFieldsUrl).then(
287 $scope.reportData = response.data;
290 $timeout(function() {
291 $rootScope.isViewRendering = false;