-
- This section will update after the application is submitted to the ALC.
-
-
- Application not subject to Agricultural Land Commission review.
-
-
diff --git a/portal-frontend/src/app/features/public/application/alc-review/alc-review.component.spec.ts b/portal-frontend/src/app/features/public/application/alc-review/alc-review.component.spec.ts
index 62a72d72d0..3a515a8c48 100644
--- a/portal-frontend/src/app/features/public/application/alc-review/alc-review.component.spec.ts
+++ b/portal-frontend/src/app/features/public/application/alc-review/alc-review.component.spec.ts
@@ -1,28 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { createMock, DeepMocked } from '@golevelup/ts-jest';
-import { ApplicationSubmissionReviewService } from '../../../../services/application-submission-review/application-submission-review.service';
-import { AlcReviewComponent } from './alc-review.component';
+import { PublicAlcReviewComponent } from './alc-review.component';
-describe('AlcsReviewComponent', () => {
- let component: AlcReviewComponent;
- let fixture: ComponentFixture
;
- let mockAppReviewService: DeepMocked;
+describe('PublicAlcReviewComponent', () => {
+ let component: PublicAlcReviewComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
- mockAppReviewService = createMock();
-
await TestBed.configureTestingModule({
- providers: [
- {
- provide: ApplicationSubmissionReviewService,
- useValue: mockAppReviewService,
- },
- ],
- declarations: [AlcReviewComponent],
+ providers: [],
+ declarations: [PublicAlcReviewComponent],
}).compileComponents();
- fixture = TestBed.createComponent(AlcReviewComponent);
+ fixture = TestBed.createComponent(PublicAlcReviewComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/portal-frontend/src/app/features/public/application/alc-review/alc-review.component.ts b/portal-frontend/src/app/features/public/application/alc-review/alc-review.component.ts
index ced2da29b9..e1c8c5b643 100644
--- a/portal-frontend/src/app/features/public/application/alc-review/alc-review.component.ts
+++ b/portal-frontend/src/app/features/public/application/alc-review/alc-review.component.ts
@@ -1,47 +1,19 @@
-import { Component, Input, OnDestroy, OnInit } from '@angular/core';
-import { Router } from '@angular/router';
-import { BehaviorSubject, Subject, takeUntil } from 'rxjs';
-import { ApplicationDocumentDto } from '../../../../services/application-document/application-document.dto';
-import { ApplicationSubmissionReviewService } from '../../../../services/application-submission-review/application-submission-review.service';
-import {
- SUBMISSION_STATUS,
- ApplicationSubmissionDetailedDto,
-} from '../../../../services/application-submission/application-submission.dto';
+import { Component, Input } from '@angular/core';
+import { ApplicationPortalDecisionDto } from '../../../../services/application-decision/application-decision.dto';
+import { SUBMISSION_STATUS } from '../../../../services/application-submission/application-submission.dto';
+import { PublicApplicationSubmissionDto, PublicDocumentDto } from '../../../../services/public/public.dto';
@Component({
- selector: 'app-alc-review',
+ selector: 'app-public-alc-review',
templateUrl: './alc-review.component.html',
styleUrls: ['./alc-review.component.scss'],
})
-export class AlcReviewComponent implements OnInit, OnDestroy {
- private $destroy = new Subject();
+export class PublicAlcReviewComponent {
+ @Input() applicationSubmission!: PublicApplicationSubmissionDto;
+ @Input() applicationDocuments!: PublicDocumentDto[];
+ @Input() applicationDecisions!: ApplicationPortalDecisionDto[];
- @Input() $application = new BehaviorSubject(undefined);
- @Input() $applicationDocuments = new BehaviorSubject([]);
-
- application: ApplicationSubmissionDetailedDto | undefined;
SUBMISSION_STATUS = SUBMISSION_STATUS;
- constructor(private applicationReviewService: ApplicationSubmissionReviewService, private router: Router) {}
-
- ngOnInit(): void {
- this.$application.pipe(takeUntil(this.$destroy)).subscribe((application) => {
- this.application = application;
- });
- }
-
- ngOnDestroy(): void {
- this.$destroy.next();
- this.$destroy.complete();
- }
-
- async onReview(fileId: string) {
- if (this.application?.status.code === SUBMISSION_STATUS.SUBMITTED_TO_LG) {
- const review = await this.applicationReviewService.startReview(fileId);
- if (!review) {
- return;
- }
- }
- await this.router.navigateByUrl(`application/${fileId}/review`);
- }
+ constructor() {}
}
diff --git a/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.html b/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.html
index ee4d949dba..7657271cf1 100644
--- a/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.html
+++ b/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.html
@@ -1,5 +1,5 @@
-
-
Decision #{{ decisions.length - index }}
+
+
Decision #{{ applicationDecisions.length - index }}
Decision Date
@@ -15,7 +15,6 @@
Decision #{{ decisions.length - index }}
Decision Outcome
{{ decision.outcome.label }} {{ decision.isSubjectToConditions ? '- Subject to Conditions' : '' }}
-
Decision Document
diff --git a/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.spec.ts b/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.spec.ts
index f56a7194b9..ce78e37c19 100644
--- a/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.spec.ts
+++ b/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.spec.ts
@@ -2,18 +2,18 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { createMock } from '@golevelup/ts-jest';
import { ApplicationDecisionService } from '../../../../../services/application-decision/application-decision.service';
-import { DecisionsComponent } from './decisions.component';
+import { PublicDecisionsComponent } from './decisions.component';
-describe('DecisionsComponent', () => {
- let component: DecisionsComponent;
- let fixture: ComponentFixture
;
+describe('PublicDecisionsComponent', () => {
+ let component: PublicDecisionsComponent;
+ let fixture: ComponentFixture;
let mockDecisionService: ApplicationDecisionService;
beforeEach(async () => {
mockDecisionService = createMock();
await TestBed.configureTestingModule({
- declarations: [DecisionsComponent],
+ declarations: [PublicDecisionsComponent],
providers: [
{
provide: ApplicationDecisionService,
@@ -22,7 +22,7 @@ describe('DecisionsComponent', () => {
],
}).compileComponents();
- fixture = TestBed.createComponent(DecisionsComponent);
+ fixture = TestBed.createComponent(PublicDecisionsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.ts b/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.ts
index 1280cc0118..ebf506417a 100644
--- a/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.ts
+++ b/portal-frontend/src/app/features/public/application/alc-review/decisions/decisions.component.ts
@@ -3,37 +3,19 @@ import { ApplicationPortalDecisionDto } from '../../../../../services/applicatio
import { ApplicationDecisionService } from '../../../../../services/application-decision/application-decision.service';
@Component({
- selector: 'app-decisions[fileNumber]',
+ selector: 'app-public-decisions',
templateUrl: './decisions.component.html',
styleUrls: ['./decisions.component.scss'],
})
-export class DecisionsComponent implements OnInit, OnChanges {
- @Input() fileNumber = '';
- decisions: ApplicationPortalDecisionDto[] = [];
+export class PublicDecisionsComponent {
+ @Input() applicationDecisions: ApplicationPortalDecisionDto[] = [];
constructor(private decisionService: ApplicationDecisionService) {}
- ngOnInit(): void {
- this.loadDecisions();
- }
-
- ngOnChanges(changes: SimpleChanges): void {
- this.loadDecisions();
- }
-
async openFile(uuid: string) {
const res = await this.decisionService.openFile(uuid);
if (res) {
window.open(res.url, '_blank');
}
}
-
- private async loadDecisions() {
- if (this.fileNumber) {
- const decisions = await this.decisionService.getByFileId(this.fileNumber);
- if (decisions) {
- this.decisions = decisions;
- }
- }
- }
}
diff --git a/portal-frontend/src/app/features/public/application/alc-review/submission-documents/submission-documents.component.spec.ts b/portal-frontend/src/app/features/public/application/alc-review/submission-documents/submission-documents.component.spec.ts
index 09eb1292d3..a2f54298d3 100644
--- a/portal-frontend/src/app/features/public/application/alc-review/submission-documents/submission-documents.component.spec.ts
+++ b/portal-frontend/src/app/features/public/application/alc-review/submission-documents/submission-documents.component.spec.ts
@@ -1,30 +1,30 @@
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { createMock, DeepMocked } from '@golevelup/ts-jest';
-import { ApplicationDocumentService } from '../../../../../services/application-document/application-document.service';
+import { PublicService } from '../../../../../services/public/public.service';
-import { SubmissionDocumentsComponent } from './submission-documents.component';
+import { PublicSubmissionDocumentsComponent } from './submission-documents.component';
-describe('SubmissionDocumentsComponent', () => {
- let component: SubmissionDocumentsComponent;
- let fixture: ComponentFixture;
- let mockAppDocService: DeepMocked;
+describe('PublicSubmissionDocumentsComponent', () => {
+ let component: PublicSubmissionDocumentsComponent;
+ let fixture: ComponentFixture;
+ let mockPublicService: DeepMocked;
beforeEach(async () => {
- mockAppDocService = createMock();
+ mockPublicService = createMock();
await TestBed.configureTestingModule({
- declarations: [SubmissionDocumentsComponent],
+ declarations: [PublicSubmissionDocumentsComponent],
providers: [
{
- provide: ApplicationDocumentService,
- useValue: mockAppDocService,
+ provide: PublicService,
+ useValue: mockPublicService,
},
],
schemas: [NO_ERRORS_SCHEMA],
}).compileComponents();
- fixture = TestBed.createComponent(SubmissionDocumentsComponent);
+ fixture = TestBed.createComponent(PublicSubmissionDocumentsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/portal-frontend/src/app/features/public/application/alc-review/submission-documents/submission-documents.component.ts b/portal-frontend/src/app/features/public/application/alc-review/submission-documents/submission-documents.component.ts
index 027fbdbfea..0dc940477e 100644
--- a/portal-frontend/src/app/features/public/application/alc-review/submission-documents/submission-documents.component.ts
+++ b/portal-frontend/src/app/features/public/application/alc-review/submission-documents/submission-documents.component.ts
@@ -1,43 +1,42 @@
import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';
import { MatSort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
-import { BehaviorSubject, Subject, takeUntil } from 'rxjs';
-import { ApplicationDocumentDto } from '../../../../../services/application-document/application-document.dto';
-import { ApplicationDocumentService } from '../../../../../services/application-document/application-document.service';
+import { Subject } from 'rxjs';
+import { PublicApplicationSubmissionDto, PublicDocumentDto } from '../../../../../services/public/public.dto';
+import { PublicService } from '../../../../../services/public/public.service';
@Component({
selector: 'app-submission-documents',
templateUrl: './submission-documents.component.html',
styleUrls: ['./submission-documents.component.scss'],
})
-export class SubmissionDocumentsComponent implements OnInit, OnDestroy {
+export class PublicSubmissionDocumentsComponent implements OnInit, OnDestroy {
private $destroy = new Subject();
displayedColumns: string[] = ['type', 'fileName', 'source', 'uploadedAt', 'actions'];
- documents: ApplicationDocumentDto[] = [];
+ documents: PublicDocumentDto[] = [];
- @Input() $applicationDocuments = new BehaviorSubject([]);
+ @Input() applicationDocuments!: PublicDocumentDto[];
+ @Input() applicationSubmission!: PublicApplicationSubmissionDto;
@ViewChild(MatSort) sort!: MatSort;
- dataSource: MatTableDataSource = new MatTableDataSource();
+ dataSource: MatTableDataSource = new MatTableDataSource();
- constructor(private applicationDocumentService: ApplicationDocumentService) {}
+ constructor(private publicService: PublicService) {}
ngOnInit(): void {
- this.$applicationDocuments.pipe(takeUntil(this.$destroy)).subscribe((documents) => {
- this.dataSource = new MatTableDataSource(documents);
- });
+ this.dataSource = new MatTableDataSource(this.applicationDocuments);
}
async openFile(uuid: string) {
- const res = await this.applicationDocumentService.openFile(uuid);
+ const res = await this.publicService.getApplicationFileUrl(this.applicationSubmission.fileNumber, uuid);
if (res) {
window.open(res.url, '_blank');
}
}
async downloadFile(uuid: string) {
- const res = await this.applicationDocumentService.downloadFile(uuid);
+ const res = await this.publicService.getApplicationFileUrl(this.applicationSubmission.fileNumber, uuid);
if (res) {
const downloadLink = document.createElement('a');
downloadLink.href = res.url;
diff --git a/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.html b/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.html
index 2ae5a57c31..0838d02ce8 100644
--- a/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.html
+++ b/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.html
@@ -1,70 +1,11 @@
-
+
-
- info This section will update after the application is submitted.
-
-
+
info Application not subject to Local/First Nation Government review.
-
- info Pending Local/First Nation Government review.
-
-
-
+
Contact Information
@@ -103,32 +44,17 @@
Contact Information
-
-
Phone Number
-
- {{ applicationReview.phoneNumber }}
-
-
-
-
-
Email
-
- {{ applicationReview.email }}
-
-
-
-
+
Plans & Bylaws: OCP
-
Is the application parcel(s) subject to a Local Government OCP designation?
+
+ Is the applicationSubmission parcel(s) subject to a Local Government OCP designation?
+
-
{{
- applicationReview.isOCPDesignation ? 'Yes' : 'No'
- }}
-
+ {{ applicationReview.isOCPDesignation ? 'Yes' : 'No' }}
@@ -156,16 +82,15 @@
Plans & Bylaws: OCP
-
+
Plans & Bylaws: Zoning
-
Is the application parcel(s) subject to a Local Government zoning designation?
+
+ Is the applicationSubmission parcel(s) subject to a Local Government zoning designation?
+
-
{{
- applicationReview.isSubjectToZoning ? 'Yes' : 'No'
- }}
-
+ {{ applicationReview.isSubjectToZoning ? 'Yes' : 'No' }}
@@ -203,81 +128,27 @@
Plans & Bylaws: Zoning
Resolution
-
- Please complete both Step 2 Plans & Bylaws: OCP and Step 3 Plans & Bylaws: Zoning to continue with this step.
-
-
- By indicating that the parcel(s) is not subject to Local Government OCP or Zoning,
-
no authorizing resolution is required as per S. 25 (3) or S. 29 (4) of the
ALC Act .
- The only option available is to forward this application on to the ALC.
+
+ Parcels not subject to OCP or Zoning do not require local government authorization to be forwarded to ALC.
-
+
Resolution for Application to Proceed to the ALC
-
{{
- applicationReview.isAuthorized ? 'Authorized' : 'Refuse to Authorize'
- }}
-
+
{{ applicationReview.isAuthorized ? 'Authorized' : 'Refuse to Authorize' }}
-
+ 0">
Attachments
-
-
- Please complete Step 2 Plans & Bylaws: OCP, Step 3 Plans & Bylaws: Zoning and Step 4 Resolution to continue
- with this step.
-
-
-
-
+
+
-
-
- Staff Report (optional)
-
-
-
-
-
-
Other Attachments (optional):
-
diff --git a/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.spec.ts b/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.spec.ts
index d1556cc200..a14d258152 100644
--- a/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.spec.ts
+++ b/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.spec.ts
@@ -1,52 +1,31 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { createMock, DeepMocked } from '@golevelup/ts-jest';
-import { BehaviorSubject } from 'rxjs';
-import { ApplicationDocumentDto } from '../../../../services/application-document/application-document.dto';
-import { ApplicationDocumentService } from '../../../../services/application-document/application-document.service';
-import { ApplicationSubmissionReviewDto } from '../../../../services/application-submission-review/application-submission-review.dto';
-import { ApplicationSubmissionReviewService } from '../../../../services/application-submission-review/application-submission-review.service';
-import { ApplicationSubmissionDetailedDto } from '../../../../services/application-submission/application-submission.dto';
-import { PdfGenerationService } from '../../../../services/pdf-generation/pdf-generation.service';
+import { PublicService } from '../../../../services/public/public.service';
-import { LfngReviewComponent } from './lfng-review.component';
+import { PublicLfngReviewComponent } from './lfng-review.component';
-describe('LfngReviewComponent', () => {
- let component: LfngReviewComponent;
- let fixture: ComponentFixture
;
+describe('PublicLfngReviewComponent', () => {
+ let component: PublicLfngReviewComponent;
+ let fixture: ComponentFixture;
- let mockAppSubReviewService: DeepMocked;
- let mockPdfGenerationService: DeepMocked;
- let mockAppDocumentService: DeepMocked;
+ let mockPublicService: DeepMocked;
beforeEach(async () => {
- mockAppSubReviewService = createMock();
- mockPdfGenerationService = createMock();
- mockAppDocumentService = createMock();
-
- mockAppSubReviewService.$applicationReview = new BehaviorSubject(
- undefined
- );
+ mockPublicService = createMock();
await TestBed.configureTestingModule({
providers: [
{
- provide: ApplicationSubmissionReviewService,
- useValue: mockAppSubReviewService,
- },
- {
- provide: PdfGenerationService,
- useValue: mockPdfGenerationService,
- },
- {
- provide: ApplicationDocumentService,
- useValue: mockAppDocumentService,
+ provide: PublicService,
+ useValue: mockPublicService,
},
],
- declarations: [LfngReviewComponent],
+ declarations: [PublicLfngReviewComponent],
}).compileComponents();
- fixture = TestBed.createComponent(LfngReviewComponent);
+ fixture = TestBed.createComponent(PublicLfngReviewComponent);
component = fixture.componentInstance;
+ component.applicationDocuments = [];
fixture.detectChanges();
});
diff --git a/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.ts b/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.ts
index e80935380e..e21492882c 100644
--- a/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.ts
+++ b/portal-frontend/src/app/features/public/application/lfng-review/lfng-review.component.ts
@@ -1,131 +1,38 @@
-import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';
-import { Router } from '@angular/router';
-import { BehaviorSubject, Subject, takeUntil } from 'rxjs';
-import { ApplicationDocumentDto } from '../../../../services/application-document/application-document.dto';
-import { ApplicationDocumentService } from '../../../../services/application-document/application-document.service';
-import { ApplicationSubmissionReviewDto } from '../../../../services/application-submission-review/application-submission-review.dto';
-import { ApplicationSubmissionReviewService } from '../../../../services/application-submission-review/application-submission-review.service';
+import { Component, Input, OnInit } from '@angular/core';
+import { SUBMISSION_STATUS } from '../../../../services/application-submission/application-submission.dto';
import {
- ApplicationSubmissionDetailedDto,
- SUBMISSION_STATUS,
-} from '../../../../services/application-submission/application-submission.dto';
-import { PdfGenerationService } from '../../../../services/pdf-generation/pdf-generation.service';
-import { DOCUMENT_SOURCE, DOCUMENT_TYPE } from '../../../../shared/dto/document.dto';
+ PublicApplicationSubmissionDto,
+ PublicApplicationSubmissionReviewDto,
+ PublicDocumentDto,
+} from '../../../../services/public/public.dto';
+import { PublicService } from '../../../../services/public/public.service';
+import { DOCUMENT_TYPE } from '../../../../shared/dto/document.dto';
@Component({
- selector: 'app-lfng-review',
+ selector: 'app-public-lfng-review',
templateUrl: './lfng-review.component.html',
styleUrls: ['./lfng-review.component.scss'],
})
-export class LfngReviewComponent implements OnInit, OnDestroy {
- private $destroy = new Subject();
+export class PublicLfngReviewComponent implements OnInit {
+ @Input() applicationSubmission!: PublicApplicationSubmissionDto;
+ @Input() applicationDocuments!: PublicDocumentDto[];
+ @Input() applicationReview: PublicApplicationSubmissionReviewDto | undefined;
- @Input() $application = new BehaviorSubject(undefined);
- @Input() $applicationDocuments = new BehaviorSubject([]);
-
- @Output() onCancel = new EventEmitter();
-
- application: ApplicationSubmissionDetailedDto | undefined;
- applicationReview: ApplicationSubmissionReviewDto | undefined;
SUBMISSION_STATUS = SUBMISSION_STATUS;
- staffReport: ApplicationDocumentDto[] = [];
- resolutionDocument: ApplicationDocumentDto[] = [];
- governmentOtherAttachments: ApplicationDocumentDto[] = [];
- hasCompletedStepsBeforeResolution = false;
- hasCompletedStepsBeforeDocuments = false;
- submittedToAlcStatus = false;
+ resolutionDocument: PublicDocumentDto[] = [];
- constructor(
- private applicationReviewService: ApplicationSubmissionReviewService,
- private pdfGenerationService: PdfGenerationService,
- private applicationDocumentService: ApplicationDocumentService,
- private router: Router
- ) {}
+ constructor(private publicService: PublicService) {}
ngOnInit(): void {
- this.applicationReviewService.$applicationReview.pipe(takeUntil(this.$destroy)).subscribe((appReview) => {
- if (appReview) {
- this.applicationReview = appReview;
-
- this.hasCompletedStepsBeforeResolution =
- appReview.isFirstNationGovernment ||
- (!appReview.isFirstNationGovernment &&
- appReview.isOCPDesignation !== null &&
- appReview.isSubjectToZoning !== null &&
- (appReview.isOCPDesignation === true || appReview.isSubjectToZoning === true));
-
- this.hasCompletedStepsBeforeDocuments =
- appReview.isFirstNationGovernment ||
- (appReview.isAuthorized !== null &&
- appReview.isOCPDesignation !== null &&
- appReview.isSubjectToZoning !== null) ||
- (appReview.isAuthorized === null &&
- appReview.isOCPDesignation === false &&
- appReview.isSubjectToZoning === false);
- }
- });
-
- this.$application.pipe(takeUntil(this.$destroy)).subscribe((application) => {
- this.application = application;
- this.submittedToAlcStatus = !!this.application?.submissionStatuses.find(
- (s) => s.statusTypeCode === SUBMISSION_STATUS.SUBMITTED_TO_ALC && !!s.effectiveDate
- );
- this.loadReview();
- });
-
- this.$applicationDocuments.subscribe((documents) => {
- this.staffReport = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.STAFF_REPORT);
- this.resolutionDocument = documents.filter(
- (document) => document.type?.code === DOCUMENT_TYPE.RESOLUTION_DOCUMENT
- );
- this.governmentOtherAttachments = documents.filter(
- (document) => document.type?.code === DOCUMENT_TYPE.OTHER && document.source === DOCUMENT_SOURCE.LFNG
- );
- });
- }
-
- async onDownloadReviewPdf(fileNumber: string | undefined) {
- if (fileNumber) {
- await this.pdfGenerationService.generateReview(fileNumber);
- }
- }
-
- async loadReview() {
- if (
- this.application &&
- this.application.typeCode !== 'TURP' &&
- (this.submittedToAlcStatus ||
- (this.application.status.code === SUBMISSION_STATUS.IN_REVIEW_BY_LG && this.application.canReview))
- ) {
- await this.applicationReviewService.getByFileId(this.application.fileNumber);
- } else {
- this.applicationReview = undefined;
- }
+ this.resolutionDocument = this.applicationDocuments.filter(
+ (document) => document.type?.code === DOCUMENT_TYPE.RESOLUTION_DOCUMENT
+ );
}
async openFile(uuid: string) {
- const res = await this.applicationDocumentService.openFile(uuid);
+ const res = await this.publicService.getApplicationFileUrl(this.applicationSubmission.fileNumber, uuid);
if (res) {
window.open(res.url, '_blank');
}
}
-
- async onReview(fileId: string) {
- if (this.application?.status.code === SUBMISSION_STATUS.SUBMITTED_TO_LG) {
- const review = await this.applicationReviewService.startReview(fileId);
- if (!review) {
- return;
- }
- }
- await this.router.navigateByUrl(`application/${fileId}/review`);
- }
-
- onCancelClicked(fileNumber: string) {
- this.onCancel.emit(fileNumber);
- }
-
- ngOnDestroy(): void {
- this.$destroy.next();
- this.$destroy.complete();
- }
}
diff --git a/portal-frontend/src/app/features/public/application/public-application.component.html b/portal-frontend/src/app/features/public/application/public-application.component.html
index 8bf92b73ce..addc35e61c 100644
--- a/portal-frontend/src/app/features/public/application/public-application.component.html
+++ b/portal-frontend/src/app/features/public/application/public-application.component.html
@@ -28,8 +28,9 @@ Application ID: {{ submission.fileNumber }}
-
- chevron_left Return to Search Results
+
+ chevron_left
+ Return to Search Results
@@ -50,10 +51,23 @@
Applicant Submission
- //TODO
+
- //TODO
+
diff --git a/portal-frontend/src/app/features/public/application/public-application.component.ts b/portal-frontend/src/app/features/public/application/public-application.component.ts
index f3700a1941..84cba66c20 100644
--- a/portal-frontend/src/app/features/public/application/public-application.component.ts
+++ b/portal-frontend/src/app/features/public/application/public-application.component.ts
@@ -1,10 +1,14 @@
import { Component, OnDestroy, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Subject, takeUntil } from 'rxjs';
-import { ApplicationDocumentDto } from '../../../services/application-document/application-document.dto';
-import { ApplicationParcelDto } from '../../../services/application-parcel/application-parcel.dto';
+import { ApplicationPortalDecisionDto } from '../../../services/application-decision/application-decision.dto';
import { SUBMISSION_STATUS } from '../../../services/application-submission/application-submission.dto';
-import { PublicApplicationSubmissionDto } from '../../../services/public/public.dto';
+import {
+ PublicApplicationParcelDto,
+ PublicApplicationSubmissionDto,
+ PublicApplicationSubmissionReviewDto,
+ PublicDocumentDto,
+} from '../../../services/public/public.dto';
import { PublicService } from '../../../services/public/public.service';
@Component({
@@ -18,8 +22,10 @@ export class PublicApplicationComponent implements OnInit, OnDestroy {
SUBMISSION_STATUS = SUBMISSION_STATUS;
submission: PublicApplicationSubmissionDto | undefined;
- documents: ApplicationDocumentDto[] = [];
- parcels: ApplicationParcelDto[] = [];
+ review: PublicApplicationSubmissionReviewDto | undefined;
+ documents: PublicDocumentDto[] = [];
+ parcels: PublicApplicationParcelDto[] = [];
+ decisions: ApplicationPortalDecisionDto[] = [];
constructor(private publicService: PublicService, private route: ActivatedRoute) {}
@@ -35,11 +41,13 @@ export class PublicApplicationComponent implements OnInit, OnDestroy {
private async loadApplication(fileId: string) {
const res = await this.publicService.getApplication(fileId);
if (res) {
- const { submission, documents, parcels } = res;
+ const { submission, documents, parcels, review, decisions } = res;
this.submission = submission;
this.documents = documents;
this.parcels = parcels;
+ this.review = review;
+ this.decisions = decisions;
}
}
diff --git a/portal-frontend/src/app/features/public/application/submission/excl-details/excl-details.component.ts b/portal-frontend/src/app/features/public/application/submission/excl-details/excl-details.component.ts
index cc7b23fc89..43a3f4c95e 100644
--- a/portal-frontend/src/app/features/public/application/submission/excl-details/excl-details.component.ts
+++ b/portal-frontend/src/app/features/public/application/submission/excl-details/excl-details.component.ts
@@ -1,8 +1,6 @@
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
-import { ApplicationDocumentDto } from '../../../../../services/application-document/application-document.dto';
-import { ApplicationDocumentService } from '../../../../../services/application-document/application-document.service';
-import { PublicApplicationSubmissionDto } from '../../../../../services/public/public.dto';
+import { PublicApplicationSubmissionDto, PublicDocumentDto } from '../../../../../services/public/public.dto';
import { PublicService } from '../../../../../services/public/public.service';
import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
@@ -14,15 +12,15 @@ import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
export class ExclDetailsComponent {
@Input() applicationSubmission!: PublicApplicationSubmissionDto;
- @Input() set applicationDocuments(documents: ApplicationDocumentDto[]) {
+ @Input() set applicationDocuments(documents: PublicDocumentDto[]) {
this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP);
this.reportOfPublicHearing = documents.filter(
(document) => document.type?.code === DOCUMENT_TYPE.REPORT_OF_PUBLIC_HEARING
);
}
- proposalMap: ApplicationDocumentDto[] = [];
- reportOfPublicHearing: ApplicationDocumentDto[] = [];
+ proposalMap: PublicDocumentDto[] = [];
+ reportOfPublicHearing: PublicDocumentDto[] = [];
constructor(private router: Router, private publicService: PublicService) {}
diff --git a/portal-frontend/src/app/features/public/application/submission/incl-details/incl-details.component.ts b/portal-frontend/src/app/features/public/application/submission/incl-details/incl-details.component.ts
index 53e325f10f..e08695999c 100644
--- a/portal-frontend/src/app/features/public/application/submission/incl-details/incl-details.component.ts
+++ b/portal-frontend/src/app/features/public/application/submission/incl-details/incl-details.component.ts
@@ -1,8 +1,6 @@
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
-import { ApplicationDocumentDto } from '../../../../../services/application-document/application-document.dto';
-import { ApplicationDocumentService } from '../../../../../services/application-document/application-document.service';
-import { PublicApplicationSubmissionDto } from '../../../../../services/public/public.dto';
+import { PublicApplicationSubmissionDto, PublicDocumentDto } from '../../../../../services/public/public.dto';
import { PublicService } from '../../../../../services/public/public.service';
import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
@@ -12,12 +10,12 @@ import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
styleUrls: ['./incl-details.component.scss'],
})
export class InclDetailsComponent {
- proposalMap: ApplicationDocumentDto[] = [];
- reportOfPublicHearing: ApplicationDocumentDto[] = [];
+ proposalMap: PublicDocumentDto[] = [];
+ reportOfPublicHearing: PublicDocumentDto[] = [];
@Input() applicationSubmission!: PublicApplicationSubmissionDto;
- @Input() set applicationDocuments(documents: ApplicationDocumentDto[]) {
+ @Input() set applicationDocuments(documents: PublicDocumentDto[]) {
this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP);
this.reportOfPublicHearing = documents.filter(
(document) => document.type?.code === DOCUMENT_TYPE.REPORT_OF_PUBLIC_HEARING
diff --git a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.ts b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.ts
index e593aff636..f4f702d73c 100644
--- a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.ts
+++ b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.ts
@@ -1,8 +1,6 @@
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
-import { ApplicationDocumentDto } from '../../../../../services/application-document/application-document.dto';
-import { ApplicationDocumentService } from '../../../../../services/application-document/application-document.service';
-import { PublicApplicationSubmissionDto } from '../../../../../services/public/public.dto';
+import { PublicApplicationSubmissionDto, PublicDocumentDto } from '../../../../../services/public/public.dto';
import { PublicService } from '../../../../../services/public/public.service';
import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
@@ -12,10 +10,10 @@ import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
styleUrls: ['./naru-details.component.scss'],
})
export class NaruDetailsComponent {
- proposalMap: ApplicationDocumentDto[] = [];
+ proposalMap: PublicDocumentDto[] = [];
@Input() applicationSubmission!: PublicApplicationSubmissionDto;
- @Input() set applicationDocuments(documents: ApplicationDocumentDto[]) {
+ @Input() set applicationDocuments(documents: PublicDocumentDto[]) {
this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP);
}
diff --git a/portal-frontend/src/app/features/public/application/submission/nfu-details/nfu-details.component.ts b/portal-frontend/src/app/features/public/application/submission/nfu-details/nfu-details.component.ts
index d0642d7090..27ff3c3d23 100644
--- a/portal-frontend/src/app/features/public/application/submission/nfu-details/nfu-details.component.ts
+++ b/portal-frontend/src/app/features/public/application/submission/nfu-details/nfu-details.component.ts
@@ -1,8 +1,6 @@
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
-import { ApplicationDocumentDto } from '../../../../../services/application-document/application-document.dto';
-import { ApplicationDocumentService } from '../../../../../services/application-document/application-document.service';
-import { PublicApplicationSubmissionDto } from '../../../../../services/public/public.dto';
+import { PublicApplicationSubmissionDto, PublicDocumentDto } from '../../../../../services/public/public.dto';
import { PublicService } from '../../../../../services/public/public.service';
import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
@@ -14,11 +12,11 @@ import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
export class NfuDetailsComponent {
@Input() applicationSubmission!: PublicApplicationSubmissionDto;
- @Input() set applicationDocuments(documents: ApplicationDocumentDto[]) {
+ @Input() set applicationDocuments(documents: PublicDocumentDto[]) {
this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP);
}
- proposalMap: ApplicationDocumentDto[] = [];
+ proposalMap: PublicDocumentDto[] = [];
constructor(private router: Router, private publicService: PublicService) {}
diff --git a/portal-frontend/src/app/features/public/application/submission/parcel/parcel.component.scss b/portal-frontend/src/app/features/public/application/submission/parcel/parcel.component.scss
index a706f903ba..81d88321d1 100644
--- a/portal-frontend/src/app/features/public/application/submission/parcel/parcel.component.scss
+++ b/portal-frontend/src/app/features/public/application/submission/parcel/parcel.component.scss
@@ -18,20 +18,6 @@
.full-width {
grid-column: 1/3;
}
-
- .edit-button {
- grid-column: 1/3;
- }
-
- @media screen and (min-width: $tabletBreakpoint) {
- .full-width {
- grid-column: 1/5;
- }
-
- .edit-button {
- grid-column: 1/5;
- }
- }
}
.crown-land {
diff --git a/portal-frontend/src/app/features/public/application/submission/parcel/parcel.component.ts b/portal-frontend/src/app/features/public/application/submission/parcel/parcel.component.ts
index 0a4a1d2da5..9e17cad331 100644
--- a/portal-frontend/src/app/features/public/application/submission/parcel/parcel.component.ts
+++ b/portal-frontend/src/app/features/public/application/submission/parcel/parcel.component.ts
@@ -1,10 +1,7 @@
import { Component, Input } from '@angular/core';
import { Subject } from 'rxjs';
-import {
- ApplicationParcelDto,
- PARCEL_OWNERSHIP_TYPE,
-} from '../../../../../services/application-parcel/application-parcel.dto';
-import { PublicApplicationSubmissionDto } from '../../../../../services/public/public.dto';
+import { PARCEL_OWNERSHIP_TYPE } from '../../../../../services/application-parcel/application-parcel.dto';
+import { PublicApplicationParcelDto, PublicApplicationSubmissionDto } from '../../../../../services/public/public.dto';
@Component({
selector: 'app-parcel',
@@ -15,7 +12,7 @@ export class ParcelComponent {
$destroy = new Subject();
@Input() applicationSubmission!: PublicApplicationSubmissionDto;
- @Input() parcels: ApplicationParcelDto[] = [];
+ @Input() parcels: PublicApplicationParcelDto[] = [];
PARCEL_OWNERSHIP_TYPES = PARCEL_OWNERSHIP_TYPE;
pageTitle: string = 'Identify Parcel(s) Under Application';
diff --git a/portal-frontend/src/app/features/public/application/submission/pfrs-details/pfrs-details.component.ts b/portal-frontend/src/app/features/public/application/submission/pfrs-details/pfrs-details.component.ts
index da1bd6a17b..f529357962 100644
--- a/portal-frontend/src/app/features/public/application/submission/pfrs-details/pfrs-details.component.ts
+++ b/portal-frontend/src/app/features/public/application/submission/pfrs-details/pfrs-details.component.ts
@@ -1,11 +1,8 @@
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
-import { ApplicationDocumentDto } from '../../../../../services/application-document/application-document.dto';
-import { ApplicationDocumentService } from '../../../../../services/application-document/application-document.service';
-import { PublicApplicationSubmissionDto } from '../../../../../services/public/public.dto';
+import { PublicApplicationSubmissionDto, PublicDocumentDto } from '../../../../../services/public/public.dto';
import { PublicService } from '../../../../../services/public/public.service';
import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
-import { PublicApplicationComponent } from '../../public-application.component';
@Component({
selector: 'app-pfrs-details[applicationSubmission]',
@@ -15,13 +12,13 @@ import { PublicApplicationComponent } from '../../public-application.component';
export class PfrsDetailsComponent {
@Input() applicationSubmission!: PublicApplicationSubmissionDto;
- @Input() set applicationDocuments(documents: ApplicationDocumentDto[]) {
+ @Input() set applicationDocuments(documents: PublicDocumentDto[]) {
this.crossSections = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.CROSS_SECTIONS);
this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP);
}
- crossSections: ApplicationDocumentDto[] = [];
- proposalMap: ApplicationDocumentDto[] = [];
+ crossSections: PublicDocumentDto[] = [];
+ proposalMap: PublicDocumentDto[] = [];
constructor(private router: Router, private publicService: PublicService) {}
diff --git a/portal-frontend/src/app/features/public/application/submission/pofo-details/pofo-details.component.ts b/portal-frontend/src/app/features/public/application/submission/pofo-details/pofo-details.component.ts
index 11c3f8cef4..9b48d576c5 100644
--- a/portal-frontend/src/app/features/public/application/submission/pofo-details/pofo-details.component.ts
+++ b/portal-frontend/src/app/features/public/application/submission/pofo-details/pofo-details.component.ts
@@ -1,8 +1,6 @@
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
-import { ApplicationDocumentDto } from '../../../../../services/application-document/application-document.dto';
-import { ApplicationDocumentService } from '../../../../../services/application-document/application-document.service';
-import { PublicApplicationSubmissionDto } from '../../../../../services/public/public.dto';
+import { PublicApplicationSubmissionDto, PublicDocumentDto } from '../../../../../services/public/public.dto';
import { PublicService } from '../../../../../services/public/public.service';
import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
@@ -14,13 +12,13 @@ import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
export class PofoDetailsComponent {
@Input() applicationSubmission!: PublicApplicationSubmissionDto;
- @Input() set applicationDocuments(documents: ApplicationDocumentDto[]) {
+ @Input() set applicationDocuments(documents: PublicDocumentDto[]) {
this.crossSections = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.CROSS_SECTIONS);
this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP);
}
- crossSections: ApplicationDocumentDto[] = [];
- proposalMap: ApplicationDocumentDto[] = [];
+ crossSections: PublicDocumentDto[] = [];
+ proposalMap: PublicDocumentDto[] = [];
constructor(private router: Router, private publicService: PublicService) {}
diff --git a/portal-frontend/src/app/features/public/application/submission/roso-details/roso-details.component.ts b/portal-frontend/src/app/features/public/application/submission/roso-details/roso-details.component.ts
index 9ab2fc15d9..44bb4f91d5 100644
--- a/portal-frontend/src/app/features/public/application/submission/roso-details/roso-details.component.ts
+++ b/portal-frontend/src/app/features/public/application/submission/roso-details/roso-details.component.ts
@@ -1,8 +1,6 @@
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
-import { ApplicationDocumentDto } from '../../../../../services/application-document/application-document.dto';
-import { ApplicationDocumentService } from '../../../../../services/application-document/application-document.service';
-import { PublicApplicationSubmissionDto } from '../../../../../services/public/public.dto';
+import { PublicApplicationSubmissionDto, PublicDocumentDto } from '../../../../../services/public/public.dto';
import { PublicService } from '../../../../../services/public/public.service';
import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
@@ -14,13 +12,13 @@ import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
export class RosoDetailsComponent {
@Input() applicationSubmission!: PublicApplicationSubmissionDto;
- @Input() set applicationDocuments(documents: ApplicationDocumentDto[]) {
+ @Input() set applicationDocuments(documents: PublicDocumentDto[]) {
this.crossSections = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.CROSS_SECTIONS);
this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP);
}
- crossSections: ApplicationDocumentDto[] = [];
- proposalMap: ApplicationDocumentDto[] = [];
+ crossSections: PublicDocumentDto[] = [];
+ proposalMap: PublicDocumentDto[] = [];
constructor(private router: Router, private publicService: PublicService) {}
diff --git a/portal-frontend/src/app/features/public/application/submission/subd-details/subd-details.component.ts b/portal-frontend/src/app/features/public/application/submission/subd-details/subd-details.component.ts
index a2f5720ac4..e9bf08d879 100644
--- a/portal-frontend/src/app/features/public/application/submission/subd-details/subd-details.component.ts
+++ b/portal-frontend/src/app/features/public/application/submission/subd-details/subd-details.component.ts
@@ -1,8 +1,6 @@
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
-import { ApplicationDocumentDto } from '../../../../../services/application-document/application-document.dto';
-import { ApplicationDocumentService } from '../../../../../services/application-document/application-document.service';
-import { PublicApplicationSubmissionDto } from '../../../../../services/public/public.dto';
+import { PublicApplicationSubmissionDto, PublicDocumentDto } from '../../../../../services/public/public.dto';
import { PublicService } from '../../../../../services/public/public.service';
import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
@@ -14,11 +12,11 @@ import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
export class SubdDetailsComponent {
@Input() applicationSubmission!: PublicApplicationSubmissionDto;
- @Input() set applicationDocuments(documents: ApplicationDocumentDto[]) {
+ @Input() set applicationDocuments(documents: PublicDocumentDto[]) {
this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP);
}
- proposalMap: ApplicationDocumentDto[] = [];
+ proposalMap: PublicDocumentDto[] = [];
constructor(private router: Router, private publicService: PublicService) {}
diff --git a/portal-frontend/src/app/features/public/application/submission/submission-details.component.ts b/portal-frontend/src/app/features/public/application/submission/submission-details.component.ts
index c98f76888a..5849b23130 100644
--- a/portal-frontend/src/app/features/public/application/submission/submission-details.component.ts
+++ b/portal-frontend/src/app/features/public/application/submission/submission-details.component.ts
@@ -1,11 +1,15 @@
import { Component, Input, OnDestroy, OnInit } from '@angular/core';
import { Subject } from 'rxjs';
-import { ApplicationDocumentDto } from '../../../../services/application-document/application-document.dto';
import { ApplicationDocumentService } from '../../../../services/application-document/application-document.service';
-import { ApplicationParcelDto, PARCEL_TYPE } from '../../../../services/application-parcel/application-parcel.dto';
+import { PARCEL_TYPE } from '../../../../services/application-parcel/application-parcel.dto';
import { LocalGovernmentDto } from '../../../../services/code/code.dto';
import { CodeService } from '../../../../services/code/code.service';
-import { PublicApplicationSubmissionDto, PublicOwnerDto } from '../../../../services/public/public.dto';
+import {
+ PublicApplicationParcelDto,
+ PublicApplicationSubmissionDto,
+ PublicDocumentDto,
+ PublicOwnerDto,
+} from '../../../../services/public/public.dto';
import { OWNER_TYPE } from '../../../../shared/dto/owner.dto';
@Component({
@@ -17,8 +21,8 @@ export class SubmissionDetailsComponent implements OnInit, OnDestroy {
$destroy = new Subject();
@Input() applicationSubmission!: PublicApplicationSubmissionDto;
- @Input() applicationDocuments: ApplicationDocumentDto[] = [];
- @Input() applicationParcels: ApplicationParcelDto[] = [];
+ @Input() applicationDocuments: PublicDocumentDto[] = [];
+ @Input() applicationParcels: PublicApplicationParcelDto[] = [];
parcelType = PARCEL_TYPE;
primaryContact: PublicOwnerDto | undefined;
diff --git a/portal-frontend/src/app/features/public/application/submission/tur-details/tur-details.component.ts b/portal-frontend/src/app/features/public/application/submission/tur-details/tur-details.component.ts
index a448a06fae..11ff6e4162 100644
--- a/portal-frontend/src/app/features/public/application/submission/tur-details/tur-details.component.ts
+++ b/portal-frontend/src/app/features/public/application/submission/tur-details/tur-details.component.ts
@@ -1,7 +1,6 @@
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
-import { ApplicationDocumentDto } from '../../../../../services/application-document/application-document.dto';
-import { PublicApplicationSubmissionDto } from '../../../../../services/public/public.dto';
+import { PublicApplicationSubmissionDto, PublicDocumentDto } from '../../../../../services/public/public.dto';
import { PublicService } from '../../../../../services/public/public.service';
import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
@@ -12,11 +11,11 @@ import { DOCUMENT_TYPE } from '../../../../../shared/dto/document.dto';
})
export class TurDetailsComponent {
@Input() applicationSubmission!: PublicApplicationSubmissionDto;
- @Input() set applicationDocuments(documents: ApplicationDocumentDto[]) {
+ @Input() set applicationDocuments(documents: PublicDocumentDto[]) {
this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP);
}
- proposalMap: ApplicationDocumentDto[] = [];
+ proposalMap: PublicDocumentDto[] = [];
constructor(private router: Router, private publicService: PublicService) {}
diff --git a/portal-frontend/src/app/features/public/public.module.ts b/portal-frontend/src/app/features/public/public.module.ts
index 57b0fa785e..d4df75e0df 100644
--- a/portal-frontend/src/app/features/public/public.module.ts
+++ b/portal-frontend/src/app/features/public/public.module.ts
@@ -6,6 +6,10 @@ import { MatSortModule } from '@angular/material/sort';
import { MatTreeModule } from '@angular/material/tree';
import { RouterModule, Routes } from '@angular/router';
import { SharedModule } from '../../shared/shared.module';
+import { PublicAlcReviewComponent } from './application/alc-review/alc-review.component';
+import { PublicDecisionsComponent } from './application/alc-review/decisions/decisions.component';
+import { PublicSubmissionDocumentsComponent } from './application/alc-review/submission-documents/submission-documents.component';
+import { PublicLfngReviewComponent } from './application/lfng-review/lfng-review.component';
import { PublicApplicationComponent } from './application/public-application.component';
import { SubmissionDetailsModule } from './application/submission/submission-details.module';
import { ApplicationSearchTableComponent } from './search/application-search-table/application-search-table.component';
@@ -35,6 +39,10 @@ const routes: Routes = [
FileTypeFilterDropDownComponent,
SearchListComponent,
PublicApplicationComponent,
+ PublicLfngReviewComponent,
+ PublicAlcReviewComponent,
+ PublicSubmissionDocumentsComponent,
+ PublicDecisionsComponent,
],
imports: [
CommonModule,
diff --git a/portal-frontend/src/app/services/public/public.dto.ts b/portal-frontend/src/app/services/public/public.dto.ts
index 5c49d34add..ba6f3031d3 100644
--- a/portal-frontend/src/app/services/public/public.dto.ts
+++ b/portal-frontend/src/app/services/public/public.dto.ts
@@ -1,6 +1,7 @@
+import { BaseCodeDto } from '../../shared/dto/base.dto';
+import { DocumentTypeDto } from '../../shared/dto/document.dto';
import { OwnerTypeDto } from '../../shared/dto/owner.dto';
-import { ApplicationDocumentDto } from '../application-document/application-document.dto';
-import { ApplicationParcelDto } from '../application-parcel/application-parcel.dto';
+import { ApplicationPortalDecisionDto } from '../application-decision/application-decision.dto';
import {
ApplicationStatusDto,
NaruSubtypeDto,
@@ -9,8 +10,10 @@ import {
export interface GetPublicApplicationResponseDto {
submission: PublicApplicationSubmissionDto;
- parcels: ApplicationParcelDto[];
- documents: ApplicationDocumentDto[];
+ parcels: PublicApplicationParcelDto[];
+ documents: PublicDocumentDto[];
+ review?: PublicApplicationSubmissionReviewDto;
+ decisions: ApplicationPortalDecisionDto[];
}
export interface PublicOwnerDto {
@@ -131,3 +134,50 @@ export interface PublicApplicationSubmissionDto {
exclShareGovernmentBorders: boolean | null;
inclGovernmentOwnsAllParcels?: boolean | null;
}
+
+export interface PublicApplicationSubmissionReviewDto {
+ applicationFileNumber: string;
+ localGovernmentFileNumber: string | null;
+ firstName: string | null;
+ lastName: string | null;
+ position: string | null;
+ department: string | null;
+ isOCPDesignation: boolean | null;
+ OCPBylawName: string | null;
+ OCPDesignation: string | null;
+ OCPConsistent: boolean | null;
+ isSubjectToZoning: boolean | null;
+ zoningBylawName: string | null;
+ zoningDesignation: string | null;
+ zoningMinimumLotSize: string | null;
+ isZoningConsistent: boolean | null;
+ isAuthorized: boolean | null;
+}
+
+export interface PublicApplicationParcelDto {
+ uuid: string;
+ pid?: string | null;
+ pin?: string | null;
+ legalDescription?: string | null;
+ civicAddress?: string | null;
+ mapAreaHectares?: number | null;
+ purchasedDate?: number | null;
+ isFarm?: boolean | null;
+ ownershipTypeCode?: string | null;
+ crownLandOwnerType?: string | null;
+ ownershipType?: BaseCodeDto;
+ parcelType: string;
+ alrArea: number | null;
+ owners: PublicOwnerDto[];
+}
+
+export interface PublicDocumentDto {
+ description?: string;
+ uuid: string;
+ type?: DocumentTypeDto;
+ documentUuid: string;
+ fileName: string;
+ fileSize?: number;
+ mimeType: string;
+ uploadedAt: number;
+}
diff --git a/services/apps/alcs/src/common/automapper/public.automapper.profile.ts b/services/apps/alcs/src/common/automapper/public.automapper.profile.ts
index c463e68068..d1b49b784b 100644
--- a/services/apps/alcs/src/common/automapper/public.automapper.profile.ts
+++ b/services/apps/alcs/src/common/automapper/public.automapper.profile.ts
@@ -1,12 +1,25 @@
import { createMap, forMember, mapFrom, Mapper } from '@automapper/core';
import { AutomapperProfile, InjectMapper } from '@automapper/nestjs';
import { Injectable } from '@nestjs/common';
+import { ApplicationDocumentDto } from '../../alcs/application/application-document/application-document.dto';
+import { ApplicationDocument } from '../../alcs/application/application-document/application-document.entity';
+import { ApplicationSubmissionReview } from '../../portal/application-submission-review/application-submission-review.entity';
+import { ApplicationOwnerDto } from '../../portal/application-submission/application-owner/application-owner.dto';
import { ApplicationOwner } from '../../portal/application-submission/application-owner/application-owner.entity';
+import { ApplicationParcelDto } from '../../portal/application-submission/application-parcel/application-parcel.dto';
+import { ApplicationParcel } from '../../portal/application-submission/application-parcel/application-parcel.entity';
import { ApplicationSubmission } from '../../portal/application-submission/application-submission.entity';
import {
+ PublicApplicationParcelDto,
PublicApplicationSubmissionDto,
+ PublicApplicationSubmissionReviewDto,
+ PublicDocumentDto,
PublicOwnerDto,
} from '../../portal/public/public.dto';
+import {
+ ParcelOwnershipType,
+ ParcelOwnershipTypeDto,
+} from '../entities/parcel-ownership-type/parcel-ownership-type.entity';
@Injectable()
export class PublicAutomapperProfile extends AutomapperProfile {
@@ -33,7 +46,90 @@ export class PublicAutomapperProfile extends AutomapperProfile {
}),
),
);
- createMap(mapper, ApplicationOwner, PublicOwnerDto);
+
+ createMap(
+ mapper,
+ ApplicationOwner,
+ PublicOwnerDto,
+ forMember(
+ (pd) => pd.displayName,
+ mapFrom((p) => `${p.firstName} ${p.lastName}`),
+ ),
+ );
+
+ createMap(
+ mapper,
+ ApplicationParcel,
+ PublicApplicationParcelDto,
+ forMember(
+ (pd) => pd.ownershipTypeCode,
+ mapFrom((p) => p.ownershipTypeCode),
+ ),
+ forMember(
+ (pd) => pd.purchasedDate,
+ mapFrom((p) => p.purchasedDate?.getTime()),
+ ),
+ forMember(
+ (p) => p.owners,
+ mapFrom((pd) => {
+ if (pd.owners) {
+ return this.mapper.mapArray(
+ pd.owners,
+ ApplicationOwner,
+ PublicOwnerDto,
+ );
+ } else {
+ return [];
+ }
+ }),
+ ),
+ forMember(
+ (p) => p.ownershipType,
+ mapFrom((pd) => {
+ if (pd.ownershipType) {
+ return this.mapper.map(
+ pd.ownershipType,
+ ParcelOwnershipType,
+ ParcelOwnershipTypeDto,
+ );
+ } else {
+ return undefined;
+ }
+ }),
+ ),
+ );
+
+ createMap(
+ mapper,
+ ApplicationSubmissionReview,
+ PublicApplicationSubmissionReviewDto,
+ );
+
+ createMap(
+ mapper,
+ ApplicationDocument,
+ PublicDocumentDto,
+ forMember(
+ (a) => a.mimeType,
+ mapFrom((ad) => ad.document.mimeType),
+ ),
+ forMember(
+ (a) => a.fileName,
+ mapFrom((ad) => ad.document.fileName),
+ ),
+ forMember(
+ (a) => a.fileSize,
+ mapFrom((ad) => ad.document.fileSize),
+ ),
+ forMember(
+ (a) => a.uploadedAt,
+ mapFrom((ad) => ad.document.uploadedAt.getTime()),
+ ),
+ forMember(
+ (a) => a.documentUuid,
+ mapFrom((ad) => ad.document.uuid),
+ ),
+ );
};
}
}
diff --git a/services/apps/alcs/src/portal/application-submission-review/application-submission-review.service.ts b/services/apps/alcs/src/portal/application-submission-review/application-submission-review.service.ts
index 93c25f7da2..512fa2d345 100644
--- a/services/apps/alcs/src/portal/application-submission-review/application-submission-review.service.ts
+++ b/services/apps/alcs/src/portal/application-submission-review/application-submission-review.service.ts
@@ -256,6 +256,14 @@ export class ApplicationSubmissionReviewService {
};
}
+ getForPublicReview(fileNumber: string) {
+ return this.applicationSubmissionReviewRepository.findOne({
+ where: {
+ applicationFileNumber: fileNumber,
+ },
+ });
+ }
+
async delete(applicationReview: ApplicationSubmissionReview) {
await this.applicationSubmissionReviewRepository.remove(applicationReview);
}
diff --git a/services/apps/alcs/src/portal/application-submission/application-parcel/application-parcel.dto.ts b/services/apps/alcs/src/portal/application-submission/application-parcel/application-parcel.dto.ts
index b00a1195fb..f52e51f788 100644
--- a/services/apps/alcs/src/portal/application-submission/application-parcel/application-parcel.dto.ts
+++ b/services/apps/alcs/src/portal/application-submission/application-parcel/application-parcel.dto.ts
@@ -7,7 +7,6 @@ import {
IsOptional,
IsString,
} from 'class-validator';
-import { Column } from 'typeorm';
import { ApplicationDocumentDto } from '../../../alcs/application/application-document/application-document.dto';
import { BaseCodeDto } from '../../../common/dtos/base.dto';
import { ApplicationOwnerDetailedDto } from '../application-owner/application-owner.dto';
diff --git a/services/apps/alcs/src/portal/public/public.controller.spec.ts b/services/apps/alcs/src/portal/public/public.controller.spec.ts
index 734f96eae1..81dfde3181 100644
--- a/services/apps/alcs/src/portal/public/public.controller.spec.ts
+++ b/services/apps/alcs/src/portal/public/public.controller.spec.ts
@@ -5,6 +5,7 @@ import { createMock, DeepMocked } from '@golevelup/nestjs-testing';
import { Test, TestingModule } from '@nestjs/testing';
import { ClsService } from 'nestjs-cls';
import { mockKeyCloakProviders } from '../../../test/mocks/mockTypes';
+import { ApplicationDecisionV2Service } from '../../alcs/application-decision/application-decision-v2/application-decision/application-decision-v2.service';
import {
ApplicationDocument,
VISIBILITY_FLAG,
@@ -14,6 +15,8 @@ import { ApplicationSubmissionToSubmissionStatus } from '../../alcs/application/
import { Application } from '../../alcs/application/application.entity';
import { ApplicationService } from '../../alcs/application/application.service';
import { PublicAutomapperProfile } from '../../common/automapper/public.automapper.profile';
+import { ApplicationSubmissionReview } from '../application-submission-review/application-submission-review.entity';
+import { ApplicationSubmissionReviewService } from '../application-submission-review/application-submission-review.service';
import { ApplicationParcelService } from '../application-submission/application-parcel/application-parcel.service';
import { ApplicationSubmission } from '../application-submission/application-submission.entity';
import { ApplicationSubmissionService } from '../application-submission/application-submission.service';
@@ -25,12 +28,16 @@ describe('PublicSearchController', () => {
let mockAppSubService: DeepMocked;
let mockAppParcelService: DeepMocked;
let mockAppDocService: DeepMocked;
+ let mockAppReviewService: DeepMocked;
+ let mockAppDecService: DeepMocked;
beforeEach(async () => {
mockAppService = createMock();
mockAppSubService = createMock();
mockAppParcelService = createMock();
mockAppDocService = createMock();
+ mockAppReviewService = createMock();
+ mockAppDecService = createMock();
const module: TestingModule = await Test.createTestingModule({
imports: [
@@ -56,6 +63,14 @@ describe('PublicSearchController', () => {
provide: ApplicationDocumentService,
useValue: mockAppDocService,
},
+ {
+ provide: ApplicationSubmissionReviewService,
+ useValue: mockAppReviewService,
+ },
+ {
+ provide: ApplicationDecisionV2Service,
+ useValue: mockAppDecService,
+ },
{
provide: ClsService,
useValue: {},
@@ -87,6 +102,10 @@ describe('PublicSearchController', () => {
);
mockAppParcelService.fetchByApplicationFileId.mockResolvedValue([]);
mockAppDocService.list.mockResolvedValue([]);
+ mockAppReviewService.getForPublicReview.mockResolvedValue(
+ new ApplicationSubmissionReview(),
+ );
+ mockAppDecService.getByAppFileNumber.mockResolvedValue([]);
const fileId = 'file-id';
await controller.getApplication(fileId);
@@ -100,6 +119,8 @@ describe('PublicSearchController', () => {
expect(mockAppDocService.list).toHaveBeenCalledWith(fileId, [
VISIBILITY_FLAG.PUBLIC,
]);
+ expect(mockAppReviewService.getForPublicReview).toHaveBeenCalledTimes(1);
+ expect(mockAppDecService.getByAppFileNumber).toHaveBeenCalledTimes(1);
});
it('should call through to document service for getting files', async () => {
diff --git a/services/apps/alcs/src/portal/public/public.controller.ts b/services/apps/alcs/src/portal/public/public.controller.ts
index 264d0393b5..87b74408ec 100644
--- a/services/apps/alcs/src/portal/public/public.controller.ts
+++ b/services/apps/alcs/src/portal/public/public.controller.ts
@@ -3,6 +3,8 @@ import { Mapper } from '@automapper/core';
import { InjectMapper } from '@automapper/nestjs';
import { Controller, Get, Param } from '@nestjs/common';
import { Public } from 'nest-keycloak-connect';
+import { ApplicationDecisionV2Service } from '../../alcs/application-decision/application-decision-v2/application-decision/application-decision-v2.service';
+import { ApplicationDecision } from '../../alcs/application-decision/application-decision.entity';
import { ApplicationDocumentDto } from '../../alcs/application/application-document/application-document.dto';
import {
ApplicationDocument,
@@ -10,12 +12,21 @@ import {
} from '../../alcs/application/application-document/application-document.entity';
import { ApplicationDocumentService } from '../../alcs/application/application-document/application-document.service';
import { ApplicationService } from '../../alcs/application/application.service';
+import { ApplicationPortalDecisionDto } from '../application-decision/application-decision.dto';
+import { ApplicationSubmissionReviewDto } from '../application-submission-review/application-submission-review.dto';
+import { ApplicationSubmissionReview } from '../application-submission-review/application-submission-review.entity';
+import { ApplicationSubmissionReviewService } from '../application-submission-review/application-submission-review.service';
import { ApplicationParcelDto } from '../application-submission/application-parcel/application-parcel.dto';
import { ApplicationParcel } from '../application-submission/application-parcel/application-parcel.entity';
import { ApplicationParcelService } from '../application-submission/application-parcel/application-parcel.service';
import { ApplicationSubmission } from '../application-submission/application-submission.entity';
import { ApplicationSubmissionService } from '../application-submission/application-submission.service';
-import { PublicApplicationSubmissionDto } from './public.dto';
+import {
+ PublicApplicationParcelDto,
+ PublicApplicationSubmissionDto,
+ PublicApplicationSubmissionReviewDto,
+ PublicDocumentDto,
+} from './public.dto';
@Public()
@Controller('/public')
@@ -26,27 +37,29 @@ export class PublicController {
private applicationSubmissionService: ApplicationSubmissionService,
private applicationParcelService: ApplicationParcelService,
private applicationDocumentService: ApplicationDocumentService,
+ private applicationSubmissionReviewService: ApplicationSubmissionReviewService,
+ private applicationDecisionService: ApplicationDecisionV2Service,
) {}
@Get('/application/:fileId')
- async getApplication(@Param('fileId') fileId: string) {
- const application = await this.applicationService.get(fileId);
+ async getApplication(@Param('fileId') fileNumber: string) {
+ const application = await this.applicationService.get(fileNumber);
if (!application?.dateReceivedAllItems) {
throw new ServiceNotFoundException(
- `Failed to find application with File ID ${fileId}`,
+ `Failed to find application with File ID ${fileNumber}`,
);
}
const submission =
- await this.applicationSubmissionService.getOrFailByFileNumber(fileId);
+ await this.applicationSubmissionService.getOrFailByFileNumber(fileNumber);
const parcels =
- await this.applicationParcelService.fetchByApplicationFileId(fileId);
+ await this.applicationParcelService.fetchByApplicationFileId(fileNumber);
const mappedParcels = this.mapper.mapArray(
parcels,
ApplicationParcel,
- ApplicationParcelDto,
+ PublicApplicationParcelDto,
);
const mappedSubmission = this.mapper.map(
@@ -55,20 +68,45 @@ export class PublicController {
PublicApplicationSubmissionDto,
);
- const documents = await this.applicationDocumentService.list(fileId, [
+ const documents = await this.applicationDocumentService.list(fileNumber, [
VISIBILITY_FLAG.PUBLIC,
]);
const mappedDocuments = this.mapper.mapArray(
documents,
ApplicationDocument,
- ApplicationDocumentDto,
+ PublicDocumentDto,
+ );
+
+ const review =
+ await this.applicationSubmissionReviewService.getForPublicReview(
+ fileNumber,
+ );
+
+ let mappedReview;
+ if (review) {
+ mappedReview = this.mapper.map(
+ review,
+ ApplicationSubmissionReview,
+ PublicApplicationSubmissionReviewDto,
+ );
+ }
+
+ const decisions = await this.applicationDecisionService.getByAppFileNumber(
+ fileNumber,
+ );
+ const mappedDecisions = this.mapper.mapArray(
+ decisions,
+ ApplicationDecision,
+ ApplicationPortalDecisionDto,
);
return {
submission: mappedSubmission,
parcels: mappedParcels,
documents: mappedDocuments,
+ review: mappedReview,
+ decisions: mappedDecisions,
};
}
diff --git a/services/apps/alcs/src/portal/public/public.dto.ts b/services/apps/alcs/src/portal/public/public.dto.ts
index e502cf8720..69968c4dae 100644
--- a/services/apps/alcs/src/portal/public/public.dto.ts
+++ b/services/apps/alcs/src/portal/public/public.dto.ts
@@ -1,6 +1,8 @@
import { AutoMap } from '@automapper/classes';
import { ApplicationStatusDto } from '../../alcs/application/application-submission-status/submission-status.dto';
import { OwnerTypeDto } from '../../common/owner-type/owner-type.entity';
+import { DocumentTypeDto } from '../../document/document.dto';
+import { ApplicationParcelOwnershipTypeDto } from '../application-submission/application-parcel/application-parcel.dto';
import { NaruSubtypeDto } from '../application-submission/application-submission.dto';
import { ProposedLot } from '../application-submission/application-submission.entity';
@@ -315,3 +317,113 @@ export class PublicApplicationSubmissionDto {
@AutoMap(() => Boolean)
inclGovernmentOwnsAllParcels?: boolean | null;
}
+
+export class PublicApplicationSubmissionReviewDto {
+ @AutoMap()
+ applicationFileNumber: string;
+
+ @AutoMap(() => String)
+ localGovernmentFileNumber: string | null;
+
+ @AutoMap(() => String)
+ firstName: string | null;
+
+ @AutoMap(() => String)
+ lastName: string | null;
+
+ @AutoMap(() => String)
+ position: string | null;
+
+ @AutoMap(() => String)
+ department: string | null;
+
+ @AutoMap(() => Boolean)
+ isOCPDesignation: boolean | null;
+
+ @AutoMap(() => String)
+ OCPBylawName: string | null;
+
+ @AutoMap(() => String)
+ OCPDesignation: string | null;
+
+ @AutoMap(() => Boolean)
+ OCPConsistent: boolean | null;
+
+ @AutoMap(() => Boolean)
+ isSubjectToZoning: boolean | null;
+
+ @AutoMap(() => String)
+ zoningBylawName: string | null;
+
+ @AutoMap(() => String)
+ zoningDesignation: string | null;
+
+ @AutoMap(() => String)
+ zoningMinimumLotSize: string | null;
+
+ @AutoMap(() => Boolean)
+ isZoningConsistent: boolean | null;
+
+ @AutoMap(() => Boolean)
+ isAuthorized: boolean | null;
+}
+
+export class PublicApplicationParcelDto {
+ @AutoMap()
+ uuid: string;
+
+ @AutoMap(() => String)
+ pid?: string | null;
+
+ @AutoMap(() => String)
+ pin?: string | null;
+
+ @AutoMap(() => String)
+ legalDescription?: string | null;
+
+ @AutoMap(() => String)
+ civicAddress?: string | null;
+
+ @AutoMap(() => Number)
+ mapAreaHectares?: number | null;
+
+ @AutoMap(() => Number)
+ purchasedDate?: number | null;
+
+ @AutoMap(() => Boolean)
+ isFarm?: boolean | null;
+
+ @AutoMap(() => String)
+ ownershipTypeCode?: string | null;
+
+ @AutoMap(() => String)
+ crownLandOwnerType?: string | null;
+
+ ownershipType?: ApplicationParcelOwnershipTypeDto;
+
+ @AutoMap(() => String)
+ parcelType: string;
+
+ @AutoMap(() => Number)
+ alrArea: number | null;
+
+ owners: PublicOwnerDto[];
+}
+
+export class PublicDocumentDto {
+ @AutoMap(() => String)
+ description?: string;
+
+ @AutoMap()
+ uuid: string;
+
+ @AutoMap(() => DocumentTypeDto)
+ type?: DocumentTypeDto;
+
+ //Document Fields
+ documentUuid: string;
+ fileName: string;
+ fileSize?: number;
+ mimeType: string;
+ uploadedAt: number;
+}
diff --git a/services/apps/alcs/src/portal/public/public.module.ts b/services/apps/alcs/src/portal/public/public.module.ts
index c0e86ea8d4..9bf1e39878 100644
--- a/services/apps/alcs/src/portal/public/public.module.ts
+++ b/services/apps/alcs/src/portal/public/public.module.ts
@@ -1,10 +1,11 @@
import { Module } from '@nestjs/common';
import { RouterModule } from '@nestjs/core';
+import { ApplicationDecisionV2Module } from '../../alcs/application-decision/application-decision-v2/application-decision-v2.module';
import { ApplicationSubmissionStatusModule } from '../../alcs/application/application-submission-status/application-submission-status.module';
import { ApplicationModule } from '../../alcs/application/application.module';
import { NotificationSubmissionStatusModule } from '../../alcs/notification/notification-submission-status/notification-submission-status.module';
-import { ApplicationSubmissionProfile } from '../../common/automapper/application-submission.automapper.profile';
import { PublicAutomapperProfile } from '../../common/automapper/public.automapper.profile';
+import { ApplicationSubmissionReviewModule } from '../application-submission-review/application-submission-review.module';
import { ApplicationSubmissionModule } from '../application-submission/application-submission.module';
import { PublicController } from './public.controller';
import { PublicSearchModule } from './search/public-search.module';
@@ -17,6 +18,8 @@ import { PublicStatusController } from './status/public-status.controller';
NotificationSubmissionStatusModule,
ApplicationModule,
ApplicationSubmissionModule,
+ ApplicationSubmissionReviewModule,
+ ApplicationDecisionV2Module,
RouterModule.register([{ path: 'public', module: PublicSearchModule }]),
],
controllers: [PublicStatusController, PublicController],