From cc65ad10f2caafb9606705ed29fb60a2ee4dfe63 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:04:19 -0700 Subject: [PATCH 001/107] Make L/FNG return comment required --- .../return-application-dialog.component.html | 9 ++++++++- .../return-application-dialog.component.scss | 6 ++++++ .../return-application-dialog.component.ts | 7 +++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.html b/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.html index b3cf10b4e7..c6085c4478 100644 --- a/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.html +++ b/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.html @@ -60,16 +60,23 @@

Reason for Return

Characters left: {{ 4000 - comment.textLength }} +
+ warning +
This field is required
+
diff --git a/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.scss b/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.scss index 5c9b16b19e..84a41cd19f 100644 --- a/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.scss +++ b/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.scss @@ -77,3 +77,9 @@ height: rem(120); width: 100%; } + +.field-error { + color: colors.$error-color; + display: flex; + align-items: center; +} diff --git a/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.ts b/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.ts index 31da37f008..d3aec937b9 100644 --- a/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.ts +++ b/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.ts @@ -25,6 +25,8 @@ export class ReturnApplicationDialogComponent implements OnInit { stepIdx = 0; applicantComment = ''; + showError: boolean = false; + constructor( private dialogRef: MatDialogRef, private applicationReviewService: ApplicationSubmissionReviewService, @@ -53,6 +55,11 @@ export class ReturnApplicationDialogComponent implements OnInit { } async next() { + if (this.stepIdx === 1 && this.applicantComment === '') { + this.showError = true; + return; + } + this.stepIdx += 1; } From 47ad22617142522b32f56b4138736bb041a5c60c Mon Sep 17 00:00:00 2001 From: abradat Date: Wed, 11 Sep 2024 14:40:08 -0700 Subject: [PATCH 002/107] Fix multiple files showing in one line in public search view Fix the bug for "Cross Sections" and "Reclamation Plan" fields showing multiple files in one line in public view --- .../submission/pfrs-details/pfrs-details.component.html | 4 ++-- .../submission/pofo-details/pofo-details.component.html | 2 +- .../submission/roso-details/roso-details.component.html | 2 +- .../submission/submission-details.component.scss | 6 ++++++ .../submission/pfrs-details/pfrs-details.component.html | 2 +- .../submission/pofo-details/pofo-details.component.html | 2 +- .../submission/roso-details/roso-details.component.html | 2 +- .../submission/submission-details.component.scss | 6 ++++++ 8 files changed, 19 insertions(+), 7 deletions(-) diff --git a/portal-frontend/src/app/features/public/application/submission/pfrs-details/pfrs-details.component.html b/portal-frontend/src/app/features/public/application/submission/pfrs-details/pfrs-details.component.html index 94e04b31d9..e502c8a3a6 100644 --- a/portal-frontend/src/app/features/public/application/submission/pfrs-details/pfrs-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/pfrs-details/pfrs-details.component.html @@ -180,7 +180,7 @@
Cross Sections
-
+
{{ file.fileName }} @@ -188,7 +188,7 @@
Reclamation Plan
-
+
{{ file.fileName }} diff --git a/portal-frontend/src/app/features/public/application/submission/pofo-details/pofo-details.component.html b/portal-frontend/src/app/features/public/application/submission/pofo-details/pofo-details.component.html index db43f0d4b6..0700f62109 100644 --- a/portal-frontend/src/app/features/public/application/submission/pofo-details/pofo-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/pofo-details/pofo-details.component.html @@ -122,7 +122,7 @@
Cross Sections
-
+
{{ file.fileName }} diff --git a/portal-frontend/src/app/features/public/application/submission/roso-details/roso-details.component.html b/portal-frontend/src/app/features/public/application/submission/roso-details/roso-details.component.html index a358a4490e..cd243734e5 100644 --- a/portal-frontend/src/app/features/public/application/submission/roso-details/roso-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/roso-details/roso-details.component.html @@ -114,7 +114,7 @@
Cross Sections
-
+
{{ file.fileName }} diff --git a/portal-frontend/src/app/features/public/application/submission/submission-details.component.scss b/portal-frontend/src/app/features/public/application/submission/submission-details.component.scss index 9796891103..2911f5311e 100644 --- a/portal-frontend/src/app/features/public/application/submission/submission-details.component.scss +++ b/portal-frontend/src/app/features/public/application/submission/submission-details.component.scss @@ -158,4 +158,10 @@ } } } + + .multiple-documents { + a { + display: block; + } + } } diff --git a/portal-frontend/src/app/features/public/notice-of-intent/submission/pfrs-details/pfrs-details.component.html b/portal-frontend/src/app/features/public/notice-of-intent/submission/pfrs-details/pfrs-details.component.html index 815fdaaef6..1fe39814b5 100644 --- a/portal-frontend/src/app/features/public/notice-of-intent/submission/pfrs-details/pfrs-details.component.html +++ b/portal-frontend/src/app/features/public/notice-of-intent/submission/pfrs-details/pfrs-details.component.html @@ -183,7 +183,7 @@
Cross Sections
-
+
{{ file.fileName }} diff --git a/portal-frontend/src/app/features/public/notice-of-intent/submission/pofo-details/pofo-details.component.html b/portal-frontend/src/app/features/public/notice-of-intent/submission/pofo-details/pofo-details.component.html index 5409a3b115..0436d6ea75 100644 --- a/portal-frontend/src/app/features/public/notice-of-intent/submission/pofo-details/pofo-details.component.html +++ b/portal-frontend/src/app/features/public/notice-of-intent/submission/pofo-details/pofo-details.component.html @@ -117,7 +117,7 @@
Cross Sections
-
+
{{ file.fileName }} diff --git a/portal-frontend/src/app/features/public/notice-of-intent/submission/roso-details/roso-details.component.html b/portal-frontend/src/app/features/public/notice-of-intent/submission/roso-details/roso-details.component.html index 7ff9ffeecd..0569712ccb 100644 --- a/portal-frontend/src/app/features/public/notice-of-intent/submission/roso-details/roso-details.component.html +++ b/portal-frontend/src/app/features/public/notice-of-intent/submission/roso-details/roso-details.component.html @@ -117,7 +117,7 @@
Cross Sections
-
+
{{ file.fileName }} diff --git a/portal-frontend/src/app/features/public/notice-of-intent/submission/submission-details.component.scss b/portal-frontend/src/app/features/public/notice-of-intent/submission/submission-details.component.scss index 8e568b8c10..f4b04222dd 100644 --- a/portal-frontend/src/app/features/public/notice-of-intent/submission/submission-details.component.scss +++ b/portal-frontend/src/app/features/public/notice-of-intent/submission/submission-details.component.scss @@ -152,4 +152,10 @@ } } } + + .multiple-documents { + a { + display: block; + } + } } From 3d7681df3ebdc59dcf86d9a835acd5ef48e183f6 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:30:30 -0700 Subject: [PATCH 003/107] Fix tiny font on comment input --- .../return-application-dialog.component.scss | 1 + .../return-application-dialog.component.scss | 1 + 2 files changed, 2 insertions(+) diff --git a/alcs-frontend/src/app/features/application/lfng-info/return-application-dialog/return-application-dialog.component.scss b/alcs-frontend/src/app/features/application/lfng-info/return-application-dialog/return-application-dialog.component.scss index 261b090287..fdaeb72f2f 100644 --- a/alcs-frontend/src/app/features/application/lfng-info/return-application-dialog/return-application-dialog.component.scss +++ b/alcs-frontend/src/app/features/application/lfng-info/return-application-dialog/return-application-dialog.component.scss @@ -35,6 +35,7 @@ } .comment-input { + font-size: 16px; resize: none; margin-top: 4px; border: 1px solid rgba(0, 0, 0, 0.42); diff --git a/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.scss b/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.scss index 84a41cd19f..066039b9ab 100644 --- a/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.scss +++ b/portal-frontend/src/app/features/applications/review-submission/return-application-dialog/return-application-dialog.component.scss @@ -69,6 +69,7 @@ } .comment-input { + font-size: rem(16); resize: none; margin-top: rem(4); border: 1px solid rgba(0, 0, 0, 0.42); From 7fb6bb74cd1bac3dde87d4b1faa68531295dcfac Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 12 Sep 2024 08:10:37 -0700 Subject: [PATCH 004/107] Update NARU description --- .../1726098613152-update_naru_subtypes.ts | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 services/apps/alcs/src/providers/typeorm/migrations/1726098613152-update_naru_subtypes.ts diff --git a/services/apps/alcs/src/providers/typeorm/migrations/1726098613152-update_naru_subtypes.ts b/services/apps/alcs/src/providers/typeorm/migrations/1726098613152-update_naru_subtypes.ts new file mode 100644 index 0000000000..33291371fc --- /dev/null +++ b/services/apps/alcs/src/providers/typeorm/migrations/1726098613152-update_naru_subtypes.ts @@ -0,0 +1,38 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class UpdateNaruSubtypes1726098613152 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + queryRunner.query(` + update alcs.application_type at + set html_description = 'Choose this option if you are proposing to conduct a non-adhering residential use within the Agricultural Land Reserve under + Section 20.1(2) of the Agricultural Land Commission Act. +

+ Non-adhering residential uses include: +
    +
  • An additional residence(s)
  • +
  • A residential structure larger than 500 m²
  • +
  • Retain an existing residence while building a new residence
  • +
  • Temporary foreign worker housing
  • +
+ ' + where at.code = 'NARU'; + `); + } + + public async down(queryRunner: QueryRunner): Promise { + queryRunner.query(` + update alcs.application_type at + set html_description = 'Choose this option if you are proposing to conduct a non-adhering residential use within the Agricultural Land Reserve under + Section 20.1(2) of the Agricultural Land Commission Act. +

+ Non-adhering residential uses include: +
    +
  • An additional residence for farm use;
  • +
  • A residential structure larger than 500 m²; or,
  • +
  • A non-adhering tourism accommodation.
  • +
+ ' + where at.code = 'NARU'; + `); + } +} From a0352c1cc965e8741ac18e4699000ffbe2f1e6c3 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 12 Sep 2024 09:05:05 -0700 Subject: [PATCH 005/107] Fix incorrect NARU text --- .../1726156915372-fix_new_naru_text.ts | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 services/apps/alcs/src/providers/typeorm/migrations/1726156915372-fix_new_naru_text.ts diff --git a/services/apps/alcs/src/providers/typeorm/migrations/1726156915372-fix_new_naru_text.ts b/services/apps/alcs/src/providers/typeorm/migrations/1726156915372-fix_new_naru_text.ts new file mode 100644 index 0000000000..ce0fea50af --- /dev/null +++ b/services/apps/alcs/src/providers/typeorm/migrations/1726156915372-fix_new_naru_text.ts @@ -0,0 +1,39 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class FixNewNaruText1726156915372 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + queryRunner.query(` + update alcs.application_type at + set html_description = 'Choose this option if you are proposing to conduct a non-adhering residential use within the Agricultural Land Reserve under + Section 20.1(2) of the Agricultural Land Commission Act. +

+ Non-adhering residential uses include: +
    +
  • Additional residence(s)
  • +
  • Residence(s) with Total Floor Area greater than 500 m²
  • +
  • Retain an existing residence while building a new residence
  • +
  • Temporary foreign worker housing
  • +
+ ' + where at.code = 'NARU'; + `); + } + + public async down(queryRunner: QueryRunner): Promise { + queryRunner.query(` + update alcs.application_type at + set html_description = 'Choose this option if you are proposing to conduct a non-adhering residential use within the Agricultural Land Reserve under + Section 20.1(2) of the Agricultural Land Commission Act. +

+ Non-adhering residential uses include: +
    +
  • An additional residence(s)
  • +
  • A residential structure larger than 500 m²
  • +
  • Retain an existing residence while building a new residence
  • +
  • Temporary foreign worker housing
  • +
+ ' + where at.code = 'NARU'; + `); + } +} From 6c7d533224b481fc7756ccd93267aadfd54ac44a Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 12 Sep 2024 11:08:19 -0700 Subject: [PATCH 006/107] Remove NARU subtype selection --- .../naru-proposal.component.html | 890 +++++++++--------- .../naru-proposal/naru-proposal.component.ts | 45 +- 2 files changed, 424 insertions(+), 511 deletions(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 7ecb48b175..7b599c5c4b 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -27,29 +27,6 @@

Proposal

-
Select a Sub-Type for your Non-Adhering Residential Use application
- - {{ - subtype.label - }} - -
- warning -
This field is required
-
-
-
-
- Please select a sub-type above to view proposal questions -
- -
Include why you are applying for non-adhering residential use, what the proposal will achieve, and any benefits @@ -65,506 +42,477 @@

Proposal

Characters left: {{ 4000 - purposeText.textLength }}
- -
- - - - m2 - -
- warning -
This field is required
-
+
+ + + + m2 + +
+ warning +
This field is required
+
-
- -
- Include a description of the scale, intensity, and labour capacity of the farm operation -
- - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - residenceNecessityText.textLength }}
+
+ +
+ Include a description of the scale, intensity, and labour capacity of the farm operation
+ + + +
+ warning +
This field is required
+
+
Characters left: {{ 4000 - residenceNecessityText.textLength }}
+
-
- -
- Include a description of the scale, intensity, and labour capacity of the farm operation -
- - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - locationRationaleText.textLength }}
+
+ +
+ Include a description of the scale, intensity, and labour capacity of the farm operation +
+ + + +
+ warning +
This field is required
+
Characters left: {{ 4000 - locationRationaleText.textLength }}
+
-
- -
- Describe any infrastructure required to accommodate the additional residence and the approximate area required - for that infrastructure -
- - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - infrastructureText.textLength }}
+
+ +
+ Describe any infrastructure required to accommodate the additional residence and the approximate area required + for that infrastructure +
+ + + +
+ warning +
This field is required
- +
Characters left: {{ 4000 - infrastructureText.textLength }}
+
- -
- - - - m2 - -
- warning -
This field is required
-
+
+ + + + m2 + +
+ warning +
This field is required
+
-
- - - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - residenceNecessityText.textLength }}
+
+ + + + +
+ warning +
This field is required
+
Characters left: {{ 4000 - residenceNecessityText.textLength }}
+
-
- - - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - locationRationaleText.textLength }}
+
+ + + + +
+ warning +
This field is required
+
Characters left: {{ 4000 - locationRationaleText.textLength }}
+
-
- -
- Describe any infrastructure required to accommodate the additional residence and the approximate area required - for that infrastructure -
- - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - infrastructureText.textLength }}
+
+ +
+ Describe any infrastructure required to accommodate the additional residence and the approximate area required + for that infrastructure +
+ + + +
+ warning +
This field is required
- +
Characters left: {{ 4000 - infrastructureText.textLength }}
+
- -
- - - - m2 - -
- warning -
This field is required
-
+
+ + + + m2 + +
+ warning +
This field is required
+
-
- -
- A "sleeping unit" means: -
    -
  1. A bedroom or other area used for sleeping located in a residence, cabin or other
  2. - structure -
  3. A vehicle, trailer, tent or other structure, located on a campsite, field or other area
  4. -
-
- - - -
- warning -
This field is required
-
+
+ +
+ A "sleeping unit" means: +
    +
  1. A bedroom or other area used for sleeping located in a residence, cabin or other
  2. + structure +
  3. A vehicle, trailer, tent or other structure, located on a campsite, field or other area
  4. +
+
+ + + +
+ warning +
This field is required
+
-
- - - - -
+ + + + +
+ warning +
This field is required
+
+
Characters left: {{ 4000 - residenceNecessityText.textLength }}
+
+ +
+ + + + +
+ warning +
This field is required
+
+
Characters left: {{ 4000 - locationRationaleText.textLength }}
+
+ +
+ +
+ Describe any infrastructure required to accommodate the tourism accommodation and the approximate area required + for that infrastructure. +
+ + + +
+ warning +
This field is required
+
+
Characters left: {{ 4000 - infrastructureText.textLength }}
+
+ +
+ +
Agri-tourism activities are defined in the Agricultural Land Reserve Use Regulation.
+ + Please refer to the + - warning -
This field is required
-
-
Characters left: {{ 4000 - residenceNecessityText.textLength }}
+ Non-Adhering Residential Use
+ page on the ALC website for more information + + + + +
+ warning +
This field is required
+
Characters left: {{ 4000 - agriTourismText.textLength }}
+
-
- - - - -
+ +
+ Residential structure is defined as a structure, whether used permanently or temporarily as a residence, + agri-tourism accommodation, or tourist accommodation. +
+ + + +
+ warning +
This field is required
+
+
Characters left: {{ 4000 - existingStructuresText.textLength }}
+
+ +
+ Proposal Map / Site Plan +
A visual representation of your proposal.
+ +
+ +
+ + Do you need to import any fill to construct or conduct the proposed non-adhering residential use? + +
Fill is any material brought onto the property, including gravel for construction.
+ + Yes - warning -
This field is required
-
-
Characters left: {{ 4000 - locationRationaleText.textLength }}
+ No + +
+ warning +
This field is required
+
+
+
+

Soil & Fill Components

+
- -
- Describe any infrastructure required to accommodate the tourism accommodation and the approximate area - required for that infrastructure. -
+ +
The Commission must approve any proposed fill. List all proposed types of fill.
- + -
+
warning -
This field is required
+
This field is required
-
Characters left: {{ 4000 - infrastructureText.textLength }}
+ Example: Aggregate, topsoil, structural fill, sand, gravel, etc +
Characters left: {{ 4000 - fillTypeToPlaceText.textLength }}
+
+
- -
Agri-tourism activities are defined in the Agricultural Land Reserve Use Regulation.
- - Please refer to the - - Non-Adhering Residential Use - page on the ALC website for more information - + -
+
warning -
This field is required
+
This field is required
-
Characters left: {{ 4000 - agriTourismText.textLength }}
+
Characters left: {{ 4000 - fillOriginToPlaceText.textLength }}
- +
- +
- -
- Residential structure is defined as a structure, whether used permanently or temporarily as a residence, - agri-tourism accommodation, or tourist accommodation. -
+ +
Length of time you anticipate it would take to complete the project
- + [formControl]="projectDuration" + placeholder="Type project duration" + /> -
+
warning -
This field is required
-
-
Characters left: {{ 4000 - existingStructuresText.textLength }}
-
- -
- Proposal Map / Site Plan -
A visual representation of your proposal.
- -
- -
- - Do you need to import any fill to construct or conduct the proposed non-adhering residential use? - -
Fill is any material brought onto the property, including gravel for construction.
- - Yes - No - -
- warning -
This field is required
-
-
- -
- - -
-

Soil & Fill Components

