Fix for Penetration test _ Session and cookie management
[vid.git] / vid-webpack-master / src / app / shared / components / auditInfoModal / auditInfoModal.component.ts
1 import {Component, ViewChild} from '@angular/core';
2 import {Subject} from 'rxjs/Subject';
3 import {ModalDirective} from 'ngx-bootstrap'
4 import {ModelInformationItem} from '../model-information/model-information.component';
5 import {ServiceModel} from '../../models/serviceModel';
6 import {ServiceInfoService} from '../../server/serviceInfo/serviceInfo.service';
7 import {ServiceInfoModel} from '../../server/serviceInfo/serviceInfo.model';
8 import {AuditStatus} from '../../server/serviceInfo/AuditStatus.model';
9 import {IframeService} from "../../utils/iframe.service";
10 import {NgRedux} from "@angular-redux/store";
11 import {AppState} from "../../store/reducers";
12 import {AuditInfoModalComponentService} from "./auditInfoModal.component.service";
13 import {FeatureFlagsService, Features} from "../../services/featureFlag/feature-flags.service";
14 import * as XLSX from 'xlsx';
15 import {DatePipe} from "@angular/common";
16 import {SpaceToUnderscorePipe} from "../../pipes/spaceToUnderscore/space-to-underscore.pipe";
17 import {ResizeEvent} from "angular-resizable-element";
18
19 @Component({
20   selector: 'audit-info-modal',
21   templateUrl: './auditInfoModal.component.html',
22   styleUrls: ['./auditInfoModal.component.scss']
23 })
24 export class AuditInfoModalComponent {
25   static openModal: Subject<ServiceInfoModel> = new Subject<ServiceInfoModel>();
26   static openInstanceAuditInfoModal: Subject<{instanceId , type, model, instance}> = new Subject<{instanceId , type, model, instance}>();
27   @ViewChild('auditInfoModal', {static: false}) public auditInfoModal: ModalDirective;
28   title: string = 'Service Information';
29   modelInfoItems: ModelInformationItem[] = [];
30   serviceModel: ServiceModel;
31   serviceModelName: string;
32   serviceModelId: string;
33   jobId: string;
34   vidInfoData: AuditStatus[] = [];
35   msoInfoData : any= [];
36   isAlaCarte: boolean;
37   parentElementClassName = 'content';
38   isLoading = true;
39   model: any;
40   instanceId: string;
41   isALaCarteFlagOn: boolean;
42   showMoreAuditInfoLink: boolean;
43   type : string = "Service";
44   showVidStatus : boolean = true;
45   auditInfoModalComponentService : AuditInfoModalComponentService;
46   serviceInstanceName : string;
47   serviceModelVersion : any;
48   serviceInstanceId : any;
49   exportMSOStatusFeatureEnabled: boolean;
50   dataIsReady : boolean = false;
51   jobDataLocal : any;
52   isDrawingBoard :boolean = false;
53   serviceInstanceObject :any;
54   typeFromDrawingBoard: any;
55   constructor(private _serviceInfoService: ServiceInfoService, private _iframeService : IframeService,
56               private _auditInfoModalComponentService : AuditInfoModalComponentService,
57               private _featureFlagsService: FeatureFlagsService,
58               private datePipe: DatePipe,
59               private spacetoUnderscore: SpaceToUnderscorePipe,
60               private store: NgRedux<AppState>) {
61     this.auditInfoModalComponentService = this._auditInfoModalComponentService;
62     AuditInfoModalComponent.openModal.subscribe((jobData: ServiceInfoModel) => {
63       this.isALaCarteFlagOn = this.store.getState().global.flags['FLAG_A_LA_CARTE_AUDIT_INFO'];
64       this.showMoreAuditInfoLink = _featureFlagsService.getFlagState(Features.FLAG_MORE_AUDIT_INFO_LINK_ON_AUDIT_INFO);
65       this.exportMSOStatusFeatureEnabled = _featureFlagsService.getFlagState(Features.FLAG_2011_EXPORT_MSO_STATUS);
66       this.initializeProperties();
67       this.showVidStatus = true;
68       if (jobData) {
69         this.jobDataLocal = jobData;
70         this.isAlaCarte = jobData.aLaCarte;
71         //this.openAuditInfoModal(jobData);
72                 if(jobData.jobId != null || jobData.jobId != undefined){
73           console.log("jobId not null : ", jobData.jobId);
74           this.openAuditInfoModal(jobData);
75         } else{
76           this._serviceInfoService.getInstanceAuditStatus(jobData.serviceInstanceId, 'SERVICE').subscribe((res : AuditStatus[]) =>{
77             this.msoInfoData = res;
78                         this.sortMsoInfo();
79                         this.isALaCarteFlagOn = true;
80                         this.isAlaCarte = true;
81           });
82         }
83                 
84         _iframeService.addClassOpenModal(this.parentElementClassName);
85         this.serviceModelName = jobData.serviceModelName ? jobData.serviceModelName : '';
86         this.serviceModelId = jobData.serviceModelId;
87         this.serviceInstanceId = jobData.serviceInstanceId;
88         this.jobId = jobData.jobId;
89         this.auditInfoModal.show();
90         this.serviceInstanceName = jobData.serviceInstanceName;
91         this.serviceModelVersion = jobData.serviceModelVersion;
92       } else {
93         _iframeService.removeClassCloseModal(this.parentElementClassName);
94         this.auditInfoModal.hide();
95       }
96     });
97
98     AuditInfoModalComponent.openInstanceAuditInfoModal.subscribe(({instanceId  , type ,  model, instance}) => {
99       this.exportMSOStatusFeatureEnabled = _featureFlagsService.getFlagState(Features.FLAG_2011_EXPORT_MSO_STATUS);
100       this.showVidStatus = false;
101       this.showMoreAuditInfoLink = false;
102       this.isDrawingBoard = true;
103       this.initializeProperties();
104       this.setModalTitles(type);
105       this.serviceModelName = AuditInfoModalComponentService.getInstanceModelName(model);
106       this.serviceInstanceObject = instance;
107       this.typeFromDrawingBoard = type;
108
109       this.callApi(instance, type);
110       this.sortMsoInfo();
111       
112       this.modelInfoItems = this.auditInfoModalComponentService.getModelInfo(model, instance, instanceId);
113       _iframeService.addClassOpenModal(this.parentElementClassName);
114       this.auditInfoModal.show();
115     });
116   }
117
118   public style: object = {};
119   validate(event: ResizeEvent): boolean {
120     console.log("event : ", event);
121     if(event.rectangle.width && event.rectangle.height &&
122       ( event.rectangle.width < 600 || event.rectangle.width > 1412)
123     ){
124       return false;
125     } else{
126       return true;
127     }
128   }
129   onResizeEnd(event: ResizeEvent): void {
130     console.log('Element was resized', event);
131     this.style = {
132       position: 'relative',
133       left: `${event.rectangle.left}px`,
134       top: `${event.rectangle.top}px`,
135       width: `${event.rectangle.width}px`,
136       height: `${event.rectangle.height}px`
137     };
138     console.log("stle : ", this.style);
139   }
140
141
142   setModalTitles(type : string) : void{
143     this.type = AuditInfoModalComponentService.setModalTitlesType(type) ;
144     this.title = AuditInfoModalComponentService.setModalTitle(type);
145   }
146
147   initializeProperties() : void {
148     this.modelInfoItems = null;
149     this.vidInfoData = [];
150     this.msoInfoData = [];
151     this.isLoading = true;
152   }
153
154   openAuditInfoModal(jobData: ServiceInfoModel): void {
155     this.modelInfoItems = AuditInfoModalComponentService.createModelInformationItemsJob(jobData);
156     this.initAuditInfoData(jobData);
157     this.auditInfoModal.onHide.subscribe(()=>{
158       this._iframeService.removeClassCloseModal(this.parentElementClassName);
159       this.initializeProperties();
160     });
161     this.auditInfoModal.show();
162   }
163
164   initAuditInfoData(jobData: ServiceInfoModel) {
165     this._serviceInfoService.getJobAuditStatus(jobData)
166       .subscribe((res: AuditStatus[][]) => {
167         this.vidInfoData = res[0];
168         this.msoInfoData = res[1];
169         this.sortMsoInfo();
170         this.isLoading = false;
171       });
172   }
173
174   exportMsoStatusTable(){
175     let currentTime = new Date();
176     let timestamp = this.datePipe.transform(currentTime, "MMMddyyyy")+'_'
177       +currentTime.getHours()+":"+currentTime.getMinutes()+":"+currentTime.getSeconds()
178     let fileName = this.spacetoUnderscore.transform(this.serviceInstanceName)+'_'+timestamp;
179     let msoStatusTableElement = document.getElementById('service-instantiation-audit-info-mso');
180     const ws: XLSX.WorkSheet = XLSX.utils.table_to_sheet(msoStatusTableElement);
181     const wb: XLSX.WorkBook = XLSX.utils.book_new();
182     XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
183     /* save to file */
184     XLSX.writeFile(wb, fileName+'.csv');
185     this._iframeService.addClassOpenModal(this.parentElementClassName);
186   }
187
188   onCancelClick() {
189     this._iframeService.removeClassCloseModal(this.parentElementClassName);
190     this.initializeProperties();
191     this.auditInfoModal.hide();
192   }
193
194
195   onNavigate(){
196     window.open("http://ecompguide.web.att.com:8000/#ecomp_ug/c_ecomp_ops_vid.htmll#r_ecomp_ops_vid_bbglossary", "_blank");
197   }
198
199   refreshData(): void {
200     this.dataIsReady = false;
201     if(this.isDrawingBoard) {
202       this.callApi(this.serviceInstanceObject, this.typeFromDrawingBoard);
203     } else {
204       this.initAuditInfoData(this.jobDataLocal);
205     }
206     this.dataIsReady = true;
207
208   }
209
210   sortMsoInfo() {
211     if(this.msoInfoData && Array.isArray(this.msoInfoData)) {
212       this.msoInfoData.sort((a, b) => new Date(b.startTime).getTime() - new Date(a.startTime).getTime());
213       this.msoInfoData.forEach((element ) => {
214         element.instanceColumn = element.instanceName + " | " +"<br>" + element.instanceId;
215       });
216     }
217   }
218   
219   callApi(instance, type) {
220     if (instance.isFailed) {
221       this._serviceInfoService.getAuditStatusForRetry(instance.trackById).subscribe((res: AuditStatus) => {
222         this.msoInfoData = [res];
223       });
224     }else{
225       this._serviceInfoService.getInstanceAuditStatus(instance.instanceId, type).subscribe((res : AuditStatus[]) =>{
226         this.msoInfoData = res;
227      });
228     }
229   }
230
231   readOnlyRetryUrl = (): string =>
232     `../../serviceModels.htm?more#/servicePlanning/RETRY?serviceModelId=${this.serviceModelId}&jobId=${this.jobId}`
233 }