Skip to content

Commit

Permalink
Merge pull request #2127 from bcgov/develop
Browse files Browse the repository at this point in the history
Deployment PR - 1510
  • Loading branch information
trslater authored Mar 6, 2025
2 parents 2c75d0b + 0fb1704 commit 021ae96
Show file tree
Hide file tree
Showing 153 changed files with 5,249 additions and 265 deletions.
6 changes: 3 additions & 3 deletions alcs-frontend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ RUN npm ci
# Copy the source code to the /app directory
COPY . .

ENV NODE_OPTIONS "--max-old-space-size=2048"
ENV NODE_OPTIONS="--max-old-space-size=2048"

# Build the application
RUN npm run build -- --output-path=dist --output-hashing=all
Expand Down Expand Up @@ -47,10 +47,10 @@ COPY --from=build /app/dist /usr/share/nginx/html
RUN chmod -R go+rwx /usr/share/nginx/html/assets

# provide dynamic scp content-src
ENV ENABLED_CONNECT_SRC " 'self' http://localhost:* nrs.objectstore.gov.bc.ca"
ENV ENABLED_CONNECT_SRC=" 'self' http://localhost:* nrs.objectstore.gov.bc.ca"

# set to true to enable maintenance mode
ENV MAINTENANCE_MODE "false"
ENV MAINTENANCE_MODE="false"

# When the container starts, replace the settings.json with values from environment variables
ENTRYPOINT [ "./init.sh" ]
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ import { FileTagService } from '../../services/common/file-tag.service';
import { ApplicationDecisionV2Service } from '../../services/application/decision/application-decision-v2/application-decision-v2.service';
import { ApplicationDecisionConditionCardDto } from '../../services/application/decision/application-decision-v2/application-decision-v2.dto';
import { ApplicationDecisionConditionCardService } from '../../services/application/decision/application-decision-v2/application-decision-condition/application-decision-condition-card/application-decision-condition-card.service';
import { DecisionConditionFinancialInstrumentService } from '../../services/common/decision-condition-financial-instrument/decision-condition-financial-instrument.service';
import { ApplicationDecisionConditionFinancialInstrumentService } from '../../services/application/decision/application-decision-v2/application-decision-condition/application-decision-condition-financial-instrument/application-decision-condition-financial-instrument.service';