-
-
- -
The Commission must approve any proposed fill. List all proposed types of fill.
- - - -
- warning -
This field is required
-
- Example: Aggregate, topsoil, structural fill, sand, gravel, etc -
Characters left: {{ 4000 - fillTypeToPlaceText.textLength }}
-
-
- -
-
- - - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - fillOriginToPlaceText.textLength }}
-
-
- -
-
- -
Length of time you anticipate it would take to complete the project
- - - -
- warning -
This field is required
-
- Example: 30 years; or 3 months; or 5 days -
Characters left: {{ 500 - (projectDuration.value || '').length }}
+
This field is required
+ Example: 30 years; or 3 months; or 5 days +
Characters left: {{ 500 - (projectDuration.value || '').length }}
+
- -
- + +
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index f874a8c5a8..12abe44d45 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -6,10 +6,7 @@ import { Router } from '@angular/router'; import { takeUntil } from 'rxjs'; import { ApplicationDocumentDto } from '../../../../../services/application-document/application-document.dto'; import { ApplicationDocumentService } from '../../../../../services/application-document/application-document.service'; -import { - ApplicationSubmissionUpdateDto, - NaruSubtypeDto, -} from '../../../../../services/application-submission/application-submission.dto'; +import { ApplicationSubmissionUpdateDto } from '../../../../../services/application-submission/application-submission.dto'; import { ApplicationSubmissionService } from '../../../../../services/application-submission/application-submission.service'; import { CodeService } from '../../../../../services/code/code.service'; import { ToastService } from '../../../../../services/toast/toast.service'; @@ -18,7 +15,6 @@ import { FileHandle } from '../../../../../shared/file-drag-drop/drag-drop.direc import { EditApplicationSteps } from '../../edit-submission.component'; import { FilesStepComponent } from '../../files-step.partial'; import { SoilTableData } from '../../../../../shared/soil-table/soil-table.component'; -import { ChangeSubtypeConfirmationDialogComponent } from './change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component'; import { ConfirmationDialogService } from '../../../../../shared/confirmation-dialog/confirmation-dialog.service'; @Component({ @@ -31,8 +27,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, showProposalMapVirus = false; - previousSubtype: string | null = null; - subtype = new FormControl(null, [Validators.required]); purpose = new FormControl(null, [Validators.required]); floorArea = new FormControl(null, [Validators.required]); residenceNecessity = new FormControl(null, [Validators.required]); @@ -47,21 +41,21 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, disabled: true, value: null, }, - [Validators.required] + [Validators.required], ); fillOrigin = new FormControl( { disabled: true, value: null, }, - [Validators.required] + [Validators.required], ); projectDuration = new FormControl( { disabled: true, value: null, }, - [Validators.required] + [Validators.required], ); proposalMap: ApplicationDocumentDto[] = []; @@ -69,7 +63,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, fillTableDisabled = true; form = new FormGroup({ - subtype: this.subtype, purpose: this.purpose, floorArea: this.floorArea, residenceNecessity: this.residenceNecessity, @@ -85,7 +78,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, }); private submissionUuid = ''; - naruSubtypes: NaruSubtypeDto[] = []; constructor( private router: Router, @@ -94,20 +86,18 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, applicationDocumentService: ApplicationDocumentService, dialog: MatDialog, private confirmationDialogService: ConfirmationDialogService, - toastService: ToastService + toastService: ToastService, ) { super(applicationDocumentService, dialog, toastService); } ngOnInit(): void { - this.loadNaruSubtypes(); this.$applicationSubmission.pipe(takeUntil(this.$destroy)).subscribe((applicationSubmission) => { if (applicationSubmission) { this.fileId = applicationSubmission.fileNumber; this.submissionUuid = applicationSubmission.uuid; this.form.patchValue({ - subtype: applicationSubmission.naruSubtype?.code, existingStructures: applicationSubmission.naruExistingStructures, willImportFill: applicationSubmission.naruWillImportFill, fillType: applicationSubmission.naruFillType, @@ -123,7 +113,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, ? applicationSubmission.naruSleepingUnits.toString() : null, }); - this.previousSubtype = applicationSubmission.naruSubtype?.code ?? null; if (applicationSubmission.naruWillImportFill !== null) { this.onChangeFill(applicationSubmission.naruWillImportFill); @@ -159,23 +148,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, this.showProposalMapVirus = !res; } - onChangeSubtype($event: MatRadioChange) { - if (this.previousSubtype) { - this.dialog - .open(ChangeSubtypeConfirmationDialogComponent) - .beforeClosed() - .subscribe((didConfirm) => { - if (didConfirm) { - this.previousSubtype = $event.value; - } else { - this.subtype.setValue(this.previousSubtype); - } - }); - } else { - this.previousSubtype = $event.value; - } - } - onChangeFill(willImportFill: boolean) { const hasValues = this.projectDuration.value || @@ -232,7 +204,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, projectDuration, purpose, residenceNecessity, - subtype, sleepingUnits, agriTourism, } = this.form.getRawValue(); @@ -252,7 +223,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, naruProjectDuration: projectDuration, purpose: purpose, naruResidenceNecessity: residenceNecessity, - naruSubtypeCode: subtype, naruSleepingUnits: sleepingUnits ? parseFloat(sleepingUnits) : null, naruAgriTourism: agriTourism, }; @@ -262,11 +232,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, } } - private async loadNaruSubtypes() { - const subtypes = await this.codeService.loadCodes(); - this.naruSubtypes = subtypes.naruSubtypes; - } - markDirty() { this.form.markAsDirty(); } From 92685a8b46b8823ae86d27b7506f0ee1a3a8eac1 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:44:31 -0700 Subject: [PATCH 007/107] Remove NARU subtype from view/submit --- .../naru-details/naru-details.component.html | 371 ++++++++---------- 1 file changed, 174 insertions(+), 197 deletions(-) diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html index 54da0f349d..3dcc290dfc 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html @@ -1,228 +1,205 @@
-
Selected Subtype:
+
What is the purpose of the proposal?
- - {{ _applicationSubmission.naruSubtype.label }} - - + {{ _applicationSubmission.purpose }} +
- -
What is the purpose of the proposal?
-
- {{ _applicationSubmission.purpose }} - -
+
+ What is the total floor area (m2) of the proposed additional residence? +
+
+ {{ _applicationSubmission.naruFloorArea }} + m2 + +
- -
- What is the total floor area (m2) of the proposed additional residence? -
-
- {{ _applicationSubmission.naruFloorArea }} - m2 - -
+
+ Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or + long term. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} + +
-
- Describe the necessity for an additional residence for farm use and how it will support agriculture in the short - or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} - -
+
Describe the rationale for the proposed location of the additional residence.
+
+ {{ _applicationSubmission.naruLocationRationale }} + +
-
- Describe the rationale for the proposed location of the additional residence. -
-
- {{ _applicationSubmission.naruLocationRationale }} - -
+
+ Provide the total area (m2) and a description of infrastructure necessary to support the additional + residence. +
+
+ {{ _applicationSubmission.naruInfrastructure }} + +
-
- Provide the total area (m2) and a description of infrastructure necessary to support the additional - residence. -
-
- {{ _applicationSubmission.naruInfrastructure }} - -
-
+
+ What is the total floor area (m2) of the proposed principal residence? +
+
+ {{ _applicationSubmission.naruFloorArea }} + m2 + +
- -
- What is the total floor area (m2) of the proposed principal residence? -
-
- {{ _applicationSubmission.naruFloorArea }} - m2 - -
+
+ Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the + short or long term. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} + +
-
- Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the - short or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} - -
+
Describe the rationale for the proposed location of the principal residence.
+
+ {{ _applicationSubmission.naruLocationRationale }} + +
-
Describe the rationale for the proposed location of the principal residence.
-
- {{ _applicationSubmission.naruLocationRationale }} - -
+
+ Provide the total area (m2) and a description of infrastructure necessary to support the additional + residence. +
+
+ {{ _applicationSubmission.naruInfrastructure }} + +
-
- Provide the total area (m2) and a description of infrastructure necessary to support the additional - residence. -
-
- {{ _applicationSubmission.naruInfrastructure }} - -
-
- - -
What is the total floor area (m2) of the proposed accommodation?
-
- {{ _applicationSubmission.naruFloorArea }} - m2 - -
+
What is the total floor area (m2) of the proposed accommodation?
+
+ {{ _applicationSubmission.naruFloorArea }} + m2 + +
-
How many "sleeping units" in total are proposed?
-
- {{ _applicationSubmission.naruSleepingUnits }} - -
+
How many "sleeping units" in total are proposed?
+
+ {{ _applicationSubmission.naruSleepingUnits }} + +
-
- Describe how the proposal for tourism accommodation will support agriculture in the short or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} - -
+
+ Describe how the proposal for tourism accommodation will support agriculture in the short or long term. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} + +
-
- Describe the rationale for the proposed location of the tourism accommodation. -
-
- {{ _applicationSubmission.naruLocationRationale }} - -
+
Describe the rationale for the proposed location of the tourism accommodation.
+
+ {{ _applicationSubmission.naruLocationRationale }} + +
-
- Provide the total area (m2) and a description of infrastructure necessary to support the tourism - accommodation. -
-
- {{ _applicationSubmission.naruInfrastructure }} - -
+
+ Provide the total area (m2) and a description of infrastructure necessary to support the tourism + accommodation. +
+
+ {{ _applicationSubmission.naruInfrastructure }} + +
-
Describe any agri-tourism that is currently taking place on the property.
-
- {{ _applicationSubmission.naruAgriTourism }} - -
-
+
Describe any agri-tourism that is currently taking place on the property.
+
+ {{ _applicationSubmission.naruAgriTourism }} + +
-
- Describe the total floor area (m2), type, number, and occupancy of all residential structures currently - located on the property. -
+
+ Describe the total floor area (m2), type, number, and occupancy of all residential structures currently + located on the property. +
+
+ {{ _applicationSubmission.naruExistingStructures }} + +
+ +
Proposal Map / Site Plan
+ + +
+ Do you need to import any fill to construct or conduct the proposed non-adhering residential use? +
+
+ {{ + _applicationSubmission.naruWillImportFill ? 'Yes' : 'No' + }} + +
+ + +
Describe the type and amount of fill proposed to be placed.
- {{ _applicationSubmission.naruExistingStructures }} - + {{ _applicationSubmission.naruFillType }} +
-
Proposal Map / Site Plan
+
Briefly describe the origin and quality of fill.
- - {{ map.fileName }} - - + {{ _applicationSubmission.naruFillOrigin }} +
-
- Do you need to import any fill to construct or conduct the proposed non-adhering residential use? -
+
Placement of Fill Project Duration
- {{ - _applicationSubmission.naruWillImportFill ? 'Yes' : 'No' - }} - +
{{ _applicationSubmission.naruProjectDuration }}
+
- -
Describe the type and amount of fill proposed to be placed.
-
- {{ _applicationSubmission.naruFillType }} - -
- -
Briefly describe the origin and quality of fill.
-
- {{ _applicationSubmission.naruFillOrigin }} - +
+
+
Fill to be Placed
+ +
Volume
+
+ {{ _applicationSubmission.naruToPlaceVolume }} + m3 + +
+ +
Area
+
+ {{ _applicationSubmission.naruToPlaceArea }} + m2 + +
+ +
Maximum Depth
+
+ {{ _applicationSubmission.naruToPlaceMaximumDepth }} + m + +
+ +
Average Depth
+
+ {{ _applicationSubmission.naruToPlaceAverageDepth }} + m +
- -
Placement of Fill Project Duration
-
-
{{ _applicationSubmission.naruProjectDuration }}
- -
- -
-
-
Fill to be Placed
- -
Volume
-
- {{ _applicationSubmission.naruToPlaceVolume }} - m3 - -
- -
Area
-
- {{ _applicationSubmission.naruToPlaceArea }} - m2 - -
- -
Maximum Depth
-
- {{ _applicationSubmission.naruToPlaceMaximumDepth }} - m - -
- -
Average Depth
-
- {{ _applicationSubmission.naruToPlaceAverageDepth }} - m - -
-
- +
From ea8624cdd4a5281204525ae96999a9c660aae52d Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:45:13 -0700 Subject: [PATCH 008/107] Remove NARU subtype from PDF --- .../generate-submission-document.service.ts | 12 +++++------- .../submissions/naru-submission-template.docx | Bin 48807 -> 51052 bytes 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts b/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts index 5a6510448e..0f5323811c 100644 --- a/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts +++ b/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts @@ -254,11 +254,11 @@ export class GenerateSubmissionDocumentService { const otherDocuments = documents.filter( (e) => (!e.typeCode || - [ - DOCUMENT_TYPE.PHOTOGRAPH, - DOCUMENT_TYPE.PROFESSIONAL_REPORT, - DOCUMENT_TYPE.OTHER, - ].includes((e.typeCode ?? 'undefined') as DOCUMENT_TYPE)) && + [ + DOCUMENT_TYPE.PHOTOGRAPH, + DOCUMENT_TYPE.PROFESSIONAL_REPORT, + DOCUMENT_TYPE.OTHER, + ].includes((e.typeCode ?? 'undefined') as DOCUMENT_TYPE)) && e.document.source === DOCUMENT_SOURCE.APPLICANT, ); @@ -372,8 +372,6 @@ export class GenerateSubmissionDocumentService { private populateNaruData(pdfData: any, submission: ApplicationSubmission) { return { ...pdfData, - naruSubtypeLabel: submission.naruSubtype?.label, - naruSubtypeCode: submission.naruSubtypeCode, naruFloorArea: submission.naruFloorArea, naruResidenceNecessity: submission.naruResidenceNecessity, naruLocationRationale: submission.naruLocationRationale, diff --git a/services/templates/pdf/submissions/naru-submission-template.docx b/services/templates/pdf/submissions/naru-submission-template.docx index 9c2e0866a67cdb28176b079dd00c8c03f053cc67..827c7df0cf110cd8c135d02706a1da816660ea1c 100644 GIT binary patch delta 17600 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
&AY~qVMY(*fgkr+3;b-p));3I)1gtU?p6HXg zK=7eP1&QE0{(j_b6KJg)@Pd8)&_H>)5ovB%OX0Fuim}S%GR*(R>VHFJ-@7&O)a}U` zU2ZEl0tgWO(NMkSmh=~-03bXM|D#`&N*HadZZK{x#FQ?}gn*_Yzm|IqeMU`AY3*)1 zj_4Cp$c2r|d!KP(?&Y)@=!~T-e38u{pfdxZLlW}E5@?(eM{jlFC5vYmw8JvcCOY#i zI)d*gf_DSJih;m_4jY=J-C*ONTf~&ZWugWBX(4CR55a-)))=PfRO5ollti3s2Z=$%1SS|4IN}3h)I`hXyx)^-6Q6o z=Wzn+&~?^;h%8VgqqN1nxX>aUVqOd5uZx}Jr`MTMQQEy^q?;90=>s?pC1Gt4JxqrLzHNJ2XYfuFA~`ZYlgBMPw23L!d=`r!rD) zlRT0?w|G28{NPygyAZa2d29txWPeyC0FWHTUfM~Bn%%`nflI{@Z~-U)vL&2m7f-SM z<3n3_LztjSoJWQL6lY#EcmAfx36>XBruOlda&`}U=1B`YDW)xfTz`2*lrgG!*}00* zqp=kK?F<3*k$I(?$9W}7pBgDP%yWQ`plllPCZ#oqJBV#_Lf-?N%15kgh*I@W?jtQTQ|Pr|?XN=&l7@c|{^gW)=)WKWcxlST>~O zX~I*g?BsrX`|!SooB2w;Y0GI!(SURdCO+RhH+TLb2FB-Mk&B~?pkm-8=xKzw7F8P8 z&HqKsZ-JzkdH5wQ5!)@VFNTp^Byzv=l|vesyofkpd2b#V!=Sy zs81CUgQ-;d8Yfz*3JmDCPAE;cU`X|A{`HxFet?L3qIT3@K4OE#o~rpMI7Sv#H?I%} zHVQh`4*cO_5ysL}ZK!Uro?2(AJeF>|b3%tBJ1e zYGbyJGk-o&AZ0J~D5o;dJ^7&O`RK$&_gwbMcRAS&!cz6_zWH?6Z_8ErE+}(br@j2p z@+DI{MS#P%{D$X*0Lg~mO{!g6K&mc`krKe%0;D#4oiVeu(^;$W|D^m5Ztw=CU2a{LGYfcb)Y9W&B7PO7g7LMimxT24#Q_ zwG&i0KqoWYQbt#CJPngMHqyEGh|JDE*)+Yj&Gim1n_?<~MV^Qeqqw~7YoG+nxQub@@D&3~m&R_#hL3bV!`=JxA;;E{c_*ey|9e)m?PCbLJ!6tD!PWB zmm1k;DO--j*1=?VUc6R&RhWg>nEeDKm9=$eG4o0qRyv(cFa()oh~0QZdHV3;Q4GRd(B>Af@wE!K?Ud=qFcO*YxH z{Kkft(;LuGo-h+y=P>CTRshmm`QG^9HpNGJb5+%aU4+!y(2Ft{Oep5;t+A}*ZSoE* z;NRdQ^}s6CX|o50b=p+8TlR*HctnO}Cv%!T6VjZ_4-h^Y+O~Sl6K>4cX0AVzi7jIh z5b3izt~PC^VT~5fg#W^ChcasuD(b2hx}qatw5oFgv*)>X$Jf5!s{pd^(c%5k5hJ2I zo5#7I$dku={HpyorPLfO@Veh=?VV=vR%eLsU~hob-|1sp7S-wbb49>?1J_4F$HQt{ z(|tBHtQT-;@M2nq=0lczTYNw|f}zNSO(2-f;d|&HLcbsx0oLaA_cg2**ScinFX3sE zt*;Ep?BuYAba*;0TpDm^b#GT2>Xq9Vy@oueIQp8CU)80iem%DQ1-lf!-A%-m<_71xYka%EA936FdRa``|nflR@8G|grM;pv||^TvF{(XA>=rNAgibF)KHoZ z6D-AE>&as=Czu)hW{=!I4HuMiSS!^%Mvfx0G=+RkeH!-1Zb*Ug*_w@xy)Um3SmEE^ z1&X&_;=PAwGdn0hYj*|AChKl3KpjFs_L8DGb#ddl z$uIUhF*LF|EhKB{8dQu+hh>SijE^Z(2-r2Eh&K0Kv|%z)S=;n$nf=C^HtweiL*!vH zyU9>lxeBieNScJ*_)~^|uSTXiqKyR1l}>hs)x9-1*tr8&fUy;ol^xX;!g+UT?Q~99 z&|g`fMH3RTk)%xii3`jMn;v>Nc{B`t%^y-mZ^ucSbf5tO)g4xf_`mWfzX@W+0g(Wy zK!7uZOf4}(?9;veX2g>@(A}Bn`%uX>%L$h15!94bj?46!S=PxdlCOPG0`zgYo$7r- zrE)RGtq=H~u(FR!AbMua)NC`k)C0ONq8GHH!6W;$<}t}(Ba^lrA5jHQv#)ur->-s# z=Csnt4wfel4e^m@pFKN6d;ogDyJu>@4M9m7xEUmDIej#{O>#WzW&<-3I1-SLJ?M9N zgjn&8g%QXM&sf0ALjf~PDVz+i&BU4oxF&@^-$sgP`M5+#rv6S^QKmip25T~6%mqd4 zfW_VJ1qA>O;Q# zCWbub^I6}h7k3LjL5_zw;qlwbqg21WOXzNiN2N3q9q(wneY}t~i3Kej;r;WTTbE1< zkJLCxR)p(Jo}+Wu|I=AB#D^v}AsDLbi9|idZ`Eb8Tz(?L8Uaoa*@+xiz5R?m29r)DU=0+DTQ-9Aaf!8iK7pcl^GByfWIj{ z81Ap)HB?;E&6@_~08xevw0}?GWZ3^OfktycqX$(N+k5b2Hwx{DvEq%liP|dAi>zOm z#qHq`=sv3|Q=W5OYpma5D5FZYR<&79Skph^!#U1@Rh2}b%M!&eor9Uoy67)oFl4SE z8H)#XJhBp~8}AORc&=M$?Xnev!#DPC@!;>#`eK=Pfx0S_0J2AsP=557+rfmRZ87rG zu;=c1gGDPL{P77OE&>z6nOGUlm9sOGAN?Byy0i+E6m1{!P{ z;nCgJyV@R@;@9qw*|rQPgq%@Y(I>{aIIi!_bfeu~{pl!qFEq_-VSnb?P}Mbn`&-Ty zq)uVcW_UJ>1ANFyfUjhXA1n_}i0UpgL@CJvTR%wQGrV;?vsD#bP+fO;*$^D=FsZ`a zaQ9!zA!R>>7tS&lMltY9sFtX zVH2!J{harL&92YaN#$kDOGfco-WXe%B}EehDKQ8>#aAMp?U02M(&o{g6`~v4!=a(6 z%82&c=Xzh=flMnRvil>9zwc$M=b*h0+WqFj{jHDNe>pHdXwGYXGx;YYCZf*!Idk_v zNpJs?GzuVjpbPDPB)v)eUrAfG^GT;2A}L%c>csPPxMe+qKo4S~f#3?K{gbq*UwdM9 zVv3v}GWP5Dn*LfUVQ-H31wkgK-UJ8ijqeeQjQZ5EQLO*>hCLfIz*v%a*Q&+(`G_of*Lgz0>X6v|I zb%Hrtbm;1fgqyKMdu}cwsVsMyXs42TIh{B%x7y@01IJVrm}H+)h=xC!MD@h)9J7>w z8DPXQ6aVouygbmr1UkKr>_3u5Hsa5y?-w1RM>xzXTA^NLt$a+Dyp@kGF3IPskuSxiuSFtWXxzbTdFsw8CI4_{!?9nXiSelnT+e~%LI^0T)B**Kg+cK zrnTFgWNGdfJkhkET8KWrMFZ;_v*Hy87N406?)t2xLAMWFj~0u%U~Cmw+*N=qA{r`c z&!$UEYiYpCZ(h0M@37Ta&m61ahqnbHc(3%gjp~6M_#zwQuDG|4PSj~pwmPxGYv!Z4 z>ln+3$|tkOjfe4g?(WST(C)17o5(!rSMl3eeV8M{jMR!85v7jcs%06gs2t1hwMV_$$Kh#@x+v+!wAu4cPC%+pXsv zRrF-hoC`JExGrC%G()1pq}M0$p_mXMP(eEoI<`Q!;l5Z_*QV)Vrp*2x(Ct-O3!Cir z4dm~8+U(nZ_C>krttI@%YjfcJqX@mxyZ!-^Y{ZBTBsiMYg#i0UX?Oqt`G3D|S(+J{ znmM!l=jT>;x~{_}F?zr*)wPh8ze9a4r$RNQ`f7>(ZdvJHkfnr-BgPO3JoQ=Etuz&H z39GPgSTniCY(HCzl|&Z|Xn@EorXKx0XEOcAM~ra}USYGq5CBaI|G{a!g~uVXQiXZu ziwxauoyZuL_=U1%icMpg%ov^s9JO0;#ja?{@$?CtOo9DjUvjY4uhb%eUv;YQ4Y`Mo z_dJYhuGs%bNdd|BufIZ8UkU9i?~TTYk{&{7qM~xNwM~P9`D~He<0de59bMa4Ak$`L z)QM9hm29cHQOVdbIi1eB;Y2H+#!+Gk>XjloMqi@{C71&FyFKJ;SGGS7NOjyUcHyyQ z{mr+L=7nQzi1iY^aYz30VOMnP_Nz=n4O3swlgHv5CLBXgiJzJy_UN4eDIXQN8IT;| z{-Ko;V>KYG+|$Jn?zW{tK~)!ZT+iF!KgRZ_g$)6){v-;1xPY{&{QxP4CU)T8-Y7Y~ zVH|8yU8P_W+59sA3*%-Oi1()0cDt$eB73utHM%3^^DBNexaaWE5F@+E%kb=lrzy?} zw)`Km!)p>?g(&t=Y&oFZqm$M9TkFqk(|Z<7DBD_EnM_aDR44WOF&H2QyfTbKi447b zstoxb_;;sE{d?_D^-MX0id8DtI5|6h9BW)C!WN4Vv4I#ywRFtGpPD?@EinI)ov0z$N+<*krIorr z!63Yh7dwUpk=pt{#{3@dV0{zcT zY1-zQFn~r&4iN*i8Q3aew}~OKsYLQ_hlQxeV7F@{f-YHKyfk z`r1`mH(a>23I>;yhh@FIjl2PNzdfZRb*Z75^eemsh@PcjHGQpQ&>{dq^=)CK-eon! z0a~&niGi9eFx)D$ZXDF)bqR$$W=mJWmfZ6146!*+HWUkK#{E`>C26G%Bo*{>ItkDF zWJ^3=*$Jie)`}rcIA9XkOT?i&3$i|(Up=+}dx43`Hp;uf%$Lp3A-1xvWLP578Jby0 zHCaq?n>FGY-#|6j$U~rqc=(oPLRW54anK*fGs&^kcqX!l9Taj1ubvo_1!r(%uPL!R zGyaLdaCbO7%3aMV6p&h`q6o=e#J~0XQhK;}-90fgx5|bli6XisNKwr(M~yIXNUlCR zHErgn)b)XcR<#M%Gaht81|>*%BpAPOQovZR0+YOJdH-T@4hsUe61sW2^r83ymOBD# zA0%XVHcK&-A@Bt(wTq2}>H*LOX*R*|$fcd6F&%^&%t6GrjN8=1g?~MxqX$aFIoOn_ zf8uEeF2V(!>m!vT#8{KvzAUFfuTtgItdWMoiY;}DLYQhv8>N^EVonN`XbXF&I=C7k#dOt&n&5i2G<~o7*F5 zbNLZagCEq(ICwwF8XIdiX*~LJtOMG3_uDJ(T}feH5{feTwVkS`^Ah1PJrw#9bOVK! zH+~qp^4)=9_*MbdEXF@@jy{^}q$Lw7jPQUetmP>&^Z#srYSM*>;oO6goaAH@wY2cQ zZ?*8f+C;AIsZS8I-nS496ZI95W0*awcaX^gfBLAjziXL4vx6hO#cRaC2GUnh@}YkC zAG95Xx@=hnZ$wnZA!a#6l6iL7w0Roxu$}#`FDTMxpS7m?9A}D!m5IF`Fo*52C4>AbH`kpr ztAeuqHO}D6pg@0R``pgs^-{=^Bb{+F=Oou&4Iv=7l}i86dq1)&+!j0*T(z;>XNIAFzOKoi;$b;|9HnEN1EwYA%Wu}P>|<_2ZX#m~#dmlAR{l$ao;t#?=hVxiL7xM=7#GnC!lNMZ zw~1IE4}FX(eKeF$;Mlc9mVA1$?UHMRqi?_%!iPhS0@k6Wt3ZZ)(lK#hE|L7<<=dV+ z?o88>H$QxO^taC2-)~O)FQ}&Z98e6{l3Q0-#D7WH6d`%L0SBmIr?kn8{3U4hJ@DIO zT<&KD^{-~}EOum_NhC+Kwg$}2#A}uJTMu_sX!b&w%@P^8rBQ*ugu4PSM_ZGZ7HLIP zq!<{!7q6#z!O-#I@^9`J{I!Ek4Z$g+{G%0nrWg1T&b4*D{vBINoIy6B{rOce(PfH7 zZk$f~7!)B!Zj3Ak-K9tbR?2qkpqv5>N27k!%V!;r%_4> zd}u4_C6Aaaq;T~C(tt=1B<7s}ItjClj%>g#H4(_8C3z^4n)uPlJuMx#n3s6#s!(E= zY$-#&y>xyqVAIkG+l^OH<8VHC3%T*ZyRno<>lV~nhMpGWz#%c|CC1|yF&RAmabFv2 z!~dam%TQ$ngEU&aY8{j{)Tpv-{a#vHk@d&eb@>H;P4;FJ7hnB7D|?e*ln>9g>ER`z;@gNNmfy7T_$%O>4i zsI^x%Lpf{aA_IjJ%qO$-QYJ2%Ui0w2;`s% zan2+Y!(h!@5v!AWcyBwn`aY1j)c86o{K~En@rb~0uG|Nd>z(onS*I0cY38xiUe#VS zStWh%l3TAfi9X&Q_Vp36>= z_MDECXWxcsHH>X~=!Cq!_O!u+Y?OH2mTO8ak={vb?Zbsic*WgPly!M=m(f7Ek2?C&i9i+SH6eOiR$FS3-y9){KWo+%luAx)xOwf&XLCj zD=Ne?z6S+G=G;|3&3`4Zr$^f)!wGz_ye1^ zC5CA#iI1(`2Yq_p<9ahu|4~zhx6flIeW9%jQ`co~Iijszf4^!=r>wZ^(GSWCLs#_u zQJK--_5A(I{fkbWJQ!cIu6*7Xiz_#(m4!b2PQ0Wu#oKlRXX`E1#H_o@`qQ5p8V2+C zFFJa{zpCH!1wyqUnGoQkg-_ptP zhP|Qp_1+CCCzf@w#6Oqd7i@dp?RWPYx2Ig#Q%}qL6>bNo1%zxl^dyn# zL0g@#!C_XD?C6l+#`T?who67!{gk>@gLiduBb~r8`S~tC zrVVD3&3Eg`ppL--b-;n8C2&MeMFw?511<|>sM`R?H~Umbn>Bg=9t~+&D;e0Q1RV#00K5w)Gwroys#`kQajzXy@2bg-d##y%@0eV$ zL2UBW-2yU*iV!qrhzxReO@6ph1gr>N8UROPP>o-;ce2AiWf^eV1Qr*UfeJuwlWp0yZ5v&-ZFIT1Z1XGIwr$(CtIM`+-Tv>IxpUXVW3J3R4`=U)9gz{2 zF`%ViAax%QfTJ0{Fd0f9AUskKAY>pQAU8Wl6Gjs|V;37!TW1D$8|%y87mh_-Dc`-w z9|%D|&T6u)^w4BPg_WM|uG|Ah_o`~MLqj8s_;NJ%2*-a`^gW$PirnA#o|!zY(QIFSr}I?Z_#&WVrPLQrI}ef0CTGA(;4Gk zD}j=8xIA}iCLuF(4snJc!P+wf2<($?8bx5t>78#f@}~Q<2;~H@p|H;OKyW%Ko9B4E z6QF63WI*ckl4<{;4B+96uOt9yaVoxXCBFisL zSh7txEKO*#O~~o9ct+cm!WnuzmP?rK3izI~o&BTt{K5Mb4kO=9(uGi1=U&7DtQB@Q z@cM#4U0_E~K6Pke1%19omktrn`&&|KJA0}T;I7>Lvv}{5@+kG@>!R6%Ec)S-;wvuz z+k>v8N4GuwOx=0!(n*4$XKAK|H18<8|H&YmddYM_6TRJ~1J%Bx2K3Tsezz$C^HOCg zxAZ5~QWJWU@-6xLk5c;m77FpINT%%2eY8(P-P^R7^dGeTN<=rBjOKx0uY_4)AWsrM zz-xa_^ssP<`Z(8vMswyk^h=dGEO)VbT9&<9oxK9Wruh`yVhG% z+IBN)>)brH*9vVH52L<14h6G$s!$i&3zrV<&Es>O^pjP})M9eeEtACwt*4Jch&-&8 z+L110)Mwq0cl(3#L)belW4y(&X=g_(a(!-7_$uF~=;RxevI)BgQ!3p(#7udtS3 ztv{MGHsT)PW3)Fx&-5}*4U#iFGOK6r$XAlxSbG7JaV9;Ahjga3CWtv1!`;IWaG3Ar z`22m+C_T3(ZA-alc6rCuK9O+vM~<%fx6FG{>Df@^S0`CwiJ_i%ar&=4v*Y_qBaac7 zK<&Xjy6AvPvXkD4zi0ffNI|V`Y?!B_9SG(jB~5F4h@#;?UQF}~-J>RYS)=MmVxIw+ zV&j99mOc^$HpsisD_Y3}CGbV#0Hlc+^)09p!*a5XkqXj_s?Ei57QO{ehR66XQ)~rF zi-gdsv(Gx&l1%cZv&Tep{>aIdGuB*N+xt9sMo=-(rl`NQ^u8%Z96{fvGE|^{ZH|lG zHXOsF+@!u>0a^R8?I=^{p*Raf`F)QT>O@QIMY}X2{nK*0nDTGdS|MP1s=`3#Z%W{D6@PBmin77#<(%hRe#;}%E5G>bR10{LhADJg7|fwL6wQp#WtI> zaPlHnoUcFC=qFuhmgt-gp!0OCYkK{rdDO~TL)1o_uF&RHxU-6zB6Af^ zlvWuU_IkneNNyP>RomBetWbH+6{v?udfFkEmTB4F>>yJcX(aa$uyIqxHY~CXZQ=Qx z*}ali!3YC}i@bZ1nGO(+E9dTb2xtTXX7V>YW#on(Q*;h(yjLfj5s|e(Y;cKXZ($x4E^sM$ic^B(Pj8bWmorBtlP@kl7sMvYT z{M5%W77n9FLhE+^t&E*J4n$1c=X;{M9$ZE2mSnMQoGUG6pFNF*Wz3OQXUPoazEDc_ zO^9NP7Tzg*K2LpfaY+x~SHJaS)zXz%&VL_sdDO`8gH#^{ltG+Y+@&d_5N6QdYSEwClO~`Ip6Mad`y*8-vrNEV`A( z0Ev7cvdH~7c}jov?K;Zi4`1p}ubYM5C*LeYSfWglYhq`p*BxU$J`Ca@2B;&HCfBNF z52C^<*Zo=lWu*;{CoV*{4Fd`Xq9LX3zC_T4P~aOT-ts%TqeKp@4pfW&3R6P7rW&RI zn{?hAK;31OL+GzpM`xTp1_EZBpPFU$&2}EE2nCW-g~Gy>FDOAAVr=6p;XsGZjq~x& zuc@q>2g=_^QMW{yuj|=p04n!5TOyv~^2(jS$-4-Ah%_A>>iPy#a+<;O+h3 zny^ETXeWOV6z$f175+hojxuP8Q@QG2ebSSq zcyhtxgS{QGA#GZoHz4{*n?o6q;23H3G}?m%B8(l%`GC-sDioo`(;kYAt%%T4#SYPm zPYF-eQ*En7d4f)0950}Xe2eAY6T*qTMGYQm_(AJU5o^n?FnyaR*H)KD$IB2%)`}eo zaIg|G@aQHmrU;`@Ow0HXcq;d;{!X6*v1ardS^pb8A-4>DeU8N-F?Oy}`zXcoXtuVJ zJ!*}Q!+k_Au0p6HGH#jxKV~`!N9@*0#NxY?@X)#?e>0H(ic%?ozQ@FJ6-0*LCbi_u zVxm9o$L#gxJ7I+d-C7*)M3%!b6Wk*XumwqZ^Ftn8*Y(}5XHYsWf@fkq4Sr)#BDa{k z^J!rEc#ddCEn4c2y&2;0`=ZG@W=QgxHQHoS@CX&9m7x+x_q1zSl0#ImnZ9z|^ho#| zUNtAKL%E7wQB6*$BOjh8;VXH%*o=ajy$yri(_&sUt22JWD||I})`{aTM_~dF5HYJC zaH7m{?p;=1GT;<^EeJe}&no=lqJoEww2aphc$i#}7Z}@6DTYhe0(#RZ1i___Xw14gQnrY6Pn;wBAn%dwC0AxG{+5{Al zXGil^7Bi>Zp2?IeEot)Yic`S*^Hr$*<|j68w_Sh`mVtbo0 zQXsyl)3^8LZU!Ezz=;RvGfVEOI#`^uQm@wgJFReTnIHA~7nOq(z!N;v=wxW|sz2yH zUkYu=F3soTVuf?}YACYQjziz&T=0lUt^gC%wen!YLu`m3rTsF;lHx6b+%P;%9aK5smX4z^(;0k``8u!HBD+3mL z+3RXuaLtB^0%e#Z0D(w*Zi5aZ!q0rOLKN!cH##P$R^#n_=|zw7mfjY*114@RC#)AO zI?b3PQC*O7Y=NrTaj+6+aYO#9PjZEpBt=76xrF0PBApz|aRwm$KN5Jg%D|OsXTq|% zZX4T}Tawe`H^CCY;LuQvtG)N}3TO&{7r*PsK*r7O9PTn;V}>NKM92>~hTs2Wxsp?> zaat2C>53quK$}`d##Tc@&M9$j!d*pn!#-++9RmbHq@T$2k1jS+gAL*D#&ex?cS+Ki zYFMk?(+b42`jyfJoix9ON)dB{E>nL+Po3fqSmU||aGnKzo+SMVOPA&n%VeZ?Q}^HXImBlj?8Vj0!3?-mH)hcCfX4*MgAhaU?>(`g^3>ZC)aG znM zYxhe}eY#NmH;E)G-M;!M+ACHjyhBi#Oo@M9HQbD7g)khrFmt54iR>euQfgdzTghe{ zc~IX#WBm+rAwzkHg>kzB_aZ`FGn;>%k+2SCzUx1-OT=~rSucWN!F9?7>}LBU{VWtR zq$2^^G;w(uB8-R&+D7JiuE9KfV!LW)Y|i8caHSZ}SqgiO_VtHZfSc%mgX+^|&+>rN zm^e(=8Zu;$@Lw&Z*dp@BX;3KMpu&&u(?mhhs?KOII2NG7|46#YLI90-aJTV9v2ATZG zjeeqIqGHeuq|{6YoioHI-GHi#;SWzss)hHaVq@)dNc&LOT;R`OyhQp8b-P%d|D8Br zZP*eyIl1MrQT@q!r<**Hl3ML!qIX(VgUsAOdr^S`ZCDv08>X?#R_tE4Zd)%?GXmJ( zej0(c4VHS-%RPY#c0P|ST;&aUNx#X7Vkg?^Y*;iCL+ox+-M<(u#zwvt^RxD2xDx1I%-S? zL$a!zIbeC|r!M2`04Kr;U;i_6`U*H2;KAqy3d##c^Y=$ygl!CcH^vkLmLxW}zX0c^ z;P_4VUMN1wKsd-X6?v&tkQ0lq=z~5Lj+SG! zp@^X5Tr~k=SXh`<11zEQEjol#+)*h9n+k^R51YV6)U>q0?0VhklYHvdH%R@qvmN#q! znD$u59yW!TEsnzb2-zuecDK*9YZq6KNz<7yKXgd#cFu>ibF^4rs4uJ3xM^nx>}^s~E&U-hc$$AV8k@+oJ8ym8HBlXX%ekKUZ(SJe?>g$F2JqHVrI*zS)obOaoc zkW9Y5UfAfDJ0foON1#q_cZjhh!Hb~wql|9lPh|#oCs$D6u+Y0df&->%Rm&kS4VDW= zgOQTWp~BmmCC(i}bq2#vLuqeN<{P890(?)J8$) z0dJ9+{M}e4jCk5U??a0=xorqKmx?Q-q@bhm;ZBc!dbM>rC4bX@P(Qu8S$m2pHky#@ zL#tg0LF{lwTFa&kc>%e}h{5xGP9!pA3^&;doHg0i-AsbjhngI&o8Z_lMJ3CYaUI3YlM|Hh>N!@_U_#BrrO0P!j@lfui$on8iiGWPAxbPM|Ir{e zw)w^7F*L#{(X(BRsN<1@#fRbra71EN0>y_Og3S>>?psyGeMpaQ87I`8F!l&r4?q?1uwy)Ri729f zGXlg=cIv}Ov8CFKF>U(vv4bYBDRew?(_Ym4$5P?wn+;W{gojL!pOcv_Js>R zY`r-t%voCo0Byb8Y`tkR=R_P0A(|;q2tO&Q5~Ftz41D(+G(e@#rSB?Ku97I~%X~(c z*_E*9HHq79;aOg7je$Rs-%e4`GU3PQcbdotd43r;1C%@d{ zF7b8y-FxpE-~1r_2RPpfwI1dL(LkrJru2`VLFm0Upn9(ihe2J?__58`o=Np*G4fI; zL7}*k&g1~1c~1;uSuHJi))r&J)VF1NAXt3ki5A(!VDt=yD~0@DGIHVLvylLA!v3Vc zOz{wW|L*eE8kqc7ru*jGLw%!{-!(HhS~5~z9GtepP}3-Qlq;&espu=>2^$0=Y5}UQ z+OlOCV5;U#JK!%#3Ne=vCTDQDMs-}5#$O!q zt0tP=&?Yv<_m>2?-bpow$)z?!U#M%{El)Izzz77YX-R8i=~zd#VLLUHvVglU zpk(j5u+X)3&-O@F`>Ik2bdnrlSn`F?7(CdBy931i?|LQ$eFlXAsLDJpkC$cQn#AIx z^i_1^&BtMF74NrHkhy+RvLYktFSN=jZb# z#4(4SZv`7rWa!jTYn_dI65kkIvhUj5iQ_{g4?~RzVe<&V36d!n0iq9G9|7OS(mX`D~$-$`gc^r}BxdCSCVcE=)EBB-cW9 zl?aq!%fR|=w<8pJOqE6QO+M&GF?HV5P7KG;883nUuCT#Tc0r#nJUmj)QM6e!&QPqL zhm%`HEiE?s2`t!sTo-uaJChY=d6ObuS7@lp<1>d`YdEufp8qHiy{K2Xm}i3Z(Fv!i zgBr=Z$JR>&-3~k+<)*~XmFBevY}$Ejoeral=yI^*jt%1MGg_i9JT>T|k?9EOF>L-* zjK!P$@GRq+^glK9CkM{KyeBxIV;BdY`mePqB5y!b2Y+5cnm; zFdO8DuZCMgOw%tJGe<^>vFq*x;K>RyUODx{`Fg}}4|IjaQdcDdAAETL3Kda!sqhSi zsTyg_LkI0abUYZI+eOE;QI5414A=0>5~x{2FU8Ks=5J$BhH>lomCcmOitUj z9#A)W4_IOJa~dy^-D~n&443Iatqdg%KW>nAwuh2ULp~OL>X@o=q^=M(TgJrN84V(C z78h!$bs)}b%O=nO`V$}kZH&lQo*}-L&~JR8cA?*MxG)Qz*=;qoPA@p6i$4!kZJVkkNt*=#NZ50v!k9)6?V)U8 z&1K!A-P?oC6a1b{2nPY&pbOt0l2$YzJge3AxPbthH;=!X-j4(B+(e5mgW`GzFA#xn zY#cliK`_|(SUpAlgxf(qCa+@dgcx7eoWMvVDgB`G2oo2p!6gu)Sr>PE=Pct9od{hE zHSzH_WSxEJcVwf0z0(odvntbkcvvfq^2h|nl--anMC}^V= z05qL>n}xO|7s$Ws%>tr9aBvXcL<;FjZ=gJ?7e&0aO>fT+3SS_LfQAjPQOO$D^F_kNnKBM*i zM%{QcQCDO8$%m<4Go?{v~8eIJtT9{D(h zx~WK%bj%P*M7Oox+4n#v!h4K!n7=Ta1h=R8Eb1^enHr>nVOx2QB1a6uC z;PWl|Ztd%;Ge0b-`gXJdy$;w0|3Dsfeq9r&!A2{L&9{^zJzz6-0es}IX|Q*%F?F`t zlHBeE)$8np)vM`k3t?tV#knF@*n#;6Egqh6f7v+>PQUb`;1ohoGa1n$c}+QD=VA>} zUal9wS?F(ixum9UMq8d_x0|15aqC!^%im zU~8rg@DpVB8Jo#hfhxY1;DrRzNB=E6SY3W(R3Kul zi1#AvEDEi9WH=f+P$b3A1>DCYs(c#i0BhG@T(!u39hTu~I7|e3A6-BTM<6z%b%CZD zA{>qxmy7s*R-?{9S{YU0_~)Ua`mtT9cWKFbs*W2W+#|w#4?wfY+3KTVgNs-c4G?$$ zGIMKQwh`AT1Hsp>z8PjsI2u7$Hm{R8V?sIzc1Yx4ykC*RyVdcno)1K|4Tt7YKC#M5iX+K^4(voYqV`Cg!6Qq8*vSQ?t4O}6 zhP`>V2t6hfUcY&tjDF&qY3K%wmu1n2m&X$r@0$f$IKfDzK(hMHg zDX_FEEHa}XKHK8-O0aa6ESuu$jyrBge?WnNets^0>o^s1VSLjj<#t$kE$kzdOW8Rr zx>mgJOR+2>>U`w+;Wb9bhsu=l={)Ekw@xwYNEwW};!?`{#ff@^MI(XCygg!9%FM$HT~o(oqbTXBnb`T6RBx0#d1VL(KPR66?prduNu@>(rxYC8*nT33jq#*e9GuN_Lbz% zVPB8M{T*1cl+u+UfRx|UC*i>;e)p(bKW`Gui;Ui0d#PaZgeq#0cAYd_#WOp?qAq@I zL@Rv`LKUOvTpN}y&>4tAJ}LArgTi+S-s;~LQ>>%l#8F+4(6i9+4*sidhCMyMSAA#I zgIzANGtQe!P~I5I{!xHNZR`VeyRS}u)iv|Q3Kx2q4TF;MNhqib98FV924CbP$K1BLh6S+Fug53n{A_+Tkd9d~ z9X{oc46mX5>bA#JM)z|XSn5XC%`p3#03=RH-||{)F+f)9<*TL3R#Gz z;vlyYJQN#-ElT|(bTYA>_;EqanAdK1VkY z8}mCs9scQ)u!0L*a=(h7%~%R){)=PCB9s{yP9g23a^+nzVe=903sMMXNpN}!CrYM~ zT~SlkZ@~T~d@CCn+$6X3Ab2ASmDXA`Ny#rQWJ!i#)0FwYCQ8*Bryaqn`4}xR`TJUr zhJScD?dj{qv18JqdqzEkOr3f_CPd`mKiXt{ReNfzO3o_esJCX4dg*6`%&h`ZbY)(y zWuTjJW+!Dh!1+)NOIq~xqG#m=)GA;XPG?K>Fafy$zJE{ouQc**)NaLc?@GCkEahgs zGtTuHUk`CA)Hk=l^paXtu5$Y~T-sNU_6gpi%bF&7h{Ma>LZr?C`_QRN;YGo`yr}qNo_oHxx2WAE=0@KA>TpAZirMP8Qo*8l7 zQvpd`ZqzEZExwg4hnZHI(9il>c=fd!kBKo#zkj*azJ6J=sa!AHg=i9ZKnf_RefFhf z7Q}eRaeVTs&3m7E1zhnwJmfe#q?Usc(!@aiZ8{i7xN*K%Zw>Y~HWGPM2v$Qvg;}g+mB!pRqFe zoba13RGF@a^t31hA4oK3060l8tJp99y?@4gTiplz=icDWk79m;nq1fk2qG zgo(k080AJ|#6;J9H{cwG_sj2)>j%{GN%F*Pp=kx@-67-nHvuoCQXO3=oGNrD%_{m` zomGT6Ba9|IYEGP-_CUbb+8xsUx7o${rk@Zq=R7_-&W5*8(^ zmK}LABze`2`!uni`p_I}8-{=6=E%L=v5?*(PZzf?c<35fWaTwEu_Ef83If*5VM2H* z{dmDyd#B)(u$iuj&N2##lzA&r z;?9IK>Y~VO3K-0ql?~So_aa8*e&;EZu_W6&70TvXEA&=P4(hEg(EC zN5TqLG&6P*)C}Pmn9iphZ#AqB?F^evD3rXaqhPfEz|L*jw@$5DPXo}abkw@b0^;DG z8-cVKWK_rBVrJVbfV0EzNvFx5sM>yFAvM*mOXG73(1>Ap3bD}00h~w2WZ z;Q`@8khJpPjiz9S!&Y?hqjZYz;))}&@v${R{(<~U2-!hMbxY36cQ-UPK5fJ+h4BjzCSJ{IXLoY&2bw?jt$lf3D&f>^9WR$jg#VM9KEkMM=;`-RRe@c~J~$LiTXC zMRLPe1w3*h4X*}tvHg$7DxOeuPeW;Uk@;}1r&R9Zc2i_~f6SXje^rzMpYo6lv4RnLh-_r%zQ4EWa)=fc;jH)MOqli(WgWTh z)@$rt>d}0DX>`}EwoRDsSm5o^V6X27!n>hf5i2m1#ZoRqocU;n*AjOF+I&>}&vevZ z7z0@I%ggtp0SBN>=9kIJ*&D3G3;ugn`(i~Rb!NDS3!mckHYl}T>SRNm@;bC`&0B)t z(uj!OA9EU9yI^pT!@`8~FYf9yWQ4Pk7AMX{nJw_3zsb%aB_!ApxZtkEWppH}<`=8z zU6tiFF8U>u{fE*=xpfEqD`2ZXzBadG)9=MmZ6RtbX#U)Q(Whj$#`Ds` z+qQJlm+K?y8dUXBE(zd0X&|E7C)x|3**|w0ODnYG9lbN|i6JV~Is(b$&h<1ge3W_a zSgN9(ruSJpe?1?Z0jVpo8PFhw<(^`Vbi|>l0J6Bn{0FGrXn*j3PQs|~=d>qM=JKgy zFf>yHNA2h9pDzw=0uF%^i`q*HH%RbV4C0DTOKb}w3Gv)aF*{y9$D=?`p~f)yk||Lb zM8wtw4kg$%DoU_xEW+RYhz|}p0+$1a6XZ^TB`{`>5V0u{>$EP7%_0Vy;m~Qe_`&B# z0kldLnI#3ohRoZhIcqc2;>a^Iw_s+Msm8W{BwQFtsd-|~uFOi6@Sk&#lsB({I)54X zy3909?{_x9bET9%cFy=NS6tsB*H6-pW$}qx)?;f7rznVbR5eu7piL9pG;l9Aj9GXqfi5UNi=iu^N*6X@qP1G~ePSUbD_Z#+W&VsmLTnX~44M z`x$XSZm_Do=e0{MIMQb<7k^7Fi+S$-NF?ONXzbw#2Lad6qs!|}l;tJ_Y{YC3A%)z~ zKH<~tnAK-DHjmS+vn_9{Z9M~P${IC6(DiY5`9O}A)+~-aZ?j>J0Ds4(`(r=6Iv2vi=j%F;EK!~-+GwcTM44}tYNBqgkh!e6 zuO`DT9XM1HiJ(A|pmv^GsQ7i8&xRExGj^v36vIn>lC9ipT=7-eWK+AL2-=yZe~GV9 zld?nkt{1x16ec|n7!K-Pp`+ik54Z@13@$;|?KQrm1{Q*4B5gVtEij>jfgo{l)j_yO zQzt*^piLP(?|a9$+LbWI@uRv3h8iixZ>hhBkddH>_}H7^6IPFekEyRo7(uZRfGkD7 z9>BemN6eL}xRL&2A!nRh*u8Z0WMcP=PgBg112*J4i@BB=AfJEkh|+@>r20w^97(i{ zH-2gqToF(ie1zcnifzF}aK4%*HIW|jKl9v_a zdI|oEGE-|;j?^)0d{jy^39 zQz(SY3d~B)^Y>37w(I;mGJ2w7b$#r_xzU7+@HZV_*BQNkaN5|t-Pnc1Y&UMq?AP$| zhIQwMK3?xxUpEok_vsU1A`ve-IIpgWeox{rUIM_l?FQ37B!j;r1Y9GKdxVn@A!LA2 zJJM!617k(BgoVLMPE2mNQCT^VuEZtD_#jy%{EVg(n-z6_fX;T~FNa9g-w$T?y_6BL zm>PB71AaVn=zL~1>6Ei%gfzb6aejQio+h{W^GVPbln;P~(@bi|CT6SDpoK$Bl8l`O zu>tc7W6|Bj38d|7Ov3Ye=V)R=SV?@veFDI5$F3krpnoC$yLmyC)g3Cy+Z1}QmV!9=4 zxh3pkHJ`$fMGFcz-K>1vXO$&Nb6qsoI&C6Uxb2)WN(_i(jIJrvT%D z9k0JB_HF%FBZb0F7@KuwcjdrJkaa{&CzAz#=x8BGY+QK|F4EQ6Pn>CD2G{#S`2K_B z86XR0C}cS+9^HdOGrGieHr$ZPStxG$7Oue(DIAHSLA)%^Hd2Ae)^%To@*XR#vXl{i z2``Jui*27%I0LnD4?U)-lPHgAKwUt^q||)_y7ECQ9$kRy1CdVGJ=i8HL$=if17Fg? zb=7Z5dR~p@PnVDE<117z)jnob!|3WIezFz#*Cik>pCA{||sxI(q z-0o^$d6=E3v)N=quvmvzJc;Q!)U92TRx?)euTajqy{$0M0JZ-zr-ppR!VF$YahmQhK4dJ=x>378c z02#oP&|YUutZ6g$64=g=K5CX@%+F;1YG zIC4D$06GLRKXU3dm9uEZQ@+Eo|Ka`VZg81czU*00C*w6PzBpGia~KLcfysYb)V?5D z373ahny7ireqc_>BBFo@?!Hx)b|A{X*tUMt_#l5UF35ztFxUu>RujFetExIlt==P>QUSZF}4 zmKMn_7$;q1N&Z~=mWxaMrG*l=1ZoM^_SE8aG1HH|zn`siM?@n8=7Z8I}H z&=$O~=;8#z3ilJnq@qlsVH=J3*qKozs`Yu1gD8h}ASU}YnfCV#pyfuUVpjXAA!KAn z!pnT(qJPT)qHf~Q8WZk;-G$_UO#9~W zdiPxRNkvL;0IfDezysGHjzHfX!gawJ36!uv>cGzQuQSs(KeiAnqAv*4J?I;ZX!B_f z_tbTxAwKZ0%9&0HfR}WCg?sEC;a#xdL{seM7^1Qi`wm45(z&qA4y^@z6s0amnxU~B z+~_dgL!)w3fVATUMXO1fX#RR!fk*IYh&>l!u5GsjUG#>MBdMGWi+jI_wMK5b3673< zx4v^jHUHl^UWb0)&i0l$D!3_~Hm2I|e<=U?S1MGL0R=-#q~nE7JQ+f2G!|~x128!3 zAcFw`F~b4<&uoE{sk5_%t(nt*$k3#|W4F(RHT|uG>k|T3KA` zDMG$1Ms%>?5rEQVk2^Lr!IrY4*@uf$7`*mtBJW}=0H;ecOafW zksTSRrf7exPrceWX31FPg?8M^#9RuSz0;iw%S1_r)J&;RbX)n6yEj6L4#I1 z{+Uv<%=ptY(MpRw3+jM(B!VeS2&Ox~8NvF~Yz=4=ETNPTAFvt8iABBSDeXPEKcq4jV7Sstxs zAsDrgGSg_9)1-DZaVZSz`cIh*Zdn@e=tC`aWgKGoH$VY`n}LB$U2d1EAr~OP__XsrY4a(wB#aZ0Y(VOmcLv(xp3azD zeDPo`S)*q7OD1pO4!L%Mmen~!k=SEwRf%oO^vcQ`J#L}`(RP%NWKeQ|-`4^+M`#Kwe2?%}zU zBW{7BiFl((8kCxA<@I&biD5;9bCy>`LDhm{cno%?KC~>%bYRHxkdI%~3>48qL{yjs zKz%y4p?tNa3;1$u#%3sH!s++S59KBBC})0~dvVE9mVa!YD)$>NR?WhCtyJfyJYV@G z5J^58ZU~#g-1sCC^`Qq{7$X!vNgjD7J7Ogt>~P^D#wwU3TuQfszJ83=6s;;%Vo72cKyi8v?0`XAezcG!!a`08fCQfey%gv50zPd9g?a&cXZEoTWu{{G*3=p` zl;X+yMhGQm&srQ?0!nb94XabRt3&MU3MocSEV|mIiS_PG!Ad~M{)=qU3FgJqM*r{q z%Kg=byoe+cE-o(s2@Tk>?-{eH36ZmCmcdq~4pj28+=aC|Tj|58M^2MDnkCrkUfzF3FzX0rKzouSc%p8h*} zGbCQ!$wew+IAmv{0QFt?>51~^HSJ|Yu4hsb^=TKrdUWMp?Ijm4%u(0Sy6gR6cO0=s z^IAD@wYy%G)x4E*hHWWgL;`NdYAm%D1s@K^(e`+p>9iTv1{>!^mBucp2#~I=>fG&soVu?&m zH8hzJJLqa*mp#gUZ`IA7lA8z`N=U$6IlsrkfuiwEwB*=Lh*YB@!&4sxnq_KGxl8P4 zLzViFEFW(e2B|&>E-Y6^9tk7hv&t`;{gMYcNH&Q?U!xMf4jX7?8<$?J!0)X(rC)5N z=<<8Zg#!vGlMs0Q(C?lcaO%7dUgrS|Xu|KR@{dMOhb@2~a62?-)y&f7k~FkepuQDP z3+wv^u5;_gOaWU{jo)?her)c<26@AJBh0$;SSsgnCmtXCqo)24ZH9&iB_>8IOF#kS zyI2eTr_Jw=P2~B*l!npRt%Y}Cmo5X$`?ko(kon!&-EHsx{UeF!gHf>m-yCaV)u23x z8AIadAj5xE$QXyvL2j86#fQlLtI%LKgbugE`d`zornV-DN<-Lq|2uX2clm$W6i4Fl z5HH9qcOvL8F9?y0jEncb!`%N|FkGKFJVJ)||G57z7XD{K_kV1?DG_{>6z~5c@t<>8 Y{I}shDd+!KdTXNSC<%me$A6ao4^v}dod5s; From 889d2ed3381fde63e2243bfc47d4515f7dd6abf9 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:45:37 -0700 Subject: [PATCH 009/107] Remove NARU subtype from public search --- .../naru-details/naru-details.component.html | 196 ++++++++---------- 1 file changed, 91 insertions(+), 105 deletions(-) diff --git a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html index d19c9a205e..97ee66713b 100644 --- a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html @@ -1,128 +1,114 @@
-
Selected Subtype:
-
- - {{ applicationSubmission.naruSubtype.label }} - - -
-
What is the purpose of the proposal?
{{ applicationSubmission.purpose }}
- -
- What is the total floor area (m2) of the proposed additional residence? -
-
- {{ applicationSubmission.naruFloorArea }} m2 - -
+
+ What is the total floor area (m2) of the proposed additional residence? +
+
+ {{ applicationSubmission.naruFloorArea }} m2 + +
-
- Describe the necessity for an additional residence for farm use and how it will support agriculture in the short - or long term. -
-
- {{ applicationSubmission.naruResidenceNecessity }} - -
+
+ Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or + long term. +
+
+ {{ applicationSubmission.naruResidenceNecessity }} + +
-
Describe the rationale for the proposed location of the additional residence.
-
- {{ applicationSubmission.naruLocationRationale }} - -
+
Describe the rationale for the proposed location of the additional residence.
+
+ {{ applicationSubmission.naruLocationRationale }} + +
-
- Provide the total area (m2) and a description of infrastructure necessary to support the additional - residence. -
-
- {{ applicationSubmission.naruInfrastructure }} - -
-
+
+ Provide the total area (m2) and a description of infrastructure necessary to support the additional + residence. +
+
+ {{ applicationSubmission.naruInfrastructure }} + +
- -
- What is the total floor area (m2) of the proposed principal residence? -
-
- {{ applicationSubmission.naruFloorArea }} m2 - -
+
+ What is the total floor area (m2) of the proposed principal residence? +
+
+ {{ applicationSubmission.naruFloorArea }} m2 + +
-
- Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the - short or long term. -
-
- {{ applicationSubmission.naruResidenceNecessity }} - -
+
+ Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the + short or long term. +
+
+ {{ applicationSubmission.naruResidenceNecessity }} + +
-
Describe the rationale for the proposed location of the principal residence.
-
- {{ applicationSubmission.naruLocationRationale }} - -
+
Describe the rationale for the proposed location of the principal residence.
+
+ {{ applicationSubmission.naruLocationRationale }} + +
-
- Provide the total area (m2) and a description of infrastructure necessary to support the additional - residence. -
-
- {{ applicationSubmission.naruInfrastructure }} - -
-
+
+ Provide the total area (m2) and a description of infrastructure necessary to support the additional + residence. +
+
+ {{ applicationSubmission.naruInfrastructure }} + +
- -
What is the total floor area (m2) of the proposed accommodation?
-
- {{ applicationSubmission.naruFloorArea }} m2 - -
+
What is the total floor area (m2) of the proposed accommodation?
+
+ {{ applicationSubmission.naruFloorArea }} m2 + +
-
How many "sleeping units" in total are proposed?
-
- {{ applicationSubmission.naruSleepingUnits }} - -
+
How many "sleeping units" in total are proposed?
+
+ {{ applicationSubmission.naruSleepingUnits }} + +
-
- Describe how the proposal for tourism accommodation will support agriculture in the short or long term. -
-
- {{ applicationSubmission.naruResidenceNecessity }} - -
+
+ Describe how the proposal for tourism accommodation will support agriculture in the short or long term. +
+
+ {{ applicationSubmission.naruResidenceNecessity }} + +
-
Describe the rationale for the proposed location of the tourism accommodation.
-
- {{ applicationSubmission.naruLocationRationale }} - -
+
Describe the rationale for the proposed location of the tourism accommodation.
+
+ {{ applicationSubmission.naruLocationRationale }} + +
-
- Provide the total area (m2) and a description of infrastructure necessary to support the tourism - accommodation. -
-
- {{ applicationSubmission.naruInfrastructure }} - -
+
+ Provide the total area (m2) and a description of infrastructure necessary to support the tourism + accommodation. +
+
+ {{ applicationSubmission.naruInfrastructure }} + +
-
Describe any agri-tourism that is currently taking place on the property.
-
- {{ applicationSubmission.naruAgriTourism }} - -
-
+
Describe any agri-tourism that is currently taking place on the property.
+
+ {{ applicationSubmission.naruAgriTourism }} + +
Describe the total floor area (m2), type, number, and occupancy of all residential structures currently From 8dfdca33c26f9a8559209ce396562fc157fd37a7 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:45:52 -0700 Subject: [PATCH 010/107] Remove NARU subtype from ALCS applicant info --- .../naru-details/naru-details.component.html | 165 ++++++++---------- 1 file changed, 77 insertions(+), 88 deletions(-) diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html index e32a308c52..144ccd8676 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html @@ -1,96 +1,85 @@
-
Selected Subtype:
-
- {{ _applicationSubmission.naruSubtype?.label }} -
What is the purpose of the proposal?
{{ _applicationSubmission.purpose }}
- -
- What is the total floor area (m2) of the proposed additional residence? -
-
- {{ _applicationSubmission.naruFloorArea }} m2 -
-
- Describe the necessity for an additional residence for farm use and how it will support agriculture in the short - or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} -
-
Describe the rationale for the proposed location of the additional residence.
-
- {{ _applicationSubmission.naruLocationRationale }} -
-
- Provide the total area (m2) and a description of infrastructure necessary to support the additional - residence. -
-
- {{ _applicationSubmission.naruInfrastructure }} -
-
- -
- What is the total floor area (m2) of the proposed principal residence? -
-
- {{ _applicationSubmission.naruFloorArea }} m2 -
-
- Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the - short or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} -
-
Describe the rationale for the proposed location of the principal residence.
-
- {{ _applicationSubmission.naruLocationRationale }} -
-
- Provide the total area (m2) and a description of infrastructure necessary to support the principal - residence. -
-
- {{ _applicationSubmission.naruInfrastructure }} -
-
- - -
What is the total floor area (m2) of the proposed accommodation?
-
- {{ _applicationSubmission.naruFloorArea }} m2 -
-
How many "sleeping units" in total are proposed?
-
- {{ _applicationSubmission.naruSleepingUnits }} -
-
- Describe how the proposal for tourism accommodation will support agriculture in the short or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} -
-
Describe the rationale for the proposed location of the tourism accommodation.
-
- {{ _applicationSubmission.naruLocationRationale }} -
-
- Provide the total area (m2) and a description of infrastructure necessary to support the tourism - accommodation. -
-
- {{ _applicationSubmission.naruInfrastructure }} -
-
Describe any agri-tourism that is currently taking place on the property.
-
- {{ _applicationSubmission.naruAgriTourism }} -
-
+
+ What is the total floor area (m2) of the proposed additional residence? +
+
+ {{ _applicationSubmission.naruFloorArea }} m2 +
+
+ Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or + long term. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} +
+
Describe the rationale for the proposed location of the additional residence.
+
+ {{ _applicationSubmission.naruLocationRationale }} +
+
+ Provide the total area (m2) and a description of infrastructure necessary to support the additional + residence. +
+
+ {{ _applicationSubmission.naruInfrastructure }} +
+
+ What is the total floor area (m2) of the proposed principal residence? +
+
+ {{ _applicationSubmission.naruFloorArea }} m2 +
+
+ Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the + short or long term. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} +
+
Describe the rationale for the proposed location of the principal residence.
+
+ {{ _applicationSubmission.naruLocationRationale }} +
+
+ Provide the total area (m2) and a description of infrastructure necessary to support the principal + residence. +
+
+ {{ _applicationSubmission.naruInfrastructure }} +
+
What is the total floor area (m2) of the proposed accommodation?
+
+ {{ _applicationSubmission.naruFloorArea }} m2 +
+
How many "sleeping units" in total are proposed?
+
+ {{ _applicationSubmission.naruSleepingUnits }} +
+
+ Describe how the proposal for tourism accommodation will support agriculture in the short or long term. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} +
+
Describe the rationale for the proposed location of the tourism accommodation.
+
+ {{ _applicationSubmission.naruLocationRationale }} +
+
+ Provide the total area (m2) and a description of infrastructure necessary to support the tourism + accommodation. +
+
+ {{ _applicationSubmission.naruInfrastructure }} +
+
Describe any agri-tourism that is currently taking place on the property.
+
+ {{ _applicationSubmission.naruAgriTourism }} +
Describe the total floor area (m2), type, number, and occupancy of all residential structures currently From 96c1ddccacc6e9ecba290f0eb6f6e62648cc1136 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:05:13 -0700 Subject: [PATCH 011/107] Remove NARU subtype from ALCS app prep --- .../features/application/proposal/naru/naru.component.html | 5 ----- .../features/application/proposal/naru/naru.component.ts | 6 ------ 2 files changed, 11 deletions(-) diff --git a/alcs-frontend/src/app/features/application/proposal/naru/naru.component.html b/alcs-frontend/src/app/features/application/proposal/naru/naru.component.html index aeb7253ea3..9dc7ecc966 100644 --- a/alcs-frontend/src/app/features/application/proposal/naru/naru.component.html +++ b/alcs-frontend/src/app/features/application/proposal/naru/naru.component.html @@ -5,8 +5,3 @@ (save)="updateApplicationValue('proposalEndDate', $event)" >
- -
-
Residential Use Type
- {{ naruSubtype }} -
diff --git a/alcs-frontend/src/app/features/application/proposal/naru/naru.component.ts b/alcs-frontend/src/app/features/application/proposal/naru/naru.component.ts index bfe290e186..162e323018 100644 --- a/alcs-frontend/src/app/features/application/proposal/naru/naru.component.ts +++ b/alcs-frontend/src/app/features/application/proposal/naru/naru.component.ts @@ -1,7 +1,6 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; import { Subject, takeUntil } from 'rxjs'; import { ApplicationDetailService } from '../../../../services/application/application-detail.service'; -import { ApplicationSubmissionService } from '../../../../services/application/application-submission/application-submission.service'; import { ApplicationDto, UpdateApplicationDto } from '../../../../services/application/application.dto'; import { ApplicationDecisionV2Service } from '../../../../services/application/decision/application-decision-v2/application-decision-v2.service'; import { ToastService } from '../../../../services/toast/toast.service'; @@ -19,21 +18,16 @@ interface InlineSelect { export class NaruProposalComponent implements OnDestroy, OnInit { $destroy = new Subject(); application: ApplicationDto | undefined; - naruSubtype: string = ''; constructor( private applicationDetailService: ApplicationDetailService, private toastService: ToastService, - private applicationSubmissionService: ApplicationSubmissionService, ) {} ngOnInit(): void { this.applicationDetailService.$application.pipe(takeUntil(this.$destroy)).subscribe((application) => { if (application) { this.application = application; - this.applicationSubmissionService - .fetchSubmission(application.fileNumber) - .then((e) => (this.naruSubtype = e.naruSubtype?.label ?? '')); } }); } From 08df426d82c5b75aa4bde6c9aee164029d966379 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:28:50 -0700 Subject: [PATCH 012/107] Remove NARU subtype from decisions --- .../naru/naru.component.html | 5 -- .../decision-component.component.ts | 17 ++--- .../naru-input/naru-input.component.html | 13 ---- .../decision-components.component.ts | 1 - .../application-decision-component.service.ts | 75 +++++++------------ 5 files changed, 33 insertions(+), 78 deletions(-) diff --git a/alcs-frontend/src/app/features/application/decision/decision-v2/decision-component/naru/naru.component.html b/alcs-frontend/src/app/features/application/decision/decision-v2/decision-component/naru/naru.component.html index dafcee70ff..d4460ed483 100644 --- a/alcs-frontend/src/app/features/application/decision/decision-v2/decision-component/naru/naru.component.html +++ b/alcs-frontend/src/app/features/application/decision/decision-v2/decision-component/naru/naru.component.html @@ -1,9 +1,4 @@ -
-
Residential Use Type
- {{ component.naruSubtype?.label }} - -
Expiry Date
diff --git a/alcs-frontend/src/app/features/application/decision/decision-v2/decision-input/decision-components/decision-component/decision-component.component.ts b/alcs-frontend/src/app/features/application/decision/decision-v2/decision-input/decision-components/decision-component/decision-component.component.ts index 42fa785246..bab1dcd230 100644 --- a/alcs-frontend/src/app/features/application/decision/decision-v2/decision-input/decision-components/decision-component/decision-component.component.ts +++ b/alcs-frontend/src/app/features/application/decision/decision-v2/decision-input/decision-components/decision-component/decision-component.component.ts @@ -65,7 +65,6 @@ export class DecisionComponentComponent implements OnInit { averageDepthToRemove = new FormControl(null, [Validators.required, Validators.min(MIN_SOIL_FIELDS)]); // naru - naruSubtypeCode = new FormControl(null, [Validators.required]); naruEndDate = new FormControl(null); //subd @@ -266,13 +265,11 @@ export class DecisionComponentComponent implements OnInit { } private patchNaruFields() { - this.form.addControl('naruSubtypeCode', this.naruSubtypeCode); this.form.addControl('naruEndDate', this.naruEndDate); this.form.addControl('expiryDate', this.expiryDate); this.naruEndDate.setValue(this.data.endDate ? new Date(this.data.endDate) : null); this.expiryDate.setValue(this.data.expiryDate ? new Date(this.data.expiryDate) : null); - this.naruSubtypeCode.setValue(this.data.naruSubtypeCode ?? null); } private patchSubdFields() { @@ -350,16 +347,18 @@ export class DecisionComponentComponent implements OnInit { return { endDate: this.naruEndDate.value ? formatDateForApi(this.naruEndDate.value) : null, expiryDate: this.expiryDate.value ? formatDateForApi(this.expiryDate.value) : null, - naruSubtypeCode: this.naruSubtypeCode.value ?? null, }; } private getSubdDataChange(): SubdDecisionComponentDto { - const update = this.subdApprovedLots.value?.map((e) => ({ - ...e, - size: e.size ? e.size : null, - alrArea: e.alrArea ? e.alrArea : null - }) as ProposedDecisionLotDto); + const update = this.subdApprovedLots.value?.map( + (e) => + ({ + ...e, + size: e.size ? e.size : null, + alrArea: e.alrArea ? e.alrArea : null, + }) as ProposedDecisionLotDto, + ); return { lots: update ?? undefined, expiryDate: this.expiryDate.value ? formatDateForApi(this.expiryDate.value) : null, diff --git a/alcs-frontend/src/app/features/application/decision/decision-v2/decision-input/decision-components/decision-component/naru-input/naru-input.component.html b/alcs-frontend/src/app/features/application/decision/decision-v2/decision-input/decision-components/decision-component/naru-input/naru-input.component.html index f9d5b365b0..a623f2a4f2 100644 --- a/alcs-frontend/src/app/features/application/decision/decision-v2/decision-input/decision-components/decision-component/naru-input/naru-input.component.html +++ b/alcs-frontend/src/app/features/application/decision/decision-v2/decision-input/decision-components/decision-component/naru-input/naru-input.component.html @@ -13,19 +13,6 @@ /> -
- -
- Expiry Date 0) { @@ -423,13 +407,4 @@ export class ApplicationDecisionComponentService { errors.push('Average Depth To Remove is required'); } } - - private validateNaruDecisionComponentFields( - component: CreateApplicationDecisionComponentDto, - errors: string[], - ) { - if (!component.naruSubtypeCode) { - errors.push('Residential Use Type is required'); - } - } } From ee9af5c61cd2acf62a364e81f7c96fec8e84d953 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:44:58 -0700 Subject: [PATCH 013/107] Remove, relabel, reorder questions in portal --- .../naru-details/naru-details.component.html | 122 +----- .../naru-proposal.component.html | 379 ++---------------- .../naru-proposal/naru-proposal.component.ts | 38 +- .../naru-details/naru-details.component.html | 119 +----- 4 files changed, 57 insertions(+), 601 deletions(-) diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html index 3dcc290dfc..2ecdc172fd 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html @@ -1,127 +1,37 @@
-
What is the purpose of the proposal?
-
- {{ _applicationSubmission.purpose }} - -
- -
- What is the total floor area (m2) of the proposed additional residence? -
-
- {{ _applicationSubmission.naruFloorArea }} - m2 - -
-
- Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or - long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} - -
- -
Describe the rationale for the proposed location of the additional residence.
-
- {{ _applicationSubmission.naruLocationRationale }} - -
- -
- Provide the total area (m2) and a description of infrastructure necessary to support the additional - residence. -
-
- {{ _applicationSubmission.naruInfrastructure }} - -
- -
- What is the total floor area (m2) of the proposed principal residence? -
-
- {{ _applicationSubmission.naruFloorArea }} - m2 - -
- -
- Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the - short or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} - -
- -
Describe the rationale for the proposed location of the principal residence.
-
- {{ _applicationSubmission.naruLocationRationale }} - -
- -
- Provide the total area (m2) and a description of infrastructure necessary to support the additional - residence. -
-
- {{ _applicationSubmission.naruInfrastructure }} - + Do you need to import any fill to construct or conduct the proposed non-adhering residential use?
- -
What is the total floor area (m2) of the proposed accommodation?
- {{ _applicationSubmission.naruFloorArea }} - m2 - + {{ + _applicationSubmission.naruWillImportFill ? 'Yes' : 'No' + }} +
-
How many "sleeping units" in total are proposed?
+
What is the purpose of the proposal?
- {{ _applicationSubmission.naruSleepingUnits }} - + {{ _applicationSubmission.purpose }} +
- Describe how the proposal for tourism accommodation will support agriculture in the short or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} - + Where on the parcel will the proposal be situated and is there an agricultural rationale for the proposed location?
- -
Describe the rationale for the proposed location of the tourism accommodation.
{{ _applicationSubmission.naruLocationRationale }}
- Provide the total area (m2) and a description of infrastructure necessary to support the tourism - accommodation. + Describe any infrastructure required to support the proposed residence(s) and the approximate area (m2) + required for that infrastructure
{{ _applicationSubmission.naruInfrastructure }}
-
Describe any agri-tourism that is currently taking place on the property.
-
- {{ _applicationSubmission.naruAgriTourism }} - -
- -
- Describe the total floor area (m2), type, number, and occupancy of all residential structures currently - located on the property. -
-
- {{ _applicationSubmission.naruExistingStructures }} - -
-
Proposal Map / Site Plan
-
- Do you need to import any fill to construct or conduct the proposed non-adhering residential use? -
-
- {{ - _applicationSubmission.naruWillImportFill ? 'Yes' : 'No' - }} - -
-
Describe the type and amount of fill proposed to be placed.
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 7b599c5c4b..355afd7189 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -26,6 +26,34 @@

