diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/subd-proposal/subd-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/subd-proposal/subd-proposal.component.html
index a6f6417554..1e5f60cba1 100644
--- a/portal-frontend/src/app/features/applications/edit-submission/proposal/subd-proposal/subd-proposal.component.html
+++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/subd-proposal/subd-proposal.component.html
@@ -109,7 +109,7 @@
Documents needed for this step:
required
placeholder="Type size in hectares"
[formControlName]="i + '-size'"
- (change)="onChangeLotSize()"
+ (change)="onChangeLotSize(i, $event)"
/>
ha
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/subd-proposal/subd-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/subd-proposal/subd-proposal.component.ts
index 8266d7abe0..2b0330011d 100644
--- a/portal-frontend/src/app/features/applications/edit-submission/proposal/subd-proposal/subd-proposal.component.ts
+++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/subd-proposal/subd-proposal.component.ts
@@ -168,7 +168,9 @@ export class SubdProposalComponent extends FilesStepComponent implements OnInit,
this.calculateLotSize();
}
- onChangeLotSize() {
+ onChangeLotSize(i: number, event: Event) {
+ const target = event.target as HTMLInputElement;
+ this.proposedLots[i].size = target.value;
this.calculateLotSize();
}
diff --git a/portal-frontend/src/app/features/notifications/edit-submission/transferees/transferees.component.scss b/portal-frontend/src/app/features/notifications/edit-submission/transferees/transferees.component.scss
index b0180f9d5f..a72b0238a5 100644
--- a/portal-frontend/src/app/features/notifications/edit-submission/transferees/transferees.component.scss
+++ b/portal-frontend/src/app/features/notifications/edit-submission/transferees/transferees.component.scss
@@ -31,7 +31,8 @@
flex-direction: column;
align-items: start;
- button {
+ div, button {
+ margin-top: rem(4);
width: 100%;
}
}
diff --git a/services/apps/alcs/src/alcs/application-decision/application-decision-v1/application-decision-v1.module.ts b/services/apps/alcs/src/alcs/application-decision/application-decision-v1/application-decision-v1.module.ts
index 19088783fa..a45749dad1 100644
--- a/services/apps/alcs/src/alcs/application-decision/application-decision-v1/application-decision-v1.module.ts
+++ b/services/apps/alcs/src/alcs/application-decision/application-decision-v1/application-decision-v1.module.ts
@@ -75,6 +75,7 @@ import { ApplicationDecisionV1Service } from './application-decision/application
exports: [
ApplicationModificationService,
ApplicationDecisionV1Service,
+ ApplicationDecisionMeetingService,
ApplicationReconsiderationService,
],
})
diff --git a/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.module.ts b/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.module.ts
index 4ed61a3a95..c81fddf79f 100644
--- a/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.module.ts
+++ b/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.module.ts
@@ -1,6 +1,7 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ApplicationDecision } from '../../application-decision/application-decision.entity';
+import { ApplicationDecisionModule } from '../../application-decision/application-decision.module';
import { ApplicationModification } from '../../application-decision/application-modification/application-modification.entity';
import { ApplicationReconsideration } from '../../application-decision/application-reconsideration/application-reconsideration.entity';
import { ApplicationSubmissionStatusModule } from '../application-submission-status/application-submission-status.module';
@@ -19,6 +20,7 @@ import { ApplicationTimelineService } from './application-timeline.service';
]),
ApplicationModule,
ApplicationSubmissionStatusModule,
+ ApplicationDecisionModule,
],
providers: [ApplicationTimelineService],
controllers: [ApplicationTimelineController],
diff --git a/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.service.spec.ts b/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.service.spec.ts
index cf7e7fec5c..dae7f9dad1 100644
--- a/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.service.spec.ts
+++ b/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.service.spec.ts
@@ -2,6 +2,8 @@ import { createMock, DeepMocked } from '@golevelup/nestjs-testing';
import { Test, TestingModule } from '@nestjs/testing';
import { getRepositoryToken } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
+import { ApplicationDecisionMeeting } from '../../application-decision/application-decision-v1/application-decision-meeting/application-decision-meeting.entity';
+import { ApplicationDecisionMeetingService } from '../../application-decision/application-decision-v1/application-decision-meeting/application-decision-meeting.service';
import { ApplicationDecision } from '../../application-decision/application-decision.entity';
import { ApplicationModificationOutcomeType } from '../../application-decision/application-modification/application-modification-outcome-type/application-modification-outcome-type.entity';
import { ApplicationModification } from '../../application-decision/application-modification/application-modification.entity';
@@ -29,6 +31,7 @@ describe('ApplicationTimelineService', () => {
let mockAppService: DeepMocked;
let mockAppMeetingService: DeepMocked;
let mockAppStatusService: DeepMocked;
+ let mockAppDecMeetingService: DeepMocked;
const mockSameDate = new Date();
beforeEach(async () => {
@@ -39,6 +42,7 @@ describe('ApplicationTimelineService', () => {
mockAppService = createMock();
mockAppMeetingService = createMock();
mockAppStatusService = createMock();
+ mockAppDecMeetingService = createMock();
const module: TestingModule = await Test.createTestingModule({
providers: [
@@ -70,6 +74,10 @@ describe('ApplicationTimelineService', () => {
provide: ApplicationSubmissionStatusService,
useValue: mockAppStatusService,
},
+ {
+ provide: ApplicationDecisionMeetingService,
+ useValue: mockAppDecMeetingService,
+ },
ApplicationTimelineService,
],
}).compile();
@@ -86,6 +94,7 @@ describe('ApplicationTimelineService', () => {
mockAppDecisionRepo.find.mockResolvedValue([]);
mockAppMeetingService.getByAppFileNumber.mockResolvedValue([]);
mockAppStatusService.getStatusesByFileNumber.mockResolvedValue([]);
+ mockAppDecMeetingService.getByAppFileNumber.mockResolvedValue([]);
});
it('should be defined', () => {
@@ -255,6 +264,27 @@ describe('ApplicationTimelineService', () => {
expect(res[0].htmlText).toEqual('CATS #2 Report Sent to Applicant');
});
+ it('should map Decision Meeting Events', async () => {
+ const sameDate = new Date();
+ mockAppDecMeetingService.getByAppFileNumber.mockResolvedValue([
+ new ApplicationDecisionMeeting({
+ date: sameDate,
+ }),
+ new ApplicationDecisionMeeting({
+ date: new Date(sameDate.getTime() + 5),
+ }),
+ ]);
+
+ const res = await service.getTimelineEvents('file-number');
+
+ expect(res).toBeDefined();
+ expect(res.length).toEqual(2);
+ expect(res[1].htmlText).toEqual(
+ 'Review Discussion #1 - Under Review by ALC',
+ );
+ expect(res[0].htmlText).toEqual('Review Discussion #2');
+ });
+
it('should map Status Events', async () => {
const sameDate = new Date();
mockAppStatusService.getStatusesByFileNumber.mockResolvedValue([
diff --git a/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.service.ts b/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.service.ts
index 9e35e6f2d0..43cb1099c5 100644
--- a/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.service.ts
+++ b/services/apps/alcs/src/alcs/application/application-timeline/application-timeline.service.ts
@@ -1,6 +1,7 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
+import { ApplicationDecisionMeetingService } from '../../application-decision/application-decision-v1/application-decision-meeting/application-decision-meeting.service';
import { ApplicationDecision } from '../../application-decision/application-decision.entity';
import { ApplicationModification } from '../../application-decision/application-modification/application-modification.entity';
import { ApplicationReconsideration } from '../../application-decision/application-reconsideration/application-reconsideration.entity';
@@ -56,6 +57,7 @@ export class ApplicationTimelineService {
private applicationDecisionRepo: Repository,
private applicationService: ApplicationService,
private applicationMeetingService: ApplicationMeetingService,
+ private appDecMeetingService: ApplicationDecisionMeetingService,
private applicationSubmissionStatusService: ApplicationSubmissionStatusService,
) {}
@@ -326,11 +328,11 @@ export class ApplicationTimelineService {
}
private async addMeetingEvents(
- noticeOfIntent: Application,
+ application: Application,
events: TimelineEvent[],
) {
const meetings = await this.applicationMeetingService.getByAppFileNumber(
- noticeOfIntent.fileNumber,
+ application.fileNumber,
);
meetings.sort(
@@ -372,6 +374,28 @@ export class ApplicationTimelineService {
typeCount.set(meeting.type.code, count + 1);
});
+
+ const discussionMeetings =
+ await this.appDecMeetingService.getByAppFileNumber(
+ application.fileNumber,
+ );
+
+ discussionMeetings.sort((a, b) => a.date.getTime() - b.date.getTime());
+
+ discussionMeetings.forEach((meeting, index) => {
+ let htmlText = `Review Discussion #${index + 1}`;
+
+ if (index === 0) {
+ htmlText += ' - Under Review by ALC';
+ }
+
+ events.push({
+ htmlText,
+ startDate: meeting.date.getTime() + SORTING_ORDER.VISIT_REPORTS,
+ fulfilledDate: null,
+ isFulfilled: true,
+ });
+ });
}
private async addStatusEvents(
@@ -388,7 +412,7 @@ export class ApplicationTimelineService {
![
SUBMISSION_STATUS.IN_REVIEW_BY_ALC,
SUBMISSION_STATUS.ALC_DECISION,
- ].includes(status.statusType.code),
+ ].includes(status.statusType.code),
);
for (const status of statusesToInclude) {
if (status.effectiveDate) {