Files
cbsnexora/src/app/deposits/fixed-deposits/fixed-deposit-account-stepper/fixed-deposit-account-details-step/fixed-deposit-account-details-step.component.ts
T
Felix van Hove 7fd1486c08 Upgrading to Angular 20:
Replaced checked in package-lock.json by regenerated one.
Ran ng update @angular/core@20 @angular/cli@20
Ran npm install @angular-builders/jest@^20.0.0 @fortawesome/angular-fontawesome@^3.0.0 @swimlane/ngx-graph@^11
Ran npm install ngx-mat-select-search@^8.0.2.
Ran ng update @angular/material@20.
Updated all eslint and typescript to the latest versions.
Removed @angular-devkit/schematics.
Updated fontawesome.
Updated rxjs and tslib.
Moved required node version from 16 to 20.
Updated jest-preset-angular.
Set preserveWhitespaces to false.
Corrected two type declarations in two typescript files to make ng serve run without errors.
Removed unused angular-devkit/schematics from view-user.component.ts .
Updated list of supported browsers.
Upgraded prettier.
Ran prettier . --write the first time.
Ran prettier . --write the second time.
Ran ng generate @angular/core:inject with defaults, excepted a handful of files.
Fixed remaining eslint problems.
Added dist directory to ignores in eslint.config.js.
Let prettier fix formatting, almost everything is just line breaks.
Made htmlhint ignore @if and @for Angular constructs.
Updated node version in Github workflow to 22.12.0 (build.yml).
Updated .env.ts.
Updated Angular datetime format strings from YYYY-MM-DD to yyyy-MM-dd.
Merged changes from dev into angular20 branch.
2025-12-08 11:01:01 +01:00

134 lines
4.6 KiB
TypeScript

/** Angular Imports */
import { Component, OnInit, Input, Output, EventEmitter, inject } from '@angular/core';
import { UntypedFormGroup, UntypedFormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';
import { SettingsService } from 'app/settings/settings.service';
/** Custom Services */
import { FixedDepositsService } from '../../fixed-deposits.service';
import { MatTooltip } from '@angular/material/tooltip';
import { MatStepperPrevious, MatStepperNext } from '@angular/material/stepper';
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
/**
* Fixed Deposits Account Details Step
*/
@Component({
selector: 'mifosx-fixed-deposit-account-details-step',
templateUrl: './fixed-deposit-account-details-step.component.html',
styleUrls: ['./fixed-deposit-account-details-step.component.scss'],
imports: [
...STANDALONE_SHARED_IMPORTS,
MatTooltip,
MatStepperPrevious,
FaIconComponent,
MatStepperNext
]
})
export class FixedDepositAccountDetailsStepComponent implements OnInit {
private formBuilder = inject(UntypedFormBuilder);
private fixedDepositsService = inject(FixedDepositsService);
private settingsService = inject(SettingsService);
/** Fixed Deposits Account Template */
@Input() fixedDepositsAccountTemplate: any;
/** Minimum date allowed. */
minDate = new Date(2000, 0, 1);
/** Maximum date allowed. */
maxDate = new Date();
/** Product Data */
productData: any;
/** Field Officer Data */
fieldOfficerData: any;
/** For edit savings form */
isFieldOfficerPatched = false;
/** Fixed Deposits Account Details Form */
fixedDepositAccountDetailsForm: UntypedFormGroup;
isProductSelected = false;
/** Fixed Deposits Account Template with product data */
@Output() fixedDepositsAccountProductTemplate = new EventEmitter();
/**
* Sets fixed deposits account details form.
* @param {FormBuilder} formBuilder Form Builder.
* @param {FixedDepositsService} fixedDepositsService Fixed Deposits Service.
* @param {SettingsService} settingsService Settings Service
*/
constructor() {
this.createFixedDepositsAccountDetailsForm();
}
ngOnInit() {
this.maxDate = this.settingsService.businessDate;
this.buildDependencies();
if (this.fixedDepositsAccountTemplate) {
this.productData = this.fixedDepositsAccountTemplate.productOptions;
if (this.fixedDepositsAccountTemplate.depositProductId) {
this.fixedDepositAccountDetailsForm.patchValue({
productId: this.fixedDepositsAccountTemplate.depositProductId,
submittedOnDate:
this.fixedDepositsAccountTemplate.timeline.submittedOnDate &&
new Date(this.fixedDepositsAccountTemplate.timeline.submittedOnDate),
externalId: this.fixedDepositsAccountTemplate.externalId || ''
});
}
}
}
/**
* Creates fixed deposits account details form.
*/
createFixedDepositsAccountDetailsForm() {
this.fixedDepositAccountDetailsForm = this.formBuilder.group({
productId: [
'',
Validators.required
],
submittedOnDate: [
'',
Validators.required
],
fieldOfficerId: [''],
externalId: ['']
});
}
/**
* Fetches fixed deposits account product template on productId value changes
*/
buildDependencies() {
const clientId = this.fixedDepositsAccountTemplate.clientId;
this.fixedDepositAccountDetailsForm.get('productId').valueChanges.subscribe((productId: string) => {
this.fixedDepositsService.getFixedDepositsAccountTemplate(clientId, productId).subscribe((response: any) => {
this.fixedDepositsAccountProductTemplate.emit(response);
this.isProductSelected = true;
this.fieldOfficerData = response.fieldOfficerOptions;
if (!this.isFieldOfficerPatched && this.fixedDepositsAccountTemplate.fieldOfficerId) {
this.fixedDepositAccountDetailsForm
.get('fieldOfficerId')
.patchValue(this.fixedDepositsAccountTemplate.fieldOfficerId);
this.isFieldOfficerPatched = true;
} else {
this.fixedDepositAccountDetailsForm.get('fieldOfficerId').patchValue('');
}
});
});
}
/**
* Returns fixed deposits account details form value.
*/
get fixedDepositAccountDetails() {
const fixedDepositAccountDetails = this.fixedDepositAccountDetailsForm.value;
for (const key in fixedDepositAccountDetails) {
if (fixedDepositAccountDetails[key] === '') {
delete fixedDepositAccountDetails[key];
}
}
return fixedDepositAccountDetails;
}
}