Proposal

+
+ + Do you need to import any fill to construct or conduct the proposed non-adhering residential use? + +
Fill is any material brought onto the property, including gravel for construction.
+ + Yes + No + +
+ warning +
This field is required
+
+
+
@@ -42,60 +70,11 @@

Proposal

Characters left: {{ 4000 - purposeText.textLength }}
-
- - - - m2 - -
- warning -
This field is required
-
-
- -
- -
- Include a description of the scale, intensity, and labour capacity of the farm operation -
- - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - residenceNecessityText.textLength }}
-
-
Where on the parcel will the proposal be situated and is there an agricultural rationale for the proposed + location? -
- Include a description of the scale, intensity, and labour capacity of the farm operation -
- -
- warning -
This field is required
-
-
Characters left: {{ 4000 - residenceNecessityText.textLength }}
-
- -
- - - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - locationRationaleText.textLength }}
-
- -
- -
- Describe any infrastructure required to accommodate the additional residence and the approximate area required - for that infrastructure -
- - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - infrastructureText.textLength }}
-
- -
- - - - m2 - -
- warning -
This field is required
-
-
- -
- -
- A "sleeping unit" means: -
    -
  1. A bedroom or other area used for sleeping located in a residence, cabin or other
  2. - structure -
  3. A vehicle, trailer, tent or other structure, located on a campsite, field or other area
  4. -
-
- - - -
- warning -
This field is required
-
-
- -
- - - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - residenceNecessityText.textLength }}
-
- -
- - - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - locationRationaleText.textLength }}
-
- -
- -
- Describe any infrastructure required to accommodate the tourism accommodation and the approximate area required - for that infrastructure. -
- - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - infrastructureText.textLength }}
-
- -
- -
Agri-tourism activities are defined in the Agricultural Land Reserve Use Regulation.
- - Please refer to the -
- Non-Adhering Residential Use - page on the ALC website for more information - - - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - agriTourismText.textLength }}
-
- -
- -
- Residential structure is defined as a structure, whether used permanently or temporarily as a residence, - agri-tourism accommodation, or tourist accommodation. -
- - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - existingStructuresText.textLength }}
-
-
Proposal Map / Site Plan
A visual representation of your proposal.
@@ -415,34 +130,6 @@

Proposal

