summaryrefslogtreecommitdiffstats
path: root/vid-webpack-master
diff options
context:
space:
mode:
Diffstat (limited to 'vid-webpack-master')
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/auditInfo.modal.e2e.ts24
-rw-r--r--vid-webpack-master/cypress/integration/iFrames/exportMSOStatusToCSV.e2e.ts38
-rw-r--r--vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json3
-rwxr-xr-xvid-webpack-master/package.json2
-rw-r--r--vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.scss13
-rw-r--r--vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html132
-rw-r--r--vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.scss55
-rw-r--r--vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.spec.ts11
-rw-r--r--vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts61
-rw-r--r--vid-webpack-master/src/app/shared/pipes/spaceToUnderscore/space-to-underscore.pipe.spec.ts8
-rw-r--r--vid-webpack-master/src/app/shared/pipes/spaceToUnderscore/space-to-underscore.pipe.ts17
-rw-r--r--vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts3
-rw-r--r--vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts3
-rw-r--r--vid-webpack-master/src/app/shared/shared.module.ts13
14 files changed, 272 insertions, 111 deletions
diff --git a/vid-webpack-master/cypress/integration/iFrames/auditInfo.modal.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/auditInfo.modal.e2e.ts
index 16ed21935..c28d77b79 100644
--- a/vid-webpack-master/cypress/integration/iFrames/auditInfo.modal.e2e.ts
+++ b/vid-webpack-master/cypress/integration/iFrames/auditInfo.modal.e2e.ts
@@ -31,11 +31,7 @@ describe('Audit information modal', function () {
cy.get('.icon-menu').eq(index).click({force: true}).then(()=>{
cy.getElementByDataTestsId('context-menu-audit-info').click({force:true}).then(()=>{
cy.setViewportToSmallPopup();
- cy.get('#service-model-name').should('contain', row.find('#serviceModelName').text().trim())
- .getElementByDataTestsId('model-item-value-userId').should('contain', row.find('#userId').text().trim())
- .get('#service-instantiation-audit-info-vid').should('be.visible')
- .get('#service-instantiation-audit-info-vid').find('#vidJobStatus').should('be.visible')
- .get('#service-instantiation-audit-info-mso').should('be.visible')
+ cy.get('#service-instantiation-audit-info-mso').should('be.visible')
.get('#service-instantiation-audit-info-mso').find('#msoJobStatus').should('be.visible')
.get('#cancelButton').click({force: true})
.setViewportToDefault();
@@ -64,8 +60,8 @@ describe('Audit information modal', function () {
cy.setViewportToSmallPopup();
cy.get('#service-instantiation-audit-info-mso thead tr th#instanceName').should("be.visible")
.get('#service-instantiation-audit-info-mso tbody tr').each(function (row, index) {
- assert.equal(row.find('.request-id').text().trim(), res[index]['requestId']);
- assert.equal(row.find('.msoInstanceName').text().trim(), 'service: ' + res[index]['instanceName']);
+ assert.equal(row.find('#msoRequestId').text().trim(), res[index]['requestId']);
+ assert.equal(row.find('.msoInstanceName').text().trim(), res[index]['instanceName']);
assert.equal(row.find('#msoJobStatus').text().trim(), _.capitalize(res[index]['jobStatus']));
assert.equal(row.find('#msoAdditionalInfo span').text().trim(), res[index]['additionalInfo']);
});
@@ -84,5 +80,19 @@ describe('Audit information modal', function () {
})
});
+ it('Refresh link should be visible and clicking refresh should fetch latest data', function () {
+ cy.initAuditInfoMSOALaCarte();
+ cy.openIframe('app/ui/#/instantiationStatus');
+ cy.get('.instantiation-status-data tbody tr').each(function (row, index) {
+ cy.get('.icon-menu').eq(index).click({force: true}).then(()=>{
+ cy.getElementByDataTestsId('context-menu-audit-info').click({force:true}).then(()=>{
+ cy.setViewportToSmallPopup();
+ cy.get('#refreshButton').should('be.visible');
+ })
+
+ })
+ });
+ });
+
});
});
diff --git a/vid-webpack-master/cypress/integration/iFrames/exportMSOStatusToCSV.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/exportMSOStatusToCSV.e2e.ts
new file mode 100644
index 000000000..a9ade182c
--- /dev/null
+++ b/vid-webpack-master/cypress/integration/iFrames/exportMSOStatusToCSV.e2e.ts
@@ -0,0 +1,38 @@
+import {JsonBuilder} from "../../support/jsonBuilders/jsonBuilder";
+import {AsyncInstantiationModel} from "../../support/jsonBuilders/models/asyncInstantiation.model";
+import {ServiceModel} from "../../support/jsonBuilders/models/service.model";
+
+describe('Audit Information model', function () {
+ describe('Export MSO status', function (){
+ var jsonBuilderInstantiationBuilder: JsonBuilder<AsyncInstantiationModel> = new JsonBuilder<AsyncInstantiationModel>();
+ var jsonBuilderAndMock: JsonBuilder<ServiceModel> = new JsonBuilder<ServiceModel>();
+ beforeEach(() => {
+ cy.clearSessionStorage();
+ cy.setReduxState();
+ cy.preventErrorsOnLoading();
+ jsonBuilderInstantiationBuilder.basicMock('cypress/support/jsonBuilders/mocks/jsons/asyncInstantiation.json',
+ Cypress.config('baseUrl') + "/asyncInstantiation**");
+ cy.initAAIMock();
+ cy.initVidMock();
+ cy.initAsyncInstantiation();
+ cy.login();
+ });
+
+ afterEach(() => {
+ cy.screenshot();
+ });
+
+ it(`should display 2 tables with information's`, function () {
+ cy.initAuditInfoMSOALaCarte();
+ cy.openIframe('app/ui/#/instantiationStatus');
+
+ cy.get('#b1ff271b-829a-43f9-a2e3-23987a34f261 > #jobStatus > .menu-div > .icon-menu').click({force: true}).then(() =>{
+ cy.getElementByDataTestsId('context-menu-audit-info').click();
+ cy.wait(1000);
+ cy.getElementByDataTestsId('export-button').click();
+ });
+
+
+ });
+ })
+})
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json
index 2a4e88210..41f65ff65 100644
--- a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json
+++ b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json
@@ -32,5 +32,6 @@
"FLAG_2008_PAUSE_INSTANTIATION_ON_VFMODULE_POPUP" : true,
"FLAG_2008_REMOVE_PAUSE_INSTANTIATION" : true,
"FLAG_2008_DISABLE_DRAG_FOR_BASE_MODULE" : true,
- "FLAG_2008_CREATE_VFMODULE_INSTANTIATION_ORDER_NUMBER": true
+ "FLAG_2008_CREATE_VFMODULE_INSTANTIATION_ORDER_NUMBER": true,
+ "FLAG_2011_EXPORT_MSO_STATUS": true
}
diff --git a/vid-webpack-master/package.json b/vid-webpack-master/package.json
index 25b4b4ddb..ffe630bd2 100755
--- a/vid-webpack-master/package.json
+++ b/vid-webpack-master/package.json
@@ -45,6 +45,7 @@
"@nicky-lenaers/ngx-scroll-to": "3.0.1",
"@turf/turf": "5.1.6",
"@types/lodash": "4.14.121",
+ "angular-resizable-element": "^3.3.3",
"angular-svg-icon": "5.0.0",
"angular-tree-component": "8.5.2",
"angular2-datatable": "0.6.0",
@@ -73,6 +74,7 @@
"rxjs-compat": "^6.3.3",
"slnodejs": "^2.1.124",
"tslib": "1.9.x",
+ "xlsx": "^0.16.6",
"zone.js": "~0.9.1"
},
"devDependencies": {
diff --git a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.scss b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.scss
index 352a7db10..fd826fba7 100644
--- a/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.scss
+++ b/vid-webpack-master/src/app/instantiationStatus/instantiationStatus.component.scss
@@ -1,3 +1,16 @@
+.content.modal-open .body-content-jsp{
+ margin-left: 3% !important;
+ //margin-right: 3% !important;
+ margin-top: 0% !important;
+}
+.content.modal-open .body-content-jsp .service-models-page .service-model-content{
+ margin-left: 0% !important;
+ width: 100% !important;
+}
+.body-content-jsp {
+ margin-left: 14% !important;
+ margin-right: 2% !important;
+}
.last {
position: sticky;
diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html
index 086669091..038477d25 100644
--- a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html
@@ -1,93 +1,95 @@
<div class="modal fade" bsModal #auditInfoModal="bs-modal" [config]="{backdrop: 'static'}"
tabindex="-1" role="dialog" aria-labelledby="dialog-static-name">
- <div id="audit-info-modal" class="">
+ <div style="width: 100%; height: 100%" id="audit-info-modal" class=""
+ [ngStyle]="style" mwlResizable [enableGhostResize]="true"
+ [resizeEdges]="{ bottom: true, right: true, top: true, left: true }" (resizeEnd)="onResizeEnd($event)"
+ [validateResize]="validate">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" (click)="onCancelClick()">&times;</button>
<span [attr.data-tests-id]="'audit-info-title'" class="modal-title">{{title}}</span>
+ <br>
+ <span style="font-size: 16px;">
+ <!-- ServiceInstanceName(ServiceModelName/ServiceModelId) -->
+ <span title="Service Instance name">{{serviceInstanceName }}</span><span title="Service Model name"> ({{serviceModelName}}/</span>
+ <span title="Service Model version">{{serviceModelVersion}})</span>
+ </span>
</div>
- <div class="modal-body row">
- <div class="col-md-4 left-panel">
- <div id="service-model-name" class="row">{{type | uppercase}} MODEL: <span>{{serviceModelName}}</span></div>
- <div class="row service-model">
- <model-information [modelInformationItems]="modelInfoItems"></model-information>
- </div>
- </div>
+ <div class="modal-body row" style="height: 515px">
+
<div class="col-md-8 right-panel">
- <div class="row" *ngIf="showVidStatus">
- <div class="col-md-6 leftColumn"><span class="table-title">VID status</span></div>
- <div class="col-md-6 rightColumn"><span *ngIf="showMoreAuditInfoLink">
- <a id="full_screen_link" target="_parent" title="Full-screen audit info" [href]="readOnlyRetryUrl()">
+
+ <div class="row">
+ <div class="col-md-6 leftColumn"><span class="table-title">MSO status</span></div>
+ <div class="col-md-6 rightColumn">
+ <span>
+ <a id="glossary_link" target="_blank" href="#" (click)="onNavigate()">Building Block (BB) glossary</a>
+ </span>
+ &nbsp;
+ <span>
+ <a id="full_screen_link" target="_parent" title="Go to drawing board" [href]="readOnlyRetryUrl()">
<i class="fa fa-external-link"></i>
</a>
- </span></div>
+ </span>
+ </div>
</div>
- <div class="row" *ngIf="showVidStatus">
- <table id="service-instantiation-audit-info-vid" class="table table-bordered">
- <thead class="thead-dark">
+ <div style="max-height: 90%;overflow-y: scroll; max-width: 100%;overflow-x: scroll;">
+ <table id="service-instantiation-audit-info-mso" class="table table-bordered" style="min-width: 950px;overflow-x: auto;">
+ <thead class="thead-dark row">
<tr class="row">
- <th class="col-md-4" scope="col">Status</th>
- <th class="col-md-4" scope="col">Status time</th>
- <th class="col-md-4" scope="col">Final</th>
+ <th scope="col" class="request-id">Request ID</th>
+ <th *ngIf="isAlaCarte&&isALaCarteFlagOn" id="instanceName" class="col-md-2" scope="col" >Instance Name</th>
+ <th>Model Type</th>
+ <th>Request Type</th>
+ <th>Start Time</th>
+ <th>Finish Time</th>
+ <th scope="col">Request Status</th>
+ <th class="col-md-2" scope="col">Additional info</th>
</tr>
</thead>
<tbody>
- <tr class="row" *ngFor="let data of vidInfoData">
- <td class="col-md-4" id="vidJobStatus" [attr.data-tests-id]="'vidJobStatus'">
- <custom-ellipsis [id]="data?.jobStatus" [value]="data?.jobStatus | capitalizeAndFormat"></custom-ellipsis>
+ <tr class="row" *ngFor="let data of msoInfoData">
+ <td id="msoRequestId" class="col-md-2" style="width: 22%">
+ <custom-ellipsis [id]="data?.requestId" [value]="data?.requestId" [attr.data-tests-id]="'requestId'"></custom-ellipsis>
+ </td>
+ <td *ngIf="isAlaCarte && isALaCarteFlagOn" class="msoInstanceName col-md-2" style="width: 10%">
+ <custom-ellipsis [id]="data?.instanceName" [value]="data?.instanceName"></custom-ellipsis>
+ </td>
+ <td id="msoModelType" style="width: 7%">
+ <custom-ellipsis [value]="data?.modelType"></custom-ellipsis>
+ </td>
+ <td id="msoInstanceType" style="width: 10%">
+ <custom-ellipsis [value]="data?.instanceType"></custom-ellipsis>
+ </td>
+ <td id="msostartTime" style="width: 10%">
+ <custom-ellipsis [value]="data?.startTime"></custom-ellipsis>
</td>
- <td class="col-md-4" id="vidStatusTime">
- <custom-ellipsis [id]="data?.vidCreated"
- [value]="data?.createdDate | date:'MMM dd, yyyy HH:mm'"></custom-ellipsis>
+ <td id="msoFinishTime" style="width: 10%">
+ <custom-ellipsis [value]="data?.finishTime"></custom-ellipsis>
+ </td >
+ <td id="msoJobStatus" style="width: 8%">
+ <custom-ellipsis [id]="data?.jobStatus" [value]="data?.jobStatus | capitalizeAndFormat" [attr.data-tests-id]="'jobStatus'"></custom-ellipsis>
</td>
- <td class="col-md-4" id="vidFinalStatus">
- <custom-ellipsis [id]="data?.final"
- [value]="data?.final ? 'Yes' : 'No'"></custom-ellipsis>
+ <td class="col-md-2" id="msoAdditionalInfo" style="width: 33%">
+ <custom-ellipsis [id]="data?.additionalInfo" [value]="data?.additionalInfo" [attr.data-tests-id]="'additionalInfo'"></custom-ellipsis>
</td>
</tr>
</tbody>
</table>
- <div class="no-result" *ngIf="!isLoading && vidInfoData?.length == 0">There is no data.</div>
+ <div class="no-result" *ngIf="!isLoading && msoInfoData?.length == 0">There is no data.</div>
</div>
-
- <div class="row">
- <div class="col-md-6 leftColumn"><span class="table-title">MSO status</span></div>
- <!-- -->
- <div class="col-md-6 rightColumn"><span><a id="glossary_link" target="_blank" href="#" (click)="onNavigate()">Building Block (BB) glossary</a></span></div>
- </div>
- <table id="service-instantiation-audit-info-mso" class="table table-bordered">
- <thead class="thead-dark row">
- <tr class="row">
- <th scope="col" class="request-id" style="min-width: 275px;max-width: 275px;">Request ID</th>
- <th scope="col" style="min-width: 100px;max-width: 100px;">Status</th>
- <th *ngIf="isAlaCarte&&isALaCarteFlagOn" id="instanceName" class="col-md-2" scope="col" style="max-width: 350px;">Instance Name</th>
-
- <th class="col-md-2" scope="col" style="min-width: 300px;max-width: 300px;">Additional info</th>
- </tr>
- </thead>
- <tbody>
- <tr class="row" *ngFor="let data of msoInfoData">
- <td id="msoRequestId" class="request-id" style="min-width: 275px;max-width: 275px;">
- <custom-ellipsis [id]="data?.requestId" [value]="data?.requestId" [attr.data-tests-id]="'requestId'"></custom-ellipsis>
- </td>
- <td id="msoJobStatus" style="min-width: 100px;max-width: 100px;">
- <custom-ellipsis [id]="data?.jobStatus" [value]="data?.jobStatus | capitalizeAndFormat" [attr.data-tests-id]="'jobStatus'"></custom-ellipsis>
- </td>
- <td *ngIf="isAlaCarte && isALaCarteFlagOn" class="msoInstanceName col-md-2" style="max-width: 350px;">
- <custom-ellipsis [id]="data?.instanceName" [value]="data?.instanceType + ': ' + data?.instanceName"></custom-ellipsis>
- </td>
-
- <td class="col-md-2" id="msoAdditionalInfo" style="min-width: 300px;max-width: 300px;">
- <custom-ellipsis [id]="data?.additionalInfo" [value]="data?.additionalInfo" [attr.data-tests-id]="'additionalInfo'"></custom-ellipsis>
- </td>
- </tr>
- </tbody>
- </table>
- <div class="no-result" *ngIf="!isLoading && msoInfoData?.length == 0">There is no data.</div>
</div>
-
</div>
<div class="modal-footer row">
+ <button *ngIf="exportMSOStatusFeatureEnabled" style= "font-size: 12px" id="exportButton" type="button" class="btn btn-default cancel"
+ (click)="exportMsoStatusTable()" [attr.data-tests-id]="'export-button'">
+ Export
+ </button>
+ <button style= "font-size: 12px" id="refreshButton" type="button" class="btn btn-default cancel"
+ [attr.data-tests-id]="'refresh-button'"
+ [ngClass]="{'spin' : !dataIsReady}" (click)="refreshData();">
+ Refresh
+ </button>
<button style= "font-size: 12px" id="cancelButton" type="button" class="btn btn-default cancel" (click)="onCancelClick()" [attr.data-tests-id]="'close-button'">
Close
</button>
diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.scss b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.scss
index f36b8b41d..6b1a70486 100644
--- a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.scss
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.scss
@@ -8,7 +8,16 @@
background-color: #000;
opacity: 0.5;
}
+mwlResizable {
+ box-sizing: border-box;
+}
+.modal-dialog{
+ width: 100% !important;
+}
.modal{
+ width: 100% !important;
+ margin-right: 0%;
+ margin-left: 0%;
#audit-info-modal {
.leftColumn {
@@ -23,6 +32,8 @@
border-radius: 0px;
border: none;
.modal-header{
+ padding: 5px !important;
+ padding-left: 23px !important;
background: #009FDB;
font-size: 24px;
color: #ffffff;
@@ -49,6 +60,7 @@
background: #f2f2f2;
border-right: 1px solid #D2D2D2;
padding-right: 0px;
+ width: 20%;
.row:first-child{
border-bottom: 1px solid #D2D2D2;
height: 50px;
@@ -64,6 +76,7 @@
}
}
.right-panel{
+ width: 100% !important;
padding: 30px 30px 15px 30px;
.row{
margin: 0px;
@@ -78,79 +91,59 @@
text-align: center;
border: 1px solid #d2d2d2;
padding: 20px;
- margin-top: -23px;
+ margin-top: 0px;
}
- .table-bordered{
- width: 100%;
+ .table-bordered {
margin-top: 10px;
font-family: OpenSans-Semibold;
font-size: 12px;
overflow-x: auto;
- display: block;
+ overflow-y: auto;
+ //display: block;
color: #5A5A5A;
- .request-id {
- width: 85px;
- }
+ position: relative;
thead {
- position: sticky;
- top: 0;
z-index: 100;
- display: block;
background: rgb(242, 242, 242);
border-bottom: 1px solid #d2d2d2;
tr {
- display: flex;
th {
- flex-grow: 1;
border-right: 1px solid #d2d2d2;
- &:last-child{
+ &:last-child {
border-right: none;
}
- &.request-id {
- flex-grow: 0;
- }
}
}
}
-
- tbody {
+ tbody{
border: none !important;
max-height: 152px;
- display: block;
-
- tr {
- display: flex;
+ tr{
border-bottom: 1px solid #d2d2d2;
&:last-child{
border-bottom: none;
}
- td {
- border: none;
+ td{
border-right: 1px solid #d2d2d2;
- flex-grow: 1;
&:last-child{
border-right: none;
}
- &.request-id {
- flex-grow: 0;
- }
}
}
}
-
th {
background: #f2f2f2;
font-family: OpenSans-Semibold;
color: #000000;
font-weight: bold;
border: none;
+ position: sticky;
+ top: 0;
}
-
tr.odd {
background-color: rgb(242, 242, 242);
}
-
tr:hover {
background: #e1e1e1;
}
diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.spec.ts b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.spec.ts
index 5e39ee3ab..5703c67bd 100644
--- a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.spec.ts
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.spec.ts
@@ -18,6 +18,9 @@ import {HttpClient} from '@angular/common/http';
import {getTestBed} from "@angular/core/testing";
import {of} from 'rxjs';
import {NodeInstance} from "../../models/nodeInstance";
+import {DatePipe} from "@angular/common";
+import {SpaceToUnderscorePipe} from "../../pipes/spaceToUnderscore/space-to-underscore.pipe";
+import {ResizableModule} from "angular-resizable-element";
class MockAppStore<T> {
getState() {
@@ -52,6 +55,7 @@ describe('Audit Info Modal Component_serviceInfoService', () => {
ContextMenuModule,
ScrollToModule.forRoot(),
RouterTestingModule,
+ ResizableModule,
ModalModule.forRoot()
],
providers: [
@@ -61,6 +65,8 @@ describe('Audit Info Modal Component_serviceInfoService', () => {
AuditInfoModalComponentService,
ContextMenuService,
FeatureFlagsService,
+ DatePipe,
+ SpaceToUnderscorePipe,
{provide: NgRedux, useClass: MockAppStore}
],
declarations: [AuditInfoModalComponent, CapitalizeAndFormatPipe],
@@ -195,4 +201,9 @@ describe('Audit Info Modal Component_serviceInfoService', () => {
AuditInfoModalComponent.openModal.next(jobData);
expect(component.auditInfoModal.hide).toHaveBeenCalled();
});
+
+test('msoStatus table columns count', () =>{
+ let tableHeader = document.querySelector('table thead tr');
+ expect(tableHeader.querySelectorAll('th').length).toEqual(7);
+ });
});
diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts
index 3a7f4ecfa..d8d3c32ac 100644
--- a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts
@@ -11,6 +11,10 @@ import {NgRedux} from "@angular-redux/store";
import {AppState} from "../../store/reducers";
import {AuditInfoModalComponentService} from "./auditInfoModal.component.service";
import {FeatureFlagsService, Features} from "../../services/featureFlag/feature-flags.service";
+import * as XLSX from 'xlsx';
+import {DatePipe} from "@angular/common";
+import {SpaceToUnderscorePipe} from "../../pipes/spaceToUnderscore/space-to-underscore.pipe";
+import {ResizeEvent} from "angular-resizable-element";
@Component({
selector: 'audit-info-modal',
@@ -21,7 +25,7 @@ export class AuditInfoModalComponent {
static openModal: Subject<ServiceInfoModel> = new Subject<ServiceInfoModel>();
static openInstanceAuditInfoModal: Subject<{instanceId , type, model, instance}> = new Subject<{instanceId , type, model, instance}>();
@ViewChild('auditInfoModal', {static: false}) public auditInfoModal: ModalDirective;
- title: string = 'Service Instantiation Information';
+ title: string = 'Service Information';
modelInfoItems: ModelInformationItem[] = [];
serviceModel: ServiceModel;
serviceModelName: string;
@@ -39,17 +43,26 @@ export class AuditInfoModalComponent {
type : string = "Service";
showVidStatus : boolean = true;
auditInfoModalComponentService : AuditInfoModalComponentService;
+ serviceInstanceName : string;
+ serviceModelVersion : any;
+ exportMSOStatusFeatureEnabled: boolean;
+ dataIsReady : boolean = false;
+ jobDataLocal : any;
constructor(private _serviceInfoService: ServiceInfoService, private _iframeService : IframeService,
private _auditInfoModalComponentService : AuditInfoModalComponentService,
private _featureFlagsService: FeatureFlagsService,
+ private datePipe: DatePipe,
+ private spacetoUnderscore: SpaceToUnderscorePipe,
private store: NgRedux<AppState>) {
this.auditInfoModalComponentService = this._auditInfoModalComponentService;
AuditInfoModalComponent.openModal.subscribe((jobData: ServiceInfoModel) => {
this.isALaCarteFlagOn = this.store.getState().global.flags['FLAG_A_LA_CARTE_AUDIT_INFO'];
this.showMoreAuditInfoLink = _featureFlagsService.getFlagState(Features.FLAG_MORE_AUDIT_INFO_LINK_ON_AUDIT_INFO);
+ this.exportMSOStatusFeatureEnabled = _featureFlagsService.getFlagState(Features.FLAG_2011_EXPORT_MSO_STATUS);
this.initializeProperties();
this.showVidStatus = true;
if (jobData) {
+ this.jobDataLocal = jobData;
this.isAlaCarte = jobData.aLaCarte;
this.openAuditInfoModal(jobData);
_iframeService.addClassOpenModal(this.parentElementClassName);
@@ -57,6 +70,8 @@ export class AuditInfoModalComponent {
this.serviceModelId = jobData.serviceModelId;
this.jobId = jobData.jobId;
this.auditInfoModal.show();
+ this.serviceInstanceName = jobData.serviceInstanceName;
+ this.serviceModelVersion = jobData.serviceModelVersion;
} else {
_iframeService.removeClassCloseModal(this.parentElementClassName);
this.auditInfoModal.hide();
@@ -85,6 +100,29 @@ export class AuditInfoModalComponent {
});
}
+ public style: object = {};
+ validate(event: ResizeEvent): boolean {
+ console.log("event : ", event);
+ if(event.rectangle.width && event.rectangle.height &&
+ ( event.rectangle.width < 800 || event.rectangle.width > 1240)
+ ){
+ return false;
+ } else{
+ return true;
+ }
+ }
+ onResizeEnd(event: ResizeEvent): void {
+ console.log('Element was resized', event);
+ this.style = {
+ position: 'fixed',
+ left: `${event.rectangle.left}px`,
+ top: `${event.rectangle.top}px`,
+ width: `${event.rectangle.width}px`,
+ height: `${event.rectangle.height}px`
+ };
+ console.log("stle : ", this.style);
+ }
+
setModalTitles(type : string) : void{
this.type = AuditInfoModalComponentService.setModalTitlesType(type) ;
@@ -117,6 +155,20 @@ export class AuditInfoModalComponent {
});
}
+ exportMsoStatusTable(){
+ let currentTime = new Date();
+ let timestamp = this.datePipe.transform(currentTime, "MMMddyyyy")+'_'
+ +currentTime.getHours()+":"+currentTime.getMinutes()+":"+currentTime.getSeconds()
+ let fileName = this.spacetoUnderscore.transform(this.serviceInstanceName)+'_'+timestamp;
+ let msoStatusTableElement = document.getElementById('service-instantiation-audit-info-mso');
+ const ws: XLSX.WorkSheet = XLSX.utils.table_to_sheet(msoStatusTableElement);
+ const wb: XLSX.WorkBook = XLSX.utils.book_new();
+ XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
+ /* save to file */
+ XLSX.writeFile(wb, fileName+'.csv');
+ this._iframeService.addClassOpenModal(this.parentElementClassName);
+ }
+
onCancelClick() {
this._iframeService.removeClassCloseModal(this.parentElementClassName);
this.initializeProperties();
@@ -128,6 +180,13 @@ export class AuditInfoModalComponent {
window.open("http://ecompguide.web.att.com:8000/#ecomp_ug/c_ecomp_ops_vid.htmll#r_ecomp_ops_vid_bbglossary", "_blank");
}
+ refreshData(): void {
+ this.dataIsReady = false;
+ this.initAuditInfoData(this.jobDataLocal);
+ this.dataIsReady = true;
+
+ }
+
readOnlyRetryUrl = (): string =>
`../../serviceModels.htm?more#/servicePlanning/RETRY?serviceModelId=${this.serviceModelId}&jobId=${this.jobId}`
}
diff --git a/vid-webpack-master/src/app/shared/pipes/spaceToUnderscore/space-to-underscore.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/spaceToUnderscore/space-to-underscore.pipe.spec.ts
new file mode 100644
index 000000000..96e9b6cc6
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/spaceToUnderscore/space-to-underscore.pipe.spec.ts
@@ -0,0 +1,8 @@
+import { SpaceToUnderscorePipe } from './space-to-underscore.pipe';
+
+describe('SpaceToUnderscorePipe', () => {
+ it('create an instance', () => {
+ const pipe = new SpaceToUnderscorePipe();
+ expect(pipe).toBeTruthy();
+ });
+});
diff --git a/vid-webpack-master/src/app/shared/pipes/spaceToUnderscore/space-to-underscore.pipe.ts b/vid-webpack-master/src/app/shared/pipes/spaceToUnderscore/space-to-underscore.pipe.ts
new file mode 100644
index 000000000..b82b28bc1
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/spaceToUnderscore/space-to-underscore.pipe.ts
@@ -0,0 +1,17 @@
+import { Pipe, PipeTransform } from '@angular/core';
+
+@Pipe({
+ name: 'spaceToUnderscore'
+})
+export class SpaceToUnderscorePipe implements PipeTransform {
+
+ transform(text: string): string {
+ if (text) {
+ // @ts-ignore
+ text = text.replaceAll(' ', '_');
+ return text;
+ }
+ return text;
+ }
+
+}
diff --git a/vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts b/vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts
index a0920a902..0f4623f59 100644
--- a/vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts
+++ b/vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts
@@ -9,4 +9,7 @@ export class AuditStatus{
additionalInfo :any;
instanceName: string;
instanceType : string;
+ modelType: string;
+ startTime: string;
+ finishTime: string;
}
diff --git a/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts
index 758aa4b15..a950653c6 100644
--- a/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts
+++ b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts
@@ -26,7 +26,8 @@ export enum Features {
FLAG_2008_PAUSE_INSTANTIATION_ON_VFMODULE_POPUP = 'FLAG_2008_PAUSE_INSTANTIATION_ON_VFMODULE_POPUP',
FLAG_2008_REMOVE_PAUSE_INSTANTIATION = 'FLAG_2008_REMOVE_PAUSE_INSTANTIATION',
FLAG_2008_DISABLE_DRAG_FOR_BASE_MODULE ='FLAG_2008_DISABLE_DRAG_FOR_BASE_MODULE',
- FLAG_2008_CREATE_VFMODULE_INSTANTIATION_ORDER_NUMBER ='FLAG_2008_CREATE_VFMODULE_INSTANTIATION_ORDER_NUMBER'
+ FLAG_2008_CREATE_VFMODULE_INSTANTIATION_ORDER_NUMBER ='FLAG_2008_CREATE_VFMODULE_INSTANTIATION_ORDER_NUMBER',
+ FLAG_2011_EXPORT_MSO_STATUS = 'FLAG_2011_EXPORT_MSO_STATUS'
}
@Injectable()
diff --git a/vid-webpack-master/src/app/shared/shared.module.ts b/vid-webpack-master/src/app/shared/shared.module.ts
index bae7c11f9..d16d68cb2 100644
--- a/vid-webpack-master/src/app/shared/shared.module.ts
+++ b/vid-webpack-master/src/app/shared/shared.module.ts
@@ -1,5 +1,5 @@
import {ModuleWithProviders, NgModule} from '@angular/core';
-import {CommonModule} from '@angular/common';
+import {CommonModule, DatePipe} from '@angular/common';
import {RouterModule} from '@angular/router';
import {BrowserModule} from '@angular/platform-browser';
import {HttpClientModule} from '@angular/common/http';
@@ -96,8 +96,8 @@ import {SdcUiComponentsModule} from "onap-ui-angular";
import {UploadFilesLinkComponent} from "./components/genericForm/genericFormSharedComponent/uploadFiles/upload-files-link.component";
import { FileUploadModule } from 'ng2-file-upload';
import {MessageModal} from "./components/messageModal/message-modal.service";
-
-
+import {SpaceToUnderscorePipe} from "./pipes/spaceToUnderscore/space-to-underscore.pipe";
+import {ResizableModule} from 'angular-resizable-element';
@NgModule({
imports: [
@@ -115,7 +115,8 @@ import {MessageModal} from "./components/messageModal/message-modal.service";
BootstrapModalModule,
DataTableModule,
ModalModule.forRoot(),
- FileUploadModule
+ FileUploadModule,
+ ResizableModule
],
declarations: [
PopoverComponent,
@@ -135,6 +136,7 @@ import {MessageModal} from "./components/messageModal/message-modal.service";
NoContentMessageAndIconComponent,
ModelInformationComponent,
CapitalizeAndFormatPipe,
+ SpaceToUnderscorePipe,
ServiceInfoPipe,
OrderByPipe,
SafePipe,
@@ -178,6 +180,7 @@ import {MessageModal} from "./components/messageModal/message-modal.service";
NoContentMessageAndIconComponent,
ModelInformationComponent,
CapitalizeAndFormatPipe,
+ SpaceToUnderscorePipe,
ServiceInfoPipe,
OrderByPipe,
SafePipe,
@@ -262,7 +265,7 @@ export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
- providers: [MessageBoxService]
+ providers: [MessageBoxService, DatePipe, SpaceToUnderscorePipe]
};
}
}