6133fe6492a5214c605f6da041698bacfd27344f
[portal/sdk.git] /
1 appDS2.controller('reportStepController', function($scope,$http,$location, $routeParams, $q, $modal,$log,$window, raptorReportFactory, stepFormFactory, DOMHelper) {
2
3         // tabs for report wizard steps:
4         $scope.activeTabsId = 'Definition';
5
6         // For all the dropdown box, please declare the active selection variable in the following manner:
7         // $scope.selectedOpt = {}; 
8         // $scope.selectedOpt.value = "";
9         $scope.getDefinitionById = function(id) {
10                 raptorReportFactory.getDefinitionByReportId(id).then(function(data){
11                         $scope.loadDefinition(data);
12                         $scope.definitionData = data;
13                 },function(error){
14                         $log.error("raptorReportFactory: getSearchData failed.");
15                 });
16         }
17         
18
19         $scope.createNewDefinition = function() {
20                 raptorReportFactory.createNewDefinition().then(function(data){
21                         $scope.loadDefinition(data);
22                         $scope.definitionData = data;
23                 },function(error){
24                         $log.error("raptorReportFactory: getSearchData failed.");
25                 });
26         }       
27         
28         var initializeCreateReport = function() {
29                 $scope["selectedReportType"] ={};
30                 $scope.selectedReportType.value ="linear";
31                 $scope.selectedReportType2 ={};
32                 $scope.selectedReportType2.value ="";
33                 $scope.selectedDataSource ={};
34                 $scope.selectedDataSource.value="local";
35                 $scope.sqlScript = "SELECT ";
36                 $scope.pageSize = {"value":"50"};
37         }
38
39         
40         var loadSqlInSession = function(){              
41                 raptorReportFactory.getSqlInSession().then(function(data){
42                         $scope.sqlInSessionJSON = data;
43                         $scope.sqlScript = data.query;
44                 },function(error){
45                         $log.error("raptorReportFactory: getSearchData failed.");
46                 });
47         };
48         
49         initializeCreateReport();
50         if ($routeParams.reportMode) {
51                 if ($routeParams.reportMode=="copy") {
52                         raptorReportFactory.copyReportById($routeParams.reportId).then(function(data){
53                                   $scope.$emit('RefreshInsession');
54                         },function(error){
55                                 $log.error("raptorReportFactory: deleteFormFieldById failed.");
56                         });                                                                                                     
57                 } else if ($routeParams.reportMode=="import") {
58                         $scope.$emit('RefreshInsession');
59                 }
60         } else if ($routeParams.reportId) {
61                 $scope.getDefinitionById($routeParams.reportId);
62                 $scope.isEdit = true;
63                 $scope.reportId = $routeParams.reportId;
64         } else {
65                 $scope.isEdit = false;
66                 $scope.createNewDefinition();
67         }
68         
69         
70         $scope.RunCurrentReport = function (){
71                 $window.location.href = "#/report_run/c_master="+$scope.reportId+"&refresh=Y";
72         }
73         
74         $scope.deleteFormField = function(rowData) {            
75                    var modalInstance = $modal.open({
76                                  scope: $scope,
77                                  animation: $scope.animationsEnabled,
78                                  templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-formfield-del-confirm.html',
79                                  sizeClass: 'modal-large',
80                                  controller: ['$scope', '$modalInstance', '$http', '$log','raptorReportFactory','rowData', function ($scope, $modalInstance, $http, $log, raptorReportFactory, rowData) {
81                                          $scope.tempFieldId = rowData.id;
82                                          $scope.ok = function() {
83                                                         raptorReportFactory.deleteFormFieldById(rowData.id).then(function(data){
84                                                         $modalInstance.close();                                                                                                                                                                                                 
85                                                         },function(error){
86                                                                 $log.error("raptorReportFactory: deleteFormFieldById failed.");
87                                                         });                                                                              
88                                          }                                       
89                                          $scope.cancel = function() {
90                                         $modalInstance.dismiss();
91                                  };
92                             }],
93                                 resolve:{
94                                         rowData: function(){
95                                         return rowData;
96                                         }
97                                  }
98                           });
99                       modalInstance.result.then(function () {
100                           $scope.$emit('RefreshFormField');
101                       }, function () {
102                       });               
103         }
104         
105         $scope.loadDefinition = function(definitionData) {
106                 $scope.reportId =  definitionData.reportId+"";
107                 $scope.reportName = definitionData.reportName;
108                 $scope.reportDescr = definitionData.reportDescr;
109                 $scope.formHelpText = definitionData.formHelpText;
110                 $scope.selectedPageSize = {"value": definitionData.pageSize+''};
111                 $scope.selectedMaxRowsInExcelCSVDownload = {"value": definitionData.maxRowsInExcelCSVDownload};
112                 $scope.reportTitle = definitionData.reportTitle;
113                 $scope.reportSubTitle = definitionData.reportSubTitle;
114                 $scope.selectedNumFormCols ={"value": definitionData.numFormCols+''}; 
115                 $scope.selectedFrozenColumns={"value": definitionData.frozenColumns+''};
116                 $scope.selectedDataGridAlign = {"value":definitionData.dataGridAlign+''};
117                 $scope.emptyMessage = definitionData.emptyMessage+'';
118                 $scope.selectedDataContainerHeight = {"value":definitionData.dataContainerHeight+''};
119                 $scope.selectedDataContainerWidth = {"value":definitionData.dataContainerWidth+''};
120                 var displayAreaValue = "null"
121                 for (var i=0; i<3; i++ ) {
122                         if (definitionData.displayArea[i].selected) {
123                                 displayAreaValue = definitionData.displayArea[i].name;
124                         }
125                 }
126                 $scope.selectedDisplayArea = {"value":displayAreaValue+""}; 
127                 
128                 $scope.hideFormFieldsAfterRunSelected = {"value": definitionData.hideFormFieldsAfterRun}
129
130                 $scope.hideFormFieldsSelected = {"value":definitionData.displayOptions[0].selected};
131                 $scope.hideChartSelected = {"value":definitionData.displayOptions[1].selected};
132                 $scope.hideReportDataSelected = {"value":definitionData.displayOptions[2].selected};
133                 $scope.hideExcelSelected = {"value":definitionData.displayOptions[3].selected};
134                 $scope.hidePdfSelected = {"value":definitionData.displayOptions[4].selected};
135                 $scope.runtimeColSortDisabled = {"value":definitionData.runtimeColSortDisabled};
136         } 
137         
138         
139         var setDefinition = function(){
140                 $scope.updatedDefJson = {
141                                   "tabName" : "Definition",
142                                   "tabId" : "Def",
143                                   "reportId" : ($scope.isEdit?$scope.reportId+'':"-1"),
144                                   "reportName" : $scope.reportName,
145                                   "reportDescr" :  $scope.reportDescr,
146                                   "reportType" : "Linear",
147                                   "dbInfo" : "local",
148                                   "formHelpText" : $scope.formHelpText,
149                                   "pageSize" : Number($scope.selectedPageSize.value),
150                                   "displayArea" : [ {
151                                     "id" : "HOME",
152                                     "name" : "HOME",
153                                     "selected" : ($scope.selectedDisplayArea.value=="HOME")
154                                   }, {
155                                     "id" : "CUSTOMER",
156                                     "name" : "CUSTOMER",
157                                     "selected" : ($scope.selectedDisplayArea.value==="CUSTOMER")
158                                   }, {
159                                     "id" : "REPORTS",
160                                     "name" : "REPORTS",
161                                     "selected" : ($scope.selectedDisplayArea.value==="REPORTS")
162                                   } ],
163                                   "hideFormFieldsAfterRun" : $scope.hideFormFieldsAfterRunSelected.value,
164                                   "maxRowsInExcelCSVDownload" : Number($scope.selectedMaxRowsInExcelCSVDownload.value),
165                                   "frozenColumns" : Number($scope.selectedFrozenColumns.value),
166                                   "dataGridAlign" : $scope.selectedDataGridAlign.value,
167                                   "emptyMessage" : $scope.emptyMessage,
168                                   "dataContainerHeight" : $scope.selectedDataContainerHeight.value,
169                                   "dataContainerWidth" : $scope.selectedDataContainerWidth.value,
170                                   "displayOptions" : [ {
171                                     "name" : "HideFormFields",
172                                     "selected" : $scope.hideFormFieldsSelected.value
173                                   }, {
174                                     "name" : "HideChart",
175                                     "selected" : $scope.hideChartSelected.value
176                                   }, {
177                                     "name" : "HideReportData",
178                                     "selected" : $scope.hideReportDataSelected.value
179                                   }, {
180                                     "name" : "HideExcel",
181                                     "selected" : $scope.hideExcelSelected.value
182                                   }, {
183                                     "name" : "HidePdf",
184                                     "selected" : $scope.hidePdfSelected.value
185                                   } ],
186                                   "runtimeColSortDisabled" : $scope.runtimeColSortDisabled.value,
187                                   "numFormCols" :  Number($scope.selectedNumFormCols.value),
188                                   "reportTitle" : $scope.reportTitle,
189                                   "reportSubTitle" : $scope.reportSubTitle
190                                 }
191
192         }
193         
194         var updateDefinitionData = function() {
195                         setDefinition();
196                         raptorReportFactory.updateDefinition($scope.updatedDefJson,$scope.isEdit).then(function(data){
197                         },function(error){
198                                 $log.error("raptorReportFactory: updateDefinition by Id failed.");
199                         });                             
200         }
201         
202         var saveNewDefinitionData = function() {
203                 setDefinition();
204                 raptorReportFactory.saveNewDefinition($scope.updatedDefJson).then(function(data){
205                 },function(error){
206                         $log.error("raptorReportFactory: saveNewDefinition by Id failed.");
207                 });             
208         }
209         
210         $scope.testRunSql = function(){
211                 var queryJSON = {query: $scope.sqlScript};
212                 queryJSON = JSON.stringify(queryJSON);
213                 raptorReportFactory.testRunSQL(queryJSON).then(function(data){
214                         var modalInstance = $modal.open({
215                                  scope: $scope,
216                                  animation: $scope.animationsEnabled,
217                                  templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html',
218                                  sizeClass: 'modal-large',
219                                  controller: ['$scope', '$modalInstance', '$http', '$log','raptorReportFactory','queriedData', function ($scope, $modalInstance, $http, $log, raptorReportFactory, queriedData) {
220                                          var init = function() {
221                                                  $scope.isError = false;
222                                                  if (queriedData.errormessage) {
223                                                          $scope.isError = true;
224                                                          $scope.errormessage = queriedData.errormessage;
225                                                          $scope.stacktrace = queriedData.stacktrace;
226                                                  } else {
227                                                          $scope.queryData = queriedData;
228                                                 }
229                                          }
230                                          init();                        
231                                   $scope.close = function() {
232                                         $modalInstance.dismiss();
233                                   };
234                             }],
235                                 resolve:{
236                                         queriedData: function(){
237                                         return data;
238                                         }
239                                  }
240                    })                   
241                         
242                 },function(error){
243                         $log.error("raptorReportFactory: test run SQL failed.");
244                 });             
245         }
246
247
248         $scope.formFieldVerifySQL= function(sqlScript){
249                 var queryJSON = {query: sqlScript};
250                 queryJSON = JSON.stringify(queryJSON);
251                 raptorReportFactory.formFieldVerifySQL(queryJSON).then(function(data){
252                         var modalInstance = $modal.open({
253                                  scope: $scope,
254                                  animation: $scope.animationsEnabled,
255                                  templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-test-run-sql.html',
256                                  sizeClass: 'modal-large',
257                                  controller: ['$scope', '$modalInstance', '$http', '$log','raptorReportFactory','queriedData', function ($scope, $modalInstance, $http, $log, raptorReportFactory, queriedData) {
258                                          var init = function() {
259                                                  $scope.isError = false;
260                                                  if (queriedData.errormessage) {
261                                                          $scope.isError = true;
262                                                          $scope.errormessage = queriedData.errormessage;
263                                                          $scope.stacktrace = queriedData.stacktrace;
264                                                  } else {
265                                                          $scope.queryData = queriedData;
266                                                 }
267                                          }
268                                          init();                        
269                                   $scope.close = function() {
270                                         $modalInstance.dismiss();
271                                   };
272                             }],
273                                 resolve:{
274                                         queriedData: function(){
275                                         return data;
276                                         }
277                                  }
278                    })                   
279                         
280                 },function(error){
281                         $log.error("raptorReportFactory: test run SQL failed.");
282                 });             
283         }
284         
285         
286         /*      $scope.selectedDataSource.allowSchedule={};
287         $scope.selectedDataSource.allowSchedule.value=""*/
288         
289     var getJsonSrcName = function(stepNum){
290         var JsonSrcPrefix = "app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step"
291         return JsonSrcPrefix + stepNum +".json";
292     }
293         
294         $scope.gTabs = [
295          {
296              title: 'Definition',
297              id: 'Definition',
298              uniqueId: 'uniqueTab1x',
299              tabPanelId: 'threetab1x'
300          }, {
301              title: 'SQL',
302              id: 'SQL',
303              uniqueId: 'uniqueTab2x',
304              tabPanelId: 'threetab2x',
305              disabled: (!$scope.isEdit)
306          }, {
307              title: 'Columns',
308              id: 'Columns',
309              uniqueId: 'uniqueTab3x',
310              tabPanelId: 'threetab3x',
311              disabled: (!$scope.isEdit)
312          }, {
313              title: 'Form Fields',
314              id: 'Form Fields',
315              uniqueId: 'uniqueTab4x',
316              tabPanelId: 'threetab4x',
317              disabled: (!$scope.isEdit)
318          }, {
319              title: 'Run',
320              id: 'Run',
321              uniqueId: 'uniqueTab5x',
322              tabPanelId: 'threetab5x',
323              disabled: (!$scope.isEdit)
324          }
325      ];
326         
327         $scope.unhideAllOtherTabs = function(){
328                 for (var selectedTab = 0; selectedTab < $scope.gTabs.length; selectedTab++) {
329                         $scope.gTabs[selectedTab].disabled = false;
330                 }
331         }
332     
333         $scope.openColumnPopup = function (rowData) {
334                    var modalInstance = $modal.open({
335                                  scope: $scope,
336                                  animation: $scope.animationsEnabled,
337                                  templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-col-edit.html',
338                                  sizeClass: 'modal-large',
339                                  controller: ['$scope', '$modalInstance', '$http', '$log','raptorReportFactory','colData', function ($scope, $modalInstance, $http, $log, raptorReportFactory, colData) {
340                                          raptorReportFactory.getColumnEditInfoById(colData.id).then(function(data){
341                                                         $scope.columnEditData = data;
342                                                         $scope.colId = data.colId;
343 /*                                                      $scope.colName = data.colName;*/
344                                                         $scope.colName = {'value':data.colName+''};
345                                                         $scope.selectedDisplayAlignment = {"value":data.displayAlignment+''};
346                                                         $scope.selectedDisplayHeaderAlignment = {"value":data.displayHeaderAlignment+''};
347                                                         $scope.sortable = {"value":''+data.sortable};
348                                                         $scope.visible = {"value":''+data.visible};
349                                                         $scope.drilldownURL = data.drilldownURL;
350                                                         $scope.drilldownParams = data.drilldownParams;
351                                                         $scope.drilldownType = data.drilldownType;                                      
352                                                         },function(error){
353                                                         $log.error("raptorReportFactory: getColumnEditInfoById failed.");
354                                                 });                                              
355
356                                          var init = function() {
357 /*                                               $scope.colTableRowData = colData;*/
358                                                  $scope.displayAlignmentOptions = [
359                                                          {value:"null", text:""},                                                        
360                                                          {value:"Left", text:"Left"},
361                                                          {value:"Center", text:"Center"},
362                                                          {value:"Right", text:"Right"}
363                                                  ];
364                                                  $scope.ynOptions = [
365                                                          {value:"true", text:"Yes"},
366                                                          {value:"false", text:"No"}                                                      
367                                                  ];
368                                                  $scope.drillDownOptions = [
369                                                          {value:"drillDownOpt1", text:"drillDownOpt1"},
370                                                          {value:"drillDownOpt2", text:"drillDownOpt2"},
371                                                          {value:"drillDownOpt3", text:"drillDownOpt3"}
372                                                  ];
373                                          }
374                                          
375                                          init();
376                                          
377                                          $scope.save = function() {
378                                                  var colInfo = {
379                                                                   "tabId" : "ColEdit",
380                                                                   "tabName" : "Column Edit",
381                                                                   "colId" : $scope.colId,
382                                                                   "colName" : $scope.colName.value,
383                                                                   "displayAlignment" : ($scope.selectedDisplayAlignment.value=="null")?null:$scope.selectedDisplayAlignment.value,
384                                                                   "displayHeaderAlignment" : ($scope.selectedDisplayHeaderAlignment.value=="null")?null:$scope.selectedDisplayHeaderAlignment.value,
385                                                                   "sortable" : ($scope.sortable.value=="true"),
386                                                                   "visible" : ($scope.visible.value=="true"),
387                                                                   "drilldownURL" : "",
388                                                                   "drilldownParams" : "",
389                                                                   "drilldownType" : ""
390                                                                 }
391                                                  raptorReportFactory.saveColumnEditInfo(colInfo).then(function(data){
392                                                         $modalInstance.close();                                                                                                                                 
393                                                                 },function(error){
394                                                                 $log.error("raptorReportFactory: getColumnEditInfoById failed.");
395                                                         });                                              
396                                   };                                    
397                         
398                                   $scope.cancel = function() {
399                                         $modalInstance.dismiss();
400                                   };
401                             }],
402                                 resolve:{
403                                         colData: function(){
404                                         return rowData;
405                                         }
406                                  }
407                           });
408
409                       modalInstance.result.then(function () {
410                                 $scope.$emit('RefreshColumnList');
411                       }, function () {
412                       });
413     };
414     $scope.addNewFormField = function () {
415                    var modalInstance = $modal.open({
416                                  scope: $scope,
417                                  animation: $scope.animationsEnabled,
418                                  templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html',
419                                  sizeClass: 'modal-large',
420                                  controller: ['$scope', '$modalInstance', '$http', '$log','raptorReportFactory', function ($scope, $modalInstance, $http, $log, raptorReportFactory) {          
421                                          raptorReportFactory.getFormFieldEditInfoById("add").then(function(data){
422                                                  $scope.formFieldEditData = data;
423                                                  $scope.fieldId = $scope.formFieldEditData.fieldId;
424                                                  $scope.fieldName ={"value": $scope.formFieldEditData.fieldName};
425                                                  $scope.selectedVisible = {"value":$scope.formFieldEditData.visible+''};
426                                                  $scope.defaultValue = {"value": $scope.formFieldEditData.defaultValue};
427                                                  $scope.fieldDefaultSQL = {"value": $scope.formFieldEditData.fieldDefaultSQL};
428                                                  $scope.fieldSqlContent = {"value": $scope.formFieldEditData.fieldSQL};
429                                                  $scope.selectedValidationType = {"value":$scope.formFieldEditData.validationType +''};
430                                                  $scope.selectedFieldType = {"value":$scope.formFieldEditData.fieldType +''};
431                                                 $scope.sqlDefaultValueSelected= {value:false};
432                                                 $scope.sqlDefaultValueSelected ={"value":false};
433                                                 if (($scope.fieldDefaultSQL.value)&&($scope.fieldDefaultSQL.value!="")) {
434                                                         $scope.sqlDefaultValueSelected.value =true;
435                                                 } 
436                                                 },function(error){
437                                                 $log.error("raptorReportFactory: getColumnEditInfoById failed.");
438                                         });
439                                          
440
441                                          $scope.ynOptions = [
442                                                  {value:"true", text:"Yes"},
443                                                  {value:"false", text:"No"}                                                      
444                                          ];
445                                          
446                                          $scope.verifyFieldValueOptions = [
447                                                  {value:"DATE", text:"Date"},
448                                                  {value:"TIME_STAMP_HOUR", text:"TimeStamp (Hour)"},
449                                                  {value:"TIME_STAMP_HOUR_MIN", text:"TimeStamp (Hour,Min)"},
450                                                  {value:"HIDDEN", text:"Hidden"}                                                                                                                                                                                                                 
451                                          ]                                       
452                                          
453                                          $scope.fieldTypeOptions = [
454                                                  {value:"TEXT", text:"Text Box"},
455                                                  {value:"LIST_BOX", text:"List Box"},
456                                                  {value:"LIST_MULTI_SELECT", text:"Multi-select List Box"},
457                                                  {value:"HIDDEN", text:"Hidden"}                                                                                                                                                         
458                                         ];
459                                          
460                                          $scope.save = function() {
461                                                  var formFieldJSON = {
462                                                           "tabId" : "FormEdit",
463                                                           "tabName" : "Form Edit",
464                                                           "fieldId" : $scope.fieldId,
465                                                           "fieldName" : $scope.fieldName.value,
466                                                           "fieldType" : $scope.selectedFieldType.value,
467                                                           "visible" : ($scope.selectedVisible.value=="true"),
468                                                           "defaultValue" : ($scope.sqlDefaultValueSelected.value?'':$scope.defaultValue.value),
469                                                           "fieldDefaultSQL" : ($scope.sqlDefaultValueSelected.value?$scope.fieldDefaultSQL.value:""),
470                                                           "fieldSQL" :$scope.fieldSqlContent.value,
471                                                           "validationType" : "NONE",
472                                                           "predefinedValueList" :null
473                                                         }
474                                                  raptorReportFactory.saveFormFieldEditInfo(formFieldJSON).then(function(data){
475                                                         $modalInstance.close(); 
476                                                                 },function(error){
477                                                                 $log.error("raptorReportFactory: saveFormFieldEditInfo failed.");
478                                                         });                               
479                                   };
480                         
481                                   $scope.cancel = function() {
482                                         $modalInstance.dismiss();
483                                   };
484                             }]
485                           });
486                       modalInstance.result.then(function () {
487                                 $scope.$emit('RefreshFormField');
488                       }, function () {
489                       });                  
490     };
491         
492         $scope.openFormFieldPopup = function (rowData) {
493                    var modalInstance = $modal.open({
494                                  scope: $scope,
495                                  animation: $scope.animationsEnabled,
496                                  templateUrl: 'app/fusion/scripts/DS2-view-models/ds2-reports/modal/report-wizard-formfield-edit.html',
497                                  sizeClass: 'modal-large',
498                                  controller: ['$scope', '$modalInstance', '$http', '$log','raptorReportFactory','fieldData', function ($scope, $modalInstance, $http, $log, raptorReportFactory, fieldData) {
499                                          var init = function() {
500                                                  raptorReportFactory.getFormFieldEditInfoById(fieldData.id).then(function(data){
501                                                                  $scope.formFieldEditData = data;
502                                                                  $scope.fieldId = $scope.formFieldEditData.fieldId;
503                                                                  $scope.fieldName = {"value":$scope.formFieldEditData.fieldName};
504                                                                  $scope.selectedVisible = {"value":$scope.formFieldEditData.visible+''};
505                                                                  $scope.defaultValue = {"value":$scope.formFieldEditData.defaultValue};
506                                                                  $scope.fieldDefaultSQL = {"value": $scope.formFieldEditData.fieldDefaultSQL};
507                                                                  $scope.fieldSqlContent = {"value": $scope.formFieldEditData.fieldSQL};
508                                                                  $scope.selectedValidationType = {"value":$scope.formFieldEditData.validationType +''};
509                                                                  $scope.selectedFieldType = {"value":$scope.formFieldEditData.fieldType +''};
510                                                                 $scope.sqlDefaultValueSelected ={"value":false};
511                                                                 if (($scope.fieldDefaultSQL.value)&&($scope.fieldDefaultSQL.value!="")) {
512                                                                         $scope.sqlDefaultValueSelected.value =true;
513                                                                 } 
514                                                                 },function(error){
515                                                                 $log.error("raptorReportFactory: getColumnEditInfoById failed.");
516                                                         });                                                                                             
517                                                  
518                                                  $scope.ynOptions = [
519                                                          {value:"true", text:"Yes"},
520                                                          {value:"false", text:"No"}                                                      
521                                                  ];
522                                                  
523                                                  $scope.verifyFieldValueOptions = [
524                                                          {value:"DATE", text:"Date"},
525                                                          {value:"TIME_STAMP_HOUR", text:"TimeStamp (Hour)"},
526                                                          {value:"TIME_STAMP_HOUR_MIN", text:"TimeStamp (Hour,Min)"},
527                                                          {value:"HIDDEN", text:"Hidden"}                                                                                                                                                                                                                 
528                                                  ]
529                                                  
530                                                  $scope.fieldTypeOptions = [
531                                                          {value:"TEXT", text:"Text Box"},
532                                                          {value:"LIST_BOX", text:"List Box"},
533                                                          {value:"LIST_MULTI_SELECT", text:"Multi-select List Box"},
534                                                          {value:"HIDDEN", text:"Hidden"}                                                                                                                                                         
535                                                 ];
536                                                 
537                                          }
538                                          
539                                          init();
540                                          
541                                          $scope.save = function() {
542                                                  var formFieldJSON = {
543                                                           "tabId" : "FormEdit",
544                                                           "tabName" : "Form Edit",
545                                                           "fieldId" : $scope.fieldId,
546                                                           "fieldName" : $scope.fieldName.value,
547                                                           "fieldType" : $scope.selectedFieldType.value,
548                                                           "visible" : ($scope.selectedVisible.value=="true"),
549                                                           "defaultValue" : ($scope.sqlDefaultValueSelected.value?'':$scope.defaultValue.value),
550                                                           "fieldDefaultSQL" : ($scope.sqlDefaultValueSelected.value?$scope.fieldDefaultSQL.value:""),
551                                                           "fieldSQL" :$scope.fieldSqlContent.value,
552                                                           "validationType" : "NONE",
553                                                           "predefinedValueList" :null
554                                                         }
555                                                  raptorReportFactory.saveFormFieldEditInfo(formFieldJSON).then(function(data){
556                                                         $modalInstance.close(); 
557                                                                 },function(error){
558                                                                 $log.error("raptorReportFactory: saveFormFieldEditInfo failed.");
559                                                         });                               
560                                   };
561                         
562                                   $scope.cancel = function() {
563                                         $modalInstance.dismiss();
564                                   };
565                             }],
566                                 resolve:{
567                                         fieldData: function(){
568                                         return rowData;
569                                         }
570                                  }
571                           });
572
573                       modalInstance.result.then(function () {
574                                 $scope.$emit('RefreshFormField');
575                       }, function () {
576                       });
577  };
578     
579         
580     $scope.$watch('activeTabsId', function (newVal, oldVal) {
581         if(newVal !== oldVal) {
582             var selectedTab;
583             for (selectedTab = 0; selectedTab < $scope.gTabs.length; selectedTab++) {
584                 if ($scope.gTabs[selectedTab].id === newVal) {
585                     $scope.stepNum = selectedTab;
586 /*                    stepFormFactory.getStepJSONData(getJsonSrcName($scope.stepNum))*/
587                         $scope.isColumnStep = false;                                                
588                         $scope.isFormFieldStep = false;
589                         $scope.renderStep(selectedTab+1);
590                         if ($scope.stepNum == 2) {
591                                 loadSqlInSession();
592                         }       else if ($scope.stepNum == 3) {
593                                 $scope.isColumnStep = true;
594
595                                 raptorReportFactory.getColumnList().then(function(data){
596                                         $scope.colTableRowData = data;
597                                 },function(error){
598                                         $log.error("raptorReportFactory: get column list failed.");                             });
599                                 
600                         }  else if ($scope.stepNum == 4) {
601                                 $scope.isFormFieldStep = true;
602                                 // put within then function:
603                                 raptorReportFactory.getFormFieldList().then(function(data){
604                                         $scope.formFieldData = data;
605                                 },function(error){
606                                         $log.error("raptorReportFactory: get formfields failed.");                              });
607                         }  else if ($scope.stepNum == 5) {
608                                 raptorReportFactory.getDefinitionInSession().then(function(data){
609                                 $scope.reportId = data.reportId;
610                         },function(error){
611                                 $log.error("raptorReportFactory: getDefinitionInSession failed.");                              });             
612                         }
613                         
614                         if ($scope.stepNum>1){
615                                 $scope.unhideAllOtherTabs();
616                         }
617                     break;
618                 }
619             }
620
621             var selectedTabPanelElement = document.getElementById($scope.gTabs[selectedTab].tabPanelId);
622
623             var elem = null;
624             if (selectedTabPanelElement) {
625                 elem = DOMHelper.firstTabableElement(selectedTabPanelElement);
626             }
627
628             if (elem) {
629                 $timeout(function () {
630                     elem.focus();
631                 }, 100);
632             }
633         }
634     });  
635          
636     
637     $scope.renderStep = function(stepNum){
638         var containerElement = angular.element(document.getElementById("stepView"));
639         containerElement.empty();
640         $scope.stepNum = stepNum;
641         var jsonSrcName = getJsonSrcName(stepNum);
642         stepFormFactory.renderForm(jsonSrcName, containerElement, $scope);
643     }
644     
645     // initialize the page at step 1;
646     $scope.renderStep(1);
647     
648         // create a message to display in our view
649         $scope.allProjects = [];
650         if(!$routeParams.step && $routeParams.step == "") $routeParams.step = 1;
651         if($routeParams.proj && $routeParams.proj > 0) 
652                 $scope.projid  = $routeParams.proj;
653         if($routeParams.step)
654                 $scope.stepNum = $routeParams.step;
655         else
656                 $scope.stepNum = 1;     
657
658     $scope.jsonSrcName = getJsonSrcName($scope.stepNum);
659     
660     $scope.selectAction = function () {
661       var containerElement = angular.element(document.getElementById("stepView"));
662       containerElement.empty();
663       $scope.project_name = this.prj.projectName;
664       $scope.stepNum = 1;
665       var stepNum = $scope.stepNum;      
666       var jsonSrcName =         getJsonSrcName(stepNum);
667       stepFormFactory.renderForm(jsonSrcName, containerElement, $scope);
668       renderProject(this.prj.id, 1);
669     };
670
671     
672     $scope.createAction = function () {
673       var containerElement = angular.element(document.getElementById("stepView"));
674       containerElement.empty();
675       $scope.stepNum = 1;
676       var stepNum = $scope.stepNum;
677       $scope.jsonSrcName = "app/fusion/scripts/DS2-view-models/ds2-reports/wz_steps/json/step"+$scope.stepNum +".json";
678         var jsonSrcName = $scope.jsonSrcName;
679       stepFormFactory.renderForm(jsonSrcName, containerElement, $scope);
680     };
681
682     // select current project
683     renderProject = function (proj_id, stepNum) {
684         var userSelectedPrjId = proj_id;
685         $http({
686             method: 'GET',
687             url: 'get_selected_project_data',   
688             params:{'selectedPrjId':userSelectedPrjId, 'step': stepNum}
689                 }).then(function successCallback(response) {
690                  var selectedproject = response.data;
691                 $scope.projid  = userSelectedPrjId;
692              //$scope.allProjects = projectLists; 
693              //$location.path('/'+userSelectedPrjId+'/'+stepNum);
694              var div = d3.select("#stepView");
695              div.select("[name='proj_id']").text(userSelectedPrjId);
696              div.select("[name='proj_id']").property("value", userSelectedPrjId);
697              d3.select("[name='project_id']").property("value", userSelectedPrjId);
698              var h3Text = div.select("h3").text();
699              div.select("h3").text($scope.project_name+ " - " + h3Text);
700              for (var key in selectedproject) {
701                   if (selectedproject.hasOwnProperty(key)) {
702                     var val = selectedproject[key];
703                     var formElement = d3.selectAll("[name='" + key +  "']");                        
704                     if(formElement[0].length > 0)
705                      console.log(formElement.attr("type"));
706                     if(formElement[0].length > 0 && formElement.attr("type") === "radio") {
707                         var formRadio = d3.selectAll("[id='" + key +"_"+val +  "']");
708                         formRadio.property('checked', true);
709                     }
710                     if(formElement[0].length > 0 && formElement.property("type") === "textarea") {
711                         div.select("textarea[name='" + key +"']").property('value', val);
712                     }
713                     if(formElement[0].length > 0 && formElement.attr("type") === "text") {
714                         var formText = d3.selectAll("[name='" + key +  "']");
715                         formText.property("value", val);                        
716                     }
717                     if(formElement[0].length > 0 && formElement.html().startsWith("<option")) {
718                         var formSelect = d3.selectAll("[name='" + key + "']");
719                         
720                         var checkOption = function (e) {
721                             if(e.label === val){
722                                 return formSelect.property("selectedIndex", e.index );
723                             }
724                         };
725
726                         formSelect.selectAll("option").forEach(function(d) {d.forEach(function(optionD) { console.log(optionD);checkOption(optionD); }) });
727                     }
728                          
729                     if(formElement[0].length == 0) {
730                         if(key != 'step') {
731                             if( Object.prototype.toString.call( val ) === '[object Array]' ) {
732                                 val.forEach(function(d){
733                                         for (var keyCheck in d) {
734                                                 if (d.hasOwnProperty(keyCheck)) {
735                                                         var valCheck = d[keyCheck];
736                                                         var formCheck = d3.selectAll("[name='" + key + "_"+keyCheck + "']");
737                                                         if(valCheck === true)
738                                                         formCheck.property('checked', true);
739                                                 }
740                                         }
741                                 });
742                            }
743                         }
744                         var formElementOther = d3.selectAll("[name='" + key + "_"+ val + "']");
745                         if(formElementOther[0].length > 0 && formElementOther.attr("type") === "checkbox") {
746                                 var formCheckbox = d3.selectAll("[name='" + key +"_"+val +  "']");
747                                 formRadio.property('checked', true);
748                         }
749                     }
750                   }
751                 }
752              
753              
754              
755         });
756     }
757         
758   //submit function
759     $scope.submit = function(){
760         let defer = $q.defer();
761       
762         var div = d3.select("#stepView");
763         var jsonSrcName = $scope.jsonSrcName;
764         var stepNum = $scope.stepNum;
765         var values = "";
766          $http({
767              method: 'GET',
768              url: jsonSrcName
769              }).then(function successCallback(response) {
770                  var json = response.data;
771                  var step = json.step;
772                  if(step > 0) {
773                          var sections = json.content.sections;                           
774                      sections.forEach(function(d, i) {
775                          var elements = d.elements;
776                          if(elements) {
777                              //elements.forEach(function(element, elementIndex) {
778                                  values += "{";
779                                  values += "\"step\""+ ":\"" + step + "\",";
780                                  values += "\"proj_id\""+ ":\"" + d3.select('input[name="project_id"]').property("value") + "\",";
781                                  
782                                  for (elementIndex = 0; elementIndex < elements.length; elementIndex++) {
783                                          var element = elements[elementIndex];
784                                  
785                                  if(elementIndex > 0) values += ",";  
786                                  values += "\""+element.name +"\""+ ":" ;
787                                  if(element.input === "hidden") {
788                                           values += "\""+div.select('input[name="'+element.name+'"]').property("value") +"\"";
789                                  }
790                                  if(element.input === "radio") {
791                                          values += "\""+ div.select('input[name="'+element.name+'"]:checked').property("value") +"\"";                                           
792                                  }
793                                  if(element.input === "checkbox") {
794                                          var checkOptions = element.options;
795                                          values += "[{";
796                                          checkOptions.forEach(function(d, i) {
797                                        // if(document.getElementById("'"+element.name+"_"+d.id+"'") != null)
798                                                   values += "\""+d.id+"\""+ ":" + div.select('input[name="'+element.name+"_"+d.id+'"]').property("checked") ;
799                                                   if(i<checkOptions.length-1) {
800                                                           values +=  ",";
801                                                   }
802                                          })
803                                          values += "}]";
804                                  }
805                                  if(element.input === "text") {
806                                          values += "\""+div.select('input[name="'+element.name+'"]').property("value") +"\"";
807                                  }                               
808                                  if(element.input === "textarea") {
809                                          values += "\""+div.select('textarea[name="'+element.name+'"]').node().value +"\"";
810                                  }                               
811                                  if(element.input === "select") {
812                                          values += "\""+ div.select('select[name="'+element.name+'"]').property("value") + "\"";
813                                  } 
814                                  
815                              };
816                              values += "}";
817                          }
818                      });
819                  }
820                          var valueJSON = JSON.parse(values);
821                          var valueStr = JSON.stringify(valueJSON, null, 4);
822                  $http({method:'POST', url:'save_steps', data: jsonSrcName, params:{'result' : valueStr, 'proj_id' : values.proj_id}}).success(function(data, status) {
823                     if(data.project_name)
824                         $scope.project_name = data.project_name;
825                     div.select("[name='proj_id']").property("value", data.proj_id);
826                     d3.select("[name='project_id']").property("value", data.proj_id);
827                     //$scope.projid = data.proj_id;
828                     valueStr=JSON.stringify(data, null, 4);
829                     defer.resolve();
830                     //stepNum = Number(stepNum || 0)+1;
831                     //document.getElementById('itestframe').src = data;
832                
833                 }) 
834
835                 defer.resolve();                 
836                  
837              });
838        // $location.path('/step'+($scope.stepNum+1));
839         return defer.promise;
840     
841     };
842     
843     //Save function
844     $scope.save = function() {
845                 if ($scope.stepNum ==1) {                       
846                         updateDefinitionData();
847                 }
848         };
849
850     //Next function
851     $scope.next = function(){
852                 if ($scope.stepNum ==1) {                       
853                         updateDefinitionData();
854                 }
855         $scope.stepNum = $scope.stepNum +1;
856         $scope.activeTabsId = $scope.gTabs[$scope.stepNum-1].id;
857     };   
858
859     //Previous function
860     $scope.previous = function(){
861         $scope.stepNum = $scope.stepNum -1;
862         $scope.activeTabsId = $scope.gTabs[$scope.stepNum-1].id;
863         
864     };
865
866         $scope.$on('RefreshInsession', function(event) {
867                 $scope.isEdit = true;
868                 $scope.reportId = -1;                           
869                 $scope.getDefinitionById(-1);
870         });
871         
872         $scope.$on('RefreshFormField', function(event) {
873                 raptorReportFactory.getFormFieldList().then(function(data){
874                         $scope.formFieldData = data;
875                 },function(error){
876                         $log.error("raptorReportFactory: get formfields failed.");  
877                         });
878         });
879
880         $scope.$on('RefreshColumnList', function(event) {
881                 raptorReportFactory.getColumnList().then(function(data){
882                         $scope.colTableRowData = data;
883                 },function(error){
884                         $log.error("raptorReportFactory: get column list failed.");           
885                 });             
886         });
887         
888     $scope.getAllProjects = function(){
889         $http({
890             method: 'GET',
891             url: 'get_projects'   
892             }).then(function successCallback(response) {
893                  var projectLists = response.data;
894              $scope.allProjects = projectLists; 
895          });
896     }
897
898     // getAllProjects();
899
900 });