193e5ad0752e3bd73661bf46b6cd5c89d78c4945
[portal/sdk.git] /
1 import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, ViewChild} from '@angular/core';
2 import {MatPaginator} from '@angular/material/paginator';
3 import {MatSort} from '@angular/material/sort';
4 import {MatTable} from '@angular/material/table';
5 import {DataTableDataSource, DataTableItem} from './column-list-datasource';
6 import {HttpClient} from '@angular/common/http';
7 import {ColumnService} from '../column.service';
8 import {SemaphoreList} from '../model/semaphore-list';
9 import {Semaphore} from '../model/semaphore';
10
11 @Component({
12     selector: 'app-column-list',
13     templateUrl: './column-list.component.html',
14     styleUrls: ['./column-list.component.css'],
15 })
16 export class ColumnListComponent implements OnInit {
17     @ViewChild(MatPaginator, {static: false} as any) paginator: MatPaginator;
18     @ViewChild(MatSort, {static: false} as any) sort: MatSort;
19     @ViewChild(MatTable, {static: false} as any) table: MatTable<DataTableItem>;
20     @Input('reportId') reportId: number;
21     dataSource: DataTableDataSource;
22     finalGetObj: {};
23     finalEditRowGetObj: {};
24     finalObjArr: DataTableItem[];
25     status: string;
26     message: string;
27     showDialog: boolean;
28     closable: boolean;
29     columnId: string;
30     id: string;
31     name: string;
32     noWrap: boolean;
33     visible: boolean;
34     dependsOnFormFields: string;
35     dataType: string;
36     groupByPos: string;
37     customTextForSubTotal: string;
38     hideRepeatedValues: boolean;
39     multiGroupColumnLevel;
40     colspan: string;
41     displayName: string;
42     displayWidthInPixel: string;
43     indentation: string;
44     displayAlignment: string;
45     displayHeaderAlignment: string;
46     sortable: boolean;
47     drilldownURL: string;
48     displayTotal: string;
49     URLListObj: {};
50     URLListObjArray: {}[];
51     TotalColListObj: {};
52     TotalColListObjArray: {}[];
53     finalPOSTObj: {};
54     isDisabled: boolean;
55     showConfirmButton: boolean;
56     displayedColumns = ['no', 'id', 'name', 'edit'];
57     SQLstatus: string;
58     SQLmessage: string;
59     showSaveColDialog: boolean;
60     Colclosable: boolean;
61     EditColmessage: string;
62     EditColstatus: string;
63     showEditDrillDownPage: boolean;
64     showAdvancedDisplayPage = false;
65     drillDownReportId: string;
66     drilldownParams: string;
67     drilldownType: string;
68     drillDownObj: {};
69     checkCnt: number;
70     showSpinner: boolean;
71     displayTable: boolean;
72     semaphoreList: SemaphoreList;
73     semaphoreName: String;
74     semaphoreId: String;
75     incomingDrillDownParams: string;
76     isIncomingDrillDownParams: boolean;
77     SQLclosable: any;
78     private newSemaphoreList: any;
79     private addDisplay = false;
80     columnList: any;
81
82     constructor(private _http: HttpClient,
83                 private _columnService: ColumnService,
84                 private changeDetectorRefs: ChangeDetectorRef) {
85
86         this.showEditDrillDownPage = false;
87         this.showAdvancedDisplayPage = false;
88         this.showConfirmButton = false;
89         this.addDisplay = false;
90         this.dataSource = new DataTableDataSource();
91         this.finalGetObj = {};
92         this.finalObjArr = [];
93         this.finalEditRowGetObj = {};
94         this.URLListObjArray = [];
95         this.TotalColListObjArray = [];
96         this.finalPOSTObj = {};
97         this.drillDownObj = {};
98         this.checkCnt = 0;
99         this.showSpinner = false;
100         this.semaphoreList = new class implements SemaphoreList {
101             semaphore: Semaphore[];
102         };
103         this.semaphoreName = 'No Display';
104         this.semaphoreId = '';
105         this.incomingDrillDownParams = '';
106         this.isIncomingDrillDownParams = false;
107     }
108
109     ngOnInit() {
110         this.displayTable = true;
111         this._columnService.getColumnList()
112             .subscribe((response) => {
113                 this.showSpinner = true;
114                 this.finalGetObj = response;
115                 this.columnList = response;
116                 let fgo_counter = 0;
117                 while (this.finalGetObj[fgo_counter]) {
118                     this.finalGetObj[fgo_counter]['no'] = fgo_counter + 1;
119                     this.finalGetObj[fgo_counter]['edit'] = '';
120                     this.finalObjArr.push(this.finalGetObj[fgo_counter]);
121                     fgo_counter++;
122                 }
123                 this.dataSource.data = this.finalObjArr;
124                 this.dataSource.sort = this.sort;
125                 this.dataSource.paginator = this.paginator;
126                 this.table.dataSource = this.dataSource;
127                 this.dataSource.data = this.finalObjArr;
128                 this.showSpinner = false;
129             });
130         this.showDialog = false;
131         this.showSaveColDialog = false;
132     }
133
134
135     ngDoCheck() {
136         this.drillDownReportId = this.drilldownURL;
137         this.drillDownObj['drillDownUrl'] = this.drilldownURL;
138         this.drillDownObj['drillDownParams'] = this.drilldownParams;
139         this.drillDownObj['drillDownType'] = this.drilldownType;
140     }
141
142
143     editRecord(id: string) {
144         this.showSpinner = true;
145         this.semaphoreList = new class implements SemaphoreList {
146             semaphore: Semaphore[];
147         };
148         this.semaphoreName = 'No Display';
149         this.semaphoreId = '';
150         this.columnId = id;
151         this._columnService.getIndividualColumnData(id)
152             .subscribe((response) => {
153                 this.finalEditRowGetObj = response;
154                 this.id = this.finalEditRowGetObj['colId'];
155                 this.name = this.finalEditRowGetObj['colName'];
156                 this.noWrap = (this.finalEditRowGetObj['noWrap'] === 'Y' ? true : false);
157                 this.visible = this.finalEditRowGetObj['visible'];
158                 this.dependsOnFormFields = this.finalEditRowGetObj['depeondsOnForField'];
159                 this.dataType = this.finalEditRowGetObj['dataType'];
160                 this.groupByPos = (this.finalEditRowGetObj['groupByPos'] == null ? 0 : this.finalEditRowGetObj['groupByPos']);
161                 this.customTextForSubTotal = this.finalEditRowGetObj['subTotalCustomText'];
162                 this.hideRepeatedValues = this.finalEditRowGetObj['hideRepeatedKey'];
163                 this.multiGroupColumnLevel = (this.finalEditRowGetObj['level'] == null ? 0 : this.finalEditRowGetObj['level']);
164                 this.colspan = (this.finalEditRowGetObj['colspan'] == null ? 0 : this.finalEditRowGetObj['colspan']);
165                 this.displayName = this.finalEditRowGetObj['displayName'];
166                 this.displayWidthInPixel = (this.finalEditRowGetObj['displayWidthInPixel'] == null ? 0 : this.finalEditRowGetObj['displayWidthInPixel']);
167                 this.indentation = (this.finalEditRowGetObj['indentation'] == null ? 0 : this.finalEditRowGetObj['indentation']);
168                 this.displayAlignment = this.finalEditRowGetObj['displayAlignment'];
169                 this.displayHeaderAlignment = (this.finalEditRowGetObj['displayHeaderAlignment'] == null ? '' : this.finalEditRowGetObj['displayHeaderAlignment']);
170                 this.sortable = this.finalEditRowGetObj['sortable'];
171                 this.drilldownURL = this.finalEditRowGetObj['drilldownURL'];
172                 this.drilldownParams = this.finalEditRowGetObj['drilldownParams'];
173                 this.drilldownType = this.finalEditRowGetObj['drilldownType'];
174                 this.drillDownObj['drillDownUrl'] = this.drilldownURL;
175                 this.drillDownObj['drillDownParams'] = this.drilldownParams;
176                 this.drillDownObj['drillDownType'] = this.drilldownType;
177                 this.semaphoreList = this.finalEditRowGetObj['semaphoreList'];
178                 this.semaphoreId = this.finalEditRowGetObj['semaphoreId'];
179                 if (this.semaphoreId === '') {
180                     this.semaphoreName = 'No Display';
181                 } else {
182                     if(this.semaphoreList && this.semaphoreList.semaphore){
183                         for (let semCtr = 0; semCtr < this.semaphoreList.semaphore.length; semCtr++) {
184                             if (this.semaphoreId === this.semaphoreList.semaphore[semCtr]['semaphoreId']) {
185                                 this.semaphoreName = this.semaphoreList.semaphore[semCtr]['semaphoreName'];
186                             }
187                         }
188                     }
189                 }
190                 this.displayTotal = (this.finalEditRowGetObj['displayTotal'] == null ? '' : this.finalEditRowGetObj['displayTotal']);
191                 this._columnService.getDrillDownReportList()
192                     .subscribe((responseURLList) => {
193                         this.URLListObj = responseURLList;
194
195                         let listCtr = 0;
196                         while (this.URLListObj[listCtr]) {
197                             this.URLListObjArray.push(this.URLListObj[listCtr]);
198                             listCtr++;
199                         }
200                     });
201                 this._columnService.getResponseTotalColsList()
202                     .subscribe((responseTotalColList) => {
203                         this.TotalColListObj = responseTotalColList;
204                         let colCtr = 0;
205                         while (this.TotalColListObj[colCtr]) {
206                             this.TotalColListObjArray.push(this.TotalColListObj[colCtr]);
207                             colCtr++;
208                         }
209                     });
210                 this.status = 'Success!';
211                 this.message = 'Report Column - Edit';
212                 this.showDialog = !this.showDialog;
213                 this.closable = true;
214                 this.showSpinner = false;
215             });
216     }
217
218     ngOnChanges() {
219         console.log('Hit');
220     }
221
222
223     close() {
224         this.changeDetectorRefs.detectChanges();
225         this._columnService.getColumnList()
226             .subscribe((response) => {
227                 this.showSpinner = true;
228                 this.dataSource = new DataTableDataSource();
229                 this.finalObjArr = [];
230                 this.finalGetObj = response;
231                 let fgo_counter = 0;
232                 while (this.finalGetObj[fgo_counter]) {
233                     this.finalGetObj[fgo_counter]['no'] = fgo_counter + 1;
234                     this.finalGetObj[fgo_counter]['edit'] = '';
235                     this.finalObjArr.push(this.finalGetObj[fgo_counter]);
236                     fgo_counter++;
237                 }
238                 this.dataSource.data = this.finalObjArr;
239                 this.dataSource.sort = this.sort;
240                 this.dataSource.paginator = this.paginator;
241                 this.table.dataSource = this.dataSource;
242                 this.dataSource.data = this.finalObjArr;
243                 this.showSpinner = false;
244             });
245         this.showDialog = false;
246         this.showSaveColDialog = false;
247         this.closable = false;
248         this.showEditDrillDownPage = false;
249         this.showAdvancedDisplayPage = false;
250         this.addDisplay = false;
251         this.Colclosable = false;
252         this.showConfirmButton = false;
253     }
254
255     complete() {
256         this.showEditDrillDownPage = !this.showEditDrillDownPage;
257         this.showConfirmButton = false;
258         this.isIncomingDrillDownParams = true;
259     }
260
261     onCompleted(drilldownParamsArr: any) {
262         this.incomingDrillDownParams = drilldownParamsArr;
263     }
264
265
266     save() {
267         this.changeDetectorRefs.detectChanges();
268         this.showSpinner = true;
269         this.finalPOSTObj['tabId'] = 'ColEdit';
270         this.finalPOSTObj['tabName'] = 'Column Edit';
271         this.finalPOSTObj['colId'] = this.id;
272         this.finalPOSTObj['colName'] = this.name;
273         this.finalPOSTObj['colType'] = '';
274         this.finalPOSTObj['colspan'] = this.colspan;
275         this.finalPOSTObj['dataType'] = this.dataType;
276         this.finalPOSTObj['depeondsOnForField'] = this.dependsOnFormFields;
277         this.finalPOSTObj['displayAlignment'] = this.displayAlignment;
278         this.finalPOSTObj['displayHeaderAlignment'] = this.displayHeaderAlignment;
279         this.finalPOSTObj['displayName'] = this.displayName;
280         this.finalPOSTObj['displayTotal'] = this.displayTotal;
281         this.finalPOSTObj['displayWidth'] = 10;
282         this.finalPOSTObj['displayWidthInPixel'] = this.displayWidthInPixel;
283         if (this.isIncomingDrillDownParams) {
284             this.finalPOSTObj['drilldownParams'] = this.incomingDrillDownParams;
285         } else {
286             this.finalPOSTObj['drilldownParams'] = this.drilldownParams;
287         }
288         this.finalPOSTObj['drilldownType'] = '';
289         this.finalPOSTObj['drilldownURL'] = this.drilldownURL;
290         this.finalPOSTObj['errorMessage'] = '';
291         this.finalPOSTObj['errorStackTrace'] = '';
292         this.finalPOSTObj['groupByPos'] = this.groupByPos;
293         this.finalPOSTObj['hideRepeatedKey'] = this.hideRepeatedValues;
294         this.finalPOSTObj['indentation'] = this.indentation;
295         this.finalPOSTObj['level'] = this.multiGroupColumnLevel;
296         this.finalPOSTObj['noWrap'] = (this.noWrap === true ? 'Y' : 'N');
297         this.finalPOSTObj['sortable'] = this.sortable;
298         this.finalPOSTObj['subTotalCustomText'] = this.displayTotal;
299         this.finalPOSTObj['visible'] = this.visible;
300         if (this.semaphoreName === 'No Display') {
301             this.semaphoreId = '';
302         } else {
303             if(this.semaphoreList && this.semaphoreList.semaphore){
304                 for (let slcount = 0; slcount < this.semaphoreList.semaphore.length; slcount++) {
305                     if (this.semaphoreName === this.semaphoreList.semaphore[slcount].semaphoreName) {
306                         this.semaphoreId = this.semaphoreList.semaphore[slcount].semaphoreId;
307                         this.semaphoreList.semaphore[slcount].comment = this.id;
308                     }
309                 }
310             }
311         }
312         this.finalPOSTObj['semaphoreId'] = this.semaphoreId;
313         this.finalPOSTObj['semaphoreList'] = this.semaphoreList;
314
315         this._columnService.postColumnChanges(this.finalPOSTObj)
316             .subscribe((finalPOSTResponse) => {
317                 if (finalPOSTResponse) {
318                     this.EditColstatus = 'Success!';
319                     this.EditColmessage = 'Your change has been saved! Row definition is updated.';
320                     this.showSaveColDialog = !this.showSaveColDialog;
321                     this.Colclosable = true;
322                 } else {
323                     this.EditColstatus = 'Failure!';
324                     this.EditColmessage = 'Row definition could not be updated.';
325                     this.showSaveColDialog = !this.showSaveColDialog;
326                     this.Colclosable = true;
327                 }
328                 this.showEditDrillDownPage = false;
329                 this.showAdvancedDisplayPage = false;
330                 this.isIncomingDrillDownParams = false;
331                 this.addDisplay = false;
332                 this.showSpinner = false;
333
334             });
335     }
336
337
338     drillDownLinkPage() {
339         this.showEditDrillDownPage = !this.showEditDrillDownPage;
340         this.showConfirmButton = true;
341     }
342
343     editDisplay() {
344         this.showAdvancedDisplayPage = true;
345     }
346
347
348     finishAdvancedDisplay(displayObj: any) {
349         this.addDisplay = false;
350         this.semaphoreName = displayObj['semName'];
351         this.semaphoreList = displayObj['semList'];
352         this.semaphoreId = displayObj['semId'];
353         this.showAdvancedDisplayPage = displayObj['setCloseDisplay'];
354     }
355
356     addNewDisplay() {
357         this.showAdvancedDisplayPage = true;
358         this.addDisplay = true;
359     }
360 }