export const unsubmittedRoutes = [
{
Expand Down Expand Up @@ -175,7 +177,13 @@ export const appChildRoutes = [
selector: 'app-application',
templateUrl: './application.component.html',
styleUrls: ['./application.component.scss'],
providers: [{ provide: FileTagService, useClass: ApplicationTagService }],
providers: [
{ provide: FileTagService, useClass: ApplicationTagService },
{
provide: DecisionConditionFinancialInstrumentService,
useClass: ApplicationDecisionConditionFinancialInstrumentService,
},
],
})
export class ApplicationComponent implements OnInit, OnDestroy {
destroy = new Subject<void>();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,24 @@
<div mat-dialog-title>
<h2 class="card-title">{{ data ? 'Edit' : 'Create' }} Boundary Amendment</h2>
<h2 class="card-title">{{ data.existingAmendment ? 'Edit' : 'Create' }} Boundary Amendment</h2>
</div>
<mat-dialog-content style="height: 100%">
<form class="content" [formGroup]="form">
<div *ngIf="data.existingAmendment" class="full-grid-line">
<mat-form-field appearance="outline" class="uuid-readonly">
<mat-label for="uuid">UUID</mat-label>
<input
class="uuid-input"
matInput
id="uuid"
[formControl]="uuid"
type="text"
readonly
/>
<button matSuffix mat-icon-button (click)="onCopy()">
<mat-icon>content_copy</mat-icon>
</button>
</mat-form-field>
</div>
<mat-label for="type" class="toggle-label">Amendment Type*</mat-label>
<mat-button-toggle-group [formControl]="type" id="type">
<mat-button-toggle value="Exclude Land from the ALR Boundary"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@use '../../../../../styles/colors';

.grid {
display: grid;
grid-template-columns: 1fr 1fr;
Expand All @@ -6,6 +8,19 @@
margin-top: 24px;
}

.full-grid-line {
grid-column: 1 / 3;
}

.content {
margin-top: 24px;
}

.uuid-readonly {
width: 50%;
padding-bottom: 30px;
}

.uuid-input {
color: colors.$grey !important;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ import moment from 'moment';
import { ApplicationBoundaryAmendmentDto } from '../../../../services/application/application-boundary-amendments/application-boundary-amendment.dto';
import { ApplicationBoundaryAmendmentService } from '../../../../services/application/application-boundary-amendments/application-boundary-amendment.service';
import { ApplicationDecisionV2Service } from '../../../../services/application/decision/application-decision-v2/application-decision-v2.service';
import { ToastService } from '../../../../services/toast/toast.service';

@Component({
selector: 'app-boundary-amendment-dialog',
templateUrl: './edit-boundary-amendment-dialog.component.html',
styleUrls: ['./edit-boundary-amendment-dialog.component.scss'],
})
export class EditBoundaryAmendmentDialogComponent implements OnInit {
uuid = new FormControl<string | null>(null);
type = new FormControl<string | any>('', [Validators.required]);
decisionComponents = new FormControl<string[]>([], [Validators.required]);
area = new FormControl<string | null>(null, [Validators.required]);
Expand All @@ -22,6 +24,7 @@ export class EditBoundaryAmendmentDialogComponent implements OnInit {
selectableComponents: { label: string; value: string }[] = [];

form: FormGroup = new FormGroup({
uuid: this.uuid,
type: this.type,
decisionComponents: this.decisionComponents,
area: this.area,
Expand All @@ -33,6 +36,7 @@ export class EditBoundaryAmendmentDialogComponent implements OnInit {
public matDialogRef: MatDialogRef<EditBoundaryAmendmentDialogComponent>,
private applicationBoundaryAmendmentService: ApplicationBoundaryAmendmentService,
private applicationDecisionV2Service: ApplicationDecisionV2Service,
private toastService: ToastService,
@Inject(MAT_DIALOG_DATA)
public data: {
existingAmendment?: ApplicationBoundaryAmendmentDto;
Expand All @@ -45,6 +49,7 @@ export class EditBoundaryAmendmentDialogComponent implements OnInit {
const existingAmendment = this.data.existingAmendment;
if (existingAmendment) {
this.form.patchValue({
uuid: existingAmendment.uuid,
type: existingAmendment.type,
area: existingAmendment.area,
year: existingAmendment.year?.toString(),
Expand Down Expand Up @@ -96,4 +101,11 @@ export class EditBoundaryAmendmentDialogComponent implements OnInit {
}
this.matDialogRef.close(true);
}

onCopy() {
if (this.uuid.value) {
navigator.clipboard.writeText(this.uuid.value);
this.toastService.showSuccessToast(`${this.uuid.value} copied to clipboard.`);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,9 @@ <h3>Create New Condition Card</h3>
</td>
</ng-container>

<ng-container matColumnDef="index">
<th mat-header-cell *matHeaderCellDef class="column-index">#</th>
<td mat-cell *matCellDef="let element" class="column-index">{{ element.index }}</td>
</ng-container>

<ng-container matColumnDef="type">
<th mat-header-cell *matHeaderCellDef class="column-type">Type</th>
<td mat-cell *matCellDef="let element" class="column-type">{{ element.condition.type.label }}</td>
<ng-container matColumnDef="condition">
<th mat-header-cell *matHeaderCellDef class="column-type">Condition</th>
<td mat-cell *matCellDef="let element" class="column-type">{{ !isOrderNull ? alphaIndex(element.condition.order + 1) + '.' : '' }} {{ element.condition.type.label }}</td>
</ng-container>

<ng-container matColumnDef="description">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,23 @@ import {
ApplicationDecisionConditionDto,
CreateApplicationDecisionConditionCardDto,
} from '../../../../../services/application/decision/application-decision-v2/application-decision-v2.dto';
import { ApplicationDecisionConditionDto as OriginalApplicationDecisionConditionDto } from '../../../../../services/application/decision/application-decision-v2/application-decision-v2.dto';
import { ApplicationDecisionConditionCardService } from '../../../../../services/application/decision/application-decision-v2/application-decision-condition/application-decision-condition-card/application-decision-condition-card.service';
import { BOARD_TYPE_CODES, BoardService } from '../../../../../services/board/board.service';
import { BoardDto, BoardStatusDto } from '../../../../../services/board/board.dto';
import { ToastService } from '../../../../../services/toast/toast.service';
import { CardType } from '../../../../../shared/card/card.component';
import { countToString } from '../../../../../shared/utils/count-to-string';

@Component({
selector: 'app-condition-card-dialog',
templateUrl: './condition-card-dialog.component.html',
styleUrl: './condition-card-dialog.component.scss',
})
export class ConditionCardDialogComponent implements OnInit {
displayColumns: string[] = ['select', 'index', 'type', 'description'];
displayColumns: string[] = ['select', 'condition', 'description'];
conditionBoard: BoardDto | undefined;
selectedStatus = '';
isOrderNull = false;

@ViewChild(MatSort) sort!: MatSort;
dataSource: MatTableDataSource<{ condition: ApplicationDecisionConditionDto; index: number; selected: boolean }> =
Expand All @@ -37,6 +38,8 @@ export class ConditionCardDialogComponent implements OnInit {
) {}

async ngOnInit() {
const orderIndexes = this.data.conditions.map((c) => c.condition.order);
this.isOrderNull = this.data.conditions.length > 1 && orderIndexes.every((val, i, arr) => val === arr[0] && arr[0] === 0);
this.dataSource.data = this.data.conditions.map((item) => ({
condition: item.condition,
selected: false,
Expand Down Expand Up @@ -87,4 +90,8 @@ export class ConditionCardDialogComponent implements OnInit {
this.dialogRef.close({ action: 'save', result: false });
}
}

alphaIndex(index: number) {
return countToString(index);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
<div class="header">
<!-- Keep the stringIndex line to add when the feature is implemented -->
<!-- <h4 *ngIf="condition.type">{{ stringIndex }}. {{ condition.type.label }}</h4> -->
<h4 *ngIf="condition.type">{{ condition.type.label }}</h4>
<h4 *ngIf="condition.type">{{ alphaIndex(index) }}. {{ condition.type.label }}</h4>
<app-application-type-pill [type]="statusLabel"></app-application-type-pill>
</div>
<div [ngClass]="isThreeColumn ? 'grid-3' : 'grid-2'">
Expand All @@ -21,7 +19,7 @@ <h4 *ngIf="condition.type">{{ condition.type.label }}</h4>

<div *ngIf="showSecurityAmountField">
<div class="subheading2">Security Amount</div>
{{ condition.securityAmount }}
{{ condition.securityAmount | number }}
<app-no-data *ngIf="condition.securityAmount === null || condition.securityAmount === undefined"></app-no-data>
</div>

Expand Down Expand Up @@ -200,7 +198,14 @@ <h4 *ngIf="condition.type">{{ condition.type.label }}</h4>

<div
class="full-width"
[ngClass]="{ 'description-no-date-container': !(dates !== undefined && condition.type !== null && condition.type !== undefined && condition.type.isDateChecked) }"
[ngClass]="{
'description-no-date-container': !(
dates !== undefined &&
condition.type !== null &&
condition.type !== undefined &&
condition.type.isDateChecked
),
}"
>
<div class="subheading2">Description</div>
<span
Expand All @@ -219,3 +224,9 @@ <h4 *ngIf="condition.type">{{ condition.type.label }}</h4>
>
</div>
</div>

<div class="condition-instrument" *ngIf="isFinancialSecurity">
<app-decision-condition-financial-instrument
[conditionUuid]="condition.uuid"
></app-decision-condition-financial-instrument>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -96,3 +96,7 @@
::ng-deep textarea:focus {
outline: none;
}

.condition-instrument {
margin-top: 24px;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AfterViewInit, Component, Input, OnInit, ViewChild } from '@angular/core';
import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
import moment from 'moment';
import { ApplicationDecisionComponentToConditionLotService } from '../../../../../services/application/decision/application-decision-v2/application-decision-component-to-condition-lot/application-decision-component-to-condition-lot.service';
import { ApplicationDecisionConditionService } from '../../../../../services/application/decision/application-decision-v2/application-decision-condition/application-decision-condition.service';
Expand All @@ -9,6 +9,7 @@ import {
UpdateApplicationDecisionConditionDto,
DateType,
ApplicationDecisionConditionDateDto,
conditionType,
} from '../../../../../services/application/decision/application-decision-v2/application-decision-v2.dto';
import {
DECISION_CONDITION_COMPLETE_LABEL,
Expand All @@ -27,6 +28,7 @@ import { countToString } from '../../../../../shared/utils/count-to-string';
import { ApplicationDecisionV2Service } from '../../../../../services/application/decision/application-decision-v2/application-decision-v2.service';
import { MatTableDataSource } from '@angular/material/table';
import { MatSort } from '@angular/material/sort';
import { ConfirmationDialogService } from '../../../../../shared/confirmation-dialog/confirmation-dialog.service';

type Condition = ApplicationDecisionConditionWithStatus & {
componentLabelsStr?: string;
Expand All @@ -48,6 +50,8 @@ export class ConditionComponent implements OnInit, AfterViewInit {
@Input() fileNumber!: string;
@Input() index!: number;

@Output() statusChange: EventEmitter<string> = new EventEmitter();

DateType = DateType;

dates: ApplicationDecisionConditionDateDto[] = [];
Expand All @@ -60,7 +64,6 @@ export class ConditionComponent implements OnInit, AfterViewInit {
showAdmFeeField = false;
showSecurityAmountField = false;
singleDateFormated: string | undefined = undefined;
stringIndex: string = '';

isThreeColumn = true;

Expand All @@ -72,6 +75,8 @@ export class ConditionComponent implements OnInit, AfterViewInit {
subdComponent?: ApplicationDecisionComponentDto;
planNumbers: ApplicationDecisionConditionToComponentPlanNumberDto[] = [];

isFinancialSecurity: boolean = false;

displayColumns: string[] = ['index', 'due', 'completed', 'comment', 'action'];

@ViewChild(MatSort) sort!: MatSort;
Expand All @@ -82,10 +87,10 @@ export class ConditionComponent implements OnInit, AfterViewInit {
private conditionService: ApplicationDecisionConditionService,
private conditionLotService: ApplicationDecisionComponentToConditionLotService,
private decisionService: ApplicationDecisionV2Service,
private confirmationDialogService: ConfirmationDialogService,
) {}

async ngOnInit() {
this.stringIndex = countToString(this.index);
if (this.condition) {
this.dates = Array.isArray(this.condition.dates) ? this.condition.dates : [];
if (this.condition.type?.dateType === DateType.SINGLE && this.dates.length <= 0) {
Expand Down Expand Up @@ -114,6 +119,8 @@ export class ConditionComponent implements OnInit, AfterViewInit {
this.isRequireSurveyPlan = this.condition.type?.code === 'RSPL';
this.isThreeColumn = this.showAdmFeeField && this.showSecurityAmountField;

this.isFinancialSecurity = this.condition.type?.code === conditionType.FINANCIAL_SECURITY;

this.loadLots();
this.loadPlanNumber();
this.dataSource = new MatTableDataSource<ApplicationDecisionConditionDateWithIndex>(
Expand Down Expand Up @@ -188,6 +195,7 @@ export class ConditionComponent implements OnInit, AfterViewInit {
if (condition) {
const update = await this.conditionService.update(condition.uuid, {
[field]: value,
order: condition.order,
});

const labels = this.condition.componentLabelsStr;
Expand Down Expand Up @@ -303,23 +311,35 @@ export class ConditionComponent implements OnInit, AfterViewInit {
}
const conditionNewStatus = await this.decisionService.getStatus(this.condition.uuid);
this.condition.status = conditionNewStatus.status;
this.statusChange.emit(this.condition.status);
this.setPillLabel(this.condition.status);
}

async onDeleteDate(dateUuid: string) {
const result = await this.conditionService.deleteDate(dateUuid);
if (result) {
const index = this.dates.findIndex((date) => date.uuid === dateUuid);

if (index !== -1) {
this.dates.splice(index, 1);
this.dataSource = new MatTableDataSource<ApplicationDecisionConditionDateWithIndex>(
this.addIndex(this.sortDates(this.dates)),
);
const conditionNewStatus = await this.decisionService.getStatus(this.condition.uuid);
this.condition.status = conditionNewStatus.status;
this.setPillLabel(this.condition.status);
}
}
this.confirmationDialogService
.openDialog({ body: 'Are you sure you want to delete this date?' })
.subscribe(async (confirmed) => {
if (confirmed) {
const result = await this.conditionService.deleteDate(dateUuid);
if (result) {
const index = this.dates.findIndex((date) => date.uuid === dateUuid);

if (index !== -1) {
this.dates.splice(index, 1);
this.dataSource = new MatTableDataSource<ApplicationDecisionConditionDateWithIndex>(
this.addIndex(this.sortDates(this.dates)),
);
const conditionNewStatus = await this.decisionService.getStatus(this.condition.uuid);
this.condition.status = conditionNewStatus.status;
this.statusChange.emit(this.condition.status);
this.setPillLabel(this.condition.status);
}
}
}
});
}

alphaIndex(index: number) {
return countToString(index);
}
}
Loading

0 comments on commit 021ae96

Please sign in to comment.