diff --git a/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.html b/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.html index d092e9b36a0d88f81b8f4d8920a3257b3d6200d9..4810bc05d5abdd554dc5e63b8720d2c49bf4b9c8 100644 --- a/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.html +++ b/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.html @@ -50,7 +50,7 @@ <br /> <div> - <app-filter-menu *ngIf="showFilterMenu" [state]="statesToFilter" [daStaff]="qaStaff['DA']" [aodStaff]="qaStaff['AOD']" [srdpStatus]="srdpOptions" [filters]="filters" (filterMenuEventEmitter)="emitFilterEvent($event)"></app-filter-menu> + <app-filter-menu *ngIf="showFilterMenu" [state]="statesToFilter" [exec_status]="execStatusToFilter" [daStaff]="qaStaff['DA']" [aodStaff]="qaStaff['AOD']" [srdpStatus]="srdpOptions" [filters]="filters" (filterMenuEventEmitter)="emitFilterEvent($event)"></app-filter-menu> <mat-paginator #requestPaginator [length]="(sortedActiveRequests$ | async)?.length" [pageSize]="pageSize" @@ -82,6 +82,9 @@ ><i class="text-dark small fas fa-arrow-up"></i ></span> </button> + <button class="btn bg-transparent border-0 btn-light btn-sm" (click)="toggleFilterMenu()"> + <span><i class="text-dark small fas fa-filter"></i></span> + </button> </th> <th>SDM ID</th> <th>Bands</th> diff --git a/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.ts b/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.ts index bc8612201e75597cd1ec806d983bdc621d53c19f..92f8da1e7b926e313ad130ceb6e1dfd59db7dea5 100644 --- a/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.ts +++ b/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.ts @@ -80,6 +80,7 @@ export class ActiveCapabilityRequestsComponent implements OnInit, OnDestroy { private paramsObj: any; private filters: any; public showFilterMenu = false; + private notSubmittedState = "Latest version has not been submitted"; private newParams: Params; private filterSets = {}; private availableFilters: any; @@ -88,6 +89,7 @@ export class ActiveCapabilityRequestsComponent implements OnInit, OnDestroy { // Filter sets public statesSet = new Set<string>(); + public execStatusSet = new Set<string>(); public daSet = new Set<string>(); public aodSet = new Set<string>(); public srdpSet = new Set<string>(); @@ -123,6 +125,20 @@ export class ActiveCapabilityRequestsComponent implements OnInit, OnDestroy { {"name":"Cancelled"}, {"name":"Failed"}, ] + public execStatusToFilter = [ + {"name":"Not submitted", "filter_val":this.notSubmittedState}, + {"name":"Start", "filter_val":"Start"}, + {"name":"Queued", "filter_val":"Queued"}, + {"name":"Executing", "filter_val":"Executing"}, + {"name":"Ingesting", "filter_val":"Ingesting"}, + {"name":"Awaiting QA", "filter_val":"Awaiting QA"}, + {"name":"Stage 2 Review", "filter_val":"Stage 2 Review"}, + {"name":"QA Closed", "filter_val":"QA Closed"}, + {"name":"Failed", "filter_val":"Failed"}, + {"name":"Error", "filter_val":"Error"}, + {"name":"Cancelled", "filter_val":"Cancelled"}, + {"name":"Complete", "filter_val":"Complete"}, + ] public srdpOptions = [ {"name":"true"}, {"name":"false"}, @@ -274,6 +290,7 @@ export class ActiveCapabilityRequestsComponent implements OnInit, OnDestroy { private setupAvailableFilters() { this.availableFilters = { 'state': this.statesToFilter, + 'exec_status': this.execStatusToFilter, 'is_srdp': this.srdpOptions, 'obs_min': this.obsDateOptions, 'obs_max': this.obsDateOptions @@ -328,7 +345,11 @@ export class ActiveCapabilityRequestsComponent implements OnInit, OnDestroy { } public filterFrontendFilters(activeRequests: any): any { - if (this.filters && (this.filters.hasOwnProperty("is_srdp") || this.filters.hasOwnProperty("obs_min") || this.filters.hasOwnProperty("obs_max"))) { + if (this.filters && ( + this.filters.hasOwnProperty("is_srdp") || + this.filters.hasOwnProperty("obs_min") || + this.filters.hasOwnProperty("obs_max") || + this.filters.hasOwnProperty("exec_status"))) { // SRDP filter if (this.filters.hasOwnProperty("is_srdp")) { return activeRequests.filter(r => { @@ -363,6 +384,12 @@ export class ActiveCapabilityRequestsComponent implements OnInit, OnDestroy { }); return filteredDates; } + // Execution Status filter + else if (this.filters.hasOwnProperty("exec_status")) { + return activeRequests.filter(r => { + return this.filters.exec_status.includes(this.getExecutionStatusName(r)); + }); + } } else { // return unfiltered activeRequests return activeRequests @@ -496,7 +523,7 @@ export class ActiveCapabilityRequestsComponent implements OnInit, OnDestroy { } if (request.state === 'Created' || (request.state === 'Submitted' && request.versions[request.versions.length - 1].state === 'Created')) { - statusName = "Latest version has not been submitted"; + statusName = this.notSubmittedState; } return statusName; @@ -595,6 +622,8 @@ export class ActiveCapabilityRequestsComponent implements OnInit, OnDestroy { switch(s) { case "state": return this.statesSet + case "exec_status": + return this.execStatusSet case "assigned_da": return this.daSet case "assigned_aod": diff --git a/apps/web/src/app/workspaces/components/active-capability-requests/components/filter-menu/filter-menu.component.html b/apps/web/src/app/workspaces/components/active-capability-requests/components/filter-menu/filter-menu.component.html index ccbfd6627cb00a6fff16c9d57d67e46851fe54f7..e0e59f6ab9f8e0a078d59a7bd9d5883f8d979cbc 100644 --- a/apps/web/src/app/workspaces/components/active-capability-requests/components/filter-menu/filter-menu.component.html +++ b/apps/web/src/app/workspaces/components/active-capability-requests/components/filter-menu/filter-menu.component.html @@ -8,6 +8,14 @@ </div> </div> + <div class="bg-light p-2"> + <p>Execution Status</p> + <div *ngFor="let s of exec_status" class="form-check"> + <input class="form-check-input" type="checkbox" [id]="s.name" [value]="s.filter_val" (change)="addFilter(s.filter_val, 'exec_status', $event.target.checked)" [checked]="s.isChecked" /> + <label class="form-check-label" [for]="s.name">{{s.name}}</label> + </div> + </div> + <div class="bg-light p-2"> <p>DA staff</p> <div *ngFor="let da of daStaff" class="form-check"> diff --git a/apps/web/src/app/workspaces/components/active-capability-requests/components/filter-menu/filter-menu.component.ts b/apps/web/src/app/workspaces/components/active-capability-requests/components/filter-menu/filter-menu.component.ts index c6a5fcccb4f27712b2714b67747969442e782f58..3fb1d436490d4ac956676406ccf2725fab2764c8 100644 --- a/apps/web/src/app/workspaces/components/active-capability-requests/components/filter-menu/filter-menu.component.ts +++ b/apps/web/src/app/workspaces/components/active-capability-requests/components/filter-menu/filter-menu.component.ts @@ -34,6 +34,7 @@ export interface Filter { export class FilterMenuComponent implements OnInit { @Input() state: any; + @Input() exec_status: any; @Input() daStaff: any; @Input() aodStaff: any; @Input() srdpStatus: any;