Skip to content

Commit 611ea62

Browse files
authored
Merge pull request #2086 from bcgov/feature/ALCS-2319-2
Archive and Unarchive Application Decision Condition Cards
2 parents bd38acc + 38e89dd commit 611ea62

File tree

11 files changed

+280
-83
lines changed

11 files changed

+280
-83
lines changed

alcs-frontend/src/app/features/admin/unarchive/unarchive.component.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
UnarchiveCardService,
66
} from '../../../services/unarchive-card/unarchive-card.service';
77
import { ConfirmationDialogService } from '../../../shared/confirmation-dialog/confirmation-dialog.service';
8+
import { CardType } from '../../../shared/card/card.component';
89

910
@Component({
1011
selector: 'app-unarchive',
@@ -18,7 +19,7 @@ export class UnarchiveComponent {
1819

1920
constructor(
2021
private unarchiveCardService: UnarchiveCardService,
21-
private confirmationDialogService: ConfirmationDialogService
22+
private confirmationDialogService: ConfirmationDialogService,
2223
) {}
2324

2425
onUnarchive(uuid: string) {
@@ -36,6 +37,11 @@ export class UnarchiveComponent {
3637
async onSearch() {
3738
const results = await this.unarchiveCardService.search(this.search);
3839
if (results) {
40+
results.forEach((result) => {
41+
if (result.type === CardType.APP_CON) {
42+
result.type = 'Condition';
43+
}
44+
});
3945
this.cards = results;
4046
}
4147
}

alcs-frontend/src/app/features/board/dialogs/application-decision-condition-dialog/application-decision-condition-dialog.component.html

+58-47
Original file line numberDiff line numberDiff line change
@@ -129,61 +129,72 @@ <h3 class="card-title">
129129
</ng-template>
130130
</div>
131131
</div>
132-
<div class="conditions-table-container" [ngClass]="{ 'error-state': isSaveDisabled() }">
133-
<table mat-table class="conditions-table mat-elevation-z2" [dataSource]="dataSource" style="width: 100%">
134-
<ng-container matColumnDef="select">
135-
<td mat-cell *matCellDef="let element" class="column-select">
136-
<mat-checkbox
137-
[disabled]="isConditionDisabled(element.condition)"
138-
[(ngModel)]="element.selected"
139-
></mat-checkbox>
140-
</td>
141-
</ng-container>
132+
<div
133+
class="conditions-table-container"
134+
[ngClass]="{
135+
'error-state': isSaveDisabled() && isEditing,
136+
'no-conditions': dataSource.data.length === 0 && !isEditing,
137+
}"
138+
>
139+
<ng-container *ngIf="dataSource.data.length === 0; else showTable">
140+
<div class="no-conditions">No Conditions</div>
141+
</ng-container>
142+
<ng-template #showTable>
143+
<table mat-table class="conditions-table mat-elevation-z2" [dataSource]="dataSource">
144+
<ng-container matColumnDef="select">
145+
<td mat-cell *matCellDef="let element" class="column-select">
146+
<mat-checkbox
147+
[disabled]="isConditionDisabled(element.condition)"
148+
[(ngModel)]="element.selected"
149+
></mat-checkbox>
150+
</td>
151+
</ng-container>
142152

143-
<ng-container matColumnDef="condition">
144-
<td mat-cell *matCellDef="let element" class="column-condition">
145-
{{ element.index }}. {{ element.condition.type.label }}
146-
</td>
147-
</ng-container>
153+
<ng-container matColumnDef="condition">
154+
<td mat-cell *matCellDef="let element" class="column-condition">
155+
{{ element.index }}. {{ element.condition.type.label }}
156+
</td>
157+
</ng-container>
148158

149-
<ng-container matColumnDef="date">
150-
<td mat-cell *matCellDef="let element" class="column-date">
151-
<ng-container *ngIf="element.condition.type.isDateChecked">
152-
<ng-container *ngIf="element.condition.type.dateType === 'Single'; else multipleDateColumn">
153-
<ng-container *ngIf="element.condition.type.singleDateLabel === 'Due Date'; else singleEndDate">
159+
<ng-container matColumnDef="date">
160+
<td mat-cell *matCellDef="let element" class="column-date">
161+
<ng-container *ngIf="element.condition.type.isDateChecked">
162+
<ng-container *ngIf="element.condition.type.dateType === 'Single'; else multipleDateColumn">
163+
<ng-container *ngIf="element.condition.type.singleDateLabel === 'Due Date'; else singleEndDate">
164+
<span class="date-label">Due Date: </span>
165+
</ng-container>
166+
<ng-template #singleEndDate>
167+
<span class="date-label">End Date: </span>
168+
</ng-template>
169+
</ng-container>
170+
<ng-template #multipleDateColumn>
154171
<span class="date-label">Due Date: </span>
172+
</ng-template>
173+
<ng-container *ngIf="getDate(element.condition); else noDate">
174+
{{ getDate(element.condition) }}
155175
</ng-container>
156-
<ng-template #singleEndDate>
157-
<span class="date-label">End Date: </span>
176+
<ng-template #noDate>
177+
<span class="no-data">No Data</span>
158178
</ng-template>
159179
</ng-container>
160-
<ng-template #multipleDateColumn>
161-
<span class="date-label">Due Date: </span>
162-
</ng-template>
163-
<ng-container *ngIf="getDate(element.condition); else noDate">
164-
{{ getDate(element.condition) }}
165-
</ng-container>
166-
<ng-template #noDate>
167-
<span class="no-data">No Data</span>
168-
</ng-template>
169-
</ng-container>
170-
</td>
171-
</ng-container>
180+
</td>
181+
</ng-container>
172182

173-
<ng-container matColumnDef="status">
174-
<td mat-cell *matCellDef="let element" class="column-status">
175-
<app-application-type-pill [type]="getStatusPill(element.condition.status)"></app-application-type-pill>
176-
</td>
177-
</ng-container>
183+
<ng-container matColumnDef="status">
184+
<td mat-cell *matCellDef="let element" class="column-status">
185+
<app-application-type-pill [type]="getStatusPill(element.condition.status)"></app-application-type-pill>
186+
</td>
187+
</ng-container>
178188

179-
<tr
180-
mat-row
181-
*matRowDef="let row; columns: displayColumns"
182-
[class.disabled-row]="isConditionDisabled(row.condition)"
183-
matTooltip="Condition is already used by another card"
184-
[matTooltipDisabled]="!isConditionDisabled(row.condition)"
185-
></tr>
186-
</table>
189+
<tr
190+
mat-row
191+
*matRowDef="let row; columns: displayColumns"
192+
[class.disabled-row]="isConditionDisabled(row.condition)"
193+
matTooltip="Condition is already used by another card"
194+
[matTooltipDisabled]="!isConditionDisabled(row.condition)"
195+
></tr>
196+
</table>
197+
</ng-template>
187198
</div>
188199
</div>
189200
<div class="subtasks-wrapper">

alcs-frontend/src/app/features/board/dialogs/application-decision-condition-dialog/application-decision-condition-dialog.component.scss

+10
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,16 @@
113113
font-weight: 400;
114114
}
115115

116+
.no-conditions {
117+
border: none;
118+
background-color: colors.$grey-light;
119+
display: flex;
120+
align-items: center;
121+
justify-content: center;
122+
padding: 8px;
123+
width: 100%;
124+
}
125+
116126
.flag-icon {
117127
color: blue;
118128
}

services/apps/alcs/src/alcs/admin/unarchive-card/unarchive-card.service.spec.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { NoticeOfIntentService } from '../../notice-of-intent/notice-of-intent.s
1111
import { NotificationService } from '../../notification/notification.service';
1212
import { PlanningReferralService } from '../../planning-review/planning-referral/planning-referral.service';
1313
import { UnarchiveCardService } from './unarchive-card.service';
14+
import { ApplicationDecisionConditionCardService } from '../../application-decision/application-decision-condition/application-decision-condition-card/application-decision-condition-card.service';
1415

1516
describe('UnarchiveCardService', () => {
1617
let service: UnarchiveCardService;
@@ -23,6 +24,7 @@ describe('UnarchiveCardService', () => {
2324
let mockNOIModificationService: DeepMocked<NoticeOfIntentModificationService>;
2425
let mockNotificationService: DeepMocked<NoticeOfIntentService>;
2526
let mockInquiryService: DeepMocked<InquiryService>;
27+
let mockApplicationDecisionConditionCardService: DeepMocked<ApplicationDecisionConditionCardService>;
2628

2729
beforeEach(async () => {
2830
mockApplicationService = createMock();
@@ -33,6 +35,7 @@ describe('UnarchiveCardService', () => {
3335
mockNOIModificationService = createMock();
3436
mockNotificationService = createMock();
3537
mockInquiryService = createMock();
38+
mockApplicationDecisionConditionCardService = createMock();
3639

3740
const module: TestingModule = await Test.createTestingModule({
3841
imports: [
@@ -74,6 +77,10 @@ describe('UnarchiveCardService', () => {
7477
provide: InquiryService,
7578
useValue: mockInquiryService,
7679
},
80+
{
81+
provide: ApplicationDecisionConditionCardService,
82+
useValue: mockApplicationDecisionConditionCardService,
83+
},
7784
],
7885
}).compile();
7986

@@ -93,18 +100,18 @@ describe('UnarchiveCardService', () => {
93100
mockNOIModificationService.getDeletedCards.mockResolvedValue([]);
94101
mockNotificationService.getDeletedCards.mockResolvedValue([]);
95102
mockInquiryService.getDeletedCards.mockResolvedValue([]);
103+
mockApplicationDecisionConditionCardService.getDeletedCards.mockResolvedValue([]);
96104

97105
await service.fetchByFileId('uuid');
98106

99107
expect(mockApplicationService.getDeletedCard).toHaveBeenCalledTimes(1);
100108
expect(mockReconsiderationService.getDeletedCards).toHaveBeenCalledTimes(1);
101-
expect(mockPlanningReferralService.getDeletedCards).toHaveBeenCalledTimes(
102-
1,
103-
);
109+
expect(mockPlanningReferralService.getDeletedCards).toHaveBeenCalledTimes(1);
104110
expect(mockModificationService.getDeletedCards).toHaveBeenCalledTimes(1);
105111
expect(mockNOIService.getDeletedCards).toHaveBeenCalledTimes(1);
106112
expect(mockNOIModificationService.getDeletedCards).toHaveBeenCalledTimes(1);
107113
expect(mockNotificationService.getDeletedCards).toHaveBeenCalledTimes(1);
108114
expect(mockInquiryService.getDeletedCards).toHaveBeenCalledTimes(1);
115+
expect(mockApplicationDecisionConditionCardService.getDeletedCards).toHaveBeenCalledTimes(1);
109116
});
110117
});

services/apps/alcs/src/alcs/admin/unarchive-card/unarchive-card.service.ts

+30-12
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { NoticeOfIntentModificationService } from '../../notice-of-intent-decisi
88
import { NoticeOfIntentService } from '../../notice-of-intent/notice-of-intent.service';
99
import { NotificationService } from '../../notification/notification.service';
1010
import { PlanningReferralService } from '../../planning-review/planning-referral/planning-referral.service';
11+
import { ApplicationDecisionConditionCardService } from '../../application-decision/application-decision-condition/application-decision-condition-card/application-decision-condition-card.service';
1112

1213
@Injectable()
1314
export class UnarchiveCardService {
@@ -20,6 +21,7 @@ export class UnarchiveCardService {
2021
private notificationService: NotificationService,
2122
private planningReferralService: PlanningReferralService,
2223
private inquiryService: InquiryService,
24+
private applicationDecisionConditionCardService: ApplicationDecisionConditionCardService,
2325
) {}
2426

2527
async fetchByFileId(fileId: string) {
@@ -37,6 +39,7 @@ export class UnarchiveCardService {
3739
await this.fetchAndMapNOIs(fileId, result);
3840
await this.fetchAndMapNotifications(fileId, result);
3941
await this.fetchAndMapInquiries(fileId, result);
42+
await this.fetchAndMapApplicationDecisionConditionCards(fileId, result);
4043

4144
return result;
4245
}
@@ -70,8 +73,7 @@ export class UnarchiveCardService {
7073
createdAt: number;
7174
}[],
7275
) {
73-
const modifications =
74-
await this.modificationService.getDeletedCards(fileId);
76+
const modifications = await this.modificationService.getDeletedCards(fileId);
7577
for (const modification of modifications) {
7678
result.push({
7779
cardUuid: modification.cardUuid ?? '',
@@ -91,8 +93,7 @@ export class UnarchiveCardService {
9193
createdAt: number;
9294
}[],
9395
) {
94-
const reconsiderations =
95-
await this.reconsiderationService.getDeletedCards(fileId);
96+
const reconsiderations = await this.reconsiderationService.getDeletedCards(fileId);
9697
for (const reconsideration of reconsiderations) {
9798
result.push({
9899
cardUuid: reconsideration.cardUuid ?? '',
@@ -112,8 +113,7 @@ export class UnarchiveCardService {
112113
createdAt: number;
113114
}[],
114115
) {
115-
const noticeOfIntents =
116-
await this.noticeOfIntentService.getDeletedCards(fileId);
116+
const noticeOfIntents = await this.noticeOfIntentService.getDeletedCards(fileId);
117117
for (const noi of noticeOfIntents) {
118118
result.push({
119119
cardUuid: noi.cardUuid,
@@ -123,8 +123,7 @@ export class UnarchiveCardService {
123123
});
124124
}
125125

126-
const modificationNOIs =
127-
await this.noticeOfIntentModificationService.getDeletedCards(fileId);
126+
const modificationNOIs = await this.noticeOfIntentModificationService.getDeletedCards(fileId);
128127

129128
for (const noi of modificationNOIs) {
130129
result.push({
@@ -145,8 +144,7 @@ export class UnarchiveCardService {
145144
createdAt: number;
146145
}[],
147146
) {
148-
const notifications =
149-
await this.notificationService.getDeletedCards(fileId);
147+
const notifications = await this.notificationService.getDeletedCards(fileId);
150148
for (const notification of notifications) {
151149
result.push({
152150
cardUuid: notification.cardUuid,
@@ -166,8 +164,7 @@ export class UnarchiveCardService {
166164
createdAt: number;
167165
}[],
168166
) {
169-
const planningReferrals =
170-
await this.planningReferralService.getDeletedCards(fileId);
167+
const planningReferrals = await this.planningReferralService.getDeletedCards(fileId);
171168
for (const referral of planningReferrals) {
172169
result.push({
173170
cardUuid: referral.cardUuid,
@@ -197,4 +194,25 @@ export class UnarchiveCardService {
197194
});
198195
}
199196
}
197+
198+
private async fetchAndMapApplicationDecisionConditionCards(
199+
fileId: string,
200+
result: {
201+
cardUuid: string;
202+
type: string;
203+
status: string;
204+
createdAt: number;
205+
}[],
206+
) {
207+
const conditionCards = await this.applicationDecisionConditionCardService.getDeletedCards(fileId);
208+
209+
for (const conditionCard of conditionCards) {
210+
result.push({
211+
cardUuid: conditionCard.cardUuid,
212+
createdAt: conditionCard.auditCreatedAt.getTime(),
213+
type: CARD_TYPE.APP_CON,
214+
status: conditionCard.card!.status.label,
215+
});
216+
}
217+
}
200218
}

0 commit comments

Comments
 (0)