Add email field to Client

This commit is contained in:
Jose Hernandez
2022-04-27 20:11:47 -05:00
parent c938cf7763
commit d366f32dfd
12 changed files with 87 additions and 55 deletions
@@ -85,11 +85,6 @@
<input matInput formControlName="externalId"> <input matInput formControlName="externalId">
</mat-form-field> </mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>Mobile No</mat-label>
<input matInput type="number" formControlName="mobileNo">
</mat-form-field>
<mat-form-field *ngIf="createClientForm.value.legalFormId === 1" fxFlex="48%"> <mat-form-field *ngIf="createClientForm.value.legalFormId === 1" fxFlex="48%">
<mat-label>Gender</mat-label> <mat-label>Gender</mat-label>
<mat-select formControlName="genderId"> <mat-select formControlName="genderId">
@@ -103,6 +98,19 @@
Is staff? Is staff?
</mat-checkbox> </mat-checkbox>
<mat-form-field fxFlex="48%">
<mat-label>Mobile No</mat-label>
<input matInput type="number" formControlName="mobileNo">
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>Email Address</mat-label>
<input matInput formControlName="emailAddress">
<mat-error *ngIf="createClientForm.controls.emailAddress.errors?.email">
Email not valid
</mat-error>
</mat-form-field>
<mat-form-field fxFlex="48%"> <mat-form-field fxFlex="48%">
<mat-label>Client Type</mat-label> <mat-label>Client Type</mat-label>
<mat-select formControlName="clientTypeId"> <mat-select formControlName="clientTypeId">
@@ -76,6 +76,7 @@ export class ClientGeneralStepComponent implements OnInit {
'externalId': [''], 'externalId': [''],
'genderId': [''], 'genderId': [''],
'mobileNo': [''], 'mobileNo': [''],
'emailAddress': ['', Validators.email],
'dateOfBirth': [''], 'dateOfBirth': [''],
'clientTypeId': [''], 'clientTypeId': [''],
'clientClassificationId': [''], 'clientClassificationId': [''],
@@ -40,6 +40,11 @@
<span fxFlex="60%">{{ client.mobileNo }}</span> <span fxFlex="60%">{{ client.mobileNo }}</span>
</div> </div>
<div fxFlexFill *ngIf="client.emailAddress">
<span fxFlex="40%">Email Address</span>
<span fxFlex="60%">{{ client.emailAddress }}</span>
</div>
<div fxFlexFill *ngIf="client.clientTypeId"> <div fxFlexFill *ngIf="client.clientTypeId">
<span fxFlex="40%">Client Type</span> <span fxFlex="40%">Client Type</span>
<span fxFlex="60%">{{ client.clientTypeId | find:clientTemplate.clientTypeOptions:'id':'name' }}</span> <span fxFlex="60%">{{ client.clientTypeId | find:clientTemplate.clientTypeOptions:'id':'name' }}</span>
@@ -76,7 +81,7 @@
<span fxFlex="40%">Gender</span> <span fxFlex="40%">Gender</span>
<span fxFlex="60%">{{ client.genderId | find:clientTemplate.genderOptions:'id':'name' }}</span> <span fxFlex="60%">{{ client.genderId | find:clientTemplate.genderOptions:'id':'name' }}</span>
</div> </div>
<div fxFlexFill> <div fxFlexFill>
<span fxFlex="40%">Is Staff?</span> <span fxFlex="40%">Is Staff?</span>
<span fxFlex="60%">{{ client.isStaff ? 'Yes' : 'No' }}</span> <span fxFlex="60%">{{ client.isStaff ? 'Yes' : 'No' }}</span>
@@ -90,22 +95,22 @@
<span fxFlex="40%">Incorporation Validity Till Date</span> <span fxFlex="40%">Incorporation Validity Till Date</span>
<span fxFlex="60%">{{ client.clientNonPersonDetails.incorpValidityTillDate | date }}</span> <span fxFlex="60%">{{ client.clientNonPersonDetails.incorpValidityTillDate | date }}</span>
</div> </div>
<div fxFlexFill> <div fxFlexFill>
<span fxFlex="40%">Incorportation Number</span> <span fxFlex="40%">Incorportation Number</span>
<span fxFlex="60%">{{ client.clientNonPersonDetails.incorpNumber || 'Not Provided' }}</span> <span fxFlex="60%">{{ client.clientNonPersonDetails.incorpNumber || 'Not Provided' }}</span>
</div> </div>
<div fxFlexFill *ngIf="client.clientNonPersonDetails.mainBusinessLineId"> <div fxFlexFill *ngIf="client.clientNonPersonDetails.mainBusinessLineId">
<span fxFlex="40%">Main Business Line</span> <span fxFlex="40%">Main Business Line</span>
<span fxFlex="60%">{{ client.clientNonPersonDetails.mainBusinessLineId | find:clientTemplate.clientNonPersonMainBusinessLineOptions:'id':'name' }}</span> <span fxFlex="60%">{{ client.clientNonPersonDetails.mainBusinessLineId | find:clientTemplate.clientNonPersonMainBusinessLineOptions:'id':'name' }}</span>
</div> </div>
<div fxFlexFill *ngIf="client.clientNonPersonDetails.constitutionId"> <div fxFlexFill *ngIf="client.clientNonPersonDetails.constitutionId">
<span fxFlex="40%">Constitution</span> <span fxFlex="40%">Constitution</span>
<span fxFlex="60%">{{ client.clientNonPersonDetails.constitutionId | find:clientTemplate.clientNonPersonConstitutionOptions:'id':'name'}}</span> <span fxFlex="60%">{{ client.clientNonPersonDetails.constitutionId | find:clientTemplate.clientNonPersonConstitutionOptions:'id':'name'}}</span>
</div> </div>
<div fxFlexFill> <div fxFlexFill>
<span fxFlex="40%">Remarks</span> <span fxFlex="40%">Remarks</span>
<span fxFlex="60%">{{ client.clientNonPersonDetails.remarks || 'N/A' }}</span> <span fxFlex="60%">{{ client.clientNonPersonDetails.remarks || 'N/A' }}</span>
@@ -153,7 +158,7 @@
</mat-expansion-panel> </mat-expansion-panel>
</mat-accordion> </mat-accordion>
</div> </div>
@@ -166,21 +171,21 @@
<mat-accordion fxFlexFill class="m-t-5"> <mat-accordion fxFlexFill class="m-t-5">
<mat-expansion-panel *ngFor="let address of client.address" class="address"> <mat-expansion-panel *ngFor="let address of client.address" class="address">
<mat-expansion-panel-header> <mat-expansion-panel-header>
<mat-panel-title> <mat-panel-title>
{{ getSelectedValue('addressTypeIdOptions',address.addressTypeId)?.name }} {{ getSelectedValue('addressTypeIdOptions',address.addressTypeId)?.name }}
</mat-panel-title> </mat-panel-title>
<mat-panel-description> <mat-panel-description>
{{address.relationship}} {{address.relationship}}
</mat-panel-description> </mat-panel-description>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<mat-divider></mat-divider> <mat-divider></mat-divider>
<p> <p>
<span *ngIf="isFieldEnabled('street')">Street : {{address.street}}<br /></span> <span *ngIf="isFieldEnabled('street')">Street : {{address.street}}<br /></span>
<span *ngIf="isFieldEnabled('addressLine1')">Address Line 1 : {{address.addressLine1}}<br /></span> <span *ngIf="isFieldEnabled('addressLine1')">Address Line 1 : {{address.addressLine1}}<br /></span>
@@ -195,9 +200,9 @@
<span *ngIf="isFieldEnabled('postalCode')">Postal Code : {{address.postalCode}}<br /></span> <span *ngIf="isFieldEnabled('postalCode')">Postal Code : {{address.postalCode}}<br /></span>
<span *ngIf="isFieldEnabled('isActive')">Active Status : {{address.isActive}}<br /></span> <span *ngIf="isFieldEnabled('isActive')">Active Status : {{address.isActive}}<br /></span>
</p> </p>
</mat-expansion-panel> </mat-expansion-panel>
</mat-accordion> </mat-accordion>
</div> </div>
+1 -2
View File
@@ -83,8 +83,7 @@ const routes: Routes = [
data: { title: extract('General'), breadcrumb: 'General', routeParamBreadcrumb: false }, data: { title: extract('General'), breadcrumb: 'General', routeParamBreadcrumb: false },
resolve: { resolve: {
clientAccountsData: ClientAccountsResolver, clientAccountsData: ClientAccountsResolver,
clientChargesData: ClientChargesResolver, clientChargesData: ClientChargesResolver
clientSummary: ClientSummaryResolver
} }
}, },
{ {
@@ -73,7 +73,7 @@ export class GeneralTabComponent {
this.loanAccounts = data.clientAccountsData.loanAccounts; this.loanAccounts = data.clientAccountsData.loanAccounts;
this.shareAccounts = data.clientAccountsData.shareAccounts; this.shareAccounts = data.clientAccountsData.shareAccounts;
this.upcomingCharges = data.clientChargesData.pageItems; this.upcomingCharges = data.clientChargesData.pageItems;
this.clientSummary = data.clientSummary[0]; this.clientSummary = data.clientSummary ? data.clientSummary[0] : [];
this.clientid = this.route.parent.snapshot.params['clientId']; this.clientid = this.route.parent.snapshot.params['clientId'];
}); });
} }
@@ -84,9 +84,21 @@
<input matInput formControlName="externalId"> <input matInput formControlName="externalId">
</mat-form-field> </mat-form-field>
<mat-checkbox *ngIf="editClientForm.value.legalFormId === 1" fxFlex="48%" labelPosition="before" formControlName="isStaff" class="margin-v">
Is staff?
</mat-checkbox>
<mat-form-field fxFlex="48%"> <mat-form-field fxFlex="48%">
<mat-label>Mobile No</mat-label> <mat-label>Mobile No</mat-label>
<input matInput formControlName="mobileNo"> <input matInput type="number" formControlName="mobileNo">
</mat-form-field>
<mat-form-field fxFlex="48%">
<mat-label>Email Address</mat-label>
<input matInput formControlName="emailAddress">
<mat-error *ngIf="editClientForm.controls.emailAddress.errors?.email">
Email not valid
</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxFlex="48%"> <mat-form-field fxFlex="48%">
@@ -109,20 +121,20 @@
<mat-form-field fxFlex="48%"> <mat-form-field fxFlex="48%">
<mat-label>Submitted On</mat-label> <mat-label>Submitted On</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="submittedOnDatePicker" formControlName="submittedOnDate"> <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="submittedOnDatePicker" formControlName="submittedOnDate" required>
<mat-datepicker-toggle matSuffix [for]="submittedOnDatePicker"></mat-datepicker-toggle> <mat-datepicker-toggle matSuffix [for]="submittedOnDatePicker"></mat-datepicker-toggle>
<mat-datepicker #submittedOnDatePicker></mat-datepicker> <mat-datepicker #submittedOnDatePicker></mat-datepicker>
<mat-error *ngIf="editClientForm.controls.submittedOnDate.hasError('required')">
Submitted Date is <strong>required</strong>
</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxFlex="48%"> <mat-form-field fxFlex="48%">
<mat-label>Activated On</mat-label> <mat-label>Activated On</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="activatedOnDatePicker" required <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="activatedOnDatePicker"
formControlName="activationDate"> formControlName="activationDate">
<mat-datepicker-toggle matSuffix [for]="activatedOnDatePicker"></mat-datepicker-toggle> <mat-datepicker-toggle matSuffix [for]="activatedOnDatePicker"></mat-datepicker-toggle>
<mat-datepicker #activatedOnDatePicker></mat-datepicker> <mat-datepicker #activatedOnDatePicker></mat-datepicker>
<mat-error *ngIf="editClientForm.controls.activationDate.hasError('required')">
Activation Date is <strong>required</strong>
</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="editClientForm.value.legalFormId === 1" fxFlex="48%"> <mat-form-field *ngIf="editClientForm.value.legalFormId === 1" fxFlex="48%">
@@ -134,10 +146,6 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-checkbox *ngIf="editClientForm.value.legalFormId === 1" fxFlex="48%" labelPosition="before" formControlName="isStaff" class="margin-v">
Is staff?
</mat-checkbox>
<div fxFlex="100%" fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" formGroupName="clientNonPersonDetails" <div fxFlex="100%" fxLayout="row wrap" fxLayoutGap="2%" fxLayout.lt-md="column" formGroupName="clientNonPersonDetails"
*ngIf="editClientForm.contains('clientNonPersonDetails')"> *ngIf="editClientForm.contains('clientNonPersonDetails')">
@@ -147,12 +155,12 @@
<mat-datepicker-toggle matSuffix [for]="incorpValidityTillDateDatePicker"></mat-datepicker-toggle> <mat-datepicker-toggle matSuffix [for]="incorpValidityTillDateDatePicker"></mat-datepicker-toggle>
<mat-datepicker #incorpValidityTillDateDatePicker></mat-datepicker> <mat-datepicker #incorpValidityTillDateDatePicker></mat-datepicker>
</mat-form-field> </mat-form-field>
<mat-form-field fxFlex="48%"> <mat-form-field fxFlex="48%">
<mat-label>Incorporation No</mat-label> <mat-label>Incorporation No</mat-label>
<input matInput formControlName="incorpNumber"> <input matInput formControlName="incorpNumber">
</mat-form-field> </mat-form-field>
<mat-form-field fxFlex="48%"> <mat-form-field fxFlex="48%">
<mat-label>Main Business Line</mat-label> <mat-label>Main Business Line</mat-label>
<mat-select formControlName="mainBusinessLineId"> <mat-select formControlName="mainBusinessLineId">
@@ -161,7 +169,7 @@
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field fxFlex="48%"> <mat-form-field fxFlex="48%">
<mat-label>Constitution</mat-label> <mat-label>Constitution</mat-label>
<mat-select formControlName="constitutionId"> <mat-select formControlName="constitutionId">
@@ -170,7 +178,7 @@
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field fxFlex="98%"> <mat-form-field fxFlex="98%">
<mat-label>Remarks</mat-label> <mat-label>Remarks</mat-label>
<textarea matInput formControlName="remarks"></textarea> <textarea matInput formControlName="remarks"></textarea>
@@ -79,6 +79,7 @@ export class EditClientComponent implements OnInit {
'isStaff': this.clientDataAndTemplate.isStaff, 'isStaff': this.clientDataAndTemplate.isStaff,
'active': this.clientDataAndTemplate.active, 'active': this.clientDataAndTemplate.active,
'mobileNo': this.clientDataAndTemplate.mobileNo, 'mobileNo': this.clientDataAndTemplate.mobileNo,
'emailAddress': this.clientDataAndTemplate.emailAddress,
'dateOfBirth': this.clientDataAndTemplate.dateOfBirth && new Date(this.clientDataAndTemplate.dateOfBirth), 'dateOfBirth': this.clientDataAndTemplate.dateOfBirth && new Date(this.clientDataAndTemplate.dateOfBirth),
'clientTypeId': this.clientDataAndTemplate.clientType && this.clientDataAndTemplate.clientType.id, 'clientTypeId': this.clientDataAndTemplate.clientType && this.clientDataAndTemplate.clientType.id,
'clientClassificationId': this.clientDataAndTemplate.clientClassification && this.clientDataAndTemplate.clientClassification.id, 'clientClassificationId': this.clientDataAndTemplate.clientClassification && this.clientDataAndTemplate.clientClassification.id,
@@ -101,11 +102,12 @@ export class EditClientComponent implements OnInit {
'externalId': [''], 'externalId': [''],
'genderId': [''], 'genderId': [''],
'mobileNo': [''], 'mobileNo': [''],
'emailAddress': ['', Validators.email],
'dateOfBirth': [''], 'dateOfBirth': [''],
'clientTypeId': [''], 'clientTypeId': [''],
'clientClassificationId': [''], 'clientClassificationId': [''],
'submittedOnDate': [''], 'submittedOnDate': ['', Validators.required],
'activationDate': ['', Validators.required] 'activationDate': ['']
}); });
} }
+10
View File
@@ -30,6 +30,13 @@ export class SettingsService {
localStorage.setItem('mifosXLanguage', JSON.stringify(language)); localStorage.setItem('mifosXLanguage', JSON.stringify(language));
} }
setDefaultLanguage() {
this.setLanguage({
name: environment.defaultLanguage,
code: environment.defaultLanguage.substring(0, 2)
});
}
/** /**
* Sets server URL setting throughout the app. * Sets server URL setting throughout the app.
* @param {string} url URL * @param {string} url URL
@@ -57,6 +64,9 @@ export class SettingsService {
* Returns language setting * Returns language setting
*/ */
get language() { get language() {
if (!localStorage.getItem('mifosXLanguage')) {
this.setDefaultLanguage();
}
return JSON.parse(localStorage.getItem('mifosXLanguage')); return JSON.parse(localStorage.getItem('mifosXLanguage'));
} }
@@ -1,6 +1,6 @@
<mat-form-field id="language-selector"> <mat-form-field id="language-selector">
<mat-label>Language</mat-label> <mat-label>Language</mat-label>
<mat-select [formControl]="languageSelector"> <mat-select [formControl]="languageSelector" (selectionChange)="setLanguage()" class="languageselector">
<mat-option *ngFor="let language of languages" [value]="language"> <mat-option *ngFor="let language of languages" [value]="language">
{{ language }} {{ language }}
</mat-option> </mat-option>
@@ -1,3 +1,4 @@
#language-selector { #language-selector,
max-width: 4rem; .languageselector {
max-width: 6rem;
} }
@@ -3,7 +3,8 @@ import { Component, OnInit } from '@angular/core';
import { FormControl } from '@angular/forms'; import { FormControl } from '@angular/forms';
/** Custom Services */ /** Custom Services */
import { I18nService } from '../../core/i18n/i18n.service'; import { TranslateService } from '@ngx-translate/core';
import { SettingsService } from 'app/settings/settings.service';
/** /**
* Language selector component. * Language selector component.
@@ -25,9 +26,9 @@ export class LanguageSelectorComponent implements OnInit {
* Sets the language of the application in the selector on initial setup. * Sets the language of the application in the selector on initial setup.
* @param {I18nService} i18nService Internationalization Service. * @param {I18nService} i18nService Internationalization Service.
*/ */
constructor(private i18nService: I18nService) { constructor(private translate: TranslateService,
private settingsService: SettingsService) {
this.languageSelector.setValue(this.currentLanguage); this.languageSelector.setValue(this.currentLanguage);
this.languageSelector.valueChanges.subscribe( language => this.setLanguage(language) );
} }
ngOnInit() { ngOnInit() {
@@ -37,8 +38,9 @@ export class LanguageSelectorComponent implements OnInit {
* Sets a new language to be used by the application. * Sets a new language to be used by the application.
* @param {string} language New language. * @param {string} language New language.
*/ */
setLanguage(language: string) { setLanguage() {
this.i18nService.language = language; this.translate.use(this.languageSelector.value);
this.settingsService.setLanguage({ name: '', code: this.languageSelector.value.substring(0, 2) });
} }
/** /**
@@ -46,7 +48,7 @@ export class LanguageSelectorComponent implements OnInit {
* @returns {string} Current language. * @returns {string} Current language.
*/ */
get currentLanguage(): string { get currentLanguage(): string {
return this.i18nService.language; return this.translate.currentLang;
} }
/** /**
@@ -54,7 +56,7 @@ export class LanguageSelectorComponent implements OnInit {
* @return {string[]} Supported languages. * @return {string[]} Supported languages.
*/ */
get languages(): string[] { get languages(): string[] {
return this.i18nService.supportedLanguages; return this.translate.getLangs();
} }
} }
+3 -7
View File
@@ -16,7 +16,6 @@ import { environment } from 'environments/environment';
/** Custom Services */ /** Custom Services */
import { Logger } from './core/logger/logger.service'; import { Logger } from './core/logger/logger.service';
import { I18nService } from './core/i18n/i18n.service';
import { ThemeStorageService } from './shared/theme-picker/theme-storage.service'; import { ThemeStorageService } from './shared/theme-picker/theme-storage.service';
import { AlertService } from './core/alert/alert.service'; import { AlertService } from './core/alert/alert.service';
import { AuthenticationService } from './core/authentication/authentication.service'; import { AuthenticationService } from './core/authentication/authentication.service';
@@ -56,7 +55,6 @@ export class WebAppComponent implements OnInit {
private activatedRoute: ActivatedRoute, private activatedRoute: ActivatedRoute,
private titleService: Title, private titleService: Title,
private translateService: TranslateService, private translateService: TranslateService,
private i18nService: I18nService,
private themeStorageService: ThemeStorageService, private themeStorageService: ThemeStorageService,
public snackBar: MatSnackBar, public snackBar: MatSnackBar,
private alertService: AlertService, private alertService: AlertService,
@@ -84,7 +82,8 @@ export class WebAppComponent implements OnInit {
log.debug('init'); log.debug('init');
// Setup translations // Setup translations
this.i18nService.init(environment.defaultLanguage, environment.supportedLanguages); this.translateService.addLangs(environment.supportedLanguages);
this.translateService.use(environment.defaultLanguage);
// Change page title on navigation or language change, based on route data // Change page title on navigation or language change, based on route data
const onNavigationEnd = this.router.events.pipe(filter(event => event instanceof NavigationEnd)); const onNavigationEnd = this.router.events.pipe(filter(event => event instanceof NavigationEnd));
@@ -138,10 +137,7 @@ export class WebAppComponent implements OnInit {
// initialize language and date format if they are null. // initialize language and date format if they are null.
if (!localStorage.getItem('mifosXLanguage')) { if (!localStorage.getItem('mifosXLanguage')) {
this.settingsService.setLanguage({ this.settingsService.setDefaultLanguage();
name: 'English',
code: 'en'
});
} }
if (!localStorage.getItem('mifosXDateFormat')) { if (!localStorage.getItem('mifosXDateFormat')) {
this.settingsService.setDateFormat('dd MMMM yyyy'); this.settingsService.setDateFormat('dd MMMM yyyy');