Files
cbsnexora/src/app/loans/loans-view/loans-view.component.html
T
Felix van HoveandGitHub ee81d6da22 fix: breadcrumbs, labels and other issues in the context of loan/saving applications for groups (#2303)
This makes Group Loans somehow work, fixes the breadcrumbs for GLIM applications,
configures permissions for links to GLIM and GSIM applications and a few other
things, all regarding loan, savings, GLIM and GSIM applications of groups.

Partially addresses: WEB-9
2025-03-06 13:07:13 -06:00

361 lines
14 KiB
HTML

<mat-card class="account-card">
<mat-card-header fxLayout="column" class="header">
<mat-card-title-group class="header-title-group">
<div class="profile-image-container">
<div>
<mifosx-svg-icon
[iconClass]=""
iconFile="account_placeholder"
iconName="LOAN_ACCOUNT"
iconWidth="210"
matTooltip="{{ 'tooltips.Loan Account' | translate }}"
>
</mifosx-svg-icon>
</div>
</div>
<div class="mat-typography account-card-title">
<mat-card-title>
<div fxLayout="row" fxLayout.lt-md="column">
<div fxFlex="60%">
<h3>
<i
class="fa fa-stop"
matTooltip="{{ 'labels.status.' + loanDetailsData.status.value | translate }}"
[ngClass]="
loanDetailsData.inArrears ? 'status-active-overdue' : (iconLoanStatusColor() | statusLookup)
"
></i>
<span class="m-r-5">{{ 'labels.heading.Loan Product' | translate }} :</span>
<span class="m-r-5"
><mifosx-long-text textValue="{{ loanDetailsData.loanProductName }}"></mifosx-long-text
></span>
<mifosx-account-number
accountNo="{{ loanDetailsData.accountNo }}"
display="left"
></mifosx-account-number>
</h3>
<span class="loans-overview">
<span class="m-r-10"
>{{ 'labels.text.' + entityType | translate }} {{ 'labels.inputs.name' | translate }} :</span
>
{{ loanDetailsData.clientName || loanDetailsData.group.name
}}<span class="m-l-5">({{ loanDetailsData.clientAccountNo || loanDetailsData.group.accountNo }})</span
><br />
</span>
<div *ngIf="loanDisplayArrearsDelinquency !== 1">
<table class="account-overview">
<tbody>
<tr *ngIf="loanDetailsData.delinquencyRange">
<td>{{ 'labels.inputs.Delinquency Classification' | translate }} :</td>
<td>
<span class="m-r-3"><i [ngClass]="loanDelinquencyClassificationStyle"></i></span>
{{ loanDetailsData?.delinquencyRange.classification }}
</td>
</tr>
<tr *ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.pastDueDays > 0">
<td>{{ 'labels.inputs.Past Due Days' | translate }} :</td>
<td>{{ loanDetailsData?.delinquent.pastDueDays | formatNumber }}</td>
</tr>
<tr
*ngIf="
loanDetailsData.delinquent &&
loanDetailsData.delinquent.delinquentDays > 0 &&
loanDetailsData.delinquent.pastDueDays !== loanDetailsData.delinquent.delinquentDays
"
>
<td>{{ 'labels.inputs.Delinquent Days' | translate }} :</td>
<td>{{ loanDetailsData?.delinquent.delinquentDays | formatNumber }}</td>
</tr>
</tbody>
</table>
</div>
</div>
<div *ngIf="loanDetailsData.summary" class="loans-overview mat-typography" fxFlex="40%">
<h3>{{ 'labels.heading.Account Overview' | translate }}</h3>
<table class="account-overview">
<tbody>
<tr>
<td>{{ 'labels.inputs.Current Balance' | translate }}</td>
<td class="r-amount">
{{
loanDetailsData.summary.totalOutstanding | currency: currency.code : 'symbol-narrow' : '1.2-2'
}}
</td>
</tr>
<tr *ngIf="loanDisplayArrearsDelinquency < 2">
<td>{{ 'labels.inputs.Arrears By' | translate }}</td>
<td class="r-amount" *ngIf="loanDetailsData.summary.totalOverdue >= 0">
{{ loanDetailsData.summary.totalOverdue | currency: currency.code : 'symbol-narrow' : '1.2-2' }}
</td>
<td *ngIf="!(loanDetailsData.summary.totalOverdue >= 0)">
{{ 'labels.inputs.Not Provided' | translate }}
</td>
</tr>
<tr *ngIf="loanDetailsData.inArrears">
<td>{{ 'labels.inputs.Arrears Since' | translate }}</td>
<td>{{ loanDetailsData.summary.overdueSinceDate | dateFormat }}</td>
</tr>
<tr *ngIf="loanDetailsData.totalOverpaid && loanDetailsData.totalOverpaid > 0">
<td>{{ 'labels.inputs.Overpaid By' | translate }}</td>
<td class="r-amount">
{{ loanDetailsData.totalOverpaid | currency: currency.code : 'symbol-narrow' : '1.2-2' }}
</td>
</tr>
</tbody>
</table>
</div>
<span fxFlex="auto"></span>
<div fxFlex="4%">
<button
mat-icon-button
[matMenuTriggerFor]="accountMenu"
aria-label="Loan account actions"
yPosition="below"
*ngIf="buttonConfig.singleButtons.length > 0"
>
<mat-icon matListIcon class="actions-menu">
<fa-icon icon="bars" size="sm"></fa-icon>
</mat-icon>
</button>
</div>
</div>
</mat-card-title>
</div>
<mat-menu #accountMenu="matMenu">
<ng-container *ngFor="let item of buttonConfig.singleButtons">
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName" (click)="loanAction(item.name)">
<mat-icon matListIcon>
<fa-icon icon="{{ item.icon }}" size="sm"></fa-icon>
</mat-icon>
<span>{{ 'labels.menus.' + item.name | translate }}</span>
</button>
</ng-container>
<ng-container *ngIf="buttonConfig.optionsPayment.length" class="loan-span">
<button mat-menu-item [matMenuTriggerFor]="Payments">{{ 'labels.menus.Payments' | translate }}</button>
<mat-menu #Payments="matMenu">
<span *ngFor="let item of buttonConfig.optionsPayment">
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName" (click)="loanAction(item.name)">
{{ 'labels.menus.' + item.name | translate }}
</button>
</span>
</mat-menu>
</ng-container>
<ng-container *ngIf="buttonConfig.options.length" class="loan-span">
<button mat-menu-item [matMenuTriggerFor]="More">{{ 'labels.menus.More' | translate }}</button>
<mat-menu #More="matMenu">
<span *ngFor="let item of buttonConfig.options">
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName" (click)="loanAction(item.name)">
{{ 'labels.menus.' + item.name | translate }}
</button>
</span>
</mat-menu>
</ng-container>
</mat-menu>
</mat-card-title-group>
</mat-card-header>
<mat-card-content>
<nav mat-tab-nav-bar class="navigation-tabs">
<a
mat-tab-link
[routerLink]="['./general']"
routerLinkActive
#general="routerLinkActive"
[active]="general.isActive"
>
{{ 'labels.inputs.General' | translate }}
</a>
<a
mat-tab-link
[routerLink]="['./accountdetail']"
routerLinkActive
#accountdetail="routerLinkActive"
[active]="accountdetail.isActive"
>
{{ 'labels.inputs.Account Details' | translate }}
</a>
<ng-container *ngIf="loanDetailsData.originalSchedule">
<a
mat-tab-link
[routerLink]="['./original-schedule']"
routerLinkActive
#originalSchedule="routerLinkActive"
[active]="originalSchedule.isActive"
>
{{ 'labels.inputs.Original Schedule' | translate }}
</a>
</ng-container>
<a
mat-tab-link
[routerLink]="['./repayment-schedule']"
routerLinkActive
#repaymentSchedule="routerLinkActive"
[active]="repaymentSchedule.isActive"
>
{{ 'labels.inputs.Repayment Schedule' | translate }}
</a>
<ng-container *ngIf="loanDetailsData.transactions">
<a
mat-tab-link
[routerLink]="['./transactions']"
routerLinkActive
#transactions="routerLinkActive"
[active]="transactions.isActive"
>
{{ 'labels.inputs.Transactions' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.status.active">
<a
mat-tab-link
[routerLink]="['./delinquencytags']"
routerLinkActive
#delinquencytags="routerLinkActive"
[active]="delinquencytags.isActive"
>
{{ 'labels.inputs.Delinquency Tags' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.collateral">
<a
mat-tab-link
[routerLink]="['./loan-collateral']"
routerLinkActive
#loanCollateralDetails="routerLinkActive"
[active]="loanCollateralDetails.isActive"
>
{{ 'labels.inputs.Loan Collateral Details' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.multiDisburseLoan">
<a
mat-tab-link
[routerLink]="['./loan-tranche-details']"
routerLinkActive
#loanTrancheDetails="routerLinkActive"
[active]="loanTrancheDetails.isActive"
>
{{ 'labels.inputs.Loan Tranche Details' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.loanTermVariations">
<a
mat-tab-link
[routerLink]="['./term-variations']"
routerLinkActive
#termVariations="routerLinkActive"
[active]="termVariations.isActive"
>
{{ 'labels.inputs.Term Variations' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.overdueCharges.length > 0">
<a
mat-tab-link
[routerLink]="['./overdue-charges']"
routerLinkActive
#overduecharges="routerLinkActive"
[active]="overduecharges.isActive"
>
{{ 'labels.inputs.Overdue Charges' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.isLoanProductLinkedToFloatingRate">
<a
mat-tab-link
[routerLink]="['./floating-interest-rates']"
routerLinkActive
#floatingInterestRates="routerLinkActive"
[active]="floatingInterestRates.isActive"
>
{{ 'labels.inputs.Floating Interest Rates' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.charges">
<a
mat-tab-link
[routerLink]="['./charges']"
routerLinkActive
#charges="routerLinkActive"
[active]="charges.isActive"
>
{{ 'labels.inputs.Charges' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.status.active">
<a
mat-tab-link
[routerLink]="['./loan-reschedules']"
routerLinkActive
#loanReschedules="routerLinkActive"
[active]="loanReschedules.isActive"
>
{{ 'labels.inputs.Loan Reschedules' | translate }}
</a>
</ng-container>
<a
mat-tab-link
[routerLink]="['./loan-documents']"
routerLinkActive
#loanDocuments="routerLinkActive"
[active]="loanDocuments.isActive"
>
{{ 'labels.inputs.Loan Documents' | translate }}
</a>
<a
mat-tab-link
*mifosxHasPermission="'READ_LOANNOTE'"
[routerLink]="['./notes']"
routerLinkActive
#notes="routerLinkActive"
[active]="notes.isActive"
>
{{ 'labels.inputs.Notes' | translate }}
</a>
<ng-container *ngIf="loanDetailsData.clientId">
<a
mat-tab-link
[routerLink]="['./standing-instruction']"
routerLinkActive
#standingInstruction="routerLinkActive"
[active]="standingInstruction.isActive"
>
{{ 'labels.inputs.Standing Instruction' | translate }}
</a>
</ng-container>
<ng-container *ngIf="loanDetailsData.status.active">
<a
mat-tab-link
[routerLink]="['./external-asset-owner']"
routerLinkActive
#externalAssetOwner="routerLinkActive"
[active]="externalAssetOwner.isActive"
>
{{ 'labels.inputs.External Asset Owner' | translate }}
</a>
</ng-container>
<ng-container *ngFor="let loanDatatable of loanDatatables">
<a
mat-tab-link
*mifosxHasPermission="'READ_' + loanDatatable.registeredTableName"
[routerLink]="['./datatables', loanDatatable.registeredTableName]"
routerLinkActive
#datatable="routerLinkActive"
[active]="datatable.isActive"
>
{{ loanDatatable.registeredTableName }}
</a>
</ng-container>
</nav>
<router-outlet></router-outlet>
</mat-card-content>
</mat-card>