Files
cbsnexora/src/app/clients/clients-view/clients-view.component.html
T

473 lines
18 KiB
HTML

<!--
Copyright since 2025 Mifos Initiative
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
-->
<mat-card class="account-card">
<mat-card-header class="header layout-column">
<mat-card-title-group class="header-title-group">
<div class="profile-image-container">
<div>
<img
mat-card-md-image
class="profile-image"
[src]="clientImage ? clientImage : 'assets/images/user_placeholder.png'"
/>
</div>
<div class="m-b-5 flex-center">
<button
class="client-image-button"
mat-raised-button
(click)="doAction('Upload Image')"
matTooltip="{{ 'tooltips.Upload Image' | translate }}"
*mifosxHasPermission="'CREATE_CLIENTIMAGE'"
>
<i class="fa fa-upload"></i>
</button>
<button
class="client-image-button"
mat-raised-button
(click)="doAction('Capture Image')"
matTooltip="{{ 'tooltips.Capture Image' | translate }}"
*mifosxHasPermission="'CREATE_CLIENTIMAGE'"
>
<i class="fa fa-camera"></i>
</button>
<button
class="client-image-button"
mat-raised-button
(click)="doAction('Delete Image')"
matTooltip="{{ 'tooltips.Delete Image' | translate }}"
*mifosxHasPermission="'DELETE_CLIENTIMAGE'"
>
<i class="fa fa-trash"></i>
</button>
<br />
</div>
<p (click)="doAction('View Signature')" class="signature">{{ 'labels.inputs.View Signature' | translate }}</p>
</div>
<div class="mat-typography account-card-title">
<mat-card-title class="make-flex content">
<h3 class="flex-95">
<i
class="fa fa-stop"
[ngClass]="clientViewData.status.code | statusLookup"
matTooltip="{{ 'labels.status.' + clientViewData.status.value | translate }}"
></i>
<b>{{ 'labels.inputs.Client Name' | translate }} :</b>
<mifosx-entity-name
[entityName]="
complianceHideClientData ? maskName(clientViewData.displayName) : clientViewData.displayName
"
[display]="'right'"
[hideCopy]="complianceHideClientData"
></mifosx-entity-name>
</h3>
<div class="flex-5 align-end-center">
<button mat-icon-button [matMenuTriggerFor]="clientMenu" aria-label="Client actions" yPosition="below">
<mat-icon matListIcon class="actions-menu">
<fa-icon icon="bars" size="sm"></fa-icon>
</mat-icon>
</button>
</div>
</mat-card-title>
<mat-card-subtitle>
<div class="layout-row responsive-column">
<div class="flex-50">
<table class="account-overview">
<tbody>
<tr>
<td>
<b>{{ 'labels.inputs.Office' | translate }}</b>
</td>
<td><mifosx-entity-name [entityName]="clientViewData.officeName"></mifosx-entity-name></td>
</tr>
<tr>
<td>
<b>{{ 'labels.inputs.Client' | translate }}</b>
</td>
<td><mifosx-account-number accountNo="{{ clientViewData.accountNo }}"></mifosx-account-number></td>
</tr>
<tr>
<td>
<b>{{ 'labels.inputs.External Id' | translate }}</b>
</td>
<td>
<mifosx-external-identifier
[externalId]="
complianceHideClientData ? maskValue(clientViewData.externalId) : clientViewData.externalId
"
[completed]="true"
[hideCopy]="complianceHideClientData"
></mifosx-external-identifier>
</td>
</tr>
@if (clientViewData.activationDate) {
<tr>
<td>
<b>{{ 'labels.inputs.Activation Date' | translate }}</b>
</td>
<td>{{ clientViewData.activationDate | dateFormat }}</td>
</tr>
}
<tr>
<td>
<b>{{ 'labels.inputs.Staff' | translate }}</b>
</td>
@if (clientViewData.staffName) {
<td>{{ clientViewData.staffName }}</td>
}
@if (!clientViewData.staffName) {
<td>{{ 'labels.inputs.Unassigned' | translate }}</td>
}
</tr>
</tbody>
</table>
</div>
<div class="flex-50">
<table class="account-overview">
<tbody>
@if (clientViewData.groups.length > 0) {
<tr>
<td>
<b>{{ 'labels.inputs.Member Of' | translate }}</b>
</td>
<td>
@for (group of clientViewData.groups; track group) {
<span>
<span class="m-r-3">{{ group.name }}</span>
</span>
}
</td>
</tr>
}
@if (clientViewData.clientType) {
<tr>
<td>
<b>{{ 'labels.inputs.Client Type' | translate }}</b>
</td>
<td>{{ clientViewData.clientType.name }}</td>
</tr>
}
<tr>
<td>
<b>{{ 'labels.inputs.Mobile Number' | translate }}</b>
</td>
<td>
<mifosx-external-identifier
[externalId]="
complianceHideClientData ? maskValue(clientViewData.mobileNo) : clientViewData.mobileNo
"
[completed]="true"
[hideCopy]="complianceHideClientData"
></mifosx-external-identifier>
</td>
</tr>
<tr>
<td>
<b>{{ 'labels.inputs.Email' | translate }}</b>
</td>
<td>
<mifosx-external-identifier
[externalId]="
complianceHideClientData
? maskEmail(clientViewData.emailAddress)
: clientViewData.emailAddress
"
[completed]="true"
[hideCopy]="complianceHideClientData"
></mifosx-external-identifier>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</mat-card-subtitle>
</div>
<mat-menu #clientMenu="matMenu">
<button mat-menu-item [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_CLIENT'">
<mat-icon matListIcon>
<fa-icon icon="edit" size="sm"></fa-icon>
</mat-icon>
<span>{{ 'labels.buttons.Edit' | translate }}</span>
</button>
@if (isActive()) {
<button mat-menu-item [matMenuTriggerFor]="accountApplications">
<mat-icon matListIcon>
<fa-icon icon="money-bill-alt" size="sm"></fa-icon>
</mat-icon>
<span>{{ 'labels.buttons.Applications' | translate }}</span>
</button>
}
<button mat-menu-item [matMenuTriggerFor]="Actions">
<mat-icon matListIcon>
<fa-icon icon="tasks" size="sm"></fa-icon>
</mat-icon>
<span>{{ 'labels.buttons.Actions' | translate }}</span>
</button>
@if (!clientViewData.staffId) {
<button mat-menu-item (click)="doAction('Assign Staff')">
<mat-icon matListIcon>
<fa-icon icon="user-tie" size="sm"></fa-icon>
</mat-icon>
<span>{{ 'labels.buttons.Assign Staff' | translate }}</span>
</button>
}
@if (clientViewData.staffId) {
<span>
<button mat-menu-item *mifosxHasPermission="'UNASSIGNSTAFF_CLIENT'" (click)="doAction('Unassign Staff')">
<mat-icon matListIcon>
<fa-icon icon="user-tie" size="sm"></fa-icon>
</mat-icon>
<span>{{ 'labels.buttons.Unassign Staff' | translate }}</span>
</button>
</span>
}
<button mat-menu-item [matMenuTriggerFor]="More">{{ 'labels.buttons.More' | translate }}</button>
</mat-menu>
<mat-menu #accountApplications="matMenu">
<button mat-menu-item *mifosxHasPermission="'CREATE_LOAN'" [routerLink]="['loans-accounts', 'create']">
{{ 'labels.buttons.New Loan Account' | translate }}
</button>
<button
mat-menu-item
*mifosxHasPermission="'CREATE_SAVINGSACCOUNT'"
[routerLink]="['savings-accounts', 'create']"
>
{{ 'labels.buttons.New Savings Account' | translate }}
</button>
<button mat-menu-item *mifosxHasPermission="'CREATE_SHAREACCOUNT'" [routerLink]="['shares-accounts', 'create']">
{{ 'labels.buttons.New Share Account' | translate }}
</button>
<button
mat-menu-item
*mifosxHasPermission="'CREATE_RECURRINGDEPOSITACCOUNT'"
[routerLink]="['recurring-deposits-accounts', 'create-recurring-deposits-account']"
>
{{ 'labels.buttons.New Recurring Deposit Account' | translate }}
</button>
<button
mat-menu-item
*mifosxHasPermission="'CREATE_FIXEDDEPOSITACCOUNT'"
[routerLink]="['fixed-deposits-accounts', 'create']"
>
{{ 'labels.buttons.New Fixed Deposits Account' | translate }}
</button>
</mat-menu>
<mat-menu #Actions="matMenu">
<button mat-menu-item (click)="doAction('Close')">{{ 'labels.buttons.Close' | translate }}</button>
<button mat-menu-item (click)="doAction('Transfer Client')">
{{ 'labels.buttons.Transfer Client' | translate }}
</button>
@if (clientViewData.status.value === 'Pending') {
<span
><button mat-menu-item (click)="doAction('Activate')">
{{ 'labels.buttons.Activate' | translate }}
</button></span
>
}
@if (clientViewData.status.value === 'Pending') {
<span
><button mat-menu-item (click)="doAction('Withdraw')">
{{ 'labels.buttons.Withdraw' | translate }}
</button></span
>
}
@if (clientViewData.status.value === 'Pending') {
<span
><button mat-menu-item (click)="doAction('Reject')">{{ 'labels.buttons.Reject' | translate }}</button></span
>
}
@if (clientViewData.status.value === 'Pending') {
<span
><button mat-menu-item *mifosxHasPermission="'DELETE_CLIENT'" (click)="doAction('Delete')">
{{ 'labels.buttons.Delete' | translate }}
</button></span
>
}
@if (clientViewData.status.value === 'Closed') {
<span
><button mat-menu-item (click)="doAction('Reactivate')">
{{ 'labels.buttons.Reactivate' | translate }}
</button></span
>
}
@if (clientViewData.status.value === 'Rejected') {
<span
><button mat-menu-item (click)="doAction('Undo Rejection')">
{{ 'labels.buttons.Undo Rejection' | translate }}
</button></span
>
}
@if (clientViewData.status.value === 'Transfer in progress') {
<span
><button mat-menu-item (click)="doAction('Undo Transfer')">
{{ 'labels.buttons.Undo Transfer' | translate }}
</button></span
>
}
@if (clientViewData.status.value === 'Transfer in progress') {
<span
><button mat-menu-item (click)="doAction('Accept Transfer')">
{{ 'labels.buttons.Accept Transfer' | translate }}
</button></span
>
}
@if (clientViewData.status.value === 'Transfer in progress') {
<span
><button mat-menu-item (click)="doAction('Reject Transfer')">
{{ 'labels.buttons.Reject transfer' | translate }}
</button></span
>
}
</mat-menu>
<mat-menu #More="matMenu">
<button mat-menu-item (click)="doAction('Add Charge')" *mifosxHasPermission="'CREATE_CLIENTCHARGE'">
{{ 'labels.buttons.Add Charge' | translate }}
</button>
<button mat-menu-item (click)="doAction('Create Collateral')">
{{ 'labels.buttons.Create Collateral' | translate }}
</button>
<button mat-menu-item (click)="doAction('Survey')" [disabled]="true">
{{ 'labels.buttons.Survey' | translate }}
</button>
<button
mat-menu-item
(click)="doAction('Update Default Savings')"
*mifosxHasPermission="'UPDATESAVINGSACCOUNT_CLIENT'"
>
{{ 'labels.buttons.Update Default Savings' | translate }}
</button>
<button mat-menu-item (click)="doAction('Upload Signature')" *mifosxHasPermission="'CREATE_CLIENTIMAGE'">
{{ 'labels.buttons.Upload Signature' | translate }}
</button>
<button mat-menu-item (click)="doAction('Delete Signature')" *mifosxHasPermission="'DELETE_CLIENTIMAGE'">
{{ 'labels.buttons.Delete Signature' | translate }}
</button>
<button mat-menu-item (click)="doAction('Client Screen Reports')">
{{ 'labels.buttons.Client Screen Reports' | translate }}
</button>
<button
mat-menu-item
(click)="doAction('Create Standing Instructions')"
*mifosxHasPermission="'CREATE_STANDINGINSTRUCTION'"
>
{{ 'labels.buttons.Create Standing Instructions' | translate }}
</button>
@if (clientViewData.status.value !== 'Transfer on hold') {
<span>
<button
mat-menu-item
(click)="doAction('View Standing Instructions')"
*mifosxHasPermission="'READ_STANDINGINSTRUCTION'"
>
{{ 'labels.buttons.View Standing Instructions' | translate }}
</button>
</span>
}
</mat-menu>
</mat-card-title-group>
</mat-card-header>
<mat-card-content>
<nav mat-tab-nav-bar class="navigation-tabs" [tabPanel]="tabPanel">
<a
mat-tab-link
[routerLink]="['./general']"
routerLinkActive
#general="routerLinkActive"
[active]="general.isActive"
>
{{ 'labels.inputs.General' | translate }}
</a>
<a
mat-tab-link
[routerLink]="['./personal-data']"
routerLinkActive
#personalData="routerLinkActive"
[active]="personalData.isActive"
>
{{ 'labels.inputs.Personal Data' | translate }}
</a>
<a
mat-tab-link
[routerLink]="['./address']"
routerLinkActive
#address="routerLinkActive"
[active]="address.isActive"
>
{{ 'labels.inputs.Address' | translate }}
</a>
<a
mat-tab-link
[routerLink]="['./family-members']"
routerLinkActive
#familyMembers="routerLinkActive"
[active]="familyMembers.isActive"
>
{{ 'labels.inputs.Family Members' | translate }}
</a>
<a
mat-tab-link
[routerLink]="['./identities']"
routerLinkActive
#identities="routerLinkActive"
[active]="identities.isActive"
*mifosxHasPermission="'READ_CLIENTIDENTIFIER'"
>
{{ 'labels.inputs.Identities' | translate }}
</a>
<a
mat-tab-link
[routerLink]="['./documents']"
routerLinkActive
#documents="routerLinkActive"
[active]="documents.isActive"
*mifosxHasPermission="'READ_DOCUMENT'"
>
{{ 'labels.inputs.Documents' | translate }}
</a>
<a
mat-tab-link
[routerLink]="['./notes']"
routerLinkActive
#notes="routerLinkActive"
[active]="notes.isActive"
*mifosxHasPermission="'READ_CLIENTNOTE'"
>
{{ 'labels.inputs.Notes' | translate }}
</a>
@for (clientDatatable of clientDatatables; track clientDatatable) {
<a
mat-tab-link
[routerLink]="['./datatables', clientDatatable.registeredTableName]"
routerLinkActive
#datatable="routerLinkActive"
[active]="datatable.isActive"
*mifosxHasPermission="'READ_' + clientDatatable.registeredTableName"
>
{{ formatTabLabel(clientDatatable.registeredTableName) }}
</a>
}
</nav>
<mat-tab-nav-panel #tabPanel>
<router-outlet></router-outlet>
</mat-tab-nav-panel>
</mat-card-content>
</mat-card>