[showVirusError]="showProposalMapVirus" >
- -
- - Do you need to import any fill to construct or conduct the proposed non-adhering residential use? - -
Fill is any material brought onto the property, including gravel for construction.
- - Yes - No - -
- warning -
This field is required
-
-
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index 12abe44d45..53364d12f5 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -28,13 +28,8 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, showProposalMapVirus = false; purpose = new FormControl(null, [Validators.required]); - floorArea = new FormControl(null, [Validators.required]); - residenceNecessity = new FormControl(null, [Validators.required]); locationRationale = new FormControl(null, [Validators.required]); infrastructure = new FormControl(null, [Validators.required]); - existingStructures = new FormControl(null, [Validators.required]); - sleepingUnits = new FormControl(null, [Validators.required]); - agriTourism = new FormControl(null, [Validators.required]); willImportFill = new FormControl(null, [Validators.required]); fillType = new FormControl( { @@ -64,17 +59,12 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, form = new FormGroup({ purpose: this.purpose, - floorArea: this.floorArea, - residenceNecessity: this.residenceNecessity, locationRationale: this.locationRationale, infrastructure: this.infrastructure, - existingStructures: this.existingStructures, willImportFill: this.willImportFill, fillType: this.fillType, fillOrigin: this.fillOrigin, projectDuration: this.projectDuration, - sleepingUnits: this.sleepingUnits, - agriTourism: this.agriTourism, }); private submissionUuid = ''; @@ -98,20 +88,13 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, this.submissionUuid = applicationSubmission.uuid; this.form.patchValue({ - existingStructures: applicationSubmission.naruExistingStructures, willImportFill: applicationSubmission.naruWillImportFill, fillType: applicationSubmission.naruFillType, fillOrigin: applicationSubmission.naruFillOrigin, - floorArea: applicationSubmission.naruFloorArea ? applicationSubmission.naruFloorArea.toString() : null, infrastructure: applicationSubmission.naruInfrastructure, locationRationale: applicationSubmission.naruLocationRationale, projectDuration: applicationSubmission.naruProjectDuration, purpose: applicationSubmission.purpose, - residenceNecessity: applicationSubmission.naruResidenceNecessity, - agriTourism: applicationSubmission.naruAgriTourism, - sleepingUnits: applicationSubmission.naruSleepingUnits - ? applicationSubmission.naruSleepingUnits.toString() - : null, }); if (applicationSubmission.naruWillImportFill !== null) { @@ -193,23 +176,10 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, protected async save() { if (this.fileId && this.form.dirty) { - const { - existingStructures, - willImportFill, - fillType, - fillOrigin, - floorArea, - infrastructure, - locationRationale, - projectDuration, - purpose, - residenceNecessity, - sleepingUnits, - agriTourism, - } = this.form.getRawValue(); + const { willImportFill, fillType, fillOrigin, infrastructure, locationRationale, projectDuration, purpose } = + this.form.getRawValue(); const updateDto: ApplicationSubmissionUpdateDto = { - naruExistingStructures: existingStructures, naruWillImportFill: willImportFill, naruFillType: fillType, naruFillOrigin: fillOrigin, @@ -217,14 +187,10 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, naruToPlaceMaximumDepth: this.fillTableData.maximumDepth ?? null, naruToPlaceArea: this.fillTableData.area ?? null, naruToPlaceVolume: this.fillTableData.volume ?? null, - naruFloorArea: floorArea ? parseFloat(floorArea) : null, naruInfrastructure: infrastructure, naruLocationRationale: locationRationale, naruProjectDuration: projectDuration, purpose: purpose, - naruResidenceNecessity: residenceNecessity, - naruSleepingUnits: sleepingUnits ? parseFloat(sleepingUnits) : null, - naruAgriTourism: agriTourism, }; const updatedApp = await this.applicationSubmissionService.updatePending(this.submissionUuid, updateDto); diff --git a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html index 97ee66713b..31efe5b5fd 100644 --- a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html @@ -1,124 +1,37 @@
-
What is the purpose of the proposal?
-
- {{ applicationSubmission.purpose }} - -
- -
- What is the total floor area (m2) of the proposed additional residence? -
-
- {{ applicationSubmission.naruFloorArea }} m2 - -
-
- Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or - long term. -
-
- {{ applicationSubmission.naruResidenceNecessity }} - -
- -
Describe the rationale for the proposed location of the additional residence.
-
- {{ applicationSubmission.naruLocationRationale }} - -
- -
- Provide the total area (m2) and a description of infrastructure necessary to support the additional - residence. -
-
- {{ applicationSubmission.naruInfrastructure }} - -
- -
- What is the total floor area (m2) of the proposed principal residence? -
-
- {{ applicationSubmission.naruFloorArea }} m2 - -
- -
- Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the - short or long term. -
-
- {{ applicationSubmission.naruResidenceNecessity }} - -
- -
Describe the rationale for the proposed location of the principal residence.
-
- {{ applicationSubmission.naruLocationRationale }} - -
- -
- Provide the total area (m2) and a description of infrastructure necessary to support the additional - residence. -
-
- {{ applicationSubmission.naruInfrastructure }} - + Do you need to import any fill to construct or conduct the proposed non-adhering residential use?
- -
What is the total floor area (m2) of the proposed accommodation?
- {{ applicationSubmission.naruFloorArea }} m2 - + {{ + applicationSubmission.naruWillImportFill ? 'Yes' : 'No' + }} +
-
How many "sleeping units" in total are proposed?
+
What is the purpose of the proposal?
- {{ applicationSubmission.naruSleepingUnits }} - + {{ applicationSubmission.purpose }} +
- Describe how the proposal for tourism accommodation will support agriculture in the short or long term. -
-
- {{ applicationSubmission.naruResidenceNecessity }} - + Where on the parcel will the proposal be situated and is there an agricultural rationale for the proposed location?
- -
Describe the rationale for the proposed location of the tourism accommodation.
{{ applicationSubmission.naruLocationRationale }}
- Provide the total area (m2) and a description of infrastructure necessary to support the tourism - accommodation. + Describe any infrastructure required to support the proposed residence(s) and the approximate area (m2) + required for that infrastructure
{{ applicationSubmission.naruInfrastructure }}
-
Describe any agri-tourism that is currently taking place on the property.
-
- {{ applicationSubmission.naruAgriTourism }} - -
- -
- Describe the total floor area (m2), type, number, and occupancy of all residential structures currently - located on the property. -
-
- {{ applicationSubmission.naruExistingStructures }} - -
-
Proposal Map / Site Plan
-
- Do you need to import any fill to construct or conduct the proposed non-adhering residential use? -
-
- {{ - applicationSubmission.naruWillImportFill ? 'Yes' : 'No' - }} - -
-
Describe the type and amount of fill proposed to be placed.
From 164201faa2d99d5d8f34395109b14a6105949a90 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:55:46 -0700 Subject: [PATCH 014/107] Remove, relabel, reorder fields in NARU PDF --- .../generate-submission-document.service.ts | 9 ++------- .../submissions/naru-submission-template.docx | Bin 51052 -> 50534 bytes 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts b/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts index 0f5323811c..91640a171e 100644 --- a/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts +++ b/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts @@ -372,17 +372,12 @@ export class GenerateSubmissionDocumentService { private populateNaruData(pdfData: any, submission: ApplicationSubmission) { return { ...pdfData, - naruFloorArea: submission.naruFloorArea, - naruResidenceNecessity: submission.naruResidenceNecessity, - naruLocationRationale: submission.naruLocationRationale, - naruInfrastructure: submission.naruInfrastructure, - naruExistingStructures: submission.naruExistingStructures, - naruSleepingUnits: submission.naruSleepingUnits, - naruAgriTourism: submission.naruAgriTourism, showImportFill: submission.naruWillImportFill, naruWillImportFill: formatBooleanToYesNoString( submission.naruWillImportFill, ), + naruLocationRationale: submission.naruLocationRationale, + naruInfrastructure: submission.naruInfrastructure, // NFU Proposal => Soil and Fill naruFillType: submission.naruFillType, diff --git a/services/templates/pdf/submissions/naru-submission-template.docx b/services/templates/pdf/submissions/naru-submission-template.docx index 827c7df0cf110cd8c135d02706a1da816660ea1c..e210569e6d00bf82ec63a7c4b7d7684c44109c6d 100644 GIT binary patch delta 19483 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 b%1Rx;9{> delta 19952 zcmZ6SV{oR?(yn9Mwr$(a#LmQgqlx*(wrxyoTNB&1HL;U3yY@M!zWRP#YgIkJo~rJ; zyYF6W9Y=y+#)8+qLjennz*Uo(K|mym!9h?#KtS9bewi_wIheZIncKTCdDsCieYfln zWEze?!QPRA9XjC3HY}*VW6pAq9Na-Qm>kk9p@N3>e_+_%b4c3Ajx){lgS^w6+zE^b zjSG!gP|@ln%0?8+L^cfkE~NN^AZI5h?+Krb{#eNCoe{epQwGkH#QOD!q;f5Cm=;FS($OZIf)u! z$ol!ypk%v9*m+?>XP43mZ^tstP@psN<_3JG*DE&Z4D%Rure`W?^?o6_YsRIBn!B53 z)N|)TC5!5s-4mFOhEdxk%{}&UQ_Jzglx#l5t)z!CSPzAaa_E$iwt$uPHS*VEX#8p< z%HBC5WjSF<;=tGy&0cGAvRiU+Yx1I7@^<*bWwrl^voIO<&4Jmm#i8Y$Bd2qcFxGt@ z%wBsIWD*HN1GZRFTAJA=$y*Vm^kF$>NCu0Yf@pi@uo_Spqg0;mb_P3&qJt^-+xk(! z{F4vZ^P(-d7xrivgq{D!(Y_1$amKFS?@`f|1wQjteir4_{bflJ^@q$H>7E*HBk zL}`>1MP1!tkl*acidD%1;B7T}vmvJDw9)=psN<|+;YXxjBbXfhFXqPPw_IU@<#Ip8 z{o#)kT}PZ|<=XSd46q!irpW2`8kYIN^w+1;=?LI*j^|1qQ6Y~LHR)cs3uo*DR%|nf zAX-5Y@nz+APEMJfVy^-=!ICa^FG@C7L>cpgvl3JIiZi#9Fe)oHhWIjvY=@C$M9Rde zPRR?oWi2dK_Se@vr1DpMb$4#VhqpVb#Vh99$TnNA;;FQ%506uF$ssKFBiKA!=$Nl_ zQ8IAeW3kBPLIDNUrYFn73$G1ZtM}uqg2d%ft`+l^-pd1StA2icj3mD1Cw~)*YudfP@XUrpMvmYIZkE!+&ofm3&0Eo5i)tVwKV^pL5+jVfifLf1>3~=z zg(6>{-8bfLeh!9V>PWKebq9ydr!&Dx4&UB;RK;cSweG=RGuQ=L0xuAWhpi~zM_hZq z$Ei7q+u7%bg{C&4i7{8Yv&w#2dxFi#j%v{HTyxSJI~}uIue-pG>1sc0#!A({o=PG2 zyxga@8rjREx@+w&F${x(SNquU&AJo*e{y}Ge9pPq63waPd{ zR>fRWZ0;iM-70aI(L1)A>dBQ$e0iO7FFR`(;4ZJr!)H(!FuH~?me~>MbslRL&YI0t z?5GfvZCkNUeaU#1>D^A!15!Jb6t6I`bkr7~)+Sr=*x!AG_}}L-Z%Se{{sF%Fn_nJ7gap%dte0>kHO1eFr2(1RVZ$ z)a3j^tz)v`YP>1ag^1AdkOnr~(zXUx$d=~EHp0xTK#ctqZil#3IDotb$9r&6nM*j; zhE9$8s!p^0V)Tanq*Uug#g}vOi_PGpcYd3p^aW*}Nl)HgZ&&gSregN#nf43DqE`?)h;yHvx&dN9tfwVOhoa~Z~2P&kKWumU&9!L+239~ z7LIMEHeXDjU#8N0O#w-od*2>cKD0o~xX&L~DAMO^i;qf!rKUT=lf@#rl_uaU>gcKK zec0sXI%m9YlIl#!hku{?Mu(>n!}oL*w&RkUH*0UUm2|sk941^ptWU&vyonk7?()kG zvi<-hex=mOjqBB)ayqY&pZh;`zE4^j>L^E&I;2ebb=Z_&V*m#!gfp!VRu-5HUHs0E zf8|wOB>K&)yN0oh!WF`lm9oerhD$75^Zf=NnEeQ8D)}}o>W78qKr*LRcR#$6C0Jnj zNNtx@$#AeIsaXbGz4>=3Ge^K*>@bAKWi8T$5@ME?HK9~if@AIdT>6ahJ9NL&IE*CC zie-rKrT-<{>=xCi!JfDAuh6^_GQy62B&e6MWIl{5`hsZAg-EKqiTAO zbY!^l!R6v+1aDZ0xs7LafQw{!wik$J9PhBR?~!g&gamHT`Fay}lhSqlX@mvO=kDMj z;=Tre{PZ7bsp31Gbs}RSG~(0j5lN0&^3sQXeoC9ei$f-^T^M=jbAOd+0fMWOxVFdB0rC?^V}z-e>V}+V1=jEoxIBm{A;bZkz|`!ihokG zOmr%GQb{>5IQ>|1|J)NVN852|zcq9}hvl+QpLL+cfHEkB`FOb5Mb^Jk4{z%*xGto>-G}4K z{$cVA`pua*PqByb>~EE*y9{UoKVDJ={!%NXp=Pw-$i|F1+%$c$Fw@T-+Hdi~r_wG& z=;^FqTr^M)~IZ`m-9&+^w%{3j1XJIODI^%WQ)7BmPE zqb-OikRrzZ10W&Y^cY;uC+Z_fN1X70K&7rtXsPN zyR#7ash3l~%}i^LrTM9W*a&O6)eivB9?L;5&?X9H?-Eo``Ob8s9V)NNMz#X*8G36M zkp_^imZOKR7S6|mn1K_Z7s1S7uRU{lg$OvxY6mK-IfA-8t3|3fcKn89#fLGZ? zoGRRz>Qyz%{Od#?dC9InXD%@SLD(+kJ5?3_9U!hL^j0DUoF3qdOOfrK1u|vo35F-{ zRdyZqMS(`bKCgEnjedt;N?)M{9820npyOc4)%6l%EF3Bal~3D75*_{xfyR-e5@GgR zP$;DmE>y4el*z7}W`8mYvVf)izOHWxVhwa91;#jYWHI*ne(3R_`BzZ0xgdsucqE8l zPPoNQ(Dk!(<5fp32jqGfU!?L_eolKges8y#$s^xVz^x%dS|`~R&MB0~o)n%^elR2L zGZrCAdno0Ak+TKs{j#j?66D8fn2J3TqJ7n}{2o%GIs9*wIIF?6-@pS@B8}n@qL96O zaZdqcV%<7|t(FHm=h1MNeR29wGHtZJ+S`6+;jv#gYbQP1&hDaEPr`IV_@NcMa={{9&@eL`b_+XPo=Hj-1O!M2Y;`thIBO&i?{eOJ68$J6}5%gb(=*;AajiA6d7H zqBQ)WX#H1W-g3RAHO^^~N@+4$?@CINjLU8)YxZ{#M}?qs(3HWUEjOLP5A{|R4RrVh z5JA^`&|IF35m+GM_G?S})aGGHN5Gl%7ltHsCp3~GzAeG4wSFH+jS3l2c`L5G0g;m|g&G0iZjI@R zABPafuy#(|s~2k`xyr4X&t@6g_nNGOAwB~O>l;2bf5ZQ3bz@uyi-+ z`ivN^2cm$A133@m%6nD6sApz%tI3iREJk%W0x^aza2|L!aP-Ve z54{BiP?GgDx)nv)YXoPY_?YqX+@m3G5ebM<>lIbuDc(+ED`(vo{*X7d7o64apq~7g z@Iw1^`uKB>w3fWH;=UK8 zjsq2sqp9dE6K0n|XjVe|63>vq@5oDVAem)uq{NCUwpY>dc~J zj7r~^m`%|`B^V-A-yVCQ;g87uYrmzfc0}y7iyUF%PU=08 zxLl$c>fIko!W)>#AUaE;k$iohh&SUKKNf-Vfv+SRGbZ9L2%@EkpbfM23?NY82v9he zR!dl_<{hQ-prN1$MbctM&*yAgbrc1^*;P*?xgu zX-Bjya?25{kbxJ36M85R$c;d*rU|rP)zBfwNl@~!(qm_U%rJ73hVK2KnCQ05d-s~z zg46-70yE*vtmu{{-XOxoNA^Mf1qdgyL_sC!3$!gC>TwX@9fOU5 zn=dYW-b_G@G*PNsMtBYEzG#K-*Ew9?eVYIz=)`4Oql`R%JR1E$>FPKBM zBz{Xgei{H`$mW%bCnaeJQ6%6XEg%3;eULg%tN#e9mCQLpT`J9;cCyn=0wVxFaZiS7b*&vI~K`*OX$xWNKs@16Uow6-W1rrU7w%t8#BC4< z&~3czc3w_l?x?jPWhuP?LQzH)4%cF>;e4C~ru@`EAjJp=B%;FAYJTd!GF7LWO1IH# zY$e~72T*>S<-g1mfV?sC5#_`uwu%IHcse7 z8p!2*fiuYK-C{tD)C!Z~GY~2Of&y~yhN)#0a=8b;sTWVoChkN~#rbsGH5qGPy@xQ% zM&F#-dp-t~bmb-ZJsCliLna_V{qRiVrEY^bs02bDHWiKGXq4gTgdbnwD8BTruS-Ij zJynmveOPU;t#$v5>R1kqC$^vkL>r`Tb%Fx~2oHkg?FnrJ+GirXLwy+(gpSnmOL)PE z9=bUtuKy#pZq)69UzG6+Jge&-{PeEipq##0rZvDP#DMs;Ck_JT$Njm~0`hQ)*!bx% z{(JMBrXd@}Dxqnh0Rw#q4e+>R*e;P+k2)%&^ zUL7x~#ehuCThkYHxPe5b)YFj6tBLBfBegMKaYOY{yVI`TAHqNjI*-w>)NaGgQ;6NZ z8D9fK1CSoB)Ez2y)vL0>1YtH?>{c`mY#^(|LCzifRKQ<~PV&s2?WXEwv|#7sL}QPmc}c?6KjzVKUy+xT=O5?Z0kq$7hspSWhh6OtuXrKQrlHauj>G*}f~3 zR(czYh|)|uh*`M0{lm6aNNmoY1G(J-xmF|h!k(_mbAL81*ug#$%lv%&Eb@R0ESv#% zGzdm8mZOcfSX!d)?=1i(Lr1no*P3f!Q0TE>f<33ms?S9|^cmMxpBtUhC6I-GVVp7i z>5TR${uF4B(^18X`3X!wEg!8D!TsmYRH@-IDop74F3Xp}L-P(t+?2dumAW-2+vni1 zcbp{{0S+7d>jB~MND_y;B}fy}#1X$&Dc5q8BG9(!`V&0N-lpP8{q~g|wxD-pe4de? z)SuvuUuna!tzX3Gb4qKGWtIQ7r)MOBO`w4OVz>X};()R>G6sy!hE<);nHlUe1@(?? ziajYi%acbyQlq(a#iSLgV^~}f)8-%q^jV1eS`}O$o;M`{1v+R4RUyOQFfwidE#ZLx zc08{x5;0SUiVnT`xDS2nVnq&u{yj(>wE!!9?0=4!Z9>(BVM4i^BE1*)_NxBGMH7v$ z=tiF1l?AFr8R&xb@z2ce413k;Ki4EPzU+?N_ses)j{K^ey7H8FQjo8Rj9?{85%Nfy zbJReqqeHTf?T6l3nR3?Sy3J_qJ`;jWz-F@INHT;EkHS1rT8P`cH&ytoaXIo(`8kpI zIjX|U)9ab=mPUyeEIW!+Z_;19ZbE4tXpMijdr-cs4vfKn&LQZsjo$C#@nQphUn0Pt z=;m|rB|aOgp+7`zW!~WoQ_7EysD%(;AlQ)x6UcLs4s8VyL5$!K986Jxjl4Lvl$-iw zq6^3^vI;f|QajMf@QiVEkQHo~^p!Bm4LVd6TrfEW;ga~rnI98l2J+WrunR!<#Y>a*LYSr_SIagds;j8_i65$mhlgw!G9-mQEsG8aj2o z^Z;NHhpACVs227F?Y&tpXff~o&pCw3Ya*6~uRhnbQrHdlilAFmTF%*FTSt{_CLl87fiywxC}o)5lnOGwz43oMN>hYy+a)Cm@a=#|RGMorl;>$1 zK3NcS{55G&@K?AC{tw{{K6{(V@}~0zqbCAXgh3dmncGeo&pF?seCtO;oe%ogk%NIB zNi>zhuz}&WR&D^;&?4QSxFawxs0W18cKH@%0>R#_Cg%-2%{@h(#22z%ph=M>;qN0S zs)8h@_8AVwr=Rl;<(0q18DX?t z&PQ}5;MP)kQ*IdUh!4M53u~;7o2M@UI<0MXGLl&;a(|9-rZ7VW+yKC+b%i&)AzXb# ztj<*w8O6OjkGnOZvKn50-@jerw}9$KRIt7Iu0?jM44P`zP&sgHQ`l#JCU_{|AlyMb zC-+s=Q$O_-jtY+duxyV&YN8KE)c#uN@T4pBhjW4Aqn2z~4qS%`x|AleMQu?tWTN$I z?BPRCi-?qrXr@>mNVgB1+ZJNGk<`%VSQ%o3-W+u1QZ+>czy;v%g|^KXT6;+ zn%b;|@u@O@@Nw%1bW*CseMgMVL9l)i`hJK{PBc1Yrav@18Wa{YYUnl^qZX6Gw(9RJ z8C@7K&{mK~hLN3b(W@w9>jSit$LTEXe)f(lCY;zc?kv^s4srMha$^15B+-qzb9QI0 z=E^n^>}dhAz;wy26!nFw6`_YZIPbt;gU2m&GkCx?q}k}?6Thl?Kk~)Z1J2tFo;s=Y zD)>i#coK%vOH*rcJ0%LX%+gOqM;jUU@8$Gkw~Nm1+C}9(Il4+5rQk`Lpzov)!5JEl z-Eg_HuxwrQxs)seLjTkO?gR71eq%OSjOgBDkW~ZoMP{@D{?$#c@lz#iDA`ym8lNRN z7OCQ_S&UQ!SVFuUNOOHMzNC*;E?XMoo)AX+(|)6zH1m2JFkFsr|IC9XJJxD|qfy^i zZU8v>dZZ~2Qt+pUwOb`eKM?fuRp|qJ4vka3Mxkdi+-0wKl&(QT$KPoF^drsT*2JF_ zM-nL2WqP4*lKofad!1e99wr@!s`tQGpdf~!w z0{`_VXyAx)=*bpka_Aq}vw76Jy|Zx*kieBha$`lUOYp~i6>R0mF3VIGwdu?CT90)UT0=UKO~uv~ zebV0Rx|!E_UZ{mXC>92HNp%fnuz}9PV@3QMl$)DLw$XNfozR6})uwZl!0}4SrV?I? zfiDRs&&U-X@Vwf!*(|ZRqqX7bh1TrF%}wtmC^KpE39)OQ5n1I^C0Sr}if2D6ETt&Op&rhio~N zNdcvXm{0FO0S&e}@Ix?9o@m)5Ge5QsbvR!m(2Q0}jTGa3G@}5dy1ttUA;-o`nj%O@ z6bDe3SqMUy*hogeO@!w|5RwO=BG4vx5Ul;*K*qRgBoq^^g|iI**u!Y>3i-fiXWCpK zA3^fL;f+$~hbMl}8T7(V0PyTvfArx-z8-o4IrZB>+mGTduv*tUmHOHAHNnPICmA^h z9*VDHe%T#st5R0}70>w08gP_6qRvMkUl4$qmeup`Xvc~!{2HB1V{E`QAVt9N zfQs2=XUP2U$Rk|7m{&~$m#rCe{~W~0cRl{mcbHdb6Krz{GtM%w6G$+K5$tPi?1dMX z;4#d?DO1DZx7m#9f@@?0-&b2_yHcRU~VPuJsVNo_K0seg^9q(=euCGVggej=PZZ{Uf_Zrx7 zCGRv;4Ibe-5>lqG~@V766-O6M-qO-f1OSTw-xt5M~>rXOx9I}nIxrm+B zX9vl&CG|ZCJ2q-ZC+TpHJT+5emsr?lFI+}0OrkVkXXsWU5*Kj^JAIqCv1P6xWRs=z zz?jGZLJT%2N(S8u^r38-!f0PZz_j3{lOK2cX@ zXEZk)3IrV_kpHti$0GfD%ulZ`IwA~p`M#BUg^j0wKVVE{6LAg3%^Hkm1vxpWWXAt=o3=2?MWrd;HCZ6IkUU&r5Uh~@ zL{_?Wf>-M2Ca?RjFFadbC*sy`_f3DwtPksW5M)R3=QdK}CO2_1;9?OZygw=k`66zU zvxoTJ(E-5C2sW?+_kqzL^%ozyn?Pg480#|{bKB^18Hc+)%Y-GqH1nolj-P@O>Iik5 z+-&)u!;xgat#m<*;W_2&hdE^{?`mmwtTPaAA-PnN4JsQ@H&8%ReD6KH>PL)AuyWN; zo-`|%88}=JKD4&@9%8Xbtu4x1Su+t94I=di>Qz4A^KAEQK zY6ctg4%wE|-pkg@G{&%G!i{>uox@dFM2QBONP=mE69nc1443@P+(OYrb4y0yA2mN% zt?H9=wGgOOw{yO|y!l?j%zdO^b>y|AX+gV$5}vM~nmT@y0ONA8DI_pN(J*o2^)-WC z3M))%=ibrsnxQDC?|;ik#&jtdh+`%dir#I1Ws}7i$orK?7eFs~`524clUKq-Z?|jgUvy z&MC%%{{fq91O9Nf3}x-EGSV>S$loRrzi0$~)7NU}-9b-8N1?9WajzC3Z0*by@vADP z)56eju{B@AojV)Lm$nyvkXN1KnYdT;cyQvTe=2?9znJI(WvzU3+juMY$if63NN65{eNz2Z9|La`Hck?GXrlWB-xCi}BA18Iz2rp*C%x~tWGpH$yL&F&MI z@Q#*MH0G-8ftW9ZTS=sZmaYx_`t&Fh2|%j*fJz6uCsH3e2SVDz}Hviq+c_8IQ@hkC@TuOVt$#eK3G1ApoHznN+O2ysb9(uRbBpv2u(FOV>n zoFJg&5!AViVpzm0Ejz~3J&>xvlx9&cUcS_}#d~%k!aUXd-HWemqP2C5X2^go`sPy1O=_U-F;jsM+csup**J1h5*LQ)ZtpP4Iu$3^Rg-}vu z0k~T&rHOOK%EK{_K#bw>t`W-r+MTEr$YY#qujz>M?Hzs>y&dP+{3l3aX=_&|3!juxh12O6W1wle__ceahc_Pq zWwF^P1&@4fI=3OZJ><#hMZpx_ND@0MxYzrAFAz9+HuxLBEYB*e|J*3NQ2ht@n^0?U zqS2mp90x&Ozh6^j%v^Yl)3kR;5lDOKbM1@Q7#HEiU0EA?9$aI~AjW7orj)(A%DRTX z!Ph@ea7}>R4X0eI!x0eLVO#EI)e}1G9ubR{{UwtLEP=rKTXkm%R=fuT;y|S|b7ndqd>D4sSqdWQWJkWkI)fJa0)| zck3-Jx0#U89*_&eXR}gtZ}Oy@qJ6SqOeJO>WWK1&AGa6EvD=lrv#zRRn&#` zGD=M6ixA2DFPUqY_I8*H-PP6*JYxRa_=#5w+8G~W;Al4bku&Vb_m7%j3fuwEl@kOS zXf1~^)*{cfq><=jtaJhM2cDls^D5bF6&mithY^`t!aio+^?M`NWWcyAtp>-Q=a+Eo zuy3z?rJGKPo`cirZPcGNJA&pDwKtYv4k4hsiJKWO)uUQh^>?zj#IY~KwFr(fs|xUK zk9xNZk;i{(h|g8wkrd(6zoS!>t=2p#+9Kwa10#u`W6v2}K2t9i@H8d4HKgN~?Bast zeRZ$3Yl=lj2#Lk5kbzo6B{XM(PvLpliG-7U3oEW6b<*n%j~*S;<6i>2MlGPAY!o(n zcyT-w=X)KPnwcGzQZ@ATswO2vawOU&M^wp#9Ga2D8+*<=uo-AH!WapV z2oUK2kYA9pH6)BNk9P(e;g1$Tw_n8H2g)v)PH@x@U}kLc+-6TKa!#%h{A~l0U=K@e z)Nk{u6${a>y}-BlO3{lH~SUb)9r_X$p0+0?DL@Ja;QJ*_K) zK2=n7r{x9?@LUNP$d6q6teI(&eXxDLT{HVFNGh^`jX)8rsl%Bq(xVwyTiCIHVgEdw z0pE*5r1Cdx%m5YyrhGnLO4uPPkt75iX0}X_D>8($E#&a#j|;>kn(xGA6}ppe@FY=w zjHLB`qy~0xFo1bHvt!5a^OshzH*HLOs0}oZSePW1-47E5ER(9D;9rFfJW;^p#a|BgWMlQ4 zH#!ndq#Dt_E6x*T3S;3mi10!vP84_=ZKoX3SoEs?t6wU@svHo7eb?X zAYjP8wQ-qoQjn{d~f3o`dY)`BsM{7PNGK65EZgzJ+1 zp}tB!Bc(;X+$oT3)Ip%3&iEv5y8RDR7<3181~3ir-FpuX(XN2Z9Aj4mJ#ZlSzP< zBWKqOJW3hyueU!*A-FIWr>Oy}T zpZ=!K1+Z^MP_s=AXda3WKBcl|NQiZIT-%-QLch8E+g|)uV3ym=@x;5Xre_HMUdA4% zL221)bUK53pAC#hs9=g4C<}^@>?$=vEzSgA+fU{9`Un;1ectTeZ|j9|yFPb&?d9=X3Wy7w^_<%fPU;e~E17+m?`(kSy^&5Y7THV5-jJ zuSXK>dANzCGu>pPoQmt@bz{k0Ym!b49aC6gle|kH>;GyI*O9z&&QO6&haUl%1&*E& z6o7`NFln{q|4C#NV}bO#KCxj2#DmPjWttVXiiaer8-+Ngw+d?vhO1UaK z^)-5DluxA5->PyX69z=8B)nff%plSU%NLOhrx`ZibaopPtWAAF z$6A)u^HE1P=-|C0)_f90r$Ezz9q;8-n700_KSg5Bn49^Qx86*xjDI{^k zj)wAj?CehO(`~QqnaVyIR0`Nyf0#CvwRB-!i(7(J%1vJc8VgxWIs?Vnes=^)DMOcY zc*^#Z$#5b!4AU$33GU6emtHog@m^1_yY6o~YrxyB-*D81U-E*-8sp9l(Zv{zZoSC< zsF@JqiQ3#mM__WR9NFT^F8GD99oRxp?WY8{6MZ|wc~`Iu-EY5*V7HcgSl*pUdnVju z>#}s2+ysRIn^u>IYRXHDNDbpa~`sDKc`A13N6sy`uOHU()eP)u~ z^!=9S^Y3j+<2JlXrX1@jt+r>@9HL&aTF%7v> z9o@7~@!4POG#R_`YdM_`hzMo?fR%oe)06u-40|tZ-fl8mv$z>5tB{R&OoWlVM*Aol1%#qsJlb}58NffHnrkAa|(+B z|2m#ZjikgelZS7kQb2lkN1M+7f z$HVXHj-I|zF)~dM)hkAhY>GZ?fQ?0V@!qa(wK$=v3m~$tiMN?{rx!LXM#d+_9LG%t zXS)nY^s3=|$L1OW3T?)B@pT$N^ZPHg2h`k4%586yV5&e82wLeB84K5ez!;|51|gu7 zbdW{26KS#plH4$D(F_&5dqhR`7fW!mE7SbM*9lmF4?HtKE<=pAA-{QEN`+aW&aPf1 z3xN|~>=1)A)0Qz#HWR{{5H8jcaaVJE!An(@BQGWeRvd5xVd@$PgB@~o8?)5@x-y`? zY)xnhI8^5zD;h0$U;SRD==7HG*2%K4N7CW;C8UAauakA~dXzIU(Q4Fu@ZnqoY318% zE5CCggME%KOc&5`s+!78K)`ZW?2Xq85MEmUVdTPp3y$ei39@QA`hk1+(NrrV6<=;Mw2eRmY3)3>wToOBm+Ov5D zn%)bf{gLr=DfMGHkMyE{r$y6_ z(-)j6|LdWYFP&s+W^h78fPg3BJfsbkbp*O1;SpJ0lUnRz+9GDNaN9z3UX1B=Sq7eV zwI=adV`jj4s#H*s(Blq!&=ylXAfS4E)iJ#yB-dB{3t|Zj=%-?z({Z#`0#$sdJ4*g5 z(WOTdC=6lkTuE!Q{VP%wSRI+6s|T5gSy3T1`bw4kh`R+)wCYCeGJXknWqzfysUI~~ z32MhyUmXi{=RXA`v=Y9?blEMgnK(r8Z>(UldIAkkgA6U5vrYj^Kkp$!rD;!+B?z-VkHy(NkAf!co>%P8!bJ>4E|EK9|TrNO{ zgf(Hppb$m+_Zl?mx)cW}>%75(<$t5b`5jQQFiDzl#F=ALHsQ1%VGC&OJW`lOfz`1} z3J#SAJl7Hfib(_m_rd2f zckVc+hNmf+*;FI)h7UN%ht<0M(C-0?bS*}-m4;ZKuGdBR*}V2^d|vNFogoiQwRMb~u=PsW1Mm^$^#_f&01PN!qhCZpsL z{_bsX0q5xlMFIuxa+EUj{NW!=hm*}3L?bw9I;tDmf8qQCM!^Z^J55})))>zl_BHm){CVC>pQ~m5@R18lW;H!Y!f(kBfeW%yf^W$V zH%Lxik{la-HJiR4iIlvTZ})UfNJENf6UfuYh%TO6$&OGLDcX27qnmk_h|(wcn^Sy} zB;H;A(YWQf320ANTwhO3{HR}(y5~;A-e7!pemuTYve&JX;IJ9q*58rsFFz~)+ByIB zdQRhW>NW&olSMM0M*=+!YOM@yLf31*9ZE_?2FZZo0Jarb#mkZjd?MjFGs6hNlO*sp zq56MsyL|gSNYPea56ki<|L{(&Vy9AYv?5JvF%;}bu=k{LtO35SsL@Zk!V%)OKV8)QJolr^ZrVfcU`GNtzCMKgo#6lQ{r(L1vs7fn3D= zxgB@o_E{$%oNHkbv1{SMKa&2j@Q=oSxC@_4z};)*h95=9JfC}b;E8OFI7yIa9>8#M zjG)R}#gePf5=c|z^CC%0I}`XtAMm6ndg*`y#T+s9F(bE-uMI!NTt@;zqy=^;l;^OdxYt5!BMd zMgWDDt>wV$uLs)FO=4;hF)Vzn^H~n)!9#F=;%IZhmyn6W7t{WO7sYqYp>ZnhdGuVv;yWomw(a%np3pXI$^x zI04TXBC%*|M%u+L!}igVQy}NW#Vy=cVF+AJDmG1*u3=OGrKUpC5yX{zx|f9^ zbH#MNMzN?UKecr=b<;snjQW8f03AfDiY6#Tl$*;RdS~pcio-H|veo+NCDcy)V9J5E z-4uc&w8)LjA<=3k*dhK*YwU^B>Fbw-nkuztf%22c-k}h>C)K=ET>)oT+E7CP{tt&1 z*!OJ=(-&@O0CpkF^iS}|C$iZiQpip-P$*o*eOZ#kbc=>;NL+Euo1F*Oe%XZJf-P)y zVR7|2ks;o(Wv_Wu5@3sjp%2z8bss?H_DdX&sun&3t|E+t<)Xn@hxsf2_C?)&q=-Z- z)UTS}^;1RBHN}Nz^Tm1q%l-pHR7VW~c^(Mv;s(#%)2P?>Bd1$IR)_6`QQg7t_cd47 z>?h&R4_qQ;&-$tbM>v3gKgTLaPI%i62ea-~fHCLb`q^5}#g7O6ZvlgE`Hr;)AH6!LU36+EJ1j3kr<2Lfk; zA+aJ4HL-;+8ZeDFTRgs+It*WV_Yki(Hv{HwyjGFyG9C!dz>LRGZoiB_oDn)6qnFw) zlVD6{v$Im2aUiDA*QryOL$7d?h5+UwoU@?w?I9YIs&o8k{cg?%M@!#ECNKfr}m zkiHTYVI0(YAjoo8_W>Tc|Hk8H_QQ%6L?}b*%pdE=F@!_QLJTNO;te}+AqKur*5EPo z;C0Lr{|3i}vwC|&ka%xc!Qb~JfS^t~L$+9CbG|aLyUfBOi2onGALJQI(|DTNiPWWNf{QABAFW5)hT-ZU{CUxhty>;IC#<3E=G18N1 zQr<<((C1qRb^UhuZ#D!38rzCI~sSqzO^SRrrr`8 z&_M!VBC_no`QVKgbqefpb#z_xDk%ziwOVOw^nuf1=%Q(jtYUh!CDoTDVypkY6!dz` z2G+&X6kJfPWMm(1(Gr|G!WY4@*!41H%2*P&TD;Z)*CAB);DP#C+IA7D8pIw2Vo}-+ zF6OJGzVQg+(Dg%6X?+Oz2rZU!bSPfm{!RRfDuhdwoWIRHh-gX^;;TEyt-O;Lb;1XE z`e9Z+>I#*iE6rOse~k&p=QFiU4)9`Uz0olYFK}mRUK9&CUyR9fE{Xa1A-WGktqw8R zOcgR){56F>`}riK>1(=Bb{&HId`KSK#gn50e}zIIl1>P2_RD!}hp~)IRrz8CJp*&H zohkX}1uCi6aLT5<8prIzt7p8}1234Sl)F_pAA}Z4xfizmjjcv^sHdeX4+LVGEmUjR zPXuYH1hmwgcjv5S#BaN3>X5h2b3ud26Md;-Mh#MIHwXC%e(6Hi3O7^tU=*fV%gE2L zum1%YB)uS4@gI-~{)@mUkfFWI0I90{YlD`j@w@m79?%A=(fPwap~IVzcEIHi_>U@T zK;pQ@XCm0zz`Jv^Yqvc&p*(0rzE$+@>rln%kv0bnnJW8@MSp9*R|_6xLdYN*S;U|4)@dB& z$Y~fPkgrbqO4q_uHoUCB0}6=CF=t}8@oEU4SlzUeiRio=GTT-Q1YuH1=E8#G2c7_} zSxyM;Ixuf6z7MvwZJ_iKC8Fn-fcDd(5wVyr&~Y0C&)RggVkCNCifeRu4YiY|5MbAw zqQ1|d`=ItROgZ{XInmg>_UT&_du^HSOo3`uJEN4q>>I(-2YSCncKoo}JYdT)80#&UfIU4URPy=xi3BdNN2o8@m+ggM~=#@AfP;>dT@@y7UD%zlmJD11i zuPNWPNHPi-JY0yK=6*}l-U{jZ_V9x%g$2H9+1NOS4EdV%OYT=a7tCz5L^c3IDF|4yZc00!$)eR zYq(38Zyv1>_ZRd<|GdzXj{D-(rUS!GU3|1Uw-K{X%}PHPR5Qeu!*zFGMF^B$YZ!P4LT z5yk`n5SVe7Dul2Z{oR;mWv+dnw{q%FCu`@FhFKU+pG1t_9%GK6=Jusk$F*?yz@9Q& z#d1#MUW4txMm&bbo_Id@+3(zkzoOo4$aeY3vk=F)p2Xn}6KDQpjRHNM+*3@kpZ;D( zO@M?K-in>sd2rGS3NpiICp=Tgk#x9=RBIK0HjxP zHET&J{Gv8m&e{1dui>$hNGrpOas|=i_mBEsn>ADXR7GnYdwbQQHcCoY?}%tPIhvNd zaZ(|e{pHSWAu$m2(fIdWZn})WT9=viMh6c$w9LBpI1?6O-lEJ^FR?6IFg}(u??gsx zQ+mzL>DwKQu|Hd<*qe9$LGX4^zyCZ5epd5MNRN4s|AP^tY`w6%1UfZa`B*!12U^iN zDI0%hdQz;%Mpje7lU+tDT(4~5n=DG!wIa&RL9W*-bUEXJnhH{8)TZ#teeN;1A!6!q zf7ra8^#Hc!f}qX$bwkc334P2p))YUq42C6mP%axM=~kaJI` z=<2mz>_M`bz>YO|%Xu#P2{eOB_ay}gxNlfm+Ime$cf!A|ZuzSQ=M&t&!peO1F2XS5 zUJ`jYDDBIOp^Ozy1D5eNh%#XJd@LFf--abm1N|EJ zuYG@$6$TA`IR%Z%QE`<-(Y2N=SKi+@96>3)3wJj?N7q;4t01}*dz53Ta?+E5<*~wo zhOM6^h!;r--z6U<#=T$q*qGhfL2h7v3hMPS~%1+$1ThxZseJDnPMb!!FK%X;oX{?!98; zkrw>C7cW2^1}yIon6=0Ddc5RxS{1-lNO4|d^&+=l;`QcjkT7z)+nOI)#LuSj5a<&T zyMJL{X#9MAsbqUz9E&3zS28ik+rH86<6HUup4r3@r?H6Dtg+@~z!^%4#f9?b85D3T zDg>e2!m8$Je_=}%8!OiGemQ={rQ*bgEe`L*zIQbGbk^Qa!SPV;bNqg%43|qW2bQYi z)+vhM-4n_NAOJw;1OWIL#=o1UCJx>#3En&UVHiv>40fM4``x6WxX@-DARi3Z*bD_4 z>f^Q<9nlb{-J%C%OT&ePs|MG|2)(y4FjnFM;}iZYzn~uXgDL_3 Yy;K1J-k;8UJ*o+(+bYf`*s?qN7Y=?hZvX%Q From a84170d1f26ddfd1b882ee29434d780adc7cd2b2 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:25:46 -0700 Subject: [PATCH 015/107] Remove, relabel, reorder ALCS app info NARU fields --- .../naru-details/naru-details.component.html | 89 +++---------------- 1 file changed, 10 insertions(+), 79 deletions(-) diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html index 144ccd8676..5559ffd6cc 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html @@ -1,92 +1,29 @@
-
What is the purpose of the proposal?
-
- {{ _applicationSubmission.purpose }} -
-
- What is the total floor area (m2) of the proposed additional residence? -
-
- {{ _applicationSubmission.naruFloorArea }} m2 -
-
- Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or - long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} -
-
Describe the rationale for the proposed location of the additional residence.
-
- {{ _applicationSubmission.naruLocationRationale }} -
-
- Provide the total area (m2) and a description of infrastructure necessary to support the additional - residence. -
-
- {{ _applicationSubmission.naruInfrastructure }} -
-
- What is the total floor area (m2) of the proposed principal residence? -
-
- {{ _applicationSubmission.naruFloorArea }} m2 -
-
- Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the - short or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} -
-
Describe the rationale for the proposed location of the principal residence.
-
- {{ _applicationSubmission.naruLocationRationale }} -
- Provide the total area (m2) and a description of infrastructure necessary to support the principal - residence. -
-
- {{ _applicationSubmission.naruInfrastructure }} + Do you need to import any fill to construct or conduct the proposed non-adhering residential use?
-
What is the total floor area (m2) of the proposed accommodation?
- {{ _applicationSubmission.naruFloorArea }} m2 + {{ _applicationSubmission.naruWillImportFill ? 'Yes' : 'No' }}
-
How many "sleeping units" in total are proposed?
+ +
What is the purpose of the proposal?
- {{ _applicationSubmission.naruSleepingUnits }} + {{ _applicationSubmission.purpose }}
+
- Describe how the proposal for tourism accommodation will support agriculture in the short or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} + Where on the parcel will the proposal be situated and is there an agricultural rationale for the proposed location?
-
Describe the rationale for the proposed location of the tourism accommodation.
{{ _applicationSubmission.naruLocationRationale }}
-
- Provide the total area (m2) and a description of infrastructure necessary to support the tourism - accommodation. -
-
- {{ _applicationSubmission.naruInfrastructure }} -
-
Describe any agri-tourism that is currently taking place on the property.
-
- {{ _applicationSubmission.naruAgriTourism }} -
- Describe the total floor area (m2), type, number, and occupancy of all residential structures currently - located on the property. + Describe any infrastructure required to support the proposed residence(s) and the approximate area (m2) + required for that infrastructure
- {{ _applicationSubmission.naruExistingStructures }} + {{ _applicationSubmission.naruInfrastructure }}
Proposal Map / Site Plan
@@ -98,12 +35,6 @@
-
- Do you need to import any fill to construct or conduct the proposed non-adhering residential use? -
-
- {{ _applicationSubmission.naruWillImportFill ? 'Yes' : 'No' }} -
Describe the type and amount of fill proposed to be placed.
From ba35a56d61b9934aa092446c72fb66259e31deb2 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Fri, 13 Sep 2024 17:01:19 -0700 Subject: [PATCH 016/107] Add new NARU fields to DB --- .../application-submission.entity.ts | 24 ++++++++++ .../1726271415863-new_naru_fields.ts | 47 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 services/apps/alcs/src/providers/typeorm/migrations/1726271415863-new_naru_fields.ts diff --git a/services/apps/alcs/src/portal/application-submission/application-submission.entity.ts b/services/apps/alcs/src/portal/application-submission/application-submission.entity.ts index 59db1d3596..15f8a19462 100644 --- a/services/apps/alcs/src/portal/application-submission/application-submission.entity.ts +++ b/services/apps/alcs/src/portal/application-submission/application-submission.entity.ts @@ -557,6 +557,30 @@ export class ApplicationSubmission extends Base { @Column({ type: 'boolean', nullable: true }) soilHasSubmittedNotice: boolean | null; + @AutoMap(() => Boolean) + @Column({ type: 'boolean', nullable: true }) + naruWillBeOverFiveHundredM2: boolean | null; + + @AutoMap(() => Boolean) + @Column({ type: 'boolean', nullable: true }) + naruWillRetainResidence: boolean | null; + + @AutoMap(() => Boolean) + @Column({ type: 'boolean', nullable: true }) + naruWillHaveAdditionalResidence: boolean | null; + + @AutoMap(() => Boolean) + @Column({ type: 'boolean', nullable: true }) + naruWillHaveTemporaryForeignWorkerHousing: boolean | null; + + @AutoMap(() => String) + @Column({ type: 'text', nullable: true }) + naruClustered: string | null; + + @AutoMap(() => String) + @Column({ type: 'text', nullable: true }) + naruSetback: string | null; + //NARU @AutoMap(() => NaruSubtype) @ManyToOne(() => NaruSubtype) diff --git a/services/apps/alcs/src/providers/typeorm/migrations/1726271415863-new_naru_fields.ts b/services/apps/alcs/src/providers/typeorm/migrations/1726271415863-new_naru_fields.ts new file mode 100644 index 0000000000..3b03fb9c4e --- /dev/null +++ b/services/apps/alcs/src/providers/typeorm/migrations/1726271415863-new_naru_fields.ts @@ -0,0 +1,47 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class NewNaruFiels1726271415863 implements MigrationInterface { + name = 'NewNaruFiels1726271415863'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" ADD "naru_will_be_over_five_hundred_m2" boolean`, + ); + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" ADD "naru_will_retain_residence" boolean`, + ); + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" ADD "naru_will_have_additional_residence" boolean`, + ); + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" ADD "naru_will_have_temporary_foreign_worker_housing" boolean`, + ); + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" ADD "naru_clustered" text`, + ); + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" ADD "naru_setback" text`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" DROP COLUMN "naru_setback"`, + ); + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" DROP COLUMN "naru_clustered"`, + ); + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" DROP COLUMN "naru_will_have_temporary_foreign_worker_housing"`, + ); + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" DROP COLUMN "naru_will_have_additional_residence"`, + ); + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" DROP COLUMN "naru_will_retain_residence"`, + ); + await queryRunner.query( + `ALTER TABLE "alcs"."application_submission" DROP COLUMN "naru_will_be_over_five_hundred_m2"`, + ); + } +} From e77997f42e92b9d4d16d18fbeb23e397a3d6dcf9 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Mon, 16 Sep 2024 16:09:25 -0700 Subject: [PATCH 017/107] Add new NARU fields to all services, components, and PDF --- .../naru-details/naru-details.component.html | 36 ++++ .../services/application/application.dto.ts | 8 +- .../naru-details/naru-details.component.html | 62 +++++++ .../naru-proposal.component.html | 173 ++++++++++++++++++ .../naru-proposal/naru-proposal.component.ts | 47 ++++- .../naru-details/naru-details.component.html | 50 +++++ .../application-submission.dto.ts | 16 +- .../services/public/public-application.dto.ts | 8 +- .../application-submission.dto.ts | 56 +++++- .../application-submission.service.ts | 33 +++- .../generate-submission-document.service.ts | 16 +- .../application/public-application.dto.ts | 24 ++- .../submissions/naru-submission-template.docx | Bin 50534 -> 51779 bytes 13 files changed, 505 insertions(+), 24 deletions(-) diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html index 5559ffd6cc..9a5748a7e8 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html @@ -1,4 +1,26 @@
+
+ Is your proposal for a principal residence with a total floor area greater than 500 m2 +
+
+ {{ _applicationSubmission.naruWillBeOverFiveHundredM2 ? 'Yes' : 'No' }} +
+ +
Is your proposal to retain an existing residence while building a new residence?
+
+ {{ _applicationSubmission.naruWillRetainResidence ? 'Yes' : 'No' }} +
+ +
Is your proposal for an additional residence?
+
+ {{ _applicationSubmission.naruWillHaveAdditionalResidence ? 'Yes' : 'No' }} +
+ +
Is your proposal for temporary foreign worker housing?
+
+ {{ _applicationSubmission.naruWillHaveTemporaryForeignWorkerHousing ? 'Yes' : 'No' }} +
+
Do you need to import any fill to construct or conduct the proposed non-adhering residential use?
@@ -11,6 +33,20 @@ {{ _applicationSubmission.purpose }}
+
+ Will the proposed residence(s) be clustered with existing residential structures? Please explain. +
+
+ {{ _applicationSubmission.naruClustered }} +
+ +
+ Will the proposed residence(s) be located within a 60 m setback from the front lot line? Please explain. +
+
+ {{ _applicationSubmission.naruSetback }} +
+
Where on the parcel will the proposal be situated and is there an agricultural rationale for the proposed location?
diff --git a/alcs-frontend/src/app/services/application/application.dto.ts b/alcs-frontend/src/app/services/application/application.dto.ts index d25a47b51c..6562e14ba3 100644 --- a/alcs-frontend/src/app/services/application/application.dto.ts +++ b/alcs-frontend/src/app/services/application/application.dto.ts @@ -189,13 +189,19 @@ export interface ApplicationSubmissionDto { soilHasSubmittedNotice: boolean | null; //NARU Fields + naruWillBeOverFiveHundredM2: boolean | null; + naruWillRetainResidence: boolean | null; + naruWillHaveAdditionalResidence: boolean | null; + naruWillHaveTemporaryForeignWorkerHousing: boolean | null; + naruWillImportFill: boolean | null; + naruClustered: string | null; + naruSetback: string | null; naruSubtype: BaseCodeDto | null; naruFloorArea: number | null; naruResidenceNecessity: string | null; naruLocationRationale: string | null; naruInfrastructure: string | null; naruExistingStructures: string | null; - naruWillImportFill: boolean | null; naruFillType: string | null; naruFillOrigin: string | null; naruProjectDuration: string | null; diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html index 2ecdc172fd..dc01582a3f 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html @@ -1,4 +1,50 @@
+
+ Is your proposal for a principal residence with a total floor area greater than 500 m2 +
+
+ {{ + _applicationSubmission.naruWillBeOverFiveHundredM2 ? 'Yes' : 'No' + }} + +
+ +
Is your proposal to retain an existing residence while building a new residence?
+
+ {{ + _applicationSubmission.naruWillRetainResidence ? 'Yes' : 'No' + }} + +
+ +
Is your proposal for an additional residence?
+
+ {{ + _applicationSubmission.naruWillHaveAdditionalResidence ? 'Yes' : 'No' + }} + +
+ +
Is your proposal for temporary foreign worker housing?
+
+ {{ + _applicationSubmission.naruWillHaveTemporaryForeignWorkerHousing ? 'Yes' : 'No' + }} + +
+
Do you need to import any fill to construct or conduct the proposed non-adhering residential use?
@@ -15,6 +61,22 @@
+
+ Will the proposed residence(s) be clustered with existing residential structures? Please explain. +
+
+ {{ _applicationSubmission.naruClustered }} + +
+ +
+ Will the proposed residence(s) be located within a 60 m setback from the front lot line? Please explain. +
+
+ {{ _applicationSubmission.naruSetback }} + +
+
Where on the parcel will the proposal be situated and is there an agricultural rationale for the proposed location?
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 355afd7189..e4abc40fa1 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -26,6 +26,151 @@

Proposal

+
+ + Is your proposal for a principal residence with a total floor area greater than 500 m2 + +
Total floor area includes the basement and any attached garage
+ + Yes + No + +
+ warning +
This field is required
+
+
+ +
+ + Is your proposal to retain an existing residence while building a new residence? + + + Yes + No + +
+ warning +
This field is required
+
+
+ +
+ Is your proposal for an additional residence? + + Yes + No + +
+ warning +
This field is required
+
+
+ +
+ + Is your proposal for temporary foreign worker housing? + +
For registration in a federal temporary worker program
+ + Yes + No + +
+ warning +
This field is required
+
+
+
Do you need to import any fill to construct or conduct the proposed non-adhering residential use? @@ -70,6 +215,34 @@

Proposal

Characters left: {{ 4000 - purposeText.textLength }}
+
+ + + + +
+ warning +
This field is required
+
+
Characters left: {{ 4000 - clusteredText.textLength }}
+
+ +
+ + + + +
+ warning +
This field is required
+
+
Characters left: {{ 4000 - setbackText.textLength }}
+
+
+
+ Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or + long term. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} +
+ +
+ Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the + short or long term. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} +
+
Will the proposed residence(s) be clustered with existing residential structures? Please explain.
diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html index dc01582a3f..12e24c416a 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html @@ -61,6 +61,24 @@
+
+ Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or + long term. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} + +
+ +
+ Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the + short or long term. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} + +
+
Will the proposed residence(s) be clustered with existing residential structures? Please explain.
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index e4abc40fa1..6efd7aa207 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -215,6 +215,57 @@

Proposal

Characters left: {{ 4000 - purposeText.textLength }}
+
+ +
+ Include a description of the scale, intensity, and labour capacity of the farm operation +
+ + + +
+ warning +
This field is required
+
+
Characters left: {{ 4000 - residenceNecessityText.textLength }}
+
+ +
+ + + + +
+ warning +
This field is required
+
+
Characters left: {{ 4000 - residenceNecessityText.textLength }}
+
+
(null, [Validators.required]); willImportFill = new FormControl(null, [Validators.required]); purpose = new FormControl(null, [Validators.required]); + residenceNecessity = new FormControl(null, [Validators.required]); clustered = new FormControl(null, [Validators.required]); setback = new FormControl(null, [Validators.required]); locationRationale = new FormControl(null, [Validators.required]); @@ -70,6 +71,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, willHaveTemporaryForeignWorkerHousing: this.willHaveTemporaryForeignWorkerHousing, willImportFill: this.willImportFill, purpose: this.purpose, + residenceNecessity: this.residenceNecessity, clustered: this.clustered, setback: this.setback, locationRationale: this.locationRationale, @@ -106,6 +108,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, willHaveTemporaryForeignWorkerHousing: applicationSubmission.naruWillHaveTemporaryForeignWorkerHousing, willImportFill: applicationSubmission.naruWillImportFill, purpose: applicationSubmission.purpose, + residenceNecessity: applicationSubmission.naruResidenceNecessity, clustered: applicationSubmission.naruClustered, setback: applicationSubmission.naruSetback, fillType: applicationSubmission.naruFillType, @@ -201,6 +204,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, willHaveTemporaryForeignWorkerHousing, willImportFill, purpose, + residenceNecessity, clustered, setback, fillType, @@ -216,6 +220,8 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, naruWillHaveAdditionalResidence: willHaveAdditionalResidence, naruWillHaveTemporaryForeignWorkerHousing: willHaveTemporaryForeignWorkerHousing, naruWillImportFill: willImportFill, + purpose: purpose, + naruResidenceNecessity: residenceNecessity, naruClustered: clustered, naruSetback: setback, naruFillType: fillType, @@ -227,7 +233,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, naruInfrastructure: infrastructure, naruLocationRationale: locationRationale, naruProjectDuration: projectDuration, - purpose: purpose, }; const updatedApp = await this.applicationSubmissionService.updatePending(this.submissionUuid, updateDto); diff --git a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html index 5fcebc9f49..6148035013 100644 --- a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html @@ -49,6 +49,24 @@
+
+ Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or + long term. +
+
+ {{ applicationSubmission.naruResidenceNecessity }} + +
+ +
+ Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the + short or long term. +
+
+ {{ applicationSubmission.naruResidenceNecessity }} + +
+
Will the proposed residence(s) be clustered with existing residential structures? Please explain.
diff --git a/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts b/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts index 03309ef279..8d74b82ce3 100644 --- a/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts +++ b/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts @@ -387,6 +387,7 @@ export class GenerateSubmissionDocumentService { naruWillImportFill: formatBooleanToYesNoString( submission.naruWillImportFill, ), + naruResidenceNecessity: submission.naruResidenceNecessity, naruClustered: submission.naruClustered, naruSetback: submission.naruSetback, naruLocationRationale: submission.naruLocationRationale, From 8b89ed5db3bf6eb898d5295fd2b627285da983f7 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Mon, 16 Sep 2024 19:20:01 -0700 Subject: [PATCH 019/107] Add building plans to portal, ALCS --- .../naru-details/naru-details.component.html | 9 +++++++++ .../naru-details/naru-details.component.ts | 2 ++ .../naru-details/naru-details.component.html | 8 ++++++++ .../naru-details/naru-details.component.ts | 9 +++++++-- .../naru-proposal/naru-proposal.component.html | 17 +++++++++++++++++ .../naru-proposal/naru-proposal.component.ts | 8 ++++++++ 6 files changed, 51 insertions(+), 2 deletions(-) diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html index 123e034366..4e0cc849fb 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html @@ -87,6 +87,15 @@
+
Detailed Building Plan(s)
+
+
Describe the type and amount of fill proposed to be placed.
diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.ts b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.ts index 94a33a8f5a..d0a187d2a4 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.ts +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.ts @@ -21,10 +21,12 @@ export class NaruDetailsComponent { @Input() set files(documents: ApplicationDocumentDto[] | undefined) { if (documents) { this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP); + this.buildingPlans = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.BUILDING_PLAN); } } proposalMap: ApplicationDocumentDto[] = []; + buildingPlans: ApplicationDocumentDto[] = []; constructor(private applicationDocumentService: ApplicationDocumentService) {} diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html index 12e24c416a..71ea11bade 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html @@ -120,6 +120,14 @@
+
Detailed Building Plan(s)
+ +
Describe the type and amount of fill proposed to be placed.
diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.ts b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.ts index 6c68512e71..30898b08be 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.ts +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.ts @@ -26,16 +26,21 @@ export class NaruDetailsComponent { @Input() set applicationDocuments(documents: ApplicationDocumentDto[]) { this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP); + this.buildingPlans = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.BUILDING_PLAN); } proposalMap: ApplicationDocumentDto[] = []; + buildingPlans: ApplicationDocumentDto[] = []; - constructor(private router: Router, private applicationDocumentService: ApplicationDocumentService) {} + constructor( + private router: Router, + private applicationDocumentService: ApplicationDocumentService, + ) {} async onEditSection(step: number) { if (this.draftMode) { await this.router.navigateByUrl( - `/alcs/application/${this._applicationSubmission?.fileNumber}/edit/${step}?errors=t` + `/alcs/application/${this._applicationSubmission?.fileNumber}/edit/${step}?errors=t`, ); } else { await this.router.navigateByUrl(`application/${this._applicationSubmission?.fileNumber}/edit/${step}?errors=t`); diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 6efd7aa207..b5a1b155ed 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -356,6 +356,23 @@

Proposal

+
+ Detailed Building Plan(s) +
+ Building plans must be the most up to date, current version and should include (1) the total floor area of all + levels and intended use; and (2) interior and exterior views +
+ +
+

Soil & Fill Components

diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index f79eac5cc9..bda4c8c7c9 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -26,6 +26,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, currentStep = EditApplicationSteps.Proposal; showProposalMapVirus = false; + showBuildingPlanVirus = false; willBeOverFiveHundredM2 = new FormControl(null, [Validators.required]); willRetainResidence = new FormControl(null, [Validators.required]); @@ -61,6 +62,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, ); proposalMap: ApplicationDocumentDto[] = []; + buildingPlans: ApplicationDocumentDto[] = []; fillTableData: SoilTableData = {}; fillTableDisabled = true; @@ -140,6 +142,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, this.$applicationDocuments.pipe(takeUntil(this.$destroy)).subscribe((documents) => { this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP); + this.buildingPlans = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.BUILDING_PLAN); }); } @@ -152,6 +155,11 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, this.showProposalMapVirus = !res; } + async attachBuildingPlan(file: FileHandle) { + const res = await this.attachFile(file, DOCUMENT_TYPE.BUILDING_PLAN); + this.showBuildingPlanVirus = !res; + } + onChangeFill(willImportFill: boolean) { const hasValues = this.projectDuration.value || From 0065b34cd40da4ca8b8c594720cff053b19ae54a Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:35:53 -0700 Subject: [PATCH 020/107] Fix upload spacing --- .../naru-proposal.component.html | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index b5a1b155ed..2697a4a725 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -354,23 +354,23 @@

Proposal

[showVirusError]="showProposalMapVirus" >
-
-
- Detailed Building Plan(s) -
- Building plans must be the most up to date, current version and should include (1) the total floor area of all - levels and intended use; and (2) interior and exterior views +
+ Detailed Building Plan(s) +
+ Building plans must be the most up to date, current version and should include (1) the total floor area of all + levels and intended use; and (2) interior and exterior views +
+
-
From adc557fbf6ced199f363a177618196b3f4a0d9f4 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:41:33 -0700 Subject: [PATCH 021/107] Add building plans to public search --- .../naru-details/naru-details.component.html | 10 ++++++++++ .../submission/naru-details/naru-details.component.ts | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html index 6148035013..2cd821ea1e 100644 --- a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html @@ -108,6 +108,16 @@
+ +
Detailed Building Plans
+ +
+
Describe the type and amount of fill proposed to be placed.
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 426d98a570..29231ca6fb 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 @@ -13,13 +13,18 @@ import { openFileInline } from '../../../../../shared/utils/file'; }) export class NaruDetailsComponent { proposalMap: PublicDocumentDto[] = []; + buildingPlans: PublicDocumentDto[] = []; @Input() applicationSubmission!: PublicApplicationSubmissionDto; @Input() set applicationDocuments(documents: PublicDocumentDto[]) { this.proposalMap = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.PROPOSAL_MAP); + this.buildingPlans = documents.filter((document) => document.type?.code === DOCUMENT_TYPE.BUILDING_PLAN); } - constructor(private router: Router, private publicService: PublicService) {} + constructor( + private router: Router, + private publicService: PublicService, + ) {} async openFile(file: PublicDocumentDto) { const res = await this.publicService.getApplicationOpenFileUrl(this.applicationSubmission.fileNumber, file.uuid); From 304e96d80b00fbc713e8eedadc8a1dc1bc94493e Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:51:25 -0700 Subject: [PATCH 022/107] Remove unused confirmation dialog --- .../edit-submission-base.module.ts | 2 -- ...subtype-confirmation-dialog.component.html | 17 --------- ...subtype-confirmation-dialog.component.scss | 24 ------------- ...type-confirmation-dialog.component.spec.ts | 35 ------------------- ...e-subtype-confirmation-dialog.component.ts | 21 ----------- 5 files changed, 99 deletions(-) delete mode 100644 portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.html delete mode 100644 portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.scss delete mode 100644 portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.spec.ts delete mode 100644 portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.ts diff --git a/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts b/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts index 39a6bfbc93..334e2db81c 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts @@ -24,7 +24,6 @@ import { CoveProposalComponent } from './proposal/cove-proposal/cove-proposal.co import { CovenantTransfereeDialogComponent } from './proposal/cove-proposal/transferee-dialog/transferee-dialog.component'; import { ExclProposalComponent } from './proposal/excl-proposal/excl-proposal.component'; import { InclProposalComponent } from './proposal/incl-proposal/incl-proposal.component'; -import { ChangeSubtypeConfirmationDialogComponent } from './proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component'; import { NaruProposalComponent } from './proposal/naru-proposal/naru-proposal.component'; import { NfuProposalComponent } from './proposal/nfu-proposal/nfu-proposal.component'; import { PfrsProposalComponent } from './proposal/pfrs-proposal/pfrs-proposal.component'; @@ -64,7 +63,6 @@ import { MatCard, MatCardHeader, MatCardModule } from '@angular/material/card'; PofoProposalComponent, PfrsProposalComponent, NaruProposalComponent, - ChangeSubtypeConfirmationDialogComponent, ExclProposalComponent, InclProposalComponent, CoveProposalComponent, diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.html deleted file mode 100644 index 8daaf7501b..0000000000 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.html +++ /dev/null @@ -1,17 +0,0 @@ -
-

Change Non-Adhering Residential Use Application Sub-Type

-
- -
-
- - Changing application sub-type will remove content already saved to this page.
- Do you want to continue? -
- -
- - -
-
-
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.scss b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.scss deleted file mode 100644 index c4e03e5c59..0000000000 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.scss +++ /dev/null @@ -1,24 +0,0 @@ -@use '../../../../../../../styles/functions' as *; - -.margin-bottom-1 { - margin-bottom: rem(16); -} - -.step-controls { - display: flex; - justify-content: space-between; -} - -.confirm-content { - margin: rem(24) 0; -} - -@media screen and (min-width: $desktopBreakpoint) { - .step-controls { - justify-content: flex-end; - - button { - margin-left: rem(25) !important; - } - } -} diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.spec.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.spec.ts deleted file mode 100644 index bb2be65361..0000000000 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.spec.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { NO_ERRORS_SCHEMA } from '@angular/core'; -import { MatDialog, MatDialogRef } from '@angular/material/dialog'; -import { ChangeSubtypeConfirmationDialogComponent } from './change-subtype-confirmation-dialog.component'; - -describe('ChangeSubtypeConfirmationDialogComponent', () => { - let component: ChangeSubtypeConfirmationDialogComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ChangeSubtypeConfirmationDialogComponent], - providers: [ - { - provide: MatDialog, - useValue: {}, - }, - { - provide: MatDialogRef, - useValue: {}, - }, - ], - schemas: [NO_ERRORS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(ChangeSubtypeConfirmationDialogComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.ts deleted file mode 100644 index 7483d10a9e..0000000000 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Component } from '@angular/core'; -import { MatDialogRef } from '@angular/material/dialog'; - -@Component({ - selector: 'app-change-subtype-confirmation-dialog', - templateUrl: './change-subtype-confirmation-dialog.component.html', - styleUrls: ['./change-subtype-confirmation-dialog.component.scss'], -}) -export class ChangeSubtypeConfirmationDialogComponent { - stepIdx = 0; - - constructor(private dialogRef: MatDialogRef) {} - - async onCancel() { - this.dialogRef.close(false); - } - - async onConfirm() { - this.dialogRef.close(true); - } -} From 31beb50365379e07ff81c988bd541baace7e9a8c Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:30:57 -0700 Subject: [PATCH 023/107] Add missing question mark --- .../proposal/naru-proposal/naru-proposal.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 2697a4a725..c81b6bcc88 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -28,7 +28,7 @@

Proposal

- Is your proposal for a principal residence with a total floor area greater than 500 m2 + Is your proposal for a principal residence with a total floor area greater than 500 m2?
Total floor area includes the basement and any attached garage
Date: Tue, 24 Sep 2024 08:57:16 -0700 Subject: [PATCH 024/107] Add existing residence base to portal proposal --- .../edit-submission-base.module.ts | 3 + .../existing-residence-dialog.component.html | 88 ++++++++++++ .../existing-residence-dialog.component.scss | 128 ++++++++++++++++++ .../existing-residence-dialog.component.ts | 52 +++++++ .../naru-proposal.component.html | 43 ++++++ .../naru-proposal.component.scss | 28 ++++ .../naru-proposal/naru-proposal.component.ts | 39 +++++- .../application-submission.dto.ts | 7 + .../parcel-owners.component.html | 11 +- 9 files changed, 389 insertions(+), 10 deletions(-) create mode 100644 portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html create mode 100644 portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.scss create mode 100644 portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts diff --git a/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts b/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts index 39a6bfbc93..28aad216b7 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts @@ -39,6 +39,7 @@ import { SuccessComponent } from './success/success.component'; import { PrimaryContactConfirmationDialogComponent } from './primary-contact/primary-contact-confirmation-dialog/primary-contact-confirmation-dialog.component'; import { OtherAttachmentsUploadDialogComponent } from './other-attachments/other-attachments-upload-dialog/other-attachments-upload-dialog.component'; import { MatCard, MatCardHeader, MatCardModule } from '@angular/material/card'; +import { ExistingResidenceDialogComponent } from './proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component'; @NgModule({ declarations: [ @@ -64,6 +65,7 @@ import { MatCard, MatCardHeader, MatCardModule } from '@angular/material/card'; PofoProposalComponent, PfrsProposalComponent, NaruProposalComponent, + ExistingResidenceDialogComponent, ChangeSubtypeConfirmationDialogComponent, ExclProposalComponent, InclProposalComponent, @@ -112,6 +114,7 @@ import { MatCard, MatCardHeader, MatCardModule } from '@angular/material/card'; CoveProposalComponent, CovenantTransfereeDialogComponent, SuccessComponent, + ExistingResidenceDialogComponent, ], }) export class EditSubmissionBaseModule {} diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html new file mode 100644 index 0000000000..0835c951e3 --- /dev/null +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html @@ -0,0 +1,88 @@ +
+

Add New Owner

+

Edit Owner

+
+
+ +
+
+
+ +
+
Include the basement and any attached garage
+ + + m2 + +
+ warning +
This field is required
+
+
+ +
+
+ +
+
Include if it has an attached garage or basement
+ + + +
+ warning +
This field is required
+
+
+
+ +
+ +
+ + + +
+
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.scss b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.scss new file mode 100644 index 0000000000..16df8ecaff --- /dev/null +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.scss @@ -0,0 +1,128 @@ +@use '../../../../../../../styles/functions' as *; +@use '../../../../../../../styles/colors'; + +.actions { + display: flex; + padding: rem(16) rem(24); + flex-direction: column-reverse; + gap: rem(8); + + @media screen and (min-width: $tabletBreakpoint) { + flex-direction: unset; + gap: unset; + margin-top: unset; + } +} + +.btn-group { + width: 100%; + display: flex; + gap: rem(16); + + button { + flex: 1 1 auto; + } + + @media screen and (min-width: $tabletBreakpoint) { + width: unset; + + button { + flex: unset; + } + } +} + +:host::ng-deep { + .warning-banner { + padding: 0.5rem !important; + } +} + +.mat-button-toggle-checked.mat-button-toggle-appearance-standard { + background-color: colors.$primary-color-light; +} + +:host::ng-deep { + .field-error { + color: colors.$error-color; + font-size: rem(15); + font-weight: 700; + display: flex; + align-items: center; + margin-top: rem(4); + } +} + +.delete-btn { + order: -1; + margin-right: auto !important; + width: 100%; + + @media screen and (min-width: $tabletBreakpoint) { + width: unset; + } +} + +.form-container { + display: flex; + flex-wrap: wrap; + flex-direction: column; + gap: 5px; + + .form-field-floor-area { + flex: 1 1 50%; + box-sizing: border-box; + display: grid; + flex-direction: column; + align-items: flex-start; + width: 40%; + } + + .form-field-description { + flex: 1 1 100%; + box-sizing: border-box; + display: grid; + flex-direction: column; + align-items: flex-start; + } + + @media screen and (max-width: $tabletBreakpoint) { + .form-field-floor-area { + width: 100%; + flex: 1 1 100%; + margin: 0 5px; + } + } +} + +.button-container { + display: flex; + flex-direction: row-reverse; + gap: 15px; + margin: 0 15px 10px 0; + button { + flex: 0 0 100px; + padding: 10px 10px; + } + + @media screen and (max-width: $tabletBreakpoint) { + button { + flex: 1 1 48%; + } + } +} + +.label { + display: flex; + flex-direction: column; + justify-content: center; + margin-bottom: rem(-14); + + @media screen and (min-width: $tabletBreakpoint) { + margin-bottom: 0; + } + + .subtext { + margin-bottom: rem(-8) !important; + } +} diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts new file mode 100644 index 0000000000..a7f8d563b7 --- /dev/null +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts @@ -0,0 +1,52 @@ +import { ChangeDetectionStrategy, Component, Inject, Input, OnInit } from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { FormExisingResidence } from '../naru-proposal.component'; + +@Component({ + selector: 'app-existing-residence-dialog', + templateUrl: './existing-residence-dialog.component.html', + styleUrl: './existing-residence-dialog.component.scss', +}) +export class ExistingResidenceDialogComponent implements OnInit { + floorArea = new FormControl(null, [Validators.required]); + description = new FormControl(null, [Validators.required]); + form = new FormGroup({ + floorArea: this.floorArea, + description: this.description, + }); + + isSaving: boolean = false; + existingResidence: FormExisingResidence = { floorArea: '', description: '' }; + + constructor( + private dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) + public data: { + isEdit?: boolean; + existingResidenceData?: FormExisingResidence; + }, + ) {} + + ngOnInit(): void { + if (this.data.existingResidenceData) { + this.floorArea.setValue(this.data.existingResidenceData.floorArea!.toString()); + this.description.setValue(this.data.existingResidenceData.description!); + this.existingResidence = { ...this.data.existingResidenceData }; + } + + console.log(this.existingResidence); + } + + onSaveAdd() { + if (this.form.valid) { + this.existingResidence.description = this.description.value!; + this.existingResidence.floorArea = this.floorArea.value!; + this.dialogRef.close({ isEdit: this.data.isEdit, existingResidence: this.existingResidence }); + } + } + + onCancel() { + this.dialogRef.close(); + } +} diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 7ecb48b175..12a7c451bf 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -441,6 +441,49 @@

Proposal

Characters left: {{ 4000 - existingStructuresText.textLength }}
+
+ Total Floor Area of Existing Residence(s) - If Applicable +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
Existing Residence{{ i + 1 }}Total Floor Area{{ element.floorAlrea }} m²Description{{ element.description }}Action + + +
Use the button below to add any existing residence(s)
+
+ +
Proposal Map / Site Plan
A visual representation of your proposal.
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss index dafa0c82fd..0fc0736f68 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss @@ -1,4 +1,5 @@ @use '../../../../../../styles/functions' as *; +@use '../../../../../../styles/colors'; section { margin-top: rem(36); @@ -18,3 +19,30 @@ section { :host::ng-deep .mat-mdc-radio-button label { font-weight: 400 !important; } + +.scrollable { + overflow-x: auto; +} + +.actions { + button:not(:last-child) { + margin-right: rem(8) !important; + } +} + +.no-data-text { + color: colors.$grey-dark; + text-align: left; + padding-top: 0; +} + +.visible-count-container { + text-align: center; + margin: 12px 0; + font-size: 1.1rem; +} + +.no-data-container { + justify-content: center; + margin: 10px; +} diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index f874a8c5a8..60d1389c7a 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -1,4 +1,4 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; +import { Component, HostListener, OnDestroy, OnInit } from '@angular/core'; import { FormControl, FormGroup, Validators } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { MatRadioChange } from '@angular/material/radio'; @@ -20,6 +20,11 @@ import { FilesStepComponent } from '../../files-step.partial'; import { SoilTableData } from '../../../../../shared/soil-table/soil-table.component'; import { ChangeSubtypeConfirmationDialogComponent } from './change-subtype-confirmation-dialog/change-subtype-confirmation-dialog.component'; import { ConfirmationDialogService } from '../../../../../shared/confirmation-dialog/confirmation-dialog.service'; +import { MatTableDataSource } from '@angular/material/table'; +import { ExistingResidenceDialogComponent } from './existing-residence-dialog/existing-residence-dialog.component'; +import { MOBILE_BREAKPOINT } from '../../../../../shared/utils/breakpoints'; + +export type FormExisingResidence = { id?: number; floorArea: string; description: string }; @Component({ selector: 'app-naru-proposal', @@ -47,26 +52,29 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, disabled: true, value: null, }, - [Validators.required] + [Validators.required], ); fillOrigin = new FormControl( { disabled: true, value: null, }, - [Validators.required] + [Validators.required], ); projectDuration = new FormControl( { disabled: true, value: null, }, - [Validators.required] + [Validators.required], ); + existingResidences: FormExisingResidence[] = []; + existingResidencesSource = new MatTableDataSource(this.existingResidences); proposalMap: ApplicationDocumentDto[] = []; fillTableData: SoilTableData = {}; fillTableDisabled = true; + isMobile = window.innerWidth <= MOBILE_BREAKPOINT; form = new FormGroup({ subtype: this.subtype, @@ -86,6 +94,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, private submissionUuid = ''; naruSubtypes: NaruSubtypeDto[] = []; + existingResidencesDisplayedColumns: string[] = ['index', 'floorArea', 'description', 'action']; constructor( private router: Router, @@ -94,7 +103,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, applicationDocumentService: ApplicationDocumentService, dialog: MatDialog, private confirmationDialogService: ConfirmationDialogService, - toastService: ToastService + toastService: ToastService, ) { super(applicationDocumentService, dialog, toastService); } @@ -270,4 +279,24 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, markDirty() { this.form.markAsDirty(); } + + onAddEditExistingResidence(existingResidence: FormExisingResidence | undefined) { + const dialog = this.dialog + .open(ExistingResidenceDialogComponent, { + width: this.isMobile ? '90%' : '75%', + data: { + isEdit: false, + existingResidenceData: existingResidence, + }, + }) + .afterClosed() + .subscribe(async (res) => { + console.log(res); + }); + } + + @HostListener('window:resize', ['$event']) + onWindowResize() { + this.isMobile = window.innerWidth <= MOBILE_BREAKPOINT; + } } diff --git a/portal-frontend/src/app/services/application-submission/application-submission.dto.ts b/portal-frontend/src/app/services/application-submission/application-submission.dto.ts index 63f1bc4f12..fb9c8b40a7 100644 --- a/portal-frontend/src/app/services/application-submission/application-submission.dto.ts +++ b/portal-frontend/src/app/services/application-submission/application-submission.dto.ts @@ -37,6 +37,11 @@ export interface ProposedLot { size: number | null; } +export interface ExistingResidence { + floorArea: number; + description: string; +} + export interface ApplicationSubmissionDto { uuid: string; fileNumber: string; @@ -147,6 +152,7 @@ export interface ApplicationSubmissionDetailedDto extends ApplicationSubmissionD naruToPlaceAverageDepth: number | null; naruSleepingUnits: number | null; naruAgriTourism: string | null; + naruExistingResidences?: ExistingResidence[]; //Inclusion / Exclusion Fields prescribedBody: string | null; @@ -256,6 +262,7 @@ export interface ApplicationSubmissionUpdateDto { naruToPlaceAverageDepth?: number | null; naruSleepingUnits?: number | null; naruAgriTourism?: string | null; + naruExistingResidences?: ExistingResidence[]; //Inclusion / Exclusion Fields prescribedBody?: string | null; diff --git a/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.html b/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.html index eee249674a..91ef5969b9 100644 --- a/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.html +++ b/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.html @@ -28,7 +28,7 @@ Phone - {{ element.phoneNumber | mask : '(000) 000-0000' }} + {{ element.phoneNumber | mask: '(000) 000-0000' }} @@ -41,8 +41,8 @@
{{ - element.corporateSummary.fileName - }} + element.corporateSummary.fileName + }}
Not Applicable
@@ -78,14 +78,15 @@
- + (openFileClicked)="onOpenFile(owner.corporateSummary)" + >
See more owners From aaed1417a1159dca7a44533da2015e07b476b59d Mon Sep 17 00:00:00 2001 From: abradat Date: Tue, 24 Sep 2024 09:43:01 -0700 Subject: [PATCH 025/107] Update existing residence on proposal step --- .../existing-residence-dialog.component.html | 5 ++--- .../existing-residence-dialog.component.ts | 6 ++---- .../naru-proposal/naru-proposal.component.html | 13 ++++++++++--- .../naru-proposal/naru-proposal.component.ts | 16 +++++++++++++--- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html index 0835c951e3..7d8c28c865 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html @@ -15,9 +15,8 @@

Edit Owner

min="0.01" mask="separator.5" separatorLimit="9999999999" + thousandSeparator="," matInput - type="number" - placeholder="" id="floorAreaId" formControlName="floorArea" /> @@ -83,6 +82,6 @@

Edit Owner

> SAVE - +
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts index a7f8d563b7..1d080eeec0 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts @@ -34,19 +34,17 @@ export class ExistingResidenceDialogComponent implements OnInit { this.description.setValue(this.data.existingResidenceData.description!); this.existingResidence = { ...this.data.existingResidenceData }; } - - console.log(this.existingResidence); } onSaveAdd() { if (this.form.valid) { this.existingResidence.description = this.description.value!; this.existingResidence.floorArea = this.floorArea.value!; - this.dialogRef.close({ isEdit: this.data.isEdit, existingResidence: this.existingResidence }); + this.dialogRef.close({ isCancel: false, isEdit: this.data.isEdit, existingResidence: this.existingResidence }); } } onCancel() { - this.dialogRef.close(); + this.dialogRef.close({ isCancel: true }); } } diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 12a7c451bf..6baf9cb82d 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -452,7 +452,9 @@

Proposal

Total Floor Area - {{ element.floorAlrea }} m² + + {{ element.floorArea }} m2 + @@ -463,7 +465,12 @@

Proposal

Action - @@ -480,7 +487,7 @@

Proposal

-
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index 60d1389c7a..1d171782d0 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -280,18 +280,28 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, this.form.markAsDirty(); } - onAddEditExistingResidence(existingResidence: FormExisingResidence | undefined) { + onAddEditExistingResidence(existingResidence: FormExisingResidence | undefined, isEdit: boolean) { const dialog = this.dialog .open(ExistingResidenceDialogComponent, { width: this.isMobile ? '90%' : '75%', data: { - isEdit: false, + isEdit: isEdit, existingResidenceData: existingResidence, }, }) .afterClosed() .subscribe(async (res) => { - console.log(res); + if (!res.isCancel) { + if (res.isEdit) { + const index = this.existingResidences.findIndex((e) => e.id === res.existingResidence.id); + if (index > -1) { + this.existingResidences[index] = res.existingResidence; + } + } else { + this.existingResidences.push({ ...res.existingResidence, id: this.existingResidences.length + 1 }); + } + this.existingResidencesSource.data = this.existingResidences; + } }); } From 7ff9998dc212bc84ba6df79b60e88174ac1b7656 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Tue, 24 Sep 2024 10:08:54 -0700 Subject: [PATCH 026/107] Add building plans to PDF --- .../submissions/naru-submission-template.docx | Bin 51779 -> 52165 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/services/templates/pdf/submissions/naru-submission-template.docx b/services/templates/pdf/submissions/naru-submission-template.docx index c57cb8fa7bfd02ec54f9b8c9988ec8a665ff4e59..e31207a385c9dc863466981ddf411e5c227b4837 100644 GIT binary patch delta 16220 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 delta 15866 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 From ca95a123b12f6706b71c86ef19b56bfaa5227e3a Mon Sep 17 00:00:00 2001 From: abradat Date: Tue, 24 Sep 2024 10:25:54 -0700 Subject: [PATCH 027/107] Change ExistingResidence DTO --- .../existing-residence-dialog.component.ts | 4 ++-- .../proposal/naru-proposal/naru-proposal.component.ts | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts index 1d080eeec0..12cc032b07 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts @@ -17,7 +17,7 @@ export class ExistingResidenceDialogComponent implements OnInit { }); isSaving: boolean = false; - existingResidence: FormExisingResidence = { floorArea: '', description: '' }; + existingResidence: FormExisingResidence = { floorArea: 0, description: '' }; constructor( private dialogRef: MatDialogRef, @@ -39,7 +39,7 @@ export class ExistingResidenceDialogComponent implements OnInit { onSaveAdd() { if (this.form.valid) { this.existingResidence.description = this.description.value!; - this.existingResidence.floorArea = this.floorArea.value!; + this.existingResidence.floorArea = Number(this.floorArea.value!); this.dialogRef.close({ isCancel: false, isEdit: this.data.isEdit, existingResidence: this.existingResidence }); } } diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index 1d171782d0..7d7df48e83 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -24,7 +24,7 @@ import { MatTableDataSource } from '@angular/material/table'; import { ExistingResidenceDialogComponent } from './existing-residence-dialog/existing-residence-dialog.component'; import { MOBILE_BREAKPOINT } from '../../../../../shared/utils/breakpoints'; -export type FormExisingResidence = { id?: number; floorArea: string; description: string }; +export type FormExisingResidence = { id?: number; floorArea: number; description: string }; @Component({ selector: 'app-naru-proposal', @@ -264,10 +264,12 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, naruSubtypeCode: subtype, naruSleepingUnits: sleepingUnits ? parseFloat(sleepingUnits) : null, naruAgriTourism: agriTourism, + naruExistingResidences: this.existingResidences.map(({ id, ...rest }) => rest), }; - const updatedApp = await this.applicationSubmissionService.updatePending(this.submissionUuid, updateDto); - this.$applicationSubmission.next(updatedApp); + console.log(updateDto); + // const updatedApp = await this.applicationSubmissionService.updatePending(this.submissionUuid, updateDto); + // this.$applicationSubmission.next(updatedApp); } } @@ -302,6 +304,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, } this.existingResidencesSource.data = this.existingResidences; } + console.log(this.existingResidences); }); } From 56fbd64e1559cc8816a77671b3c344ccad171289 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Tue, 24 Sep 2024 10:32:55 -0700 Subject: [PATCH 028/107] Make building plans available to PDF template --- .../generate-submission-document.service.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts b/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts index 8d74b82ce3..a1f2821891 100644 --- a/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts +++ b/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts @@ -180,7 +180,7 @@ export class GenerateSubmissionDocumentService { payload = this.populateNfuData(payload, submission); return { payload, templateName: 'nfu-submission-template.docx' }; case APPLICATION_SUBMISSION_TYPES.NARU: - payload = this.populateNaruData(payload, submission); + payload = this.populateNaruData(payload, submission, documents); return { payload, templateName: 'naru-submission-template.docx' }; case APPLICATION_SUBMISSION_TYPES.TURP: payload = this.populateTurData(payload, submission, documents); @@ -369,7 +369,11 @@ export class GenerateSubmissionDocumentService { }; } - private populateNaruData(pdfData: any, submission: ApplicationSubmission) { + private populateNaruData( + pdfData: any, + submission: ApplicationSubmission, + documents: ApplicationDocument[], + ) { return { ...pdfData, naruWillBeOverFiveHundredM2: formatBooleanToYesNoString( @@ -393,6 +397,12 @@ export class GenerateSubmissionDocumentService { naruLocationRationale: submission.naruLocationRationale, naruInfrastructure: submission.naruInfrastructure, + buildingPlans: documents + .filter( + (document) => document.type?.code === DOCUMENT_TYPE.BUILDING_PLAN, + ) + .find((d) => d)?.document.fileName, + showImportFill: submission.naruWillImportFill, // NFU Proposal => Soil and Fill naruFillType: submission.naruFillType, From 4410e5aa0080f1c843088710246837028659f58f Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Tue, 24 Sep 2024 10:33:28 -0700 Subject: [PATCH 029/107] Add necessity questions back to PDF template --- .../submissions/naru-submission-template.docx | Bin 52165 -> 52256 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/services/templates/pdf/submissions/naru-submission-template.docx b/services/templates/pdf/submissions/naru-submission-template.docx index e31207a385c9dc863466981ddf411e5c227b4837..779df5f974ea97ac640d276666e5e681cd6891f6 100644 GIT binary patch delta 16376 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 Date: Tue, 24 Sep 2024 10:40:30 -0700 Subject: [PATCH 030/107] Add confirmation dialogs for the first 4 yes/no questions --- .../naru-proposal.component.html | 13 ++- .../naru-proposal/naru-proposal.component.ts | 84 +++++++++++++++++++ 2 files changed, 94 insertions(+), 3 deletions(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index c81b6bcc88..3ed1610ae9 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -32,6 +32,7 @@

Proposal

Total floor area includes the basement and any attached garage
Proposal Is your proposal to retain an existing residence while building a new residence? - + - Is your proposal for an additional residence? + Is your proposal for an additional residence? Proposal
For registration in a federal temporary worker program
{ + this.willBeOverFiveHundredM2.setValue(!confirmed); + + if (confirmed) { + // TODO: wipe same fields as above + } + }); + } + } + + onChangeRetain(answerIsYes: boolean) { + // TODO: check for values of any fields that will be removed + // if a user answers 'no' + const hasValues = true; + + if (this.willRetainResidence.value !== null && !answerIsYes && hasValues) { + this.confirmationDialogService + .openDialog({ + title: 'Is your proposal to retain an existing residence while building a new residence?', + body: 'Warning: Changing your answer could remove some content already saved to this page. Do you want to continue?', + }) + .subscribe((confirmed) => { + this.willRetainResidence.setValue(!confirmed); + + if (confirmed) { + // TODO: wipe same fields as above + } + }); + } + } + + onChangeAdditional(answerIsYes: boolean) { + // TODO: check for values of any fields that will be removed + // if a user answers 'no' + const hasValues = true; + + if (this.willHaveAdditionalResidence.value !== null && !answerIsYes && hasValues) { + this.confirmationDialogService + .openDialog({ + title: 'Is your proposal for an additional residence?', + body: 'Warning: Changing your answer could remove some content already saved to this page. Do you want to continue?', + }) + .subscribe((confirmed) => { + this.willHaveAdditionalResidence.setValue(!confirmed); + + if (confirmed) { + // TODO: wipe same fields as above + } + }); + } + } + + onChangeTemporaryHousing(answerIsYes: boolean) { + // TODO: check for values of any fields that will be removed + // if a user answers 'no' + const hasValues = true; + + if (this.willHaveTemporaryForeignWorkerHousing.value !== null && !answerIsYes && hasValues) { + this.confirmationDialogService + .openDialog({ + title: 'Is your proposal for temporary foreign worker housing?', + body: 'Warning: Changing your answer could remove some content already saved to this page. Do you want to continue?', + }) + .subscribe((confirmed) => { + this.willHaveTemporaryForeignWorkerHousing.setValue(!confirmed); + + if (confirmed) { + // TODO: wipe same fields as above + } + }); + } + } + onChangeFill(willImportFill: boolean) { const hasValues = this.projectDuration.value || From 1ec99df9a6cbc337452a0927ba4808a7abd49c61 Mon Sep 17 00:00:00 2001 From: abradat Date: Tue, 24 Sep 2024 13:04:25 -0700 Subject: [PATCH 031/107] Add NARU existing residences column to application submission --- .../naru-proposal/naru-proposal.component.ts | 20 +++++++++++++------ .../application-submission.dto.ts | 12 ++++++++++- .../application-submission.entity.ts | 14 +++++++++++++ .../application-submission.service.ts | 4 ++++ ...7199312985-add-naru-existing-residences.ts | 16 +++++++++++++++ 5 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 services/apps/alcs/src/providers/typeorm/migrations/1727199312985-add-naru-existing-residences.ts diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index 7d7df48e83..613ff3fda4 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -75,6 +75,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, fillTableData: SoilTableData = {}; fillTableDisabled = true; isMobile = window.innerWidth <= MOBILE_BREAKPOINT; + isExistingResidencesDirty = false; form = new FormGroup({ subtype: this.subtype, @@ -148,6 +149,15 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, averageDepth: applicationSubmission.naruToPlaceAverageDepth ?? undefined, }; + if (applicationSubmission.naruExistingResidences) { + this.existingResidences = applicationSubmission.naruExistingResidences?.map((item, index) => ({ + id: index + 1, + floorArea: item.floorArea, + description: item.description, + })); + this.existingResidencesSource = new MatTableDataSource(this.existingResidences); + } + if (this.showErrors) { this.form.markAllAsTouched(); } @@ -229,7 +239,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, } protected async save() { - if (this.fileId && this.form.dirty) { + if (this.fileId && (this.form.dirty || this.isExistingResidencesDirty)) { const { existingStructures, willImportFill, @@ -266,10 +276,8 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, naruAgriTourism: agriTourism, naruExistingResidences: this.existingResidences.map(({ id, ...rest }) => rest), }; - - console.log(updateDto); - // const updatedApp = await this.applicationSubmissionService.updatePending(this.submissionUuid, updateDto); - // this.$applicationSubmission.next(updatedApp); + const updatedApp = await this.applicationSubmissionService.updatePending(this.submissionUuid, updateDto); + this.$applicationSubmission.next(updatedApp); } } @@ -294,6 +302,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, .afterClosed() .subscribe(async (res) => { if (!res.isCancel) { + this.isExistingResidencesDirty = true; if (res.isEdit) { const index = this.existingResidences.findIndex((e) => e.id === res.existingResidence.id); if (index > -1) { @@ -304,7 +313,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, } this.existingResidencesSource.data = this.existingResidences; } - console.log(this.existingResidences); }); } diff --git a/services/apps/alcs/src/portal/application-submission/application-submission.dto.ts b/services/apps/alcs/src/portal/application-submission/application-submission.dto.ts index dc5abea643..fde5640d36 100644 --- a/services/apps/alcs/src/portal/application-submission/application-submission.dto.ts +++ b/services/apps/alcs/src/portal/application-submission/application-submission.dto.ts @@ -15,7 +15,10 @@ import { } from '../../alcs/application/application-submission-status/submission-status.dto'; import { BaseCodeDto } from '../../common/dtos/base.dto'; import { ApplicationOwnerDto } from './application-owner/application-owner.dto'; -import { ProposedLot } from './application-submission.entity'; +import { + ExistingResidence, + ProposedLot, +} from './application-submission.entity'; export const MAX_DESCRIPTION_FIELD_LENGTH = 4000; export const MAX_LANDUSE_FIELD_LENGTH = 500; @@ -287,6 +290,9 @@ export class ApplicationSubmissionDetailedDto extends ApplicationSubmissionDto { @AutoMap(() => String) naruAgriTourism: string | null; + @AutoMap(() => ExistingResidence) + naruExistingResidences?: ExistingResidence[]; + @AutoMap(() => ApplicationSubmissionToSubmissionStatusDto) submissionStatuses: ApplicationSubmissionToSubmissionStatusDto[]; @@ -683,6 +689,10 @@ export class ApplicationSubmissionUpdateDto { @IsOptional() naruAgriTourism?: string | null; + @IsArray() + @IsOptional() + naruExistingResidences?: ExistingResidence[]; + //Inclusion / Exclusion Fields @IsString() @IsOptional() diff --git a/services/apps/alcs/src/portal/application-submission/application-submission.entity.ts b/services/apps/alcs/src/portal/application-submission/application-submission.entity.ts index 59db1d3596..c3e8b40fc1 100644 --- a/services/apps/alcs/src/portal/application-submission/application-submission.entity.ts +++ b/services/apps/alcs/src/portal/application-submission/application-submission.entity.ts @@ -25,6 +25,11 @@ export class ProposedLot { planNumbers: string | null; } +export class ExistingResidence { + floorArea: number; + description: string; +} + @Entity({ comment: 'Portal intake form fields for applications', }) @@ -662,6 +667,15 @@ export class ApplicationSubmission extends Base { @Column({ type: 'text', nullable: true }) naruAgriTourism: string | null; + @AutoMap(() => [ExistingResidence]) + @Column({ + comment: 'JSONB column containing NARU existing residence', + type: 'jsonb', + array: false, + default: () => `'[]'`, + }) + naruExistingResidences: ExistingResidence[]; + //Inclusion / Exclusion Fields @AutoMap(() => String) diff --git a/services/apps/alcs/src/portal/application-submission/application-submission.service.ts b/services/apps/alcs/src/portal/application-submission/application-submission.service.ts index e6baa3ba92..165bdba015 100644 --- a/services/apps/alcs/src/portal/application-submission/application-submission.service.ts +++ b/services/apps/alcs/src/portal/application-submission/application-submission.service.ts @@ -1015,6 +1015,10 @@ export class ApplicationSubmissionService { updateDto.naruAgriTourism, applicationSubmission.naruAgriTourism, ); + applicationSubmission.naruExistingResidences = filterUndefined( + updateDto.naruExistingResidences, + applicationSubmission.naruExistingResidences, + ); } private setInclusionExclusionFields( diff --git a/services/apps/alcs/src/providers/typeorm/migrations/1727199312985-add-naru-existing-residences.ts b/services/apps/alcs/src/providers/typeorm/migrations/1727199312985-add-naru-existing-residences.ts new file mode 100644 index 0000000000..10f5fddf7f --- /dev/null +++ b/services/apps/alcs/src/providers/typeorm/migrations/1727199312985-add-naru-existing-residences.ts @@ -0,0 +1,16 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddNaruExistingResidences1727199312985 implements MigrationInterface { + name = 'AddNaruExistingResidences1727199312985' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "alcs"."application_submission" ADD "naru_existing_residences" jsonb NOT NULL DEFAULT '[]'`); + await queryRunner.query(`COMMENT ON COLUMN "alcs"."application_submission"."naru_existing_residences" IS 'JSONB column containing NARU existing residence'`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`COMMENT ON COLUMN "alcs"."application_submission"."naru_existing_residences" IS 'JSONB column containing NARU existing residence'`); + await queryRunner.query(`ALTER TABLE "alcs"."application_submission" DROP COLUMN "naru_existing_residences"`); + } + +} From c9964b7e5869b30adb7fc026948593e40e1aeb08 Mon Sep 17 00:00:00 2001 From: abradat Date: Tue, 24 Sep 2024 13:21:43 -0700 Subject: [PATCH 032/107] Add remove action to NARU existing residence table --- .../naru-proposal/naru-proposal.component.html | 4 +++- .../naru-proposal/naru-proposal.component.ts | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 6baf9cb82d..790d9408f6 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -473,7 +473,9 @@

Proposal

> Edit - + diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index 613ff3fda4..349a4589bc 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -316,6 +316,19 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, }); } + onDeleteExistingResidence(existingResidence: FormExisingResidence) { + const index = this.existingResidences.findIndex((e) => e.id === existingResidence.id); + console.log(index); + if (index > -1) { + this.existingResidences.splice(index, 1); + this.existingResidencesSource.data = this.existingResidences; + this.isExistingResidencesDirty = true; + this.existingResidences.forEach((item, index) => { + item.id = index + 1; + }); + } + } + @HostListener('window:resize', ['$event']) onWindowResize() { this.isMobile = window.innerWidth <= MOBILE_BREAKPOINT; From 8e4aa106bf79772a69bc511554929aa86ee14690 Mon Sep 17 00:00:00 2001 From: abradat Date: Tue, 24 Sep 2024 14:55:48 -0700 Subject: [PATCH 033/107] Add truncate to NARU existing residences description --- .../naru-details/naru-details.component.html | 16 ++++++++++++++ .../naru-details/naru-details.component.scss | 16 ++++++++++++++ .../existing-residence-dialog.component.html | 1 + .../existing-residence-dialog.component.ts | 2 +- .../naru-proposal.component.html | 9 ++++++-- .../naru-proposal.component.scss | 15 +++++++++++++ .../naru-proposal/naru-proposal.component.ts | 21 +++++++++++++++++-- portal-frontend/src/app/shared/constants.ts | 1 + .../src/app/shared/utils/string-helper.ts | 8 +++++++ 9 files changed, 84 insertions(+), 5 deletions(-) diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html index 54da0f349d..791f8b5442 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html @@ -141,6 +141,22 @@
+ +
+
Existing Residence
+
Total Floor Area
+
Description
+ +
+ {{ i + 1 }} +
+
+ {{ existingResidence.floorArea }} m2 +
+
{{ existingResidence.description }}
+
+
+
Proposal Map / Site Plan
diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.scss b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.scss index 63cfeaa16b..80594f9f2d 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.scss +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.scss @@ -16,3 +16,19 @@ grid-column-gap: rem(16); } } + +.existing-residences { + display: grid; + grid-template-columns: max-content max-content max-content max-content max-content; + overflow-x: auto; + grid-column-gap: rem(36); + grid-row-gap: rem(12); + + @media screen and (min-width: $tabletBreakpoint) { + grid-template-columns: 1fr 1fr 1fr; + } + + .full-width { + grid-column: 1/3; + } +} diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html index 7d8c28c865..ffcc42f664 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html @@ -48,6 +48,7 @@

Edit Owner

matInput > +
Characters left: {{ 4000 - description.value?.length! }}
- Description - {{ element.description }} + Description + + {{ element.isExpanded ? element.description : getTruncatedDescription(element.description) }} + + {{ element.isExpanded ? 'Read Less' : 'Read More' }} + + diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss index 0fc0736f68..7e98bc6f7f 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss @@ -46,3 +46,18 @@ section { justify-content: center; margin: 10px; } + +td { + vertical-align: top; +} + +.description-column { + width: 40%; +} + +.description-data { + word-wrap: break-word; + white-space: normal; + overflow-wrap: break-word; + max-width: 40%; +} diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index 349a4589bc..f5457a430f 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -23,8 +23,10 @@ import { ConfirmationDialogService } from '../../../../../shared/confirmation-di import { MatTableDataSource } from '@angular/material/table'; import { ExistingResidenceDialogComponent } from './existing-residence-dialog/existing-residence-dialog.component'; import { MOBILE_BREAKPOINT } from '../../../../../shared/utils/breakpoints'; +import { isTruncated, truncate } from '../../../../../shared/utils/string-helper'; +import { EXISTING_RESIDENCE_DESCRIPTION_CHAR_LIMIT } from '../../../../../shared/constants'; -export type FormExisingResidence = { id?: number; floorArea: number; description: string }; +export type FormExisingResidence = { id?: number; floorArea: number; description: string; isExpanded: boolean }; @Component({ selector: 'app-naru-proposal', @@ -154,6 +156,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, id: index + 1, floorArea: item.floorArea, description: item.description, + isExpanded: false, })); this.existingResidencesSource = new MatTableDataSource(this.existingResidences); } @@ -318,7 +321,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, onDeleteExistingResidence(existingResidence: FormExisingResidence) { const index = this.existingResidences.findIndex((e) => e.id === existingResidence.id); - console.log(index); if (index > -1) { this.existingResidences.splice(index, 1); this.existingResidencesSource.data = this.existingResidences; @@ -329,6 +331,21 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, } } + getTruncatedDescription(description: string): string { + return truncate(description, EXISTING_RESIDENCE_DESCRIPTION_CHAR_LIMIT); + } + + isDescriptionTruncated(description: string): boolean { + return isTruncated(description, EXISTING_RESIDENCE_DESCRIPTION_CHAR_LIMIT); + } + + toggleReadMore(existingResidence: FormExisingResidence) { + const index = this.existingResidences.findIndex((e) => e.id === existingResidence.id); + if (index > -1) { + this.existingResidences[index].isExpanded = !this.existingResidences[index].isExpanded; + } + } + @HostListener('window:resize', ['$event']) onWindowResize() { this.isMobile = window.innerWidth <= MOBILE_BREAKPOINT; diff --git a/portal-frontend/src/app/shared/constants.ts b/portal-frontend/src/app/shared/constants.ts index eb03bb10e0..248720b7e7 100644 --- a/portal-frontend/src/app/shared/constants.ts +++ b/portal-frontend/src/app/shared/constants.ts @@ -1 +1,2 @@ export const VISIBLE_COUNT_INCREMENT = 5; +export const EXISTING_RESIDENCE_DESCRIPTION_CHAR_LIMIT = 120; diff --git a/portal-frontend/src/app/shared/utils/string-helper.ts b/portal-frontend/src/app/shared/utils/string-helper.ts index d70405abe1..17d1814874 100644 --- a/portal-frontend/src/app/shared/utils/string-helper.ts +++ b/portal-frontend/src/app/shared/utils/string-helper.ts @@ -10,3 +10,11 @@ export const parseStringToBoolean = (val?: string | null) => { return undefined; } }; + +export function truncate(text: string, limit: number): string { + return text.length > limit ? text.substring(0, limit) + '...' : text; +} + +export function isTruncated(text: string, limit: number): boolean { + return text.length > limit; +} From 0e079187cd44839040e433d470f567866b663a2a Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:48:32 -0700 Subject: [PATCH 034/107] Fix failing tests --- .../application-details.component.spec.ts | 6 ++++++ .../application-submission.service.spec.ts | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/application-details.component.spec.ts b/alcs-frontend/src/app/features/application/applicant-info/application-details/application-details.component.spec.ts index fe141f2d2f..4a682d0291 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/application-details.component.spec.ts +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/application-details.component.spec.ts @@ -56,6 +56,12 @@ describe('ApplicationDetailsComponent', () => { status: {} as ApplicationStatus, type: '', uuid: '', + naruWillBeOverFiveHundredM2: null, + naruWillRetainResidence: null, + naruWillHaveAdditionalResidence: null, + naruWillHaveTemporaryForeignWorkerHousing: null, + naruClustered: null, + naruSetback: null, naruExistingStructures: null, naruFillOrigin: null, naruFillType: null, diff --git a/alcs-frontend/src/app/services/application/application-submission/application-submission.service.spec.ts b/alcs-frontend/src/app/services/application/application-submission/application-submission.service.spec.ts index 5f94cfdd01..d2bfdd1f99 100644 --- a/alcs-frontend/src/app/services/application/application-submission/application-submission.service.spec.ts +++ b/alcs-frontend/src/app/services/application/application-submission/application-submission.service.spec.ts @@ -32,6 +32,12 @@ describe('ApplicationSubmissionService', () => { status: {} as ApplicationStatus, type: '', uuid: '', + naruWillBeOverFiveHundredM2: null, + naruWillRetainResidence: null, + naruWillHaveAdditionalResidence: null, + naruWillHaveTemporaryForeignWorkerHousing: null, + naruClustered: null, + naruSetback: null, naruExistingStructures: null, naruFillOrigin: null, naruFillType: null, From a31f35f720beba3561fc865cc10c429009824af7 Mon Sep 17 00:00:00 2001 From: abradat Date: Wed, 25 Sep 2024 11:27:46 -0700 Subject: [PATCH 035/107] Add mobile design for NARU existing residences --- .../naru-details/naru-details.component.html | 12 ++++- .../naru-details/naru-details.component.ts | 17 +++++-- .../existing-residence-dialog.component.scss | 4 +- .../naru-proposal.component.html | 15 +++++- .../naru-proposal.component.scss | 2 + .../naru-proposal/naru-proposal.component.ts | 2 +- portal-frontend/src/app/shared/constants.ts | 1 + .../naru-residence-mobile-card.component.html | 31 ++++++++++++ .../naru-residence-mobile-card.component.scss | 50 +++++++++++++++++++ .../naru-residence-mobile-card.component.ts | 38 ++++++++++++++ .../src/app/shared/shared.module.ts | 3 ++ 11 files changed, 166 insertions(+), 9 deletions(-) create mode 100644 portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.html create mode 100644 portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.scss create mode 100644 portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.ts diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html index 791f8b5442..51d78d0c14 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html @@ -142,7 +142,7 @@
-
+
Existing Residence
Total Floor Area
Description
@@ -156,6 +156,16 @@
{{ existingResidence.description }}
+ +
Total Floor Area of Existing Residence(s) - If Applicable
+ + +
Proposal Map / Site Plan
diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.ts b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.ts index 6c68512e71..8abb79e826 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.ts +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.ts @@ -1,10 +1,11 @@ -import { Component, Input } from '@angular/core'; +import { Component, HostListener, 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 { ApplicationSubmissionDetailedDto } from '../../../../services/application-submission/application-submission.dto'; import { DOCUMENT_TYPE } from '../../../../shared/dto/document.dto'; import { openFileInline } from '../../../../shared/utils/file'; +import { MOBILE_BREAKPOINT } from '../../../../shared/utils/breakpoints'; @Component({ selector: 'app-naru-details[applicationSubmission]', @@ -16,6 +17,8 @@ export class NaruDetailsComponent { @Input() showEdit = true; @Input() draftMode = false; + isMobile = window.innerWidth <= MOBILE_BREAKPOINT; + _applicationSubmission: ApplicationSubmissionDetailedDto | undefined; @Input() set applicationSubmission(applicationSubmission: ApplicationSubmissionDetailedDto | undefined) { @@ -30,12 +33,15 @@ export class NaruDetailsComponent { proposalMap: ApplicationDocumentDto[] = []; - constructor(private router: Router, private applicationDocumentService: ApplicationDocumentService) {} + constructor( + private router: Router, + private applicationDocumentService: ApplicationDocumentService, + ) {} async onEditSection(step: number) { if (this.draftMode) { await this.router.navigateByUrl( - `/alcs/application/${this._applicationSubmission?.fileNumber}/edit/${step}?errors=t` + `/alcs/application/${this._applicationSubmission?.fileNumber}/edit/${step}?errors=t`, ); } else { await this.router.navigateByUrl(`application/${this._applicationSubmission?.fileNumber}/edit/${step}?errors=t`); @@ -48,4 +54,9 @@ export class NaruDetailsComponent { openFileInline(res.url, file.fileName); } } + + @HostListener('window:resize', ['$event']) + onWindowResize() { + this.isMobile = window.innerWidth <= MOBILE_BREAKPOINT; + } } diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.scss b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.scss index 16df8ecaff..c331f86d81 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.scss +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.scss @@ -67,7 +67,7 @@ display: flex; flex-wrap: wrap; flex-direction: column; - gap: 5px; + gap: 25px; .form-field-floor-area { flex: 1 1 50%; @@ -87,6 +87,7 @@ } @media screen and (max-width: $tabletBreakpoint) { + gap: 10px; .form-field-floor-area { width: 100%; flex: 1 1 100%; @@ -116,7 +117,6 @@ display: flex; flex-direction: column; justify-content: center; - margin-bottom: rem(-14); @media screen and (min-width: $tabletBreakpoint) { margin-bottom: 0; diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index a0be1d10ca..271e538b8d 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -443,9 +443,9 @@

Proposal

Total Floor Area of Existing Residence(s) - If Applicable -
+
- + @@ -494,6 +494,17 @@

Proposal

Existing Residence {{ i + 1 }}
+ + + + diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss index 7e98bc6f7f..9fbd229b46 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss @@ -49,6 +49,8 @@ section { td { vertical-align: top; + padding-top: 10px; + padding-bottom: 10px; } .description-column { diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index f5457a430f..56d1621926 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -26,7 +26,7 @@ import { MOBILE_BREAKPOINT } from '../../../../../shared/utils/breakpoints'; import { isTruncated, truncate } from '../../../../../shared/utils/string-helper'; import { EXISTING_RESIDENCE_DESCRIPTION_CHAR_LIMIT } from '../../../../../shared/constants'; -export type FormExisingResidence = { id?: number; floorArea: number; description: string; isExpanded: boolean }; +export type FormExisingResidence = { id?: number; floorArea: number; description: string; isExpanded?: boolean }; @Component({ selector: 'app-naru-proposal', diff --git a/portal-frontend/src/app/shared/constants.ts b/portal-frontend/src/app/shared/constants.ts index 248720b7e7..5ca62501cd 100644 --- a/portal-frontend/src/app/shared/constants.ts +++ b/portal-frontend/src/app/shared/constants.ts @@ -1,2 +1,3 @@ export const VISIBLE_COUNT_INCREMENT = 5; export const EXISTING_RESIDENCE_DESCRIPTION_CHAR_LIMIT = 120; +export const EXISTING_RESIDENCE_DESCRIPTION_CHAR_LIMIT_MOBILE = 100; diff --git a/portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.html b/portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.html new file mode 100644 index 0000000000..f99b4c5a42 --- /dev/null +++ b/portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.html @@ -0,0 +1,31 @@ + + + + #{{ existingResidence.id }} Total Floor Area: {{ existingResidence.floorArea }} + m2 + + + + + + + + + + + {{ + existingResidence.isExpanded + ? existingResidence.description + : getTruncatedDescription(existingResidence.description) + }} + + {{ existingResidence.isExpanded ? 'Read Less' : 'Read More' }} + + + diff --git a/portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.scss b/portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.scss new file mode 100644 index 0000000000..1f04e7b8ea --- /dev/null +++ b/portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.scss @@ -0,0 +1,50 @@ +@use '../../../../styles/colors'; + +mat-card { + width: 100%; + box-shadow: none; + border: none; + border-bottom: 1px solid #565656; + border-radius: 0; + word-wrap: break-word; + white-space: normal; +} + +mat-card-header { + display: flex; + justify-content: space-between; + align-items: center; + font-weight: bold; + padding: 0 !important; +} + +mat-card-content { + display: flex; + flex-direction: column; + gap: 15px; + padding: 0 0 10px 0 !important; +} + +.span-action { + font-weight: normal; +} + +.last-card { + border-bottom: none !important; + margin-bottom: 20px; +} + +.review-step { + border-bottom: 1px solid #565656; + background-color: transparent; + + mat-card-header { + padding: 5px 0 10px 0 !important; + } +} + +a { + align-self: flex-end; + padding-right: 30px; + padding-bottom: 10px; +} diff --git a/portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.ts b/portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.ts new file mode 100644 index 0000000000..81e3a1e2cb --- /dev/null +++ b/portal-frontend/src/app/shared/mobile/naru-residence-mobile-card/naru-residence-mobile-card.component.ts @@ -0,0 +1,38 @@ +import { CommonModule } from '@angular/common'; +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, type OnInit } from '@angular/core'; +import { FormExisingResidence } from '../../../features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component'; +import { isTruncated, truncate } from '../../utils/string-helper'; +import { EXISTING_RESIDENCE_DESCRIPTION_CHAR_LIMIT_MOBILE } from '../../constants'; + +@Component({ + selector: 'app-naru-residence-mobile-card', + templateUrl: './naru-residence-mobile-card.component.html', + styleUrl: './naru-residence-mobile-card.component.scss', +}) +export class NaruResidenceMobileCardComponent { + @Input() existingResidence!: FormExisingResidence; + @Input() isLast: boolean = false; + @Input() isReviewStep: boolean = false; + @Output() editClicked = new EventEmitter(); + @Output() removeClicked = new EventEmitter(); + + onEdit() { + this.editClicked.emit(this.existingResidence); + } + + onRemove() { + this.removeClicked.emit(this.existingResidence); + } + + getTruncatedDescription(description: string): string { + return truncate(description, EXISTING_RESIDENCE_DESCRIPTION_CHAR_LIMIT_MOBILE); + } + + isDescriptionTruncated(description: string): boolean { + return isTruncated(description, EXISTING_RESIDENCE_DESCRIPTION_CHAR_LIMIT_MOBILE); + } + + toggleReadMore(existingResidence: FormExisingResidence) { + this.existingResidence.isExpanded = !this.existingResidence.isExpanded; + } +} diff --git a/portal-frontend/src/app/shared/shared.module.ts b/portal-frontend/src/app/shared/shared.module.ts index 1228fea16d..a6c6f7e54e 100644 --- a/portal-frontend/src/app/shared/shared.module.ts +++ b/portal-frontend/src/app/shared/shared.module.ts @@ -53,6 +53,7 @@ import { OptionalAttachmentsMobileCardComponent } from './optional-attachments-m import { OtherAttachmentMobileCardComponent } from './other-attachment-mobile-card/other-attachment-mobile-card.component'; import { ParcelOwnerMobileCardComponent } from './mobile/parcel-owner-mobile-card/parcel-owner-mobile-card.component'; import { TransfereeMobileCardComponent } from './mobile/transferee-mobile-card/transferee-mobile-card.component'; +import { NaruResidenceMobileCardComponent } from './mobile/naru-residence-mobile-card/naru-residence-mobile-card.component'; @NgModule({ providers: [ @@ -113,6 +114,7 @@ import { TransfereeMobileCardComponent } from './mobile/transferee-mobile-card/t OtherAttachmentMobileCardComponent, ParcelOwnerMobileCardComponent, TransfereeMobileCardComponent, + NaruResidenceMobileCardComponent, ], exports: [ CommonModule, @@ -165,6 +167,7 @@ import { TransfereeMobileCardComponent } from './mobile/transferee-mobile-card/t OtherAttachmentMobileCardComponent, ParcelOwnerMobileCardComponent, TransfereeMobileCardComponent, + NaruResidenceMobileCardComponent, ], }) export class SharedModule { From 09ee000e4d79d5aa2a80ea1379b4c9d763a46c17 Mon Sep 17 00:00:00 2001 From: abradat Date: Wed, 25 Sep 2024 11:50:07 -0700 Subject: [PATCH 036/107] Add NARU existing residences to public view --- .../naru-details/naru-details.component.html | 17 +++++++ .../naru-details/naru-details.component.scss | 45 ++++++++++++------- .../services/public/public-application.dto.ts | 6 +++ .../application/public-application.dto.ts | 8 +++- 4 files changed, 60 insertions(+), 16 deletions(-) diff --git a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html index d19c9a205e..0f52a57cdb 100644 --- a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html @@ -133,6 +133,23 @@
+ +
+
Existing Residence
+
Total Floor Area
+
Description
+ +
+ {{ i + 1 }} +
+
+ {{ existingResidence.floorArea }} m2 +
+
{{ existingResidence.description }}
+
+
+
+
Proposal Map / Site Plan
diff --git a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.scss b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.scss index 9999107edd..1133f57b42 100644 --- a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.scss +++ b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.scss @@ -1,24 +1,39 @@ @use '../../../../../../styles/functions' as *; .soil-table { - display: grid; - overflow-x: auto; - grid-column-gap: rem(36); - grid-row-gap: rem(12); - grid-template-columns: max-content max-content; - - @media screen and (min-width: $tabletBreakpoint) { - grid-template-columns: 0.55fr 1fr; - } - - @media screen and (min-width: $midBreakpoint) { - grid-template-columns: 0.95fr 3fr; - grid-column-gap: rem(16); - } + display: grid; + overflow-x: auto; + grid-column-gap: rem(36); + grid-row-gap: rem(12); + grid-template-columns: max-content max-content; + + @media screen and (min-width: $tabletBreakpoint) { + grid-template-columns: 0.55fr 1fr; + } + + @media screen and (min-width: $midBreakpoint) { + grid-template-columns: 0.95fr 3fr; + grid-column-gap: rem(16); + } .spacer-row { grid-column: 1/4; height: rem(16); } } - \ No newline at end of file + +.existing-residences { + display: grid; + grid-template-columns: max-content max-content max-content max-content max-content; + overflow-x: auto; + grid-column-gap: rem(36); + grid-row-gap: rem(12); + + @media screen and (min-width: $tabletBreakpoint) { + grid-template-columns: 1fr 1fr 1fr; + } + + .full-width { + grid-column: 1/3; + } +} diff --git a/portal-frontend/src/app/services/public/public-application.dto.ts b/portal-frontend/src/app/services/public/public-application.dto.ts index cd597b65d6..558d841fbb 100644 --- a/portal-frontend/src/app/services/public/public-application.dto.ts +++ b/portal-frontend/src/app/services/public/public-application.dto.ts @@ -6,6 +6,11 @@ import { } from '../application-submission/application-submission.dto'; import { PublicDocumentDto, PublicOwnerDto, PublicParcelDto } from './public.dto'; +export interface ExistingResidence { + floorArea: number; + description: string; +} + export interface GetPublicApplicationResponseDto { submission: PublicApplicationSubmissionDto; parcels: PublicParcelDto[]; @@ -112,6 +117,7 @@ export interface PublicApplicationSubmissionDto { naruToPlaceAverageDepth: number | null; naruSleepingUnits: number | null; naruAgriTourism: string | null; + naruExistingResidences?: ExistingResidence[]; //Inclusion / Exclusion Fields prescribedBody: string | null; diff --git a/services/apps/alcs/src/portal/public/application/public-application.dto.ts b/services/apps/alcs/src/portal/public/application/public-application.dto.ts index 1e0648d59c..8c687f58a2 100644 --- a/services/apps/alcs/src/portal/public/application/public-application.dto.ts +++ b/services/apps/alcs/src/portal/public/application/public-application.dto.ts @@ -1,7 +1,10 @@ import { AutoMap } from 'automapper-classes'; import { ApplicationStatusDto } from '../../../alcs/application/application-submission-status/submission-status.dto'; import { NaruSubtypeDto } from '../../application-submission/application-submission.dto'; -import { ProposedLot } from '../../application-submission/application-submission.entity'; +import { + ExistingResidence, + ProposedLot, +} from '../../application-submission/application-submission.entity'; import { PublicOwnerDto } from '../public.dto'; export class PublicApplicationSubmissionDto { @@ -268,6 +271,9 @@ export class PublicApplicationSubmissionDto { @AutoMap(() => String) naruAgriTourism: string | null; + @AutoMap(() => ExistingResidence) + naruExistingResidences?: ExistingResidence[]; + //Inclusion / Exclusion Fields @AutoMap(() => String) prescribedBody: string | null; From 8b569dcf913db64d569e916b54b37949d3a7916b Mon Sep 17 00:00:00 2001 From: abradat Date: Wed, 25 Sep 2024 12:35:22 -0700 Subject: [PATCH 037/107] Add NARU existing residence to ALCS Application Info --- .../naru-details/naru-details.component.html | 17 +++++++++++++ .../naru-details/naru-details.component.scss | 25 +++++++++++++++++++ .../services/application/application.dto.ts | 6 +++++ 3 files changed, 48 insertions(+) diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html index e32a308c52..97df4b98a1 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html @@ -100,6 +100,23 @@ {{ _applicationSubmission.naruExistingStructures }}
+ +
+
Existing Residence
+
Total Floor Area
+
Description
+ +
+ {{ i + 1 }} +
+
+ {{ existingResidence.floorArea }} m2 +
+
{{ existingResidence.description }}
+
+
+
+
Proposal Map / Site Plan
diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.scss b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.scss index f53378423d..3b3fd509ff 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.scss +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.scss @@ -4,3 +4,28 @@ grid-column-gap: 36px; grid-row-gap: 12px; } + +.existing-residences { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + word-wrap: break-word; + white-space: pre-line; + grid-column-gap: 36px; + grid-row-gap: 12px; + + .full-width { + grid-column: 1/3; + } + + .grid-1 { + grid-column: 1/2; + } + + .grid-2 { + grid-column: 2/3; + } + + .grid-3 { + grid-column: 3/5; + } +} diff --git a/alcs-frontend/src/app/services/application/application.dto.ts b/alcs-frontend/src/app/services/application/application.dto.ts index d25a47b51c..4a77c955bd 100644 --- a/alcs-frontend/src/app/services/application/application.dto.ts +++ b/alcs-frontend/src/app/services/application/application.dto.ts @@ -48,6 +48,11 @@ export interface ProposedLot { componentUuid: string; } +export interface ExistingResidence { + floorArea: number; + description: string; +} + export interface ApplicationReviewDto { localGovernmentFileNumber: string; firstName: string; @@ -205,6 +210,7 @@ export interface ApplicationSubmissionDto { naruToPlaceAverageDepth: number | null; naruSleepingUnits: number | null; naruAgriTourism: string | null; + naruExistingResidences?: ExistingResidence[]; //Inclusion / Exclusion Fields prescribedBody: string | null; From 12dd73a94dc881cb1d98b515c1dfd1925a90ea8f Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:43:57 -0700 Subject: [PATCH 038/107] Convert NARU subtypes to question answers --- ...4004390-convert_naru_subtype_to_answers.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 services/apps/alcs/src/providers/typeorm/migrations/1727304004390-convert_naru_subtype_to_answers.ts diff --git a/services/apps/alcs/src/providers/typeorm/migrations/1727304004390-convert_naru_subtype_to_answers.ts b/services/apps/alcs/src/providers/typeorm/migrations/1727304004390-convert_naru_subtype_to_answers.ts new file mode 100644 index 0000000000..62f31cf767 --- /dev/null +++ b/services/apps/alcs/src/providers/typeorm/migrations/1727304004390-convert_naru_subtype_to_answers.ts @@ -0,0 +1,22 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class ConvertNaruSubtypeToAnswers1727304004390 + implements MigrationInterface +{ + public async up(queryRunner: QueryRunner): Promise { + queryRunner.query(` + update alcs.application_submission as2 + set + naru_will_have_additional_residence = case + when as2.naru_subtype_code = 'ARFU' then true + end, + naru_will_be_over_five_hundred_m2 = case + when as2.naru_subtype_code = 'PRIN' then true + end + where as2.naru_subtype_code is not null + and as2.naru_subtype_code <> 'TOUR'; + `); + } + + public async down(queryRunner: QueryRunner): Promise {} +} From ef7ab8f4fb208ea7d4f9c93389c18cf529fb30b6 Mon Sep 17 00:00:00 2001 From: abradat Date: Wed, 25 Sep 2024 17:13:57 -0700 Subject: [PATCH 039/107] Add NARU existing residence to portal PDF --- .../generate-submission-document.service.ts | 16 +++++++++++----- .../submissions/naru-submission-template.docx | Bin 48807 -> 53477 bytes 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts b/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts index 5a6510448e..2966693d9d 100644 --- a/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts +++ b/services/apps/alcs/src/portal/pdf-generation/generate-submission-document.service.ts @@ -254,11 +254,11 @@ export class GenerateSubmissionDocumentService { const otherDocuments = documents.filter( (e) => (!e.typeCode || - [ - DOCUMENT_TYPE.PHOTOGRAPH, - DOCUMENT_TYPE.PROFESSIONAL_REPORT, - DOCUMENT_TYPE.OTHER, - ].includes((e.typeCode ?? 'undefined') as DOCUMENT_TYPE)) && + [ + DOCUMENT_TYPE.PHOTOGRAPH, + DOCUMENT_TYPE.PROFESSIONAL_REPORT, + DOCUMENT_TYPE.OTHER, + ].includes((e.typeCode ?? 'undefined') as DOCUMENT_TYPE)) && e.document.source === DOCUMENT_SOURCE.APPLICANT, ); @@ -370,6 +370,11 @@ export class GenerateSubmissionDocumentService { } private populateNaruData(pdfData: any, submission: ApplicationSubmission) { + const naruExistingResidences = submission.naruExistingResidences.map( + (item, index) => { + return { ...item, cnt: index + 1 }; + }, + ); return { ...pdfData, naruSubtypeLabel: submission.naruSubtype?.label, @@ -385,6 +390,7 @@ export class GenerateSubmissionDocumentService { naruWillImportFill: formatBooleanToYesNoString( submission.naruWillImportFill, ), + naruExistingResidences: naruExistingResidences, // NFU Proposal => Soil and Fill naruFillType: submission.naruFillType, diff --git a/services/templates/pdf/submissions/naru-submission-template.docx b/services/templates/pdf/submissions/naru-submission-template.docx index 9c2e0866a67cdb28176b079dd00c8c03f053cc67..78183607b45763bf8bf34eecb8cd84d2c630acaa 100644 GIT binary patch delta 24136 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 delta 19454 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 From e0610ccf8bd206043d01c8f9280b675774d97386 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 26 Sep 2024 10:31:01 -0700 Subject: [PATCH 040/107] Remove redundant necessity question --- .../naru-proposal.component.html | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 3ed1610ae9..3c798b3448 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -249,30 +249,6 @@

Proposal

Characters left: {{ 4000 - residenceNecessityText.textLength }}
-
- - - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - residenceNecessityText.textLength }}
-
-
Date: Thu, 26 Sep 2024 10:33:45 -0700 Subject: [PATCH 041/107] Relabel necessity question --- .../naru-proposal/naru-proposal.component.html | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 3c798b3448..8b25005999 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -223,13 +223,11 @@

Proposal

- -
- Include a description of the scale, intensity, and labour capacity of the farm operation -
+ + +
+ warning +
This field is required
+
+
Characters left: {{ 4000 - tfwhCountText.textLength }}
+
+ +
+ + Will the temporary foreign worker housing be designed to move from one place to another? + +
Examples: modular trailers, manufactured homes
+ + Yes + No + +
+ warning +
This field is required
+
+
+ +
+ +
+ The farm may include multiple parcels (leased, rented or owned) that are not adjacent but are managed as a + single operation. +
+ + + +
+ warning +
This field is required
+
+
Characters left: {{ 4000 - tfwhFarmSizeText.textLength }}
+
+
(null, [Validators.required]); purpose = new FormControl(null, [Validators.required]); residenceNecessity = new FormControl(null, [Validators.required]); + tfwhCount = new FormControl(null, [Validators.required]); + tfwhDesign = new FormControl(null, [Validators.required]); + tfwhFarmSize = new FormControl(null, [Validators.required]); clustered = new FormControl(null, [Validators.required]); setback = new FormControl(null, [Validators.required]); locationRationale = new FormControl(null, [Validators.required]); @@ -74,6 +77,9 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, willImportFill: this.willImportFill, purpose: this.purpose, residenceNecessity: this.residenceNecessity, + tfwhCount: this.tfwhCount, + tfwhDesign: this.tfwhDesign, + tfwhFarmSize: this.tfwhFarmSize, clustered: this.clustered, setback: this.setback, locationRationale: this.locationRationale, @@ -111,6 +117,9 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, willImportFill: applicationSubmission.naruWillImportFill, purpose: applicationSubmission.purpose, residenceNecessity: applicationSubmission.naruResidenceNecessity, + tfwhCount: applicationSubmission.tfwhCount, + tfwhDesign: applicationSubmission.tfwhDesign, + tfwhFarmSize: applicationSubmission.tfwhFarmSize, clustered: applicationSubmission.naruClustered, setback: applicationSubmission.naruSetback, fillType: applicationSubmission.naruFillType, @@ -297,6 +306,9 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, willImportFill, purpose, residenceNecessity, + tfwhCount, + tfwhDesign, + tfwhFarmSize, clustered, setback, fillType, @@ -314,6 +326,9 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, naruWillImportFill: willImportFill, purpose: purpose, naruResidenceNecessity: residenceNecessity, + tfwhCount: tfwhCount, + tfwhDesign: tfwhDesign, + tfwhFarmSize: tfwhFarmSize, naruClustered: clustered, naruSetback: setback, naruFillType: fillType, diff --git a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html index 2cd821ea1e..121e30aeb1 100644 --- a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html @@ -67,6 +67,28 @@
+
How many temporary foreign workers will be housed by the proposal?
+
+ {{ applicationSubmission.tfwhCount }} + +
+ +
+ Will the temporary foreign worker housing be designed to move from one place to another? +
+
+ {{ applicationSubmission.tfwhDesign }} + +
+ +
+ What is the size (in hectares) of the farm operation that the temporary foreign workers will be supporting? +
+
+ {{ applicationSubmission.tfwhFarmSize }} + +
+
Will the proposed residence(s) be clustered with existing residential structures? Please explain.
diff --git a/portal-frontend/src/app/services/application-submission/application-submission.dto.ts b/portal-frontend/src/app/services/application-submission/application-submission.dto.ts index 6f5f7236bc..6b40750d38 100644 --- a/portal-frontend/src/app/services/application-submission/application-submission.dto.ts +++ b/portal-frontend/src/app/services/application-submission/application-submission.dto.ts @@ -136,6 +136,9 @@ export interface ApplicationSubmissionDetailedDto extends ApplicationSubmissionD naruWillHaveAdditionalResidence: boolean | null; naruWillHaveTemporaryForeignWorkerHousing: boolean | null; naruWillImportFill: boolean | null; + tfwhCount: string | null; + tfwhDesign: boolean | null; + tfwhFarmSize: string | null; naruClustered: string | null; naruSetback: string | null; naruSubtype: NaruSubtypeDto | null; @@ -251,6 +254,9 @@ export interface ApplicationSubmissionUpdateDto { naruWillHaveAdditionalResidence?: boolean | null; naruWillHaveTemporaryForeignWorkerHousing?: boolean | null; naruWillImportFill?: boolean | null; + tfwhCount?: string | null; + tfwhDesign?: boolean | null; + tfwhFarmSize?: string | null; naruClustered?: string | null; naruSetback?: string | null; naruSubtypeCode?: string | null; diff --git a/portal-frontend/src/app/services/public/public-application.dto.ts b/portal-frontend/src/app/services/public/public-application.dto.ts index f8a01942a1..0c671a964f 100644 --- a/portal-frontend/src/app/services/public/public-application.dto.ts +++ b/portal-frontend/src/app/services/public/public-application.dto.ts @@ -101,6 +101,9 @@ export interface PublicApplicationSubmissionDto { naruWillHaveAdditionalResidence: boolean | null; naruWillHaveTemporaryForeignWorkerHousing: boolean | null; naruWillImportFill: boolean | null; + tfwhCount: string | null; + tfwhDesign: boolean | null; + tfwhFarmSize: string | null; naruClustered: string | null; naruSetback: string | null; naruSubtype: NaruSubtypeDto | null; From 2acb9a0c3026344da6bd0c95cfb8533480a31559 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 26 Sep 2024 13:42:27 -0700 Subject: [PATCH 048/107] Add TFWH fields to ALCS UI --- .../naru-details/naru-details.component.html | 19 +++++++++++++++++++ .../services/application/application.dto.ts | 3 +++ 2 files changed, 22 insertions(+) diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html index 4e0cc849fb..47a0b1add8 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html @@ -49,6 +49,25 @@ {{ _applicationSubmission.naruResidenceNecessity }}
+
How many temporary foreign workers will be housed by the proposal?
+
+ {{ _applicationSubmission.tfwhCount }} +
+ +
+ Will the temporary foreign worker housing be designed to move from one place to another? +
+
+ {{ _applicationSubmission.tfwhDesign }} +
+ +
+ What is the size (in hectares) of the farm operation that the temporary foreign workers will be supporting? +
+
+ {{ _applicationSubmission.tfwhFarmSize }} +
+
Will the proposed residence(s) be clustered with existing residential structures? Please explain.
diff --git a/alcs-frontend/src/app/services/application/application.dto.ts b/alcs-frontend/src/app/services/application/application.dto.ts index 6562e14ba3..2dc5e170f3 100644 --- a/alcs-frontend/src/app/services/application/application.dto.ts +++ b/alcs-frontend/src/app/services/application/application.dto.ts @@ -194,6 +194,9 @@ export interface ApplicationSubmissionDto { naruWillHaveAdditionalResidence: boolean | null; naruWillHaveTemporaryForeignWorkerHousing: boolean | null; naruWillImportFill: boolean | null; + tfwhCount: string | null; + tfwhDesign: boolean | null; + tfwhFarmSize: string | null; naruClustered: string | null; naruSetback: string | null; naruSubtype: BaseCodeDto | null; From dd7fed330b0833d5a88ff0bbe2612d36632f7a12 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 26 Sep 2024 13:45:44 -0700 Subject: [PATCH 049/107] Fix using wrong values to show clustered/setback errors --- .../naru-details/naru-details.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html index 2ce58c122b..f63b68fc83 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html @@ -106,7 +106,7 @@
{{ _applicationSubmission.naruClustered }} - +
@@ -114,7 +114,7 @@
{{ _applicationSubmission.naruSetback }} - +
From e86c88a0dda9ae305bf92d351ed3eee2bdcfa4c4 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 26 Sep 2024 17:37:03 -0700 Subject: [PATCH 050/107] Conditionally display NARU fields based on questions in portal/public --- .../naru-details/naru-details.component.html | 76 ++++++++++--------- .../naru-proposal.component.html | 26 ++++--- .../naru-proposal/naru-proposal.component.ts | 69 ++++++++--------- .../naru-details/naru-details.component.html | 76 ++++++++++--------- 4 files changed, 125 insertions(+), 122 deletions(-) diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html index f63b68fc83..07ff2b723e 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html @@ -61,45 +61,49 @@
-
- Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or - long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} - -
- -
- Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the - short or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} - -
+ +
+ Is your proposal necessary for farm use? If so, please explain + what the temporary foreign workers will be doing on the farm. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} + +
+
-
How many temporary foreign workers will be housed by the proposal?
-
- {{ _applicationSubmission.tfwhCount }} - -
+ +
How many temporary foreign workers will be housed by the proposal?
+
+ {{ _applicationSubmission.tfwhCount }} + +
-
- Will the temporary foreign worker housing be designed to move from one place to another? -
-
- {{ _applicationSubmission.tfwhDesign }} - -
+
+ Will the temporary foreign worker housing be designed to move from one place to another? +
+
+ {{ _applicationSubmission.tfwhDesign }} + +
-
- What is the size (in hectares) of the farm operation that the temporary foreign workers will be supporting? -
-
- {{ _applicationSubmission.tfwhFarmSize }} - -
+
+ What is the size (in hectares) of the farm operation that the temporary foreign workers will be supporting? +
+
+ {{ _applicationSubmission.tfwhFarmSize }} + +
+
Will the proposed residence(s) be clustered with existing residential structures? Please explain. diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 692dbf449b..515f0610d3 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -67,12 +67,7 @@

Proposal

Is your proposal to retain an existing residence while building a new residence? - + Characters left: {{ 4000 - purposeText.textLength }}
-
+
@@ -247,7 +251,7 @@

Proposal

Characters left: {{ 4000 - residenceNecessityText.textLength }}
-
+
@@ -259,7 +263,7 @@

Proposal

Characters left: {{ 4000 - tfwhCountText.textLength }}
-
+
Will the temporary foreign worker housing be designed to move from one place to another? @@ -286,7 +290,7 @@

Proposal

-
+
{ - this.willRetainResidence.setValue(!confirmed); - - if (confirmed) { - // TODO: wipe same fields as above + this.residenceNecessity.setValue(null); } }); } } onChangeAdditional(answerIsYes: boolean) { - // TODO: check for values of any fields that will be removed - // if a user answers 'no' - const hasValues = true; - - if (this.willHaveAdditionalResidence.value !== null && !answerIsYes && hasValues) { + if ( + !answerIsYes && + this.residenceNecessity.value !== null && + this.willBeOverFiveHundredM2.value !== true && + this.willHaveTemporaryForeignWorkerHousing.value !== true + ) { this.confirmationDialogService .openDialog({ title: 'Is your proposal for an additional residence?', @@ -226,18 +207,22 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, this.willHaveAdditionalResidence.setValue(!confirmed); if (confirmed) { - // TODO: wipe same fields as above + this.residenceNecessity.setValue(null); } }); } } onChangeTemporaryHousing(answerIsYes: boolean) { - // TODO: check for values of any fields that will be removed - // if a user answers 'no' - const hasValues = true; - - if (this.willHaveTemporaryForeignWorkerHousing.value !== null && !answerIsYes && hasValues) { + if ( + !answerIsYes && + (this.tfwhCount.value !== null || + this.tfwhDesign.value !== null || + this.tfwhFarmSize.value !== null || + (this.residenceNecessity.value !== null && + this.willBeOverFiveHundredM2.value !== true && + this.willHaveAdditionalResidence.value !== true)) + ) { this.confirmationDialogService .openDialog({ title: 'Is your proposal for temporary foreign worker housing?', @@ -247,7 +232,13 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, this.willHaveTemporaryForeignWorkerHousing.setValue(!confirmed); if (confirmed) { - // TODO: wipe same fields as above + this.tfwhCount.setValue(null); + this.tfwhDesign.setValue(null); + this.tfwhFarmSize.setValue(null); + + if (this.willBeOverFiveHundredM2.value !== true && this.willHaveAdditionalResidence.value !== true) { + this.residenceNecessity.setValue(null); + } } }); } diff --git a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html index 121e30aeb1..42dc5b97a9 100644 --- a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html @@ -49,45 +49,49 @@
-
- Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or - long term. -
-
- {{ applicationSubmission.naruResidenceNecessity }} - -
- -
- Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the - short or long term. -
-
- {{ applicationSubmission.naruResidenceNecessity }} - -
+ +
+ Is your proposal necessary for farm use? If so, please explain + what the temporary foreign workers will be doing on the farm. +
+
+ {{ applicationSubmission.naruResidenceNecessity }} + +
+
-
How many temporary foreign workers will be housed by the proposal?
-
- {{ applicationSubmission.tfwhCount }} - -
+ +
How many temporary foreign workers will be housed by the proposal?
+
+ {{ applicationSubmission.tfwhCount }} + +
-
- Will the temporary foreign worker housing be designed to move from one place to another? -
-
- {{ applicationSubmission.tfwhDesign }} - -
+
+ Will the temporary foreign worker housing be designed to move from one place to another? +
+
+ {{ applicationSubmission.tfwhDesign }} + +
-
- What is the size (in hectares) of the farm operation that the temporary foreign workers will be supporting? -
-
- {{ applicationSubmission.tfwhFarmSize }} - -
+
+ What is the size (in hectares) of the farm operation that the temporary foreign workers will be supporting? +
+
+ {{ applicationSubmission.tfwhFarmSize }} + +
+
Will the proposed residence(s) be clustered with existing residential structures? Please explain. From ab5a8608ce0c9eef39431e3caff1425ecdb3d467 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 26 Sep 2024 17:37:43 -0700 Subject: [PATCH 051/107] Conditionally display NARU fields based on questions in ALCS --- .../naru-details/naru-details.component.html | 67 ++++++++++--------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html index 47a0b1add8..ca14166b33 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html @@ -33,40 +33,45 @@ {{ _applicationSubmission.purpose }}
-
- Describe the necessity for an additional residence for farm use and how it will support agriculture in the short or - long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} -
- -
- Describe how the proposal for a principal residence more than 500 m2 will support agriculture in the - short or long term. -
-
- {{ _applicationSubmission.naruResidenceNecessity }} -
+ +
+ Is your proposal necessary for farm use? If so, please explain + what the temporary foreign workers will be doing on the farm. +
+
+ {{ _applicationSubmission.naruResidenceNecessity }} +
+
-
How many temporary foreign workers will be housed by the proposal?
-
- {{ _applicationSubmission.tfwhCount }} -
+ +
How many temporary foreign workers will be housed by the proposal?
+
+ {{ _applicationSubmission.tfwhCount }} +
-
- Will the temporary foreign worker housing be designed to move from one place to another? -
-
- {{ _applicationSubmission.tfwhDesign }} -
+
+ Will the temporary foreign worker housing be designed to move from one place to another? +
+
+ {{ _applicationSubmission.tfwhDesign }} +
-
- What is the size (in hectares) of the farm operation that the temporary foreign workers will be supporting? -
-
- {{ _applicationSubmission.tfwhFarmSize }} -
+
+ What is the size (in hectares) of the farm operation that the temporary foreign workers will be supporting? +
+
+ {{ _applicationSubmission.tfwhFarmSize }} +
+
Will the proposed residence(s) be clustered with existing residential structures? Please explain. From 65014120a04d15b9c40d00e1710ed17b44a2affe Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Thu, 26 Sep 2024 17:43:45 -0700 Subject: [PATCH 052/107] Fix building plans --- .../naru-details/naru-details.component.html | 16 +++++++++------- .../naru-details/naru-details.component.html | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html index ca14166b33..e20f5a9ea7 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html @@ -111,14 +111,16 @@
-
Detailed Building Plan(s)
-
-
- - {{ file.fileName }} - + +
Detailed Building Plan(s)
+ -
+
Describe the type and amount of fill proposed to be placed.
diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html index 07ff2b723e..964b808464 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html @@ -151,7 +151,7 @@ {{ plan.fileName }} - +
From 0830ad73157edd47cc31929b4daa4e9a43db81a9 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:21:21 -0700 Subject: [PATCH 053/107] Fix value checks --- .../naru-proposal/naru-proposal.component.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index 1aac6004aa..86474ae41c 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -172,7 +172,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, onChangeOver500m2(answerIsYes: boolean) { if ( !answerIsYes && - this.residenceNecessity.value !== null && + this.residenceNecessity.value && this.willHaveAdditionalResidence.value !== true && this.willHaveTemporaryForeignWorkerHousing.value !== true ) { @@ -194,7 +194,7 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, onChangeAdditional(answerIsYes: boolean) { if ( !answerIsYes && - this.residenceNecessity.value !== null && + this.residenceNecessity.value && this.willBeOverFiveHundredM2.value !== true && this.willHaveTemporaryForeignWorkerHousing.value !== true ) { @@ -214,12 +214,16 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, } onChangeTemporaryHousing(answerIsYes: boolean) { + console.log(this.tfwhCount.value); + console.log(this.tfwhDesign.value); + console.log(this.tfwhFarmSize.value); + console.log(this.tfwhCount.value || this.tfwhDesign.value !== null || this.tfwhFarmSize.value); if ( !answerIsYes && - (this.tfwhCount.value !== null || + (this.tfwhCount.value || this.tfwhDesign.value !== null || - this.tfwhFarmSize.value !== null || - (this.residenceNecessity.value !== null && + this.tfwhFarmSize.value || + (this.residenceNecessity.value && this.willBeOverFiveHundredM2.value !== true && this.willHaveAdditionalResidence.value !== true)) ) { From 9c027226e02a5c289fd7c31109fb077f27e7e058 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:57:44 -0700 Subject: [PATCH 054/107] Fix test mocks --- .../application-details/application-details.component.spec.ts | 3 +++ .../application-submission.service.spec.ts | 3 +++ 2 files changed, 6 insertions(+) diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/application-details.component.spec.ts b/alcs-frontend/src/app/features/application/applicant-info/application-details/application-details.component.spec.ts index 4a682d0291..763c225ebd 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/application-details.component.spec.ts +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/application-details.component.spec.ts @@ -60,6 +60,9 @@ describe('ApplicationDetailsComponent', () => { naruWillRetainResidence: null, naruWillHaveAdditionalResidence: null, naruWillHaveTemporaryForeignWorkerHousing: null, + tfwhCount: null, + tfwhDesign: null, + tfwhFarmSize: null, naruClustered: null, naruSetback: null, naruExistingStructures: null, diff --git a/alcs-frontend/src/app/services/application/application-submission/application-submission.service.spec.ts b/alcs-frontend/src/app/services/application/application-submission/application-submission.service.spec.ts index d2bfdd1f99..e26b0d4ad1 100644 --- a/alcs-frontend/src/app/services/application/application-submission/application-submission.service.spec.ts +++ b/alcs-frontend/src/app/services/application/application-submission/application-submission.service.spec.ts @@ -36,6 +36,9 @@ describe('ApplicationSubmissionService', () => { naruWillRetainResidence: null, naruWillHaveAdditionalResidence: null, naruWillHaveTemporaryForeignWorkerHousing: null, + tfwhCount: null, + tfwhDesign: null, + tfwhFarmSize: null, naruClustered: null, naruSetback: null, naruExistingStructures: null, From cbcd944644fd9f2f4ada591abf1f6096c22ef5fb Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:57:53 -0700 Subject: [PATCH 055/107] Remove debugging logs --- .../proposal/naru-proposal/naru-proposal.component.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index 86474ae41c..c293565d71 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -214,10 +214,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, } onChangeTemporaryHousing(answerIsYes: boolean) { - console.log(this.tfwhCount.value); - console.log(this.tfwhDesign.value); - console.log(this.tfwhFarmSize.value); - console.log(this.tfwhCount.value || this.tfwhDesign.value !== null || this.tfwhFarmSize.value); if ( !answerIsYes && (this.tfwhCount.value || From cfd2c3278c8b348044b41da6ec606a9bc40d2a63 Mon Sep 17 00:00:00 2001 From: Felipe Barreta Date: Fri, 27 Sep 2024 12:09:09 -0700 Subject: [PATCH 056/107] Add migration to fix html text --- .../1727461542081-change_app_type_html.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 services/apps/alcs/src/providers/typeorm/migrations/1727461542081-change_app_type_html.ts diff --git a/services/apps/alcs/src/providers/typeorm/migrations/1727461542081-change_app_type_html.ts b/services/apps/alcs/src/providers/typeorm/migrations/1727461542081-change_app_type_html.ts new file mode 100644 index 0000000000..d081b18f84 --- /dev/null +++ b/services/apps/alcs/src/providers/typeorm/migrations/1727461542081-change_app_type_html.ts @@ -0,0 +1,15 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class changeAppTypeHtml1727461542081 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `UPDATE "alcs"."application_type" SET + "html_description"=CONCAT(html_description, '

If you need help selecting an application type, please Contact Us.

') + WHERE "html_description" is not null`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + // N/A + } +} From 0920fb22250d4fa6aa1f6d50beac03b0023bae0d Mon Sep 17 00:00:00 2001 From: Felipe Barreta Date: Fri, 27 Sep 2024 12:12:12 -0700 Subject: [PATCH 057/107] Typo fix --- .../typeorm/migrations/1727461542081-change_app_type_html.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/apps/alcs/src/providers/typeorm/migrations/1727461542081-change_app_type_html.ts b/services/apps/alcs/src/providers/typeorm/migrations/1727461542081-change_app_type_html.ts index d081b18f84..ac887a3f6d 100644 --- a/services/apps/alcs/src/providers/typeorm/migrations/1727461542081-change_app_type_html.ts +++ b/services/apps/alcs/src/providers/typeorm/migrations/1727461542081-change_app_type_html.ts @@ -1,6 +1,6 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -export class changeAppTypeHtml1727461542081 implements MigrationInterface { +export class ChangeAppTypeHtml1727461542081 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { await queryRunner.query( `UPDATE "alcs"."application_type" SET From f7dc37245a3dbd3ef861f4bb252d89721301d299 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Fri, 27 Sep 2024 12:38:03 -0700 Subject: [PATCH 058/107] Add SVG siting figures --- .../src/assets/siting-figures/clustered.svg | 4358 +++++++++++++++++ .../src/assets/siting-figures/setback.svg | 13 + .../src/assets/siting-figures/unclustered.svg | 2704 ++++++++++ 3 files changed, 7075 insertions(+) create mode 100644 portal-frontend/src/assets/siting-figures/clustered.svg create mode 100644 portal-frontend/src/assets/siting-figures/setback.svg create mode 100644 portal-frontend/src/assets/siting-figures/unclustered.svg diff --git a/portal-frontend/src/assets/siting-figures/clustered.svg b/portal-frontend/src/assets/siting-figures/clustered.svg new file mode 100644 index 0000000000..648e54ffbd --- /dev/null +++ b/portal-frontend/src/assets/siting-figures/clustered.svg @@ -0,0 +1,4358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/portal-frontend/src/assets/siting-figures/setback.svg b/portal-frontend/src/assets/siting-figures/setback.svg new file mode 100644 index 0000000000..c0e90cf3c8 --- /dev/null +++ b/portal-frontend/src/assets/siting-figures/setback.svg @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/portal-frontend/src/assets/siting-figures/unclustered.svg b/portal-frontend/src/assets/siting-figures/unclustered.svg new file mode 100644 index 0000000000..13983d6386 --- /dev/null +++ b/portal-frontend/src/assets/siting-figures/unclustered.svg @@ -0,0 +1,2704 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 1b6b6ccc63305f711c9008e16cef62c903aa99e5 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Fri, 27 Sep 2024 12:38:57 -0700 Subject: [PATCH 059/107] Add NARU drawer with figures --- .../naru-proposal.component.html | 42 +++++++++++++++++++ .../naru-proposal.component.scss | 36 ++++++++++++++++ 2 files changed, 78 insertions(+) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 2e0c353755..ba8147bf2c 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -222,6 +222,48 @@

Proposal

Characters left: {{ 4000 - purposeText.textLength }}
+
+ + + Siting of the residence(s) + + +
+

+ Siting of the residence in the ALR should maintain a visible agricultural remainder and should not + unnecessarily infringe upon the productive farming area of the property. Siting considers both clustering + and setback from the lot line. +

+ +

+ For more information see + L-26: Non-Adhering Residential Applications for Housing in the ALR. +

+ +
+
+
Unclustered
+ +
+ +
+
Clustered
+ +
+ +
+
Setback
+ +
+
+
+
+
+
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss index fdc85d1a71..dd757306dc 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss @@ -84,16 +84,16 @@ td { grid-template-columns: repeat(3, 1fr); } - figure { + .siting-of-residences-figure { margin: 0; - figcaption { + .siting-of-residences-figure-caption { text-align: center; line-height: 1.5; margin-bottom: rem(4); } - img { + .siting-of-residences-figure-image { display: block; width: 100%; } From 2fcade519f18956933c94899d1088d3ee522c32a Mon Sep 17 00:00:00 2001 From: abradat Date: Tue, 1 Oct 2024 11:58:09 -0700 Subject: [PATCH 063/107] Add confirmation dialog for deleting existing residence --- .../naru-proposal/naru-proposal.component.ts | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index dbdcc5f9fd..5b073914c8 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -385,15 +385,21 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, } onDeleteExistingResidence(existingResidence: FormExisingResidence) { - const index = this.existingResidences.findIndex((e) => e.id === existingResidence.id); - if (index > -1) { - this.existingResidences.splice(index, 1); - this.existingResidencesSource.data = this.existingResidences; - this.isExistingResidencesDirty = true; - this.existingResidences.forEach((item, index) => { - item.id = index + 1; + this.confirmationDialogService + .openDialog({ title: 'Remove existing residence?', body: 'Do you want to continue?' }) + .subscribe((confirmed) => { + if (confirmed) { + const index = this.existingResidences.findIndex((e) => e.id === existingResidence.id); + if (index > -1) { + this.existingResidences.splice(index, 1); + this.existingResidencesSource.data = this.existingResidences; + this.isExistingResidencesDirty = true; + this.existingResidences.forEach((item, index) => { + item.id = index + 1; + }); + } + } }); - } } getTruncatedDescription(description: string): string { From 3096ca6992494d5e5abb2530ca7edd8becb60c1d Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:06:24 -0700 Subject: [PATCH 064/107] Wrap figures to make size more consistent --- .../naru-proposal.component.html | 21 ++++++++++-- .../naru-proposal.component.scss | 32 ++++++++----------- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 1cfc89965f..48e8d2d1a9 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -247,17 +247,32 @@

Proposal

Unclustered
- +
Clustered
- +
Setback
- +
diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss index dd757306dc..27f6671b54 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.scss @@ -76,26 +76,22 @@ td { .siting-of-residences-figures { display: flex; - flex-direction: column; gap: rem(32); + flex-wrap: wrap; + justify-content: center; + min-width: 0; +} - @media screen and (min-width: $tabletBreakpoint) { - display: grid; - grid-template-columns: repeat(3, 1fr); - } - - .siting-of-residences-figure { - margin: 0; +.siting-of-residences-figure { + margin: 0; +} - .siting-of-residences-figure-caption { - text-align: center; - line-height: 1.5; - margin-bottom: rem(4); - } +.siting-of-residences-figure-caption { + text-align: center; + line-height: 1.5; + margin-bottom: rem(4); +} - .siting-of-residences-figure-image { - display: block; - width: 100%; - } - } +.siting-of-residences-figure-image { + display: block; } From 5da6293d2ca3af8de87e300b4c16133578ad0885 Mon Sep 17 00:00:00 2001 From: abradat Date: Tue, 1 Oct 2024 12:22:26 -0700 Subject: [PATCH 065/107] Add no data message to NARU existing residences --- .../proposal/naru-proposal/naru-proposal.component.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 2e0c353755..cc0362f6d7 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -401,6 +401,9 @@

Proposal

+
+ Use the button below to add any existing residence(s) +
Date: Tue, 1 Oct 2024 13:33:51 -0700 Subject: [PATCH 066/107] Fix NARU proposed residence entity --- .../portal/application-submission/application-submission.dto.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/apps/alcs/src/portal/application-submission/application-submission.dto.ts b/services/apps/alcs/src/portal/application-submission/application-submission.dto.ts index 1ae0db75e6..0c394274af 100644 --- a/services/apps/alcs/src/portal/application-submission/application-submission.dto.ts +++ b/services/apps/alcs/src/portal/application-submission/application-submission.dto.ts @@ -741,7 +741,7 @@ export class ApplicationSubmissionUpdateDto { @IsArray() @IsOptional() - naruProposedResidences?: ExistingResidence[]; + naruProposedResidences?: ProposedResidence[]; //Inclusion / Exclusion Fields @IsString() From f55cf52a8c51b6fe9294d3d6ff401f3b681cd997 Mon Sep 17 00:00:00 2001 From: Felipe Barreta Date: Tue, 1 Oct 2024 14:00:40 -0700 Subject: [PATCH 067/107] Added confirmation dialog Added confirmation dialog when removing a parcel owner --- .../parcel-owners/parcel-owners.component.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.ts b/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.ts index 1185a60f79..d828cb0a7d 100644 --- a/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.ts +++ b/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.ts @@ -15,6 +15,7 @@ import { openFileInline } from '../../utils/file'; import { ApplicationDocumentDto } from '../../../services/application-document/application-document.dto'; import { NoticeOfIntentDocumentDto } from '../../../services/notice-of-intent-document/notice-of-intent-document.dto'; import { MOBILE_BREAKPOINT } from '../../utils/breakpoints'; +import { ConfirmationDialogService } from '../../../shared/confirmation-dialog/confirmation-dialog.service'; @Component({ selector: 'app-parcel-owners[owners][fileId][submissionUuid][ownerService]', @@ -70,7 +71,7 @@ export class ParcelOwnersComponent implements OnInit{ VISIBLE_COUNT = 5; visibleCount = this.VISIBLE_COUNT; - constructor(private dialog: MatDialog) {} + constructor(private dialog: MatDialog, private confirmationDialogService: ConfirmationDialogService) {} ngOnInit(): void { this.isMobile = window.innerWidth <= MOBILE_BREAKPOINT; @@ -114,7 +115,17 @@ export class ParcelOwnersComponent implements OnInit{ } async onRemove(uuid: string) { - this.onOwnerRemoved.emit(uuid); + this.confirmationDialogService + .openDialog({ + body: `Warning: Do you want to continue?`, + title: 'Remove Parcel Owner', + }) + .subscribe(async (answer) => { + console.log(answer); + if (answer) { + this.onOwnerRemoved.emit(uuid); + } + }); } async onOpenFile(file: ApplicationDocumentDto | NoticeOfIntentDocumentDto) { From bd625a185fa05020c44ed4fe43ed6f0e27ff6622 Mon Sep 17 00:00:00 2001 From: Felipe Barreta Date: Tue, 1 Oct 2024 14:03:58 -0700 Subject: [PATCH 068/107] Remove console.log --- .../owner-dialogs/parcel-owners/parcel-owners.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.ts b/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.ts index d828cb0a7d..b17993c393 100644 --- a/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.ts +++ b/portal-frontend/src/app/shared/owner-dialogs/parcel-owners/parcel-owners.component.ts @@ -121,7 +121,6 @@ export class ParcelOwnersComponent implements OnInit{ title: 'Remove Parcel Owner', }) .subscribe(async (answer) => { - console.log(answer); if (answer) { this.onOwnerRemoved.emit(uuid); } From f2371e828ac5ee22c61522738a463d3ebd279898 Mon Sep 17 00:00:00 2001 From: abradat Date: Tue, 1 Oct 2024 14:18:41 -0700 Subject: [PATCH 069/107] Rename ExistingResidenceDialog component --- .../edit-submission-base.module.ts | 6 ++--- .../naru-proposal/naru-proposal.component.ts | 8 ++++--- .../residence-dialog.component.html} | 20 ++++++++-------- .../residence-dialog.component.scss} | 0 .../residence-dialog.component.ts} | 23 ++++++++++--------- 5 files changed, 30 insertions(+), 27 deletions(-) rename portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/{existing-residence-dialog/existing-residence-dialog.component.html => residence-dialog/residence-dialog.component.html} (81%) rename portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/{existing-residence-dialog/existing-residence-dialog.component.scss => residence-dialog/residence-dialog.component.scss} (100%) rename portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/{existing-residence-dialog/existing-residence-dialog.component.ts => residence-dialog/residence-dialog.component.ts} (62%) diff --git a/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts b/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts index d2038cfcfc..a6f40c8bf5 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/edit-submission-base.module.ts @@ -38,7 +38,7 @@ import { SuccessComponent } from './success/success.component'; import { PrimaryContactConfirmationDialogComponent } from './primary-contact/primary-contact-confirmation-dialog/primary-contact-confirmation-dialog.component'; import { OtherAttachmentsUploadDialogComponent } from './other-attachments/other-attachments-upload-dialog/other-attachments-upload-dialog.component'; import { MatCard, MatCardHeader, MatCardModule } from '@angular/material/card'; -import { ExistingResidenceDialogComponent } from './proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component'; +import { ResidenceDialogComponent } from './proposal/naru-proposal/residence-dialog/residence-dialog.component'; @NgModule({ declarations: [ @@ -64,7 +64,7 @@ import { ExistingResidenceDialogComponent } from './proposal/naru-proposal/exist PofoProposalComponent, PfrsProposalComponent, NaruProposalComponent, - ExistingResidenceDialogComponent, + ResidenceDialogComponent, ExclProposalComponent, InclProposalComponent, CoveProposalComponent, @@ -112,7 +112,7 @@ import { ExistingResidenceDialogComponent } from './proposal/naru-proposal/exist CoveProposalComponent, CovenantTransfereeDialogComponent, SuccessComponent, - ExistingResidenceDialogComponent, + ResidenceDialogComponent, ], }) export class EditSubmissionBaseModule {} diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index dbdcc5f9fd..7e51eb182d 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -17,12 +17,13 @@ import { FilesStepComponent } from '../../files-step.partial'; import { SoilTableData } from '../../../../../shared/soil-table/soil-table.component'; import { ConfirmationDialogService } from '../../../../../shared/confirmation-dialog/confirmation-dialog.service'; import { MatTableDataSource } from '@angular/material/table'; -import { ExistingResidenceDialogComponent } from './existing-residence-dialog/existing-residence-dialog.component'; +import { ResidenceDialogComponent } from './residence-dialog/residence-dialog.component'; import { MOBILE_BREAKPOINT } from '../../../../../shared/utils/breakpoints'; import { isTruncated, truncate } from '../../../../../shared/utils/string-helper'; import { EXISTING_RESIDENCE_DESCRIPTION_CHAR_LIMIT } from '../../../../../shared/constants'; export type FormExisingResidence = { id?: number; floorArea: number; description: string; isExpanded?: boolean }; +export type FormProposedResidence = { id?: number; floorArea: number; description: string; isExpanded?: boolean }; @Component({ selector: 'app-naru-proposal', @@ -360,11 +361,12 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, onAddEditExistingResidence(existingResidence: FormExisingResidence | undefined, isEdit: boolean) { const dialog = this.dialog - .open(ExistingResidenceDialogComponent, { + .open(ResidenceDialogComponent, { width: this.isMobile ? '90%' : '75%', data: { isEdit: isEdit, - existingResidenceData: existingResidence, + residenceData: existingResidence, + isExisting: true, }, }) .afterClosed() diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/residence-dialog/residence-dialog.component.html similarity index 81% rename from portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html rename to portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/residence-dialog/residence-dialog.component.html index ffcc42f664..f1535d42fa 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/residence-dialog/residence-dialog.component.html @@ -1,6 +1,12 @@
-

Add New Owner

-

Edit Owner

+

+ Add Existing Residence + Add Proposed Residence +

+

+ Edit Existing Residence + Edit Proposed Residence +

@@ -66,7 +72,7 @@

Edit Owner

- diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.scss b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/residence-dialog/residence-dialog.component.scss similarity index 100% rename from portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.scss rename to portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/residence-dialog/residence-dialog.component.scss diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/residence-dialog/residence-dialog.component.ts similarity index 62% rename from portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts rename to portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/residence-dialog/residence-dialog.component.ts index d6edf66e0b..5361a0e4d8 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/existing-residence-dialog/existing-residence-dialog.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/residence-dialog/residence-dialog.component.ts @@ -1,14 +1,14 @@ import { ChangeDetectionStrategy, Component, Inject, Input, OnInit } from '@angular/core'; import { FormControl, FormGroup, Validators } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { FormExisingResidence } from '../naru-proposal.component'; +import { FormExisingResidence, FormProposedResidence } from '../naru-proposal.component'; @Component({ - selector: 'app-existing-residence-dialog', - templateUrl: './existing-residence-dialog.component.html', - styleUrl: './existing-residence-dialog.component.scss', + selector: 'app-residence-dialog', + templateUrl: './residence-dialog.component.html', + styleUrl: './residence-dialog.component.scss', }) -export class ExistingResidenceDialogComponent implements OnInit { +export class ResidenceDialogComponent implements OnInit { floorArea = new FormControl(null, [Validators.required]); description = new FormControl(null, [Validators.required]); form = new FormGroup({ @@ -20,19 +20,20 @@ export class ExistingResidenceDialogComponent implements OnInit { existingResidence: FormExisingResidence = { floorArea: 0, description: '', isExpanded: false }; constructor( - private dialogRef: MatDialogRef, + private dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: { isEdit?: boolean; - existingResidenceData?: FormExisingResidence; + isExisting?: boolean; + residenceData?: FormExisingResidence | FormProposedResidence; }, ) {} ngOnInit(): void { - if (this.data.existingResidenceData) { - this.floorArea.setValue(this.data.existingResidenceData.floorArea!.toString()); - this.description.setValue(this.data.existingResidenceData.description!); - this.existingResidence = { ...this.data.existingResidenceData }; + if (this.data.residenceData) { + this.floorArea.setValue(this.data.residenceData.floorArea!.toString()); + this.description.setValue(this.data.residenceData.description!); + this.existingResidence = { ...this.data.residenceData }; } } From b7d1ab253076f972e1469e67903e82f40529eddf Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:30:37 -0700 Subject: [PATCH 070/107] Add extra text/link to NARU proposal --- .../proposal/naru-proposal/naru-proposal.component.html | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index ef9abb1885..1335928717 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -514,7 +514,13 @@

Soil & Fill Components

-
The Commission must approve any proposed fill. List all proposed types of fill.
+
+ The Commission must approve any proposed fill. List all proposed types of fill. + Prohibited fill + cannot be placed in the ALR. +
From 33e678dd53260b00fe9421a3ec2df3cc5d954be8 Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:48:22 -0700 Subject: [PATCH 071/107] Make soil table volume field configurable --- .../soil-table/soil-table.component.html | 82 ++++++++++--------- .../shared/soil-table/soil-table.component.ts | 10 ++- 2 files changed, 50 insertions(+), 42 deletions(-) diff --git a/portal-frontend/src/app/shared/soil-table/soil-table.component.html b/portal-frontend/src/app/shared/soil-table/soil-table.component.html index 56ba63f4b4..f8bb602769 100644 --- a/portal-frontend/src/app/shared/soil-table/soil-table.component.html +++ b/portal-frontend/src/app/shared/soil-table/soil-table.component.html @@ -19,48 +19,50 @@ {{ tableHeader2 }}
-
- -
-
- - - m3 - -
- warning -
This field is required
+ +
+
-
-
- - - m3 - -
- warning -
This field is required
+
+ + + m3 + +
+ warning +
This field is required
+
-
+
+ + + m3 + +
+ warning +
This field is required
+
+
+
diff --git a/portal-frontend/src/app/shared/soil-table/soil-table.component.ts b/portal-frontend/src/app/shared/soil-table/soil-table.component.ts index cc6895e9dd..cfe91bef05 100644 --- a/portal-frontend/src/app/shared/soil-table/soil-table.component.ts +++ b/portal-frontend/src/app/shared/soil-table/soil-table.component.ts @@ -20,6 +20,7 @@ export class SoilTableComponent implements OnInit, OnChanges { @Input() data2?: SoilTableData; @Input() disabled = false; @Input() touchAll = false; + @Input() showVolumeField = true; @Output() dataChange = new EventEmitter(); @Output() data2Change = new EventEmitter(); @@ -27,12 +28,12 @@ export class SoilTableComponent implements OnInit, OnChanges { idSuffix?: string; idSuffix2?: string | undefined; - volume = new FormControl(null, [Validators.required]); + volume = new FormControl(null); area = new FormControl(null, [Validators.required]); maximumDepth = new FormControl(null, [Validators.required]); averageDepth = new FormControl(null, [Validators.required]); - volume2 = new FormControl(null, [Validators.required]); + volume2 = new FormControl(null); area2 = new FormControl(null, [Validators.required]); maximumDepth2 = new FormControl(null, [Validators.required]); averageDepth2 = new FormControl(null, [Validators.required]); @@ -49,6 +50,11 @@ export class SoilTableComponent implements OnInit, OnChanges { }); ngOnInit(): void { + if (this.showVolumeField) { + this.volume.setValidators([Validators.required]); + this.volume2.setValidators([Validators.required]); + } + if (this.data) { this.volume.setValue(this.data.volume?.toString(10) ?? null); this.area.setValue(this.data.area?.toString(10) ?? null); From fc836ae66c58a24b02ba2a235fbed7a9abee322f Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:53:26 -0700 Subject: [PATCH 072/107] Remove fill description, duration, and volume from all NARU UI elements - Edit submission proposal and review steps - Public search - ALCS applicant info - PDF's --- .../naru-details/naru-details.component.html | 12 ---- .../naru-details/naru-details.component.html | 22 -------- .../naru-proposal.component.html | 43 +------------- .../naru-proposal/naru-proposal.component.ts | 35 +----------- .../naru-details/naru-details.component.html | 53 ------------------ .../submissions/naru-submission-template.docx | Bin 53477 -> 54682 bytes 6 files changed, 2 insertions(+), 163 deletions(-) diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html index e3a6e45ea3..981946a369 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/naru-details/naru-details.component.html @@ -119,20 +119,8 @@ {{ _applicationSubmission.naruFillType }}
-
Briefly describe the origin and quality of fill.
-
- {{ _applicationSubmission.naruFillOrigin }} -
- -
Placement of Fill Project Duration
-
- {{ _applicationSubmission.naruProjectDuration }} -
-
Fill to be Placed
-
Volume
-
{{ _applicationSubmission.naruToPlaceVolume }} m3
Area
{{ _applicationSubmission.naruToPlaceArea }} m2
Maximum Depth
diff --git a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html index 1e8e620536..4fc87d8952 100644 --- a/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/naru-details/naru-details.component.html @@ -162,32 +162,10 @@
-
Briefly describe the origin and quality of fill.
-
- {{ _applicationSubmission.naruFillOrigin }} - -
- -
Placement of Fill Project Duration
-
-
{{ _applicationSubmission.naruProjectDuration }}
- -
-
Fill to be Placed
-
Volume
-
- {{ _applicationSubmission.naruToPlaceVolume }} - m3 - -
-
Area
{{ _applicationSubmission.naruToPlaceArea }} diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html index 1335928717..c133bdc9e3 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.html @@ -533,54 +533,13 @@

Soil & Fill Components

-
-
- - - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - fillOriginToPlaceText.textLength }}
-
-
- -
-
- -
Length of time you anticipate it would take to complete the project
- - - -
- warning -
This field is required
-
- Example: 30 years; or 3 months; or 5 days -
Characters left: {{ 500 - (projectDuration.value || '').length }}
-
-
- diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts index 5b073914c8..87bafefa00 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/naru-proposal/naru-proposal.component.ts @@ -53,20 +53,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, }, [Validators.required], ); - fillOrigin = new FormControl( - { - disabled: true, - value: null, - }, - [Validators.required], - ); - projectDuration = new FormControl( - { - disabled: true, - value: null, - }, - [Validators.required], - ); existingResidences: FormExisingResidence[] = []; existingResidencesSource = new MatTableDataSource(this.existingResidences); @@ -90,8 +76,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, locationRationale: this.locationRationale, infrastructure: this.infrastructure, fillType: this.fillType, - fillOrigin: this.fillOrigin, - projectDuration: this.projectDuration, }); private submissionUuid = ''; @@ -126,10 +110,8 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, clustered: applicationSubmission.naruClustered, setback: applicationSubmission.naruSetback, fillType: applicationSubmission.naruFillType, - fillOrigin: applicationSubmission.naruFillOrigin, infrastructure: applicationSubmission.naruInfrastructure, locationRationale: applicationSubmission.naruLocationRationale, - projectDuration: applicationSubmission.naruProjectDuration, }); if (applicationSubmission.naruWillImportFill !== null) { @@ -140,7 +122,6 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, } this.fillTableData = { - volume: applicationSubmission.naruToPlaceVolume ?? undefined, area: applicationSubmission.naruToPlaceArea ?? undefined, maximumDepth: applicationSubmission.naruToPlaceMaximumDepth ?? undefined, averageDepth: applicationSubmission.naruToPlaceAverageDepth ?? undefined, @@ -268,13 +249,10 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, onChangeFill(willImportFill: boolean) { const hasValues = - this.projectDuration.value || - this.fillOrigin.value || this.fillType.value || this.fillTableData.area || this.fillTableData.averageDepth || - this.fillTableData.maximumDepth || - this.fillTableData.volume; + this.fillTableData.maximumDepth; if (!willImportFill && hasValues) { this.confirmationDialogService @@ -295,16 +273,10 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, this.fillTableDisabled = !willImportFill; if (willImportFill) { - this.projectDuration.enable(); - this.fillOrigin.enable(); this.fillType.enable(); } else { - this.projectDuration.disable(); - this.fillOrigin.disable(); this.fillType.disable(); - this.projectDuration.setValue(null); - this.fillOrigin.setValue(null); this.fillType.setValue(null); } } @@ -322,10 +294,8 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, clustered, setback, fillType, - fillOrigin, infrastructure, locationRationale, - projectDuration, } = this.form.getRawValue(); const updateDto: ApplicationSubmissionUpdateDto = { @@ -339,14 +309,11 @@ export class NaruProposalComponent extends FilesStepComponent implements OnInit, naruClustered: clustered, naruSetback: setback, naruFillType: fillType, - naruFillOrigin: fillOrigin, naruToPlaceAverageDepth: this.fillTableData.averageDepth ?? null, naruToPlaceMaximumDepth: this.fillTableData.maximumDepth ?? null, naruToPlaceArea: this.fillTableData.area ?? null, - naruToPlaceVolume: this.fillTableData.volume ?? null, naruInfrastructure: infrastructure, naruLocationRationale: locationRationale, - naruProjectDuration: projectDuration, naruExistingResidences: this.existingResidences.map(({ id, ...rest }) => rest), }; const updatedApp = await this.applicationSubmissionService.updatePending(this.submissionUuid, updateDto); diff --git a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html index b19a92f6f9..8a400ab582 100644 --- a/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/naru-details/naru-details.component.html @@ -142,29 +142,9 @@
-
Briefly describe the origin and quality of fill.
-
- {{ applicationSubmission.naruFillOrigin }} - -
- -
Project Duration
-
-
- {{ applicationSubmission.naruProjectDuration }} -
- -
-
Fill to be Placed
-
Volume
-
- {{ applicationSubmission.naruToPlaceVolume }} - m3 - -
Area
{{ applicationSubmission.naruToPlaceArea }} @@ -183,38 +163,5 @@ m
- -
-
-
Fill to be Placed
- -
Volume
-
- {{ applicationSubmission.naruToPlaceVolume }} - m3 - -
- -
Area
-
- {{ applicationSubmission.naruToPlaceArea }} - m2 - -
- -
Maximum Depth
-
- {{ applicationSubmission.naruToPlaceMaximumDepth }} - m - -
- -
Average Depth
-
- {{ applicationSubmission.naruToPlaceAverageDepth }} - m - -
-
diff --git a/services/templates/pdf/submissions/naru-submission-template.docx b/services/templates/pdf/submissions/naru-submission-template.docx index 78183607b45763bf8bf34eecb8cd84d2c630acaa..91eb5dd06345f533a3574053aae4c6659b2644e4 100644 GIT binary patch delta 24477 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 Date: Tue, 1 Oct 2024 14:12:32 -0700 Subject: [PATCH 073/107] Remove fill description, duration, and volume from all NFU UI elements - Edit submission proposal and review steps - Public search - ALCS applicant info - PDF's --- .../nfu-details/nfu-details.component.html | 11 ----- .../nfu-details/nfu-details.component.html | 18 ------- .../nfu-proposal/nfu-proposal.component.html | 46 +----------------- .../nfu-proposal/nfu-proposal.component.ts | 39 ++------------- .../nfu-details/nfu-details.component.html | 20 -------- .../submissions/nfu-submission-template.docx | Bin 47299 -> 47112 bytes .../submissions/~$u-submission-template.docx | Bin 0 -> 162 bytes 7 files changed, 4 insertions(+), 130 deletions(-) create mode 100644 services/templates/pdf/submissions/~$u-submission-template.docx diff --git a/alcs-frontend/src/app/features/application/applicant-info/application-details/nfu-details/nfu-details.component.html b/alcs-frontend/src/app/features/application/applicant-info/application-details/nfu-details/nfu-details.component.html index 570dbce906..791e0654e0 100644 --- a/alcs-frontend/src/app/features/application/applicant-info/application-details/nfu-details/nfu-details.component.html +++ b/alcs-frontend/src/app/features/application/applicant-info/application-details/nfu-details/nfu-details.component.html @@ -42,20 +42,9 @@

Soil and Fill Components

{{ applicationSubmission.nfuFillTypeDescription }}
-
Briefly describe the origin and quality of fill.
-
- {{ applicationSubmission.nfuFillOriginDescription }} -
- -
Placement of Fill Project Duration
-
- {{ applicationSubmission.nfuProjectDuration }} -
Fill to be Placed
-
Volume
-
{{ applicationSubmission.nfuFillVolume }} m3
Area
{{ applicationSubmission.nfuTotalFillArea }} m2
Maximum Depth
diff --git a/portal-frontend/src/app/features/applications/application-details/nfu-details/nfu-details.component.html b/portal-frontend/src/app/features/applications/application-details/nfu-details/nfu-details.component.html index a87c462967..820031167d 100644 --- a/portal-frontend/src/app/features/applications/application-details/nfu-details/nfu-details.component.html +++ b/portal-frontend/src/app/features/applications/application-details/nfu-details/nfu-details.component.html @@ -48,29 +48,11 @@

Soil and Fill Components

{{ applicationSubmission.nfuFillTypeDescription }}
-
Briefly describe the origin and quality of fill.
-
- {{ applicationSubmission.nfuFillOriginDescription }} - -
- -
Placement of Fill Project Duration
-
-
{{ applicationSubmission.nfuProjectDuration }}
- -
Fill to be Placed
-
Volume
-
- {{ applicationSubmission.nfuFillVolume }} - m3 - -
-
Area
{{ applicationSubmission.nfuTotalFillArea }} diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.html index e1df7a7324..0d238e4143 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.html @@ -178,57 +178,13 @@

Soil & Fill Components

-
-
- - - - -
- warning -
This field is required
-
-
Characters left: {{ 4000 - fillOriginToPlaceText.textLength }}
-
-
- -
-
- -
Length of time you anticipate it would take to complete the project
- - - -
- warning -
This field is required
-
- Example: 30 years; or 3 months; or 5 days -
Characters left: {{ 500 - (projectDuration.value || '').length }}
-
-
- diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.ts b/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.ts index 7cbad0f733..09fd87a73c 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.ts +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.ts @@ -32,26 +32,12 @@ export class NfuProposalComponent extends FilesStepComponent implements OnInit, outsideLands = new FormControl(null, [Validators.required]); agricultureSupport = new FormControl(null, [Validators.required]); willImportFill = new FormControl(null, [Validators.required]); - projectDuration = new FormControl( - { - disabled: true, - value: null, - }, - [Validators.required] - ); fillTypeDescription = new FormControl( { disabled: true, value: null, }, - [Validators.required] - ); - fillOriginDescription = new FormControl( - { - disabled: true, - value: null, - }, - [Validators.required] + [Validators.required], ); form = new FormGroup({ @@ -60,9 +46,7 @@ export class NfuProposalComponent extends FilesStepComponent implements OnInit, outsideLands: this.outsideLands, agricultureSupport: this.agricultureSupport, willImportFill: this.willImportFill, - projectDuration: this.projectDuration, fillTypeDescription: this.fillTypeDescription, - fillOriginDescription: this.fillOriginDescription, }); private submissionUuid = ''; proposalMap: ApplicationDocumentDto[] = []; @@ -73,7 +57,7 @@ export class NfuProposalComponent extends FilesStepComponent implements OnInit, applicationDocumentService: ApplicationDocumentService, dialog: MatDialog, private confirmationDialogService: ConfirmationDialogService, - toastService: ToastService + toastService: ToastService, ) { super(applicationDocumentService, dialog, toastService); } @@ -89,13 +73,10 @@ export class NfuProposalComponent extends FilesStepComponent implements OnInit, purpose: applicationSubmission.purpose, outsideLands: applicationSubmission.nfuOutsideLands, agricultureSupport: applicationSubmission.nfuAgricultureSupport, - projectDuration: applicationSubmission.nfuProjectDuration, fillTypeDescription: applicationSubmission.nfuFillTypeDescription, - fillOriginDescription: applicationSubmission.nfuFillOriginDescription, }); this.fillTableData = { - volume: applicationSubmission.nfuFillVolume ?? undefined, area: applicationSubmission.nfuTotalFillArea ?? undefined, maximumDepth: applicationSubmission.nfuMaxFillDepth ?? undefined, averageDepth: applicationSubmission.nfuAverageFillDepth ?? undefined, @@ -133,9 +114,7 @@ export class NfuProposalComponent extends FilesStepComponent implements OnInit, const nfuOutsideLands = this.outsideLands.getRawValue(); const nfuAgricultureSupport = this.agricultureSupport.getRawValue(); const nfuWillImportFill = this.willImportFill.getRawValue(); - const nfuProjectDuration = this.projectDuration.getRawValue(); const nfuFillTypeDescription = this.fillTypeDescription.getRawValue(); - const nfuFillOriginDescription = this.fillOriginDescription.getRawValue(); const updateDto: ApplicationSubmissionUpdateDto = { nfuHectares: nfuHectares ? parseFloat(nfuHectares) : null, @@ -146,10 +125,7 @@ export class NfuProposalComponent extends FilesStepComponent implements OnInit, nfuTotalFillArea: this.fillTableData.area ?? null, nfuMaxFillDepth: this.fillTableData.maximumDepth ?? null, nfuAverageFillDepth: this.fillTableData.averageDepth ?? null, - nfuFillVolume: this.fillTableData.volume ?? null, - nfuProjectDuration, nfuFillTypeDescription, - nfuFillOriginDescription, }; const updatedApp = await this.applicationSubmissionService.updatePending(this.submissionUuid, updateDto); @@ -159,13 +135,10 @@ export class NfuProposalComponent extends FilesStepComponent implements OnInit, onChangeFill(willImportFill: boolean) { const hasValues = - this.projectDuration.value || - this.fillOriginDescription.value || this.fillTypeDescription.value || this.fillTableData.area || this.fillTableData.averageDepth || - this.fillTableData.maximumDepth || - this.fillTableData.volume; + this.fillTableData.maximumDepth; if (!willImportFill && hasValues) { this.confirmationDialogService @@ -186,16 +159,10 @@ export class NfuProposalComponent extends FilesStepComponent implements OnInit, this.fillTableDisabled = !willImportFill; if (willImportFill) { - this.projectDuration.enable(); - this.fillOriginDescription.enable(); this.fillTypeDescription.enable(); } else { - this.projectDuration.disable(); - this.fillOriginDescription.disable(); this.fillTypeDescription.disable(); - this.projectDuration.setValue(null); - this.fillOriginDescription.setValue(null); this.fillTypeDescription.setValue(null); } } diff --git a/portal-frontend/src/app/features/public/application/submission/nfu-details/nfu-details.component.html b/portal-frontend/src/app/features/public/application/submission/nfu-details/nfu-details.component.html index 0192fa6e3c..611b48d46a 100644 --- a/portal-frontend/src/app/features/public/application/submission/nfu-details/nfu-details.component.html +++ b/portal-frontend/src/app/features/public/application/submission/nfu-details/nfu-details.component.html @@ -48,31 +48,11 @@

Soil and Fill Components

{{ applicationSubmission.nfuFillTypeDescription }}
-
Briefly describe the origin and quality of fill.
-
- {{ applicationSubmission.nfuFillOriginDescription }} - -
- -
Placement of Fill Project Duration
-
-
- {{ applicationSubmission.nfuProjectDuration }} -
- -
Fill to be Placed
-
Volume
-
- {{ applicationSubmission.nfuFillVolume }} - m3 - -
-
Area
{{ applicationSubmission.nfuTotalFillArea }} diff --git a/services/templates/pdf/submissions/nfu-submission-template.docx b/services/templates/pdf/submissions/nfu-submission-template.docx index 429af6871b7b1abeeb244cfe1590072079eba19d..43171f6a0ddedf842f7eb8d0bdbd711aab233410 100644 GIT binary patch delta 12797 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 NvyB+MvGG5%{|ncFnx_B& delta 13015 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 Ap8x;= diff --git a/services/templates/pdf/submissions/~$u-submission-template.docx b/services/templates/pdf/submissions/~$u-submission-template.docx new file mode 100644 index 0000000000000000000000000000000000000000..cd7b9ba4798a407858694ceafeb8f33d3d0deb02 GIT binary patch literal 162 zcmd-JDatG^Nz79S&PgmuEn*-J@G*oi6ftBn6f=}CBr@bNC@=&whI>H+{! C9}4{d literal 0 HcmV?d00001 From 25597202f7fbf06c9442bc36c31af1e7edeb03cf Mon Sep 17 00:00:00 2001 From: Tristan Slater <1631008+trslater@users.noreply.github.com> Date: Tue, 1 Oct 2024 14:17:41 -0700 Subject: [PATCH 074/107] Add extra text/link to NFU proposal --- .../proposal/nfu-proposal/nfu-proposal.component.html | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.html b/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.html index 0d238e4143..f21a41495c 100644 --- a/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.html +++ b/portal-frontend/src/app/features/applications/edit-submission/proposal/nfu-proposal/nfu-proposal.component.html @@ -156,7 +156,13 @@

Soil & Fill Components

-
The Commission must approve any proposed fill. List all proposed types of fill.
+
+ The Commission must approve any proposed fill. List all proposed types of fill. + Prohibited fill + cannot be placed in the ALR. +