Set autosize and min two rows in textarea controls (#1604)

Co-authored-by: Jose Alberto Hernandez <alberto@MacBook-Pro.local>
This commit is contained in:
José Alberto Hernández
2022-12-23 01:01:53 -06:00
committed by GitHub
co-authored by Jose Alberto Hernandez
parent 7bbab6423e
commit 475059a974
111 changed files with 915 additions and 634 deletions
@@ -117,7 +117,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Description</mat-label>
<textarea matInput formControlName="transferDescription"></textarea>
<textarea matInput formControlName="transferDescription" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
<mat-error *ngIf="makeAccountTransferForm.controls.transferDescription.hasError('required')">
Transfer Description is <strong>required</strong>
</mat-error>
@@ -98,7 +98,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -98,7 +98,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -74,7 +74,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -74,7 +74,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -32,7 +32,7 @@
<mat-form-field>
<mat-label>Comments</mat-label>
<textarea matInput formControlName="comments"></textarea>
<textarea matInput formControlName="comments" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -26,7 +26,7 @@
<mat-form-field>
<mat-label>Comments</mat-label>
<textarea matInput formControlName="comments"></textarea>
<textarea matInput formControlName="comments" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -159,7 +159,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Comments</mat-label>
<textarea matInput formControlName="comments"></textarea>
<textarea matInput formControlName="comments" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -173,7 +173,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Comments</mat-label>
<textarea matInput formControlName="comments"></textarea>
<textarea matInput formControlName="comments" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -4,18 +4,18 @@
<div fxLayout="row" fxLayoutAlign="flex-end" class="m-b-20">
<button mat-raised-button color="primary" (click)="addAddress()">
<fa-icon icon="plus"></fa-icon>&nbsp;&nbsp;Add
<fa-icon icon="plus" class="m-r-10"></fa-icon>Add
</button>
</div>
<mat-accordion>
<mat-accordion *ngIf="clientAddressData.length > 0">
<mat-expansion-panel *ngFor="let address of clientAddressData; index as i" class="address">
<mat-expansion-panel-header>
<mat-panel-title>
{{ getSelectedValue('addressTypeIdOptions',address.addressTypeId)?.name }}
{{ getSelectedValue('addressTypeIdOptions', address.addressTypeId)?.name }}
</mat-panel-title>
<mat-panel-description>
@@ -57,12 +57,12 @@
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left"></fa-icon>&nbsp;&nbsp;
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
Previous
</button>
<button mat-raised-button matStepperNext>
Next&nbsp;&nbsp;
<fa-icon icon="arrow-right"></fa-icon>
Next
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
</button>
</div>
@@ -32,7 +32,9 @@ export class ClientAddressStepComponent {
/**
* @param {MatDialog} dialog Mat Dialog
*/
constructor(private dialog: MatDialog) { }
constructor(private dialog: MatDialog) {
this.clientAddressData = [];
}
/**
* Adds a client address
@@ -42,7 +44,7 @@ export class ClientAddressStepComponent {
title: 'Add Client Address',
formfields: this.getAddressFormFields()
};
const addAddressDialogRef = this.dialog.open(FormDialogComponent, { data });
const addAddressDialogRef = this.dialog.open(FormDialogComponent, { data, width: '50rem' });
addAddressDialogRef.afterClosed().subscribe((response: any) => {
if (response.data) {
const addressData = response.data.value;
@@ -68,7 +70,7 @@ export class ClientAddressStepComponent {
formfields: this.getAddressFormFields(address),
layout: { addButtonText: 'Edit' }
};
const editAddressDialogRef = this.dialog.open(FormDialogComponent, { data });
const editAddressDialogRef = this.dialog.open(FormDialogComponent, { data, width: '50rem' });
editAddressDialogRef.afterClosed().subscribe((response: any) => {
if (response.data) {
const addressData = response.data.value;
@@ -216,7 +218,7 @@ export class ClientAddressStepComponent {
* Returns the array of client addresses
*/
get address() {
return { address: this.clientAddressData };
return { address: this.clientAddressData ? this.clientAddressData : [] };
}
}
@@ -1,6 +1,5 @@
/** Angular Imports */
import { Component, OnInit, Input } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { Component, Input } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
/** Custom Components */
@@ -120,7 +120,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Remarks</mat-label>
<textarea matInput formControlName="remarks"></textarea>
<textarea matInput formControlName="remarks" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -162,7 +162,7 @@
</div>
<div fxFlexFill *ngIf="clientTemplate.isAddressEnabled && client.address.length" fxLayout="row wrap" fxLayout.lt-md="column">
<div fxFlexFill *ngIf="clientTemplate.isAddressEnabled && client.address && client.address.length" fxLayout="row wrap" fxLayout.lt-md="column">
<h3 class="mat-h3" fxFlexFill>Address</h3>
@@ -175,7 +175,7 @@
<mat-expansion-panel-header>
<mat-panel-title>
{{ getSelectedValue('addressTypeIdOptions',address.addressTypeId)?.name }}
{{ getSelectedValue('addressTypeIdOptions', address.addressTypeId)?.name }}
</mat-panel-title>
<mat-panel-description>
@@ -211,7 +211,7 @@
<div fxLayout="row" class="margin-t" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="2%">
<button mat-raised-button matStepperPrevious>
<fa-icon icon="arrow-left"></fa-icon>&nbsp;&nbsp;
<fa-icon icon="arrow-left" class="m-r-10"></fa-icon>
Previous
</button>
<button mat-raised-button [routerLink]="['../']">
@@ -15,7 +15,7 @@
<mat-form-field fxFlex>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</mat-card-content>
@@ -15,7 +15,7 @@
<mat-form-field fxFlex>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</mat-card-content>
@@ -50,7 +50,7 @@ export class TakeSurveyComponent {
private authenticationService: AuthenticationService) {
this.route.data.subscribe((data: { clientActionData: any }) => {
this.allSurveyData = data.clientActionData;
this.clientId = this.route.parent.parent.snapshot.paramMap.get('clientId');
this.clientId = this.route.parent.snapshot.params['clientId'];
});
/** Retrieves User ID */
const savedCredentials = this.authenticationService.getCredentials();
@@ -102,22 +102,15 @@ export class TakeSurveyComponent {
*/
submit() {
this.formData = {
userId: 0,
clientId: 0,
surveyId: 0,
userId: this.userId,
clientId: this.clientId,
surveyId: this.surveyData.id,
surveyName: '',
username: '',
id: 0,
scorecardValues: []
};
this.formData.userId = this.userId;
this.formData.clientId = this.clientId;
this.formData.surveyId = this.surveyData.id;
this.formData.surveyName = '';
this.formData.username = '';
this.formData.id = 0;
this.surveyData.questionDatas.forEach((elem: any) => {
if (elem.answer) {
const tmp = {
@@ -129,8 +122,9 @@ export class TakeSurveyComponent {
this.formData.scorecardValues.push(tmp);
}
});
this.clientsService.createNewSurvey(this.surveyData.id, this.formData).subscribe(() => {
this.router.navigate(['../'], { relativeTo: this.route });
this.router.navigate(['../../general'], { relativeTo: this.route });
});
}
@@ -32,7 +32,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -15,7 +15,7 @@
<mat-form-field fxFlex>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</mat-card-content>
@@ -20,23 +20,23 @@
<table mat-table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="surveyName">
<th mat-header-cell *matHeaderCellDef mat-sort-header='surveyName'> Survey </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header="surveyName"> Survey </th>
<td mat-cell *matCellDef="let survey"> {{ survey.surveyName }} </td>
</ng-container>
<ng-container matColumnDef="createdBy">
<th mat-header-cell *matHeaderCellDef mat-sort-header='createdBy'> Created By </th>
<th mat-header-cell *matHeaderCellDef mat-sort-header="createdBy"> Created By </th>
<td mat-cell *matCellDef="let survey"> {{ survey.createdBy }} </td>
</ng-container>
<ng-container matColumnDef="date">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Date </th>
<td mat-cell *matCellDef="let survey"> {{ survey.date | dateFormat }} </td>
<th mat-header-cell *matHeaderCellDef mat-sort-header> DateTime </th>
<td mat-cell *matCellDef="let survey"> {{ survey.date | datetimeFormat }} </td>
</ng-container>
<ng-container matColumnDef="score">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Score </th>
<td mat-cell *matCellDef="let survey"> {{ survey.score }} </td>
<td mat-cell *matCellDef="let survey"> {{ survey.score | number }} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
@@ -10,13 +10,16 @@
[src]="(clientImage)?clientImage:'assets/images/user_placeholder.png'">
</div>
<div fxLayoutAlign="center center" class="m-b-5">
<button class="client-image-button" mat-raised-button (click)="doAction('Upload Image')" matTooltip="Upload Image" *mifosxHasPermission="'CREATE_CLIENTIMAGE'">
<button class="client-image-button" mat-raised-button (click)="doAction('Upload Image')"
matTooltip="Upload Image" *mifosxHasPermission="'CREATE_CLIENTIMAGE'">
<i class="fa fa-upload"></i>
</button>
<button class="client-image-button" mat-raised-button (click)="doAction('Capture Image')" matTooltip="Capture Image" *mifosxHasPermission="'CREATE_CLIENTIMAGE'">
<button class="client-image-button" mat-raised-button (click)="doAction('Capture Image')"
matTooltip="Capture Image" *mifosxHasPermission="'CREATE_CLIENTIMAGE'">
<i class="fa fa-camera"></i>
</button>
<button class="client-image-button" mat-raised-button (click)="doAction('Delete Image')" matTooltip="Delete Image" *mifosxHasPermission="'DELETE_CLIENTIMAGE'">
<button class="client-image-button" mat-raised-button (click)="doAction('Delete Image')"
matTooltip="Delete Image" *mifosxHasPermission="'DELETE_CLIENTIMAGE'">
<i class="fa fa-trash"></i>
</button>
<br>
@@ -26,11 +29,19 @@
<div class="mat-typography client-card-title">
<mat-card-title>
<h3>
<i class="fa fa-stop" [ngClass]="clientViewData.status.code|statusLookup" [matTooltip]="clientViewData.status.value"></i>
<mat-card-title fxLayout="row wrap" class="content">
<h3 fxFlex="95%">
<i class="fa fa-stop" [ngClass]="clientViewData.status.code|statusLookup"
[matTooltip]="clientViewData.status.value"></i>
<b>Client Name :</b> {{clientViewData.displayName}}
</h3>
<div fxFlex="5%">
<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>
@@ -38,81 +49,123 @@
<b>Office :</b> {{clientViewData.officeName}}<br />
<b>Client :</b> {{clientViewData.accountNo}}<br />
<b>External Id:</b> {{clientViewData.externalId}}<br />
<span *ngIf="clientViewData.staffName"><b>Staff :</b> {{clientViewData.staffName || 'Unassigned'}}<br /></span>
<span *ngIf="clientViewData.activationDate"><b>Activation Date :</b> {{clientViewData.activationDate | dateFormat}}<br /></span>
<span *ngIf="clientViewData.staffName"><b>Staff :</b> {{clientViewData.staffName ||
'Unassigned'}}<br /></span>
<span *ngIf="clientViewData.activationDate"><b>Activation Date :</b> {{clientViewData.activationDate |
dateFormat}}<br /></span>
<span *ngIf="clientViewData.groups.length > 0">
Member Of :
<span *ngFor="let group of clientViewData.groups">
<a>{{group.name}}</a>&nbsp;
</span>
</span>
<br/>
<br />
</p>
</mat-card-subtitle>
</div>
</mat-card-title-group>
<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>Edit</span>
</button>
<mat-card-actions class="client-actions">
<button mat-menu-item [matMenuTriggerFor]="accountApplications">
<mat-icon matListIcon>
<fa-icon icon="money-bill-alt" size="sm"></fa-icon>
</mat-icon>
<span>Applications</span>
</button>
<span *mifosxHasPermission="'UPDATE_CLIENT'">
<button mat-raised-button [routerLink]="['edit']">
<i class="fa fa-edit"></i>Edit</button>
</span>
<button mat-menu-item [matMenuTriggerFor]="Actions">
<mat-icon matListIcon>
<fa-icon icon="tasks" size="sm"></fa-icon>
</mat-icon>
<span>Actions</span>
</button>
<button mat-menu-item (click)="doAction('Assign Staff')" *ngIf="!clientViewData.staffId">
<mat-icon matListIcon>
<fa-icon icon="user-tie" size="sm"></fa-icon>
</mat-icon>
<span>Assign Staff</span>
</button>
<span *ngIf="clientViewData.staffId">
<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>Unassign Staff</span>
</button>
</span>
<button mat-menu-item [matMenuTriggerFor]="More">More</button>
<button mat-raised-button [matMenuTriggerFor]="Applications">
<i class="fa fa-file"></i>Applications</button>
<mat-menu #Applications="matMenu">
<button mat-menu-item [routerLink]="['loans-accounts', 'create']">New Loan Account</button>
<button mat-menu-item [routerLink]="['savings-accounts', 'create']">New Savings Account</button>
<button mat-menu-item *mifosxHasPermission="'CREATE_SHAREACCOUNT'" [routerLink]="['shares-accounts', 'create']">New Share Account</button>
<button mat-menu-item *mifosxHasPermission="'CREATE_RECURRINGDEPOSITACCOUNT'" [routerLink]="['recurringdeposits', 'create-recurring-deposits-account']">New Recurring Deposit Account</button>
<button mat-menu-item *mifosxHasPermission="'CREATE_FIXEDDEPOSITACCOUNT'" [routerLink]="['fixed-deposits-accounts', 'create']">New Fixed Deposits Account</button>
</mat-menu>
<button mat-raised-button [matMenuTriggerFor]="Actions">
<i class="fa fa-tasks"></i>Actions</button>
<mat-menu #accountApplications="matMenu">
<button mat-menu-item *mifosxHasPermission="'CREATE_LOANACCOUNT'"
[routerLink]="['loans-accounts', 'create']">New Loan Account</button>
<button mat-menu-item *mifosxHasPermission="'CREATE_SAVINGSACCOUNT'"
[routerLink]="['savings-accounts', 'create']">New Savings Account</button>
<button mat-menu-item *mifosxHasPermission="'CREATE_SHAREACCOUNT'"
[routerLink]="['shares-accounts', 'create']">New Share Account</button>
<button mat-menu-item *mifosxHasPermission="'CREATE_RECURRINGDEPOSITACCOUNT'"
[routerLink]="['recurringdeposits', 'create-recurring-deposits-account']">New Recurring Deposit
Account</button>
<button mat-menu-item *mifosxHasPermission="'CREATE_FIXEDDEPOSITACCOUNT'"
[routerLink]="['fixed-deposits-accounts', 'create']">New Fixed Deposits Account</button>
</mat-menu>
<mat-menu #Actions="matMenu">
<button mat-menu-item (click)="doAction('Close')">Close</button>
<button mat-menu-item (click)="doAction('Transfer Client')">Transfer Client</button>
<span *ngIf="clientViewData.status.value === 'Pending'"><button mat-menu-item (click)="doAction('Activate')">Activate</button></span>
<span *ngIf="clientViewData.status.value === 'Pending'"><button mat-menu-item (click)="doAction('Withdraw')">Withdraw</button></span>
<span *ngIf="clientViewData.status.value === 'Pending'"><button mat-menu-item (click)="doAction('Reject')">Reject</button></span>
<span *ngIf="clientViewData.status.value === 'Pending'"><button mat-menu-item *mifosxHasPermission="'DELETE_CLIENT'" (click)="doAction('Delete')">Delete</button></span>
<span *ngIf="clientViewData.status.value === 'Closed'"><button mat-menu-item (click)="doAction('Reactivate')">Reactivate</button></span>
<span *ngIf="clientViewData.status.value === 'Rejected'"><button mat-menu-item (click)="doAction('Undo Rejection')">Undo Rejection</button></span>
<span *ngIf="clientViewData.status.value === 'Transfer in progress'"><button mat-menu-item (click)="doAction('Undo Transfer')">Undo Transfer</button></span>
<span *ngIf="clientViewData.status.value === 'Transfer in progress'"><button mat-menu-item (click)="doAction('Accept Transfer')">Accept Transfer</button></span>
<span *ngIf="clientViewData.status.value === 'Transfer in progress'"><button mat-menu-item (click)="doAction('Reject Transfer')">Reject transfer</button></span>
<span *ngIf="clientViewData.status.value === 'Pending'"><button mat-menu-item
(click)="doAction('Activate')">Activate</button></span>
<span *ngIf="clientViewData.status.value === 'Pending'"><button mat-menu-item
(click)="doAction('Withdraw')">Withdraw</button></span>
<span *ngIf="clientViewData.status.value === 'Pending'"><button mat-menu-item
(click)="doAction('Reject')">Reject</button></span>
<span *ngIf="clientViewData.status.value === 'Pending'"><button mat-menu-item
*mifosxHasPermission="'DELETE_CLIENT'" (click)="doAction('Delete')">Delete</button></span>
<span *ngIf="clientViewData.status.value === 'Closed'"><button mat-menu-item
(click)="doAction('Reactivate')">Reactivate</button></span>
<span *ngIf="clientViewData.status.value === 'Rejected'"><button mat-menu-item
(click)="doAction('Undo Rejection')">Undo Rejection</button></span>
<span *ngIf="clientViewData.status.value === 'Transfer in progress'"><button mat-menu-item
(click)="doAction('Undo Transfer')">Undo Transfer</button></span>
<span *ngIf="clientViewData.status.value === 'Transfer in progress'"><button mat-menu-item
(click)="doAction('Accept Transfer')">Accept Transfer</button></span>
<span *ngIf="clientViewData.status.value === 'Transfer in progress'"><button mat-menu-item
(click)="doAction('Reject Transfer')">Reject transfer</button></span>
</mat-menu>
<span *ngIf="!clientViewData.staffId">
<button mat-raised-button (click)="doAction('Assign Staff')">
<i class="fa fa-user"></i>Assign Staff</button>
</span>
<span *ngIf="clientViewData.staffId">
<button mat-raised-button *mifosxHasPermission="'UNASSIGNSTAFF_CLIENT'" (click)="doAction('Unassign Staff')">
<i class="fa fa-user"></i>Unassign Staff</button>
</span>
<button mat-raised-button [matMenuTriggerFor]="More">More</button>
<mat-menu #More="matMenu">
<button mat-menu-item (click)="doAction('Add Charge')" *mifosxHasPermission="'CREATE_CLIENTCHARGE'"> Add Charge </button>
<button mat-menu-item (click)="doAction('Add Charge')" *mifosxHasPermission="'CREATE_CLIENTCHARGE'"> Add Charge
</button>
<button mat-menu-item (click)="doAction('Create Collateral')">Create Collateral</button>
<button mat-menu-item (click)="doAction('Survey')">Survey</button>
<button mat-menu-item (click)="doAction('Update Default Savings')" *mifosxHasPermission="'UPDATESAVINGSACCOUNT_CLIENT'"> Update Default Savings </button>
<button mat-menu-item (click)="doAction('Upload Signature')" *mifosxHasPermission="'CREATE_CLIENTIMAGE'"> Upload Signature </button>
<button mat-menu-item (click)="doAction('Delete Signature')" *mifosxHasPermission="'DELETE_CLIENTIMAGE'"> Delete Signature </button>
<button mat-menu-item (click)="doAction('Update Default Savings')"
*mifosxHasPermission="'UPDATESAVINGSACCOUNT_CLIENT'"> Update Default Savings </button>
<button mat-menu-item (click)="doAction('Upload Signature')" *mifosxHasPermission="'CREATE_CLIENTIMAGE'"> Upload
Signature </button>
<button mat-menu-item (click)="doAction('Delete Signature')" *mifosxHasPermission="'DELETE_CLIENTIMAGE'"> Delete
Signature </button>
<button mat-menu-item (click)="doAction('Client Screen Reports')"> Client Screen Reports </button>
<button mat-menu-item (click)="doAction('Create Standing Instructions')" *mifosxHasPermission="'READ_STANDINGINSTRUCTION'">Create Standing Instructions</button>
<button mat-menu-item (click)="doAction('Create Standing Instructions')"
*mifosxHasPermission="'READ_STANDINGINSTRUCTION'">Create Standing Instructions</button>
<span *ngIf="clientViewData.status.value!='Transfer on hold'">
<button mat-menu-item (click)="doAction('View Standing Instructions')" *mifosxHasPermission="'CREATE_STANDINGINSTRUCTION'">View Standing Instructions</button>
<button mat-menu-item (click)="doAction('View Standing Instructions')"
*mifosxHasPermission="'CREATE_STANDINGINSTRUCTION'">View Standing Instructions</button>
</span>
<button mat-menu-item (click)="doAction('Create Self Service User')">Create Self Service User</button>
</mat-menu>
</mat-card-actions>
</mat-card-title-group>
</mat-card-header>
@@ -138,13 +191,14 @@
[active]="documents.isActive" *mifosxHasPermission="'READ_DOCUMENT'">
Documents
</a>
<a mat-tab-link [routerLink]="['./notes']" routerLinkActive #notes="routerLinkActive"
[active]="notes.isActive" *mifosxHasPermission="'READ_CLIENTNOTE'">
<a mat-tab-link [routerLink]="['./notes']" routerLinkActive #notes="routerLinkActive" [active]="notes.isActive"
*mifosxHasPermission="'READ_CLIENTNOTE'">
Notes
</a>
<ng-container *ngFor="let clientDatatable of clientDatatables">
<a mat-tab-link [routerLink]="['./datatables',clientDatatable.registeredTableName]"
routerLinkActive #datatable="routerLinkActive" [active]="datatable.isActive" *mifosxHasPermission="'READ_' + clientDatatable.registeredTableName">
<a mat-tab-link [routerLink]="['./datatables',clientDatatable.registeredTableName]" routerLinkActive
#datatable="routerLinkActive" [active]="datatable.isActive"
*mifosxHasPermission="'READ_' + clientDatatable.registeredTableName">
{{clientDatatable.registeredTableName}}
</a>
</ng-container>
@@ -7,7 +7,6 @@
padding: 1%;
.header-title-group {
.client-card-title {
margin-top: 1.4rem;
color: white;
width: 90%;
p {
@@ -16,7 +15,7 @@
}
}
.profile-image-container {
margin: 1%;
margin: 4px;
.profile-image {
object-fit: cover;
border-radius: 20px;
@@ -34,7 +34,7 @@
<ng-template matStepLabel>FAMILY MEMBERS</ng-template>
<mifosx-client-family-members-step [clientTemplate]="clientTemplate"></mifosx-client-family-members-step>
<mifosx-client-family-members-step #clientFamily [clientTemplate]="clientTemplate"></mifosx-client-family-members-step>
</mat-step>
@@ -42,10 +42,8 @@
<ng-template matStepLabel>ADDRESS</ng-template>
<mifosx-client-address-step
[clientTemplate]="clientTemplate"
[clientAddressFieldConfig]="clientAddressFieldConfig"
>
<mifosx-client-address-step #clientAddress [clientTemplate]="clientTemplate"
[clientAddressFieldConfig]="clientAddressFieldConfig">
</mifosx-client-address-step>
</mat-step>
@@ -27,9 +27,9 @@ export class CreateClientComponent {
/** Client General Step */
@ViewChild(ClientGeneralStepComponent, { static: true }) clientGeneralStep: ClientGeneralStepComponent;
/** Client Family Members Step */
@ViewChild(ClientFamilyMembersStepComponent, { static: true }) clientFamilyMembersStep: ClientFamilyMembersStepComponent;
@ViewChild('clientFamily') clientFamilyMembersStep: ClientFamilyMembersStepComponent;
/** Client Address Step */
@ViewChild(ClientAddressStepComponent, { static: true }) clientAddressStep: ClientAddressStepComponent;
@ViewChild('clientAddress') clientAddressStep: ClientAddressStepComponent;
/** Get handle on dtclient tags in the template */
@ViewChildren('dtclient') clientDatatables: QueryList<ClientDatatableStepComponent>;
@@ -124,7 +124,6 @@ export class CreateClientComponent {
submit() {
const locale = this.settingsService.language.code;
const dateFormat = this.settingsService.dateFormat;
// TODO: Update once language and date settings are setup
const clientData = {
...this.client,
dateFormat,
@@ -114,7 +114,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Remarks</mat-label>
<textarea matInput formControlName="remarks"></textarea>
<textarea matInput formControlName="remarks" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -20,7 +20,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -54,7 +54,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -54,7 +54,7 @@
<mat-form-field *ngIf="prematureCloseAccountForm.contains('note')">
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -20,7 +20,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -8,7 +8,7 @@
<mat-form-field fxFlex>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</mat-card-content>
@@ -20,7 +20,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -21,7 +21,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -95,7 +95,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -80,7 +80,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -21,7 +21,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -37,4 +37,4 @@
</mat-card>
</div>
</div>
@@ -8,7 +8,7 @@
<mat-form-field fxFlex>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</mat-card-content>
@@ -21,7 +21,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -29,19 +29,19 @@
<mat-form-field>
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!collateralForm.valid"
*mifosxHasPermission="'CREATE_COLLATERAL'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!collateralForm.valid"
*mifosxHasPermission="'CREATE_COLLATERAL'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -50,13 +50,13 @@
</div>
</mat-card-content>
<mat-card-actions fxLayoutGap="5px" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!loanChargeForm.valid"
*mifosxHasPermission="'CREATE_LOANCHARGE'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayoutGap="5px" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!loanChargeForm.valid"
*mifosxHasPermission="'CREATE_LOANCHARGE'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -42,18 +42,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!approveLoanForm.valid"
*mifosxHasPermission="'APPROVE_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!approveLoanForm.valid"
*mifosxHasPermission="'APPROVE_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -33,13 +33,13 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!assignOfficerForm.valid"
*mifosxHasPermission="'BULKREASSIGN_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!assignOfficerForm.valid"
*mifosxHasPermission="'BULKREASSIGN_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -21,18 +21,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!closeLoanForm.valid"
*mifosxHasPermission="'CLOSEASRESCHEDULED_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!closeLoanForm.valid"
*mifosxHasPermission="'CLOSEASRESCHEDULED_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -126,13 +126,13 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!newGuarantorForm.valid"
*mifosxHasPermission="'CREATE_GUARANTOR'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!newGuarantorForm.valid"
*mifosxHasPermission="'CREATE_GUARANTOR'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -37,18 +37,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!disbursementForm.valid"
*mifosxHasPermission="'DISBURSETOSAVINGS_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!disbursementForm.valid"
*mifosxHasPermission="'DISBURSETOSAVINGS_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -42,14 +42,12 @@
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandcollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle [(ngModel)]="showPaymentDetails">
<div [className]="showPaymentDetails ? 'enabled' : 'disabled'">
<span class="m-l-10">Show Payment Details</span>
</div>
</mat-slide-toggle>
</span>
</div>
@@ -82,18 +80,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!disbursementLoanForm.valid"
*mifosxHasPermission="'DISBURSE_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!disbursementLoanForm.valid"
*mifosxHasPermission="'DISBURSE_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -0,0 +1,14 @@
<div class="container mat-elevation-z8">
<mat-card>
<mat-card-content>
<mifosx-loans-account-schedule-step></mifosx-loans-account-schedule-step>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
</mat-card-actions>
</mat-card-content>
</mat-card>
</div>
@@ -0,0 +1,25 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { EditRepaymentScheduleComponent } from './edit-repayment-schedule.component';
describe('EditRepaymentScheduleComponent', () => {
let component: EditRepaymentScheduleComponent;
let fixture: ComponentFixture<EditRepaymentScheduleComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ EditRepaymentScheduleComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(EditRepaymentScheduleComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'mifosx-edit-repayment-schedule',
templateUrl: './edit-repayment-schedule.component.html',
styleUrls: ['./edit-repayment-schedule.component.scss']
})
export class EditRepaymentScheduleComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
}
@@ -46,18 +46,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!foreclosureForm.valid"
*mifosxHasPermission="'FORECLOSURE_LOAN'">Foreclosure</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!foreclosureForm.valid"
*mifosxHasPermission="'FORECLOSURE_LOAN'">Foreclosure</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -20,7 +20,8 @@
<mifosx-disburse [dataObject]="actionButtonData" *ngIf="actions['Disburse']"></mifosx-disburse>
<mifosx-withdrawn-by-client *ngIf="actions['Withdrawn by Client']"></mifosx-withdrawn-by-client>
<mifosx-add-collateral [dataObject]="actionButtonData" *ngIf="actions['Add Collateral']"></mifosx-add-collateral>
<mifosx-undo-disbursal *ngIf="actions['Undo Disbursal']"></mifosx-undo-disbursal>
<mifosx-undo-disbursal *ngIf="actions['Undo Disbursal'] || actions['Undo Last Disbursal']" [actionName]="actionName"></mifosx-undo-disbursal>
<mifosx-loan-screen-reports [dataObject]="actionButtonData" *ngIf="actions['Loan Screen Reports']"></mifosx-loan-screen-reports>
<mifosx-approve-loan *ngIf="actions['Approve']" ></mifosx-approve-loan>
<mifosx-add-loan-charge *ngIf="actions['Add Loan Charge']"></mifosx-add-loan-charge>
<mifosx-edit-repayment-schedule *ngIf="actions['Edit Repayment Schedule']"></mifosx-edit-repayment-schedule>
@@ -32,6 +32,7 @@ export class LoanAccountActionsComponent {
'Disburse': boolean,
'Withdrawn by Client': boolean,
'Undo Disbursal': boolean,
'Undo Last Disbursal': boolean,
'Loan Screen Reports': boolean,
'Approve': boolean,
'Add Loan Charge': boolean,
@@ -59,6 +60,7 @@ export class LoanAccountActionsComponent {
'Disburse': false,
'Withdrawn by Client': false,
'Undo Disbursal': false,
'Undo Last Disbursal': false,
'Loan Screen Reports': false,
'Approve': false,
'Add Loan Charge': false,
@@ -34,18 +34,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!creditBalanceLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!creditBalanceLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -92,13 +92,13 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!rescheduleLoanForm.valid"
*mifosxHasPermission="'APPROVE_RESCHEDULELOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!rescheduleLoanForm.valid"
*mifosxHasPermission="'APPROVE_RESCHEDULELOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -22,14 +22,14 @@
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!loanScreenReportForm.valid">
<fa-icon icon="cogs" size="sm"></fa-icon>&nbsp;&nbsp;Generate Report
</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!loanScreenReportForm.valid">
<fa-icon icon="cogs" size="sm"></fa-icon>&nbsp;&nbsp;Generate Report
</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -21,18 +21,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!closeLoanForm.valid"
*mifosxHasPermission="'CLOSE_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!closeLoanForm.valid"
*mifosxHasPermission="'CLOSE_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -42,14 +42,12 @@
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandcollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle [(ngModel)]="showPaymentDetails">
<div [className]="showPaymentDetails ? 'enabled' : 'disabled'">
<span class="m-l-10">Show Payment Details</span>
</div>
</mat-slide-toggle>
</span>
</div>
@@ -82,18 +80,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!repaymentLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!repaymentLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -55,14 +55,12 @@
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandcollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle [(ngModel)]="showPaymentDetails">
<div [className]="showPaymentDetails ? 'enabled' : 'disabled'">
<span class="m-l-10">Show Payment Details</span>
</div>
</mat-slide-toggle>
</span>
</div>
@@ -95,18 +93,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!prepayLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!prepayLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -37,14 +37,12 @@
</mat-form-field>
<div fxFlexFill>
<span fxFlex="25%">Show Payment Details</span>
<span fxFlex="75%" class="expandcollapsebutton" (click)="addPaymentDetails()">
<button mat-raised-button color="primary" *ngIf="showPaymentDetails">
<i class="fa fa-minus"></i>
</button>
<button mat-raised-button color="primary" *ngIf="!showPaymentDetails">
<i class="fa fa-plus"></i>
</button>
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle [(ngModel)]="showPaymentDetails">
<div [className]="showPaymentDetails ? 'enabled' : 'disabled'">
<span class="m-l-10">Show Payment Details</span>
</div>
</mat-slide-toggle>
</span>
</div>
@@ -77,18 +75,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!recoveryRepaymentLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!recoveryRepaymentLoanForm.valid"
*mifosxHasPermission="'REPAYMENT_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -21,18 +21,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!rejectLoanForm.valid"
*mifosxHasPermission="'REJECT_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!rejectLoanForm.valid"
*mifosxHasPermission="'REJECT_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -9,13 +9,13 @@
<textarea matInput [formControl]="note"></textarea>
</mat-form-field>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'APPROVALUNDO_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'APPROVALUNDO_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</mat-card>
@@ -6,16 +6,16 @@
<mat-form-field fxFlex>
<mat-label>Note</mat-label>
<textarea matInput [formControl]="note"></textarea>
<textarea matInput [formControl]="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'DISBURSALUNDO_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'DISBURSALUNDO_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</mat-card>
@@ -1,5 +1,5 @@
/** Angular Imports */
import { Component, OnInit } from '@angular/core';
import { Component, Input, OnInit } from '@angular/core';
import { FormControl, FormBuilder } from '@angular/forms';
import { Router, ActivatedRoute } from '@angular/router';
@@ -16,6 +16,8 @@ import { LoansService } from '../../../loans.service';
})
export class UndoDisbursalComponent implements OnInit {
@Input() actionName: string;
/** Loan ID. */
loanId: any;
/** Undo disbursal form. */
@@ -45,7 +47,11 @@ export class UndoDisbursalComponent implements OnInit {
* Submits the undo disbursal form.
*/
submit() {
this.loansService.loanActionButtons(this.loanId, 'undodisbursal', {'note': this.note.value}).subscribe((response: any) => {
let command = 'undodisbursal';
if (this.actionName === 'Undo Last Disbursal') {
command = 'undolastdisbursal';
}
this.loansService.loanActionButtons(this.loanId, command, {'note': this.note.value}).subscribe((response: any) => {
this.router.navigate(['../../general'], { relativeTo: this.route });
});
}
@@ -29,18 +29,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!loanInterestForm.valid"
*mifosxHasPermission="'WAIVEINTERESTPORTION_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!loanInterestForm.valid"
*mifosxHasPermission="'WAIVEINTERESTPORTION_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -21,18 +21,18 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!withdrawnByClientLoanForm.valid"
*mifosxHasPermission="'WITHDRAW_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../../general']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!withdrawnByClientLoanForm.valid"
*mifosxHasPermission="'WITHDRAW_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</form>
@@ -26,20 +26,20 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
</form>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'WRITEOFF_LOAN'">Submit</button>
</mat-card-actions>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../general']">Cancel</button>
<button mat-raised-button color="primary" (click)="submit()"
*mifosxHasPermission="'WRITEOFF_LOAN'">Submit</button>
</mat-card-actions>
</mat-card-content>
</mat-card>
@@ -40,22 +40,22 @@ export class LoansAccountButtonConfiguration {
this.buttonsArray = [
{
name: 'Add Loan Charge',
icon: 'fa fa-plus',
icon: 'plus',
taskPermissionName: 'CREATE_LOANCHARGE',
},
{
name: 'Foreclosure',
icon: 'icon-dollar',
icon: 'heart-broken',
taskPermissionName: 'FORECLOSURE_LOAN',
},
{
name: 'Make Repayment',
icon: 'fa fa-dollar',
icon: 'coins',
taskPermissionName: 'REPAYMENT_LOAN',
},
{
name: 'Undo Disbursal',
icon: 'fa fa-undo',
icon: 'undo',
taskPermissionName: 'DISBURSALUNDO_LOAN',
}
];
@@ -64,22 +64,22 @@ export class LoansAccountButtonConfiguration {
this.buttonsArray = [
{
name: 'Add Loan Charge',
icon: 'fa fa-plus',
icon: 'plus',
taskPermissionName: 'CREATE_LOANCHARGE',
},
{
name: 'Approve',
icon: 'fa fa-check',
icon: 'check',
taskPermissionName: 'APPROVE_LOAN',
},
{
name: 'Modify Application',
icon: 'fa fa-pincel-square-o',
icon: 'edit',
taskPermissionName: 'UPDATE_LOAN',
},
{
name: 'Reject',
icon: 'fa fa-times',
icon: 'times',
taskPermissionName: 'REJECT_LOAN',
},
];
@@ -88,17 +88,17 @@ export class LoansAccountButtonConfiguration {
this.buttonsArray = [
{
name: 'Disburse',
icon: 'fa fa-flag',
icon: 'hand-holding-usd',
taskPermissionName: 'DISBURSE_LOAN',
},
{
name: 'Disburse to Savings',
icon: 'fa fa-flag',
icon: 'piggy-bank',
taskPermissionName: 'DISBURSETOSAVINGS_LOAN',
},
{
name: 'Undo Approval',
icon: 'fa fa-undo',
icon: 'undo',
taskPermissionName: 'APPROVALUNDO_LOAN',
},
];
@@ -107,12 +107,12 @@ export class LoansAccountButtonConfiguration {
this.buttonsArray = [
{
name: 'Transfer Funds',
icon: 'fa fa-exchange',
icon: 'exchange',
taskPermissionName: 'CREATE_ACCOUNTTRANSFER',
},
{
name: 'Credit Balance Refund',
icon: 'fa fa-dollar',
icon: 'coins',
taskPermissionName: 'CREATE_CREDIT_BALANCE_REFUND',
}
];
@@ -121,7 +121,7 @@ export class LoansAccountButtonConfiguration {
this.buttonsArray = [
{
name: 'Recovery Payment',
icon: 'fa fa-briefcase',
icon: 'briefcase',
taskPermissionName: 'RECOVERYPAYMENT_LOAN',
},
];
@@ -130,17 +130,17 @@ export class LoansAccountButtonConfiguration {
this.buttonsArray = [
{
name: 'Goodwill Credit',
icon: 'fa fa-dollar',
icon: 'coins',
taskPermissionName: 'CREATE_GOODWILL_TRANSACTION',
},
{
name: 'Payout Refund',
icon: 'fa fa-dollar',
icon: 'coins',
taskPermissionName: 'CREATE_PAYOUT_REFUND',
},
{
name: 'Merchant Issued Refund',
icon: 'fa fa-dollar',
icon: 'coins',
taskPermissionName: 'CREATE_MERCHANT_ISSUED_REFUND',
}
];
@@ -15,72 +15,87 @@
<mat-card-title>
<div fxLayout="row" fxLayout.lt-md="column">
<div fxFlex="50%">
<div fxFlex="60%">
<h3>
<i class="fa fa-stop" matTooltip="{{ loanDetailsData.status.value }}"
[ngClass]="loanDetailsData.inArrears?'status-active-overdue':(loanDetailsData.status.code|statusLookup)"></i>
Loan Product: {{loanDetailsData.loanProductName}}(#{{loanDetailsData.accountNo}})
<br />
<span *ngIf="loanDetailsData.clientName"> Client Name: {{loanDetailsData.clientName}} </span> <br />
<span *ngIf="loanDetailsData.group"> Group Name: {{loanDetailsData.group.name}} </span>
<span *ngIf="loanDetailsData.delinquencyRange">
Loan Account Classification : {{loanDetailsData?.delinquencyRange.classification}}
</span> <br />
<span class="loans-overview" *ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.pastDueDays > 0">
Past Due Days : {{loanDetailsData?.delinquent.pastDueDays | number}}
</span> <br />
<span class="loans-overview" *ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.delinquentDays > 0
&& loanDetailsData.delinquent.pastDueDays != loanDetailsData.delinquent.delinquentDays">
Delinquent Days : {{loanDetailsData?.delinquent.delinquentDays | number}}
</span>
Loan Product: {{loanDetailsData.loanProductName}}<span class="m-l-10">({{loanDetailsData.accountNo}})</span>
</h3>
<span class="loans-overview">
{{entityType}} Name: {{loanDetailsData.clientName ||
loanDetailsData.groupName}}<span class="m-l-10">({{loanDetailsData.clientAccountNo}})</span><br />
</span>
<span class="loans-overview" *ngIf="loanDetailsData.delinquencyRange">
Loan Account Classification : {{loanDetailsData?.delinquencyRange.classification}}<br />
</span>
<span class="loans-overview"
*ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.pastDueDays > 0">
Past Due Days : {{loanDetailsData?.delinquent.pastDueDays | number}}<br />
</span>
<span class="loans-overview" *ngIf="loanDetailsData.delinquent && loanDetailsData.delinquent.delinquentDays > 0
&& loanDetailsData.delinquent.pastDueDays != loanDetailsData.delinquent.delinquentDays">
Delinquent Days : {{loanDetailsData?.delinquent.delinquentDays | number}}
</span>
</div>
<div *ngIf="loanDetailsData.summary" class="loans-overview mat-typography" fxFlex="50%">
<div *ngIf="loanDetailsData.summary" class="loans-overview mat-typography" fxFlex="40%">
<h3> Loan Account OverView </h3>
<span>Current Balance: {{loanDetailsData.currency.displaySymbol}}
{{loanDetailsData.summary.totalOutstanding | number}}</span><br>
<span *ngIf="loanDetailsData.inArrears">Arrears By: {{loanDetailsData.summary.totalOverdue | number}}
<span *ngIf="!(loanDetailsData.summary.totalOverdue>=0)">Not Provided</span>
</span><br>
<span *ngIf="loanDetailsData.inArrears">Arrears Since: {{loanDetailsData.summary.overdueSinceDate | dateFormat}}
</span><br>
<span *ngIf="loanDetailsData.inArrears">Arrears Since: {{loanDetailsData.summary.overdueSinceDate |
dateFormat}}
</span>
</div>
<div fxFlex="4%">
<button mat-icon-button [matMenuTriggerFor]="accountMenu" aria-label="Loan account actions"
yPosition="below">
<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> {{item.name}} </span>
</button>
</ng-container>
<ng-container *ngIf="buttonConfig.optionsPayment.length" class="loan-span">
<button mat-menu-item [matMenuTriggerFor]="Payments">Payments</button>
<mat-menu #Payments="matMenu">
<span *ngFor="let item of buttonConfig.optionsPayment">
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName"
(click)="loanAction(item.name)">{{item.name}}</button>
</span>
</mat-menu>
</ng-container>
<ng-container *ngIf="buttonConfig.options.length" class="loan-span">
<button mat-menu-item [matMenuTriggerFor]="More">More</button>
<mat-menu #More="matMenu">
<span *ngFor="let item of buttonConfig.options">
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName"
(click)="loanAction(item.name)">{{item.name}}</button>
</span>
</mat-menu>
</ng-container>
</mat-menu>
</mat-card-title-group>
<mat-card-actions class="loan-actions">
<ng-container *ngFor="let item of buttonConfig.singleButtons" class="loan-span">
<button mat-raised-button *mifosxHasPermission="item.taskPermissionName" (click)="loanAction(item.name)">
<i ng-class="{{item.icon}}"></i> {{item.name}} </button>
</ng-container>
<ng-container *ngIf="buttonConfig.optionsPayment.length" class="loan-span">
<button mat-raised-button [matMenuTriggerFor]="Payments">Payments</button>
<mat-menu #Payments="matMenu">
<span *ngFor="let item of buttonConfig.optionsPayment">
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName"
(click)="loanAction(item.name)">{{item.name}}</button>
</span>
</mat-menu>
</ng-container>
<ng-container *ngIf="buttonConfig.options.length" class="loan-span">
<button mat-raised-button [matMenuTriggerFor]="More">More</button>
<mat-menu #More="matMenu">
<span *ngFor="let item of buttonConfig.options">
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName"
(click)="loanAction(item.name)">{{item.name}}</button>
</span>
</mat-menu>
</ng-container>
</mat-card-actions>
</mat-card-header>
<mat-card-content>
@@ -28,12 +28,15 @@ export class LoansViewComponent implements OnInit {
recalculateInterest: any;
/** Status */
status: string;
entityType: string;
/** Loan Id */
loanId: number;
/** Client Id */
clientId: any;
clientId: number;
/** Button Configuration */
buttonConfig: LoansAccountButtonConfiguration;
/** Disburse Transaction number */
disburseTransactionNo = 0;
constructor(private route: ActivatedRoute,
private router: Router,
@@ -51,6 +54,21 @@ export class LoansViewComponent implements OnInit {
this.recalculateInterest = this.loanDetailsData.recalculateInterest || true;
this.status = this.loanDetailsData.status.value;
this.setConditionalButtons();
if (this.loanDetailsData.multiDisburseLoan) {
this.loanDetailsData.transactions.forEach((tranaction: any) => {
if (tranaction.type.disbursement) {
this.disburseTransactionNo++;
}
});
}
if (this.router.url.includes('clients')) {
this.entityType = 'Client';
} else if (this.router.url.includes('groups')) {
this.entityType = 'Group';
} else if (this.router.url.includes('centers')) {
this.entityType = 'Center';
}
}
// Defines the buttons based on the status of the loan account
@@ -61,12 +79,14 @@ export class LoansViewComponent implements OnInit {
this.buttonConfig.addOption({
name: (this.loanDetailsData.loanOfficerName ? 'Change Loan Officer' : 'Assign Loan Officer'),
icon: 'user-tie',
taskPermissionName: 'DISBURSE_LOAN'
});
if (this.loanDetailsData.isVariableInstallmentsAllowed) {
this.buttonConfig.addOption({
name: 'Edit Repayment Schedule',
icon: 'edit',
taskPermissionName: 'ADJUST_REPAYMENT_SCHEDULE'
});
}
@@ -75,7 +95,7 @@ export class LoansViewComponent implements OnInit {
this.buttonConfig.addButton({
name: (this.loanDetailsData.loanOfficerName ? 'Change Loan Officer' : 'Assign Loan Officer'),
icon: 'fa fa-user',
icon: 'user-tie',
taskPermissionName: 'DISBURSE_LOAN'
});
@@ -83,24 +103,30 @@ export class LoansViewComponent implements OnInit {
if (this.loanDetailsData.canDisburse || this.loanDetailsData.multiDisburseLoan) {
this.buttonConfig.addButton({
name: 'Disburse',
icon: 'fa fa-flag',
icon: 'hand-holding-usd',
taskPermissionName: 'DISBURSE_LOAN'
});
}
if (this.loanDetailsData.canDisburse) {
this.buttonConfig.addButton({
name: 'Disburse To Savings',
icon: 'fa fa-flag',
icon: 'piggy-bank',
taskPermissionName: 'DISBURSETOSAVINGS_LOAN'
});
}
if (this.loanDetailsData.multiDisburseLoan && this.disburseTransactionNo > 1) {
this.buttonConfig.addButton({
name: 'Undo Last Disbursal',
icon: 'undo',
taskPermissionName: 'DISBURSALLASTUNDO_LOAN'
});
}
// loan officer not assigned to loan, below logic
// helps to display otherwise not
if (!this.loanDetailsData.loanOfficerName) {
this.buttonConfig.addButton({
name: 'Assign Loan Officer',
icon: 'fa fa-user',
icon: 'user-tie',
taskPermissionName: 'UPDATELOANOFFICER_LOAN'
});
}
@@ -108,7 +134,7 @@ export class LoansViewComponent implements OnInit {
if (this.recalculateInterest) {
this.buttonConfig.addButton({
name: 'Prepay Loan',
icon: 'fa fa-money',
icon: 'coins',
taskPermissionName: 'REPAYMENT_LOAN'
});
}
+3 -1
View File
@@ -73,6 +73,7 @@ import { LoanAccountLoadDocumentsDialogComponent } from './custom-dialog/loan-ac
import { LoanCreditBalanceRefundComponent } from './loans-view/loan-account-actions/loan-credit-balance-refund/loan-credit-balance-refund.component';
import { LoanDelinquencyTagsTabComponent } from './loans-view/loan-delinquency-tags-tab/loan-delinquency-tags-tab.component';
import { LoansAccountScheduleStepComponent } from './loans-account-stepper/loans-account-schedule-step/loans-account-schedule-step.component';
import { EditRepaymentScheduleComponent } from './loans-view/loan-account-actions/edit-repayment-schedule/edit-repayment-schedule.component';
/**
* Loans Module
@@ -144,7 +145,8 @@ import { LoansAccountScheduleStepComponent } from './loans-account-stepper/loans
GlimTermsStepComponent,
GlimPreviewStepComponent,
LoanDelinquencyTagsTabComponent,
LoansAccountScheduleStepComponent
LoansAccountScheduleStepComponent,
EditRepaymentScheduleComponent
],
providers: [ ],
})
@@ -18,9 +18,9 @@
<mat-form-field>
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
<mat-checkbox labelPosition="before" formControlName="isCashPayment" class="status">
Is Cash Payment?
</mat-checkbox>
@@ -32,9 +32,9 @@
Position is <strong>required</strong>
</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
@@ -18,9 +18,9 @@
<mat-form-field>
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
<mat-checkbox labelPosition="before" formControlName="isCashPayment" class="status">
Is Cash Payment?
</mat-checkbox>
@@ -32,9 +32,9 @@
Position is <strong>required</strong>
</mat-error>
</mat-form-field>
</div>
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
@@ -33,7 +33,7 @@
<mat-form-field>
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
<mat-form-field (click)="startDatePicker.open()">
@@ -47,7 +47,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -20,7 +20,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
<mat-error *ngIf="recurringDepositProductDetailsForm.controls.description.hasError('required')">
Description is <strong>required</strong>
</mat-error>
@@ -20,7 +20,7 @@
<mat-form-field fxFlex="98%">
<mat-label>Description</mat-label>
<textarea matInput formControlName="description"></textarea>
<textarea matInput formControlName="description" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -19,8 +19,8 @@
</mat-card-content>
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../']">Cancel</button>
<button mat-raised-button color="accent" [disabled]="!activateSavingsAccountForm.valid">Confirm</button>
<button type="button" mat-raised-button [routerLink]="['../../transactions']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!activateSavingsAccountForm.valid">Confirm</button>
</mat-card-actions>
</form>
@@ -79,7 +79,7 @@ export class ActivateSavingsAccountComponent implements OnInit {
locale
};
this.savingsService.executeSavingsAccountCommand(this.accountId, 'activate', data).subscribe(() => {
this.router.navigate(['../../'], { relativeTo: this.route });
this.router.navigate(['../../transactions'], { relativeTo: this.route });
});
}
@@ -80,7 +80,7 @@
</div>
<mat-card-actions fxLayoutGap="5px" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center">
<button type="button" mat-raised-button [routerLink]="['../../']">Cancel</button>
<button type="button" mat-raised-button [routerLink]="['../../transactions']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!savingsChargeForm.valid">Submit</button>
</mat-card-actions>
@@ -135,7 +135,7 @@ export class AddChargeSavingsAccountComponent implements OnInit {
}
}
this.savingsService.createSavingsCharge(this.savingAccountId, 'charges', savingsCharge).subscribe( () => {
this.router.navigate(['../../'], { relativeTo: this.route });
this.router.navigate(['../../transactions'], { relativeTo: this.route });
});
}
@@ -20,7 +20,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -29,7 +29,7 @@
<mat-card-actions fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center" fxLayoutGap="5px">
<button type="button" mat-raised-button [routerLink]="['../../']">Cancel</button>
<button mat-raised-button color="accent" [disabled]="!approveSavingsAccountForm.valid">Confirm</button>
<button mat-raised-button color="primary" [disabled]="!approveSavingsAccountForm.valid">Confirm</button>
</mat-card-actions>
</form>
@@ -80,7 +80,7 @@ export class ApproveSavingsAccountComponent implements OnInit {
locale
};
this.savingsService.executeSavingsAccountCommand(this.accountId, 'approve', data).subscribe(() => {
this.router.navigate(['../../'], { relativeTo: this.route });
this.router.navigate(['../../transactions'], { relativeTo: this.route });
});
}
@@ -43,11 +43,14 @@
</mat-select>
</mat-form-field>
<div fxLayoutGap="5px" fxLayout="row" fxLayout.xs="column" class="m-t-10">
<mat-label fxFlexAlign="center">Show Payment Details</mat-label>
<button type="button" mat-mini-fab color="primary" (click)="addPaymentDetails()">
<fa-icon [icon]="!addPaymentDetailsFlag ? 'plus-circle' : 'minus-circle'" size="lg"></fa-icon>
</button>
<div fxFlexFill>
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle [(ngModel)]="showPaymentDetails">
<div [className]="showPaymentDetails ? 'enabled' : 'disabled'">
<span class="m-l-10">Show Payment Details</span>
</div>
</mat-slide-toggle>
</span>
</div>
<mat-form-field *ngIf="closeSavingsAccountForm.controls['accountNumber']">
@@ -79,7 +82,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -80,7 +80,7 @@ export class PostInterestAsOnSavingsAccountComponent implements OnInit {
locale
};
this.savingsService.executeSavingsAccountTransactionsCommand(this.accountId, 'postInterestAsOn', data).subscribe(() => {
this.router.navigate(['../../'], { relativeTo: this.route });
this.router.navigate(['../../transactions'], { relativeTo: this.route });
});
}
@@ -20,7 +20,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -89,7 +89,7 @@ export class SavingsAccountAssignStaffComponent implements OnInit {
locale
};
this.savingsService.executeSavingsAccountCommand(this.accountId, 'assignSavingsOfficer', data).subscribe(() => {
this.router.navigate(['../../'], { relativeTo: this.route });
this.router.navigate(['../../transactions'], { relativeTo: this.route });
});
}
@@ -37,11 +37,14 @@
</mat-select>
</mat-form-field>
<div fxLayoutGap="5px" fxLayout="row" fxLayout.xs="column">
<mat-label fxFlexAlign="center">Show Payment Details</mat-label>
<button type="button" mat-mini-fab color="primary" (click)="addPaymentDetails()">
<fa-icon [icon]="!addPaymentDetailsFlag ? 'plus-circle' : 'minus-circle'" size="lg"></fa-icon>
</button>
<div fxFlexFill>
<span fxFlex="75%" class="expandcollapsebutton m-l-10 m-t-40" (click)="addPaymentDetails()">
<mat-slide-toggle [(ngModel)]="addPaymentDetailsFlag">
<div [className]="addPaymentDetailsFlag ? 'enabled' : 'disabled'">
<span class="m-l-10">Show Payment Details</span>
</div>
</mat-slide-toggle>
</span>
</div>
<mat-form-field *ngIf="savingAccountTransactionForm.controls['accountNumber']">
@@ -75,7 +78,7 @@
</mat-form-field>
<mat-card-actions fxLayoutGap="5px" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center">
<button type="button" mat-raised-button [routerLink]="['../../']">Cancel</button>
<button type="button" mat-raised-button [routerLink]="['../../transactions']">Cancel</button>
<button mat-raised-button color="primary" [disabled]="!savingAccountTransactionForm.valid">Submit</button>
</mat-card-actions>
@@ -121,7 +121,7 @@ export class SavingsAccountTransactionsComponent implements OnInit {
locale
};
this.savingsService.executeSavingsAccountTransactionsCommand(this.savingAccountId, this.transactionCommand, data).subscribe(res => {
this.router.navigate(['../../'], { relativeTo: this.route });
this.router.navigate(['../../transactions'], { relativeTo: this.route });
});
}
}
@@ -79,7 +79,7 @@ export class SavingsAccountUnassignStaffComponent implements OnInit {
locale
};
this.savingsService.executeSavingsAccountCommand(this.accountId, 'unassignSavingsOfficer', data).subscribe(() => {
this.router.navigate(['../../'], { relativeTo: this.route });
this.router.navigate(['../../transactions'], { relativeTo: this.route });
});
}
@@ -8,7 +8,7 @@
<mat-form-field fxFlex>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</mat-card-content>
@@ -59,7 +59,7 @@ export class UndoApprovalSavingsAccountComponent implements OnInit {
...this.undoApprovalSavingsAccountForm.value,
};
this.savingsService.executeSavingsAccountCommand(this.accountId, 'undoapproval', data).subscribe(() => {
this.router.navigate(['../../'], { relativeTo: this.route });
this.router.navigate(['../../transactions'], { relativeTo: this.route });
});
}
@@ -20,7 +20,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -6,91 +6,117 @@
<div class="profile-image-container">
<div>
<img mat-card-md-image class="profile-image"
matTooltip="Savings Account"
<img mat-card-md-image class="profile-image" matTooltip="Savings Account"
[src]="'assets/images/savings_account_placeholder.png'">
</div>
</div>
<div class="mat-typography account-card-title">
<mat-card-title>
<h3>
<i class="fa fa-stop" [ngClass]="savingsAccountData.status.code | statusLookup" [matTooltip]="savingsAccountData.status.value"></i>
Account Name : {{savingsAccountData.savingsProductName}}
<mat-card-title fxLayout="row" fxLayout.lt-md="column">
<h3 fxFlex="95%">
<i class="fa fa-stop" [ngClass]="savingsAccountData.status.code | statusLookup"
[matTooltip]="savingsAccountData.status.value"></i>
Savings Product : {{savingsAccountData.savingsProductName}}<span class="m-l-10">({{savingsAccountData.accountNo}})</span>
</h3>
<div fxFlex="5%">
<button mat-icon-button [matMenuTriggerFor]="accountMenu" aria-label="Loan account 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>
<p>
Account #: {{savingsAccountData.accountNo}} | {{entityType}} Name: {{savingsAccountData.clientName || savingsAccountData.groupName}}<br/>
{{entityType}} Name: {{savingsAccountData.clientName || savingsAccountData.groupName}}
<span class="m-l-10" *ngIf="savingsAccountData.clientAccountNo">({{savingsAccountData.clientAccountNo}})</span><br />
<span *ngIf="!savingsAccountData.status.rejected && !savingsAccountData.status.submittedAndPendingApproval">
Current Balances: {{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.accountBalance | number}}<br/>
Available Balance: {{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.availableBalance | number}}<br/>
Current Balances:
{{savingsAccountData.currency.displaySymbol}}<span class="m-l-10">{{savingsAccountData.summary.accountBalance |
number}}</span><br />
Available Balance:
{{savingsAccountData.currency.displaySymbol}}<span class="m-l-10">{{savingsAccountData.summary.availableBalance |
number}}</span>
</span>
</p>
</mat-card-subtitle>
</div>
<mat-menu #accountMenu="matMenu">
<ng-container *ngFor="let item of buttonConfig.singleButtons">
<button mat-menu-item *mifosxHasPermission="item.taskPermissionName" (click)="doAction(item.name)">
<mat-icon matListIcon>
<fa-icon icon="{{item.icon}}" size="sm"></fa-icon>
</mat-icon>
<span> {{item.name}} </span>
</button>
</ng-container>
<ng-container *ngIf="buttonConfig.options">
<button mat-menu-item [matMenuTriggerFor]="More">More</button>
<mat-menu #More="matMenu">
<span *ngFor="let option of buttonConfig.options">
<button mat-menu-item *mifosxHasPermission="option.taskPermissionName"
(click)="doAction(option.name)">{{option.name}}</button>
</span>
</mat-menu>
</ng-container>
</mat-menu>
</mat-card-title-group>
<mat-card-actions class="account-actions">
<ng-container *ngFor="let button of buttonConfig.singleButtons">
<button mat-raised-button *mifosxHasPermission="button.taskPermissionName" (click)="doAction(button.name)">
<i ngClass="{{button.icon}}"></i> {{button.name}}</button>
</ng-container>
<ng-container *ngIf="buttonConfig.options">
<button mat-raised-button [matMenuTriggerFor]="More">More</button>
<mat-menu #More="matMenu">
<span *ngFor="let option of buttonConfig.options">
<button mat-menu-item *mifosxHasPermission="option.taskPermissionName" (click)="doAction(option.name)">{{option.name}}</button>
</span>
</mat-menu>
</ng-container>
</mat-card-actions>
</mat-card-header>
<mat-card-content class="content">
<div class="savings-account-tables" fxLayout="row" fxLayoutGap="2%">
<div fxFlex="49%" *ngIf="!savingsAccountData.status.rejected && !savingsAccountData.status.submittedAndPendingApproval; else alternateSummary">
<div fxFlex="49%"
*ngIf="!savingsAccountData.status.rejected && !savingsAccountData.status.submittedAndPendingApproval; else alternateSummary">
<h4 class="table-headers">Account Summary</h4>
<table>
<tbody>
<tr *ngIf="savingsAccountData.summary.totalWithdrawals">
<td>Total Withdrawls</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalWithdrawals | number}}</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalWithdrawals |
number}}</td>
</tr>
<tr *ngIf="savingsAccountData.summary.totalWithdrawalFees">
<td>Withdrawals Fees</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalWithdrawalFees | number}}</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalWithdrawalFees |
number}}</td>
</tr>
<tr *ngIf="savingsAccountData.summary.totalAnnualFees">
<td>Annual Fees</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalAnnualFees | number}}</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalAnnualFees |
number}}</td>
</tr>
<tr *ngIf="savingsAccountData.summary.totalInterestEarned >= 0">
<td>Interest Earned</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalInterestEarned | number}}</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalInterestEarned |
number}}</td>
</tr>
<tr *ngIf="savingsAccountData.summary.totalInterestPosted">
<td>Interest Posted</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalInterestPosted | number}}</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalInterestPosted |
number}}</td>
</tr>
<tr *ngIf="savingsAccountData.summary.interestNotPosted >= 0">
<td>Interest Earned Not Posted</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.interestNotPosted | number}}</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.interestNotPosted |
number}}</td>
</tr>
<tr *ngIf="savingsAccountData.summary.totalOverdraftInterestDerived">
<td>Interest On Overdraft</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalOverdraftInterestDerived | number}}</td>
<td>
{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalOverdraftInterestDerived
| number}}</td>
</tr>
<tr *ngIf="savingsAccountData.summary.interestNotPosted < 0">
<td>Overdraft Interest Not Posted</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.interestNotPosted | number}}</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.interestNotPosted |
number}}</td>
</tr>
<tr>
<td>Nominal Interest Rate</td>
@@ -114,11 +140,12 @@
</tr>
<tr *ngIf="savingsAccountData.withdrawalFee">
<td>Withdrawal Fee</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.withdrawalFee.amount | number}}</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.withdrawalFee.amount |
number}}</td>
</tr>
<tr *ngIf="savingsAccountData.lastActiveTransactionDate">
<td>Last Active Transaction Date</td>
<td>{{savingsAccountData.lastActiveTransactionDate | dateFormat}}</td>
<td>{{savingsAccountData.lastActiveTransactionDate | dateFormat}}</td>
</tr>
<tr *ngIf="!(savingsAccountData.subStatus.id === 0)">
<td>Substatus</td>
@@ -138,7 +165,8 @@
</tr>
<tr *ngIf="savingsAccountData.annualFee">
<td>Annual Fee</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.annualFee.amount | number}}</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.annualFee.amount | number}}
</td>
</tr>
<tr *ngIf="savingsAccountData.allowOverdraft">
<td>Over Draft Limit</td>
@@ -162,7 +190,7 @@
</tr>
<tr *ngIf="savingsAccountData.summary.lastInterestCalculationDate">
<td>Interest Recalculation Date</td>
<td>{{savingsAccountData.summary.lastInterestCalculationDate | dateFormat}}</td>
<td>{{savingsAccountData.summary.lastInterestCalculationDate | dateFormat}}</td>
</tr>
<tr *ngIf="savingsAccountData.onHoldFunds">
<td>On Hold Funds</td>
@@ -177,13 +205,14 @@
</div>
<ng-template #alternateSummary>
<div fxFlex="49%" >
<div fxFlex="49%">
<h4 class="table-headers">Account Summary</h4>
<table>
<tbody>
<tr>
<td>Activated On</td>
<td>{{savingsAccountData.timeline.activatedOnDate ? (savingsAccountData.timeline.activatedOnDate | dateFormat) : 'Not Activated'}}</td>
<td>{{savingsAccountData.timeline.activatedOnDate ? (savingsAccountData.timeline.activatedOnDate |
dateFormat) : 'Not Activated'}}</td>
</tr>
<tr>
<td>Currency</td>
@@ -200,13 +229,15 @@
<div fxFlex="49%" fxLayout="column" fxLayoutGap="4%">
<div *ngIf="!savingsAccountData.status.rejected && !savingsAccountData.status.submittedAndPendingApproval; else alternateDetails">
<div
*ngIf="!savingsAccountData.status.rejected && !savingsAccountData.status.submittedAndPendingApproval; else alternateDetails">
<h4 class="table-headers">Savings Details</h4>
<table>
<tbody>
<tr>
<td>Activated On</td>
<td>{{savingsAccountData.timeline.activatedOnDate ? (savingsAccountData.timeline.activatedOnDate | dateFormat) : 'Not Activated'}}</td>
<td>{{savingsAccountData.timeline.activatedOnDate ? (savingsAccountData.timeline.activatedOnDate |
dateFormat) : 'Not Activated'}}</td>
</tr>
<tr>
<td>Field Officer</td>
@@ -252,11 +283,13 @@
<tbody>
<tr *ngIf="savingsAccountData.summary.totalDeposits">
<td>Total Deposits</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalDeposits | number}}</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalDeposits |
number}}</td>
</tr>
<tr *ngIf="savingsAccountData.summary.totalInterestEarned >= 0">
<td>Total Interest Earned</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalInterestEarned | number}}</td>
<td>{{savingsAccountData.currency.displaySymbol}}&nbsp;{{savingsAccountData.summary.totalInterestEarned
| number}}</td>
</tr>
</tbody>
</table>
@@ -268,23 +301,24 @@
<nav mat-tab-nav-bar class="navigation-tabs">
<a mat-tab-link [routerLink]="['./transactions']" routerLinkActive #transactions="routerLinkActive"
[active]="transactions.isActive">
[active]="transactions.isActive">
Transactions
</a>
<a mat-tab-link [routerLink]="['./charges']" routerLinkActive #charges="routerLinkActive"
[active]="charges.isActive">
[active]="charges.isActive">
Charges
</a>
<ng-container *mifosxHasPermission="'READ_SAVINGSACCOUNTCHARGE'">
<a mat-tab-link [routerLink]="['./standing-instructions']" routerLinkActive #standingInstructions="routerLinkActive"
[active]="standingInstructions.isActive" *ngIf="savingsAccountData.clientId">
<a mat-tab-link [routerLink]="['./standing-instructions']" routerLinkActive
#standingInstructions="routerLinkActive" [active]="standingInstructions.isActive"
*ngIf="savingsAccountData.clientId">
Standing Instructions
</a>
</ng-container>
<ng-container *ngFor="let savingsDatatable of savingsDatatables">
<a mat-tab-link *mifosxHasPermission="'READ_' + savingsDatatable.registeredTableName"
[routerLink]="['./datatables',savingsDatatable.registeredTableName]"
routerLinkActive #datatable="routerLinkActive" [active]="datatable.isActive">
[routerLink]="['./datatables',savingsDatatable.registeredTableName]" routerLinkActive
#datatable="routerLinkActive" [active]="datatable.isActive">
{{savingsDatatable.registeredTableName}}
</a>
</ng-container>
@@ -29,38 +29,38 @@ export class SavingsButtonsConfiguration {
switch (status) {
case 'Active':
this.buttonsArray = [
{
name: 'Post Interest As On',
icon: 'fa fa-arrow-right',
taskPermissionName: 'POSTINTEREST_SAVINGSACCOUNT',
},
{
name: 'Deposit',
icon: 'fa fa-arrow-up',
icon: 'arrow-up',
taskPermissionName: 'DEPOSIT_SAVINGSACCOUNT'
},
{
name: 'Withdraw',
icon: 'fa fa-arrow-down',
icon: 'arrow-down',
taskPermissionName: 'WITHDRAW_SAVINGSACCOUNT'
},
{
name: 'Calculate Interest',
icon: 'fa fa-table',
icon: 'table',
taskPermissionName: 'CALCULATEINTEREST_SAVINGSACCOUNT'
}
},
{
name: 'Post Interest As On',
icon: 'arrow-right',
taskPermissionName: 'POSTINTEREST_SAVINGSACCOUNT',
},
];
break;
case 'Submitted and pending approval':
this.buttonsArray = [
{
name: 'Modify Application',
icon: 'fa fa-pencil ',
icon: 'pen',
taskPermissionName: 'UPDATE_SAVINGSACCOUNT'
},
{
name: 'Approve',
icon: 'fa fa-check',
icon: 'check',
taskPermissionName: 'APPROVE_SAVINGSACCOUNT'
}
];
@@ -69,17 +69,17 @@ export class SavingsButtonsConfiguration {
this.buttonsArray = [
{
name: 'Undo Approval',
icon: 'fa fa-undo',
icon: 'undo',
taskPermissionName: 'APPROVALUNDO_SAVINGSACCOUNT'
},
{
name: 'Activate',
icon: 'fa fa-check',
icon: 'check',
taskPermissionName: 'ACTIVATE_SAVINGSACCOUNT'
},
{
name: 'Add Charge',
icon: 'fa fa-plus',
icon: 'plus',
taskPermissionName: 'CREATE_SAVINGSACCOUNTCHARGE'
}
];
+12 -2
View File
@@ -22,6 +22,7 @@ import {
faChevronLeft,
faChevronRight,
faCircle,
faHeartBroken,
faClock,
faCloud,
faCog,
@@ -76,6 +77,7 @@ import {
faUser,
faUsers,
faUserShield,
faUserTie,
faDownload,
faUpload,
faCloudDownloadAlt,
@@ -97,7 +99,10 @@ import {
faIdBadge,
faAddressCard,
faKeyboard,
faInfo
faInfo,
faTasks,
faCoins,
faPiggyBank
} from '@fortawesome/free-solid-svg-icons';
/**
@@ -130,6 +135,7 @@ export class IconsModule {
faChevronLeft,
faChevronRight,
faCircle,
faHeartBroken,
faClock,
faCloud,
faCog,
@@ -184,6 +190,7 @@ export class IconsModule {
faUser,
faUsers,
faUserShield,
faUserTie,
faDownload,
faUpload,
faCloudDownloadAlt,
@@ -205,7 +212,10 @@ export class IconsModule {
faIdBadge,
faAddressCard,
faKeyboard,
faInfo
faInfo,
faTasks,
faCoins,
faPiggyBank
);
}
@@ -20,7 +20,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -20,7 +20,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -20,7 +20,7 @@
<mat-form-field>
<mat-label>Note</mat-label>
<textarea matInput formControlName="note"></textarea>
<textarea matInput formControlName="note" cdkTextareaAutosize cdkAutosizeMinRows="2"></textarea>
</mat-form-field>
</div>
@@ -23,16 +23,12 @@
</mat-select>
</mat-form-field>
<div>
<mat-checkbox labelPosition="before" formControlName="mandatory">Mandatory</mat-checkbox>
</div>
<mat-form-field>
<mat-form-field *ngIf="columnForm.value.type === 'String'">
<mat-label>Column Length</mat-label>
<input matInput required type="number" formControlName="length">
</mat-form-field>
<mat-form-field>
<mat-form-field *ngIf="columnForm.value.type === 'Dropdown'">
<mat-label>Column Code</mat-label>
<mat-select required formControlName="code">
<mat-option *ngFor="let columnCode of data.columnCodes" [value]="columnCode.name">
@@ -41,6 +37,18 @@
</mat-select>
</mat-form-field>
<div>
<mat-checkbox labelPosition="after" formControlName="mandatory">Mandatory</mat-checkbox>
</div>
<div>
<mat-checkbox labelPosition="after" formControlName="unique">Unique</mat-checkbox>
</div>
<div>
<mat-checkbox labelPosition="after" formControlName="indexed">Indexed</mat-checkbox>
</div>
</div>
</form>
@@ -37,9 +37,11 @@ export class ColumnDialogComponent implements OnInit {
this.columnForm = this.formBuilder.group({
'name': [this.data ? this.data.columnName : '', Validators.required],
'type': [{ value: this.data ? (this.data.columnDisplayType === '' ? '' : this.getColumnType(this.data.columnDisplayType)) : '', disabled: this.data.type === 'existing' }, Validators.required],
'length': [{ value: this.data ? + this.data.columnLength : '', disabled: this.getColumnType(this.data.columnDisplayType) !== 'String' || this.data.type === 'existing' }, Validators.required],
'mandatory': [{ value: this.data.isColumnNullable, disabled: this.data.type === 'existing' }],
'length': [{ value: this.data ? +this.data.columnLength : '', disabled: this.getColumnType(this.data.columnDisplayType) !== 'String' || this.data.type === 'existing' }, Validators.required],
'code': [{ value: this.data ? this.data.columnCode : '', disabled: this.getColumnType(this.data.columnDisplayType) !== 'Dropdown' || this.data.type === 'existing' }, Validators.required]
'unique': [{ value: this.data.isColumnUnique, disabled: this.data.isColumnNullable || this.data.type === 'existing' }],
'indexed': [{ value: this.data.isColumnIndexed, disabled: this.data.type === 'existing' }],
'code': [{ value: this.data ? this.data.columnCode : '', disabled: this.getColumnType(this.data.columnDisplayType) !== 'Dropdown' || this.data.type === 'existing' }, Validators.required],
});
this.onColumnTypeChanges();
}

Some files were not shown because too many files have changed in this diff Show More